diff --git a/.rubocop.yml b/.rubocop.yml index 100e331cb..b1ceb5312 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -8,6 +8,7 @@ AllCops: - 'db/whois_schema.rb' - 'db/api_log_schema.rb' - 'db/migrate/*' + - 'db/data/*' # epp support files until 'complexity issues' will be solved - 'spec/support/epp.rb' - 'spec/support/epp_contact_xml_builder.rb' diff --git a/CHANGELOG.md b/CHANGELOG.md index 04d4a0053..632975037 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +16.06.2015 + +* Application time_zone should be defined at application.yml, updated application-exaple.yml + +15.06.2015 + +* Apache config update: now only TLSv1.2 allowed with whitelisted chipers, please review all SSL config parameters + +08.06.2015 + +* Add sk service name to application.yml +* Renew zonefile procedure + +02.06.2015 + +* Added possibility to overwrite legal document types at application.yml level. + 01.06.2015 * Added separate data update, all data migration locate at db/data, more info 'rake -T data' @@ -8,6 +25,11 @@ 26.05.2015 +* Added separate data update, all data migration locate at db/data, more info 'rake -T data' + +29.05.2015 + +* Removed old 'iptables_counter_update_command' and added 'iptables_counter_enabled' * Updated deploy script, now staging comes from staging branch 25.05.2015 diff --git a/Gemfile b/Gemfile index 4776ba7ab..e040fcac8 100644 --- a/Gemfile +++ b/Gemfile @@ -38,6 +38,7 @@ gem 'nprogress-rails', '~> 0.1.6.7' # visual loader gem 'html5_validators', '~> 1.2.0' # model requements now automatically on html form gem 'coderay', '~> 1.1.0' # xml console visualize gem 'select2-rails', '~> 3.5.9.3' # for autocomplete +gem 'bootstrap-datepicker-rails', '~> 1.3.1.1' # datepicker # rights gem 'devise', '~> 3.4.1' # authenitcation @@ -50,10 +51,11 @@ gem 'jbuilder', '~> 2.2.6' # json api # registry specfic gem 'simpleidn', '~> 0.0.5' # For punycode gem 'isikukood' # for EE-id validation +gem 'money-rails', '~> 1.4.1' # deploy gem 'whenever', '~> 0.9.4', require: false -gem 'data_migrate', +gem 'data_migrate', github: 'gitlabeu/data_migrate', ref: '35d22b09ff37a4e9d61ab326ad5d8eb0edf1fc81' @@ -70,10 +72,14 @@ gem 'deep_cloneable', '~> 2.1.1' gem 'digidoc_client', '~> 0.2.1' # epp -gem 'epp', '~> 1.4.2', github: 'gitlabeu/epp' -gem 'epp-xml', '~> 0.10.4' # EPP XMLs +gem 'epp', '~> 1.4.2', github: 'internetee/epp' +gem 'epp-xml', '~> 1.0.3' # EIS EPP XMLs gem 'uuidtools', '~> 2.1.4' # For unique IDs (used by the epp gem) +# que +gem 'que', '~> 0.10.0' +gem 'que-web', '~> 0.4.0' + # for importing legacy db gem 'activerecord-import', '~> 0.7.0' # for inserting dummy data diff --git a/Gemfile.lock b/Gemfile.lock index f1e5e2863..463b6afad 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -16,14 +16,6 @@ GIT data_migrate (1.3.0) rails (>= 4.1.0) -GIT - remote: git://github.com/gitlabeu/epp.git - revision: 505c3f2739eb1da918e54111aecfb138a822739d - specs: - epp (1.4.2) - hpricot - libxml-ruby - GIT remote: git://github.com/haml/html2haml.git revision: 6984f50bdbbd6291535027726a5697f28778ee8d @@ -35,6 +27,14 @@ GIT nokogiri (~> 1.6.0) ruby_parser (~> 3.5) +GIT + remote: git://github.com/internetee/epp.git + revision: 505c3f2739eb1da918e54111aecfb138a822739d + specs: + epp (1.4.2) + hpricot + libxml-ruby + GEM remote: https://rubygems.org/ specs: @@ -76,18 +76,18 @@ GEM thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) addressable (2.3.8) - akami (1.3.0) + akami (1.3.1) gyoku (>= 0.4.0) nokogiri arel (6.0.0) ast (2.0.0) astrolabe (1.3.0) parser (>= 2.2.0.pre.3, < 3.0) - autodoc (0.4.4) + autodoc (0.5.0) actionpack activesupport (>= 3.0.0) rspec - autoprefixer-rails (5.1.11) + autoprefixer-rails (5.2.0.1) execjs json axiom-types (0.1.1) @@ -101,6 +101,8 @@ GEM rack (>= 0.9.0) binding_of_caller (0.7.2) debug_inspector (>= 0.0.1) + bootstrap-datepicker-rails (1.3.1.1) + railties (>= 3.0) bootstrap-sass (3.3.4.1) autoprefixer-rails (>= 5.0.0.1) sass (>= 3.2.19) @@ -116,9 +118,9 @@ GEM slim (>= 1.3.6, < 3.0) terminal-table (~> 1.4) builder (3.2.2) - bullet (4.14.4) + bullet (4.14.7) activesupport (>= 3.0.0) - uniform_notifier (>= 1.6.0) + uniform_notifier (~> 1.9.0) bundler-audit (0.3.1) bundler (~> 1.2) thor (~> 0.18) @@ -142,7 +144,7 @@ GEM coffee-script (2.4.1) coffee-script-source execjs - coffee-script-source (1.9.1) + coffee-script-source (1.9.1.1) countries (0.10.0) currencies (~> 0.4.2) crack (0.4.2) @@ -169,18 +171,18 @@ GEM nokogiri (>= 1.4.0) savon (>= 2.4.0) docile (1.1.5) - epp-xml (0.10.4) + epp-xml (1.0.3) activesupport (~> 4.1) builder (~> 3.2) equalizer (0.0.11) erubis (2.7.0) - execjs (2.5.0) + execjs (2.5.2) fabrication (2.12.2) faker (1.3.0) i18n (~> 0.5) fastercsv (1.5.5) ffi (1.9.8) - figaro (1.1.0) + figaro (1.1.1) thor (~> 0.14) flay (2.4.0) ruby_parser (~> 3.0) @@ -189,7 +191,7 @@ GEM ruby_parser (~> 3.1, > 3.1.0) sexp_processor (~> 4.4) formatador (0.2.5) - globalid (0.3.3) + globalid (0.3.5) activesupport (>= 4.1.0) grape (0.10.1) activesupport @@ -225,34 +227,33 @@ GEM haml (>= 4.0.6, < 5.0) html2haml (>= 1.0.1) railties (>= 4.0.1) - hashie (3.4.1) + hashie (3.4.2) hashie-forbidden_attributes (0.1.1) hashie (>= 3.0) highline (1.6.21) - hike (1.2.3) hitimes (1.2.2) hpricot (0.8.6) html5_validators (1.2.0) httpclient (2.6.0.1) - httpi (2.4.0) + httpi (2.4.1) rack i18n (0.7.0) ice_nine (0.11.1) isikukood (0.1.2) - iso8601 (0.8.5) - jbuilder (2.2.12) + iso8601 (0.8.6) + jbuilder (2.2.16) activesupport (>= 3.0.0, < 5) multi_json (~> 1.2) - jquery-rails (4.0.3) + jquery-rails (4.0.4) rails-dom-testing (~> 1.0) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - jquery-ui-rails (5.0.3) + jquery-ui-rails (5.0.5) railties (>= 3.2.16) jquery-validation-rails (1.13.1) railties (>= 3.2, < 5.0) thor (~> 0.14) - json (1.8.2) + json (1.8.3) kaminari (0.16.3) actionpack (>= 3.0.0) activesupport (>= 3.0.0) @@ -261,37 +262,44 @@ GEM addressable (~> 2.3) libv8 (3.16.14.7) libxml-ruby (2.8.0) - listen (2.10.0) + listen (2.10.1) celluloid (~> 0.16.0) rb-fsevent (>= 0.9.3) rb-inotify (>= 0.9) - loofah (2.0.1) + loofah (2.0.2) nokogiri (>= 1.5.9) lumberjack (1.0.9) - macaddr (1.7.1) - systemu (~> 2.6.2) mail (2.6.3) mime-types (>= 1.16, < 3) method_source (0.8.2) - mime-types (2.4.3) + mime-types (2.6.1) mina (0.3.4) open4 (~> 1.3.4) rake mini_portile (0.6.2) - minitest (5.5.1) - multi_json (1.11.0) + minitest (5.7.0) + monetize (1.1.0) + money (~> 6.5.0) + money (6.5.1) + i18n (>= 0.6.4, <= 0.7.0) + money-rails (1.4.1) + activesupport (>= 3.0) + monetize (~> 1.1.0) + money (~> 6.5.0) + railties (>= 3.0) + multi_json (1.11.1) multi_xml (0.5.5) newrelic_rpm (3.9.9.275) nokogiri (1.6.6.2) mini_portile (~> 0.6.0) - nori (2.5.0) + nori (2.6.0) nprogress-rails (0.1.6.7) open4 (1.3.4) orm_adapter (0.5.0) - parser (2.2.0.3) + parser (2.3.0.pre.2) ast (>= 1.1, < 3.0) pdfkit (0.6.2) - pg (0.18.1) + pg (0.18.2) phantomjs (1.9.7.1) phantomjs-binaries (1.9.2.4) sys-uname (= 0.9.0) @@ -307,11 +315,18 @@ GEM coderay (~> 1.1.0) method_source (~> 0.8.1) slop (~> 3.4) - rack (1.6.0) + que (0.10.0) + que-web (0.4.0) + erubis + que (~> 0.8) + sinatra + rack (1.6.4) rack-accept (0.4.5) rack (>= 0.4) rack-mount (0.8.3) rack (>= 1.0.0) + rack-protection (1.5.3) + rack rack-test (0.6.3) rack (>= 1.0) railroady (1.3.0) @@ -350,7 +365,7 @@ GEM activesupport (>= 3.0) i18n polyamorous (~> 1.1) - rb-fsevent (0.9.4) + rb-fsevent (0.9.5) rb-inotify (0.9.5) ffi (>= 0.5.0) rdoc (4.2.0) @@ -390,7 +405,7 @@ GEM rainbow (>= 1.99.1, < 3.0) ruby-progressbar (~> 1.4) ruby-progressbar (1.7.5) - ruby2ruby (2.1.3) + ruby2ruby (2.1.4) ruby_parser (~> 3.1) sexp_processor (~> 4.0) ruby_parser (3.5.0) @@ -403,21 +418,20 @@ GEM ruby2ruby (>= 2.1.1, < 3.0) virtus (~> 1.0) safe_yaml (1.0.4) - sass (3.4.13) + sass (3.4.14) sass-rails (5.0.3) railties (>= 4.0.0, < 5.0) sass (~> 3.1) sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (~> 1.1) - savon (2.11.0) + savon (2.11.1) akami (~> 1.2) builder (>= 2.1.2) gyoku (~> 1.2) httpi (~> 2.3) nokogiri (>= 1.4.0) nori (~> 2.4) - uuid (~> 2.3.7) wasabi (~> 3.4) sdoc (0.4.1) json (~> 1.7, >= 1.7.7) @@ -425,7 +439,7 @@ GEM select2-rails (3.5.9.3) thor (~> 0.14) selectize-rails (0.12.1) - sexp_processor (4.5.0) + sexp_processor (4.6.0) shoulda-matchers (2.6.2) activesupport (>= 3.0.0) simplecov (0.9.2) @@ -434,25 +448,25 @@ GEM simplecov-html (~> 0.9.0) simplecov-html (0.9.0) simpleidn (0.0.5) + sinatra (1.4.6) + rack (~> 1.4) + rack-protection (~> 1.4) + tilt (>= 1.3, < 3) slim (2.1.0) temple (~> 0.6.9) tilt (>= 1.3.3, < 2.1) slop (3.6.0) - spring (1.3.4) + spring (1.3.6) spring-commands-rspec (1.0.4) spring (>= 0.9.1) - sprockets (2.12.3) - hike (~> 1.2) - multi_json (~> 1.0) + sprockets (3.2.0) rack (~> 1.0) - tilt (~> 1.1, != 1.3.0) - sprockets-rails (2.2.4) + sprockets-rails (2.3.1) actionpack (>= 3.0) activesupport (>= 3.0) sprockets (>= 2.8, < 4.0) sys-uname (0.9.0) ffi (>= 1.0.0) - systemu (2.6.5) temple (0.6.10) terminal-table (1.4.5) therubyracer (0.12.2) @@ -472,13 +486,11 @@ GEM uglifier (2.7.1) execjs (>= 0.3.0) json (>= 1.8.0) - unicorn (4.8.3) + unicorn (4.9.0) kgio (~> 2.6) rack raindrops (~> 0.7) - uniform_notifier (1.8.0) - uuid (2.3.7) - macaddr (~> 1.0) + uniform_notifier (1.9.0) uuidtools (2.1.5) virtus (1.0.5) axiom-types (~> 0.1) @@ -506,6 +518,7 @@ DEPENDENCIES autodoc better_errors (~> 2.0.0) binding_of_caller (~> 0.7.2) + bootstrap-datepicker-rails (~> 1.3.1.1) bootstrap-sass (~> 3.3.4.1) brakeman (~> 2.6.2) bullet (~> 4.14.4) @@ -521,7 +534,7 @@ DEPENDENCIES devise (~> 3.4.1) digidoc_client (~> 0.2.1) epp (~> 1.4.2)! - epp-xml (~> 0.10.4) + epp-xml (~> 1.0.3) fabrication (~> 2.12.2) faker (~> 1.3.0) figaro (~> 1.1.0) @@ -543,6 +556,7 @@ DEPENDENCIES kaminari (~> 0.16.3) launchy (~> 2.4.3) mina (~> 0.3.1) + money-rails (~> 1.4.1) newrelic_rpm (~> 3.9.9.275) nokogiri (~> 1.6.6.2) nprogress-rails (~> 0.1.6.7) @@ -553,6 +567,8 @@ DEPENDENCIES phantomjs-binaries (~> 1.9.2.4) poltergeist (~> 1.5.1) pry (~> 0.10.1) + que (~> 0.10.0) + que-web (~> 0.4.0) railroady (~> 1.3.0) rails (= 4.2.1) rails-settings-cached (~> 0.4.1) diff --git a/README.md b/README.md index d5c6a34f3..01276c1e0 100644 --- a/README.md +++ b/README.md @@ -97,9 +97,10 @@ For Apache, registry admin goes to port 443 in production, /etc/apache2/sites-en SSLCertificateChainFile /etc/ssl/certs/your-chain-fail.pem SSLCACertificateFile /etc/ssl/certs/ca.pem - SSLProtocol TLSv1 + SSLProtocol -all +TLSv1.2 SSLHonorCipherOrder On - SSLCipherSuite RC4-SHA:HIGH:!ADH + SSLCompression off + SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH RewriteEnginriteEngine on RedirectMatch ^/$ /admin @@ -157,9 +158,10 @@ Registrar configuration (/etc/apache2/sites-enabled/registrar.conf) is as follow SSLCertificateChainFile /etc/ssl/certs/your-chain-fail.pem SSLCACertificateFile /etc/ssl/certs/ca.pem - SSLProtocol TLSv1 + SSLProtocol -all +TLSv1.2 SSLHonorCipherOrder On - SSLCipherSuite RC4-SHA:HIGH:!ADH + SSLCompression off + SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH RewriteEngine on RedirectMatch ^/$ /registrar @@ -240,9 +242,10 @@ Registrant configuration (/etc/apache2/sites-enabled/registrant.conf) is as foll SSLCertificateChainFile /etc/ssl/certs/your-chain-fail.pem SSLCACertificateFile /etc/ssl/certs/ca.pem - SSLProtocol TLSv1 + SSLProtocol -all +TLSv1.2 SSLHonorCipherOrder On - SSLCipherSuite RC4-SHA:HIGH:!ADH + SSLCompression off + SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH RewriteEngine on RedirectMatch ^/$ /registrant diff --git a/app/assets/javascripts/admin-manifest.coffee b/app/assets/javascripts/admin-manifest.coffee index 883a2aadc..df3af084c 100644 --- a/app/assets/javascripts/admin-manifest.coffee +++ b/app/assets/javascripts/admin-manifest.coffee @@ -2,8 +2,6 @@ #= require jquery_ujs #= require turbolinks #= require bootstrap-sprockets -#= require nprogress -#= require nprogress-turbolinks #= require typeahead.bundle.min #= require admin/autocomplete #= require jquery.nested_attributes @@ -12,6 +10,3 @@ #= require jquery-ui/datepicker #= require shared/general #= require admin/application - -NProgress.configure - showSpinner: false diff --git a/app/assets/javascripts/admin/application.coffee b/app/assets/javascripts/admin/application.coffee index 89c4a752d..523876df7 100644 --- a/app/assets/javascripts/admin/application.coffee +++ b/app/assets/javascripts/admin/application.coffee @@ -1,12 +1,16 @@ -ready = -> +$(document).on 'page:change', -> $('.selectize').selectize({ allowEmptyOption: true - }); + }) + + $('.js-datepicker').datepicker({ + showAnim: "", + autoclose: true, + dateFormat: "dd.mm.yy", + changeMonth: true, + changeYear: true + }) # client side validate all forms $('form').each -> $(this).validate() - - -$(document).ready(ready) -$(document).on('page:load', ready) diff --git a/app/assets/javascripts/registrar/application.coffee b/app/assets/javascripts/registrar/application.coffee index 91a5ce7fa..9dda64de6 100644 --- a/app/assets/javascripts/registrar/application.coffee +++ b/app/assets/javascripts/registrar/application.coffee @@ -1,4 +1,4 @@ -$(document).on 'ready page:load', -> +$(document).on 'page:change', -> # client side validate all forms $('form').each -> $(this).validate() diff --git a/app/assets/javascripts/shared/general.coffee b/app/assets/javascripts/shared/general.coffee index bbcbc970e..db6e371c3 100644 --- a/app/assets/javascripts/shared/general.coffee +++ b/app/assets/javascripts/shared/general.coffee @@ -1,3 +1,9 @@ +#= require nprogress +#= require nprogress-turbolinks + +NProgress.configure + showSpinner: false + @flash_notice = (msg) -> $('#flash').find('div').removeClass('bg-danger') $('#flash').find('div').addClass('bg-success') @@ -10,7 +16,7 @@ $('#flash').find('div').html(msg) $('#flash').show() -$(document).on 'ready page:load', -> +$(document).on 'page:change', -> today = new Date() tomorrow = new Date(today) tomorrow.setDate(today.getDate() + 1) @@ -20,7 +26,8 @@ $(document).on 'ready page:load', -> maxDate: tomorrow ) - $('.js-combobox').select2 - width: "100%" - selectOnBlur: true - dropdownAutoWidth: if self==top then true else false + if $('.js-combobox').length + $('.js-combobox').select2 + width: "100%" + selectOnBlur: true + dropdownAutoWidth: if self==top then true else false diff --git a/app/assets/stylesheets/admin-manifest.sass b/app/assets/stylesheets/admin-manifest.sass index c906f8c70..b93e65268 100644 --- a/app/assets/stylesheets/admin-manifest.sass +++ b/app/assets/stylesheets/admin-manifest.sass @@ -1,5 +1,6 @@ //= require 'shared/general-manifest' //= require 'admin/admin-bootstrap' +//= require 'jquery-ui/datepicker' @import shared/fonts @import shared/general @import nprogress @@ -7,4 +8,5 @@ @import typeaheadjs @import selectize @import selectize.bootstrap3 +// @import bootstrap-datepicker3 @import admin/admin diff --git a/app/assets/stylesheets/shared/general-bootstrap.sass b/app/assets/stylesheets/shared/general-bootstrap.sass index 29a605cb7..20c8c3336 100644 --- a/app/assets/stylesheets/shared/general-bootstrap.sass +++ b/app/assets/stylesheets/shared/general-bootstrap.sass @@ -65,3 +65,6 @@ .required:after content: "*" margin: 0 0 0 1px + +.not-required:after + content: '' diff --git a/app/assets/stylesheets/shared/general.sass b/app/assets/stylesheets/shared/general.sass index b0b11c9aa..586fa1538 100644 --- a/app/assets/stylesheets/shared/general.sass +++ b/app/assets/stylesheets/shared/general.sass @@ -57,3 +57,8 @@ body > .container .text-grey color: grey + +.partially-hidden + border: 1px solid #dddddd + padding-left: 4px + padding-right: 4px diff --git a/app/controllers/admin/admin_users_controller.rb b/app/controllers/admin/admin_users_controller.rb index 2a0d24689..17de2f97d 100644 --- a/app/controllers/admin/admin_users_controller.rb +++ b/app/controllers/admin/admin_users_controller.rb @@ -11,6 +11,10 @@ class Admin::AdminUsersController < AdminController @admin_user = AdminUser.new end + def show; end + + def edit; end + def create @admin_user = AdminUser.new(admin_user_params) @@ -23,12 +27,11 @@ class Admin::AdminUsersController < AdminController end end - def show; end - - def edit; end - def update - if @admin_user.update(admin_user_params) + params[:admin_user].delete(:password) if params[:admin_user][:password].blank? + params[:admin_user].delete(:password_confirmation) if params[:admin_user][:password_confirmation].blank? + + if @admin_user.update_attributes(admin_user_params) flash[:notice] = I18n.t('record_updated') redirect_to [:admin, @admin_user] else @@ -54,6 +57,7 @@ class Admin::AdminUsersController < AdminController end def admin_user_params - params.require(:admin_user).permit(:username, :password, :identity_code, :email, :country_code, { roles: [] }) + params.require(:admin_user).permit(:username, + :password, :password_confirmation, :identity_code, :email, :country_code, { roles: [] }) end end diff --git a/app/controllers/admin/api_users_controller.rb b/app/controllers/admin/api_users_controller.rb index be2170016..6e0dd7f0f 100644 --- a/app/controllers/admin/api_users_controller.rb +++ b/app/controllers/admin/api_users_controller.rb @@ -29,6 +29,7 @@ class Admin::ApiUsersController < AdminController def edit; end def update + params[:api_user].delete(:password) if params[:api_user][:password].blank? if @api_user.update(api_user_params) flash[:notice] = I18n.t('record_updated') redirect_to [:admin, @api_user] diff --git a/app/controllers/admin/domains_controller.rb b/app/controllers/admin/domains_controller.rb index 8c9e114b9..453fc179b 100644 --- a/app/controllers/admin/domains_controller.rb +++ b/app/controllers/admin/domains_controller.rb @@ -16,18 +16,36 @@ class Admin::DomainsController < AdminController end def update - add_prefix_to_statuses + dp = ignore_empty_statuses - if @domain.update(domain_params) + if @domain.update(dp) flash[:notice] = I18n.t('domain_updated') redirect_to [:admin, @domain] else - @domain.domain_statuses.build if @domain.domain_statuses.empty? + build_associations flash.now[:alert] = I18n.t('failed_to_update_domain') render 'edit' end end + def set_force_delete + if @domain.set_force_delete + flash[:notice] = I18n.t('domain_updated') + else + flash.now[:alert] = I18n.t('failed_to_update_domain') + end + redirect_to [:admin, @domain] + end + + def unset_force_delete + if @domain.unset_force_delete + flash[:notice] = I18n.t('domain_updated') + else + flash.now[:alert] = I18n.t('failed_to_update_domain') + end + redirect_to [:admin, @domain] + end + private def set_domain @@ -35,21 +53,23 @@ class Admin::DomainsController < AdminController end def domain_params - params.require(:domain).permit( - domain_statuses_attributes: [:id, :value, :description, :_destroy] - ) + if params[:domain] + params.require(:domain).permit({ statuses: [] }) + else + { statuses: [] } + end end def build_associations - @domain.domain_statuses.build if @domain.domain_statuses.empty? - @server_statuses = @domain.domain_statuses.select(&:server_status?) - @server_statuses << @domain.domain_statuses.build if @server_statuses.empty? + @server_statuses = @domain.statuses.select { |x| DomainStatus::SERVER_STATUSES.include?(x) } + @server_statuses = [nil] if @server_statuses.empty? + @other_statuses = @domain.statuses.select { |x| !DomainStatus::SERVER_STATUSES.include?(x) } end - def add_prefix_to_statuses - domain_params[:domain_statuses_attributes].each do |_k, hash| - hash[:value] = hash[:value].prepend('server') if hash[:value].present? - end + def ignore_empty_statuses + dp = domain_params + dp[:statuses].reject!(&:blank?) + dp end end diff --git a/app/controllers/admin/pricelists_controller.rb b/app/controllers/admin/pricelists_controller.rb new file mode 100644 index 000000000..f17b877fd --- /dev/null +++ b/app/controllers/admin/pricelists_controller.rb @@ -0,0 +1,45 @@ +class Admin::PricelistsController < AdminController + load_and_authorize_resource + before_action :set_pricelist, only: [:show, :edit, :update] + + def index + @q = Pricelist.search(params[:q]) + @pricelists = @q.result.page(params[:page]) + end + + def new + @pricelist = Pricelist.new + end + + def edit + end + + def create + @pricelist = Pricelist.new(pricelist_params) + + if @pricelist.save + redirect_to admin_pricelists_url + else + render 'new' + end + end + + def update + if @pricelist.update_attributes(pricelist_params) + redirect_to admin_pricelists_url + else + render 'edit' + end + end + + private + + def set_pricelist + @pricelist = Pricelist.find(params[:id]) + end + + def pricelist_params + params.require(:pricelist).permit(:operation_category, :category, :price_category, + :duration, :price, :valid_from, :valid_to) + end +end diff --git a/app/controllers/epp/contacts_controller.rb b/app/controllers/epp/contacts_controller.rb index ef5f81986..6685ed708 100644 --- a/app/controllers/epp/contacts_controller.rb +++ b/app/controllers/epp/contacts_controller.rb @@ -118,6 +118,9 @@ class Epp::ContactsController < EppController contact_org_disabled fax_disabled status_editing_disabled + if params[:parsed_frame].css('ident').present? + epp_errors << { code: '2306', msg: "#{I18n.t(:ident_update_error)} [ident]" } + end requires 'id' @prefix = nil end diff --git a/app/controllers/epp/domains_controller.rb b/app/controllers/epp/domains_controller.rb index 94a077758..9f7ffb6ec 100644 --- a/app/controllers/epp/domains_controller.rb +++ b/app/controllers/epp/domains_controller.rb @@ -56,7 +56,7 @@ class Epp::DomainsController < EppController @domain.attach_legal_document(Epp::Domain.parse_legal_document_from_frame(params[:parsed_frame])) @domain.save(validate: false) - if @domain.epp_destroy(params[:parsed_frame]) + if @domain.epp_destroy(params[:parsed_frame], current_user.id) if @domain.epp_pending_delete.present? render_epp_response '/epp/domains/success_pending' else @@ -77,7 +77,7 @@ class Epp::DomainsController < EppController end def renew - authorize! :renew, Epp::Domain + authorize! :renew, @domain handle_errors(@domain) and return unless @domain.renew( params[:parsed_frame].css('curExpDate').text, diff --git a/app/controllers/epp_controller.rb b/app/controllers/epp_controller.rb index 3a5211de5..8817e150e 100644 --- a/app/controllers/epp_controller.rb +++ b/app/controllers/epp_controller.rb @@ -1,9 +1,11 @@ class EppController < ApplicationController + include Iptable layout false protect_from_forgery with: :null_session skip_before_action :verify_authenticity_token before_action :generate_svtrid + before_action :latin_only before_action :validate_request before_action :update_epp_session helper_method :current_user @@ -92,6 +94,10 @@ class EppController < ApplicationController @errors.uniq! + # Requested by client, ticket #2688 + # Known issues: error request is exactly 1 second slower and server can handle less load + sleep 1 if !Rails.env.test? || !Rails.env.development? + render_epp_response '/epp/error' end @@ -101,6 +107,14 @@ class EppController < ApplicationController write_to_epp_log end + # VALIDATION + def latin_only + return true if params['frame'].blank? + return true if params['frame'].match(/\A[\p{Latin}\p{Z}\p{P}\p{S}\p{Cc}\p{Cf}\w_\'\+\-\.\(\)\/]*\Z/i) + render_epp_response '/epp/latin_error' + false + end + # VALIDATION def validate_request validation_method = "validate_#{params[:action]}" @@ -285,6 +299,8 @@ class EppController < ApplicationController # rubocop: enable Metrics/CyclomaticComplexity def iptables_counter_update - `ENV['iptables_counter_update_command']` if ENV['iptables_counter_update_command'].present? + return if ENV['iptables_counter_enabled'].blank? && ENV['iptables_counter_enabled'] != 'true' + return if current_user.blank? + counter_update(current_user.registrar_code, request.remote_ip) end end diff --git a/app/controllers/registrant/domain_delete_confirms_controller.rb b/app/controllers/registrant/domain_delete_confirms_controller.rb index 6cd0e1392..09e3bff58 100644 --- a/app/controllers/registrant/domain_delete_confirms_controller.rb +++ b/app/controllers/registrant/domain_delete_confirms_controller.rb @@ -1,12 +1,43 @@ class Registrant::DomainDeleteConfirmsController < RegistrantController - skip_before_action :authenticate_user!, only: [:show, :create] - skip_authorization_check only: [:show, :create] + skip_before_action :authenticate_user!, only: [:show, :update] + skip_authorization_check only: [:show, :update] def show + return if params[:confirmed] || params[:rejected] @domain = Domain.find(params[:id]) @domain = nil unless @domain.registrant_delete_confirmable?(params[:token]) end - def create + # # rubocop: disable Metrics/PerceivedComplexity + # # rubocop: disable Metrics/CyclomaticComplexity + def update + @domain = Domain.find(params[:id]) + unless @domain.registrant_delete_confirmable?(params[:token]) + flash[:alert] = t(:registrant_domain_verification_failed) + return render 'show' + end + + @registrant_verification = RegistrantVerification.new(domain_id: @domain.id, + domain_name: @domain.name, + verification_token: params[:token]) + if params[:rejected] + if @registrant_verification.domain_registrant_delete_reject! + flash[:notice] = t(:registrant_domain_verification_rejected) + redirect_to registrant_domain_delete_confirm_path(@domain.id, rejected: true) + else + flash[:alert] = t(:registrant_domain_verification_rejected_failed) + return render 'show' + end + elsif params[:confirmed] + if @registrant_verification.domain_registrant_delete_confirm! + flash[:notice] = t(:registrant_domain_verification_confirmed) + redirect_to registrant_domain_delete_confirm_path(@domain.id, confirmed: true) + else + flash[:alert] = t(:registrant_domain_verification_confirmed_failed) + return render 'show' + end + end end + # rubocop: enable Metrics/PerceivedComplexity + # rubocop: enable Metrics/CyclomaticComplexity end diff --git a/app/controllers/registrant/domain_update_confirms_controller.rb b/app/controllers/registrant/domain_update_confirms_controller.rb index 9830b5331..debe7294b 100644 --- a/app/controllers/registrant/domain_update_confirms_controller.rb +++ b/app/controllers/registrant/domain_update_confirms_controller.rb @@ -20,7 +20,6 @@ class Registrant::DomainUpdateConfirmsController < RegistrantController @registrant_verification = RegistrantVerification.new(domain_id: @domain.id, domain_name: @domain.name, verification_token: params[:token]) - if params[:rejected] if @registrant_verification.domain_registrant_change_reject! flash[:notice] = t(:registrant_domain_verification_rejected) diff --git a/app/controllers/registrant/sessions_controller.rb b/app/controllers/registrant/sessions_controller.rb index ee2eabffd..3d2ab7801 100644 --- a/app/controllers/registrant/sessions_controller.rb +++ b/app/controllers/registrant/sessions_controller.rb @@ -27,9 +27,10 @@ class Registrant::SessionsController < Devise::SessionsController @user = User.new end - def mid + def mid # rubocop: disable Metrics/MethodLength phone = params[:user][:phone] - client = Digidoc::Client.new + endpoint = "#{ENV['sk_digi_doc_service_endpoint']}" + client = Digidoc::Client.new(endpoint) if Rails.env.test? && phone == "123" @user = ApiUser.find_by(identity_code: "14212128025") diff --git a/app/controllers/registrar/invoices_controller.rb b/app/controllers/registrar/invoices_controller.rb index 3d8de5048..b33a315fd 100644 --- a/app/controllers/registrar/invoices_controller.rb +++ b/app/controllers/registrar/invoices_controller.rb @@ -6,6 +6,8 @@ class Registrar::InvoicesController < RegistrarController def index params[:q] ||= {} invoices = current_user.registrar.invoices.includes(:invoice_items, :account_activity) + params[:q][:sum_cache_gteq].gsub!(',', '.') + params[:q][:sum_cache_lteq].gsub!(',', '.') @q = invoices.search(params[:q]) @q.sorts = 'id desc' if @q.sorts.empty? @invoices = @q.result.page(params[:page]) diff --git a/app/jobs/domain_delete_confirm_job.rb b/app/jobs/domain_delete_confirm_job.rb new file mode 100644 index 000000000..90a76e47b --- /dev/null +++ b/app/jobs/domain_delete_confirm_job.rb @@ -0,0 +1,16 @@ +class DomainDeleteConfirmJob < Que::Job + def run(domain_id, action) + # it's recommended to keep transaction against job table as short as possible. + ActiveRecord::Base.transaction do + domain = Epp::Domain.find(domain_id) + case action + when RegistrantVerification::CONFIRMED + domain.apply_pending_delete! + domain.clean_pendings! + when RegistrantVerification::REJECTED + domain.clean_pendings! + end + destroy # it's best to destroy the job in the same transaction + end + end +end diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb new file mode 100644 index 000000000..2310eaad4 --- /dev/null +++ b/app/jobs/domain_update_confirm_job.rb @@ -0,0 +1,16 @@ +class DomainUpdateConfirmJob < Que::Job + def run(domain_id, action) + # it's recommended to keep transaction against job table as short as possible. + ActiveRecord::Base.transaction do + domain = Epp::Domain.find(domain_id) + case action + when RegistrantVerification::CONFIRMED + domain.apply_pending_update! + domain.clean_pendings! + when RegistrantVerification::REJECTED + domain.clean_pendings! + end + destroy # it's best to destroy the job in the same transaction + end + end +end diff --git a/app/mailers/contact_mailer.rb b/app/mailers/contact_mailer.rb index 4db130006..8b443d279 100644 --- a/app/mailers/contact_mailer.rb +++ b/app/mailers/contact_mailer.rb @@ -1,4 +1,5 @@ class ContactMailer < ApplicationMailer + # rubocop: disable Metrics/CyclomaticComplexity def email_updated(contact) unless Rails.env.production? return unless TEST_EMAILS.include?(contact.email) || TEST_EMAILS.include?(contact.email_was) @@ -8,7 +9,15 @@ class ContactMailer < ApplicationMailer return if contact.deliver_emails != true @contact = contact - mail(to: [@contact.email, @contact.email_was], - subject: "#{I18n.t(:contact_email_update_subject)} [#{@contact.code}]") + + emails = [] + emails << [@contact.email, @contact.email_was] if @contact.registrant_domains.present? + emails << @contact.domains.map(&:email) if @contact.domains.present? + emails = emails.uniq + + emails.each do |email| + mail(to: email, subject: "#{I18n.t(:contact_email_update_subject)} [#{@contact.code}]") + end end + # rubocop: enable Metrics/CyclomaticComplexity end diff --git a/app/models/ability.rb b/app/models/ability.rb index 067b89a37..3c641fdcb 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -28,7 +28,7 @@ class Ability can(:info, Epp::Domain) { |d, pw| d.registrar_id == @user.registrar_id || pw.blank? ? true : d.auth_info == pw } can(:check, Epp::Domain) can(:create, Epp::Domain) - can(:renew, Epp::Domain) + can(:renew, Epp::Domain) { |d| d.registrar_id == @user.registrar_id } can(:update, Epp::Domain) { |d, pw| d.registrar_id == @user.registrar_id || d.auth_info == pw } can(:transfer, Epp::Domain) { |d, pw| d.auth_info == pw } can(:view_password, Epp::Domain) { |d, pw| d.registrar_id == @user.registrar_id || d.auth_info == pw } @@ -107,6 +107,7 @@ class Ability can :manage, Setting can :manage, ZonefileSetting can :manage, DomainVersion + can :manage, Pricelist can :manage, User can :manage, ApiUser can :manage, AdminUser diff --git a/app/models/admin_user.rb b/app/models/admin_user.rb index 79e8f5649..e062bb1d6 100644 --- a/app/models/admin_user.rb +++ b/app/models/admin_user.rb @@ -1,9 +1,10 @@ class AdminUser < User - validates :username, :password, :country_code, :roles, presence: true + validates :username, :country_code, :roles, presence: true validates :identity_code, uniqueness: true, allow_blank: true validates :identity_code, presence: true, if: -> { country_code == 'EE' } - validates :email, presence: true - + validates :email, presence: true + validates :password, :password_confirmation, presence: true, if: :new_record? + validates :password_confirmation, presence: true, if: :encrypted_password_changed? validate :validate_identity_code, if: -> { country_code == 'EE' } ROLES = %w(user customer_service admin) # should not match to api_users roles diff --git a/app/models/api_user.rb b/app/models/api_user.rb index e12c3b7b8..3312de5d4 100644 --- a/app/models/api_user.rb +++ b/app/models/api_user.rb @@ -11,13 +11,16 @@ class ApiUser < User } end - # TODO: should have max request limit per day + # TODO: should have max request limit per day? belongs_to :registrar has_many :certificates validates :username, :password, :registrar, :roles, presence: true validates :username, uniqueness: true + # TODO: probably cache, because it's requested on every EPP + delegate :code, to: :registrar, prefix: true + attr_accessor :registrar_typeahead ROLES = %w(super epp billing) # should not match to admin roles diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb index 339d9ab9b..1a2ec5568 100644 --- a/app/models/bank_transaction.rb +++ b/app/models/bank_transaction.rb @@ -75,7 +75,7 @@ class BankTransaction < ActiveRecord::Base create_account_activity( account: registrar.cash_account, invoice: invoice, - sum: sum, + sum: invoice.sum_without_vat, currency: currency, description: description ) diff --git a/app/models/contact.rb b/app/models/contact.rb index 34d3c53ae..a5d558c98 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -7,6 +7,7 @@ class Contact < ActiveRecord::Base has_many :domains, through: :domain_contacts has_many :statuses, class_name: 'ContactStatus', dependent: :destroy has_many :legal_documents, as: :documentable + has_many :registrant_domains, class_name: 'Domain', foreign_key: 'registrant_id' # when contant is registrant accepts_nested_attributes_for :legal_documents @@ -84,6 +85,10 @@ class Contact < ActiveRecord::Base end end + def roid + "EIS-#{id}" + end + def to_s name || '[no name]' end @@ -132,7 +137,7 @@ class Contact < ActiveRecord::Base # custom code from client # add prefix when needed - if code.present? + if code.present? prefix, *custom_code = code.split(':') code = custom_code.join(':') if prefix == registrar.code end @@ -143,10 +148,10 @@ class Contact < ActiveRecord::Base end # rubocop:enable Metrics/CyclomaticComplexity - # used only for contact trasphere + # used only for contact transfer def generate_new_code! return nil if registrar.blank? - registrar.reload # for contact transfere + registrar.reload # for contact transfer self[:code] = "#{registrar.code}:#{SecureRandom.hex(4)}".upcase end @@ -181,7 +186,24 @@ class Contact < ActiveRecord::Base if code self.ident_country_code = code.alpha2 else - errors.add(:ident_country_code, 'is not following ISO_3166-1 alpha 2 format') + errors.add(:ident, :invalid_country_code) end end + + def related_domain_descriptions + @desc = {} + + registrant_domains.each do |dom| + @desc[dom.name] ||= [] + @desc[dom.name] << :registrant + end + + domain_contacts.each do |dc| + @desc[dc.domain.name] ||= [] + @desc[dc.domain.name] << dc.name.downcase.to_sym + @desc[dc.domain.name] = @desc[dc.domain.name].compact + end + + @desc + end end diff --git a/app/models/depp/contact.rb b/app/models/depp/contact.rb index 3c1a62974..be0429c2f 100644 --- a/app/models/depp/contact.rb +++ b/app/models/depp/contact.rb @@ -229,7 +229,12 @@ module Depp end def extension_xml - ident_xml.merge(legal_document_xml) + xml = { _anonymus: [] } + ident = ident_xml[:_anonymus].try(:first) unless persisted? + legal = legal_document_xml[:_anonymus].try(:first) + xml[:_anonymus] << ident if ident.present? + xml[:_anonymus] << legal if legal.present? + xml end def ident_xml diff --git a/app/models/depp/domain.rb b/app/models/depp/domain.rb index 857f74fb2..4a13d5ba5 100644 --- a/app/models/depp/domain.rb +++ b/app/models/depp/domain.rb @@ -192,10 +192,10 @@ module Depp end def construct_edit_hash(domain_params, old_domain_params) - contacts = create_contacts_hash(domain_params) - create_contacts_hash(old_domain_params) + contacts = array_difference(create_contacts_hash(domain_params), create_contacts_hash(old_domain_params)) add_anon = contacts - contacts = create_contacts_hash(old_domain_params) - create_contacts_hash(domain_params) + contacts = array_difference(create_contacts_hash(old_domain_params), create_contacts_hash(domain_params)) rem_anon = contacts if domain_params[:registrant] != old_domain_params[:registrant] @@ -284,6 +284,15 @@ module Depp pubKey: { value: key_data_params['public_key'] } } end + + def array_difference(x, y) + ret = x.dup + y.each do |element| + index = ret.index(element) + ret.delete_at(index) if index + end + ret + end end end end diff --git a/app/models/domain.rb b/app/models/domain.rb index 3355469f1..50e8b6fa4 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -1,3 +1,4 @@ +# rubocop: disable Metrics/ClassLength class Domain < ActiveRecord::Base include Versions # version/domain_version.rb has_paper_trail class_name: "DomainVersion", meta: { children: :children_log } @@ -53,6 +54,11 @@ class Domain < ActiveRecord::Base delegate :name, to: :registrar, prefix: true delegate :street, to: :registrar, prefix: true + after_initialize :init_default_values + def init_default_values + self.pending_json = {} if pending_json.blank? + end + before_create :generate_auth_info before_create :set_validity_dates before_update :manage_statuses @@ -62,14 +68,18 @@ class Domain < ActiveRecord::Base true end + before_save :manage_automatic_statuses + before_save :touch_always_version def touch_always_version self.updated_at = Time.zone.now end - after_save :manage_automatic_statuses after_save :update_whois_record + after_initialize -> { self.statuses = [] if statuses.nil? } + validates :name_dirty, domain_name: true, uniqueness: true + validates :puny_label, length: { maximum: 63 } validates :period, numericality: { only_integer: true } validates :registrant, :registrar, presence: true @@ -117,7 +127,13 @@ class Domain < ActiveRecord::Base validate :validate_nameserver_ips - attr_accessor :registrant_typeahead, :update_me, :deliver_emails, + validate :statuses_uniqueness + def statuses_uniqueness + return if statuses.uniq == statuses + errors.add(:statuses, :taken) + end + + attr_accessor :registrant_typeahead, :update_me, :deliver_emails, :epp_pending_update, :epp_pending_delete def subordinate_nameservers @@ -145,6 +161,68 @@ class Domain < ActiveRecord::Base { admin_contacts: :registrar } ) end + + def start_expire_period + STDOUT << "#{Time.zone.now.utc} - Expiring domains\n" unless Rails.env.test? + + d = Domain.where('valid_to <= ?', Time.zone.now) + d.each do |x| + next unless x.expirable? + x.statuses << DomainStatus::EXPIRED + # TODO: This should be managed by automatic_statuses + x.statuses.delete(DomainStatus::OK) + x.save(validate: false) + end + + STDOUT << "#{Time.zone.now.utc} - Successfully expired #{d.count} domains\n" unless Rails.env.test? + end + + def start_redemption_grace_period + STDOUT << "#{Time.zone.now.utc} - Setting server_hold to domains\n" unless Rails.env.test? + + d = Domain.where('outzone_at <= ?', Time.zone.now) + d.each do |x| + next unless x.server_holdable? + x.statuses << DomainStatus::SERVER_HOLD + # TODO: This should be managed by automatic_statuses + x.statuses.delete(DomainStatus::OK) + x.save + end + + STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{d.count} domains\n" unless Rails.env.test? + end + + def start_delete_period + STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test? + + d = Domain.where('delete_at <= ?', Time.zone.now) + d.each do |x| + x.statuses << DomainStatus::DELETE_CANDIDATE if x.delete_candidateable? + # TODO: This should be managed by automatic_statuses + x.statuses.delete(DomainStatus::OK) + x.save + end + + return if Rails.env.test? + STDOUT << "#{Time.zone.now.utc} - Successfully set delete_candidate to #{d.count} domains\n" + end + + def destroy_delete_candidates + STDOUT << "#{Time.zone.now.utc} - Destroying domains\n" unless Rails.env.test? + + c = 0 + Domain.where("statuses @> '{deleteCandidate}'::varchar[]").each do |x| + x.destroy + c += 1 + end + + Domain.where('force_delete_at <= ?', Time.zone.now).each do |x| + x.destroy + c += 1 + end + + STDOUT << "#{Time.zone.now.utc} - Successfully destroyed #{c} domains\n" unless Rails.env.test? + end end def name=(value) @@ -155,6 +233,14 @@ class Domain < ActiveRecord::Base self[:name_dirty] = value end + def roid + "EIS-#{id}" + end + + def puny_label + name_puny.to_s.split('.').first + end + def registrant_typeahead @registrant_typeahead || registrant.try(:name) || nil end @@ -163,16 +249,52 @@ class Domain < ActiveRecord::Base domain_transfers.find_by(status: DomainTransfer::PENDING) end - def can_be_deleted? - (domain_statuses.pluck(:value) & %W( - #{DomainStatus::SERVER_DELETE_PROHIBITED} - )).empty? + def expirable? + return false if valid_to > Time.zone.now + !statuses.include?(DomainStatus::EXPIRED) + end + + def server_holdable? + return false if outzone_at > Time.zone.now + return false if statuses.include?(DomainStatus::SERVER_HOLD) + return false if statuses.include?(DomainStatus::SERVER_MANUAL_INZONE) + true + end + + def delete_candidateable? + return false if delete_at > Time.zone.now + return false if statuses.include?(DomainStatus::DELETE_CANDIDATE) + return false if statuses.include?(DomainStatus::SERVER_DELETE_PROHIBITED) + true + end + + def renewable? + if Setting.days_to_renew_domain_before_expire != 0 + if ((valid_to - Time.zone.now.beginning_of_day).to_i / 1.day) + 1 > Setting.days_to_renew_domain_before_expire + return false + end + end + + return false if statuses.include?(DomainStatus::DELETE_CANDIDATE) + + true + end + + def preclean_pendings + self.registrant_verification_token = nil + self.registrant_verification_asked_at = nil + end + + def clean_pendings! + preclean_pendings + self.pending_json = {} + statuses.delete(DomainStatus::PENDING_UPDATE) + statuses.delete(DomainStatus::PENDING_DELETE) + save end def pending_update? - (domain_statuses.pluck(:value) & %W( - #{DomainStatus::PENDING_UPDATE} - )).present? + statuses.include?(DomainStatus::PENDING_UPDATE) end def pending_update! @@ -180,9 +302,10 @@ class Domain < ActiveRecord::Base self.epp_pending_update = true # for epp return true unless registrant_verification_asked? - pending_json_cache = all_changes + pending_json_cache = pending_json token = registrant_verification_token asked_at = registrant_verification_asked_at + changes_cache = changes DomainMailer.registrant_pending_updated(self).deliver_now @@ -191,10 +314,13 @@ class Domain < ActiveRecord::Base self.pending_json = pending_json_cache self.registrant_verification_token = token self.registrant_verification_asked_at = asked_at - domain_statuses.create(value: DomainStatus::PENDING_UPDATE) + self.statuses = [DomainStatus::PENDING_UPDATE] + pending_json[:domain] = changes_cache end + # rubocop: disable Metrics/CyclomaticComplexity def registrant_update_confirmable?(token) + return true if Rails.env.development? return false unless pending_update? return false if registrant_verification_token.blank? return false if registrant_verification_asked_at.blank? @@ -204,6 +330,7 @@ class Domain < ActiveRecord::Base end def registrant_delete_confirmable?(token) + return true if Rails.env.development? return false unless pending_delete? return false if registrant_verification_token.blank? return false if registrant_verification_asked_at.blank? @@ -211,20 +338,25 @@ class Domain < ActiveRecord::Base return false if registrant_verification_token != token true end + # rubocop: enable Metrics/CyclomaticComplexity + + def force_deletable? + !statuses.include?(DomainStatus::FORCE_DELETE) + end def registrant_verification_asked? registrant_verification_asked_at.present? && registrant_verification_token.present? end - def registrant_verification_asked! + def registrant_verification_asked!(frame_str, current_user_id) + pending_json['frame'] = frame_str + pending_json['current_user_id'] = current_user_id self.registrant_verification_asked_at = Time.zone.now self.registrant_verification_token = SecureRandom.hex(42) end def pending_delete? - (domain_statuses.pluck(:value) & %W( - #{DomainStatus::PENDING_DELETE} - )).present? + statuses.include?(DomainStatus::PENDING_DELETE) end def pending_delete! @@ -232,7 +364,9 @@ class Domain < ActiveRecord::Base self.epp_pending_delete = true # for epp return true unless registrant_verification_asked? - domain_statuses.create(value: DomainStatus::PENDING_DELETE) + self.statuses = [DomainStatus::PENDING_DELETE] + save(validate: false) # should check if this did succeed + DomainMailer.pending_deleted(self).deliver_now end @@ -250,7 +384,7 @@ class Domain < ActiveRecord::Base def validate_period return unless period.present? if period_unit == 'd' - valid_values = %w(365 366 710 712 1065 1068) + valid_values = %w(365 730 1095) elsif period_unit == 'm' valid_values = %w(12 24 36) else @@ -289,12 +423,10 @@ class Domain < ActiveRecord::Base name end - def pending_registrant_name + def pending_registrant return '' if pending_json.blank? - return '' if pending_json['domain'].blank? return '' if pending_json['domain']['registrant_id'].blank? - registrant = Registrant.find_by(id: pending_json['domain']['registrant_id'].last) - registrant.try(:name) + Registrant.find_by(id: pending_json['domain']['registrant_id'].last) end # rubocop:disable Lint/Loop @@ -307,19 +439,45 @@ class Domain < ActiveRecord::Base def set_validity_dates self.registered_at = Time.zone.now - self.valid_from = Time.zone.now.to_date + self.valid_from = Time.zone.now self.valid_to = valid_from + self.class.convert_period_to_time(period, period_unit) + self.outzone_at = valid_to + Setting.expire_warning_period.days + self.delete_at = outzone_at + Setting.redemption_grace_period.days + end + + def set_force_delete + statuses << DomainStatus::FORCE_DELETE + statuses << DomainStatus::SERVER_RENEW_PROHIBITED + statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED + statuses << DomainStatus::SERVER_UPDATE_PROHIBITED + statuses << DomainStatus::SERVER_MANUAL_INZONE + statuses << DomainStatus::PENDING_DELETE + statuses.delete(DomainStatus::CLIENT_DELETE_PROHIBITED) + statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED) + + self.force_delete_at = Time.zone.now + Setting.redemption_grace_period.days unless force_delete_at + save(validate: false) + end + + def unset_force_delete + statuses.delete(DomainStatus::FORCE_DELETE) + statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED) + statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) + statuses.delete(DomainStatus::SERVER_UPDATE_PROHIBITED) + statuses.delete(DomainStatus::SERVER_MANUAL_INZONE) + statuses.delete(DomainStatus::PENDING_DELETE) + + self.force_delete_at = nil + save(validate: false) end def manage_automatic_statuses - if domain_statuses.empty? && valid? - domain_statuses.create(value: DomainStatus::OK) - elsif domain_statuses.length > 1 || !valid? - domain_statuses.find_by(value: DomainStatus::OK).try(:destroy) + # domain_statuses.create(value: DomainStatus::DELETE_CANDIDATE) if delete_candidateable? + if statuses.empty? && valid? + statuses << DomainStatus::OK + elsif statuses.length > 1 || !valid? + statuses.delete(DomainStatus::OK) end - - # otherwise domain_statuses are in old state for domain object - domain_statuses.reload end def children_log @@ -332,18 +490,8 @@ class Domain < ActiveRecord::Base log end - def all_changes - all_changes = HashWithIndifferentAccess.new - all_changes[:domain] = changes - all_changes[:admin_contacts] = admin_contacts.map(&:changes) - all_changes[:tech_contacts] = tech_contacts.map(&:changes) - all_changes[:nameservers] = nameservers.map(&:changes) - all_changes[:registrant] = registrant.try(:changes) - all_changes[:domain_statuses] = domain_statuses.map(&:changes) - all_changes - end - def update_whois_record whois_record.blank? ? create_whois_record : whois_record.save end end +# rubocop: enable Metrics/ClassLength diff --git a/app/models/domain_status.rb b/app/models/domain_status.rb index 5a435ecc4..b33b5446c 100644 --- a/app/models/domain_status.rb +++ b/app/models/domain_status.rb @@ -73,23 +73,23 @@ class DomainStatus < ActiveRecord::Base EXPIRED = 'expired' STATUSES = [ - CLIENT_DELETE_PROHIBITED, SERVER_DELETE_PROHIBITED, CLIENT_HOLD, SERVER_HOLD, - CLIENT_RENEW_PROHIBITED, SERVER_RENEW_PROHIBITED, CLIENT_TRANSFER_PROHIBITED, - SERVER_TRANSFER_PROHIBITED, CLIENT_UPDATE_PROHIBITED, SERVER_UPDATE_PROHIBITED, - INACTIVE, OK, PENDING_CREATE, PENDING_DELETE, PENDING_RENEW, PENDING_TRANSFER, - PENDING_UPDATE, SERVER_MANUAL_INZONE, SERVER_REGISTRANT_CHANGE_PROHIBITED, - SERVER_ADMIN_CHANGE_PROHIBITED, SERVER_TECH_CHANGE_PROHIBITED, FORCE_DELETE, + CLIENT_DELETE_PROHIBITED, SERVER_DELETE_PROHIBITED, CLIENT_HOLD, SERVER_HOLD, + CLIENT_RENEW_PROHIBITED, SERVER_RENEW_PROHIBITED, CLIENT_TRANSFER_PROHIBITED, + SERVER_TRANSFER_PROHIBITED, CLIENT_UPDATE_PROHIBITED, SERVER_UPDATE_PROHIBITED, + INACTIVE, OK, PENDING_CREATE, PENDING_DELETE, PENDING_RENEW, PENDING_TRANSFER, + PENDING_UPDATE, SERVER_MANUAL_INZONE, SERVER_REGISTRANT_CHANGE_PROHIBITED, + SERVER_ADMIN_CHANGE_PROHIBITED, SERVER_TECH_CHANGE_PROHIBITED, FORCE_DELETE, DELETE_CANDIDATE, EXPIRED ] - + CLIENT_STATUSES = [ - CLIENT_DELETE_PROHIBITED, CLIENT_HOLD, CLIENT_RENEW_PROHIBITED, CLIENT_TRANSFER_PROHIBITED, + CLIENT_DELETE_PROHIBITED, CLIENT_HOLD, CLIENT_RENEW_PROHIBITED, CLIENT_TRANSFER_PROHIBITED, CLIENT_UPDATE_PROHIBITED ] - + SERVER_STATUSES = [ SERVER_DELETE_PROHIBITED, SERVER_HOLD, SERVER_RENEW_PROHIBITED, SERVER_TRANSFER_PROHIBITED, - SERVER_UPDATE_PROHIBITED, SERVER_MANUAL_INZONE, SERVER_REGISTRANT_CHANGE_PROHIBITED, + SERVER_UPDATE_PROHIBITED, SERVER_MANUAL_INZONE, SERVER_REGISTRANT_CHANGE_PROHIBITED, SERVER_ADMIN_CHANGE_PROHIBITED, SERVER_TECH_CHANGE_PROHIBITED ] @@ -113,7 +113,7 @@ class DomainStatus < ActiveRecord::Base case value when 'ok' 'ok (paid and in zone)' - else + else value end end @@ -124,7 +124,7 @@ class DomainStatus < ActiveRecord::Base end def statuses_for_admin - SERVER_STATUSES.map { |x| x.sub('server', '') } + SERVER_STATUSES.map { |x| [x.sub('server', ''), x] } end end end diff --git a/app/models/domain_transfer.rb b/app/models/domain_transfer.rb index ed368a219..adcd10e50 100644 --- a/app/models/domain_transfer.rb +++ b/app/models/domain_transfer.rb @@ -51,9 +51,9 @@ class DomainTransfer < ActiveRecord::Base end end - def notify_losing_registrar + def notify_losing_registrar(contacts, registrant) transfer_from.messages.create!( - body: I18n.t('domain_transfer_was_approved', contacts: domain.contacts.pluck(:code).sort), + body: I18n.t('domain_transfer_was_approved', contacts: contacts, registrant: registrant), attached_obj_id: id, attached_obj_type: self.class.to_s ) diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb index f106a4247..d9ba0a48a 100644 --- a/app/models/epp/contact.rb +++ b/app/models/epp/contact.rb @@ -123,7 +123,8 @@ class Epp::Contact < Contact [:email, :invalid], [:ident, :invalid], [:ident, :invalid_EE_identity_format], - [:ident, :invalid_birthday_format] + [:ident, :invalid_birthday_format], + [:ident, :invalid_country_code] ], '2302' => [ # Object exists [:code, :epp_id_taken] @@ -142,7 +143,6 @@ class Epp::Contact < Contact at.deep_merge!(self.class.attrs_from(frame.css('rem'), 'rem')) at.deep_merge!(self.class.attrs_from(frame.css('add'))) at.deep_merge!(self.class.attrs_from(frame.css('chg'))) - at.merge!(self.class.ident_attrs(frame.css('ident').first)) legal_frame = frame.css('legalDocument').first at[:legal_documents_attributes] = self.class.legal_document_attrs(legal_frame) self.deliver_emails = true # turn on email delivery for epp diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb index 56e66bc7d..f978b760f 100644 --- a/app/models/epp/domain.rb +++ b/app/models/epp/domain.rb @@ -34,7 +34,6 @@ class Epp::Domain < Domain max: Setting.ns_max_count } ], - [:period, :out_of_range, { value: { obj: 'period', val: period } }], [:dnskeys, :out_of_range, { min: Setting.dnskeys_min_count, @@ -55,7 +54,8 @@ class Epp::Domain < Domain ] ], '2005' => [ # Parameter value syntax error - [:name_dirty, :invalid, { obj: 'name', val: name_dirty }] + [:name_dirty, :invalid, { obj: 'name', val: name_dirty }], + [:puny_label, :too_long, { obj: 'name', val: name_puny }] ], '2201' => [ # Authorisation error [:auth_info, :wrong_pw] @@ -68,6 +68,7 @@ class Epp::Domain < Domain [:base, :domain_status_prohibits_operation] ], '2306' => [ # Parameter policy error + [:period, :out_of_range, { value: { obj: 'period', val: period } }], [:base, :ds_data_with_key_not_allowed], [:base, :ds_data_not_allowed], [:base, :key_data_not_allowed], @@ -109,10 +110,12 @@ class Epp::Domain < Domain at[:period_unit] = Epp::Domain.parse_period_unit_from_frame(frame) || 'y' + # at[:statuses] = domain_statuses_attrs(frame, action) + # binding.pry at[:nameservers_attributes] = nameservers_attrs(frame, action) at[:admin_domain_contacts_attributes] = admin_domain_contacts_attrs(frame, action) at[:tech_domain_contacts_attributes] = tech_domain_contacts_attrs(frame, action) - at[:domain_statuses_attributes] = domain_statuses_attrs(frame, action) + # at[:domain_statuses_attributes] = domain_statuses_attrs(frame, action) if new_record? dnskey_frame = frame.css('extension create') @@ -234,24 +237,6 @@ class Epp::Domain < Domain attrs end - def domain_status_list_from(frame) - status_list = [] - - frame.css('status').each do |x| - unless DomainStatus::CLIENT_STATUSES.include?(x['s']) - add_epp_error('2303', 'status', x['s'], [:domain_statuses, :not_found]) - next - end - - status_list << { - value: x['s'], - description: x.text - } - end - - status_list - end - # rubocop: disable Metrics/PerceivedComplexity # rubocop: disable Metrics/CyclomaticComplexity def dnskeys_attrs(frame, action) @@ -335,14 +320,10 @@ class Epp::Domain < Domain if action == 'rem' to_destroy = [] status_list.each do |x| - status = domain_statuses.find_by(value: x[:value]) - if status.blank? - add_epp_error('2303', 'status', x[:value], [:domain_statuses, :not_found]) + if statuses.include?(x) + to_destroy << x else - to_destroy << { - id: status.id, - _destroy: 1 - } + add_epp_error('2303', 'status', x, [:domain_statuses, :not_found]) end end @@ -361,10 +342,7 @@ class Epp::Domain < Domain next end - status_list << { - value: x['s'], - description: x.text - } + status_list << x['s'] end status_list @@ -380,7 +358,7 @@ class Epp::Domain < Domain }] end - def update(frame, current_user) + def update(frame, current_user, verify = true) return super if frame.blank? at = {}.with_indifferent_access at.deep_merge!(attrs_from(frame.css('chg'), current_user)) @@ -391,16 +369,36 @@ class Epp::Domain < Domain at[:admin_domain_contacts_attributes] += at_add[:admin_domain_contacts_attributes] at[:tech_domain_contacts_attributes] += at_add[:tech_domain_contacts_attributes] at[:dnskeys_attributes] += at_add[:dnskeys_attributes] - at[:domain_statuses_attributes] += at_add[:domain_statuses_attributes] + at[:statuses] = + statuses - domain_statuses_attrs(frame.css('rem'), 'rem') + domain_statuses_attrs(frame.css('add'), 'add') - if frame.css('registrant').present? && frame.css('registrant').attr('verified').to_s.downcase != 'yes' - registrant_verification_asked! + # at[:statuses] += at_add[:domain_statuses_attributes] + + if verify && frame.css('registrant').present? && frame.css('registrant').attr('verified').to_s.downcase != 'yes' + registrant_verification_asked!(frame.to_s, current_user.id) end self.deliver_emails = true # turn on email delivery for epp - errors.empty? && super(at) end + def apply_pending_update! + preclean_pendings + user = ApiUser.find(pending_json['current_user_id']) + frame = Nokogiri::XML(pending_json['frame']) + statuses.delete(DomainStatus::PENDING_UPDATE) + + clean_pendings! if update(frame, user, false) + end + + def apply_pending_delete! + preclean_pendings + user = ApiUser.find(pending_json['current_user_id']) + frame = Nokogiri::XML(pending_json['frame']) + statuses.delete(DomainStatus::PENDING_DELETE) + + clean_pendings! if epp_destroy(frame, user, false) + end + def attach_legal_document(legal_document_data) return unless legal_document_data @@ -410,11 +408,12 @@ class Epp::Domain < Domain ) end - def epp_destroy(frame) + def epp_destroy(frame, user_id, verify=true) return false unless valid? - if frame.css('delete').attr('verified').to_s.downcase != 'yes' - registrant_verification_asked! + if verify && frame.css('delete').attr('verified').to_s.downcase != 'yes' + registrant_verification_asked!(frame.to_s, user_id) + self.deliver_emails = true # turn on email delivery for epp pending_delete! manage_automatic_statuses true # aka 1001 pending_delete @@ -426,14 +425,21 @@ class Epp::Domain < Domain ### RENEW ### def renew(cur_exp_date, period, unit = 'y') - # TODO: Check how much time before domain exp date can it be renewed validate_exp_dates(cur_exp_date) + + add_epp_error('2105', nil, nil, I18n.t('object_is_not_eligible_for_renewal')) unless renewable? return false if errors.any? p = self.class.convert_period_to_time(period, unit) self.valid_to = valid_to + p + self.outzone_at = outzone_at + p + self.delete_at = delete_at + p self.period = period self.period_unit = unit + + statuses.delete(DomainStatus::SERVER_HOLD) + statuses.delete(DomainStatus::EXPIRED) + save end @@ -466,7 +472,8 @@ class Epp::Domain < Domain oc = c.deep_clone include: [:statuses] oc.code = nil oc.registrar_id = registrar_id - oc.save! + oc.prefix_code + oc.save!(validate: false) oc end @@ -474,7 +481,7 @@ class Epp::Domain < Domain oc = Contact.find(contact_id) # n+1 workaround oc.registrar_id = registrar_id oc.generate_new_code! - oc.save! + oc.save!(validate: false) oc end @@ -520,6 +527,9 @@ class Epp::Domain < Domain def query_transfer(frame, current_user) return false unless can_be_transferred_to?(current_user.registrar) + old_contact_codes = contacts.pluck(:code).sort.uniq + old_registrant_code = registrant.code + transaction do begin dt = domain_transfers.create!( @@ -538,7 +548,7 @@ class Epp::Domain < Domain if dt.approved? transfer_contacts(current_user.registrar_id) - dt.notify_losing_registrar + dt.notify_losing_registrar(old_contact_codes, old_registrant_code) generate_auth_info self.registrar = current_user.registrar end @@ -547,8 +557,10 @@ class Epp::Domain < Domain save!(validate: false) return dt - rescue => _e + rescue => e add_epp_error('2306', nil, nil, I18n.t('action_failed_due_to_server_error')) + logger.error('DOMAIN TRANSFER FAILED') + logger.error(e) raise ActiveRecord::Rollback end end @@ -671,9 +683,7 @@ class Epp::Domain < Domain begin errors.add(:base, :domain_status_prohibits_operation) return false - end if (domain_statuses.pluck(:value) & %W( - #{DomainStatus::CLIENT_DELETE_PROHIBITED} - )).any? + end if statuses.include?(DomainStatus::CLIENT_DELETE_PROHIBITED) true end diff --git a/app/models/legacy/invoice.rb b/app/models/legacy/invoice.rb new file mode 100644 index 000000000..15441d89e --- /dev/null +++ b/app/models/legacy/invoice.rb @@ -0,0 +1,5 @@ +module Legacy + class Invoice < Db + self.table_name = :invoice + end +end diff --git a/app/models/legacy/registrar.rb b/app/models/legacy/registrar.rb index 0dc124085..80a09a945 100644 --- a/app/models/legacy/registrar.rb +++ b/app/models/legacy/registrar.rb @@ -1,5 +1,11 @@ module Legacy class Registrar < Db self.table_name = :registrar + + has_many :invoices, foreign_key: :registrarid + + def account_balance + invoices.sum(:credit) + end end end diff --git a/app/models/legal_document.rb b/app/models/legal_document.rb index f682e52f4..0972767f7 100644 --- a/app/models/legal_document.rb +++ b/app/models/legal_document.rb @@ -2,7 +2,11 @@ class LegalDocument < ActiveRecord::Base include Versions # version/legal_document_version.rb belongs_to :documentable, polymorphic: true - TYPES = %w(pdf bdoc ddoc zip rar gz tar 7z) + if ENV['legal_document_types'].present? + TYPES = ENV['legal_document_types'].split(',').map(&:strip) + else + TYPES = %w(pdf bdoc ddoc zip rar gz tar 7z odt doc docx) + end attr_accessor :body diff --git a/app/models/pricelist.rb b/app/models/pricelist.rb new file mode 100644 index 000000000..cfdb53776 --- /dev/null +++ b/app/models/pricelist.rb @@ -0,0 +1,22 @@ +class Pricelist < ActiveRecord::Base + include Versions # version/pricelist_version.rb + + monetize :price_cents + + validates :price_cents, :price_currency, :price, + :valid_from, :category, :operation_category, :duration, presence: true + + CATEGORIES = %w(ee pri.ee fie.ee med.ee com.ee) + OPERATION_CATEGORIES = %w(create renew) + DURATIONS = %w(1year 2years 3years) + + after_initialize :init_values + def init_values + return unless new_record? + self.valid_from = Time.zone.now.beginning_of_year + end + + def name + "#{operation_category} #{category}" + end +end diff --git a/app/models/registrant_verification.rb b/app/models/registrant_verification.rb index d56170bdd..d0c015ecb 100644 --- a/app/models/registrant_verification.rb +++ b/app/models/registrant_verification.rb @@ -17,12 +17,24 @@ class RegistrantVerification < ActiveRecord::Base def domain_registrant_change_confirm! self.action_type = DOMAIN_REGISTRANT_CHANGE self.action = CONFIRMED - save + DomainUpdateConfirmJob.enqueue domain.id, CONFIRMED if save end def domain_registrant_change_reject! self.action_type = DOMAIN_REGISTRANT_CHANGE self.action = REJECTED - save + DomainUpdateConfirmJob.enqueue domain.id, REJECTED if save + end + + def domain_registrant_delete_confirm! + self.action_type = DOMAIN_DELETE + self.action = CONFIRMED + DomainDeleteConfirmJob.enqueue domain.id, CONFIRMED if save + end + + def domain_registrant_delete_reject! + self.action_type = DOMAIN_DELETE + self.action = REJECTED + DomainDeleteConfirmJob.enqueue domain.id, REJECTED if save end end diff --git a/app/models/version/pricelist_version.rb b/app/models/version/pricelist_version.rb new file mode 100644 index 000000000..cd86f6064 --- /dev/null +++ b/app/models/version/pricelist_version.rb @@ -0,0 +1,4 @@ +class PricelistVersion < PaperTrail::Version + self.table_name = :log_pricelists + self.sequence_name = :log_pricelists_id_seq +end diff --git a/app/models/whois_record.rb b/app/models/whois_record.rb index 0e7ed3f30..e1b168935 100644 --- a/app/models/whois_record.rb +++ b/app/models/whois_record.rb @@ -20,11 +20,11 @@ class WhoisRecord < ActiveRecord::Base includes( domain: [ :registrant, - :registrar, - :nameservers, + :registrar, + :nameservers, { tech_contacts: :registrar }, { admin_contacts: :registrar } - ] + ] ) end end @@ -34,19 +34,23 @@ class WhoisRecord < ActiveRecord::Base h = HashWithIndifferentAccess.new return h if domain.blank? + status_map = { + 'ok' => 'ok (paid and in zone)' + } + @disclosed = [] h[:name] = domain.name h[:registrant] = domain.registrant.name - h[:status] = domain.domain_statuses.map(&:human_value).join(', ') + h[:status] = domain.statuses.map { |x| status_map[x] || x }.join(', ') h[:registered] = domain.registered_at.try(:to_s, :iso8601) h[:updated_at] = domain.updated_at.try(:to_s, :iso8601) h[:valid_to] = domain.valid_to.try(:to_s, :iso8601) - + # update registar triggers when adding new attributes h[:registrar] = domain.registrar.name h[:registrar_phone] = domain.registrar.phone h[:registrar_address] = domain.registrar.address - h[:registrar_update_at] = domain.registrar.updated_at.try(:to_s, :iso8601) + h[:registrar_update_at] = domain.registrar.updated_at.try(:to_s, :iso8601) h[:admin_contacts] = [] domain.admin_contacts.each do |ac| diff --git a/app/validators/domain_name_validator.rb b/app/validators/domain_name_validator.rb index 4d337b8b5..93046c882 100644 --- a/app/validators/domain_name_validator.rb +++ b/app/validators/domain_name_validator.rb @@ -1,11 +1,4 @@ class DomainNameValidator < ActiveModel::EachValidator - # TODO - # validates lenght of 2-63 - # validates/honours Estonian additional letters zäõüö - # honours punicode and all interfces honors utf8 - # validates lower level domains (.pri.ee, edu.ee etc) - # lower level domains are fixed for .ee and can add statically into settings - def validate_each(record, attribute, value) if !self.class.validate_format(value) record.errors[attribute] << (options[:message] || record.errors.generate_message(attribute, :invalid)) @@ -31,9 +24,8 @@ class DomainNameValidator < ActiveModel::EachValidator # rubocop: disable Metrics/LineLength unicode_chars = /\u00E4\u00F5\u00F6\u00FC\u0161\u017E/ # äõöüšž - regexp = /\A[a-zA-Z0-9#{unicode_chars}][a-zA-Z0-9#{unicode_chars}-]{0,61}[a-zA-Z0-9#{unicode_chars}]#{general_domains}\z/ + regexp = /\A[a-zA-Z0-9#{unicode_chars.source}][a-zA-Z0-9#{unicode_chars.source}-]{0,61}[a-zA-Z0-9#{unicode_chars.source}]#{general_domains.source}\z/ # rubocop: enable Metrics/LineLength - # rubocop: disable Style/DoubleNegation !!(value =~ regexp) # rubocop: enable Style/DoubleNegation diff --git a/app/views/admin/admin_users/_form.haml b/app/views/admin/admin_users/_form.haml index 8db7583f2..9a9aa8a80 100644 --- a/app/views/admin/admin_users/_form.haml +++ b/app/views/admin/admin_users/_form.haml @@ -11,14 +11,15 @@ - if @admin_user.new_record? || can?(:update, AdminUser) .form-group .col-md-4.control-label - = f.label :password + - not_required = @admin_user.new_record? ? '' : 'not-required' + = f.label :password, class: not_required .col-md-8 - = f.text_field(:password, class: 'form-control') + = f.password_field(:password, class: 'form-control') .form-group .col-md-4.control-label - = f.label :password_confirmation + = f.label :password_confirmation, class: not_required .col-md-8 - = f.text_field(:password_confirmation, class: 'form-control') + = f.password_field(:password_confirmation, class: 'form-control') %hr .form-group @@ -48,3 +49,8 @@ .row .col-md-8.text-right = button_tag(t(:save), class: 'btn btn-primary') + +:coffee + $("#admin_user_password").removeAttr('required') + $("#admin_user_password_confirmation").removeAttr('required') + diff --git a/app/views/admin/api_users/_form.haml b/app/views/admin/api_users/_form.haml index 24ca8465b..e6851e424 100644 --- a/app/views/admin/api_users/_form.haml +++ b/app/views/admin/api_users/_form.haml @@ -1,4 +1,5 @@ -= form_for([:admin, @api_user], multipart: true, html: {class: 'form-horizontal'}) do |f| += form_for([:admin, @api_user], multipart: true, + html: {class: 'form-horizontal', autocomplete: 'off'}) do |f| = render 'shared/full_errors', object: @api_user .row @@ -10,9 +11,11 @@ = f.text_field(:username, class: 'form-control') .form-group .col-md-4.control-label - = f.label :password + - not_required = @api_user.new_record? ? '' : 'not-required' + = f.label :password, class: not_required .col-md-7 - = f.text_field(:password, class: 'form-control') + = f.text_field :password, class: 'form-control', autocomplete: 'off' + .form-group .col-md-4.control-label = f.label :identity_code @@ -48,4 +51,5 @@ = button_tag(t(:save), class: 'btn btn-primary') :coffee - Autocomplete.bindAdminRegistrarSearch(); + Autocomplete.bindAdminRegistrarSearch() + $("#api_user_password").removeAttr('required') diff --git a/app/views/admin/bank_statements/new.haml b/app/views/admin/bank_statements/new.haml index 265e99e7e..452ffd264 100644 --- a/app/views/admin/bank_statements/new.haml +++ b/app/views/admin/bank_statements/new.haml @@ -12,6 +12,8 @@ = f.label :th6_file .col-md-8 = f.file_field :th6_file + .col-md-4 + %p= t(:bank_statement_desc).html_safe %hr .row .col-md-8.text-right diff --git a/app/views/admin/contacts/partials/_general.haml b/app/views/admin/contacts/partials/_general.haml index ca77f56f7..dc1c277fb 100644 --- a/app/views/admin/contacts/partials/_general.haml +++ b/app/views/admin/contacts/partials/_general.haml @@ -7,7 +7,8 @@ %dd= @contact.code %dt= t(:password) - %dd= @contact.auth_info + %dd + = text_field_tag :auth_info, @contact.auth_info, readonly: true, class: 'partially-hidden' %br diff --git a/app/views/admin/domains/form_partials/_statuses.haml b/app/views/admin/domains/form_partials/_statuses.haml index 7ae89a8da..52b9282ef 100644 --- a/app/views/admin/domains/form_partials/_statuses.haml +++ b/app/views/admin/domains/form_partials/_statuses.haml @@ -1,26 +1,29 @@ #domain-statuses - = f.fields_for :domain_statuses, @server_statuses do |status_fields| + - @server_statuses.each do |x| .panel.panel-default .panel-heading.clearfix .pull-left= t(:status) .pull-right = link_to(t(:add_another), '#', class: 'btn btn-primary btn-xs add-domain-status') - = link_to(t(:delete), '#', class: 'btn btn-danger btn-xs destroy') + = link_to(t(:delete), '#', class: 'btn btn-danger btn-xs destroy-status') .panel-body - .errors - = render 'shared/errors', object: status_fields.object - - if status_fields.object.errors.any? - %hr .form-group - = status_fields.label :value, class: 'col-md-2 control-label' + = f.label 'status', class: 'col-md-2 control-label' .col-md-10 - = status_fields.select :value, options_for_select(DomainStatus.statuses_for_admin, status_fields.object.value.try(:sub, 'server', '')), {include_blank: true}, {class: 'form-control'} + = select_tag 'domain[statuses][]', options_for_select(DomainStatus.statuses_for_admin, x), include_blank: true, class: 'form-control' .form-group - = status_fields.label :description, class: 'col-md-2 control-label' + = label_tag t(:description), nil, class: 'col-md-2 control-label' .col-md-10 - = status_fields.text_field :description, class: 'form-control', autocomplete: 'off' + = text_field_tag :description, nil, class: 'form-control', autocomplete: 'off' + - @other_statuses.each do |x| + = hidden_field_tag 'domain[statuses][]', x, readonly: true :coffee $("#domain-statuses").nestedAttributes bindAddTo: $(".add-domain-status") - afterAdd: (item) -> - item.find(".errors").html "" + + $('.destroy-status').on 'click', (e) -> + e.preventDefault() + if $('.panel').length > 1 + $(this).parents('.panel').remove() + else + $(this).parents('.panel').find('select').val('') diff --git a/app/views/admin/domains/partials/_general.haml b/app/views/admin/domains/partials/_general.haml index 17a6d5c45..53c73c65b 100644 --- a/app/views/admin/domains/partials/_general.haml +++ b/app/views/admin/domains/partials/_general.haml @@ -13,7 +13,8 @@ %dd= link_to(@domain.registrar, root_path) %dt= t(:password) - %dd= @domain.auth_info + %dd + = text_field_tag :password, @domain.auth_info, readonly: true, class: 'partially-hidden' %dt= t(:valid_from) %dd= l(@domain.valid_from) diff --git a/app/views/admin/domains/partials/_statuses.haml b/app/views/admin/domains/partials/_statuses.haml index f6f6a115c..51a88b18b 100644 --- a/app/views/admin/domains/partials/_statuses.haml +++ b/app/views/admin/domains/partials/_statuses.haml @@ -1,5 +1,4 @@ -- panel_class = @domain.errors.messages[:domain_statuses] ? 'panel-danger' : 'panel-default' -#domain_statuses.panel{class: panel_class} +#domain_statuses.panel.panel-default .panel-heading.clearfix = t(:statuses) .table-responsive @@ -9,12 +8,7 @@ %th{class: 'col-xs-6'}= t(:status) %th{class: 'col-xs-6'}= t(:description) %tbody - - @domain.domain_statuses.each do |x| + - @domain.statuses.each do |x| %tr - %td= x.value - %td= x.description - - if @domain.errors.messages[:domain_statuses] - %tfoot - - @domain.errors.messages[:domain_statuses].each do |x| - %tr - %td{colspan: 4}= x + %td= x + %td diff --git a/app/views/admin/domains/show.haml b/app/views/admin/domains/show.haml index ccff3e1ed..be4e37614 100644 --- a/app/views/admin/domains/show.haml +++ b/app/views/admin/domains/show.haml @@ -1,6 +1,11 @@ - content_for :actions do = link_to(t(:edit_statuses), edit_admin_domain_path(@domain), class: 'btn btn-primary') = link_to(t(:history), admin_domain_domain_versions_path(@domain.id), method: :get, class: 'btn btn-primary') + - if @domain.force_deletable? + = link_to(t(:set_force_delete), set_force_delete_admin_domain_path(@domain), method: :post, data: { confirm: t(:are_you_sure) }, class: 'btn btn-warning') + - else + = link_to(t(:unset_force_delete), unset_force_delete_admin_domain_path(@domain), method: :post, data: { confirm: t(:are_you_sure) }, class: 'btn btn-warning') + = render 'shared/title', name: @domain.name .row diff --git a/app/views/admin/pricelists/_form.haml b/app/views/admin/pricelists/_form.haml new file mode 100644 index 000000000..9ac3c4fa2 --- /dev/null +++ b/app/views/admin/pricelists/_form.haml @@ -0,0 +1,33 @@ += form_for([:admin, @pricelist], multipart: true) do |f| + = render 'shared/errors', object: f.object + + .row + .col-md-6 + .form-group + = f.label :operation_category + = f.select(:operation_category, Pricelist::OPERATION_CATEGORIES, {}, { class: 'form-control' }) + .form-group + = f.label :category, t(:category) + = f.select(:category, Pricelist::CATEGORIES, {}, { class: 'form-control' }) + .form-group + = f.label :duration + = f.select(:duration, Pricelist::DURATIONS, {}, { class: 'form-control' }) + .form-group + = f.label :price + .input-group + = f.text_field(:price, class: 'form-control') + %span.input-group-addon= Money.default_currency + .form-group.input-daterange + = f.label :valid_from, t(:valid) + .input-group + = f.text_field(:valid_from, value: f.object.valid_from.try(:to_s, :dshort), + class: 'form-control js-datepicker') + %span.input-group-addon - + = f.text_field(:valid_to, value: f.object.valid_to.try(:to_s, :dshort), + class: 'form-control js-datepicker') + + %hr + .row + .col-md-12.text-right + = button_tag(t(:save), class: 'btn btn-primary') + diff --git a/app/views/admin/pricelists/edit.haml b/app/views/admin/pricelists/edit.haml new file mode 100644 index 000000000..329f7979b --- /dev/null +++ b/app/views/admin/pricelists/edit.haml @@ -0,0 +1,6 @@ +.row + .col-sm-6 + %h2.text-center-xs= "#{t(:edit)}: #{@pricelist.name}" + +%hr += render 'form' diff --git a/app/views/admin/pricelists/index.haml b/app/views/admin/pricelists/index.haml new file mode 100644 index 000000000..15a6b9c6b --- /dev/null +++ b/app/views/admin/pricelists/index.haml @@ -0,0 +1,43 @@ +.row + .col-sm-6 + %h2.text-center-xs= t(:pricelists) + .col-sm-6 + %h2.text-right.text-center-xs + = link_to(t(:new), new_admin_pricelist_path, class: 'btn btn-primary') + +%hr +.row + .col-md-12 + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-2'} + = sort_link(@q, 'category', t(:category)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'operation_category', t(:operation)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'duration', t(:duration)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'price', t(:price)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'valid_from', t(:valid_from)) + %th{class: 'col-xs-2'} + = sort_link(@q, 'valid_to', t(:valid_to)) + %th{class: 'col-xs-2'} + = t(:action) + + %tbody + - @pricelists.each do |pricelist| + %tr + %td= pricelist.category + %td= pricelist.operation_category + %td= pricelist.duration + %td= pricelist.price + %td= l(pricelist.valid_from, format: :ydate) + %td= l(pricelist.valid_to, format: :ydate) + %td= link_to(t(:edit), edit_admin_pricelist_path(pricelist), class: 'btn btn-xs btn-primary') + +.row + .col-md-12 + = paginate @pricelists diff --git a/app/views/admin/pricelists/new.haml b/app/views/admin/pricelists/new.haml new file mode 100644 index 000000000..fb56f2aaf --- /dev/null +++ b/app/views/admin/pricelists/new.haml @@ -0,0 +1,3 @@ +%h2= t(:new_price) +%hr += render 'form' diff --git a/app/views/admin/settings/_setting_row.haml b/app/views/admin/settings/_setting_row.haml new file mode 100644 index 000000000..632effc74 --- /dev/null +++ b/app/views/admin/settings/_setting_row.haml @@ -0,0 +1,9 @@ +- value = Setting.send(var) +%tr + %td= t(var) + - if [TrueClass, FalseClass].include?(value.class) + %td + = hidden_field_tag("[settings][#{var}]", '') + = check_box_tag("[settings][#{var}]", true, value) + - else + %td= text_field_tag("[settings][#{var}]", value) diff --git a/app/views/admin/settings/index.haml b/app/views/admin/settings/index.haml index c52bf3783..cd0e1d9a4 100644 --- a/app/views/admin/settings/index.haml +++ b/app/views/admin/settings/index.haml @@ -1,27 +1,72 @@ = render 'shared/title', name: t(:settings) = form_tag [:admin, :settings] do + .panel.panel-default + .panel-heading.clearfix + = t(:domain_validation_rules) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-6'}= t(:setting) + %th{class: 'col-xs-6'}= t(:value) + %tbody + = render 'setting_row', var: :admin_contacts_min_count + = render 'setting_row', var: :admin_contacts_max_count + = render 'setting_row', var: :tech_contacts_min_count + = render 'setting_row', var: :tech_contacts_max_count + = render 'setting_row', var: :ds_data_allowed + = render 'setting_row', var: :key_data_allowed + = render 'setting_row', var: :dnskeys_min_count + = render 'setting_row', var: :dnskeys_max_count + = render 'setting_row', var: :ns_min_count + = render 'setting_row', var: :ns_max_count + + .panel.panel-default + .panel-heading.clearfix + = t(:domain_expiring) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-6'}= t(:setting) + %th{class: 'col-xs-6'}= t(:value) + %tbody + = render 'setting_row', var: :days_to_renew_domain_before_expire + = render 'setting_row', var: :expire_warning_period + = render 'setting_row', var: :redemption_grace_period + + .panel.panel-default + .panel-heading.clearfix + = t(:billing) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-6'}= t(:setting) + %th{class: 'col-xs-6'}= t(:value) + %tbody + = render 'setting_row', var: :eis_iban + = render 'setting_row', var: :eis_bank + = render 'setting_row', var: :eis_swift + = render 'setting_row', var: :eis_invoice_contact + = render 'setting_row', var: :invoice_number_min + = render 'setting_row', var: :invoice_number_max + = render 'setting_row', var: :days_to_keep_overdue_invoices_active + + .panel.panel-default + .panel-heading.clearfix + = t(:other) + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-6'}= t(:setting) + %th{class: 'col-xs-6'}= t(:value) + %tbody + = render 'setting_row', var: :transfer_wait_time + = render 'setting_row', var: :ds_algorithm + = render 'setting_row', var: :client_side_status_editing_enabled .row - .col-md-8 - .table-responsive - %table.table.table-hover.table-bordered.table-condensed - %thead - %tr - %th{class: 'col-xs-4'} - = t(:setting) - %th{class: 'col-xs-2'} - = t(:value) - %tbody - - @settings.each do |x| - %tr - %td= t("#{x.var}") - - if [TrueClass, FalseClass].include?(x.value.class) - %td - = hidden_field_tag("[settings][#{x.var}]", '') - = check_box_tag("[settings][#{x.var}]", true, x.value) - - else - %td= text_field_tag("[settings][#{x.var}]", x.value) - %hr - .row - .col-md-8.text-right + .col-md-12.text-right %button.btn.btn-primary=t(:save) diff --git a/app/views/contact_mailer/email_updated.html.erb b/app/views/contact_mailer/email_updated.html.erb index c461659b1..e4785444b 100644 --- a/app/views/contact_mailer/email_updated.html.erb +++ b/app/views/contact_mailer/email_updated.html.erb @@ -6,10 +6,10 @@ uus aadress: <%= @contact.email %>

Eposti aadressile saadetakse domeenidega seotud infot seal hulgas kinnitustaotluseid omaniku vahetuse ja domeeni kustutamise korral. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduga oma registripidaja poole. Teie registripidaja on <%= @contact.registrar.name %>

-<% if @contact.domain_contacts.present? %> +<% if @contact.related_domain_descriptions.present? %> Muudatusega seotud domeenid:
-<% @contact.domain_contacts.each do |dc| %> - <%= dc.domain.name %> (<%= dc.name %>)
+<% @contact.related_domain_descriptions.each do |domain, desc| %> + <%= domain %> (<%= desc.map { |d| t(d, locale: :et) }.join(', ') %>)
<% end %> <% end %>
@@ -35,9 +35,11 @@ new address: <% @contact.email %>

E-mail addresses are used to send important information regarding your registered domains including applications for approval of registrant change and domain deletion. Please make sure that the update and contact information are correct. Incase of problems please turn to your registrar. Your registrar is <%= @contact.registrar.name %>

+<% if @contact.related_domain_descriptions.present? %> Domains affected by this update:
-<% @contact.domain_contacts.each do |dc| %> - <%= dc.domain.name %> (<%= dc.name %>)
+<% @contact.related_domain_descriptions.each do |domain, desc| %> + <%= domain %> (<%= desc.map { |d| t(d, locale: :en) }.join(', ') %>)
+<% end %> <% end %>
Contact information:
diff --git a/app/views/contact_mailer/email_updated.text.erb b/app/views/contact_mailer/email_updated.text.erb index 5d70bca79..61d875351 100644 --- a/app/views/contact_mailer/email_updated.text.erb +++ b/app/views/contact_mailer/email_updated.text.erb @@ -6,11 +6,11 @@ uus aadress: <%= @contact.email %> Eposti aadressile saadetakse domeenidega seotud infot seal hulgas kinnitustaotluseid omaniku vahetuse ja domeeni kustutamise korral. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduga oma registripidaja poole. Teie registripidaja on <%= @contact.registrar.name %> -<% if @contact.domain_contacts.present? %> +<% if @contact.related_domain_descriptions.present? %> Muudatusega seotud domeenid: -<% @contact.domain_contacts.each do |dc| %> - <%= dc.domain.name %> (<%= dc.name %>) -<% end %> + <% @contact.related_domain_descriptions.each do |domain, desc| %> + <%= domain %> (<%= desc.map { |d| t(d, locale: :et) }.join(', ') %>) + <% end %> <% end %> Kontaktandmed: @@ -35,9 +35,11 @@ new address: <% @contact.email %> E-mail addresses are used to send important information regarding your registered domains including applications for approval of registrant change and domain deletion. Please make sure that the update and contact information are correct. Incase of problems please turn to your registrar. Your registrar is <%= @contact.registrar.name %> +<% if @contact.related_domain_descriptions.present? %> Domains affected by this update: -<% @contact.domain_contacts.each do |dc| %> - <%= dc.domain.name %> (<%= dc.name %>) + <% @contact.related_domain_descriptions.each do |domain, desc| %> + <%= domain %> (<%= desc.map { |d| t(d, locale: :en) }.join(', ') %>) + <% end %> <% end %> Contact information: diff --git a/app/views/domain_mailer/registrant_pending_updated.html.erb b/app/views/domain_mailer/registrant_pending_updated.html.erb index b081bf2b4..9f071df10 100644 --- a/app/views/domain_mailer/registrant_pending_updated.html.erb +++ b/app/views/domain_mailer/registrant_pending_updated.html.erb @@ -9,8 +9,6 @@ Isikukood: <%= @domain.registrant_ident %>
<% else %> Äriregistrikood: <%= @domain.registrant_ident %>
<% end %> -Epost: <%= @domain.registrant_email %>
-Tel: <%= @domain.registrant_phone %>
Tänav: <%= @domain.registrant_street %>
Linn: <%= @domain.registrant_city %>
Riik: <%= @domain.registrant_country %> @@ -34,8 +32,6 @@ Personal code: <%= @domain.registrant_ident %>
<% else %> Business Registry code: <%= @domain.registrant_ident %>
<% end %> -E-mail: <%= @domain.registrant_email %>
-Tel: <%= @domain.registrant_phone %>
Street: <%= @domain.registrant_street %>
City: <%= @domain.registrant_city %>
Country: <%= @domain.registrant_country %> diff --git a/app/views/domain_mailer/registrant_pending_updated.text.erb b/app/views/domain_mailer/registrant_pending_updated.text.erb index ca6609eac..228c7f0a4 100644 --- a/app/views/domain_mailer/registrant_pending_updated.text.erb +++ b/app/views/domain_mailer/registrant_pending_updated.text.erb @@ -9,8 +9,6 @@ Isikukood: <%= @domain.registrant_ident %> <% else %> Äriregistrikood: <%= @domain.registrant_ident %> <% end %> -Epost: <%= @domain.registrant_email %> -Tel: <%= @domain.registrant_phone %> Tänav: <%= @domain.registrant_street %> Linn: <%= @domain.registrant_city %> Riik: <%= @domain.registrant_country %> @@ -34,8 +32,6 @@ Personal code: <%= @domain.registrant_ident %> <% else %> Business Registry code: <%= @domain.registrant_ident %> <% end %> -E-mail: <%= @domain.registrant_email %> -Tel: <%= @domain.registrant_phone %> Street: <%= @domain.registrant_street %> City: <%= @domain.registrant_city %> Country: <%= @domain.registrant_country %> diff --git a/app/views/epp/contacts/check.xml.builder b/app/views/epp/contacts/check.xml.builder index 4df3597e3..f4dcdea82 100644 --- a/app/views/epp/contacts/check.xml.builder +++ b/app/views/epp/contacts/check.xml.builder @@ -5,7 +5,7 @@ xml.epp_head do end xml.resData do - xml.tag!('contact:chkData', 'xmlns:contact' => 'urn:ietf:params:xml:ns:contact-1.0') do + xml.tag!('contact:chkData', 'xmlns:contact' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd') do @results.each do |result| xml.tag!('contact:cd') do xml.tag! "contact:id", result[:code], avail: result[:avail] @@ -15,6 +15,6 @@ xml.epp_head do end end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/contacts/create.xml.builder b/app/views/epp/contacts/create.xml.builder index 85f5f50c1..1a4da8473 100644 --- a/app/views/epp/contacts/create.xml.builder +++ b/app/views/epp/contacts/create.xml.builder @@ -5,12 +5,12 @@ xml.epp_head do end xml.resData do - xml.tag!('contact:creData', 'xmlns:contact' => 'urn:ietf:params:xml:ns:contact-1.0') do + xml.tag!('contact:creData', 'xmlns:contact' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd') do xml.tag!('contact:id', @contact.code) - xml.tag!('contact:crDate', @contact.created_at) + xml.tag!('contact:crDate', @contact.created_at.try(:iso8601)) end end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/contacts/delete.xml.builder b/app/views/epp/contacts/delete.xml.builder index 4490335a9..a111f92d0 100644 --- a/app/views/epp/contacts/delete.xml.builder +++ b/app/views/epp/contacts/delete.xml.builder @@ -4,6 +4,6 @@ xml.epp_head do xml.msg 'Command completed successfully' end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/contacts/info.xml.builder b/app/views/epp/contacts/info.xml.builder index cdec58fe2..da8edbdf7 100644 --- a/app/views/epp/contacts/info.xml.builder +++ b/app/views/epp/contacts/info.xml.builder @@ -5,12 +5,12 @@ xml.epp_head do end xml.resData do - xml.tag!('contact:infData', 'xmlns:contact' => 'urn:ietf:params:xml:ns:contact-1.0') do + xml.tag!('contact:infData', 'xmlns:contact' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd') do xml.tag!('contact:id', @contact.code) - if can? :view_full_info, @contact, @password - xml.tag!('contact:voice', @contact.phone) - xml.tag!('contact:email', @contact.email) - xml.tag!('contact:fax', @contact.fax) if @contact.fax.present? + xml.tag!('contact:roid', @contact.roid) + + @contact.statuses.each do |status| + xml.tag!('contact:status', s: status.value) end xml.tag!('contact:postalInfo', type: 'int') do @@ -20,19 +20,29 @@ xml.epp_head do xml.tag!('contact:addr') do xml.tag!('contact:street', @contact.street) xml.tag!('contact:city', @contact.city) - xml.tag!('contact:pc', @contact.zip) xml.tag!('contact:sp', @contact.state) + xml.tag!('contact:pc', @contact.zip) xml.tag!('contact:cc', @contact.country_code) end end end + if can? :view_full_info, @contact, @password + xml.tag!('contact:voice', @contact.phone) + xml.tag!('contact:fax', @contact.fax) if @contact.fax.present? + xml.tag!('contact:email', @contact.email) + end + xml.tag!('contact:clID', @contact.registrar.try(:name)) - xml.tag!('contact:crID', @contact.creator.try(:registrar)) - xml.tag!('contact:crDate', @contact.created_at) + if @contact.creator.try(:registrar).blank? && Rails.env.test? + xml.tag!('contact:crID', 'TEST-CREATOR') + else + xml.tag!('contact:crID', @contact.creator.try(:registrar)) + end + xml.tag!('contact:crDate', @contact.created_at.try(:iso8601)) if @contact.updated_at != @contact.created_at xml.tag!('contact:upID', @contact.updator.try(:registrar)) - xml.tag!('contact:upDate', @contact.updated_at) + xml.tag!('contact:upDate', @contact.updated_at.try(:iso8601)) end # xml.tag!('contact:trDate', '123') if false if can? :view_password, @contact, @password @@ -40,21 +50,18 @@ xml.epp_head do xml.tag!('contact:pw', @contact.auth_info) end end - @contact.statuses.each do |status| - xml.tag!('contact:status', s: status.value) - end # xml << render('/epp/contacts/disclosure_policy') end end if can? :view_full_info, @contact, @password xml.tag!('extension') do - xml.tag!('eis:extdata', 'xmlns:eis' => 'urn:ee:eis:xml:epp:eis-1.0') do - xml.tag!('eis:ident', @contact.ident, + xml.tag!('eis:extdata', 'xmlns:eis' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd') do + xml.tag!('eis:ident', @contact.ident, type: @contact.ident_type, cc: @contact.ident_country_code) end end end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/contacts/update.xml.builder b/app/views/epp/contacts/update.xml.builder index 85f5f50c1..1a4da8473 100644 --- a/app/views/epp/contacts/update.xml.builder +++ b/app/views/epp/contacts/update.xml.builder @@ -5,12 +5,12 @@ xml.epp_head do end xml.resData do - xml.tag!('contact:creData', 'xmlns:contact' => 'urn:ietf:params:xml:ns:contact-1.0') do + xml.tag!('contact:creData', 'xmlns:contact' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd') do xml.tag!('contact:id', @contact.code) - xml.tag!('contact:crDate', @contact.created_at) + xml.tag!('contact:crDate', @contact.created_at.try(:iso8601)) end end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/domains/check.xml.builder b/app/views/epp/domains/check.xml.builder index 2a6398b15..8441f4118 100644 --- a/app/views/epp/domains/check.xml.builder +++ b/app/views/epp/domains/check.xml.builder @@ -5,7 +5,7 @@ xml.epp_head do end xml.resData do - xml.tag!('domain:chkData', 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0') do + xml.tag!('domain:chkData', 'xmlns:domain' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd') do @domains.each do |x| xml.tag!('domain:cd') do xml.tag!('domain:name', x[:name], 'avail' => x[:avail]) @@ -15,6 +15,6 @@ xml.epp_head do end end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/domains/create.xml.builder b/app/views/epp/domains/create.xml.builder index ada6b7362..dd22fb0b8 100644 --- a/app/views/epp/domains/create.xml.builder +++ b/app/views/epp/domains/create.xml.builder @@ -5,13 +5,13 @@ xml.epp_head do end xml.resData do - xml.tag!('domain:creData', 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0') do + xml.tag!('domain:creData', 'xmlns:domain' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd') do xml.tag!('domain:name', @domain.name) - xml.tag!('domain:crDate', @domain.created_at) - xml.tag!('domain:exDate', @domain.valid_to) + xml.tag!('domain:crDate', @domain.created_at.try(:iso8601)) + xml.tag!('domain:exDate', @domain.valid_to.try(:iso8601)) end end - end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) + end end diff --git a/app/views/epp/domains/info.xml.builder b/app/views/epp/domains/info.xml.builder index 22b352dfb..ebaf613d5 100644 --- a/app/views/epp/domains/info.xml.builder +++ b/app/views/epp/domains/info.xml.builder @@ -5,11 +5,11 @@ xml.epp_head do end xml.resData do - xml.tag!('domain:infData', 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0') do + xml.tag!('domain:infData', 'xmlns:domain' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd') do xml.tag!('domain:name', @domain.name) - @domain.domain_statuses.each do |ds| - xml.tag!('domain:status', ds.description, 's' => ds.value) unless ds.description.blank? - xml.tag!('domain:status', 's' => ds.value) if ds.description.blank? + xml.tag!('domain:roid', @domain.roid) + @domain.statuses.each do |s| + xml.tag!('domain:status', 's' => s) end xml.tag!('domain:registrant', @domain.registrant_code) @@ -38,17 +38,17 @@ xml.epp_head do xml.tag!('domain:clID', @domain.registrar_name) - xml.tag!('domain:crID', @domain.creator.try(:registrar)) + xml.tag!('domain:crID', @domain.creator.try(:registrar)) if @domain.creator - xml.tag!('domain:crDate', @domain.created_at) + xml.tag!('domain:crDate', @domain.created_at.try(:iso8601)) - xml.tag!('domain:exDate', @domain.valid_to) + xml.tag!('domain:upDate', @domain.updated_at.try(:iso8601)) if @domain.updated_at != @domain.created_at + + xml.tag!('domain:exDate', @domain.valid_to.try(:iso8601)) # TODO Make domain stampable #xml.tag!('domain:upID', @domain.updated_by) - xml.tag!('domain:upDate', @domain.updated_at) if @domain.updated_at != @domain.created_at - # TODO Make domain transferrable #xml.tag!('domain:trDate', @domain.transferred_at) if @domain.transferred_at @@ -59,26 +59,26 @@ xml.epp_head do end end end - end - xml.extension do - xml.tag!('secDNS:infData', 'xmlns:secDNS' => 'urn:ietf:params:xml:ns:secDNS-1.1') do - @domain.dnskeys.sort.each do |key| - xml.tag!('secDNS:dsData') do - xml.tag!('secDNS:keyTag', key.ds_key_tag) - xml.tag!('secDNS:alg', key.ds_alg) - xml.tag!('secDNS:digestType', key.ds_digest_type) - xml.tag!('secDNS:digest', key.ds_digest) - xml.tag!('secDNS:keyData') do - xml.tag!('secDNS:flags', key.flags) - xml.tag!('secDNS:protocol', key.protocol) - xml.tag!('secDNS:alg', key.alg) - xml.tag!('secDNS:pubKey', key.public_key) + xml.extension do + xml.tag!('secDNS:infData', 'xmlns:secDNS' => 'urn:ietf:params:xml:ns:secDNS-1.1') do + @domain.dnskeys.sort.each do |key| + xml.tag!('secDNS:dsData') do + xml.tag!('secDNS:keyTag', key.ds_key_tag) + xml.tag!('secDNS:alg', key.ds_alg) + xml.tag!('secDNS:digestType', key.ds_digest_type) + xml.tag!('secDNS:digest', key.ds_digest) + xml.tag!('secDNS:keyData') do + xml.tag!('secDNS:flags', key.flags) + xml.tag!('secDNS:protocol', key.protocol) + xml.tag!('secDNS:alg', key.alg) + xml.tag!('secDNS:pubKey', key.public_key) + end end end end - end - end if @domain.dnskeys.any? + end if @domain.dnskeys.any? - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) + end end diff --git a/app/views/epp/domains/partials/_transfer.xml.builder b/app/views/epp/domains/partials/_transfer.xml.builder index 893cd7c2e..a98cf231e 100644 --- a/app/views/epp/domains/partials/_transfer.xml.builder +++ b/app/views/epp/domains/partials/_transfer.xml.builder @@ -1,9 +1,9 @@ -builder.tag!('domain:trnData', 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0') do +builder.tag!('domain:trnData', 'xmlns:domain' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd') do builder.tag!('domain:name', dt.domain_name) builder.tag!('domain:trStatus', dt.status) builder.tag!('domain:reID', dt.transfer_to.code) - builder.tag!('domain:reDate', dt.transfer_requested_at) + builder.tag!('domain:reDate', dt.transfer_requested_at.try(:iso8601)) builder.tag!('domain:acID', dt.transfer_from.code) - builder.tag!('domain:acDate', dt.transferred_at || dt.wait_until) - builder.tag!('domain:exDate', dt.domain_valid_to) + builder.tag!('domain:acDate', dt.transferred_at.try(:iso8601) || dt.wait_until.try(:iso8601)) + builder.tag!('domain:exDate', dt.domain_valid_to.try(:iso8601)) end diff --git a/app/views/epp/domains/renew.xml.builder b/app/views/epp/domains/renew.xml.builder index 34484b096..b970b322e 100644 --- a/app/views/epp/domains/renew.xml.builder +++ b/app/views/epp/domains/renew.xml.builder @@ -5,12 +5,12 @@ xml.epp_head do end xml.resData do - xml.tag!('domain:renData', 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0') do + xml.tag!('domain:renData', 'xmlns:domain' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd') do xml.tag!('domain:name', @domain[:name]) - xml.tag!('domain:exDate', @domain.valid_to) + xml.tag!('domain:exDate', @domain.valid_to.try(:iso8601)) end end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/domains/success.xml.builder b/app/views/epp/domains/success.xml.builder index a8bfe162f..a111f92d0 100644 --- a/app/views/epp/domains/success.xml.builder +++ b/app/views/epp/domains/success.xml.builder @@ -3,7 +3,7 @@ xml.epp_head do xml.result('code' => '1000') do xml.msg 'Command completed successfully' end - end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) + end end diff --git a/app/views/epp/domains/success_pending.xml.builder b/app/views/epp/domains/success_pending.xml.builder index 3d1783009..e7c52f970 100644 --- a/app/views/epp/domains/success_pending.xml.builder +++ b/app/views/epp/domains/success_pending.xml.builder @@ -3,7 +3,6 @@ xml.epp_head do xml.result('code' => '1001') do xml.msg 'Command completed successfully; action pending' end + render('epp/shared/trID', builder: xml) end - - xml << render('/epp/shared/trID') end diff --git a/app/views/epp/domains/transfer.xml.builder b/app/views/epp/domains/transfer.xml.builder index bea166939..59fffc852 100644 --- a/app/views/epp/domains/transfer.xml.builder +++ b/app/views/epp/domains/transfer.xml.builder @@ -7,7 +7,7 @@ xml.epp_head do xml.resData do xml << render('epp/domains/partials/transfer', builder: xml, dt: @domain_transfer) end - end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) + end end diff --git a/app/views/epp/error.xml.builder b/app/views/epp/error.xml.builder index 718440bd7..796856f4c 100644 --- a/app/views/epp/error.xml.builder +++ b/app/views/epp/error.xml.builder @@ -20,7 +20,6 @@ xml.epp_head do end end + render('epp/shared/trID', builder: xml) end - - xml << render('/epp/shared/trID') end diff --git a/app/views/epp/latin_error.xml.builder b/app/views/epp/latin_error.xml.builder new file mode 100644 index 000000000..6ff19efbf --- /dev/null +++ b/app/views/epp/latin_error.xml.builder @@ -0,0 +1,8 @@ +xml.epp_head do + xml.response do + xml.result('code' => '2306') do + xml.msg('Parameter value policy error. Allowed only Latin characters.', 'lang' => 'en') + end + render('epp/shared/trID', builder: xml) + end +end diff --git a/app/views/epp/poll/poll_ack.xml.builder b/app/views/epp/poll/poll_ack.xml.builder index 3ba104dcd..05ea8b8d0 100644 --- a/app/views/epp/poll/poll_ack.xml.builder +++ b/app/views/epp/poll/poll_ack.xml.builder @@ -6,6 +6,6 @@ xml.epp_head do xml.tag!('msgQ', 'count' => current_user.queued_messages.count, 'id' => @message.id) - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/poll/poll_keyrelay.xml.builder b/app/views/epp/poll/poll_keyrelay.xml.builder index 049b0bf39..9e245bd3e 100644 --- a/app/views/epp/poll/poll_keyrelay.xml.builder +++ b/app/views/epp/poll/poll_keyrelay.xml.builder @@ -2,7 +2,7 @@ xml.instruct!(:xml, standalone: 'no') xml.epp( 'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0', 'xmlns:secDNS' => 'urn:ietf:params:xml:ns:secDNS-1.1', - 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0', + 'xmlns:domain' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd', 'xmlns:keyrelay' => 'urn:ietf:params:xml:ns:keyrelay-1.0' ) do xml.response do @@ -11,7 +11,7 @@ xml.epp( end xml.tag!('msgQ', 'count' => current_user.queued_messages.count, 'id' => @message.id) do - xml.qDate @message.created_at + xml.qDate @message.created_at.try(:iso8601) xml.msg @message.body end @@ -19,7 +19,7 @@ xml.epp( xml.tag!('keyrelay:response') do xml.tag!('keyrelay:panData') do xml.tag!('keyrelay:name', @object.domain_name) - xml.tag!('keyrelay:paDate', @object.pa_date) + xml.tag!('keyrelay:paDate', @object.pa_date.try(:iso8601)) xml.tag!('keyrelay:keyData') do xml.tag!('secDNS:flags', @object.key_data_flags) @@ -44,6 +44,6 @@ xml.epp( end end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/poll/poll_no_messages.xml.builder b/app/views/epp/poll/poll_no_messages.xml.builder index 1e57a1216..b48b8cef5 100644 --- a/app/views/epp/poll/poll_no_messages.xml.builder +++ b/app/views/epp/poll/poll_no_messages.xml.builder @@ -4,6 +4,6 @@ xml.epp_head do xml.msg 'Command completed successfully; no messages' end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/poll/poll_req.xml.builder b/app/views/epp/poll/poll_req.xml.builder index f839670a3..347f0a632 100644 --- a/app/views/epp/poll/poll_req.xml.builder +++ b/app/views/epp/poll/poll_req.xml.builder @@ -5,7 +5,7 @@ xml.epp_head do end xml.tag!('msgQ', 'count' => current_user.queued_messages.count, 'id' => @message.id) do - xml.qDate @message.created_at + xml.qDate @message.created_at.try(:iso8601) xml.msg @message.body end @@ -15,6 +15,6 @@ xml.epp_head do end end if @object - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/sessions/greeting.xml.builder b/app/views/epp/sessions/greeting.xml.builder index c5a1a1a9e..34a983aca 100644 --- a/app/views/epp/sessions/greeting.xml.builder +++ b/app/views/epp/sessions/greeting.xml.builder @@ -5,13 +5,13 @@ xml.epp_head do xml.svcMenu do xml.version '1.0' xml.lang 'en' - xml.objURI 'urn:ietf:params:xml:ns:domain-1.0' - xml.objURI 'urn:ietf:params:xml:ns:contact-1.0' + xml.objURI 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd' + xml.objURI 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd' xml.objURI 'urn:ietf:params:xml:ns:host-1.0' xml.objURI 'urn:ietf:params:xml:ns:keyrelay-1.0' xml.svcExtension do xml.extURI 'urn:ietf:params:xml:ns:secDNS-1.1' - xml.extURI 'urn:ee:eis:xml:epp:eis-1.0' + xml.extURI 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd' end end diff --git a/app/views/epp/sessions/login_fail.xml.builder b/app/views/epp/sessions/login_fail.xml.builder index a76057270..5e2e99162 100644 --- a/app/views/epp/sessions/login_fail.xml.builder +++ b/app/views/epp/sessions/login_fail.xml.builder @@ -3,7 +3,7 @@ xml.epp_head do xml.result('code' => '2501') do xml.msg(@msg || 'Authentication error; server closing connection') end - end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) + end end diff --git a/app/views/epp/sessions/login_success.xml.builder b/app/views/epp/sessions/login_success.xml.builder index 4490335a9..a111f92d0 100644 --- a/app/views/epp/sessions/login_success.xml.builder +++ b/app/views/epp/sessions/login_success.xml.builder @@ -4,6 +4,6 @@ xml.epp_head do xml.msg 'Command completed successfully' end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) end end diff --git a/app/views/epp/sessions/logout.xml.builder b/app/views/epp/sessions/logout.xml.builder index 917481a7e..5bf1f8873 100644 --- a/app/views/epp/sessions/logout.xml.builder +++ b/app/views/epp/sessions/logout.xml.builder @@ -3,7 +3,7 @@ xml.epp_head do xml.result('code' => '1500') do xml.msg 'Command completed successfully; ending session' end - end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) + end end diff --git a/app/views/epp/shared/_trID.xml.builder b/app/views/epp/shared/_trID.xml.builder index 5d59baa0c..ace7b1beb 100644 --- a/app/views/epp/shared/_trID.xml.builder +++ b/app/views/epp/shared/_trID.xml.builder @@ -1,4 +1,5 @@ -xml.trID do - xml.clTRID params[:clTRID] - xml.svTRID @svTRID +# builder ||= xml +builder.trID do + builder.clTRID params[:clTRID] if params[:clTRID].present? + builder.svTRID @svTRID end diff --git a/app/views/epp/shared/success.xml.builder b/app/views/epp/shared/success.xml.builder index a8bfe162f..a111f92d0 100644 --- a/app/views/epp/shared/success.xml.builder +++ b/app/views/epp/shared/success.xml.builder @@ -3,7 +3,7 @@ xml.epp_head do xml.result('code' => '1000') do xml.msg 'Command completed successfully' end - end - xml << render('/epp/shared/trID') + render('epp/shared/trID', builder: xml) + end end diff --git a/app/views/layouts/admin/application.haml b/app/views/layouts/admin/application.haml index 016ebd3b7..2cde75596 100644 --- a/app/views/layouts/admin/application.haml +++ b/app/views/layouts/admin/application.haml @@ -51,16 +51,21 @@ %li= link_to t(:admin_users), admin_admin_users_path %li.divider %li.dropdown-header= t(:billing) + - if can? :view, Pricelist + %li= link_to t(:pricelists), admin_pricelists_path %li= link_to t(:bank_statements), admin_bank_statements_path %li= link_to t(:invoices), admin_invoices_path %li.divider %li.dropdown-header= t(:system) %li= link_to t(:settings), admin_settings_path %li= link_to t(:zonefile), admin_zonefile_settings_path + %li.dropdown-header= t(:system) + %li= link_to t(:settings), admin_settings_path + %li= link_to t(:zonefile), admin_zonefile_settings_path -# %li= link_to t(:domains_history), admin_domain_versions_path %li= link_to t(:epp_logs), admin_epp_logs_path %li= link_to t(:repp_logs), admin_repp_logs_path - -# %li= link_to t(:background_jobs), admin_delayed_jobs_path + %li= link_to t(:que), '/admin/que' - if signed_in? %ul.nav.navbar-nav.navbar-right diff --git a/app/views/registrant/domain_delete_confirms/show.haml b/app/views/registrant/domain_delete_confirms/show.haml index 0484fc153..fca337844 100644 --- a/app/views/registrant/domain_delete_confirms/show.haml +++ b/app/views/registrant/domain_delete_confirms/show.haml @@ -1,4 +1,44 @@ -- if @domain.present? +- if params[:confirmed].present? + .row + .col-md-12 + %h1= t(:domain_delete_confirmed_title) + .row + .col-md-12 + %p= t(:domain_delete_confirmed_body) +- elsif params[:rejected].present? + .row + .col-md-12 + %h1= t(:domain_delete_rejected_title) + .row + .col-md-12 + %p= t(:domain_delete_rejected_body) - else - %h1= t(:not_valid_domain_verification_title).html_safe - %p= t(:not_valid_domain_verification_body).html_safe + - if @domain.present? + .row + .col-md-12 + %h1= t(:domain_delete_title) + .row + .col-md-12 + %p= t(:domain_delete_body) + + %hr + .row + .col-md-12.text-center.confirmation + .column-keys + %p= t(:domain_name) + ':' + %p= t(:registrant) + ':' + .column-values + %p= @domain.name + %p= "#{@domain.registrant_name} (#{@domain.registrant.ident})" + + .row + .col-md-12.text-center + .confirmation + = form_for registrant_domain_delete_confirm_path(@domain.id), method: :patch do |f| + = hidden_field_tag :token, params[:token] + = f.button t(:confirm_domain_delete), name: 'confirmed', class: 'btn btn-primary' + = f.button t(:reject_domain_delete), name: 'rejected', class: 'btn btn-warning' + %hr + - else + %h1= t(:not_valid_domain_verification_title).html_safe + %p= t(:not_valid_domain_verification_body).html_safe diff --git a/app/views/registrant/domain_update_confirms/show.haml b/app/views/registrant/domain_update_confirms/show.haml index d777f3bf6..796638109 100644 --- a/app/views/registrant/domain_update_confirms/show.haml +++ b/app/views/registrant/domain_update_confirms/show.haml @@ -25,13 +25,13 @@ .row .col-md-12.text-center.confirmation .column-keys - %p= t(:domain_name) + ':' + %p= t(:domain_name) + ':' %p= t(:current_registrant) + ':' %p= t(:new_pending_registrant) + ':' .column-values %p= @domain.name - %p= @domain.registrant_name - %p= @domain.pending_registrant_name + %p= "#{@domain.registrant_name} (#{@domain.registrant.ident})" + %p= "#{@domain.pending_registrant.try(:name)} (#{@domain.pending_registrant.try(:ident)})" .row .col-md-12.text-center diff --git a/app/views/registrar/contacts/form_partials/_general.haml b/app/views/registrar/contacts/form_partials/_general.haml index 623d27c18..9e243103a 100644 --- a/app/views/registrar/contacts/form_partials/_general.haml +++ b/app/views/registrar/contacts/form_partials/_general.haml @@ -7,20 +7,20 @@ = f.label :ident_country_code, t(:country) + '*' .col-md-7 = f.select(:ident_country_code, SortedCountry.all_options(f.object.ident_country_code), {}, - class: 'js-ident-country-code', required: true) + class: 'js-ident-country-code', required: true, disabled: @contact.persisted?) .form-group .col-md-3.control-label = f.label :ident_type, t(:type) + '*' .col-md-7 = f.select(:ident_type, Depp::Contact::SELECTION_TYPES, { selected: f.object.ident_type }, - class: 'js-ident-type', required: true) + class: 'js-ident-type', required: true, disabled: @contact.persisted?) .form-group .col-md-3.control-label = f.label :ident, t(:ident) + '*' .col-md-7 - = f.text_field :ident, class: 'form-control', required: true + = f.text_field :ident, class: 'form-control', required: true, disabled: @contact.persisted? - tip_visibility = f.object.ident_type == 'birthday' ? '' : 'display: none' .js-ident-tip{ style: tip_visibility } = t(:birthday_format) diff --git a/app/views/registrar/contacts/partials/_general.haml b/app/views/registrar/contacts/partials/_general.haml index 3e3894278..c4804fe53 100644 --- a/app/views/registrar/contacts/partials/_general.haml +++ b/app/views/registrar/contacts/partials/_general.haml @@ -7,7 +7,9 @@ %dd= @contact.id %dt= t(:password) - %dd= @contact.password + %dd + = text_field_tag :password, @contact.password, readonly: true, class: 'partially-hidden' + %br diff --git a/app/views/registrar/domains/info.haml b/app/views/registrar/domains/info.haml index 369e0f87d..4d7ffb429 100644 --- a/app/views/registrar/domains/info.haml +++ b/app/views/registrar/domains/info.haml @@ -1,10 +1,11 @@ - content_for :actions do - = link_to(t(:edit), edit_registrar_domains_path(domain_name: params[:domain_name]), - class: 'btn btn-default') - = link_to(t(:renew), renew_registrar_domains_path(domain_name: params[:domain_name]), - class: 'btn btn-default') - = link_to(t(:delete), delete_registrar_domains_path(domain_name: params[:domain_name]), - class: 'btn btn-default') + - if @data.css('pw').text.present? + = link_to(t(:edit), edit_registrar_domains_path(domain_name: params[:domain_name]), + class: 'btn btn-default') + = link_to(t(:renew), renew_registrar_domains_path(domain_name: params[:domain_name]), + class: 'btn btn-default') + = link_to(t(:delete), delete_registrar_domains_path(domain_name: params[:domain_name]), + class: 'btn btn-default') = render 'shared/title', name: truncate(@data.css('name').text) .row diff --git a/app/views/registrar/domains/transfer_index.haml b/app/views/registrar/domains/transfer_index.haml index 5eab1f5ae..ecc5ff1a4 100644 --- a/app/views/registrar/domains/transfer_index.haml +++ b/app/views/registrar/domains/transfer_index.haml @@ -17,11 +17,11 @@ class: 'form-control', autocomplete: 'off', required: true .form-group .col-md-3.control-label - = label_tag 'legal_document', t(:legal_document), class: 'required' + = label_tag 'legal_document', t(:legal_document) .col-md-7 - = file_field_tag 'legal_document', required: true + = file_field_tag 'legal_document' .form-group .col-md-10.text-right - %button.btn.btn-warning{ name: 'query' }= t(:query) - %button.btn.btn-warning{ name: 'approve' }= t(:approve) - %button.btn.btn-warning{ name: 'reject' }= t(:reject) + %button.btn.btn-warning{ name: 'query' }= t(:transfer) + /%button.btn.btn-warning{ name: 'approve' }= t(:approve) + /%button.btn.btn-warning{ name: 'reject' }= t(:reject) diff --git a/app/views/registrar/xml_consoles/epp_requests/contact/check.xml b/app/views/registrar/xml_consoles/epp_requests/contact/check.xml index 2748c7275..4bf1e6eb3 100644 --- a/app/views/registrar/xml_consoles/epp_requests/contact/check.xml +++ b/app/views/registrar/xml_consoles/epp_requests/contact/check.xml @@ -3,7 +3,7 @@ + xmlns:contact="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd"> sh8013 diff --git a/app/views/registrar/xml_consoles/epp_requests/contact/check_multiple.xml b/app/views/registrar/xml_consoles/epp_requests/contact/check_multiple.xml index a77dcd852..67f9f266c 100644 --- a/app/views/registrar/xml_consoles/epp_requests/contact/check_multiple.xml +++ b/app/views/registrar/xml_consoles/epp_requests/contact/check_multiple.xml @@ -3,7 +3,7 @@ + xmlns:contact="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd"> sh8013 sh13 vsdfvq diff --git a/app/views/registrar/xml_consoles/epp_requests/contact/create.xml b/app/views/registrar/xml_consoles/epp_requests/contact/create.xml index 6264ddeb8..8fa81d779 100644 --- a/app/views/registrar/xml_consoles/epp_requests/contact/create.xml +++ b/app/views/registrar/xml_consoles/epp_requests/contact/create.xml @@ -2,7 +2,7 @@ - + Sillius Soddus @@ -20,7 +20,7 @@ - + 123 JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== diff --git a/app/views/registrar/xml_consoles/epp_requests/contact/delete.xml b/app/views/registrar/xml_consoles/epp_requests/contact/delete.xml index 7b98c32df..69dc8d3b8 100644 --- a/app/views/registrar/xml_consoles/epp_requests/contact/delete.xml +++ b/app/views/registrar/xml_consoles/epp_requests/contact/delete.xml @@ -3,7 +3,7 @@ + xmlns:contact="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd"> sh8013 wrong-one @@ -11,7 +11,7 @@ - + JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== diff --git a/app/views/registrar/xml_consoles/epp_requests/contact/info.xml b/app/views/registrar/xml_consoles/epp_requests/contact/info.xml index e40e42fd7..19ad4de9d 100644 --- a/app/views/registrar/xml_consoles/epp_requests/contact/info.xml +++ b/app/views/registrar/xml_consoles/epp_requests/contact/info.xml @@ -2,7 +2,7 @@ - + sh8013 Aas34fq diff --git a/app/views/registrar/xml_consoles/epp_requests/contact/update_chg.xml b/app/views/registrar/xml_consoles/epp_requests/contact/update_chg.xml index 01e13e701..49631d3a0 100644 --- a/app/views/registrar/xml_consoles/epp_requests/contact/update_chg.xml +++ b/app/views/registrar/xml_consoles/epp_requests/contact/update_chg.xml @@ -2,7 +2,7 @@ - + sh8013 @@ -25,7 +25,7 @@ - + JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== diff --git a/app/views/registrar/xml_consoles/epp_requests/domain/check.xml b/app/views/registrar/xml_consoles/epp_requests/domain/check.xml index b55a4b129..94c765ab6 100644 --- a/app/views/registrar/xml_consoles/epp_requests/domain/check.xml +++ b/app/views/registrar/xml_consoles/epp_requests/domain/check.xml @@ -3,7 +3,7 @@ + xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd"> example.ee diff --git a/app/views/registrar/xml_consoles/epp_requests/domain/create.xml b/app/views/registrar/xml_consoles/epp_requests/domain/create.xml index 97be9f695..e80c17cbf 100644 --- a/app/views/registrar/xml_consoles/epp_requests/domain/create.xml +++ b/app/views/registrar/xml_consoles/epp_requests/domain/create.xml @@ -3,7 +3,7 @@ + xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd"> example.ee 1 @@ -33,7 +33,7 @@ - + JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== diff --git a/app/views/registrar/xml_consoles/epp_requests/domain/delete.xml b/app/views/registrar/xml_consoles/epp_requests/domain/delete.xml index 47692e340..1a97703f8 100644 --- a/app/views/registrar/xml_consoles/epp_requests/domain/delete.xml +++ b/app/views/registrar/xml_consoles/epp_requests/domain/delete.xml @@ -3,12 +3,12 @@ + xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd"> example.ee - + JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== diff --git a/app/views/registrar/xml_consoles/epp_requests/domain/info.xml b/app/views/registrar/xml_consoles/epp_requests/domain/info.xml index 9f654753f..f7f0192c0 100644 --- a/app/views/registrar/xml_consoles/epp_requests/domain/info.xml +++ b/app/views/registrar/xml_consoles/epp_requests/domain/info.xml @@ -3,7 +3,7 @@ + xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd"> example.ee 2fooBAR diff --git a/app/views/registrar/xml_consoles/epp_requests/domain/renew.xml b/app/views/registrar/xml_consoles/epp_requests/domain/renew.xml index 2ba7ea4a8..73070bfc4 100644 --- a/app/views/registrar/xml_consoles/epp_requests/domain/renew.xml +++ b/app/views/registrar/xml_consoles/epp_requests/domain/renew.xml @@ -3,7 +3,7 @@ + xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd"> example.ee 2014-08-07 1 diff --git a/app/views/registrar/xml_consoles/epp_requests/domain/transfer.xml b/app/views/registrar/xml_consoles/epp_requests/domain/transfer.xml index 1c9e0a254..266b56e9c 100644 --- a/app/views/registrar/xml_consoles/epp_requests/domain/transfer.xml +++ b/app/views/registrar/xml_consoles/epp_requests/domain/transfer.xml @@ -3,7 +3,7 @@ + xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd"> example.ee 2BARfoo @@ -11,7 +11,7 @@ - + JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== diff --git a/app/views/registrar/xml_consoles/epp_requests/domain/update.xml b/app/views/registrar/xml_consoles/epp_requests/domain/update.xml index f0d4b1f81..26df74165 100644 --- a/app/views/registrar/xml_consoles/epp_requests/domain/update.xml +++ b/app/views/registrar/xml_consoles/epp_requests/domain/update.xml @@ -3,7 +3,7 @@ + xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd"> example.ee mak21 @@ -37,7 +37,7 @@ - + JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== diff --git a/app/views/registrar/xml_consoles/epp_requests/keyrelay/keyrelay.xml b/app/views/registrar/xml_consoles/epp_requests/keyrelay/keyrelay.xml index 84ece643a..54532f23a 100644 --- a/app/views/registrar/xml_consoles/epp_requests/keyrelay/keyrelay.xml +++ b/app/views/registrar/xml_consoles/epp_requests/keyrelay/keyrelay.xml @@ -1,5 +1,5 @@ - + example6.ee @@ -16,7 +16,7 @@ P1D - + JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== 1422542244 diff --git a/app/views/shared/_title.haml b/app/views/shared/_title.haml index 5d76c6a72..3832a7664 100644 --- a/app/views/shared/_title.haml +++ b/app/views/shared/_title.haml @@ -2,10 +2,10 @@ %title= "#{truncate(name, length: 60)}#{head_title_sufix}" .row - .col-sm-7 + .col-sm-6 %h1.text-center-xs = truncate(name, length: 35) - .col-sm-5 + .col-sm-6 %h1.text-right.text-center-xs = yield :actions %hr diff --git a/config.ru b/config.ru index 5bc2a619e..4112838a0 100644 --- a/config.ru +++ b/config.ru @@ -2,3 +2,11 @@ require ::File.expand_path('../config/environment', __FILE__) run Rails.application + +if defined?(PhusionPassenger) + PhusionPassenger.on_event(:starting_worker_process) do |forked| + if forked + Que.mode = :async + end + end +end diff --git a/config/application-example.yml b/config/application-example.yml index 63060db96..24a551769 100644 --- a/config/application-example.yml +++ b/config/application-example.yml @@ -4,6 +4,7 @@ app_name: '.EE Registry' zonefile_export_dir: 'export/zonefiles' bank_statement_import_dir: 'import/bank_statements' legal_documents_dir: 'import/legal_documents' +time_zone: 'Tallinn' # more zones by rake time:zones:all # New Relic app name, keep only current mode, remove other names. # Example: 'Admin, EPP, REPP' will have name 'Admin, EPP, REPP - production' at New Relic. diff --git a/config/application.rb b/config/application.rb index 4685fc1b7..9931ce25e 100644 --- a/config/application.rb +++ b/config/application.rb @@ -21,7 +21,8 @@ module Registry # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. - config.time_zone = 'UTC' # NB! It should be defined, otherwise ActiveRecord usese other class. + config.time_zone = ENV['time_zone'] # NB! It should be defined, + # otherwise ActiveRecord usese other class internally. # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] @@ -49,6 +50,8 @@ module Registry # Instead, the errors will propagate normally just like in other Active Record callbacks. config.active_record.raise_in_transactional_callbacks = true + config.active_record.schema_format = :sql + config.generators do |g| g.stylesheets false g.javascripts false diff --git a/config/environments/test.rb b/config/environments/test.rb index 1a43b07c1..6c75b5a00 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -37,6 +37,8 @@ Rails.application.configure do # For rails-settings-cached conflict config.cache_store = :file_store, 'tmp/cache_test' + config.time_zone = 'UTC' + # Raises error for missing translations # config.action_view.raise_on_missing_translations = true diff --git a/config/initializers/datetime.rb b/config/initializers/datetime.rb new file mode 100644 index 000000000..cf4f747e2 --- /dev/null +++ b/config/initializers/datetime.rb @@ -0,0 +1,3 @@ +# Some handy day formats +Date::DATE_FORMATS[:dshort] = "%d.%m.%Y" +Time::DATE_FORMATS[:dshort] = "%d.%m.%Y" diff --git a/config/initializers/env_required.rb b/config/initializers/env_required.rb index 3df22e811..d5921a161 100644 --- a/config/initializers/env_required.rb +++ b/config/initializers/env_required.rb @@ -10,6 +10,7 @@ required = %w( webclient_ip legal_documents_dir bank_statement_import_dir + time_zone ) Figaro.require_keys(required) diff --git a/config/initializers/initial_settings.rb b/config/initializers/initial_settings.rb index 28a7d0d68..824cf0fcc 100644 --- a/config/initializers/initial_settings.rb +++ b/config/initializers/initial_settings.rb @@ -31,6 +31,9 @@ if con.present? && con.table_exists?('settings') Setting.save_default(:invoice_number_min, '131050') Setting.save_default(:invoice_number_max, '149999') Setting.save_default(:days_to_keep_overdue_invoices_active, 30) + Setting.save_default(:days_to_renew_domain_before_expire, 90) + Setting.save_default(:expire_warning_period, 15) + Setting.save_default(:redemption_grace_period, 30) end # dev only setting diff --git a/config/initializers/money.rb b/config/initializers/money.rb new file mode 100644 index 000000000..30df8eadf --- /dev/null +++ b/config/initializers/money.rb @@ -0,0 +1,70 @@ +# encoding : utf-8 + +MoneyRails.configure do |config| + + # To set the default currency + # + config.default_currency = :eur + + # Set default bank object + # + # Example: + # config.default_bank = EuCentralBank.new + + # Add exchange rates to current money bank object. + # (The conversion rate refers to one direction only) + # + # Example: + # config.add_rate "USD", "CAD", 1.24515 + # config.add_rate "CAD", "USD", 0.803115 + + # To handle the inclusion of validations for monetized fields + # The default value is true + # + # config.include_validations = true + + # Default ActiveRecord migration configuration values for columns: + # + # config.amount_column = { prefix: '', # column name prefix + # postfix: '_cents', # column name postfix + # column_name: nil, # full column name (overrides prefix, postfix and accessor name) + # type: :integer, # column type + # present: true, # column will be created + # null: false, # other options will be treated as column options + # default: 0 + # } + # + # config.currency_column = { prefix: '', + # postfix: '_currency', + # column_name: nil, + # type: :string, + # present: true, + # null: false, + # default: 'USD' + # } + + # Register a custom currency + # + # Example: + # config.register_currency = { + # :priority => 1, + # :iso_code => "EU4", + # :name => "Euro with subunit of 4 digits", + # :symbol => "€", + # :symbol_first => true, + # :subunit => "Subcent", + # :subunit_to_unit => 10000, + # :thousands_separator => ".", + # :decimal_mark => "," + # } + + # Set default money format globally. + # Default value is nil meaning "ignore this option". + # Example: + # + # config.default_format = { + # :no_cents_if_whole => nil, + # :symbol => nil, + # :sign_before_symbol => nil + # } +end diff --git a/config/initializers/new_relic_app_name.rb b/config/initializers/new_relic_app_name.rb index bc1cf7a78..a7a08cbb4 100644 --- a/config/initializers/new_relic_app_name.rb +++ b/config/initializers/new_relic_app_name.rb @@ -1 +1,3 @@ -NewRelic::Agent.config[:app_name] = "#{ENV['new_relic_app_name']} - #{Rails.env}" if ENV['new_relic_app_name'].present? +if !Rails.env.test? && ENV['new_relic_app_name'].present? + NewRelic::Agent.config[:app_name] = "#{ENV['new_relic_app_name']} - #{Rails.env}" +end diff --git a/config/initializers/que.rb b/config/initializers/que.rb new file mode 100644 index 000000000..b9e5a68ab --- /dev/null +++ b/config/initializers/que.rb @@ -0,0 +1 @@ +Que.mode = :off diff --git a/config/initializers/relaxed_i18n.rb b/config/initializers/relaxed_i18n.rb new file mode 100644 index 000000000..fc9b94983 --- /dev/null +++ b/config/initializers/relaxed_i18n.rb @@ -0,0 +1,11 @@ +# Don't raise error when nil +# http://stackoverflow.com/questions/9467034/rails-i18n-how-to-handle-case-of-a-nil-date-being-passed-ie-lnil +module I18n + class << self + alias_method :original_localize, :localize + + def localize(object, options = {}) + object.present? ? original_localize(object, options) : '' + end + end +end diff --git a/config/initializers/settings.rb b/config/initializers/settings.rb index 62adbb295..8a222b617 100644 --- a/config/initializers/settings.rb +++ b/config/initializers/settings.rb @@ -1,6 +1,4 @@ TEST_EMAILS = %w( - martin@gitlab.eu - priit@gitlab.eu timo.vohmar@internet.ee rene.vahtel@internet.ee martin.mettig@internet.ee @@ -9,6 +7,9 @@ TEST_EMAILS = %w( norman.aeg@internet.ee martti.oigus@internet.ee jana.jarve@internet.ee + martin@gitlab.eu + priit@gitlab.eu + info@gitlab.eu test@example.com test@example.org ) diff --git a/config/locales/en.yml b/config/locales/en.yml index 4a4707f59..f6d929e06 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -24,7 +24,7 @@ en: short: "%d.%m.%y, %H:%M" date: "%d.%m.%y" date_long: "%d. %B %Y" - + ydate: "%Y.%m.%d" date: formats: year_and_month: "%Y %B" @@ -48,6 +48,7 @@ en: blank: "Required parameter missing - ident" invalid_EE_identity_format: "Ident not in valid Estonian identity format." invalid_birthday_format: "Ident not in valid birthady format, should be YYYY-MM-DD" + invalid_country_code: "Ident country code is not valid, should be in ISO_3166-1 alpha 2 format" domains: exist: 'Object association prohibits operation' @@ -63,6 +64,8 @@ en: invalid: 'Domain name is invalid' reserved: 'Domain name is reserved or restricted' taken: 'Domain name already exists' + puny_label: + too_long: 'Domain name is too long (maximum is 63 characters)' registrant: blank: 'Registrant is missing' not_found: 'Registrant not found' @@ -97,6 +100,8 @@ en: invalid: 'Statuses are invalid' not_found: 'Status was not found' taken: 'Status already exists on this domain' + statuses: + taken: 'Status already exists on this domain' registrar: blank: 'Registrar is missing' dnskeys: @@ -502,6 +507,7 @@ en: crt_revoked: 'CRT (revoked)' contact_org_error: 'Parameter value policy error. Org must be blank' contact_fax_error: 'Parameter value policy error. Fax must be blank' + ident_update_error: 'Parameter value policy error. Update of ident data not allowed' invoices: 'Invoices' no_such_user: 'No such user' log_in: 'Log in' @@ -519,7 +525,7 @@ en: client_side_status_editing_error: 'Parameter value policy error. Client-side object status management not supported' switch_to: Switch to admin_menu: Admin - domain_transfer_was_approved: 'Domain transfer was approved, associated contacts are: %{contacts}' + domain_transfer_was_approved: 'Domain transfer was approved, associated contacts were: %{contacts} and registrant was %{registrant}' # DEPP activemodel: @@ -784,17 +790,23 @@ en: reject_domain_registrant_update: 'Reject domain ownership change' domain_registrant_change_title: 'Please confirm or reject domain ownership change' domain_registrant_change_body: 'There is a request to change domain ownership. Before doing it we need your confirmation.' - new_pending_registrant: 'New owner' - current_registrant: 'Current owner' + new_pending_registrant: 'New registrant' + current_registrant: 'Current registrant' registrant_domain_verification_failed: 'Domain verification not available' - domain_registrant_change_confirmed_title: 'Domain owner change has been confirmed' - domain_registrant_change_confirmed_body: 'You have successfully confirmed domain owner change.' - registrant_domain_verification_confirmed: 'Domain owner change has successfully confirmed.' - registrant_domain_verification_confirmed_failed: 'Something went wrong' + domain_registrant_change_confirmed_title: 'Domain owner change has been received' + domain_registrant_change_confirmed_body: 'You have successfully submitted domain owner change confirmation. You will receive email confirmation.' + registrant_domain_verification_confirmed: 'Domain owner change has successfully received.' + registrant_domain_verification_confirmed_failed: 'Something went wrong.' domain_registrant_change_rejected_title: 'Domain owner change has been rejected' domain_registrant_change_rejected_body: 'You have rejected domain owner change.' registrant_domain_verification_rejected: 'Domain owner change has been rejected successfully.' - registrant_domain_verification_rejected_failed: 'Something went wrong' + registrant_domain_verification_rejected_failed: 'Something went wrong.' + domain_delete_title: 'Please confirm or reject domain deletation' + domain_delete_body: 'There is a request to delete a domain. Before doing it we need your confirmation.' + domain_delete_confirmed_title: 'Domain deletion has been received successfully' + domain_delete_confirmed_body: 'You have successfully submitted delete confirmation. You will receive registry final confirmation to email.' + domain_delete_rejected_title: 'Domain deletion has been rejected successfully' + domain_delete_rejected_body: 'You have rejected domain deletion.' ip_is_not_whitelisted: 'IP is not whitelisted' no_permission: 'No permission' access_denied: 'Access denied' @@ -807,3 +819,15 @@ en: invalid_csr_or_crt: 'Invalid CSR or CRT' webserver_missing_client_cert_directive: 'Webserver missing client cert directive' webserver_client_cert_directive_should_be_required: 'Webserver client cert directive should be required' + tech: Tech contact + admin: Admin contact + pricelists: Pricelists + new_pricelist: New Pricelist + valid: Valid + category: Zone + object_is_not_eligible_for_renewal: 'Object is not eligible for renewal' + set_force_delete: 'Set force delete' + unset_force_delete: 'Unset force delete' + domain_expiring: 'Domain expiring' + domain_validation_rules: 'Domain validation rules' + bank_statement_desc: 'Import file row will match only when matching following attributes: invoice nr, description, sum and client ref number.' diff --git a/config/locales/et.yml b/config/locales/et.yml index 37e1e9dea..6f8a51040 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -2,3 +2,6 @@ et: username: 'Kasutajanimi' password: 'Parool' log_in: 'Logi sisse' + registrant: registreerija + tech: tehniline kontakt + admin: halduskontakt diff --git a/config/routes.rb b/config/routes.rb index c8d4e0b0e..5986f213f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -154,14 +154,11 @@ Rails.application.routes.draw do # ADMIN ROUTES namespace :admin do resources :keyrelays - resources :zonefiles - resources :zonefile_settings - resources :legal_documents - resources :keyrelays + resources :pricelists resources :bank_statements do post 'bind_invoices', on: :member @@ -178,6 +175,10 @@ Rails.application.routes.draw do resources :domains do resources :domain_versions + member do + post 'set_force_delete' + post 'unset_force_delete' + end end resources :settings @@ -223,6 +224,10 @@ Rails.application.routes.draw do get 'logout' => '/devise/sessions#destroy' end + authenticate :user do + mount Que::Web, at: 'que' + end + root 'dashboards#show' end diff --git a/config/schedule.rb b/config/schedule.rb index b1ad5a403..6796ebbde 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -24,6 +24,20 @@ every :day, at: '12:10pm' do runner 'Invoice.cancel_overdue_invoices' end +every :day, at: '12:15pm' do + runner 'Domain.expire_domains' +end + every 3.hours do runner 'Certificate.update_crl' end + +every :hour do + runner 'Domain.start_expire_period' + runner 'Domain.start_redemption_grace_period' + runner 'Domain.start_delete_period' +end + +every 42.minutes do + runner 'Domain.destroy_delete_candidates' +end diff --git a/config/unicorn.rb b/config/unicorn.rb index 780ecaf58..350bc5ed1 100644 --- a/config/unicorn.rb +++ b/config/unicorn.rb @@ -1 +1,8 @@ worker_processes 2 + +# after_fork do |server, worker| + # binding.pry + # ActiveRecord::Base.establish_connection + + # Que.mode = :async +# end diff --git a/db/data/20150609093515_add_renew_setting.rb b/db/data/20150609093515_add_renew_setting.rb new file mode 100644 index 000000000..f462c38cb --- /dev/null +++ b/db/data/20150609093515_add_renew_setting.rb @@ -0,0 +1,9 @@ +class AddRenewSetting < ActiveRecord::Migration + def self.up + Setting.days_to_renew_domain_before_expire = 90 + end + + def self.down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/data/20150610111019_add_expire_settings.rb b/db/data/20150610111019_add_expire_settings.rb new file mode 100644 index 000000000..9f8b9cce8 --- /dev/null +++ b/db/data/20150610111019_add_expire_settings.rb @@ -0,0 +1,10 @@ +class AddExpireSettings < ActiveRecord::Migration + def self.up + Setting.expire_warning_period = 15 + Setting.redemption_grace_period = 30 + end + + def self.down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/data/20150612125720_refactor_domain_statuses.rb b/db/data/20150612125720_refactor_domain_statuses.rb new file mode 100644 index 000000000..679a6642b --- /dev/null +++ b/db/data/20150612125720_refactor_domain_statuses.rb @@ -0,0 +1,15 @@ +class RefactorDomainStatuses < ActiveRecord::Migration + def self.up + Domain.all.each do |x| + x.statuses = [] + x.domain_statuses.each do |ds| + x.statuses << ds.value + end + x.save + end + end + + def self.down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/migrate/20150305092921_add_pricelist.rb b/db/migrate/20150305092921_add_pricelist.rb new file mode 100644 index 000000000..fc327a579 --- /dev/null +++ b/db/migrate/20150305092921_add_pricelist.rb @@ -0,0 +1,25 @@ +class AddPricelist < ActiveRecord::Migration + def change + create_table :pricelists do |t| + t.string :name + t.string :category + t.monetize :price + t.datetime :valid_from + t.datetime :valid_to + t.string :creator_str + t.string :updator_str + t.timestamps null: false + end + + create_table :log_pricelists do |t| + t.string :item_type, null: false + t.integer :item_id, null: false + t.string :event, null: false + t.string :whodunnit + t.json :object + t.json :object_changes + t.datetime :created_at + t.string :session + end + end +end diff --git a/db/migrate/20150603141549_add_decimal_type.rb b/db/migrate/20150603141549_add_decimal_type.rb new file mode 100644 index 000000000..64b166287 --- /dev/null +++ b/db/migrate/20150603141549_add_decimal_type.rb @@ -0,0 +1,16 @@ +class AddDecimalType < ActiveRecord::Migration + def change + { + 'account_activities': ['sum'], + 'accounts': ['balance'], + 'bank_transactions': ['sum'], + 'banklink_transactions': ['vk_amount'], + 'invoice_items': ['price'], + 'invoices': ['vat_prc', 'sum_cache'] + }.each do |table, cols| + cols.each do |col| + change_column table, col, :decimal, precision: 8, scale: 2 + end + end + end +end diff --git a/db/migrate/20150603211318_change_price_to_decimal.rb b/db/migrate/20150603211318_change_price_to_decimal.rb new file mode 100644 index 000000000..1937a642c --- /dev/null +++ b/db/migrate/20150603211318_change_price_to_decimal.rb @@ -0,0 +1,5 @@ +class ChangePriceToDecimal < ActiveRecord::Migration + def change + change_column :pricelists, :price_cents, :decimal, precision: 8, scale: 2 + end +end diff --git a/db/migrate/20150603212659_add_duration_to_pricelist.rb b/db/migrate/20150603212659_add_duration_to_pricelist.rb new file mode 100644 index 000000000..05342c6cd --- /dev/null +++ b/db/migrate/20150603212659_add_duration_to_pricelist.rb @@ -0,0 +1,5 @@ +class AddDurationToPricelist < ActiveRecord::Migration + def change + add_column :pricelists, :duration, :string + end +end diff --git a/db/migrate/20150609103333_update_pricelist_chema.rb b/db/migrate/20150609103333_update_pricelist_chema.rb new file mode 100644 index 000000000..b309a76b5 --- /dev/null +++ b/db/migrate/20150609103333_update_pricelist_chema.rb @@ -0,0 +1,6 @@ +class UpdatePricelistChema < ActiveRecord::Migration + def change + add_column :pricelists, :operation_category, :string + rename_column :pricelists, :name, :desc + end +end diff --git a/db/migrate/20150610112238_add_outzone_at_and_delete_at_to_domain.rb b/db/migrate/20150610112238_add_outzone_at_and_delete_at_to_domain.rb new file mode 100644 index 000000000..6b555b2a3 --- /dev/null +++ b/db/migrate/20150610112238_add_outzone_at_and_delete_at_to_domain.rb @@ -0,0 +1,6 @@ +class AddOutzoneAtAndDeleteAtToDomain < ActiveRecord::Migration + def change + add_column :domains, :outzone_at, :datetime unless column_exists?(:domains, :outzone_at) + add_column :domains, :delete_at, :datetime unless column_exists?(:domains, :delete_at) + end +end diff --git a/db/migrate/20150610144547_add_force_delete_at_to_domain.rb b/db/migrate/20150610144547_add_force_delete_at_to_domain.rb new file mode 100644 index 000000000..547d928a8 --- /dev/null +++ b/db/migrate/20150610144547_add_force_delete_at_to_domain.rb @@ -0,0 +1,5 @@ +class AddForceDeleteAtToDomain < ActiveRecord::Migration + def change + add_column :domains, :force_delete_at, :datetime + end +end diff --git a/db/migrate/20150611124920_add_que.rb b/db/migrate/20150611124920_add_que.rb new file mode 100644 index 000000000..1553e8b06 --- /dev/null +++ b/db/migrate/20150611124920_add_que.rb @@ -0,0 +1,11 @@ +class AddQue < ActiveRecord::Migration + def self.up + # The current version as of this migration's creation. + Que.migrate! :version => 3 + end + + def self.down + # Completely removes Que's job queue. + Que.migrate! :version => 0 + end +end diff --git a/db/migrate/20150612123111_add_statuses_to_domain.rb b/db/migrate/20150612123111_add_statuses_to_domain.rb new file mode 100644 index 000000000..3e2b8a922 --- /dev/null +++ b/db/migrate/20150612123111_add_statuses_to_domain.rb @@ -0,0 +1,5 @@ +class AddStatusesToDomain < ActiveRecord::Migration + def change + add_column :domains, :statuses, :string, array: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 170dbea93..b83051936 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150521120145) do +ActiveRecord::Schema.define(version: 20150612123111) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -19,7 +19,7 @@ ActiveRecord::Schema.define(version: 20150521120145) do create_table "account_activities", force: :cascade do |t| t.integer "account_id" t.integer "invoice_id" - t.decimal "sum" + t.decimal "sum", precision: 8, scale: 2 t.string "currency" t.integer "bank_transaction_id" t.datetime "created_at" @@ -36,7 +36,7 @@ ActiveRecord::Schema.define(version: 20150521120145) do create_table "accounts", force: :cascade do |t| t.integer "registrar_id" t.string "account_type" - t.decimal "balance", default: 0.0, null: false + t.decimal "balance", precision: 8, scale: 2, default: 0.0, null: false t.datetime "created_at" t.datetime "updated_at" t.string "currency" @@ -98,7 +98,7 @@ ActiveRecord::Schema.define(version: 20150521120145) do t.string "buyer_name" t.string "document_no" t.string "description" - t.decimal "sum" + t.decimal "sum", precision: 8, scale: 2 t.string "reference_no" t.datetime "paid_at" t.datetime "created_at" @@ -114,7 +114,7 @@ ActiveRecord::Schema.define(version: 20150521120145) do t.string "vk_rec_id" t.string "vk_stamp" t.string "vk_t_no" - t.decimal "vk_amount" + t.decimal "vk_amount", precision: 8, scale: 2 t.string "vk_curr" t.string "vk_rec_acc" t.string "vk_rec_name" @@ -203,6 +203,12 @@ ActiveRecord::Schema.define(version: 20150521120145) do t.string "updator_str" end + create_table "data_migrations", id: false, force: :cascade do |t| + t.string "version", null: false + end + + add_index "data_migrations", ["version"], name: "unique_data_migrations", unique: true, using: :btree + create_table "delegation_signers", force: :cascade do |t| t.integer "domain_id" t.string "key_tag" @@ -306,6 +312,8 @@ ActiveRecord::Schema.define(version: 20150521120145) do t.datetime "registrant_verification_asked_at" t.string "registrant_verification_token" t.json "pending_json" + t.datetime "force_delete_at" + t.string "statuses", array: true end add_index "domains", ["delete_at"], name: "index_domains_on_delete_at", using: :btree @@ -328,10 +336,10 @@ ActiveRecord::Schema.define(version: 20150521120145) do create_table "invoice_items", force: :cascade do |t| t.integer "invoice_id" - t.string "description", null: false + t.string "description", null: false t.string "unit" t.integer "amount" - t.decimal "price" + t.decimal "price", precision: 8, scale: 2 t.datetime "created_at" t.datetime "updated_at" t.string "creator_str" @@ -341,20 +349,20 @@ ActiveRecord::Schema.define(version: 20150521120145) do add_index "invoice_items", ["invoice_id"], name: "index_invoice_items_on_invoice_id", using: :btree create_table "invoices", force: :cascade do |t| - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "invoice_type", null: false - t.datetime "due_date", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "invoice_type", null: false + t.datetime "due_date", null: false t.string "payment_term" - t.string "currency", null: false + t.string "currency", null: false t.string "description" t.string "reference_no" - t.decimal "vat_prc", null: false + t.decimal "vat_prc", precision: 8, scale: 2, null: false t.datetime "paid_at" t.integer "seller_id" - t.string "seller_name", null: false + t.string "seller_name", null: false t.string "seller_reg_no" - t.string "seller_iban", null: false + t.string "seller_iban", null: false t.string "seller_bank" t.string "seller_swift" t.string "seller_vat_no" @@ -368,7 +376,7 @@ ActiveRecord::Schema.define(version: 20150521120145) do t.string "seller_email" t.string "seller_contact_name" t.integer "buyer_id" - t.string "buyer_name", null: false + t.string "buyer_name", null: false t.string "buyer_reg_no" t.string "buyer_country_code" t.string "buyer_state" @@ -382,7 +390,7 @@ ActiveRecord::Schema.define(version: 20150521120145) do t.string "updator_str" t.integer "number" t.datetime "cancelled_at" - t.decimal "sum_cache" + t.decimal "sum_cache", precision: 8, scale: 2 end add_index "invoices", ["buyer_id"], name: "index_invoices_on_buyer_id", using: :btree @@ -741,6 +749,17 @@ ActiveRecord::Schema.define(version: 20150521120145) do add_index "log_nameservers", ["item_type", "item_id"], name: "index_log_nameservers_on_item_type_and_item_id", using: :btree add_index "log_nameservers", ["whodunnit"], name: "index_log_nameservers_on_whodunnit", using: :btree + create_table "log_pricelists", force: :cascade do |t| + t.string "item_type", null: false + t.integer "item_id", null: false + t.string "event", null: false + t.string "whodunnit" + t.json "object" + t.json "object_changes" + t.datetime "created_at" + t.string "session" + end + create_table "log_registrars", force: :cascade do |t| t.string "item_type", null: false t.integer "item_id", null: false @@ -874,6 +893,32 @@ ActiveRecord::Schema.define(version: 20150521120145) do add_index "people", ["email"], name: "index_people_on_email", unique: true, using: :btree add_index "people", ["reset_password_token"], name: "index_people_on_reset_password_token", unique: true, using: :btree + create_table "pricelists", force: :cascade do |t| + t.string "desc" + t.string "category" + t.decimal "price_cents", precision: 8, scale: 2, default: 0.0, null: false + t.string "price_currency", default: "EUR", null: false + t.datetime "valid_from" + t.datetime "valid_to" + t.string "creator_str" + t.string "updator_str" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "duration" + t.string "operation_category" + end + + create_table "que_jobs", id: false, force: :cascade do |t| + t.integer "priority", limit: 2, default: 100, null: false + t.datetime "run_at", default: "now()", null: false + t.integer "job_id", limit: 8, default: "nextval('que_jobs_job_id_seq'::regclass)", null: false + t.text "job_class", null: false + t.json "args", default: [], null: false + t.integer "error_count", default: 0, null: false + t.text "last_error" + t.text "queue", default: "", null: false + end + create_table "registrant_verifications", force: :cascade do |t| t.string "domain_name" t.string "verification_token" @@ -957,7 +1002,7 @@ ActiveRecord::Schema.define(version: 20150521120145) do t.text "crt" t.string "type" t.string "registrant_ident" - t.string "encrypted_password", default: "" + t.string "encrypted_password", default: "", null: false t.datetime "remember_created_at" t.integer "failed_attempts", default: 0, null: false t.datetime "locked_at" diff --git a/db/structure.sql b/db/structure.sql new file mode 100644 index 000000000..efb3463bd --- /dev/null +++ b/db/structure.sql @@ -0,0 +1,4733 @@ +-- +-- PostgreSQL database dump +-- + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SET check_function_bodies = false; +SET client_min_messages = warning; + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +SET search_path = public, pg_catalog; + +-- +-- Name: generate_zonefile(character varying); Type: FUNCTION; Schema: public; Owner: - +-- + +CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text + LANGUAGE plpgsql + AS $_$ + DECLARE + zone_header text := concat('$ORIGIN ', i_origin, '.'); + serial_num varchar; + include_filter varchar := ''; + exclude_filter varchar := ''; + tmp_var text; + ret text; + BEGIN + -- define filters + include_filter = '%' || i_origin; + + -- for %.%.% + IF i_origin ~ '\.' THEN + exclude_filter := ''; + -- for %.% + ELSE + exclude_filter := '%.%.' || i_origin; + END IF; + + SELECT ROUND(extract(epoch from now() at time zone 'utc')) INTO serial_num; + + -- zonefile header + SELECT concat( + format('%-10s', '$ORIGIN .'), chr(10), + format('%-10s', '$TTL'), zf.ttl, chr(10), chr(10), + format('%-10s', i_origin || '.'), 'IN SOA ', zf.master_nameserver, '. ', zf.email, '. (', chr(10), + format('%-17s', ''), format('%-12s', serial_num), '; serial number', chr(10), + format('%-17s', ''), format('%-12s', zf.refresh), '; refresh, seconds', chr(10), + format('%-17s', ''), format('%-12s', zf.retry), '; retry, seconds', chr(10), + format('%-17s', ''), format('%-12s', zf.expire), '; expire, seconds', chr(10), + format('%-17s', ''), format('%-12s', zf.minimum_ttl), '; minimum TTL, seconds', chr(10), + format('%-17s', ''), ')' + ) FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var; + + ret = concat(tmp_var, chr(10), chr(10)); + + -- ns records + SELECT array_to_string( + array( + SELECT concat(d.name_puny, '. IN NS ', ns.hostname, '.') + FROM domains d + JOIN nameservers ns ON ns.domain_id = d.id + WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter + ORDER BY d.name + ), + chr(10) + ) INTO tmp_var; + + ret := concat(ret, '; Zone NS Records', chr(10), tmp_var, chr(10), chr(10)); + + -- a glue records for origin nameservers + SELECT array_to_string( + array( + SELECT concat(ns.hostname, '. IN A ', ns.ipv4) + FROM nameservers ns + JOIN domains d ON d.id = ns.domain_id + WHERE d.name = i_origin + AND ns.hostname LIKE '%.' || d.name + AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> '' + ), chr(10) + ) INTO tmp_var; + + ret := concat(ret, '; Zone A Records', chr(10), tmp_var); + + -- a glue records for other nameservers + SELECT array_to_string( + array( + SELECT concat(ns.hostname, '. IN A ', ns.ipv4) + FROM nameservers ns + JOIN domains d ON d.id = ns.domain_id + WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter + AND ns.hostname LIKE '%.' || d.name + AND d.name <> i_origin + AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> '' + AND NOT EXISTS ( -- filter out glue records that already appeared in origin glue recrods + SELECT 1 FROM nameservers nsi + JOIN domains di ON nsi.domain_id = di.id + WHERE di.name = i_origin + AND nsi.hostname = ns.hostname + ) + ), chr(10) + ) INTO tmp_var; + + -- TODO This is a possible subtitition to the previous query, stress testing is needed to see which is faster + + -- SELECT ns.* + -- FROM nameservers ns + -- JOIN domains d ON d.id = ns.domain_id + -- WHERE d.name LIKE '%ee' AND d.name NOT LIKE '%pri.ee' + -- AND ns.hostname LIKE '%.' || d.name + -- AND d.name <> 'ee' + -- AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> '' + -- AND ns.hostname NOT IN ( + -- SELECT ns.hostname FROM domains d JOIN nameservers ns ON d.id = ns.domain_id WHERE d.name = 'ee' + -- ) + + ret := concat(ret, chr(10), tmp_var, chr(10), chr(10)); + + -- aaaa glue records for origin nameservers + SELECT array_to_string( + array( + SELECT concat(ns.hostname, '. IN AAAA ', ns.ipv6) + FROM nameservers ns + JOIN domains d ON d.id = ns.domain_id + WHERE d.name = i_origin + AND ns.hostname LIKE '%.' || d.name + AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> '' + ), chr(10) + ) INTO tmp_var; + + ret := concat(ret, '; Zone AAAA Records', chr(10), tmp_var); + + -- aaaa glue records for other nameservers + SELECT array_to_string( + array( + SELECT concat(ns.hostname, '. IN AAAA ', ns.ipv6) + FROM nameservers ns + JOIN domains d ON d.id = ns.domain_id + WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter + AND ns.hostname LIKE '%.' || d.name + AND d.name <> i_origin + AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> '' + AND NOT EXISTS ( -- filter out glue records that already appeared in origin glue recrods + SELECT 1 FROM nameservers nsi + JOIN domains di ON nsi.domain_id = di.id + WHERE di.name = i_origin + AND nsi.hostname = ns.hostname + ) + ), chr(10) + ) INTO tmp_var; + + ret := concat(ret, chr(10), tmp_var, chr(10), chr(10)); + + -- ds records + SELECT array_to_string( + array( + SELECT concat( + d.name_puny, '. IN DS ', dk.ds_key_tag, ' ', + dk.ds_alg, ' ', dk.ds_digest_type, ' ( ', dk.ds_digest, ' )' + ) + FROM domains d + JOIN dnskeys dk ON dk.domain_id = d.id + WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter AND dk.flags = 257 + ), + chr(10) + ) INTO tmp_var; + + ret := concat(ret, '; Zone DS Records', chr(10), tmp_var, chr(10)); + + RETURN ret; + END; + $_$; + + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: account_activities; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE account_activities ( + id integer NOT NULL, + account_id integer, + invoice_id integer, + sum numeric(10,2), + currency character varying, + bank_transaction_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone, + description character varying, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: account_activities_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE account_activities_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: account_activities_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE account_activities_id_seq OWNED BY account_activities.id; + + +-- +-- Name: accounts; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE accounts ( + id integer NOT NULL, + registrar_id integer, + account_type character varying, + balance numeric(10,2) DEFAULT 0 NOT NULL, + created_at timestamp without time zone, + updated_at timestamp without time zone, + currency character varying, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE accounts_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: accounts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE accounts_id_seq OWNED BY accounts.id; + + +-- +-- Name: addresses; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE addresses ( + id integer NOT NULL, + contact_id integer, + city character varying, + street character varying, + zip character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + street2 character varying, + street3 character varying, + creator_str character varying, + updator_str character varying, + country_code character varying, + state character varying, + legacy_contact_id integer +); + + +-- +-- Name: addresses_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE addresses_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: addresses_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE addresses_id_seq OWNED BY addresses.id; + + +-- +-- Name: api_users; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE api_users ( + id integer NOT NULL, + registrar_id integer, + username character varying, + password character varying, + active boolean DEFAULT false, + csr text, + crt text, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: api_users_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE api_users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: api_users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE api_users_id_seq OWNED BY api_users.id; + + +-- +-- Name: bank_statements; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE bank_statements ( + id integer NOT NULL, + bank_code character varying, + iban character varying, + import_file_path character varying, + queried_at timestamp without time zone, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: bank_statements_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE bank_statements_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: bank_statements_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE bank_statements_id_seq OWNED BY bank_statements.id; + + +-- +-- Name: bank_transactions; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE bank_transactions ( + id integer NOT NULL, + bank_statement_id integer, + bank_reference character varying, + iban character varying, + currency character varying, + buyer_bank_code character varying, + buyer_iban character varying, + buyer_name character varying, + document_no character varying, + description character varying, + sum numeric(10,2), + reference_no character varying, + paid_at timestamp without time zone, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: bank_transactions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE bank_transactions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: bank_transactions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE bank_transactions_id_seq OWNED BY bank_transactions.id; + + +-- +-- Name: banklink_transactions; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE banklink_transactions ( + id integer NOT NULL, + vk_service character varying, + vk_version character varying, + vk_snd_id character varying, + vk_rec_id character varying, + vk_stamp character varying, + vk_t_no character varying, + vk_amount numeric(10,2), + vk_curr character varying, + vk_rec_acc character varying, + vk_rec_name character varying, + vk_snd_acc character varying, + vk_snd_name character varying, + vk_ref character varying, + vk_msg character varying, + vk_t_datetime timestamp without time zone, + vk_mac character varying, + vk_encoding character varying, + vk_lang character varying, + vk_auto character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: banklink_transactions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE banklink_transactions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: banklink_transactions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE banklink_transactions_id_seq OWNED BY banklink_transactions.id; + + +-- +-- Name: cached_nameservers; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE cached_nameservers ( + hostname character varying(255), + ipv4 character varying(255), + ipv6 character varying(255) +); + + +-- +-- Name: certificates; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE certificates ( + id integer NOT NULL, + api_user_id integer, + csr text, + crt text, + creator_str character varying, + updator_str character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + common_name character varying, + md5 character varying, + interface character varying +); + + +-- +-- Name: certificates_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE certificates_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: certificates_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE certificates_id_seq OWNED BY certificates.id; + + +-- +-- Name: contact_statuses; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE contact_statuses ( + id integer NOT NULL, + value character varying, + description character varying, + contact_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: contact_statuses_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE contact_statuses_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: contact_statuses_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE contact_statuses_id_seq OWNED BY contact_statuses.id; + + +-- +-- Name: contacts; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE contacts ( + id integer NOT NULL, + code character varying, + phone character varying, + email character varying, + fax character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + ident character varying, + ident_type character varying, + auth_info character varying, + name character varying, + org_name character varying, + registrar_id integer, + creator_str character varying, + updator_str character varying, + ident_country_code character varying, + city character varying, + street text, + zip character varying, + country_code character varying, + state character varying, + legacy_id integer +); + + +-- +-- Name: contacts_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE contacts_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: contacts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE contacts_id_seq OWNED BY contacts.id; + + +-- +-- Name: countries; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE countries ( + id integer NOT NULL, + iso character varying, + name character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: countries_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE countries_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: countries_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE countries_id_seq OWNED BY countries.id; + + +-- +-- Name: delegation_signers; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE delegation_signers ( + id integer NOT NULL, + domain_id integer, + key_tag character varying, + alg integer, + digest_type integer, + digest character varying +); + + +-- +-- Name: delegation_signers_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE delegation_signers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: delegation_signers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE delegation_signers_id_seq OWNED BY delegation_signers.id; + + +-- +-- Name: depricated_versions; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE depricated_versions ( + id integer NOT NULL, + created_at timestamp without time zone +); + + +-- +-- Name: depricated_versions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE depricated_versions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: depricated_versions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE depricated_versions_id_seq OWNED BY depricated_versions.id; + + +-- +-- Name: dnskeys; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE dnskeys ( + id integer NOT NULL, + domain_id integer, + flags integer, + protocol integer, + alg integer, + public_key text, + delegation_signer_id integer, + ds_key_tag character varying, + ds_alg integer, + ds_digest_type integer, + ds_digest character varying, + creator_str character varying, + updator_str character varying, + legacy_domain_id integer +); + + +-- +-- Name: dnskeys_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE dnskeys_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: dnskeys_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE dnskeys_id_seq OWNED BY dnskeys.id; + + +-- +-- Name: domain_contacts; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE domain_contacts ( + id integer NOT NULL, + contact_id integer, + domain_id integer, + contact_type character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + contact_code_cache character varying, + creator_str character varying, + updator_str character varying, + type character varying, + legacy_domain_id integer, + legacy_contact_id integer +); + + +-- +-- Name: domain_contacts_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE domain_contacts_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: domain_contacts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE domain_contacts_id_seq OWNED BY domain_contacts.id; + + +-- +-- Name: domain_statuses; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE domain_statuses ( + id integer NOT NULL, + domain_id integer, + description character varying, + value character varying, + creator_str character varying, + updator_str character varying, + legacy_domain_id integer +); + + +-- +-- Name: domain_statuses_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE domain_statuses_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: domain_statuses_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE domain_statuses_id_seq OWNED BY domain_statuses.id; + + +-- +-- Name: domain_transfers; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE domain_transfers ( + id integer NOT NULL, + domain_id integer, + status character varying, + transfer_requested_at timestamp without time zone, + transferred_at timestamp without time zone, + transfer_from_id integer, + transfer_to_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone, + wait_until timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: domain_transfers_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE domain_transfers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: domain_transfers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE domain_transfers_id_seq OWNED BY domain_transfers.id; + + +-- +-- Name: domains; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE domains ( + id integer NOT NULL, + name character varying, + registrar_id integer, + registered_at timestamp without time zone, + status character varying, + valid_from timestamp without time zone, + valid_to timestamp without time zone, + registrant_id integer, + auth_info character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + name_dirty character varying, + name_puny character varying, + period integer, + period_unit character varying(1), + creator_str character varying, + updator_str character varying, + legacy_id integer, + legacy_registrar_id integer, + legacy_registrant_id integer, + outzone_at timestamp without time zone, + delete_at timestamp without time zone, + registrant_verification_asked_at timestamp without time zone, + registrant_verification_token character varying, + pending_json json, + force_delete_at timestamp without time zone, + statuses character varying[] +); + + +-- +-- Name: domains_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE domains_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: domains_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE domains_id_seq OWNED BY domains.id; + + +-- +-- Name: epp_sessions; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE epp_sessions ( + id integer NOT NULL, + session_id character varying, + data text, + created_at timestamp without time zone, + updated_at timestamp without time zone, + registrar_id integer +); + + +-- +-- Name: epp_sessions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE epp_sessions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: epp_sessions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE epp_sessions_id_seq OWNED BY epp_sessions.id; + + +-- +-- Name: invoice_items; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE invoice_items ( + id integer NOT NULL, + invoice_id integer, + description character varying NOT NULL, + unit character varying, + amount integer, + price numeric(10,2), + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: invoice_items_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE invoice_items_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: invoice_items_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE invoice_items_id_seq OWNED BY invoice_items.id; + + +-- +-- Name: invoices; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE invoices ( + id integer NOT NULL, + created_at timestamp without time zone NOT NULL, + updated_at timestamp without time zone NOT NULL, + invoice_type character varying NOT NULL, + due_date timestamp without time zone NOT NULL, + payment_term character varying, + currency character varying NOT NULL, + description character varying, + reference_no character varying, + vat_prc numeric(10,2) NOT NULL, + paid_at timestamp without time zone, + seller_id integer, + seller_name character varying NOT NULL, + seller_reg_no character varying, + seller_iban character varying NOT NULL, + seller_bank character varying, + seller_swift character varying, + seller_vat_no character varying, + seller_country_code character varying, + seller_state character varying, + seller_street character varying, + seller_city character varying, + seller_zip character varying, + seller_phone character varying, + seller_url character varying, + seller_email character varying, + seller_contact_name character varying, + buyer_id integer, + buyer_name character varying NOT NULL, + buyer_reg_no character varying, + buyer_country_code character varying, + buyer_state character varying, + buyer_street character varying, + buyer_city character varying, + buyer_zip character varying, + buyer_phone character varying, + buyer_url character varying, + buyer_email character varying, + creator_str character varying, + updator_str character varying, + number integer, + cancelled_at timestamp without time zone, + sum_cache numeric(10,2) +); + + +-- +-- Name: invoices_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE invoices_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: invoices_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE invoices_id_seq OWNED BY invoices.id; + + +-- +-- Name: keyrelays; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE keyrelays ( + id integer NOT NULL, + domain_id integer, + pa_date timestamp without time zone, + key_data_flags character varying, + key_data_protocol character varying, + key_data_alg character varying, + key_data_public_key text, + auth_info_pw character varying, + expiry_relative character varying, + expiry_absolute timestamp without time zone, + requester_id integer, + accepter_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: keyrelays_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE keyrelays_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: keyrelays_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE keyrelays_id_seq OWNED BY keyrelays.id; + + +-- +-- Name: legal_documents; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE legal_documents ( + id integer NOT NULL, + document_type character varying, + documentable_id integer, + documentable_type character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying, + path character varying +); + + +-- +-- Name: legal_documents_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE legal_documents_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: legal_documents_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE legal_documents_id_seq OWNED BY legal_documents.id; + + +-- +-- Name: log_account_activities; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_account_activities ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_account_activities_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_account_activities_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_account_activities_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_account_activities_id_seq OWNED BY log_account_activities.id; + + +-- +-- Name: log_accounts; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_accounts ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_accounts_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_accounts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_accounts_id_seq OWNED BY log_accounts.id; + + +-- +-- Name: log_addresses; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_addresses ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_addresses_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_addresses_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_addresses_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_addresses_id_seq OWNED BY log_addresses.id; + + +-- +-- Name: log_api_users; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_api_users ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_api_users_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_api_users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_api_users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_api_users_id_seq OWNED BY log_api_users.id; + + +-- +-- Name: log_bank_statements; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_bank_statements ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_bank_statements_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_bank_statements_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_bank_statements_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_bank_statements_id_seq OWNED BY log_bank_statements.id; + + +-- +-- Name: log_bank_transactions; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_bank_transactions ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_bank_transactions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_bank_transactions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_bank_transactions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_bank_transactions_id_seq OWNED BY log_bank_transactions.id; + + +-- +-- Name: log_certificates; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_certificates ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_certificates_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_certificates_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_certificates_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_certificates_id_seq OWNED BY log_certificates.id; + + +-- +-- Name: log_contact_statuses; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_contact_statuses ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_contact_statuses_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_contact_statuses_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_contact_statuses_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_contact_statuses_id_seq OWNED BY log_contact_statuses.id; + + +-- +-- Name: log_contacts; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_contacts ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_contacts_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_contacts_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_contacts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_contacts_id_seq OWNED BY log_contacts.id; + + +-- +-- Name: log_countries; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_countries ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_countries_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_countries_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_countries_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_countries_id_seq OWNED BY log_countries.id; + + +-- +-- Name: log_dnskeys; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_dnskeys ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_dnskeys_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_dnskeys_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_dnskeys_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_dnskeys_id_seq OWNED BY log_dnskeys.id; + + +-- +-- Name: log_domain_contacts; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_domain_contacts ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_domain_contacts_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_domain_contacts_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_domain_contacts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_domain_contacts_id_seq OWNED BY log_domain_contacts.id; + + +-- +-- Name: log_domain_statuses; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_domain_statuses ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_domain_statuses_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_domain_statuses_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_domain_statuses_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_domain_statuses_id_seq OWNED BY log_domain_statuses.id; + + +-- +-- Name: log_domain_transfers; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_domain_transfers ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_domain_transfers_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_domain_transfers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_domain_transfers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_domain_transfers_id_seq OWNED BY log_domain_transfers.id; + + +-- +-- Name: log_domains; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_domains ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + nameserver_ids text[] DEFAULT '{}'::text[], + tech_contact_ids text[] DEFAULT '{}'::text[], + admin_contact_ids text[] DEFAULT '{}'::text[], + session character varying, + children json +); + + +-- +-- Name: log_domains_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_domains_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_domains_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_domains_id_seq OWNED BY log_domains.id; + + +-- +-- Name: log_invoice_items; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_invoice_items ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_invoice_items_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_invoice_items_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_invoice_items_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_invoice_items_id_seq OWNED BY log_invoice_items.id; + + +-- +-- Name: log_invoices; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_invoices ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_invoices_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_invoices_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_invoices_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_invoices_id_seq OWNED BY log_invoices.id; + + +-- +-- Name: log_keyrelays; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_keyrelays ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_keyrelays_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_keyrelays_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_keyrelays_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_keyrelays_id_seq OWNED BY log_keyrelays.id; + + +-- +-- Name: log_legal_documents; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_legal_documents ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_legal_documents_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_legal_documents_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_legal_documents_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_legal_documents_id_seq OWNED BY log_legal_documents.id; + + +-- +-- Name: log_messages; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_messages ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_messages_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_messages_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_messages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_messages_id_seq OWNED BY log_messages.id; + + +-- +-- Name: log_nameservers; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_nameservers ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_nameservers_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_nameservers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_nameservers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_nameservers_id_seq OWNED BY log_nameservers.id; + + +-- +-- Name: log_pricelists; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_pricelists ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying +); + + +-- +-- Name: log_pricelists_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_pricelists_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_pricelists_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_pricelists_id_seq OWNED BY log_pricelists.id; + + +-- +-- Name: log_registrars; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_registrars ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_registrars_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_registrars_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_registrars_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_registrars_id_seq OWNED BY log_registrars.id; + + +-- +-- Name: log_reserved_domains; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_reserved_domains ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_reserved_domains_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_reserved_domains_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_reserved_domains_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_reserved_domains_id_seq OWNED BY log_reserved_domains.id; + + +-- +-- Name: log_settings; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_settings ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_settings_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_settings_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_settings_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_settings_id_seq OWNED BY log_settings.id; + + +-- +-- Name: log_users; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_users ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_users_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_users_id_seq OWNED BY log_users.id; + + +-- +-- Name: log_white_ips; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_white_ips ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_white_ips_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_white_ips_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_white_ips_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_white_ips_id_seq OWNED BY log_white_ips.id; + + +-- +-- Name: log_zonefile_settings; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE log_zonefile_settings ( + id integer NOT NULL, + item_type character varying NOT NULL, + item_id integer NOT NULL, + event character varying NOT NULL, + whodunnit character varying, + object json, + object_changes json, + created_at timestamp without time zone, + session character varying, + children json +); + + +-- +-- Name: log_zonefile_settings_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE log_zonefile_settings_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: log_zonefile_settings_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE log_zonefile_settings_id_seq OWNED BY log_zonefile_settings.id; + + +-- +-- Name: messages; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE messages ( + id integer NOT NULL, + registrar_id integer, + body character varying, + attached_obj_type character varying, + attached_obj_id character varying, + queued boolean, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: messages_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE messages_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: messages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE messages_id_seq OWNED BY messages.id; + + +-- +-- Name: nameservers; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE nameservers ( + id integer NOT NULL, + hostname character varying, + ipv4 character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + ipv6 character varying, + domain_id integer, + creator_str character varying, + updator_str character varying, + legacy_domain_id integer +); + + +-- +-- Name: nameservers_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE nameservers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: nameservers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE nameservers_id_seq OWNED BY nameservers.id; + + +-- +-- Name: people; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE people ( + id integer NOT NULL, + email character varying DEFAULT ''::character varying NOT NULL, + encrypted_password character varying DEFAULT ''::character varying NOT NULL, + reset_password_token character varying, + reset_password_sent_at timestamp without time zone, + remember_created_at timestamp without time zone, + sign_in_count integer DEFAULT 0 NOT NULL, + current_sign_in_at timestamp without time zone, + last_sign_in_at timestamp without time zone, + current_sign_in_ip inet, + last_sign_in_ip inet, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: people_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE people_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: people_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE people_id_seq OWNED BY people.id; + + +-- +-- Name: pricelists; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE pricelists ( + id integer NOT NULL, + "desc" character varying, + category character varying, + price_cents numeric(8,2) DEFAULT 0 NOT NULL, + price_currency character varying DEFAULT 'EUR'::character varying NOT NULL, + valid_from timestamp without time zone, + valid_to timestamp without time zone, + creator_str character varying, + updator_str character varying, + created_at timestamp without time zone NOT NULL, + updated_at timestamp without time zone NOT NULL, + duration character varying, + operation_category character varying +); + + +-- +-- Name: pricelists_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE pricelists_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: pricelists_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE pricelists_id_seq OWNED BY pricelists.id; + + +-- +-- Name: que_jobs; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE que_jobs ( + priority smallint DEFAULT 100 NOT NULL, + run_at timestamp with time zone DEFAULT now() NOT NULL, + job_id bigint NOT NULL, + job_class text NOT NULL, + args json DEFAULT '[]'::json NOT NULL, + error_count integer DEFAULT 0 NOT NULL, + last_error text, + queue text DEFAULT ''::text NOT NULL +); + + +-- +-- Name: TABLE que_jobs; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE que_jobs IS '3'; + + +-- +-- Name: que_jobs_job_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE que_jobs_job_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: que_jobs_job_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE que_jobs_job_id_seq OWNED BY que_jobs.job_id; + + +-- +-- Name: registrant_verifications; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE registrant_verifications ( + id integer NOT NULL, + domain_name character varying, + verification_token character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + action character varying, + domain_id integer, + action_type character varying +); + + +-- +-- Name: registrant_verifications_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE registrant_verifications_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: registrant_verifications_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE registrant_verifications_id_seq OWNED BY registrant_verifications.id; + + +-- +-- Name: registrars; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE registrars ( + id integer NOT NULL, + name character varying, + reg_no character varying, + vat_no character varying, + billing_address character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying, + phone character varying, + email character varying, + billing_email character varying, + country_code character varying, + state character varying, + city character varying, + street character varying, + zip character varying, + code character varying, + url character varying, + directo_handle character varying, + vat boolean, + legacy_id integer, + reference_no character varying +); + + +-- +-- Name: registrars_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE registrars_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: registrars_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE registrars_id_seq OWNED BY registrars.id; + + +-- +-- Name: reserved_domains; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE reserved_domains ( + id integer NOT NULL, + name character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: reserved_domains_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE reserved_domains_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: reserved_domains_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE reserved_domains_id_seq OWNED BY reserved_domains.id; + + +-- +-- Name: schema_migrations; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE schema_migrations ( + version character varying NOT NULL +); + + +-- +-- Name: settings; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE settings ( + id integer NOT NULL, + var character varying NOT NULL, + value text, + thing_id integer, + thing_type character varying(30), + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: settings_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE settings_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: settings_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE settings_id_seq OWNED BY settings.id; + + +-- +-- Name: users; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE users ( + id integer NOT NULL, + username character varying, + password character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + email character varying, + sign_in_count integer DEFAULT 0 NOT NULL, + current_sign_in_at timestamp without time zone, + last_sign_in_at timestamp without time zone, + current_sign_in_ip inet, + last_sign_in_ip inet, + identity_code character varying, + roles character varying[], + creator_str character varying, + updator_str character varying, + country_code character varying, + registrar_id integer, + active boolean, + csr text, + crt text, + type character varying, + registrant_ident character varying, + encrypted_password character varying DEFAULT ''::character varying, + remember_created_at timestamp without time zone, + failed_attempts integer DEFAULT 0 NOT NULL, + locked_at timestamp without time zone +); + + +-- +-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE users_id_seq OWNED BY users.id; + + +-- +-- Name: versions; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE versions ( + id integer NOT NULL, + depricated_table_but_somehow_paper_trail_tests_fails_without_it text +); + + +-- +-- Name: versions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE versions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: versions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE versions_id_seq OWNED BY versions.id; + + +-- +-- Name: white_ips; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE white_ips ( + id integer NOT NULL, + registrar_id integer, + ipv4 character varying, + ipv6 character varying, + interface character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: white_ips_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE white_ips_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: white_ips_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE white_ips_id_seq OWNED BY white_ips.id; + + +-- +-- Name: whois_records; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE whois_records ( + id integer NOT NULL, + domain_id integer, + name character varying, + body text, + json json, + created_at timestamp without time zone NOT NULL, + updated_at timestamp without time zone NOT NULL, + registrar_id integer +); + + +-- +-- Name: whois_records_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE whois_records_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: whois_records_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE whois_records_id_seq OWNED BY whois_records.id; + + +-- +-- Name: zonefile_settings; Type: TABLE; Schema: public; Owner: -; Tablespace: +-- + +CREATE TABLE zonefile_settings ( + id integer NOT NULL, + origin character varying, + ttl integer, + refresh integer, + retry integer, + expire integer, + minimum_ttl integer, + email character varying, + master_nameserver character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone, + creator_str character varying, + updator_str character varying +); + + +-- +-- Name: zonefile_settings_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE zonefile_settings_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: zonefile_settings_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE zonefile_settings_id_seq OWNED BY zonefile_settings.id; + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY account_activities ALTER COLUMN id SET DEFAULT nextval('account_activities_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY accounts ALTER COLUMN id SET DEFAULT nextval('accounts_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY addresses ALTER COLUMN id SET DEFAULT nextval('addresses_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY api_users ALTER COLUMN id SET DEFAULT nextval('api_users_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY bank_statements ALTER COLUMN id SET DEFAULT nextval('bank_statements_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY bank_transactions ALTER COLUMN id SET DEFAULT nextval('bank_transactions_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY banklink_transactions ALTER COLUMN id SET DEFAULT nextval('banklink_transactions_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY certificates ALTER COLUMN id SET DEFAULT nextval('certificates_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY contact_statuses ALTER COLUMN id SET DEFAULT nextval('contact_statuses_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY contacts ALTER COLUMN id SET DEFAULT nextval('contacts_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY countries ALTER COLUMN id SET DEFAULT nextval('countries_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY delegation_signers ALTER COLUMN id SET DEFAULT nextval('delegation_signers_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY depricated_versions ALTER COLUMN id SET DEFAULT nextval('depricated_versions_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY dnskeys ALTER COLUMN id SET DEFAULT nextval('dnskeys_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY domain_contacts ALTER COLUMN id SET DEFAULT nextval('domain_contacts_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY domain_statuses ALTER COLUMN id SET DEFAULT nextval('domain_statuses_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY domain_transfers ALTER COLUMN id SET DEFAULT nextval('domain_transfers_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY domains ALTER COLUMN id SET DEFAULT nextval('domains_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY epp_sessions ALTER COLUMN id SET DEFAULT nextval('epp_sessions_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY invoice_items ALTER COLUMN id SET DEFAULT nextval('invoice_items_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY invoices ALTER COLUMN id SET DEFAULT nextval('invoices_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY keyrelays ALTER COLUMN id SET DEFAULT nextval('keyrelays_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY legal_documents ALTER COLUMN id SET DEFAULT nextval('legal_documents_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_account_activities ALTER COLUMN id SET DEFAULT nextval('log_account_activities_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_accounts ALTER COLUMN id SET DEFAULT nextval('log_accounts_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_addresses ALTER COLUMN id SET DEFAULT nextval('log_addresses_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_api_users ALTER COLUMN id SET DEFAULT nextval('log_api_users_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_bank_statements ALTER COLUMN id SET DEFAULT nextval('log_bank_statements_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_bank_transactions ALTER COLUMN id SET DEFAULT nextval('log_bank_transactions_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_certificates ALTER COLUMN id SET DEFAULT nextval('log_certificates_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_contact_statuses ALTER COLUMN id SET DEFAULT nextval('log_contact_statuses_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_contacts ALTER COLUMN id SET DEFAULT nextval('log_contacts_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_countries ALTER COLUMN id SET DEFAULT nextval('log_countries_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_dnskeys ALTER COLUMN id SET DEFAULT nextval('log_dnskeys_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_domain_contacts ALTER COLUMN id SET DEFAULT nextval('log_domain_contacts_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_domain_statuses ALTER COLUMN id SET DEFAULT nextval('log_domain_statuses_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_domain_transfers ALTER COLUMN id SET DEFAULT nextval('log_domain_transfers_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_domains ALTER COLUMN id SET DEFAULT nextval('log_domains_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_invoice_items ALTER COLUMN id SET DEFAULT nextval('log_invoice_items_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_invoices ALTER COLUMN id SET DEFAULT nextval('log_invoices_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_keyrelays ALTER COLUMN id SET DEFAULT nextval('log_keyrelays_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_legal_documents ALTER COLUMN id SET DEFAULT nextval('log_legal_documents_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_messages ALTER COLUMN id SET DEFAULT nextval('log_messages_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_nameservers ALTER COLUMN id SET DEFAULT nextval('log_nameservers_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_pricelists ALTER COLUMN id SET DEFAULT nextval('log_pricelists_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_registrars ALTER COLUMN id SET DEFAULT nextval('log_registrars_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_reserved_domains ALTER COLUMN id SET DEFAULT nextval('log_reserved_domains_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_settings ALTER COLUMN id SET DEFAULT nextval('log_settings_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_users ALTER COLUMN id SET DEFAULT nextval('log_users_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_white_ips ALTER COLUMN id SET DEFAULT nextval('log_white_ips_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY log_zonefile_settings ALTER COLUMN id SET DEFAULT nextval('log_zonefile_settings_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY messages ALTER COLUMN id SET DEFAULT nextval('messages_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY nameservers ALTER COLUMN id SET DEFAULT nextval('nameservers_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY people ALTER COLUMN id SET DEFAULT nextval('people_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY pricelists ALTER COLUMN id SET DEFAULT nextval('pricelists_id_seq'::regclass); + + +-- +-- Name: job_id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY que_jobs ALTER COLUMN job_id SET DEFAULT nextval('que_jobs_job_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY registrant_verifications ALTER COLUMN id SET DEFAULT nextval('registrant_verifications_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY registrars ALTER COLUMN id SET DEFAULT nextval('registrars_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY reserved_domains ALTER COLUMN id SET DEFAULT nextval('reserved_domains_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY settings ALTER COLUMN id SET DEFAULT nextval('settings_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY users ALTER COLUMN id SET DEFAULT nextval('users_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY versions ALTER COLUMN id SET DEFAULT nextval('versions_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY white_ips ALTER COLUMN id SET DEFAULT nextval('white_ips_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY whois_records ALTER COLUMN id SET DEFAULT nextval('whois_records_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY zonefile_settings ALTER COLUMN id SET DEFAULT nextval('zonefile_settings_id_seq'::regclass); + + +-- +-- Name: account_activities_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY account_activities + ADD CONSTRAINT account_activities_pkey PRIMARY KEY (id); + + +-- +-- Name: accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY accounts + ADD CONSTRAINT accounts_pkey PRIMARY KEY (id); + + +-- +-- Name: addresses_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY addresses + ADD CONSTRAINT addresses_pkey PRIMARY KEY (id); + + +-- +-- Name: api_users_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY api_users + ADD CONSTRAINT api_users_pkey PRIMARY KEY (id); + + +-- +-- Name: bank_statements_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY bank_statements + ADD CONSTRAINT bank_statements_pkey PRIMARY KEY (id); + + +-- +-- Name: bank_transactions_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY bank_transactions + ADD CONSTRAINT bank_transactions_pkey PRIMARY KEY (id); + + +-- +-- Name: banklink_transactions_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY banklink_transactions + ADD CONSTRAINT banklink_transactions_pkey PRIMARY KEY (id); + + +-- +-- Name: certificates_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY certificates + ADD CONSTRAINT certificates_pkey PRIMARY KEY (id); + + +-- +-- Name: contact_statuses_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY contact_statuses + ADD CONSTRAINT contact_statuses_pkey PRIMARY KEY (id); + + +-- +-- Name: contacts_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY contacts + ADD CONSTRAINT contacts_pkey PRIMARY KEY (id); + + +-- +-- Name: countries_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY countries + ADD CONSTRAINT countries_pkey PRIMARY KEY (id); + + +-- +-- Name: delegation_signers_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY delegation_signers + ADD CONSTRAINT delegation_signers_pkey PRIMARY KEY (id); + + +-- +-- Name: depricated_versions_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY depricated_versions + ADD CONSTRAINT depricated_versions_pkey PRIMARY KEY (id); + + +-- +-- Name: dnskeys_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY dnskeys + ADD CONSTRAINT dnskeys_pkey PRIMARY KEY (id); + + +-- +-- Name: domain_contacts_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY domain_contacts + ADD CONSTRAINT domain_contacts_pkey PRIMARY KEY (id); + + +-- +-- Name: domain_statuses_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY domain_statuses + ADD CONSTRAINT domain_statuses_pkey PRIMARY KEY (id); + + +-- +-- Name: domain_transfers_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY domain_transfers + ADD CONSTRAINT domain_transfers_pkey PRIMARY KEY (id); + + +-- +-- Name: domains_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY domains + ADD CONSTRAINT domains_pkey PRIMARY KEY (id); + + +-- +-- Name: epp_sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY epp_sessions + ADD CONSTRAINT epp_sessions_pkey PRIMARY KEY (id); + + +-- +-- Name: invoice_items_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY invoice_items + ADD CONSTRAINT invoice_items_pkey PRIMARY KEY (id); + + +-- +-- Name: invoices_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY invoices + ADD CONSTRAINT invoices_pkey PRIMARY KEY (id); + + +-- +-- Name: keyrelays_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY keyrelays + ADD CONSTRAINT keyrelays_pkey PRIMARY KEY (id); + + +-- +-- Name: legal_documents_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY legal_documents + ADD CONSTRAINT legal_documents_pkey PRIMARY KEY (id); + + +-- +-- Name: log_account_activities_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_account_activities + ADD CONSTRAINT log_account_activities_pkey PRIMARY KEY (id); + + +-- +-- Name: log_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_accounts + ADD CONSTRAINT log_accounts_pkey PRIMARY KEY (id); + + +-- +-- Name: log_addresses_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_addresses + ADD CONSTRAINT log_addresses_pkey PRIMARY KEY (id); + + +-- +-- Name: log_api_users_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_api_users + ADD CONSTRAINT log_api_users_pkey PRIMARY KEY (id); + + +-- +-- Name: log_bank_statements_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_bank_statements + ADD CONSTRAINT log_bank_statements_pkey PRIMARY KEY (id); + + +-- +-- Name: log_bank_transactions_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_bank_transactions + ADD CONSTRAINT log_bank_transactions_pkey PRIMARY KEY (id); + + +-- +-- Name: log_certificates_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_certificates + ADD CONSTRAINT log_certificates_pkey PRIMARY KEY (id); + + +-- +-- Name: log_contact_statuses_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_contact_statuses + ADD CONSTRAINT log_contact_statuses_pkey PRIMARY KEY (id); + + +-- +-- Name: log_contacts_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_contacts + ADD CONSTRAINT log_contacts_pkey PRIMARY KEY (id); + + +-- +-- Name: log_countries_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_countries + ADD CONSTRAINT log_countries_pkey PRIMARY KEY (id); + + +-- +-- Name: log_dnskeys_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_dnskeys + ADD CONSTRAINT log_dnskeys_pkey PRIMARY KEY (id); + + +-- +-- Name: log_domain_contacts_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_domain_contacts + ADD CONSTRAINT log_domain_contacts_pkey PRIMARY KEY (id); + + +-- +-- Name: log_domain_statuses_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_domain_statuses + ADD CONSTRAINT log_domain_statuses_pkey PRIMARY KEY (id); + + +-- +-- Name: log_domain_transfers_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_domain_transfers + ADD CONSTRAINT log_domain_transfers_pkey PRIMARY KEY (id); + + +-- +-- Name: log_domains_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_domains + ADD CONSTRAINT log_domains_pkey PRIMARY KEY (id); + + +-- +-- Name: log_invoice_items_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_invoice_items + ADD CONSTRAINT log_invoice_items_pkey PRIMARY KEY (id); + + +-- +-- Name: log_invoices_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_invoices + ADD CONSTRAINT log_invoices_pkey PRIMARY KEY (id); + + +-- +-- Name: log_keyrelays_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_keyrelays + ADD CONSTRAINT log_keyrelays_pkey PRIMARY KEY (id); + + +-- +-- Name: log_legal_documents_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_legal_documents + ADD CONSTRAINT log_legal_documents_pkey PRIMARY KEY (id); + + +-- +-- Name: log_messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_messages + ADD CONSTRAINT log_messages_pkey PRIMARY KEY (id); + + +-- +-- Name: log_nameservers_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_nameservers + ADD CONSTRAINT log_nameservers_pkey PRIMARY KEY (id); + + +-- +-- Name: log_pricelists_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_pricelists + ADD CONSTRAINT log_pricelists_pkey PRIMARY KEY (id); + + +-- +-- Name: log_registrars_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_registrars + ADD CONSTRAINT log_registrars_pkey PRIMARY KEY (id); + + +-- +-- Name: log_reserved_domains_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_reserved_domains + ADD CONSTRAINT log_reserved_domains_pkey PRIMARY KEY (id); + + +-- +-- Name: log_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_settings + ADD CONSTRAINT log_settings_pkey PRIMARY KEY (id); + + +-- +-- Name: log_users_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_users + ADD CONSTRAINT log_users_pkey PRIMARY KEY (id); + + +-- +-- Name: log_white_ips_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_white_ips + ADD CONSTRAINT log_white_ips_pkey PRIMARY KEY (id); + + +-- +-- Name: log_zonefile_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY log_zonefile_settings + ADD CONSTRAINT log_zonefile_settings_pkey PRIMARY KEY (id); + + +-- +-- Name: messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY messages + ADD CONSTRAINT messages_pkey PRIMARY KEY (id); + + +-- +-- Name: nameservers_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY nameservers + ADD CONSTRAINT nameservers_pkey PRIMARY KEY (id); + + +-- +-- Name: people_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY people + ADD CONSTRAINT people_pkey PRIMARY KEY (id); + + +-- +-- Name: pricelists_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY pricelists + ADD CONSTRAINT pricelists_pkey PRIMARY KEY (id); + + +-- +-- Name: que_jobs_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY que_jobs + ADD CONSTRAINT que_jobs_pkey PRIMARY KEY (queue, priority, run_at, job_id); + + +-- +-- Name: registrant_verifications_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY registrant_verifications + ADD CONSTRAINT registrant_verifications_pkey PRIMARY KEY (id); + + +-- +-- Name: registrars_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY registrars + ADD CONSTRAINT registrars_pkey PRIMARY KEY (id); + + +-- +-- Name: reserved_domains_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY reserved_domains + ADD CONSTRAINT reserved_domains_pkey PRIMARY KEY (id); + + +-- +-- Name: settings_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY settings + ADD CONSTRAINT settings_pkey PRIMARY KEY (id); + + +-- +-- Name: users_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY users + ADD CONSTRAINT users_pkey PRIMARY KEY (id); + + +-- +-- Name: versions_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY versions + ADD CONSTRAINT versions_pkey PRIMARY KEY (id); + + +-- +-- Name: white_ips_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY white_ips + ADD CONSTRAINT white_ips_pkey PRIMARY KEY (id); + + +-- +-- Name: whois_records_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY whois_records + ADD CONSTRAINT whois_records_pkey PRIMARY KEY (id); + + +-- +-- Name: zonefile_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY zonefile_settings + ADD CONSTRAINT zonefile_settings_pkey PRIMARY KEY (id); + + +-- +-- Name: index_account_activities_on_account_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_account_activities_on_account_id ON account_activities USING btree (account_id); + + +-- +-- Name: index_account_activities_on_bank_transaction_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_account_activities_on_bank_transaction_id ON account_activities USING btree (bank_transaction_id); + + +-- +-- Name: index_account_activities_on_invoice_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_account_activities_on_invoice_id ON account_activities USING btree (invoice_id); + + +-- +-- Name: index_accounts_on_registrar_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_accounts_on_registrar_id ON accounts USING btree (registrar_id); + + +-- +-- Name: index_api_users_on_registrar_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_api_users_on_registrar_id ON api_users USING btree (registrar_id); + + +-- +-- Name: index_cached_nameservers_on_hostname_and_ipv4_and_ipv6; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX index_cached_nameservers_on_hostname_and_ipv4_and_ipv6 ON cached_nameservers USING btree (hostname, ipv4, ipv6); + + +-- +-- Name: index_certificates_on_api_user_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_certificates_on_api_user_id ON certificates USING btree (api_user_id); + + +-- +-- Name: index_contact_statuses_on_contact_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_contact_statuses_on_contact_id ON contact_statuses USING btree (contact_id); + + +-- +-- Name: index_contacts_on_code; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_contacts_on_code ON contacts USING btree (code); + + +-- +-- Name: index_contacts_on_registrar_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_contacts_on_registrar_id ON contacts USING btree (registrar_id); + + +-- +-- Name: index_contacts_on_registrar_id_and_ident_type; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_contacts_on_registrar_id_and_ident_type ON contacts USING btree (registrar_id, ident_type); + + +-- +-- Name: index_delegation_signers_on_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_delegation_signers_on_domain_id ON delegation_signers USING btree (domain_id); + + +-- +-- Name: index_dnskeys_on_delegation_signer_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_dnskeys_on_delegation_signer_id ON dnskeys USING btree (delegation_signer_id); + + +-- +-- Name: index_dnskeys_on_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_dnskeys_on_domain_id ON dnskeys USING btree (domain_id); + + +-- +-- Name: index_dnskeys_on_legacy_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_dnskeys_on_legacy_domain_id ON dnskeys USING btree (legacy_domain_id); + + +-- +-- Name: index_domain_contacts_on_contact_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_domain_contacts_on_contact_id ON domain_contacts USING btree (contact_id); + + +-- +-- Name: index_domain_contacts_on_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_domain_contacts_on_domain_id ON domain_contacts USING btree (domain_id); + + +-- +-- Name: index_domain_statuses_on_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_domain_statuses_on_domain_id ON domain_statuses USING btree (domain_id); + + +-- +-- Name: index_domain_transfers_on_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_domain_transfers_on_domain_id ON domain_transfers USING btree (domain_id); + + +-- +-- Name: index_domains_on_delete_at; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_domains_on_delete_at ON domains USING btree (delete_at); + + +-- +-- Name: index_domains_on_outzone_at; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_domains_on_outzone_at ON domains USING btree (outzone_at); + + +-- +-- Name: index_domains_on_registrant_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_domains_on_registrant_id ON domains USING btree (registrant_id); + + +-- +-- Name: index_domains_on_registrant_verification_asked_at; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_domains_on_registrant_verification_asked_at ON domains USING btree (registrant_verification_asked_at); + + +-- +-- Name: index_domains_on_registrant_verification_token; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_domains_on_registrant_verification_token ON domains USING btree (registrant_verification_token); + + +-- +-- Name: index_domains_on_registrar_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_domains_on_registrar_id ON domains USING btree (registrar_id); + + +-- +-- Name: index_epp_sessions_on_session_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX index_epp_sessions_on_session_id ON epp_sessions USING btree (session_id); + + +-- +-- Name: index_epp_sessions_on_updated_at; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_epp_sessions_on_updated_at ON epp_sessions USING btree (updated_at); + + +-- +-- Name: index_invoice_items_on_invoice_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_invoice_items_on_invoice_id ON invoice_items USING btree (invoice_id); + + +-- +-- Name: index_invoices_on_buyer_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_invoices_on_buyer_id ON invoices USING btree (buyer_id); + + +-- +-- Name: index_invoices_on_seller_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_invoices_on_seller_id ON invoices USING btree (seller_id); + + +-- +-- Name: index_keyrelays_on_accepter_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_keyrelays_on_accepter_id ON keyrelays USING btree (accepter_id); + + +-- +-- Name: index_keyrelays_on_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_keyrelays_on_domain_id ON keyrelays USING btree (domain_id); + + +-- +-- Name: index_keyrelays_on_requester_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_keyrelays_on_requester_id ON keyrelays USING btree (requester_id); + + +-- +-- Name: index_legal_documents_on_documentable_type_and_documentable_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_legal_documents_on_documentable_type_and_documentable_id ON legal_documents USING btree (documentable_type, documentable_id); + + +-- +-- Name: index_log_account_activities_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_account_activities_on_item_type_and_item_id ON log_account_activities USING btree (item_type, item_id); + + +-- +-- Name: index_log_account_activities_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_account_activities_on_whodunnit ON log_account_activities USING btree (whodunnit); + + +-- +-- Name: index_log_accounts_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_accounts_on_item_type_and_item_id ON log_accounts USING btree (item_type, item_id); + + +-- +-- Name: index_log_accounts_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_accounts_on_whodunnit ON log_accounts USING btree (whodunnit); + + +-- +-- Name: index_log_addresses_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_addresses_on_item_type_and_item_id ON log_addresses USING btree (item_type, item_id); + + +-- +-- Name: index_log_addresses_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_addresses_on_whodunnit ON log_addresses USING btree (whodunnit); + + +-- +-- Name: index_log_api_users_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_api_users_on_item_type_and_item_id ON log_api_users USING btree (item_type, item_id); + + +-- +-- Name: index_log_api_users_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_api_users_on_whodunnit ON log_api_users USING btree (whodunnit); + + +-- +-- Name: index_log_bank_statements_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_bank_statements_on_item_type_and_item_id ON log_bank_statements USING btree (item_type, item_id); + + +-- +-- Name: index_log_bank_statements_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_bank_statements_on_whodunnit ON log_bank_statements USING btree (whodunnit); + + +-- +-- Name: index_log_bank_transactions_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_bank_transactions_on_item_type_and_item_id ON log_bank_transactions USING btree (item_type, item_id); + + +-- +-- Name: index_log_bank_transactions_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_bank_transactions_on_whodunnit ON log_bank_transactions USING btree (whodunnit); + + +-- +-- Name: index_log_certificates_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_certificates_on_item_type_and_item_id ON log_certificates USING btree (item_type, item_id); + + +-- +-- Name: index_log_certificates_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_certificates_on_whodunnit ON log_certificates USING btree (whodunnit); + + +-- +-- Name: index_log_contact_statuses_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_contact_statuses_on_item_type_and_item_id ON log_contact_statuses USING btree (item_type, item_id); + + +-- +-- Name: index_log_contact_statuses_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_contact_statuses_on_whodunnit ON log_contact_statuses USING btree (whodunnit); + + +-- +-- Name: index_log_contacts_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_contacts_on_item_type_and_item_id ON log_contacts USING btree (item_type, item_id); + + +-- +-- Name: index_log_contacts_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_contacts_on_whodunnit ON log_contacts USING btree (whodunnit); + + +-- +-- Name: index_log_countries_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_countries_on_item_type_and_item_id ON log_countries USING btree (item_type, item_id); + + +-- +-- Name: index_log_countries_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_countries_on_whodunnit ON log_countries USING btree (whodunnit); + + +-- +-- Name: index_log_dnskeys_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_dnskeys_on_item_type_and_item_id ON log_dnskeys USING btree (item_type, item_id); + + +-- +-- Name: index_log_dnskeys_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_dnskeys_on_whodunnit ON log_dnskeys USING btree (whodunnit); + + +-- +-- Name: index_log_domain_contacts_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_domain_contacts_on_item_type_and_item_id ON log_domain_contacts USING btree (item_type, item_id); + + +-- +-- Name: index_log_domain_contacts_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_domain_contacts_on_whodunnit ON log_domain_contacts USING btree (whodunnit); + + +-- +-- Name: index_log_domain_statuses_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_domain_statuses_on_item_type_and_item_id ON log_domain_statuses USING btree (item_type, item_id); + + +-- +-- Name: index_log_domain_statuses_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_domain_statuses_on_whodunnit ON log_domain_statuses USING btree (whodunnit); + + +-- +-- Name: index_log_domain_transfers_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_domain_transfers_on_item_type_and_item_id ON log_domain_transfers USING btree (item_type, item_id); + + +-- +-- Name: index_log_domain_transfers_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_domain_transfers_on_whodunnit ON log_domain_transfers USING btree (whodunnit); + + +-- +-- Name: index_log_domains_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_domains_on_item_type_and_item_id ON log_domains USING btree (item_type, item_id); + + +-- +-- Name: index_log_domains_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_domains_on_whodunnit ON log_domains USING btree (whodunnit); + + +-- +-- Name: index_log_invoice_items_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_invoice_items_on_item_type_and_item_id ON log_invoice_items USING btree (item_type, item_id); + + +-- +-- Name: index_log_invoice_items_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_invoice_items_on_whodunnit ON log_invoice_items USING btree (whodunnit); + + +-- +-- Name: index_log_invoices_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_invoices_on_item_type_and_item_id ON log_invoices USING btree (item_type, item_id); + + +-- +-- Name: index_log_invoices_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_invoices_on_whodunnit ON log_invoices USING btree (whodunnit); + + +-- +-- Name: index_log_keyrelays_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_keyrelays_on_item_type_and_item_id ON log_keyrelays USING btree (item_type, item_id); + + +-- +-- Name: index_log_keyrelays_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_keyrelays_on_whodunnit ON log_keyrelays USING btree (whodunnit); + + +-- +-- Name: index_log_legal_documents_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_legal_documents_on_item_type_and_item_id ON log_legal_documents USING btree (item_type, item_id); + + +-- +-- Name: index_log_legal_documents_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_legal_documents_on_whodunnit ON log_legal_documents USING btree (whodunnit); + + +-- +-- Name: index_log_messages_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_messages_on_item_type_and_item_id ON log_messages USING btree (item_type, item_id); + + +-- +-- Name: index_log_messages_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_messages_on_whodunnit ON log_messages USING btree (whodunnit); + + +-- +-- Name: index_log_nameservers_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_nameservers_on_item_type_and_item_id ON log_nameservers USING btree (item_type, item_id); + + +-- +-- Name: index_log_nameservers_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_nameservers_on_whodunnit ON log_nameservers USING btree (whodunnit); + + +-- +-- Name: index_log_registrars_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_registrars_on_item_type_and_item_id ON log_registrars USING btree (item_type, item_id); + + +-- +-- Name: index_log_registrars_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_registrars_on_whodunnit ON log_registrars USING btree (whodunnit); + + +-- +-- Name: index_log_reserved_domains_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_reserved_domains_on_item_type_and_item_id ON log_reserved_domains USING btree (item_type, item_id); + + +-- +-- Name: index_log_reserved_domains_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_reserved_domains_on_whodunnit ON log_reserved_domains USING btree (whodunnit); + + +-- +-- Name: index_log_settings_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_settings_on_item_type_and_item_id ON log_settings USING btree (item_type, item_id); + + +-- +-- Name: index_log_settings_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_settings_on_whodunnit ON log_settings USING btree (whodunnit); + + +-- +-- Name: index_log_users_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_users_on_item_type_and_item_id ON log_users USING btree (item_type, item_id); + + +-- +-- Name: index_log_users_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_users_on_whodunnit ON log_users USING btree (whodunnit); + + +-- +-- Name: index_log_zonefile_settings_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_zonefile_settings_on_item_type_and_item_id ON log_zonefile_settings USING btree (item_type, item_id); + + +-- +-- Name: index_log_zonefile_settings_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_log_zonefile_settings_on_whodunnit ON log_zonefile_settings USING btree (whodunnit); + + +-- +-- Name: index_messages_on_registrar_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_messages_on_registrar_id ON messages USING btree (registrar_id); + + +-- +-- Name: index_nameservers_on_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_nameservers_on_domain_id ON nameservers USING btree (domain_id); + + +-- +-- Name: index_people_on_email; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX index_people_on_email ON people USING btree (email); + + +-- +-- Name: index_people_on_reset_password_token; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX index_people_on_reset_password_token ON people USING btree (reset_password_token); + + +-- +-- Name: index_registrant_verifications_on_created_at; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_registrant_verifications_on_created_at ON registrant_verifications USING btree (created_at); + + +-- +-- Name: index_registrant_verifications_on_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_registrant_verifications_on_domain_id ON registrant_verifications USING btree (domain_id); + + +-- +-- Name: index_registrars_on_code; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_registrars_on_code ON registrars USING btree (code); + + +-- +-- Name: index_settings_on_thing_type_and_thing_id_and_var; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX index_settings_on_thing_type_and_thing_id_and_var ON settings USING btree (thing_type, thing_id, var); + + +-- +-- Name: index_users_on_identity_code; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_users_on_identity_code ON users USING btree (identity_code); + + +-- +-- Name: index_users_on_registrar_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_users_on_registrar_id ON users USING btree (registrar_id); + + +-- +-- Name: index_whois_records_on_domain_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_whois_records_on_domain_id ON whois_records USING btree (domain_id); + + +-- +-- Name: index_whois_records_on_registrar_id; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE INDEX index_whois_records_on_registrar_id ON whois_records USING btree (registrar_id); + + +-- +-- Name: unique_schema_migrations; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- + +CREATE UNIQUE INDEX unique_schema_migrations ON schema_migrations USING btree (version); + + +-- +-- PostgreSQL database dump complete +-- + +SET search_path TO "$user",public; + +INSERT INTO schema_migrations (version) VALUES ('20140616073945'); + +INSERT INTO schema_migrations (version) VALUES ('20140620130107'); + +INSERT INTO schema_migrations (version) VALUES ('20140627082711'); + +INSERT INTO schema_migrations (version) VALUES ('20140701130945'); + +INSERT INTO schema_migrations (version) VALUES ('20140702144833'); + +INSERT INTO schema_migrations (version) VALUES ('20140702145448'); + +INSERT INTO schema_migrations (version) VALUES ('20140724084927'); + +INSERT INTO schema_migrations (version) VALUES ('20140730082358'); + +INSERT INTO schema_migrations (version) VALUES ('20140730082532'); + +INSERT INTO schema_migrations (version) VALUES ('20140730104916'); + +INSERT INTO schema_migrations (version) VALUES ('20140730141443'); + +INSERT INTO schema_migrations (version) VALUES ('20140731073300'); + +INSERT INTO schema_migrations (version) VALUES ('20140731081816'); + +INSERT INTO schema_migrations (version) VALUES ('20140801140249'); + +INSERT INTO schema_migrations (version) VALUES ('20140804095654'); + +INSERT INTO schema_migrations (version) VALUES ('20140808132327'); + +INSERT INTO schema_migrations (version) VALUES ('20140813102245'); + +INSERT INTO schema_migrations (version) VALUES ('20140813135408'); + +INSERT INTO schema_migrations (version) VALUES ('20140815082619'); + +INSERT INTO schema_migrations (version) VALUES ('20140815110028'); + +INSERT INTO schema_migrations (version) VALUES ('20140815114000'); + +INSERT INTO schema_migrations (version) VALUES ('20140819095802'); + +INSERT INTO schema_migrations (version) VALUES ('20140819103517'); + +INSERT INTO schema_migrations (version) VALUES ('20140822122938'); + +INSERT INTO schema_migrations (version) VALUES ('20140826082057'); + +INSERT INTO schema_migrations (version) VALUES ('20140826103454'); + +INSERT INTO schema_migrations (version) VALUES ('20140827140759'); + +INSERT INTO schema_migrations (version) VALUES ('20140828072329'); + +INSERT INTO schema_migrations (version) VALUES ('20140828074404'); + +INSERT INTO schema_migrations (version) VALUES ('20140828080320'); + +INSERT INTO schema_migrations (version) VALUES ('20140828133057'); + +INSERT INTO schema_migrations (version) VALUES ('20140902121843'); + +INSERT INTO schema_migrations (version) VALUES ('20140911101310'); + +INSERT INTO schema_migrations (version) VALUES ('20140911101604'); + +INSERT INTO schema_migrations (version) VALUES ('20140925073340'); + +INSERT INTO schema_migrations (version) VALUES ('20140925073734'); + +INSERT INTO schema_migrations (version) VALUES ('20140925073831'); + +INSERT INTO schema_migrations (version) VALUES ('20140925084916'); + +INSERT INTO schema_migrations (version) VALUES ('20140925085340'); + +INSERT INTO schema_migrations (version) VALUES ('20140925101927'); + +INSERT INTO schema_migrations (version) VALUES ('20140926081324'); + +INSERT INTO schema_migrations (version) VALUES ('20140926082627'); + +INSERT INTO schema_migrations (version) VALUES ('20140926121409'); + +INSERT INTO schema_migrations (version) VALUES ('20140929095329'); + +INSERT INTO schema_migrations (version) VALUES ('20140930093039'); + +INSERT INTO schema_migrations (version) VALUES ('20141001085322'); + +INSERT INTO schema_migrations (version) VALUES ('20141006124904'); + +INSERT INTO schema_migrations (version) VALUES ('20141006130306'); + +INSERT INTO schema_migrations (version) VALUES ('20141008134959'); + +INSERT INTO schema_migrations (version) VALUES ('20141009100818'); + +INSERT INTO schema_migrations (version) VALUES ('20141009101337'); + +INSERT INTO schema_migrations (version) VALUES ('20141010085152'); + +INSERT INTO schema_migrations (version) VALUES ('20141010130412'); + +INSERT INTO schema_migrations (version) VALUES ('20141014073435'); + +INSERT INTO schema_migrations (version) VALUES ('20141015135255'); + +INSERT INTO schema_migrations (version) VALUES ('20141015135742'); + +INSERT INTO schema_migrations (version) VALUES ('20141105150721'); + +INSERT INTO schema_migrations (version) VALUES ('20141111105931'); + +INSERT INTO schema_migrations (version) VALUES ('20141114130737'); + +INSERT INTO schema_migrations (version) VALUES ('20141120110330'); + +INSERT INTO schema_migrations (version) VALUES ('20141120140837'); + +INSERT INTO schema_migrations (version) VALUES ('20141121093125'); + +INSERT INTO schema_migrations (version) VALUES ('20141124105221'); + +INSERT INTO schema_migrations (version) VALUES ('20141125111414'); + +INSERT INTO schema_migrations (version) VALUES ('20141126140434'); + +INSERT INTO schema_migrations (version) VALUES ('20141127091027'); + +INSERT INTO schema_migrations (version) VALUES ('20141202114457'); + +INSERT INTO schema_migrations (version) VALUES ('20141203090115'); + +INSERT INTO schema_migrations (version) VALUES ('20141210085432'); + +INSERT INTO schema_migrations (version) VALUES ('20141211095604'); + +INSERT INTO schema_migrations (version) VALUES ('20141215085117'); + +INSERT INTO schema_migrations (version) VALUES ('20141216075056'); + +INSERT INTO schema_migrations (version) VALUES ('20141216133831'); + +INSERT INTO schema_migrations (version) VALUES ('20141218154829'); + +INSERT INTO schema_migrations (version) VALUES ('20141229115619'); + +INSERT INTO schema_migrations (version) VALUES ('20150105134026'); + +INSERT INTO schema_migrations (version) VALUES ('20150109081914'); + +INSERT INTO schema_migrations (version) VALUES ('20150110000000'); + +INSERT INTO schema_migrations (version) VALUES ('20150110113257'); + +INSERT INTO schema_migrations (version) VALUES ('20150122091556'); + +INSERT INTO schema_migrations (version) VALUES ('20150122091557'); + +INSERT INTO schema_migrations (version) VALUES ('20150128134352'); + +INSERT INTO schema_migrations (version) VALUES ('20150129093938'); + +INSERT INTO schema_migrations (version) VALUES ('20150129144652'); + +INSERT INTO schema_migrations (version) VALUES ('20150130085458'); + +INSERT INTO schema_migrations (version) VALUES ('20150130155904'); + +INSERT INTO schema_migrations (version) VALUES ('20150130180452'); + +INSERT INTO schema_migrations (version) VALUES ('20150130191056'); + +INSERT INTO schema_migrations (version) VALUES ('20150200000000'); + +INSERT INTO schema_migrations (version) VALUES ('20150202084444'); + +INSERT INTO schema_migrations (version) VALUES ('20150202140346'); + +INSERT INTO schema_migrations (version) VALUES ('20150203135303'); + +INSERT INTO schema_migrations (version) VALUES ('20150212125339'); + +INSERT INTO schema_migrations (version) VALUES ('20150213104014'); + +INSERT INTO schema_migrations (version) VALUES ('20150217133755'); + +INSERT INTO schema_migrations (version) VALUES ('20150217133937'); + +INSERT INTO schema_migrations (version) VALUES ('20150223104842'); + +INSERT INTO schema_migrations (version) VALUES ('20150226121252'); + +INSERT INTO schema_migrations (version) VALUES ('20150226144723'); + +INSERT INTO schema_migrations (version) VALUES ('20150227092508'); + +INSERT INTO schema_migrations (version) VALUES ('20150227113121'); + +INSERT INTO schema_migrations (version) VALUES ('20150302130224'); + +INSERT INTO schema_migrations (version) VALUES ('20150302161712'); + +INSERT INTO schema_migrations (version) VALUES ('20150303130729'); + +INSERT INTO schema_migrations (version) VALUES ('20150303151224'); + +INSERT INTO schema_migrations (version) VALUES ('20150305092921'); + +INSERT INTO schema_migrations (version) VALUES ('20150318084300'); + +INSERT INTO schema_migrations (version) VALUES ('20150318085110'); + +INSERT INTO schema_migrations (version) VALUES ('20150318114921'); + +INSERT INTO schema_migrations (version) VALUES ('20150319125655'); + +INSERT INTO schema_migrations (version) VALUES ('20150320132023'); + +INSERT INTO schema_migrations (version) VALUES ('20150330083700'); + +INSERT INTO schema_migrations (version) VALUES ('20150402114712'); + +INSERT INTO schema_migrations (version) VALUES ('20150407145943'); + +INSERT INTO schema_migrations (version) VALUES ('20150408081917'); + +INSERT INTO schema_migrations (version) VALUES ('20150410124724'); + +INSERT INTO schema_migrations (version) VALUES ('20150410132037'); + +INSERT INTO schema_migrations (version) VALUES ('20150413080832'); + +INSERT INTO schema_migrations (version) VALUES ('20150413102310'); + +INSERT INTO schema_migrations (version) VALUES ('20150413115829'); + +INSERT INTO schema_migrations (version) VALUES ('20150413140933'); + +INSERT INTO schema_migrations (version) VALUES ('20150414092249'); + +INSERT INTO schema_migrations (version) VALUES ('20150414124630'); + +INSERT INTO schema_migrations (version) VALUES ('20150414151357'); + +INSERT INTO schema_migrations (version) VALUES ('20150415075408'); + +INSERT INTO schema_migrations (version) VALUES ('20150416080828'); + +INSERT INTO schema_migrations (version) VALUES ('20150416091357'); + +INSERT INTO schema_migrations (version) VALUES ('20150416092026'); + +INSERT INTO schema_migrations (version) VALUES ('20150416094704'); + +INSERT INTO schema_migrations (version) VALUES ('20150417082723'); + +INSERT INTO schema_migrations (version) VALUES ('20150421134820'); + +INSERT INTO schema_migrations (version) VALUES ('20150422090645'); + +INSERT INTO schema_migrations (version) VALUES ('20150422092514'); + +INSERT INTO schema_migrations (version) VALUES ('20150422132631'); + +INSERT INTO schema_migrations (version) VALUES ('20150422134243'); + +INSERT INTO schema_migrations (version) VALUES ('20150423083308'); + +INSERT INTO schema_migrations (version) VALUES ('20150427073517'); + +INSERT INTO schema_migrations (version) VALUES ('20150428075052'); + +INSERT INTO schema_migrations (version) VALUES ('20150429135339'); + +INSERT INTO schema_migrations (version) VALUES ('20150430121807'); + +INSERT INTO schema_migrations (version) VALUES ('20150504104922'); + +INSERT INTO schema_migrations (version) VALUES ('20150504110926'); + +INSERT INTO schema_migrations (version) VALUES ('20150505111437'); + +INSERT INTO schema_migrations (version) VALUES ('20150511120755'); + +INSERT INTO schema_migrations (version) VALUES ('20150512160938'); + +INSERT INTO schema_migrations (version) VALUES ('20150513080013'); + +INSERT INTO schema_migrations (version) VALUES ('20150514132606'); + +INSERT INTO schema_migrations (version) VALUES ('20150515103222'); + +INSERT INTO schema_migrations (version) VALUES ('20150518084324'); + +INSERT INTO schema_migrations (version) VALUES ('20150519094929'); + +INSERT INTO schema_migrations (version) VALUES ('20150519095416'); + +INSERT INTO schema_migrations (version) VALUES ('20150519102521'); + +INSERT INTO schema_migrations (version) VALUES ('20150519115050'); + +INSERT INTO schema_migrations (version) VALUES ('20150519140853'); + +INSERT INTO schema_migrations (version) VALUES ('20150519142542'); + +INSERT INTO schema_migrations (version) VALUES ('20150519144118'); + +INSERT INTO schema_migrations (version) VALUES ('20150520163237'); + +INSERT INTO schema_migrations (version) VALUES ('20150520164507'); + +INSERT INTO schema_migrations (version) VALUES ('20150521120145'); + +INSERT INTO schema_migrations (version) VALUES ('20150522164020'); + +INSERT INTO schema_migrations (version) VALUES ('20150525075550'); + +INSERT INTO schema_migrations (version) VALUES ('20150603141054'); + +INSERT INTO schema_migrations (version) VALUES ('20150603141549'); + +INSERT INTO schema_migrations (version) VALUES ('20150603211318'); + +INSERT INTO schema_migrations (version) VALUES ('20150603212659'); + +INSERT INTO schema_migrations (version) VALUES ('20150609103333'); + +INSERT INTO schema_migrations (version) VALUES ('20150610112238'); + +INSERT INTO schema_migrations (version) VALUES ('20150610144547'); + +INSERT INTO schema_migrations (version) VALUES ('20150611124920'); + +INSERT INTO schema_migrations (version) VALUES ('20150612123111'); + diff --git a/doc/debian_build_doc.md b/doc/debian_build_doc.md index c2d40f56c..505e8f80a 100644 --- a/doc/debian_build_doc.md +++ b/doc/debian_build_doc.md @@ -42,8 +42,7 @@ Please install following lib, otherwise your bundler install might not be succes ### Firewall rate limit config -First increase the maximum possible value for the hitcount parameter -from its default value of 20 by setting the option +First increase the maximum possible value form 20 to 100 of the hitcount parameter. ip_pkt_list_tot of the xt_recent kernel module. This can be done by creating an ip_pkt_list_tot.conf file in /etc/modeprobe.d/ which contains: @@ -53,7 +52,6 @@ options xt_recent ip_pkt_list_tot=100 Once the file is created, reload the xt_recent kernel module via modprobe -r xt_recent && modprobe xt_recent or reboot the system. - #### Registrar, REPP, Restful-whois ```` @@ -70,22 +68,6 @@ $IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set $IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --rcheck --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION} ```` -#### EPP - -```` -#!/bin/bash -# Inspired and credits to Vivek Gite: http://www.cyberciti.biz/faq/iptables-connection-limits-howto/ -IPT=/sbin/iptables -# Max connection in seconds -SECONDS=60 -# Max connections per IP -BLOCKCOUNT=100 -# default action can be DROP or REJECT or something else. -DACTION="REJECT" -$IPT -A INPUT -p tcp --dport 700 -i eth0 -m state --state NEW -m recent --set -$IPT -A INPUT -p tcp --dport 700 -i eth0 -m state --state NEW -m recent --rcheck --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION} -```` - #### Whois ```` @@ -102,3 +84,41 @@ $IPT -A INPUT -p tcp --dport 43 -i eth0 -m state --state NEW -m recent --set $IPT -A INPUT -p tcp --dport 43 -i eth0 -m state --state NEW -m recent --rcheck --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION} ```` +#### EPP + +Iptables hitcounter is updated by application. + +```` +#!/bin/bash +# Inspired and credits to Vivek Gite: http://www.cyberciti.biz/faq/iptables-connection-limits-howto/ +IPT=/sbin/iptables +# Registrar handler +REGISTRAR_CODE="test" +# Max connection in seconds +SECONDS=60 +# Max connections per IP +BLOCKCOUNT=100 +# Source specification. Address can be either a network name, a hostname, a network IP address +# (with /mask), or a plain IP address. Hostnames will be resolved once only, before the rule +# is submitted to the kernel. Please note that specifying any name to be resolved with +# a remote query such as DNS is a really bad idea. The mask can be either a network mask or +# a plain number, specifying the number of 1's at the left side of the network mask. +# Thus, a mask of 24 is equivalent to 255.255.255.0. A "!" argument before +# the address specification inverts the sense of the address. +# The flag --src is an alias for this option. Multiple addresses can be specified, +# but this will expand to multiple rules (when adding with -A), +# or will cause multiple rules to be deleted (with -D). +REGISTRAR_HANDLE_SOURCE="x.x.x.x" +# default action can be DROP or REJECT or something else. +DACTION="REJECT" +$IPT -A INPUT -p tcp --dport 700 -i eth0 -m state --state NEW -m recent --set +$IPT -A INPUT -p tcp --dport 700 -s $REGISTRAR_HANDLE_SOURCE -m recent --name $REGISTRAR_CODE --rdest --rcheck --hitcount ${BLOCKCOUNT} --seconds ${SECONDS} -j ${DACTION} +```` + +After adding iptable counters, please add correct permissions to proc files at path /proc/net/xt_recent + +Example command: + +```` +sudo chown registry /proc/net/xt_recent/* +```` diff --git a/doc/epp-doc.md b/doc/epp-doc.md index 7ac516f3c..cf4a84d71 100644 --- a/doc/epp-doc.md +++ b/doc/epp-doc.md @@ -16,5 +16,15 @@ Our implementation supports following protocols: [RFC5910 - DNSSEC Mapping](http://tools.ietf.org/html/rfc5910) [RFC3735 - Guidelines for Extending the EPP](http://tools.ietf.org/html/rfc3735) +Related XML Schema Definitions (may differ from policies applied to registry): + +[contact-eis-1.0.xsd](schemas/contact-eis-1.0.xsd) +[domain-eis-1.0.xsd](schemas/domain-eis-1.0.xsd) +[eis-1.0.xsd](schemas/eis-1.0.xsd) +[epp-1.0.xsd](schemas/epp-1.0.xsd) +[eppcom-1.0.xsd](schemas/eppcom-1.0.xsd) +[host-1.0.xsd](schemas/host-1.0.xsd) +[secDNS-1.1.xsd](schemas/secDNS-1.1.xsd) + More info about The Extensible Provisioning Protocol (EPP):
http://en.wikipedia.org/wiki/Extensible_Provisioning_Protocol diff --git a/doc/epp-examples.md b/doc/epp-examples.md index df906d509..c9dd1c38b 100644 --- a/doc/epp-examples.md +++ b/doc/epp-examples.md @@ -1,6 +1,6 @@ # EPP REQUEST - RESPONSE EXAMPLES -GENERATED AT: 2015-04-02 12:30:35 +0300 -EXAMPLE COUNT: 125 +GENERATED AT: 2015-06-16 14:45:11 UTC +EXAMPLE COUNT: 168 --- @@ -18,13 +18,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -42,10 +42,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-1233952216 - + + ABC-12345 + ccReg-0628016030 +
``` @@ -59,7 +59,7 @@ REQUEST: - + ABC-12345 @@ -96,11 +96,11 @@ RESPONSE: Required parameter missing: extension > extdata > ident [ident] + + ABC-12345 + ccReg-4850323861 + - - ABC-12345 - ccReg-3287526489 - ``` @@ -113,7 +113,7 @@ REQUEST: - + John Doe @@ -128,9 +128,9 @@ REQUEST: - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -149,19 +149,19 @@ RESPONSE: - 8785c682 - 2015-04-02 09:30:37 UTC + FIRST0:E6D21A5B + 2015-06-16T14:45:14Z - - ABC-12345 - ccReg-2395064431 - + + ABC-12345 + ccReg-8174523782 + ``` -### EPP Contact with valid user create command successfully saves ident type +### EPP Contact with valid user create command successfully saves ident type with legal document REQUEST: @@ -170,7 +170,7 @@ REQUEST: - + John Doe @@ -185,9 +185,9 @@ REQUEST: - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 1990-22-12 + dGVzdCBmYWlsCg== ABC-12345 @@ -206,14 +206,14 @@ RESPONSE: - 323ba226 - 2015-04-02 09:30:37 UTC + FIRST0:2991302F + 2015-06-16T14:45:14Z - - ABC-12345 - ccReg-8997416744 - + + ABC-12345 + ccReg-5902458408 + ``` @@ -227,7 +227,7 @@ REQUEST: - + John Doe @@ -242,9 +242,9 @@ REQUEST: - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -263,14 +263,14 @@ RESPONSE: - 391df6a8 - 2015-04-02 09:30:37 UTC + FIRST0:939795FC + 2015-06-16T14:45:14Z - - ABC-12345 - ccReg-7132910453 - + + ABC-12345 + ccReg-7781355479 + ``` @@ -284,7 +284,7 @@ REQUEST: - + John Doe @@ -299,9 +299,9 @@ REQUEST: - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -320,19 +320,19 @@ RESPONSE: - 1eaf1950 - 2015-04-02 09:30:37 UTC + FIRST0:8F2D96DF + 2015-06-16T14:45:14Z - - ABC-12345 - ccReg-6618133267 - + + ABC-12345 + ccReg-9037049309 + ``` -### EPP Contact with valid user create command successfully saves custom code +### EPP Contact with valid user create command should add registrar prefix for code when missing REQUEST: @@ -341,7 +341,8 @@ REQUEST: - + + abc12345 John Doe @@ -353,13 +354,12 @@ REQUEST: +372.1234567 test@example.example - 12345 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -378,14 +378,464 @@ RESPONSE: - registrar1:12345 - 2015-04-02 09:30:37 UTC + FIRST0:ABC12345 + 2015-06-16T14:45:14Z - - ABC-12345 - ccReg-2453380772 - + + ABC-12345 + ccReg-5231101974 + + + +``` + +### EPP Contact with valid user create command should add registrar prefix for code when missing + +REQUEST: + +```xml + + + + + + abc:ABC:12345 + + John Doe + + 123 Example + Tallinn + 123456 + EE + + + +372.1234567 + test@example.example + + + + + 37605030299 + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:ABC:ABC:12345 + 2015-06-16T14:45:14Z + + + + ABC-12345 + ccReg-6422793401 + + + +``` + +### EPP Contact with valid user create command should not allow spaces in custom code + +REQUEST: + +```xml + + + + + + abc 123 + + John Doe + + 123 Example + Tallinn + 123456 + EE + + + +372.1234567 + test@example.example + + + + + 37605030299 + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + is invalid [code] + + + ABC-12345 + ccReg-2948594360 + + + +``` + +### EPP Contact with valid user create command should not saves ident type with wrong country code + +REQUEST: + +```xml + + + + + + + John Doe + + 123 Example + Tallinn + 123456 + EE + + + +372.1234567 + test@example.example + + + + + 1990-22-12 + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Ident country code is not valid, should be in ISO_3166-1 alpha 2 format [ident] + + + ABC-12345 + ccReg-5099683978 + + + +``` + +### EPP Contact with valid user create command should add registrar prefix for code when legacy prefix present + +REQUEST: + +```xml + + + + + + CID:FIRST0:abc:ABC:NEW:12345 + + John Doe + + 123 Example + Tallinn + 123456 + EE + + + +372.1234567 + test@example.example + + + + + 37605030299 + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:CID:FIRST0:ABC:ABC:NEW:12345 + 2015-06-16T14:45:16Z + + + + ABC-12345 + ccReg-1644285201 + + + +``` + +### EPP Contact with valid user create command should not remove suffix CID + +REQUEST: + +```xml + + + + + + CID:FIRST0:abc:CID:ABC:NEW:12345 + + John Doe + + 123 Example + Tallinn + 123456 + EE + + + +372.1234567 + test@example.example + + + + + 37605030299 + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:CID:FIRST0:ABC:CID:ABC:NEW:12345 + 2015-06-16T14:45:16Z + + + + ABC-12345 + ccReg-9700239330 + + + +``` + +### EPP Contact with valid user create command should not add registrar prefix for code when prefix present + +REQUEST: + +```xml + + + + + + FIRST0:abc22 + + John Doe + + 123 Example + Tallinn + 123456 + EE + + + +372.1234567 + test@example.example + + + + + 37605030299 + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:ABC22 + 2015-06-16T14:45:17Z + + + + ABC-12345 + ccReg-2521051245 + + + +``` + +### EPP Contact with valid user create command should add registrar prefix for code does not match exactly to prefix + +REQUEST: + +```xml + + + + + + cid2:first0:abc:ABC:11111 + + John Doe + + 123 Example + Tallinn + 123456 + EE + + + +372.1234567 + test@example.example + + + + + 37605030299 + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:CID2:FIRST0:ABC:ABC:11111 + 2015-06-16T14:45:17Z + + + + ABC-12345 + ccReg-0724862982 + + + +``` + +### EPP Contact with valid user create command should ignore custom code when only contact prefix given + +REQUEST: + +```xml + + + + + + CID:FIRST0 + + John Doe + + 123 Example + Tallinn + 123456 + EE + + + +372.1234567 + test@example.example + + + + + 37605030299 + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:CID:FIRST0 + 2015-06-16T14:45:17Z + + + + ABC-12345 + ccReg-6737500376 + ``` @@ -399,7 +849,7 @@ REQUEST: - + John Doe @@ -411,13 +861,12 @@ REQUEST: +372.1234567 test@example.example - - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -436,14 +885,14 @@ RESPONSE: - 9a8b4708 - 2015-04-02 09:30:37 UTC + FIRST0:83F0C8EE + 2015-06-16T14:45:17Z - - ABC-12345 - ccReg-8583394129 - + + ABC-12345 + ccReg-1953331836 + ``` @@ -457,7 +906,7 @@ REQUEST: - + John Doe @@ -472,9 +921,9 @@ REQUEST: - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -493,14 +942,14 @@ RESPONSE: - 92af8b59 - 2015-04-02 09:30:37 UTC + FIRST0:89839115 + 2015-06-16T14:45:17Z - - ABC-12345 - ccReg-4962506701 - + + ABC-12345 + ccReg-1961057833 + ``` @@ -514,25 +963,25 @@ REQUEST: - + John Doe + should not save 123 Example Tallinn 123456 EE - should not save +372.1234567 test@example.example - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -549,11 +998,11 @@ RESPONSE: Parameter value policy error. Org must be blank: postalInfo > org [org] + + ABC-12345 + ccReg-7530778283 + - - ABC-12345 - ccReg-9648398992 - ``` @@ -566,7 +1015,7 @@ REQUEST: - + John Doe @@ -577,14 +1026,14 @@ REQUEST: +372.1234567 - test@example.example should not save + test@example.example - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -601,11 +1050,11 @@ RESPONSE: Parameter value policy error. Fax must be blank: fax [fax] + + ABC-12345 + ccReg-9380671496 + - - ABC-12345 - ccReg-5762592386 - ``` @@ -618,7 +1067,7 @@ REQUEST: - + ABC-12345 @@ -637,14 +1086,11 @@ RESPONSE: Required parameter missing: update > update > id [id] - - Required parameter missing: update > update > authInfo > pw [pw] - + + ABC-12345 + ccReg-3302729368 + - - ABC-12345 - ccReg-5502832054 - ``` @@ -657,28 +1103,23 @@ REQUEST: - + not-exists - - password - John Doe Edited +372.7654321 edited@example.example - - - - + + password + - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - 37605030299 + + dGVzdCBmYWlsCg== ABC-12345 @@ -695,14 +1136,14 @@ RESPONSE: Object does not exist - not-exists + NOT-EXISTS + + ABC-12345 + ccReg-9700707144 + - - ABC-12345 - ccReg-6358984822 - ``` @@ -715,28 +1156,23 @@ REQUEST: - - sh8013 - - password - + + FIRST0:SH8013 John Doe Edited +372.7654321 edited@example.example - - - - + + password + - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - 37605030299 + + dGVzdCBmYWlsCg== ABC-12345 @@ -755,19 +1191,65 @@ RESPONSE: - sh8013 - 2015-04-02 09:30:37 UTC + FIRST0:SH8013 + 2015-06-16T14:45:19Z - - ABC-12345 - ccReg-9896533575 - + + ABC-12345 + ccReg-3460954479 + ``` -### EPP Contact with valid user update command fails with wrong authentication info +### EPP Contact with valid user update command is succesful for own contact without password + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + + John Doe Edited + + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:SH8013 + 2015-06-16T14:45:19Z + + + + ABC-12345 + ccReg-3321686496 + + + +``` + +### EPP Contact with valid user update command should update other contact with correct password REQUEST: @@ -783,13 +1265,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -807,10 +1289,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-7879674966 - + + ABC-12345 + ccReg-1310720284 +
``` @@ -822,28 +1304,23 @@ REQUEST: - - sh8013 - - password - + + FIRST0:SH8013 John Doe Edited +372.7654321 edited@example.example - - - - + + password + - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - 37605030299 + + dGVzdCBmYWlsCg== ABC-12345 @@ -857,14 +1334,20 @@ RESPONSE: - - Authorization error + + Command completed successfully + + + FIRST0:SH8013 + 2015-06-16T14:45:19Z + + + + ABC-12345 + ccReg-5319423932 + - - ABC-12345 - ccReg-9497399081 - ``` @@ -882,13 +1365,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -906,10 +1389,142 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-2756467450 - + + ABC-12345 + ccReg-8595538880 + + + +``` + +### EPP Contact with valid user update command should not update other contact without password + +REQUEST: + +```xml + + + + + registrar2 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-1546881965 + + + +``` + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + + John Doe Edited + + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Authorization error + + + ABC-12345 + ccReg-2967153959 + + + +``` + +REQUEST: + +```xml + + + + + registrar1 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-2076214878 + ``` @@ -923,28 +1538,23 @@ REQUEST: - - sh8013 - - password - + + FIRST0:SH8013 John Doe Edited 123213 wrong - - - - + + password + - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - 37605030299 + + dGVzdCBmYWlsCg== ABC-12345 @@ -964,11 +1574,11 @@ RESPONSE: Email is invalid [email] + + ABC-12345 + ccReg-0468202475 + - - ABC-12345 - ccReg-0573724614 - ``` @@ -981,29 +1591,24 @@ REQUEST: - - sh8013 - - password - + + FIRST0:SH8013 John Doe Edited +372.7654321 edited@example.example - - - - + + password + notpossibletoupdate - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - 37605030299 + + dGVzdCBmYWlsCg== ABC-12345 @@ -1020,18 +1625,18 @@ RESPONSE: Object does not exist - sh8013notpossibletoupdate + FIRST0:SH8013NOTPOSSIBLETOUPDATE + + ABC-12345 + ccReg-7942047636 + - - ABC-12345 - ccReg-8967980859 - ``` -### EPP Contact with valid user update command should update ident +### EPP Contact with valid user update command should not be able to update ident REQUEST: @@ -1040,28 +1645,24 @@ REQUEST: - - sh8013 - - password - + + FIRST0:SH8013 John Doe Edited +372.7654321 edited@example.example - - - - + + password + - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 1990-22-12 + dGVzdCBmYWlsCg== ABC-12345 @@ -1075,19 +1676,13 @@ RESPONSE: - - Command completed successfully + + Parameter value policy error. Update of ident data not allowed [ident] - - - sh8013 - 2015-04-02 09:30:37 UTC - - - - ABC-12345 - ccReg-1289469541 - + + ABC-12345 + ccReg-9797329583 + ``` @@ -1101,11 +1696,8 @@ REQUEST: - - sh8013 - - password - + + FIRST0:SH8013 John Doe Edited @@ -1113,17 +1705,15 @@ REQUEST: +372.7654321 edited@example.example - - - - + + password + - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - 37605030299 + + dGVzdCBmYWlsCg== ABC-12345 @@ -1140,11 +1730,11 @@ RESPONSE: Parameter value policy error. Org must be blank: postalInfo > org [org] + + ABC-12345 + ccReg-7526123941 + - - ABC-12345 - ccReg-7130809324 - ``` @@ -1157,29 +1747,24 @@ REQUEST: - - sh8013 - - password - + + FIRST0:SH8013 John Doe Edited +372.7654321 - edited@example.example - - - - should not save + edited@example.example + + password + - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - 37605030299 + + dGVzdCBmYWlsCg== ABC-12345 @@ -1196,11 +1781,11 @@ RESPONSE: Parameter value policy error. Fax must be blank: fax [fax] + + ABC-12345 + ccReg-4123279413 + - - ABC-12345 - ccReg-9624548628 - ``` @@ -1213,8 +1798,8 @@ REQUEST: - - sh8013 + + FIRST0:SH8013 Payment overdue. @@ -1235,14 +1820,529 @@ RESPONSE: Parameter value policy error. Client-side object status management not supported: status [status] - - Required parameter missing: update > update > authInfo > pw [pw] - + + ABC-12345 + ccReg-6929449846 + + + +``` + +### EPP Contact with valid user update command should add value voice value + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + +372.11111111 + + password + + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:SH8013 + 2015-06-16T14:45:19Z + + + + ABC-12345 + ccReg-1481668570 + + + +``` + +### EPP Contact with valid user update command should return error when add attributes phone value is empty + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + + example@example.ee + + password + + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Required parameter missing - phone [phone] + + + Phone nr is invalid [phone] + + + ABC-12345 + ccReg-0260056975 + + + +``` + +### EPP Contact with valid user update command should honor chg value over add value when both changes same attribute + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + +372.11111111111 + + + +372.222222222222 + + password + + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:SH8013 + 2015-06-16T14:45:19Z + + + + ABC-12345 + ccReg-9676737932 + + + +``` + +### EPP Contact with valid user update command should not allow to remove required voice attribute + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + + + password + + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Required parameter missing - phone [phone] + + + Phone nr is invalid [phone] + + + ABC-12345 + ccReg-9359806010 + + + +``` + +### EPP Contact with valid user update command should not allow to remove required attribute + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + password + + + +372.7654321 + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Required parameter missing - phone [phone] + + + Phone nr is invalid [phone] + + + ABC-12345 + ccReg-5415478708 + + + +``` + +### EPP Contact with valid user update command should honor add over rem + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + password + + + not important + + + +372.3333333 + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:SH8013 + 2015-06-16T14:45:19Z + + + + ABC-12345 + ccReg-7303720395 + + + +``` + +### EPP Contact with valid user update command should honor chg over rem + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + password + + + not important + + + +372.44444444 + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:SH8013 + 2015-06-16T14:45:19Z + + + + ABC-12345 + ccReg-8343028402 + + + +``` + +### EPP Contact with valid user update command should honor chg over rem and add + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + password + + + +372.666666 + + + +372.555555 + + + not important + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:SH8013 + 2015-06-16T14:45:19Z + + + + ABC-12345 + ccReg-3396633434 + + + +``` + +### EPP Contact with valid user update command should not remove password + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + password + + + + password + + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIRST0:SH8013 + 2015-06-16T14:45:19Z + + + + ABC-12345 + ccReg-2557605520 + + + +``` + +### EPP Contact with valid user update command should return general policy error when removing org + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + password + + + + not important + + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Parameter value policy error. Org must be blank: postalInfo > org [org] + + + ABC-12345 + ccReg-5903969239 + + + +``` + +### EPP Contact with valid user update command should return error when removing street + +REQUEST: + +```xml + + + + + + FIRST0:SH8013 + + password + + + + not important + + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Required parameter missing - name [name] + + + ABC-12345 + ccReg-4958556368 + - - ABC-12345 - ccReg-7975112656 - ``` @@ -1255,7 +2355,7 @@ REQUEST: - + ABC-12345 @@ -1271,14 +2371,11 @@ RESPONSE: Required parameter missing: delete > delete > id [id] - - Required parameter missing: delete > delete > authInfo > pw [pw] - + + ABC-12345 + ccReg-3948826508 + - - ABC-12345 - ccReg-4876546115 - ``` @@ -1291,7 +2388,7 @@ REQUEST: - + not-exists password @@ -1299,9 +2396,9 @@ REQUEST: - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -1318,14 +2415,14 @@ RESPONSE: Object does not exist - not-exists + NOT-EXISTS + + ABC-12345 + ccReg-6894400452 + - - ABC-12345 - ccReg-6707134195 - ``` @@ -1338,17 +2435,17 @@ REQUEST: - - sh616871733 + + FIRST0:SH660293943 password - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -1365,10 +2462,89 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-0769582785 - + + ABC-12345 + ccReg-3167684614 + + + +``` + +### EPP Contact with valid user delete command deletes own contact even with wrong password + +REQUEST: + +```xml + + + + + + FIRST0:SH918459854 + + wrong password + + + + + + 37605030299 + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-4976622556 + + + +``` + +### EPP Contact with valid user delete command deletes own contact even without password + +REQUEST: + +```xml + + + + + + FIRST0:SH479142985 + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-5497436667 + ``` @@ -1382,17 +2558,17 @@ REQUEST: - - sh317872324 + + FIRST0:SH948515446 password - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -1409,15 +2585,15 @@ RESPONSE: Object association prohibits operation [domains] + + ABC-12345 + ccReg-5113374232 + - - ABC-12345 - ccReg-9622128674 - ``` -### EPP Contact with valid user delete command fails with wrong authentication info +### EPP Contact with valid user delete command should delete when not owner but with correct password REQUEST: @@ -1433,13 +2609,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -1457,10 +2633,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-9519410809 - + + ABC-12345 + ccReg-2787819683 + ``` @@ -1472,17 +2648,17 @@ REQUEST: - - sh849994836 + + FIRST0:SH756528579 password - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + 37605030299 + dGVzdCBmYWlsCg== ABC-12345 @@ -1496,14 +2672,14 @@ RESPONSE: - - Authorization error + + Command completed successfully + + ABC-12345 + ccReg-1059535053 + - - ABC-12345 - ccReg-6470384730 - ``` @@ -1521,13 +2697,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -1545,10 +2721,273 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-2702175300 - + + ABC-12345 + ccReg-9721519129 + + + +``` + +### EPP Contact with valid user delete command should not delete when not owner without password + +REQUEST: + +```xml + + + + + registrar2 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-5463189772 + + + +``` + +REQUEST: + +```xml + + + + + + FIRST0:SH6727132410 + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Authorization error + + + ABC-12345 + ccReg-0140635504 + + + +``` + +REQUEST: + +```xml + + + + + registrar1 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-3361341345 + + + +``` + +### EPP Contact with valid user delete command should not delete when not owner with wrong password + +REQUEST: + +```xml + + + + + registrar2 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-2140366200 + + + +``` + +REQUEST: + +```xml + + + + + + FIRST0:SH6052359511 + + wrong password + + + + + + 37605030299 + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Authorization error + + + ABC-12345 + ccReg-4307228004 + + + +``` + +REQUEST: + +```xml + + + + + registrar1 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-9967906837 + ``` @@ -1562,7 +3001,7 @@ REQUEST: - + ABC-12345 @@ -1578,11 +3017,11 @@ RESPONSE: Required parameter missing: check > check > id [id] + + ABC-12345 + ccReg-1546452843 + - - ABC-12345 - ccReg-9548831820 - ``` @@ -1595,8 +3034,8 @@ REQUEST: - - check-1234 + + FIXED:CHECK-1234 check-4321 @@ -1617,7 +3056,7 @@ RESPONSE: - check-1234 + FIXED:CHECK-1234 in use @@ -1625,10 +3064,57 @@ RESPONSE: - - ABC-12345 - ccReg-4583380937 - + + ABC-12345 + ccReg-5794718821 + + + +``` + +### EPP Contact with valid user check command should support legacy CID farmat + +REQUEST: + +```xml + + + + + + FIXED:CHECK-LEGACY + CID:FIXED:CHECK-LEGACY + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + + FIXED:CHECK-LEGACY + in use + + + CID:FIXED:CHECK-LEGACY + + + + + ABC-12345 + ccReg-9107912155 + ``` @@ -1642,7 +3128,7 @@ REQUEST: - + ABC-12345 @@ -1658,11 +3144,11 @@ RESPONSE: Required parameter missing: info > info > id [id] + + ABC-12345 + ccReg-0867319397 + - - ABC-12345 - ccReg-0827476737 - ``` @@ -1675,7 +3161,7 @@ REQUEST: - + no-contact password @@ -1696,14 +3182,14 @@ RESPONSE: Object does not exist - no-contact + NO-CONTACT + + ABC-12345 + ccReg-1035787772 + - - ABC-12345 - ccReg-7078773469 - ``` @@ -1716,8 +3202,8 @@ REQUEST: - - info-4444 + + FIXED:INFO-4444 password @@ -1739,26 +3225,27 @@ RESPONSE: - info-4444 - +372.12345678 - otilia@trompmetz.info + FIXED:INFO-4444 + EIS-29 + Johnny Awesome Short street 11 Tallinn - 11111 + 11111 EE - registrar1 - - 2015-04-02 09:30:38 UTC + +372.12345678 + litzy_kuvalis@pfannerstillhowe.org + fixed registrar + TEST-CREATOR + 2015-06-16T14:45:37Z password - @@ -1766,10 +3253,78 @@ RESPONSE: 37605030299 - - ABC-12345 - ccReg-6410502093 - + + ABC-12345 + ccReg-8740910444 + + + +``` + +### EPP Contact with valid user info command should add legacy CID format as append + +REQUEST: + +```xml + + + + + + FIXED:CID:FIXED:INFO-5555 + + password + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIXED:CID:FIXED:INFO-5555 + EIS-30 + + + Johnny Awesome + + Short street 11 + Tallinn + + 11111 + EE + + + +372.12345678 + litzy_kuvalis@pfannerstillhowe.org + fixed registrar + TEST-CREATOR + 2015-06-16T14:45:37Z + + password + + + + + + 37605030299 + + + + ABC-12345 + ccReg-0768016805 + ``` @@ -1783,8 +3338,8 @@ REQUEST: - - info-ident + + FIRST0:INFO-IDENT password @@ -1806,26 +3361,27 @@ RESPONSE: - info-ident - +372.12345678 - otilia@trompmetz.info + FIRST0:INFO-IDENT + EIS-31 + Johnny Awesome Short street 11 Tallinn - 11111 + 11111 EE + +372.12345678 + litzy_kuvalis@pfannerstillhowe.org registrar1 - - 2015-04-02 09:30:38 UTC + TEST-CREATOR + 2015-06-16T14:45:37Z password - @@ -1833,15 +3389,15 @@ RESPONSE: 37605030299 - - ABC-12345 - ccReg-6975719991 - + + ABC-12345 + ccReg-1418789936 + ``` -### EPP Contact with valid user info command returns no authorization error for wrong password when owner +### EPP Contact with valid user info command returns no authorization error for wrong password when registrant REQUEST: @@ -1850,8 +3406,8 @@ REQUEST: - - sh191232150 + + FIRST0:SH168939920 wrong-pw @@ -1873,26 +3429,27 @@ RESPONSE: - sh191232150 - +372.12345678 - otilia@trompmetz.info + FIRST0:SH168939920 + EIS-1 + - Khalil Ernser0 + Tiana Cummerata0 Short street 11 Tallinn - 11111 + 11111 EE + +372.12345678 + litzy_kuvalis@pfannerstillhowe.org registrar1 - - 2015-04-02 09:30:36 UTC + TEST-CREATOR + 2015-06-16T14:45:13Z password - @@ -1900,10 +3457,78 @@ RESPONSE: 37605030299 - - ABC-12345 - ccReg-4705338516 - + + ABC-12345 + ccReg-8270641025 + + + +``` + +### EPP Contact with valid user info command should honor new contact code format + +REQUEST: + +```xml + + + + + + FIXED:TEST:CUSTOM:CODE + + password + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + FIXED:TEST:CUSTOM:CODE + EIS-32 + + + Jarred Reichel15 + + Short street 11 + Tallinn + + 11111 + EE + + + +372.12345678 + litzy_kuvalis@pfannerstillhowe.org + fixed registrar + TEST-CREATOR + 2015-06-16T14:45:37Z + + password + + + + + + 37605030299 + + + + ABC-12345 + ccReg-0424201637 + ``` @@ -1924,13 +3549,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -1948,10 +3573,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-2244559397 - + + ABC-12345 + ccReg-6919284154 +
``` @@ -1963,8 +3588,8 @@ REQUEST: - - sh191232150 + + FIRST0:SH168939920 password @@ -1986,26 +3611,27 @@ RESPONSE: - sh191232150 - +372.12345678 - otilia@trompmetz.info + FIRST0:SH168939920 + EIS-1 + - Khalil Ernser0 + Tiana Cummerata0 Short street 11 Tallinn - 11111 + 11111 EE + +372.12345678 + litzy_kuvalis@pfannerstillhowe.org registrar1 - - 2015-04-02 09:30:36 UTC + TEST-CREATOR + 2015-06-16T14:45:13Z password - @@ -2013,10 +3639,10 @@ RESPONSE: 37605030299 - - ABC-12345 - ccReg-7930412610 - + + ABC-12345 + ccReg-4155363959 + ``` @@ -2035,13 +3661,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -2059,10 +3685,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-3033397293 - + + ABC-12345 + ccReg-9980678480 +
``` @@ -2083,13 +3709,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -2107,10 +3733,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-2110451392 - + + ABC-12345 + ccReg-6386920424 +
``` @@ -2122,8 +3748,8 @@ REQUEST: - - sh191232150 + + FIRST0:SH168939920 wrong-pw @@ -2143,11 +3769,11 @@ RESPONSE: Authorization error + + ABC-12345 + ccReg-8614373807 + - - ABC-12345 - ccReg-6034273022 - ``` @@ -2165,13 +3791,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -2189,10 +3815,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-6728126220 - + + ABC-12345 + ccReg-9444940598 + ``` @@ -2213,13 +3839,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -2237,10 +3863,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-9479746307 - + + ABC-12345 + ccReg-1099785761 + ``` @@ -2252,8 +3878,8 @@ REQUEST: - - sh191232150 + + FIRST0:SH168939920 @@ -2275,105 +3901,22 @@ RESPONSE: - sh191232150 + FIRST0:SH168939920 + EIS-1 + - Khalil Ernser0 + Tiana Cummerata0 registrar1 - - 2015-04-02 09:30:36 UTC - + TEST-CREATOR + 2015-06-16T14:45:13Z - - ABC-12345 - ccReg-9878707653 - - - -``` - -REQUEST: - -```xml - - - - - registrar1 - ghyt9e4fu - - 1.0 - en - - - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 - urn:ietf:params:xml:ns:host-1.0 - urn:ietf:params:xml:ns:keyrelay-1.0 - - urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 - - - - ABC-12345 - - -``` - -RESPONSE: - -```xml - - - - - Command completed successfully - - - ABC-12345 - ccReg-8394470155 - - - -``` - -### EPP Contact with valid user renew command returns 2101-unimplemented command - -REQUEST: - -```xml - - - - - - info-4444 - - 2fooBAR - - - + ABC-12345 - - -``` - -RESPONSE: - -```xml - - - - - Unimplemented command - + ccReg-7660283209 + - - ABC-12345 - ccReg-4449817183 - ``` @@ -2391,13 +3934,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -2415,10 +3958,56 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-6479345571 - + + ABC-12345 + ccReg-8143425519 + + + +``` + +REQUEST: + +```xml + + + + + registrar1 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-2175230306 + ``` @@ -2432,8 +4021,8 @@ REQUEST: - - example29991941952598574.ee + + example51359824296846476.ee 1 @@ -2445,8 +4034,8 @@ REQUEST: ns2.example.net - citizen_1234 - citizen_1234 + FIXED:CITIZEN_1234 + FIXED:CITIZEN_1234 sh1111 sh2222 @@ -2460,8 +4049,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -2487,11 +4076,11 @@ RESPONSE: sh2222 + + ABC-12345 + ccReg-6335804328 + - - ABC-12345 - ccReg-9003154174 - ``` @@ -2504,7 +4093,7 @@ REQUEST: - + test.ee @@ -2531,15 +4120,15 @@ RESPONSE: Required parameter missing: extension > extdata > legalDocument [legal_document] + + ABC-12345 + ccReg-4990944724 + - - ABC-12345 - ccReg-3507870669 - ``` -### EPP Domain with citizen as an owner creates a domain +### EPP Domain with citizen as a registrant creates a domain REQUEST: @@ -2548,8 +4137,8 @@ REQUEST: - - example69986438078627922.ee + + example18858770590752611.ee 1 @@ -2561,10 +4150,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -2576,8 +4165,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -2596,20 +4185,20 @@ RESPONSE: - example69986438078627922.ee - 2015-04-02 09:30:39 UTC - 2016-04-02 00:00:00 UTC + example18858770590752611.ee + 2015-06-16T14:45:40Z + 2016-06-16T14:45:40Z + + ABC-12345 + ccReg-0460679321 + - - ABC-12345 - ccReg-1862475581 - ``` -### EPP Domain with citizen as an owner creates a domain with legal document +### EPP Domain with citizen as a registrant creates a domain with legal document REQUEST: @@ -2618,8 +4207,8 @@ REQUEST: - - example47860272766685766.ee + + example53637086732201506.ee 1 @@ -2631,15 +4220,15 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -2658,20 +4247,20 @@ RESPONSE: - example47860272766685766.ee - 2015-04-02 09:30:39 UTC - 2016-04-02 00:00:00 UTC + example53637086732201506.ee + 2015-06-16T14:45:40Z + 2016-06-16T14:45:40Z + + ABC-12345 + ccReg-2657489548 + - - ABC-12345 - ccReg-9791125228 - ``` -### EPP Domain with citizen as an owner validates nameserver ipv4 when in same zone as domain +### EPP Domain with citizen as a registrant validates nameserver ipv4 when in same zone as domain REQUEST: @@ -2680,21 +4269,21 @@ REQUEST: - - example65969542925515313.ee + + example55255947651220293.ee 1 - ns1.example65969542925515313.ee + ns1.example55255947651220293.ee - ns2.example65969542925515313.ee + ns2.example55255947651220293.ee - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -2706,8 +4295,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -2724,15 +4313,15 @@ RESPONSE: IPv4 is missing [ipv4] + + ABC-12345 + ccReg-5446638954 + - - ABC-12345 - ccReg-3337898568 - ``` -### EPP Domain with citizen as an owner does not create reserved domain +### EPP Domain with citizen as a registrant does not create domain longer than 63 punicode characters REQUEST: @@ -2741,7 +4330,70 @@ REQUEST: - + + äääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääää.ee + 1 + + + ns1.example.net + 192.0.2.2 + 1080:0:0:0:8:800:200C:417A + + + ns2.example.net + + + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 + + + + + + 257 + 3 + 5 + AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 + + + + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Domain name is too long (maximum is 63 characters) [puny_label] + + + ABC-12345 + ccReg-2558205520 + + + +``` + +### EPP Domain with citizen as a registrant does not create reserved domain + +REQUEST: + +```xml + + + + + 1162.ee 1 @@ -2754,10 +4406,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -2769,8 +4421,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -2790,15 +4442,15 @@ RESPONSE: 1162.ee + + ABC-12345 + ccReg-3241448329 + - - ABC-12345 - ccReg-8534003724 - ``` -### EPP Domain with citizen as an owner does not create domain without contacts and registrant +### EPP Domain with citizen as a registrant does not create domain without contacts and registrant REQUEST: @@ -2807,8 +4459,8 @@ REQUEST: - - example61321583015887262.ee + + example79107476359960104.ee 1 @@ -2820,10 +4472,6 @@ REQUEST: ns2.example.net - sh8013 - sh8013 - sh801333 - @@ -2835,8 +4483,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -2853,15 +4501,15 @@ RESPONSE: Required parameter missing: create > create > registrant [registrant] + + ABC-12345 + ccReg-2841149464 + - - ABC-12345 - ccReg-1067001064 - ``` -### EPP Domain with citizen as an owner does not create domain without nameservers +### EPP Domain with citizen as a registrant does not create domain without nameservers REQUEST: @@ -2870,14 +4518,13 @@ REQUEST: - - example31779613815936591.ee + + example89212032300871964.ee 1 - - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -2889,8 +4536,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -2910,15 +4557,15 @@ RESPONSE: Required parameter missing: create > create > ns > hostAttr [host_attr] + + ABC-12345 + ccReg-6780943188 + - - ABC-12345 - ccReg-6148309271 - ``` -### EPP Domain with citizen as an owner does not create domain with too many nameservers +### EPP Domain with citizen as a registrant does not create domain with too many nameservers REQUEST: @@ -2927,8 +4574,8 @@ REQUEST: - - example70843109875439590.ee + + example83430684429956047.ee 1 @@ -2974,10 +4621,10 @@ REQUEST: ns13.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -2989,8 +4636,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3007,15 +4654,15 @@ RESPONSE: Nameservers count must be between 2-11 [nameservers] + + ABC-12345 + ccReg-2034075719 + - - ABC-12345 - ccReg-0854842404 - ``` -### EPP Domain with citizen as an owner returns error when invalid nameservers are present +### EPP Domain with citizen as a registrant returns error when invalid nameservers are present REQUEST: @@ -3024,8 +4671,8 @@ REQUEST: - - example63972387399181910.ee + + example48749833529852102.ee 1 @@ -3035,10 +4682,10 @@ REQUEST: -invalid2 - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3050,8 +4697,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3077,15 +4724,15 @@ RESPONSE: -invalid2 + + ABC-12345 + ccReg-8625622303 + - - ABC-12345 - ccReg-4558439165 - ``` -### EPP Domain with citizen as an owner checks hostAttr presence +### EPP Domain with citizen as a registrant checks hostAttr presence REQUEST: @@ -3094,17 +4741,17 @@ REQUEST: - - example64998887953122208.ee + + example62530771922904064.ee 1 ns1.example.ee ns2.example.ee - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3116,8 +4763,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3134,15 +4781,15 @@ RESPONSE: Required parameter missing: create > create > ns > hostAttr [host_attr] + + ABC-12345 + ccReg-9223003685 + - - ABC-12345 - ccReg-8993773766 - ``` -### EPP Domain with citizen as an owner creates domain with nameservers with ips +### EPP Domain with citizen as a registrant creates domain with nameservers with ips REQUEST: @@ -3151,8 +4798,8 @@ REQUEST: - - example66094690867566868.ee + + example57855176106155885.ee 1 @@ -3164,18 +4811,18 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 2fooBAR - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3194,20 +4841,20 @@ RESPONSE: - example66094690867566868.ee - 2015-04-02 09:30:40 UTC - 2016-04-02 00:00:00 UTC + example57855176106155885.ee + 2015-06-16T14:45:49Z + 2016-06-16T14:45:49Z + + ABC-12345 + ccReg-3987518347 + - - ABC-12345 - ccReg-8694496624 - ``` -### EPP Domain with citizen as an owner returns error when nameserver has invalid ips +### EPP Domain with citizen as a registrant returns error when nameserver has invalid ips REQUEST: @@ -3216,8 +4863,8 @@ REQUEST: - - example74143344678584894.ee + + example36117415864684846.ee 1 @@ -3229,18 +4876,18 @@ REQUEST: invalid_ipv6 - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 2fooBAR - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3266,15 +4913,15 @@ RESPONSE: INVALID_IPV6 + + ABC-12345 + ccReg-8191386800 + - - ABC-12345 - ccReg-4896771251 - ``` -### EPP Domain with citizen as an owner creates a domain with period in days +### EPP Domain with citizen as a registrant creates a domain with period in days REQUEST: @@ -3283,8 +4930,8 @@ REQUEST: - - example68910576882568383.ee + + example47616294102238590.ee 1 @@ -3296,10 +4943,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3311,8 +4958,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3331,20 +4978,20 @@ RESPONSE: - example68910576882568383.ee - 2015-04-02 09:30:40 UTC - 2016-04-02 00:00:00 UTC + example47616294102238590.ee + 2015-06-16T14:45:50Z + 2016-06-16T14:45:50Z + + ABC-12345 + ccReg-9254659589 + - - ABC-12345 - ccReg-8254662407 - ``` -### EPP Domain with citizen as an owner does not create a domain with invalid period +### EPP Domain with citizen as a registrant does not create a domain with invalid period REQUEST: @@ -3353,8 +5000,8 @@ REQUEST: - - example49512361195062727.ee + + example59902259057282424.ee 367 @@ -3366,10 +5013,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3381,8 +5028,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3396,21 +5043,21 @@ RESPONSE: - + Period must add up to 1, 2 or 3 years [period] 367 + + ABC-12345 + ccReg-5831577897 + - - ABC-12345 - ccReg-1464107209 - ``` -### EPP Domain with citizen as an owner creates a domain with multiple dnskeys +### EPP Domain with citizen as a registrant creates a domain with multiple dnskeys REQUEST: @@ -3419,8 +5066,8 @@ REQUEST: - - example5422433521677756.ee + + example35799150293426379.ee 1 @@ -3432,10 +5079,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3459,8 +5106,8 @@ REQUEST: 841936717ae427ace63c28d04918569a841936717ae427ace63c28d0 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3479,20 +5126,20 @@ RESPONSE: - example5422433521677756.ee - 2015-04-02 09:30:40 UTC - 2016-04-02 00:00:00 UTC + example35799150293426379.ee + 2015-06-16T14:45:52Z + 2016-06-16T14:45:52Z + + ABC-12345 + ccReg-6805098026 + - - ABC-12345 - ccReg-3904270163 - ``` -### EPP Domain with citizen as an owner does not create a domain when dnskeys are invalid +### EPP Domain with citizen as a registrant does not create a domain when dnskeys are invalid REQUEST: @@ -3501,8 +5148,8 @@ REQUEST: - - example69912340093826806.ee + + example77419485730565318.ee 1 @@ -3514,10 +5161,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3541,8 +5188,8 @@ REQUEST: - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3595,15 +5242,15 @@ RESPONSE: 5 + + ABC-12345 + ccReg-5499891820 + - - ABC-12345 - ccReg-9441960354 - ``` -### EPP Domain with citizen as an owner does not create a domain with two identical dnskeys +### EPP Domain with citizen as a registrant does not create a domain with two identical dnskeys REQUEST: @@ -3612,8 +5259,8 @@ REQUEST: - - example65131165697692498.ee + + example62893290773940803.ee 1 @@ -3625,10 +5272,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3646,8 +5293,8 @@ REQUEST: 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3667,15 +5314,15 @@ RESPONSE: 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f + + ABC-12345 + ccReg-1606849858 + - - ABC-12345 - ccReg-6791307481 - ``` -### EPP Domain with citizen as an owner validated dnskeys count +### EPP Domain with citizen as a registrant validated dnskeys count REQUEST: @@ -3684,8 +5331,8 @@ REQUEST: - - example45831056679599713.ee + + example89542634347493363.ee 1 @@ -3697,10 +5344,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3718,8 +5365,8 @@ REQUEST: 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3736,15 +5383,15 @@ RESPONSE: DNS keys count must be between 0-1 [dnskeys] + + ABC-12345 + ccReg-0277146354 + - - ABC-12345 - ccReg-7825718946 - ``` -### EPP Domain with citizen as an owner creates domain with ds data +### EPP Domain with citizen as a registrant creates domain with ds data REQUEST: @@ -3753,8 +5400,8 @@ REQUEST: - - example37215299046398843.ee + + example5611622315382730.ee 1 @@ -3766,10 +5413,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3781,8 +5428,8 @@ REQUEST: 49FD46E6C4B45C55D4AC - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3801,20 +5448,20 @@ RESPONSE: - example37215299046398843.ee - 2015-04-02 09:30:41 UTC - 2016-04-02 00:00:00 UTC + example5611622315382730.ee + 2015-06-16T14:45:55Z + 2016-06-16T14:45:55Z + + ABC-12345 + ccReg-2786067157 + - - ABC-12345 - ccReg-7095694178 - ``` -### EPP Domain with citizen as an owner creates domain with ds data with key +### EPP Domain with citizen as a registrant creates domain with ds data with key REQUEST: @@ -3823,8 +5470,8 @@ REQUEST: - - example67486651509736417.ee + + example28205147543381731.ee 1 @@ -3836,10 +5483,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3857,8 +5504,8 @@ REQUEST: - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3877,20 +5524,20 @@ RESPONSE: - example67486651509736417.ee - 2015-04-02 09:30:41 UTC - 2016-04-02 00:00:00 UTC + example28205147543381731.ee + 2015-06-16T14:45:55Z + 2016-06-16T14:45:55Z + + ABC-12345 + ccReg-3180633288 + - - ABC-12345 - ccReg-6068198686 - ``` -### EPP Domain with citizen as an owner prohibits dsData +### EPP Domain with citizen as a registrant prohibits dsData REQUEST: @@ -3899,8 +5546,8 @@ REQUEST: - - example58465853895457101.ee + + example81689211125437444.ee 1 @@ -3912,10 +5559,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3933,8 +5580,8 @@ REQUEST: - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -3951,15 +5598,15 @@ RESPONSE: dsData object is not allowed + + ABC-12345 + ccReg-0596552578 + - - ABC-12345 - ccReg-6174712138 - ``` -### EPP Domain with citizen as an owner prohibits keyData +### EPP Domain with citizen as a registrant prohibits keyData REQUEST: @@ -3968,8 +5615,8 @@ REQUEST: - - example97193404282661106.ee + + example16808329279089073.ee 1 @@ -3981,10 +5628,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -3996,8 +5643,8 @@ REQUEST: 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -4014,15 +5661,15 @@ RESPONSE: keyData object is not allowed + + ABC-12345 + ccReg-3845103907 + - - ABC-12345 - ccReg-2738595388 - ``` -### EPP Domain with citizen as an owner prohibits dsData and keyData when they exists together +### EPP Domain with citizen as a registrant prohibits dsData and keyData when they exists together REQUEST: @@ -4031,8 +5678,8 @@ REQUEST: - - example8349587703882463.ee + + example57773978303296424.ee 1 @@ -4044,10 +5691,10 @@ REQUEST: ns2.example.net - citizen_1234 - sh8013 - sh8013 - sh801333 + FIXED:CITIZEN_1234 + FIXED:SH8013 + FIXED:SH8013 + FIXED:SH801333 @@ -4065,8 +5712,8 @@ REQUEST: 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -4083,15 +5730,15 @@ RESPONSE: Mutually exclusive parameters: extension > create > keyData, extension > create > dsData + + ABC-12345 + ccReg-0236248171 + - - ABC-12345 - ccReg-3820228900 - ``` -### EPP Domain with juridical persion as an owner creates a domain with contacts +### EPP Domain with juridical persion as a registrant creates a domain with contacts REQUEST: @@ -4100,8 +5747,8 @@ REQUEST: - - example11522860072959556.ee + + example82556663094409029.ee 1 @@ -4113,8 +5760,8 @@ REQUEST: ns2.example.net - juridical_1234 - sh8013 + FIXED:JURIDICAL_1234 + FIXED:SH8013 @@ -4126,8 +5773,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -4146,20 +5793,20 @@ RESPONSE: - example11522860072959556.ee - 2015-04-02 09:30:41 UTC - 2016-04-02 00:00:00 UTC + example82556663094409029.ee + 2015-06-16T14:45:59Z + 2016-06-16T14:45:59Z + + ABC-12345 + ccReg-7792326836 + - - ABC-12345 - ccReg-7422719300 - ``` -### EPP Domain with juridical persion as an owner does not create a domain without admin contact +### EPP Domain with juridical persion as a registrant does not create a domain without admin contact REQUEST: @@ -4168,8 +5815,8 @@ REQUEST: - - example4597088465974685.ee + + example61224688298392772.ee 1 @@ -4181,8 +5828,8 @@ REQUEST: ns2.example.net - juridical_1234 - sh8013 + FIXED:JURIDICAL_1234 + FIXED:SH8013 @@ -4194,8 +5841,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -4212,15 +5859,15 @@ RESPONSE: Admin contacts count must be between 1-10 [admin_domain_contacts] + + ABC-12345 + ccReg-4835312018 + - - ABC-12345 - ccReg-1845021908 - ``` -### EPP Domain with juridical persion as an owner cannot assign juridical person as admin contact +### EPP Domain with juridical persion as a registrant cannot assign juridical person as admin contact REQUEST: @@ -4229,8 +5876,8 @@ REQUEST: - - example42791140549073590.ee + + example2482715006886939.ee 1 @@ -4242,8 +5889,8 @@ REQUEST: ns2.example.net - juridical_1234 - juridical_1234 + FIXED:JURIDICAL_1234 + FIXED:JURIDICAL_1234 @@ -4255,8 +5902,8 @@ REQUEST: AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -4273,14 +5920,14 @@ RESPONSE: Admin contact can be private person only - juridical_1234 + FIXED:JURIDICAL_1234 + + ABC-12345 + ccReg-0994405489 + - - ABC-12345 - ccReg-9414004240 - ``` @@ -4300,13 +5947,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -4324,10 +5971,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-7857345433 - + + ABC-12345 + ccReg-9434443874 + ``` @@ -4339,16 +5986,16 @@ REQUEST: - + domain1.ee - 6dfc702c9b9f4a4935eddd44e8a9357f + cade780e81c248d9e6363fd303b523c3 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -4369,18 +6016,18 @@ RESPONSE: domain1.ee serverApproved - 222 - 2015-04-02 09:30:42 UTC - 111 - 2015-04-02 09:30:42 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:02Z + REGDOMAIN1 + 2015-06-16T14:46:02Z + 2016-06-16T14:46:02Z + + ABC-12345 + ccReg-6107518806 + - - ABC-12345 - ccReg-8712491017 - ``` @@ -4398,13 +6045,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -4422,160 +6069,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-1010222202 - - - -``` - -REQUEST: - -```xml - - - - - - domain1.ee - - a1b720f933d963ad93a12169f646de29 - - - - - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - - - ABC-12345 - - -``` - -RESPONSE: - -```xml - - - - - Command completed successfully - - - - domain1.ee - pending - 111 - 2015-04-02 09:30:42 UTC - 222 - 2015-04-02 10:30:42 UTC - 2016-04-02 00:00:00 UTC - - - - - ABC-12345 - ccReg-5304388039 - - -``` - -REQUEST: - -```xml - - - - - - domain1.ee - - a1b720f933d963ad93a12169f646de29 - - - - - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - - - ABC-12345 - - -``` - -RESPONSE: - -```xml - - - - - Command completed successfully - - - - domain1.ee - pending - 111 - 2015-04-02 09:30:42 UTC - 222 - 2015-04-02 10:30:42 UTC - 2016-04-02 00:00:00 UTC - - - - - ABC-12345 - ccReg-6275383342 - - -``` - -REQUEST: - -```xml - - - - - registrar2 - ghyt9e4fu - - 1.0 - en - - - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 - urn:ietf:params:xml:ns:host-1.0 - urn:ietf:params:xml:ns:keyrelay-1.0 - - urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 - - - - ABC-12345 - - -``` - -RESPONSE: - -```xml - - - - - Command completed successfully - - - ABC-12345 - ccReg-5159106216 - + + ABC-12345 + ccReg-9351177423 + ``` @@ -4602,24 +6099,24 @@ RESPONSE: Command completed successfully; ack to dequeue - 2015-04-02 09:30:42 UTC - Transfer requested. + 2015-06-16T14:46:02Z + Domain transfer was approved, associated contacts are: ["REGDOMAIN2:2E38C324", "REGDOMAIN2:30A5A03D"] domain1.ee - pending - 111 - 2015-04-02 09:30:42 UTC - 222 - 2015-04-02 10:30:42 UTC - 2016-04-02 00:00:00 UTC + serverApproved + REGDOMAIN2 + 2015-06-16T14:46:02Z + REGDOMAIN1 + 2015-06-16T14:46:02Z + 2016-06-16T14:46:02Z - - ABC-12345 - ccReg-1613521643 - + + ABC-12345 + ccReg-5221788468 + ``` @@ -4630,24 +6127,19 @@ REQUEST: - - registrar1 - ghyt9e4fu - - 1.0 - en - - - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 - urn:ietf:params:xml:ns:host-1.0 - urn:ietf:params:xml:ns:keyrelay-1.0 - - urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 - - - + + + domain1.ee + + e3b00963e2849df1654840a4805b8390 + + + + + + dGVzdCBmYWlsCg== + + ABC-12345 @@ -4662,10 +6154,73 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-5553786927 - + + + domain1.ee + pending + REGDOMAIN1 + 2015-06-16T14:46:02Z + REGDOMAIN2 + 2015-06-16T15:46:02Z + 2016-06-16T14:46:02Z + + + + ABC-12345 + ccReg-5943956125 + + + +``` + +REQUEST: + +```xml + + + + + + domain1.ee + + e3b00963e2849df1654840a4805b8390 + + + + + + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + domain1.ee + pending + REGDOMAIN1 + 2015-06-16T14:46:02Z + REGDOMAIN2 + 2015-06-16T15:46:02Z + 2016-06-16T14:46:02Z + + + + ABC-12345 + ccReg-0973430912 + ``` @@ -4684,13 +6239,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -4708,10 +6263,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-9831901646 - + + ABC-12345 + ccReg-7808499308 + ``` @@ -4722,7 +6277,7 @@ REQUEST: - + ABC-12345 @@ -4734,14 +6289,28 @@ RESPONSE: - - Command completed successfully + + Command completed successfully; ack to dequeue - - - ABC-12345 - ccReg-2894235467 - + + 2015-06-16T14:46:02Z + Transfer requested. + + + + domain1.ee + pending + REGDOMAIN1 + 2015-06-16T14:46:02Z + REGDOMAIN2 + 2015-06-16T15:46:02Z + 2016-06-16T14:46:02Z + + + + ABC-12345 + ccReg-7198000795 + ``` @@ -4760,13 +6329,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -4784,10 +6353,132 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-4269600320 - + + ABC-12345 + ccReg-8981002307 + + + +``` + +REQUEST: + +```xml + + + + + registrar2 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-0623446914 + + + +``` + +REQUEST: + +```xml + + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + ABC-12345 + ccReg-3648943159 + + + +``` + +REQUEST: + +```xml + + + + + registrar1 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-5814325246 + ``` @@ -4808,13 +6499,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -4832,10 +6523,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-3699819070 - + + ABC-12345 + ccReg-6044514213 + ``` @@ -4847,16 +6538,16 @@ REQUEST: - + domain2.ee - 357355fa4e0739928775457accc59549 + 024bb6c14f1f351ff88bd3bdb24ec907 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -4877,18 +6568,18 @@ RESPONSE: domain2.ee pending - 222 - 2015-04-02 09:30:43 UTC - 111 - 2015-04-02 10:30:43 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:03Z + REGDOMAIN1 + 2015-06-16T15:46:03Z + 2016-06-16T14:46:03Z + + ABC-12345 + ccReg-6223906445 + - - ABC-12345 - ccReg-5521355427 - ``` @@ -4906,13 +6597,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -4930,10 +6621,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-4791283018 - + + ABC-12345 + ccReg-8746149187 + ``` @@ -4952,13 +6643,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -4976,10 +6667,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-6191445057 - + + ABC-12345 + ccReg-7756736893 + ``` @@ -4991,16 +6682,16 @@ REQUEST: - + domain2.ee - 357355fa4e0739928775457accc59549 + 024bb6c14f1f351ff88bd3bdb24ec907 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -5021,18 +6712,18 @@ RESPONSE: domain2.ee pending - 222 - 2015-04-02 09:30:43 UTC - 111 - 2015-04-02 10:30:43 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:03Z + REGDOMAIN1 + 2015-06-16T15:46:03Z + 2016-06-16T14:46:03Z + + ABC-12345 + ccReg-8545188045 + - - ABC-12345 - ccReg-2972123016 - ``` @@ -5050,13 +6741,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5074,10 +6765,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-6161338274 - + + ABC-12345 + ccReg-2241555669 + ``` @@ -5098,13 +6789,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5122,10 +6813,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-9870720384 - + + ABC-12345 + ccReg-8460295410 + ``` @@ -5137,10 +6828,10 @@ REQUEST: - + domain3.ee - fd41d26f8400b0cacfec33b018795c90 + 836af4fd51fcd5712120b17fe2fa2bb3 @@ -5162,18 +6853,18 @@ RESPONSE: domain3.ee serverApproved - 222 - 2015-04-02 09:30:43 UTC - 111 - 2015-04-02 09:30:43 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:03Z + REGDOMAIN1 + 2015-06-16T14:46:03Z + 2016-06-16T14:46:03Z + + ABC-12345 + ccReg-8076619398 + - - ABC-12345 - ccReg-0598613440 - ``` @@ -5191,13 +6882,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5215,10 +6906,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-0655089715 - + + ABC-12345 + ccReg-8851768239 + ``` @@ -5239,13 +6930,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5263,10 +6954,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-1498176471 - + + ABC-12345 + ccReg-9101345679 + ``` @@ -5278,10 +6969,10 @@ REQUEST: - + domain4.ee - 469c52225809cea1b5ab5f269b8f0345 + c4191d5991d76be69de4c89c7d6332c6 @@ -5303,18 +6994,18 @@ RESPONSE: domain4.ee serverApproved - 222 - 2015-04-02 09:30:43 UTC - 111 - 2015-04-02 09:30:43 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:04Z + REGDOMAIN1 + 2015-06-16T14:46:04Z + 2016-06-16T14:46:04Z + + ABC-12345 + ccReg-1271904293 + - - ABC-12345 - ccReg-5410410789 - ``` @@ -5332,13 +7023,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5356,10 +7047,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-6342683850 - + + ABC-12345 + ccReg-3137087761 + ``` @@ -5380,13 +7071,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5404,10 +7095,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-8777764252 - + + ABC-12345 + ccReg-7273165678 + ``` @@ -5419,10 +7110,10 @@ REQUEST: - + domain5.ee - 57127a78f868cc7105550c99f02f5125 + cb2a7321b5cbbbb3dde7a6810c9ed13f @@ -5444,18 +7135,18 @@ RESPONSE: domain5.ee serverApproved - 222 - 2015-04-02 09:30:44 UTC - 111 - 2015-04-02 09:30:44 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:04Z + REGDOMAIN1 + 2015-06-16T14:46:04Z + 2016-06-16T14:46:04Z + + ABC-12345 + ccReg-6138246266 + - - ABC-12345 - ccReg-3717942382 - ``` @@ -5473,13 +7164,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5497,10 +7188,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-7884334910 - + + ABC-12345 + ccReg-0594521940 + ``` @@ -5521,13 +7212,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5545,10 +7236,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-5998762450 - + + ABC-12345 + ccReg-3903547157 + ``` @@ -5560,10 +7251,10 @@ REQUEST: - + domain8.ee - 239f7120741566851be43ff27d8098b3 + 8ad5a1e3f0f5cfd3ac927eacd377d748 @@ -5585,18 +7276,18 @@ RESPONSE: domain8.ee serverApproved - 222 - 2015-04-02 09:30:44 UTC - 111 - 2015-04-02 09:30:44 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:05Z + REGDOMAIN1 + 2015-06-16T14:46:05Z + 2016-06-16T14:46:05Z + + ABC-12345 + ccReg-6422274553 + - - ABC-12345 - ccReg-9877768476 - ``` @@ -5614,13 +7305,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5638,10 +7329,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-4014504567 - + + ABC-12345 + ccReg-8513849853 + ``` @@ -5662,13 +7353,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5686,10 +7377,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-1519903345 - + + ABC-12345 + ccReg-0495664550 + ``` @@ -5701,10 +7392,10 @@ REQUEST: - + domain9.ee - 8c05b1875ad30ff1ec29cb184ca02595 + ae0e9f8ad42aa43f5421e7825576d49b @@ -5726,18 +7417,18 @@ RESPONSE: domain9.ee serverApproved - 222 - 2015-04-02 09:30:45 UTC - 111 - 2015-04-02 09:30:45 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:05Z + REGDOMAIN1 + 2015-06-16T14:46:05Z + 2016-06-16T14:46:05Z + + ABC-12345 + ccReg-8327056615 + - - ABC-12345 - ccReg-6035084608 - ``` @@ -5755,13 +7446,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5779,10 +7470,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-4665648420 - + + ABC-12345 + ccReg-4617980059 + ``` @@ -5803,13 +7494,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5827,10 +7518,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-0827534026 - + + ABC-12345 + ccReg-2829504560 + ``` @@ -5842,10 +7533,10 @@ REQUEST: - + domain11.ee - 26f350f364ef045477ce75fac2489dee + 15fd8747240b3b76d7d629fdfb9933c2 @@ -5867,18 +7558,18 @@ RESPONSE: domain11.ee serverApproved - 222 - 2015-04-02 09:30:45 UTC - 111 - 2015-04-02 09:30:45 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:06Z + REGDOMAIN1 + 2015-06-16T14:46:06Z + 2016-06-16T14:46:06Z + + ABC-12345 + ccReg-4652082139 + - - ABC-12345 - ccReg-2312727567 - ``` @@ -5896,13 +7587,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5920,15 +7611,15 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-2631195876 - + + ABC-12345 + ccReg-7682673588 + ``` -### EPP Domain with valid domain transfers domain and references exsisting owner contact to domain contacts +### EPP Domain with valid domain transfers domain and references exsisting registrant to domain contacts REQUEST: @@ -5944,13 +7635,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -5968,10 +7659,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-4396670784 - + + ABC-12345 + ccReg-2956836704 + ``` @@ -5983,10 +7674,10 @@ REQUEST: - + domain14.ee - b2b106747e308678a83d2e6eba9149cf + 99528c913bd395947f46b320c600851e @@ -6008,18 +7699,18 @@ RESPONSE: domain14.ee serverApproved - 222 - 2015-04-02 09:30:46 UTC - 111 - 2015-04-02 09:30:46 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:07Z + REGDOMAIN1 + 2015-06-16T14:46:07Z + 2016-06-16T14:46:06Z + + ABC-12345 + ccReg-2561775032 + - - ABC-12345 - ccReg-2042346800 - ``` @@ -6037,13 +7728,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -6061,10 +7752,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-8668462665 - + + ABC-12345 + ccReg-8704236801 + ``` @@ -6085,13 +7776,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -6109,10 +7800,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-1154374419 - + + ABC-12345 + ccReg-5989893103 + ``` @@ -6124,10 +7815,10 @@ REQUEST: - + domain15.ee - 3bcc3c532d935e259e3841a8313fdd15 + ced325e25352a6d3ae454729c5a5f133 @@ -6149,18 +7840,18 @@ RESPONSE: domain15.ee serverApproved - 222 - 2015-04-02 09:30:46 UTC - 111 - 2015-04-02 09:30:46 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:07Z + REGDOMAIN1 + 2015-06-16T14:46:07Z + 2016-06-16T14:46:07Z + + ABC-12345 + ccReg-3303397389 + - - ABC-12345 - ccReg-9821029703 - ``` @@ -6178,13 +7869,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -6202,10 +7893,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-4088686497 - + + ABC-12345 + ccReg-3498869771 + ``` @@ -6226,13 +7917,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -6250,10 +7941,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-6492717966 - + + ABC-12345 + ccReg-3004185742 + ``` @@ -6265,7 +7956,7 @@ REQUEST: - + domain16.ee 98oiewslkfkd @@ -6286,11 +7977,11 @@ RESPONSE: Authorization error + + ABC-12345 + ccReg-0738799544 + - - ABC-12345 - ccReg-8048438585 - ``` @@ -6308,13 +7999,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -6332,10 +8023,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-7296528631 - + + ABC-12345 + ccReg-9100482752 + ``` @@ -6349,16 +8040,16 @@ REQUEST: - + domain17.ee - 35c48f9b0d4c7d70fb1571a9fff630e8 + d5649c7d29cea682a55405451a7b3e9f - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -6379,18 +8070,18 @@ RESPONSE: domain17.ee clientApproved - 222 - 2015-04-02 09:30:47 UTC - 111 - 2015-04-02 09:30:47 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:08Z + REGDOMAIN1 + 2015-06-16T14:46:08Z + 2016-06-16T14:46:08Z + + ABC-12345 + ccReg-5630988802 + - - ABC-12345 - ccReg-8455837335 - ``` @@ -6410,13 +8101,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -6434,10 +8125,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-9895076557 - + + ABC-12345 + ccReg-1163667761 + ``` @@ -6449,16 +8140,16 @@ REQUEST: - + domain18.ee - 2f1d76dd1d400386194f78986c9a1387 + fe3d5081d9fa1723fec7ca2d3d197651 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -6475,11 +8166,11 @@ RESPONSE: Transfer can be rejected only by current registrar + + ABC-12345 + ccReg-6697616444 + - - ABC-12345 - ccReg-3480621440 - ``` @@ -6497,13 +8188,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -6521,10 +8212,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-1371548665 - + + ABC-12345 + ccReg-2557365838 + ``` @@ -6536,16 +8227,16 @@ REQUEST: - + domain18.ee - 2f1d76dd1d400386194f78986c9a1387 + fe3d5081d9fa1723fec7ca2d3d197651 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -6566,18 +8257,18 @@ RESPONSE: domain18.ee clientRejected - 222 - 2015-04-02 09:30:47 UTC - 111 - 2015-04-02 09:30:47 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:08Z + REGDOMAIN1 + 2015-06-16T14:46:08Z + 2016-06-16T14:46:08Z + + ABC-12345 + ccReg-9330091112 + - - ABC-12345 - ccReg-4727507539 - ``` @@ -6597,13 +8288,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -6621,10 +8312,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-7738853308 - + + ABC-12345 + ccReg-4172750491 + ``` @@ -6636,16 +8327,16 @@ REQUEST: - + domain19.ee - 44b3c808fcf89b69de50a5c6daabe206 + 0220447ad7d651fac0dace38a5bcb106 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -6662,11 +8353,11 @@ RESPONSE: Transfer can be approved only by current domain registrar + + ABC-12345 + ccReg-8617259540 + - - ABC-12345 - ccReg-3577435242 - ``` @@ -6684,13 +8375,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -6708,10 +8399,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-8997502823 - + + ABC-12345 + ccReg-7168292306 + ``` @@ -6725,7 +8416,7 @@ REQUEST: - + domain20.ee test @@ -6733,8 +8424,8 @@ REQUEST: - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -6751,15 +8442,15 @@ RESPONSE: Authorization error + + ABC-12345 + ccReg-5705380145 + - - ABC-12345 - ccReg-6810281251 - ``` -### EPP Domain with valid domain ignores transfer when owner registrar requests transfer +### EPP Domain with valid domain ignores transfer wha registrant registrar requests transfer REQUEST: @@ -6768,16 +8459,16 @@ REQUEST: - + domain21.ee - 28ceb4792391b6fef2b39ebaa51efd20 + e736e5af0a5e47d84be0a8211eb1e97a - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -6794,11 +8485,11 @@ RESPONSE: Domain already belongs to the querying registrar + + ABC-12345 + ccReg-0353546410 + - - ABC-12345 - ccReg-9527258829 - ``` @@ -6811,8 +8502,8 @@ REQUEST: - - example38015316701110573.ee + + example98439991603054778.ee 98oiewslkfkd @@ -6832,11 +8523,11 @@ RESPONSE: Attribute is invalid: op + + ABC-12345 + ccReg-6980066531 + - - ABC-12345 - ccReg-9405995760 - ``` @@ -6856,13 +8547,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -6880,10 +8571,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-6108949505 - + + ABC-12345 + ccReg-6843014672 + ``` @@ -6895,16 +8586,16 @@ REQUEST: - + domain22.ee - e26e60c11bce975174dd8c0c6eb34d6f + 008c062889e1dc19127c0636278263f4 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -6925,18 +8616,18 @@ RESPONSE: domain22.ee serverApproved - 222 - 2015-04-02 09:30:48 UTC - 111 - 2015-04-02 09:30:48 UTC - 2016-04-02 00:00:00 UTC + REGDOMAIN2 + 2015-06-16T14:46:13Z + REGDOMAIN1 + 2015-06-16T14:46:13Z + 2016-06-16T14:46:13Z + + ABC-12345 + ccReg-8542599190 + - - ABC-12345 - ccReg-0849827514 - ``` @@ -6947,16 +8638,16 @@ REQUEST: - + domain22.ee - e26e60c11bce975174dd8c0c6eb34d6f + 008c062889e1dc19127c0636278263f4 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -6973,11 +8664,11 @@ RESPONSE: Authorization error + + ABC-12345 + ccReg-0772545533 + - - ABC-12345 - ccReg-2282068554 - ``` @@ -6995,13 +8686,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -7019,10 +8710,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-8548503025 - + + ABC-12345 + ccReg-0922916710 + ``` @@ -7036,16 +8727,16 @@ REQUEST: - + domain23.ee - 9dc563b201a0bd0719bbad1cfe144c1b + 8b267970556e6d4f52ac0e8cd5ec0533 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -7062,15 +8753,15 @@ RESPONSE: Pending transfer was not found + + ABC-12345 + ccReg-0757072773 + - - ABC-12345 - ccReg-5058318458 - ``` -### EPP Domain with valid domain updates a domain +### EPP Domain with valid domain should update right away without update pending status REQUEST: @@ -7079,17 +8770,17 @@ REQUEST: - + domain24.ee - citizen_1234 + FIXED:CITIZEN_1234 - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -7106,11 +8797,200 @@ RESPONSE: Command completed successfully + + ABC-12345 + ccReg-1524969701 + + + +``` + +### EPP Domain with valid domain updates a domain + +REQUEST: + +```xml + + + + + + domain25.ee + + FIXED:CITIZEN_1234 + + + + + + + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully; action pending + + + ABC-12345 + ccReg-7160661951 + + + +``` + +### EPP Domain with valid domain should not return action pending when changes are invalid + +REQUEST: + +```xml + + + + + + domain26.ee + + + + ns.morissette80.ee + + + ns.turnerwuckert79.ee + + + ns.shanahan78.ee + + + + + FIXED:CITIZEN_1234 + + + + + + + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Nameservers count must be between 2-11 [nameservers] + + + ABC-12345 + ccReg-5838624706 + + + +``` + +### EPP Domain with valid domain should not return action pending when domain itself is already invaid + +REQUEST: + +```xml + + + + + + domain27.ee + + FIXED:CITIZEN_1234 + + + + + + + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Nameservers count must be between 2-11 [nameservers] + + + ABC-12345 + ccReg-5253637768 + + + +``` + +### EPP Domain with valid domain should not allow any update when status pending update + +REQUEST: + +```xml + + + + + + domain28.ee + + FIXED:CITIZEN_1234 + + + + + + + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Object status prohibits operation + + + ABC-12345 + ccReg-6353980879 + - - ABC-12345 - ccReg-0340648474 - ``` @@ -7123,8 +9003,8 @@ REQUEST: - - domain25.ee + + domain29.ee @@ -7134,7 +9014,7 @@ REQUEST: ns2.example.com - mak21 + FIXED:MAK21 Payment overdue. @@ -7172,14 +9052,14 @@ RESPONSE: Contact was not found - mak21 + FIXED:MAK21 + + ABC-12345 + ccReg-9385991613 + - - ABC-12345 - ccReg-4989232734 - ``` @@ -7190,8 +9070,8 @@ REQUEST: - - domain25.ee + + domain29.ee @@ -7201,7 +9081,7 @@ REQUEST: ns2.example.com - mak21 + FIXED:MAK21 Payment overdue. @@ -7239,11 +9119,11 @@ RESPONSE: Command completed successfully + + ABC-12345 + ccReg-5743092443 + - - ABC-12345 - ccReg-2376189737 - ``` @@ -7254,8 +9134,8 @@ REQUEST: - - domain25.ee + + domain29.ee @@ -7265,7 +9145,7 @@ REQUEST: ns2.example.com - mak21 + FIXED:MAK21 Payment overdue. @@ -7303,37 +9183,19 @@ RESPONSE: Nameserver already exists on this domain [hostname] - ns1.example.com + ns2.example.com Nameserver already exists on this domain [hostname] - ns2.example.com + ns1.example.com Contact already exists on this domain [contact_code_cache] - mak21 - - - - Status already exists on this domain [value] - - clientHold - - - - Status already exists on this domain [value] - - clientUpdateProhibited - - - - Public key already exists [public_key] - - 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f + FIXED:MAK21 @@ -7342,11 +9204,162 @@ RESPONSE: 841936717ae427ace63c28d04918569a841936717ae427ace63c28d0 + + Public key already exists [public_key] + + 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f + + + + ABC-12345 + ccReg-8404006394 + + + +``` + +### EPP Domain with valid domain updates domain with registrant change what triggers action pending + +REQUEST: + +```xml + + + + + + domain30.ee + + + + ns1.example.com + + + ns2.example.com + + + FIXED:PENDINGMAK21 + Payment overdue. + + + + FIXED:CITIZEN_1234 + + + + + + + + 0 + 3 + 5 + 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f + + + 256 + 3 + 254 + 841936717ae427ace63c28d04918569a841936717ae427ace63c28d0 + + + + + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Contact was not found + + FIXED:PENDINGMAK21 + + + + ABC-12345 + ccReg-4710508132 + + + +``` + +REQUEST: + +```xml + + + + + + domain30.ee + + + + ns1.example.com + + + ns2.example.com + + + FIXED:PENDINGMAK21 + Payment overdue. + + + + FIXED:CITIZEN_1234 + + + + + + + + 0 + 3 + 5 + 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f + + + 256 + 3 + 254 + 841936717ae427ace63c28d04918569a841936717ae427ace63c28d0 + + + + + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully; action pending + + + ABC-12345 + ccReg-0418760365 + - - ABC-12345 - ccReg-8012751067 - ``` @@ -7359,8 +9372,8 @@ REQUEST: - - domain26.ee + + domain31.ee Payment overdue. @@ -7381,11 +9394,11 @@ RESPONSE: Parameter value policy error. Client-side object status management not supported: status [status] + + ABC-12345 + ccReg-6393659962 + - - ABC-12345 - ccReg-1067863132 - ``` @@ -7398,8 +9411,8 @@ REQUEST: - - domain27.ee + + domain32.ee @@ -7409,7 +9422,7 @@ REQUEST: ns2.example.com - citizen_1234 + FIXED:CITIZEN_1234 Payment overdue. @@ -7447,11 +9460,11 @@ RESPONSE: Command completed successfully + + ABC-12345 + ccReg-5765767170 + - - ABC-12345 - ccReg-3906653198 - ``` @@ -7462,15 +9475,15 @@ REQUEST: - - domain27.ee + + domain32.ee ns1.example.com - citizen_1234 + FIXED:CITIZEN_1234 @@ -7479,6 +9492,9 @@ REQUEST: + 256 + 3 + 254 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f @@ -7498,11 +9514,11 @@ RESPONSE: Command completed successfully + + ABC-12345 + ccReg-7916696039 + - - ABC-12345 - ccReg-8564278542 - ``` @@ -7513,15 +9529,15 @@ REQUEST: - - domain27.ee + + domain32.ee ns1.example.com - citizen_1234 + FIXED:CITIZEN_1234 @@ -7530,6 +9546,9 @@ REQUEST: + 256 + 3 + 254 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f @@ -7555,13 +9574,7 @@ RESPONSE: Contact was not found - citizen_1234 - - - - Status was not found - - clientHold + FIXED:CITIZEN_1234 @@ -7570,11 +9583,17 @@ RESPONSE: 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f + + Status was not found + + clientHold + + + + ABC-12345 + ccReg-6312761543 + - - ABC-12345 - ccReg-5976251561 - ``` @@ -7587,8 +9606,8 @@ REQUEST: - - domain28.ee + + domain33.ee @@ -7611,11 +9630,11 @@ RESPONSE: serverHold + + ABC-12345 + ccReg-4059845175 + - - ABC-12345 - ccReg-8895696227 - ``` @@ -7628,15 +9647,15 @@ REQUEST: - - domain29.ee + + domain34.ee - ns.graham84.ee + ns.paucekcremin99.ee - sh6892878164 + FIXED:SH2421352279 @@ -7654,11 +9673,11 @@ RESPONSE: Command completed successfully + + ABC-12345 + ccReg-6215676067 + - - ABC-12345 - ccReg-8651137150 - ``` @@ -7669,15 +9688,15 @@ REQUEST: - - domain29.ee + + domain34.ee - ns.graham84.ee + ns.paucekcremin99.ee - sh6892878164 + FIXED:SH2421352279 @@ -7695,20 +9714,20 @@ RESPONSE: Nameserver already exists on this domain [hostname] - ns.graham84.ee + ns.paucekcremin99.ee Contact already exists on this domain [contact_code_cache] - sh6892878164 + FIXED:SH2421352279 + + ABC-12345 + ccReg-9116884956 + - - ABC-12345 - ccReg-4328077081 - ``` @@ -7721,10 +9740,10 @@ REQUEST: - - domain30.ee + + domain35.ee - citizen_1234 + FIXED:CITIZEN_1234 @@ -7742,11 +9761,11 @@ RESPONSE: Required parameter missing: extension > extdata > legalDocument [legal_document] + + ABC-12345 + ccReg-7918261747 + - - ABC-12345 - ccReg-6566236021 - ``` @@ -7759,8 +9778,8 @@ REQUEST: - - domain31.ee + + domain36.ee @@ -7783,11 +9802,11 @@ RESPONSE: invalidStatus + + ABC-12345 + ccReg-4823438244 + - - ABC-12345 - ccReg-8027057885 - ``` @@ -7800,9 +9819,9 @@ REQUEST: - - domain32.ee - 2016-04-02 + + domain37.ee + 2015-06-26 1 @@ -7822,14 +9841,14 @@ RESPONSE: - domain32.ee - 2017-04-02 00:00:00 UTC + domain37.ee + 2016-06-26T00:00:00Z - - ABC-12345 - ccReg-1155889097 - + + ABC-12345 + ccReg-6519525965 + ``` @@ -7843,8 +9862,8 @@ REQUEST: - - domain33.ee + + domain38.ee 2200-08-07 1 @@ -7866,11 +9885,14 @@ RESPONSE: 2200-08-07 + + Object is not eligible for renewal + + + ABC-12345 + ccReg-9192582359 + - - ABC-12345 - ccReg-9921182086 - ``` @@ -7883,9 +9905,9 @@ REQUEST: - - domain34.ee - 2016-04-02 + + domain39.ee + 2015-06-26 4 @@ -7900,17 +9922,347 @@ RESPONSE: - + Period must add up to 1, 2 or 3 years [period] 4 + + ABC-12345 + ccReg-9034050627 + + + +``` + +### EPP Domain with valid domain does not renew a domain unless less than 90 days till expiration + +REQUEST: + +```xml + + + + + + domain40.ee + 2015-09-14 + 1 + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Object is not eligible for renewal + + + ABC-12345 + ccReg-0329970059 + + + +``` + +REQUEST: + +```xml + + + + + + domain40.ee + 2015-09-13 + 1 + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + domain40.ee + 2016-09-13T00:00:00Z + + + + ABC-12345 + ccReg-6696413266 + + + +``` + +### EPP Domain with valid domain does not renew a domain unless less than 90 days till expiration + +REQUEST: + +```xml + + + + + + domain41.ee + 2020-06-16 + 1 + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + domain41.ee + 2021-06-16T00:00:00Z + + + + ABC-12345 + ccReg-1505326476 + + + +``` + +### EPP Domain with valid domain does not renew a domain if it is a delete candidate + +REQUEST: + +```xml + + + + + + domain42.ee + 2015-06-26 + 1 + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Object is not eligible for renewal + + + ABC-12345 + ccReg-4127044027 + + + +``` + +### EPP Domain with valid domain should renew a expired domain + +REQUEST: + +```xml + + + + + + domain43.ee + 2015-04-27 + 1 + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + + domain43.ee + 2016-04-27T14:46:35Z + + + + ABC-12345 + ccReg-9291103741 + + + +``` + +### EPP Domain with valid domain does not renew foreign domain + +REQUEST: + +```xml + + + + + registrar2 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-3538502070 + + + +``` + +REQUEST: + +```xml + + + + + + domain44.ee + 2016-06-16 + 1 + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Authorization error + + + ABC-12345 + ccReg-5006977619 + + + +``` + +REQUEST: + +```xml + + + + + registrar1 + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-3666394551 + - - ABC-12345 - ccReg-2768552598 - ``` @@ -7923,14 +10275,13 @@ REQUEST: - - domain35.ee + + domain45.ee 2fooBAR - ABC-12345 ``` @@ -7946,21 +10297,23 @@ RESPONSE: - domain35.ee - Payment overdue. - sh7284535177 - sh3880278978 + domain45.ee + EIS-53 + + FIXED:REGISTRANT5034182443 + FIXED:SH87553047104 + FIXED:SH60451564103 - ns.baumbach105.ee + ns.sipeskeeling135.ee 192.168.1.1 - ns.rosenbaum106.ee + ns.denesikjaskolski136.ee 192.168.1.1 - ns.crooks107.ee + ns.johns137.ee 192.168.1.1 @@ -7970,48 +10323,46 @@ RESPONSE: registrar1 - - 2015-04-02 09:30:51 UTC - 2016-04-02 00:00:00 UTC - 2015-04-02 09:30:51 UTC + 2015-06-16T14:46:36Z + 2015-06-16T14:46:36Z + 2016-06-16T14:46:36Z - 33fbbf9a8afc8eaab78beca8da2a9095 + 7fc87d2ceabb4a21969a9a067aa03411 - - - - - 123 - 3 - 1 - abc - - 257 - 3 + + + + 123 3 - AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - - - 123 - 3 - 1 - abc - - 0 - 3 - 5 - 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f - - - - - - ABC-12345 - ccReg-1974888440 - + 1 + 0D85A305D22FCB355BBE29AE9809363D697B64782B9CC73AE349350F8C2AE4BB + + 257 + 3 + 3 + AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 + + + + 123 + 3 + 1 + 0D85A305D22FCB355BBE29AE9809363D697B64782B9CC73AE349350F8C2AE4BB + + 0 + 3 + 5 + 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f + + + + + + ccReg-1180902357 + + ``` @@ -8022,14 +10373,13 @@ REQUEST: - - domain35.ee + + domain45.ee 2fooBAR - ABC-12345 ``` @@ -8045,21 +10395,23 @@ RESPONSE: - domain35.ee - Payment overdue. - sh7284535177 - sh3880278978 + domain45.ee + EIS-53 + + FIXED:REGISTRANT5034182443 + FIXED:SH87553047104 + FIXED:SH60451564103 - ns.baumbach105.ee + ns.sipeskeeling135.ee 192.168.1.1 - ns.rosenbaum106.ee + ns.denesikjaskolski136.ee 192.168.1.1 - ns.crooks107.ee + ns.johns137.ee 192.168.1.1 @@ -8069,48 +10421,46 @@ RESPONSE: registrar1 - - 2015-04-02 09:30:51 UTC - 2016-04-02 00:00:00 UTC - 2015-04-02 09:30:51 UTC + 2015-06-16T14:46:36Z + 2015-06-16T14:46:36Z + 2016-06-16T14:46:36Z - 33fbbf9a8afc8eaab78beca8da2a9095 + 7fc87d2ceabb4a21969a9a067aa03411 - - - - - 123 - 3 - 1 - abc - - 257 - 3 + + + + 123 3 - AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 - - - - 123 - 3 - 1 - abc - - 0 - 3 - 5 - 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f - - - - - - ABC-12345 - ccReg-6008864794 - + 1 + 0D85A305D22FCB355BBE29AE9809363D697B64782B9CC73AE349350F8C2AE4BB + + 257 + 3 + 3 + AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8 + + + + 123 + 3 + 1 + 0D85A305D22FCB355BBE29AE9809363D697B64782B9CC73AE349350F8C2AE4BB + + 0 + 3 + 5 + 700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f + + + + + + ccReg-9928668202 + + ``` @@ -8123,14 +10473,13 @@ REQUEST: - - domain36.ee + + domain46.ee 2fooBAR - ABC-12345 ``` @@ -8144,11 +10493,10 @@ RESPONSE: Attribute is invalid: hosts + + ccReg-5780540561 + - - ABC-12345 - ccReg-3939237932 - ``` @@ -8159,14 +10507,13 @@ REQUEST: - - domain36.ee + + domain46.ee 2fooBAR - ABC-12345 ``` @@ -8182,37 +10529,37 @@ RESPONSE: - domain36.ee + domain46.ee + EIS-54 - sh4498443879 - sh4355215380 + FIXED:REGISTRANT7386073344 + FIXED:SH70911474106 + FIXED:SH83717810105 - ns1.domain36.ee + ns1.domain46.ee 192.168.1.1 1080:0:0:0:8:800:200C:417A - ns2.domain36.ee + ns2.domain46.ee 192.168.1.1 1080:0:0:0:8:800:200C:417A registrar1 - - 2015-04-02 09:30:51 UTC - 2016-04-02 00:00:00 UTC - 2015-04-02 09:30:51 UTC + 2015-06-16T14:46:36Z + 2015-06-16T14:46:36Z + 2016-06-16T14:46:36Z - 4b37e8ab04620cef28710d125652e91e + 04319f6bf003ebd8357d77a866f21a1d + + ccReg-9817465177 + - - ABC-12345 - ccReg-6384280415 - ``` @@ -8223,14 +10570,13 @@ REQUEST: - - domain36.ee + + domain46.ee 2fooBAR - ABC-12345 ``` @@ -8246,10 +10592,12 @@ RESPONSE: - domain36.ee + domain46.ee + EIS-54 - sh4498443879 - sh4355215380 + FIXED:REGISTRANT7386073344 + FIXED:SH70911474106 + FIXED:SH83717810105 ns3.test.ee @@ -8258,20 +10606,18 @@ RESPONSE: registrar1 - - 2015-04-02 09:30:51 UTC - 2016-04-02 00:00:00 UTC - 2015-04-02 09:30:51 UTC + 2015-06-16T14:46:36Z + 2015-06-16T14:46:36Z + 2016-06-16T14:46:36Z - 4b37e8ab04620cef28710d125652e91e + 04319f6bf003ebd8357d77a866f21a1d + + ccReg-1956126808 + - - ABC-12345 - ccReg-8224764132 - ``` @@ -8282,14 +10628,13 @@ REQUEST: - - domain36.ee + + domain46.ee 2fooBAR - ABC-12345 ``` @@ -8305,25 +10650,25 @@ RESPONSE: - domain36.ee + domain46.ee + EIS-54 - sh4498443879 - sh4355215380 + FIXED:REGISTRANT7386073344 + FIXED:SH70911474106 + FIXED:SH83717810105 registrar1 - - 2015-04-02 09:30:51 UTC - 2016-04-02 00:00:00 UTC - 2015-04-02 09:30:51 UTC + 2015-06-16T14:46:36Z + 2015-06-16T14:46:36Z + 2016-06-16T14:46:36Z - 4b37e8ab04620cef28710d125652e91e + 04319f6bf003ebd8357d77a866f21a1d + + ccReg-4662877023 + - - ABC-12345 - ccReg-7332661363 - ``` @@ -8334,14 +10679,13 @@ REQUEST: - - domain36.ee + + domain46.ee 2fooBAR - ABC-12345 ``` @@ -8357,18 +10701,20 @@ RESPONSE: - domain36.ee + domain46.ee + EIS-54 - sh4498443879 - sh4355215380 + FIXED:REGISTRANT7386073344 + FIXED:SH70911474106 + FIXED:SH83717810105 - ns1.domain36.ee + ns1.domain46.ee 192.168.1.1 1080:0:0:0:8:800:200C:417A - ns2.domain36.ee + ns2.domain46.ee 192.168.1.1 1080:0:0:0:8:800:200C:417A @@ -8379,20 +10725,18 @@ RESPONSE: registrar1 - - 2015-04-02 09:30:51 UTC - 2016-04-02 00:00:00 UTC - 2015-04-02 09:30:51 UTC + 2015-06-16T14:46:36Z + 2015-06-16T14:46:36Z + 2016-06-16T14:46:36Z - 4b37e8ab04620cef28710d125652e91e + 04319f6bf003ebd8357d77a866f21a1d + + ccReg-2430670023 + - - ABC-12345 - ccReg-3772303930 - ``` @@ -8405,14 +10749,13 @@ REQUEST: - + test.ee 2fooBAR - ABC-12345 ``` @@ -8429,11 +10772,10 @@ RESPONSE: test.ee + + ccReg-5247973919 + - - ABC-12345 - ccReg-6273798373 - ``` @@ -8446,14 +10788,13 @@ REQUEST: - - domain37.ee + + domain47.ee 2fooBAR - ABC-12345 ``` @@ -8469,39 +10810,39 @@ RESPONSE: - domain37.ee + domain47.ee + EIS-55 - sh9104935681 - sh8882670882 + FIXED:REGISTRANT3737412845 + FIXED:SH49038744108 + FIXED:SH06725299107 - ns.dickensbeahan111.ee + ns.sanford141.ee 192.168.1.1 - ns.hahn112.ee + ns.sauer142.ee 192.168.1.1 - ns.price113.ee + ns.veum143.ee 192.168.1.1 registrar1 - - 2015-04-02 09:30:51 UTC - 2016-04-02 00:00:00 UTC - 2015-04-02 09:30:51 UTC + 2015-06-16T14:46:37Z + 2015-06-16T14:46:37Z + 2016-06-16T14:46:37Z - 6f92a3b0961e0b502da8b2ba0069f119 + 81c5f0a214cb0756ad4a5c553e80df90 + + ccReg-6047154535 + - - ABC-12345 - ccReg-1189117340 - ``` @@ -8521,13 +10862,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -8545,10 +10886,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-5222570408 - + + ABC-12345 + ccReg-1083606006 + ``` @@ -8560,14 +10901,13 @@ REQUEST: - - domain38.ee + + domain48.ee 2fooBAR - ABC-12345 ``` @@ -8581,11 +10921,10 @@ RESPONSE: Authorization error + + ccReg-9393465490 + - - ABC-12345 - ccReg-3637769101 - ``` @@ -8603,13 +10942,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -8627,10 +10966,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-8212846190 - + + ABC-12345 + ccReg-0344532333 + ``` @@ -8651,13 +10990,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -8675,10 +11014,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-9203907921 - + + ABC-12345 + ccReg-9663838605 + ``` @@ -8690,11 +11029,10 @@ REQUEST: - - domain39.ee + + domain49.ee - ABC-12345 ``` @@ -8710,36 +11048,36 @@ RESPONSE: - domain39.ee + domain49.ee + EIS-57 - sh9393185485 - sh9937875586 + FIXED:REGISTRANT1566943147 + FIXED:SH39124150112 + FIXED:SH43742622111 - ns.kerlukeschuster117.ee + ns.kreiger147.ee 192.168.1.1 - ns.ferrywhite118.ee + ns.hudson148.ee 192.168.1.1 - ns.adams119.ee + ns.dare149.ee 192.168.1.1 registrar1 - - 2015-04-02 09:30:52 UTC - 2016-04-02 00:00:00 UTC - 2015-04-02 09:30:52 UTC + 2015-06-16T14:46:38Z + 2015-06-16T14:46:38Z + 2016-06-16T14:46:38Z + + ccReg-0003863495 + - - ABC-12345 - ccReg-0274089113 - ``` @@ -8757,13 +11095,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -8781,10 +11119,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-9142721117 - + + ABC-12345 + ccReg-9016819552 + ``` @@ -8805,13 +11143,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -8829,10 +11167,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-2646431282 - + + ABC-12345 + ccReg-4480505409 + ``` @@ -8844,14 +11182,13 @@ REQUEST: - - domain40.ee + + domain50.ee - 82d3c691b479d51300fbc8247864015d + f44d898ad1b9caa41023a0894a3d0801 - ABC-12345 ``` @@ -8867,39 +11204,39 @@ RESPONSE: - domain40.ee + domain50.ee + EIS-58 - sh8178403887 - sh9058803888 + FIXED:REGISTRANT5610043948 + FIXED:SH85839976114 + FIXED:SH72694104113 - ns.lang120.ee + ns.mann150.ee 192.168.1.1 - ns.krajcik121.ee + ns.gutkowskibernier151.ee 192.168.1.1 - ns.pfannerstill122.ee + ns.schinner152.ee 192.168.1.1 registrar1 - - 2015-04-02 09:30:52 UTC - 2016-04-02 00:00:00 UTC - 2015-04-02 09:30:52 UTC + 2015-06-16T14:46:38Z + 2015-06-16T14:46:38Z + 2016-06-16T14:46:38Z - 82d3c691b479d51300fbc8247864015d + f44d898ad1b9caa41023a0894a3d0801 + + ccReg-7074882802 + - - ABC-12345 - ccReg-1822021145 - ``` @@ -8917,13 +11254,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -8941,10 +11278,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-6032311880 - + + ABC-12345 + ccReg-2139213556 + ``` @@ -8958,13 +11295,13 @@ REQUEST: - - domain41.ee + + domain51.ee - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -8978,14 +11315,13 @@ RESPONSE: - - Command completed successfully + + Internal error. + + ccReg-0801639712 + - - ABC-12345 - ccReg-0253339129 - ``` @@ -8998,13 +11334,13 @@ REQUEST: - - domain42.ee + + domain52.ee - - JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== + + dGVzdCBmYWlsCg== ABC-12345 @@ -9021,11 +11357,51 @@ RESPONSE: Domain status prohibits operation + + ABC-12345 + ccReg-0908156344 + + + +``` + +### EPP Domain with valid domain does not delete domain with pending delete + +REQUEST: + +```xml + + + + + + domain53.ee + + + + + dGVzdCBmYWlsCg== + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Object status prohibits operation + + + ABC-12345 + ccReg-5302487355 + - - ABC-12345 - ccReg-9280243175 - ``` @@ -9038,7 +11414,7 @@ REQUEST: - + example.ee @@ -9056,11 +11432,11 @@ RESPONSE: Required parameter missing: extension > extdata > legalDocument [legal_document] + + ABC-12345 + ccReg-4445302239 + - - ABC-12345 - ccReg-5632446934 - ``` @@ -9073,7 +11449,7 @@ REQUEST: - + one.ee @@ -9098,10 +11474,10 @@ RESPONSE: - - ABC-12345 - ccReg-8120420843 - + + ABC-12345 + ccReg-6989281837 + ``` @@ -9113,8 +11489,8 @@ REQUEST: - - domain43.ee + + domain54.ee ABC-12345 @@ -9134,15 +11510,15 @@ RESPONSE: - domain43.ee + domain54.ee in use - - ABC-12345 - ccReg-5402119196 - + + ABC-12345 + ccReg-7241677214 + ``` @@ -9156,7 +11532,7 @@ REQUEST: - + one.ee two.ee three.ee @@ -9189,10 +11565,10 @@ RESPONSE: - - ABC-12345 - ccReg-2847422830 - + + ABC-12345 + ccReg-2988756260 + ``` @@ -9206,7 +11582,7 @@ REQUEST: - + one.ee notcorrectdomain @@ -9236,10 +11612,10 @@ RESPONSE: - - ABC-12345 - ccReg-2990576653 - + + ABC-12345 + ccReg-3861410540 + ``` @@ -9260,13 +11636,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -9284,10 +11660,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-3536780546 - + + ABC-12345 + ccReg-9350463779 + ``` @@ -9298,10 +11674,10 @@ REQUEST: ```xml - + - domain44.ee + domain55.ee 256 3 @@ -9309,13 +11685,13 @@ REQUEST: cmlraXN0aGViZXN0 - ec4585b042057eed9d3ce096f64c2b96 + 606917876743fb9d65eb59fbf175c5bd P1M13D - 1427967053 + 1434466003 ``` @@ -9326,14 +11702,17 @@ RESPONSE: - - Command completed successfully + + Unimplemented object service + + domain55.ee + + + 1434466003 + ccReg-7770421771 + - - 1427967053 - ccReg-5382286699 - ``` @@ -9343,23 +11722,23 @@ REQUEST: ```xml - + - domain44.ee + domain55.ee 3 8 cmlraXN0aGViZXN0 - ec4585b042057eed9d3ce096f64c2b96 + 606917876743fb9d65eb59fbf175c5bd Invalid Expiry - 1427967053 + 1434466004 ``` @@ -9379,11 +11758,11 @@ RESPONSE: Invalid Expiry + + 1434466004 + ccReg-0081075985 + - - 1427967053 - ccReg-1200401461 - ``` @@ -9393,10 +11772,10 @@ REQUEST: ```xml - + - domain44.ee + domain55.ee 256 3 @@ -9404,13 +11783,13 @@ REQUEST: cmlraXN0aGViZXN0 - ec4585b042057eed9d3ce096f64c2b96 + 606917876743fb9d65eb59fbf175c5bd Invalid Expiry - 1427967053 + 1434466005 ``` @@ -9427,11 +11806,11 @@ RESPONSE: Invalid Expiry + + 1434466005 + ccReg-6676809630 + - - 1427967053 - ccReg-7444929407 - ``` @@ -9441,10 +11820,10 @@ REQUEST: ```xml - + - domain44.ee + domain55.ee 256 3 @@ -9452,13 +11831,13 @@ REQUEST: cmlraXN0aGViZXN0 - ec4585b042057eed9d3ce096f64c2b96 + 606917876743fb9d65eb59fbf175c5bd Invalid Absolute - 1427967053 + 1434466006 ``` @@ -9475,11 +11854,11 @@ RESPONSE: Invalid Absolute + + 1434466006 + ccReg-8006484799 + - - 1427967053 - ccReg-3602131394 - ``` @@ -9489,10 +11868,10 @@ REQUEST: ```xml - + - domain44.ee + domain55.ee 256 3 @@ -9500,14 +11879,14 @@ REQUEST: cmlraXN0aGViZXN0 - ec4585b042057eed9d3ce096f64c2b96 + 606917876743fb9d65eb59fbf175c5bd P1D 2014-12-23 - 1427967053 + 1434466007 ``` @@ -9521,11 +11900,11 @@ RESPONSE: Exactly one parameter required: keyrelay > expiry > relative OR keyrelay > expiry > absolute + + 1434466007 + ccReg-6196744977 + - - 1427967053 - ccReg-1904450442 - ``` @@ -9535,10 +11914,10 @@ REQUEST: ```xml - + - domain44.ee + domain55.ee 256 3 @@ -9546,16 +11925,16 @@ REQUEST: cmlraXN0aGViZXN0 - ec4585b042057eed9d3ce096f64c2b96 + 606917876743fb9d65eb59fbf175c5bd P1D - + JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - 1427967053 + 1434466008 ``` @@ -9566,14 +11945,17 @@ RESPONSE: - - Command completed successfully + + Unimplemented object service + + domain55.ee + + + 1434466008 + ccReg-8880766111 + - - 1427967053 - ccReg-4736415479 - ``` @@ -9583,10 +11965,10 @@ REQUEST: ```xml - + - domain44.ee + domain55.ee 256 3 @@ -9594,16 +11976,16 @@ REQUEST: cmlraXN0aGViZXN0 - ec4585b042057eed9d3ce096f64c2b96 + 606917876743fb9d65eb59fbf175c5bd P1D - + JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp== - 1427967054 + 1434466009 ``` @@ -9617,11 +11999,11 @@ RESPONSE: Attribute is invalid: type + + 1434466009 + ccReg-5896300316 + - - 1427967054 - ccReg-3574524353 - ``` @@ -9639,13 +12021,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -9663,10 +12045,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-1815017065 - + + ABC-12345 + ccReg-6744406564 + ``` @@ -9680,7 +12062,7 @@ REQUEST: - 1427967054 + 1434466011 ``` @@ -9694,10 +12076,10 @@ RESPONSE: Command completed successfully; no messages - - 1427967054 - ccReg-1728191385 - + + 1434466011 + ccReg-7079179755 + ``` @@ -9718,13 +12100,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -9742,10 +12124,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-6295264865 - + + ABC-12345 + ccReg-5443416105 + ``` @@ -9757,7 +12139,7 @@ REQUEST: - 1427967054 + 1434466011 ``` @@ -9771,10 +12153,10 @@ RESPONSE: Command completed successfully; no messages - - 1427967054 - ccReg-4959006260 - + + 1434466011 + ccReg-6783686315 + ``` @@ -9793,13 +12175,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -9817,10 +12199,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-7806182071 - + + ABC-12345 + ccReg-5004171706 + ``` @@ -9832,7 +12214,7 @@ REQUEST: - 1427967054 + 1434466011 ``` @@ -9847,13 +12229,13 @@ RESPONSE: Command completed successfully; ack to dequeue - 2015-04-02 09:30:54 UTC + 2015-06-16T14:46:51Z Balance low. - - 1427967054 - ccReg-1065036331 - + + 1434466011 + ccReg-4253494053 + ``` @@ -9872,13 +12254,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -9896,10 +12278,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-4737308347 - + + ABC-12345 + ccReg-4918171501 + ``` @@ -9911,7 +12293,7 @@ REQUEST: - 1427967054 + 1434466011 ``` @@ -9928,11 +12310,11 @@ RESPONSE: 1 + + 1434466011 + ccReg-5948146323 + - - 1427967054 - ccReg-5155427619 - ``` @@ -9950,13 +12332,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -9974,10 +12356,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-6756422935 - + + ABC-12345 + ccReg-0602722237 + ``` @@ -9989,7 +12371,7 @@ REQUEST: - 1427967054 + 1434466011 ``` @@ -10004,10 +12386,10 @@ RESPONSE: Command completed successfully - - 1427967054 - ccReg-7615901694 - + + 1434466011 + ccReg-6653908143 + ``` @@ -10019,7 +12401,7 @@ REQUEST: - 1427967054 + 1434466011 ``` @@ -10036,11 +12418,11 @@ RESPONSE: 1 + + 1434466011 + ccReg-4030904109 + - - 1427967054 - ccReg-0875606068 - ``` @@ -10053,7 +12435,7 @@ REQUEST: - 1427967054 + 1434466013 ``` @@ -10067,11 +12449,11 @@ RESPONSE: Attribute is invalid: op + + 1434466013 + ccReg-1337274768 + - - 1427967054 - ccReg-7102855017 - ``` @@ -10084,7 +12466,7 @@ REQUEST: - 1427967054 + 1434466014 ``` @@ -10099,13 +12481,13 @@ RESPONSE: Command completed successfully; ack to dequeue - 2015-04-02 09:30:54 UTC + 2015-06-16T14:46:54Z Smth else. - - 1427967054 - ccReg-2968797976 - + + 1434466014 + ccReg-0133258887 + ``` @@ -10117,7 +12499,7 @@ REQUEST: - 1427967054 + 1434466014 ``` @@ -10132,10 +12514,10 @@ RESPONSE: Command completed successfully - - 1427967054 - ccReg-8087270127 - + + 1434466014 + ccReg-7865881696 + ``` @@ -10147,7 +12529,7 @@ REQUEST: - 1427967054 + 1434466014 ``` @@ -10162,13 +12544,13 @@ RESPONSE: Command completed successfully; ack to dequeue - 2015-04-02 09:30:54 UTC + 2015-06-16T14:46:54Z Something. - - 1427967054 - ccReg-4746360314 - + + 1434466014 + ccReg-2990701289 + ``` @@ -10180,7 +12562,7 @@ REQUEST: - 1427967054 + 1434466014 ``` @@ -10195,10 +12577,10 @@ RESPONSE: Command completed successfully - - 1427967054 - ccReg-2705511628 - + + 1434466014 + ccReg-5225046181 + ``` @@ -10210,7 +12592,7 @@ REQUEST: - 1427967054 + 1434466014 ``` @@ -10225,13 +12607,13 @@ RESPONSE: Command completed successfully; ack to dequeue - 2015-04-02 09:30:54 UTC + 2015-06-16T14:46:54Z Balance low. - - 1427967054 - ccReg-3482010110 - + + 1434466014 + ccReg-6707896691 + ``` @@ -10243,7 +12625,7 @@ REQUEST: - 1427967054 + 1434466014 ``` @@ -10258,10 +12640,10 @@ RESPONSE: Command completed successfully - - 1427967054 - ccReg-1008015830 - + + 1434466014 + ccReg-8174947053 + ``` @@ -10273,7 +12655,7 @@ REQUEST: - 1427967054 + 1434466015 ``` @@ -10287,10 +12669,10 @@ RESPONSE: Command completed successfully; no messages - - 1427967054 - ccReg-1326047312 - + + 1434466015 + ccReg-0858483195 + ``` @@ -10304,17 +12686,17 @@ RESPONSE: EPP server (EIS) - 2015-04-02T09:30:55Z + 2015-06-16T14:46:55Z 1.0 en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -10354,13 +12736,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -10378,11 +12760,11 @@ RESPONSE: Authentication error; server closing connection + + ABC-12345 + ccReg-4597363742 + - - ABC-12345 - ccReg-7067103299 - ``` @@ -10402,13 +12784,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -10426,11 +12808,11 @@ RESPONSE: Authentication error; server closing connection + + ABC-12345 + ccReg-1428657257 + - - ABC-12345 - ccReg-9646591596 - ``` @@ -10442,9 +12824,11 @@ REQUEST: - - - + + + test.ee + + ABC-12345 @@ -10459,11 +12843,57 @@ RESPONSE: You need to login first. + + ABC-12345 + ccReg-3082305327 + + + +``` + +### EPP Session when connected should not have clTRID in response if client does not send it + +REQUEST: + +```xml + + + + + wrong-user + ghyt9e4fu + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + + +``` + +RESPONSE: + +```xml + + + + + Authentication error; server closing connection + + + ccReg-3565992149 + - - ABC-12345 - ccReg-5691369575 - ``` @@ -10483,13 +12913,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -10507,10 +12937,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-4033240040 - + + ABC-12345 + ccReg-0832089091 + ``` @@ -10531,13 +12961,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -10555,10 +12985,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-9199828071 - + + ABC-12345 + ccReg-1535717609 + ``` @@ -10577,13 +13007,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -10601,11 +13031,11 @@ RESPONSE: Already logged in. Use <logout> first. + + ABC-12345 + ccReg-5055971923 + - - ABC-12345 - ccReg-7373047914 - ``` @@ -10625,13 +13055,13 @@ REQUEST: en - urn:ietf:params:xml:ns:domain-1.0 - urn:ietf:params:xml:ns:contact-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd urn:ietf:params:xml:ns:host-1.0 urn:ietf:params:xml:ns:keyrelay-1.0 urn:ietf:params:xml:ns:secDNS-1.1 - urn:ee:eis:xml:epp:eis-1.0 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd @@ -10649,10 +13079,10 @@ RESPONSE: Command completed successfully - - ABC-12345 - ccReg-7594007931 - + + ABC-12345 + ccReg-0729496396 + ``` @@ -10678,11 +13108,158 @@ RESPONSE: Command completed successfully; ending session + + ABC-12345 + ccReg-7311985652 + + + +``` + +### EPP Session when connected with valid user changes password and logs in + +REQUEST: + +```xml + + + + + gitlab + ghyt9e4fu + abcdefg + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Command completed successfully + + + ABC-12345 + ccReg-7387239733 + + + +``` + +### EPP Session when connected with valid user fails if new password is not valid + +REQUEST: + +```xml + + + + + gitlab + ghyt9e4fu + + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Password is missing [password] + + + ABC-12345 + ccReg-9506918430 + + + +``` + +### EPP Session when connected with valid user fails if new password is not valid + +REQUEST: + +```xml + + + + + gitlab + ghyt9e4fu + + + 1.0 + en + + + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:keyrelay-1.0 + + urn:ietf:params:xml:ns:secDNS-1.1 + https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd + + + + ABC-12345 + + +``` + +RESPONSE: + +```xml + + + + + Password is missing [password] + + + ABC-12345 + ccReg-0674363838 + - - ABC-12345 - ccReg-0995963655 - ``` diff --git a/doc/epp/contact.md b/doc/epp/contact.md index a129123f5..3ed0b1aae 100644 --- a/doc/epp/contact.md +++ b/doc/epp/contact.md @@ -12,7 +12,7 @@ Contact Mapping protocol short version: Field name Min-max Field description ----------------------- ------- ----------------- 1 - 1 Attribute: xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" + 1 Attribute: xmlns:contact="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd" 0-1 Contact id, optional, generated automatically if missing 1 Postal information container 1 Full name of the contact @@ -26,7 +26,7 @@ Contact Mapping protocol short version: 1 Phone number in format \+ddd.d+ 1 E-mail 1 - 1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0" + 1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd" 1 Contact identificator Attribute: "type" "bic" # Business registry code @@ -45,7 +45,7 @@ Contact Mapping protocol short version: Field name Min-max Field description ----------------------- ------- ----------------- 1 - 1 Attribute: xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" + 1 Attribute: xmlns:contact="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd" 1 Contact id, required 1 Change container 1 Postal information container @@ -62,7 +62,7 @@ Contact Mapping protocol short version: 0-1 Required if registrar is not the owner of the contact. 1 Contact password. Attribute: roid="String" 0-1 - 0-1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0" + 0-1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd" 0-1 Contact identificator Attribute: "type" "bic" # Business registry code @@ -82,12 +82,12 @@ Contact Mapping protocol short version: Field name Min-max Field description ----------------------- ------- ----------------- 1 - 1 Attribute: xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" + 1 Attribute: xmlns:contact="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd" 1 Contact id 0-1 Required if registrar is not the owner of the contact. 1 Contact password. Attribute: roid="String" 0-1 - 0-1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0" + 0-1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd" 0-1 Base64 encoded document. Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" 0-1 Client transaction id @@ -100,7 +100,7 @@ Contact Mapping protocol short version: Field name Min-max Field description ----------------------- ------- ----------------- 1 - 1 Attribute: xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" + 1 Attribute: xmlns:contact="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd" 1-n Contact id 0-1 Client transaction id @@ -112,7 +112,7 @@ Contact Mapping protocol short version: Field name Min-max Field description ----------------------- ------- ----------------- 1 - 1 Attribute: xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" + 1 Attribute: xmlns:contact="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd" 1-n Contact id 0-1 Required if registrar is not the owner of the contact. 1 Contact password. Attribute: roid="String" diff --git a/doc/epp/domain.md b/doc/epp/domain.md index 0d3eede4a..64a6b68c0 100644 --- a/doc/epp/domain.md +++ b/doc/epp/domain.md @@ -13,7 +13,7 @@ Domain name mapping protocol short version: Field name Min-max Field description ------------------------- ------- ----------------- 1 - 1 Attribute: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" + 1 Attribute: xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd" 1 Domain name. Can contain unicode characters. 0-1 Registration period for domain. Must add up to 1 / 2 / 3 years. @@ -35,7 +35,7 @@ Domain name mapping protocol short version: 1 Allowed values: 3 1 Allowed values: 3, 5, 6, 7, 8, 252, 253, 254, 255 1 Public key - 1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0" + 1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd" 1 Base64 encoded document. Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" 0-1 Client transaction id @@ -47,7 +47,7 @@ Domain name mapping protocol short version: Field name Min-max Field description ------------------------ -------- ----------------- 1 - 1 Attribute: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" + 1 Attribute: xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd" 1 Domain name. Can contain unicode characters. 0-1 Attributes to change 0-1 Contact reference to the registrant @@ -82,7 +82,7 @@ Domain name mapping protocol short version: 0-1 1-n 1 Public key - 0-1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0" + 0-1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd" 0-1 Base64 encoded document. Required if registrant is changing. Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" 0-1 Client transaction id @@ -94,11 +94,11 @@ Domain name mapping protocol short version: Field name Min-max Field description ----------------------- ------- ----------------- 1 - 1 Attribute: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" + 1 Attribute: xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd" Optional attribute: verified="yes/no" 1 Domain name. Can contain unicode characters. 1 - 1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0" + 1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd" 1 Base64 encoded document. Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" 0-1 Client transaction id @@ -110,7 +110,7 @@ Domain name mapping protocol short version: Field name Min-max Field description ----------------------- ------- ----------------- 1 - 1 Attribute: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" + 1 Attribute: xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd" 1 Domain name. Can contain unicode characters. Attribute: hosts="all / del / sub / none" 0-1 Required if registrar is not the owner of the domain. @@ -124,13 +124,13 @@ Domain name mapping protocol short version: Field name Min-max Field description ----------------------- ------- ----------------- 1 - 1 Attribute: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" + 1 Attribute: xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd" 1 Domain name. Can contain unicode characters. 1 Current expiry date (ISO8601 format) 1 Registration period for domain. Must add up to 1 / 2 / 3 years. Attribute: unit="y/m/d" 0-1 - 0-1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0" + 0-1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd" 0-1 Base64 encoded document. Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" 0-1 Client transaction id @@ -142,12 +142,12 @@ Domain name mapping protocol short version: Field name Min-max Field description ----------------------- ------- ----------------- 1 - 1 Attribute: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" + 1 Attribute: xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd" 1 Domain name. Can contain unicode characters. 1 1 Domain password. Attribute: roid="String" 0-1 - 0-1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0" + 0-1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd" 0-1 Base64 encoded document. Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" 0-1 Client transaction id @@ -159,7 +159,7 @@ Domain name mapping protocol short version: Field name Min-max Field description ----------------------- ------- ----------------- 1 - 1 Attribute: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" + 1 Attribute: xmlns:domain="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd" 1 Domain name. Can contain unicode characters. 0-1 Client transaction id diff --git a/doc/epp/session.md b/doc/epp/session.md index 24babc682..a496e9ce0 100644 --- a/doc/epp/session.md +++ b/doc/epp/session.md @@ -17,6 +17,7 @@ Here are functions like login, logout, hello, poll 1 1 Username 1 Password + 0-1 Optional new password for EPP user 0-1 0-1 1.0 0-1 en diff --git a/doc/repp-doc.md b/doc/repp-doc.md index 29d919d4f..dbdad9a59 100644 --- a/doc/repp-doc.md +++ b/doc/repp-doc.md @@ -1,7 +1,14 @@ # REPP integration specification -REPP uses currently Basic Authentication (http://tools.ietf.org/html/rfc2617#section-2) with ssl certificate and key. -Credentials and certificate are issued by EIS (in an exchange for desired API username, CSR (where CN must match username) and IP). +REPP uses HTTP/1.1 protocol (http://www.ietf.org/rfc/rfc2616.txt) and +Basic Authentication (http://tools.ietf.org/html/rfc2617#section-2) using +Secure Transport (https://tools.ietf.org/html/rfc5246) with certificate and key (https://tools.ietf.org/html/rfc5280). + +Credentials and certificate are issued by EIS (in an exchange for desired API username, CSR and IP). + +To quickly test the API, use curl: + + curl -q -k --cert user.crt.pem --key user.key.pem https://TBA/repp/v1/accounts/balance -u username:password Test API endpoint: TBA Production API endpoint: TBA diff --git a/doc/schemas/contact-1.0.xsd b/doc/schemas/contact-1.0.xsd new file mode 100644 index 000000000..3ed0eb6d8 --- /dev/null +++ b/doc/schemas/contact-1.0.xsd @@ -0,0 +1,388 @@ + + + + + + + + + + + Extensible Provisioning Protocol v1.0 + contact provisioning schema. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/schemas/contact-eis-1.0.xsd b/doc/schemas/contact-eis-1.0.xsd new file mode 100644 index 000000000..341888e47 --- /dev/null +++ b/doc/schemas/contact-eis-1.0.xsd @@ -0,0 +1,366 @@ + + + + + + + + + + + + Extensible Provisioning Protocol v1.0 + contact provisioning schema. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/schemas/domain-1.0.xsd b/doc/schemas/domain-1.0.xsd new file mode 100644 index 000000000..db650414e --- /dev/null +++ b/doc/schemas/domain-1.0.xsd @@ -0,0 +1,432 @@ + + + + + + + + + + + + Extensible Provisioning Protocol v1.0 + domain provisioning schema. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/schemas/domain-eis-1.0.xsd b/doc/schemas/domain-eis-1.0.xsd new file mode 100644 index 000000000..a0b89c0c6 --- /dev/null +++ b/doc/schemas/domain-eis-1.0.xsd @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + Extensible Provisioning Protocol v1.0 + domain provisioning schema. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/schemas/eis-1.0.xsd b/doc/schemas/eis-1.0.xsd new file mode 100644 index 000000000..262d94581 --- /dev/null +++ b/doc/schemas/eis-1.0.xsd @@ -0,0 +1,84 @@ + + + + + + EIS Extensible Provisioning Protocol v1.0 extension schema. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/schemas/epp-1.0.xsd b/doc/schemas/epp-1.0.xsd new file mode 100644 index 000000000..1efc25947 --- /dev/null +++ b/doc/schemas/epp-1.0.xsd @@ -0,0 +1,443 @@ + + + + + + + + + + Extensible Provisioning Protocol v1.0 schema. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/schemas/eppcom-1.0.xsd b/doc/schemas/eppcom-1.0.xsd new file mode 100644 index 000000000..3d1c44e44 --- /dev/null +++ b/doc/schemas/eppcom-1.0.xsd @@ -0,0 +1,104 @@ + + + + + + + Extensible Provisioning Protocol v1.0 + shared structures schema. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/schemas/host-1.0.xsd b/doc/schemas/host-1.0.xsd new file mode 100644 index 000000000..47015ec83 --- /dev/null +++ b/doc/schemas/host-1.0.xsd @@ -0,0 +1,244 @@ + + + + + + + + + + + Extensible Provisioning Protocol v1.0 + host provisioning schema. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/schemas/secDNS-1.1.xsd b/doc/schemas/secDNS-1.1.xsd new file mode 100644 index 000000000..e9fe3f65a --- /dev/null +++ b/doc/schemas/secDNS-1.1.xsd @@ -0,0 +1,130 @@ + + + + + + Extensible Provisioning Protocol v1.0 + domain name extension schema + for provisioning DNS security (DNSSEC) extensions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/devise_custom_failure.rb b/lib/devise_custom_failure.rb index ae7f6ba74..b902486d4 100644 --- a/lib/devise_custom_failure.rb +++ b/lib/devise_custom_failure.rb @@ -2,6 +2,7 @@ class DeviseCustomFailure < Devise::FailureApp def redirect_url return registrant_login_url if request.original_fullpath.to_s.match(/^\/registrant/) return registrar_login_url if request.original_fullpath.to_s.match(/^\/registrar/) + return '/admin' if request.original_fullpath.to_s.match(%r{^\/admin\/que}) return admin_login_url if request.original_fullpath.to_s.match(/^\/admin/) root_url end diff --git a/lib/epp_constraint.rb b/lib/epp_constraint.rb index de9dce6e5..02bf285d9 100644 --- a/lib/epp_constraint.rb +++ b/lib/epp_constraint.rb @@ -1,7 +1,7 @@ class EppConstraint OBJECT_TYPES = { - domain: { domain: 'urn:ietf:params:xml:ns:domain-1.0' }, - contact: { contact: 'urn:ietf:params:xml:ns:contact-1.0' } + domain: { domain: 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/domain-eis-1.0.xsd' }, + contact: { contact: 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/contact-eis-1.0.xsd' } } def initialize(type) diff --git a/lib/iptable.rb b/lib/iptable.rb new file mode 100644 index 000000000..c41bc37f4 --- /dev/null +++ b/lib/iptable.rb @@ -0,0 +1,17 @@ +module Iptable + def counter_update(registrar_code, ip) + counter_proc = "/proc/net/xt_recent/#{registrar_code}" + + begin + File.open(counter_proc, 'a') do |f| + f.puts "+#{ip}" + end + rescue Errno::ENOENT => e + logger.error "IPTABLES COUNTER UPDATE: cannot open #{counter_proc}: #{e}" + rescue Errno::EACCES => e + logger.error "IPTABLES COUNTER UPDATE: no permission #{counter_proc}: #{e}" + rescue IOError => e + logger.error "IPTABLES COUNTER UPDATE: cannot write #{ip} to #{counter_proc}: #{e}" + end + end +end diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake index f62dfc637..8436080be 100644 --- a/lib/tasks/import.rake +++ b/lib/tasks/import.rake @@ -106,6 +106,15 @@ namespace :import do next if x.cash_account x.accounts.create(account_type: Account::CASH, currency: 'EUR') x.save(validate: false) + + lr = Legacy::Registrar.find(x.legacy_id) + x.cash_account.account_activities << AccountActivity.new({ + sum: lr.account_balance, + currency: 'EUR', + description: 'Transfer from legacy system' + }) + + x.cash_account.save end puts "-----> Imported #{count} new registrars in #{(Time.zone.now.to_f - start).round(2)} seconds" @@ -224,6 +233,7 @@ namespace :import do legacy_id legacy_registrar_id legacy_registrant_id + statuses ) domain_contact_columns = %w( @@ -234,6 +244,7 @@ namespace :import do legacy_contact_id ) + # rubocop: disable Lint/UselessAssignment domain_status_columns = %w( description value @@ -241,6 +252,7 @@ namespace :import do updator_str legacy_domain_id ) + # rubocop: enable Lint/UselessAssignment nameserver_columns = %w( hostname @@ -263,7 +275,7 @@ namespace :import do legacy_domain_id ) - domains, nameservers, dnskeys, domain_statuses, domain_contacts = [], [], [], [], [] + domains, nameservers, dnskeys, domain_contacts = [], [], [], [] existing_domain_ids = Domain.pluck(:legacy_id) user = "rake-#{`whoami`.strip} #{ARGV.join ' '}" count = 0 @@ -281,6 +293,18 @@ namespace :import do count += 1 begin + # domain statuses + domain_statuses = [] + ok = true + x.object_states.each do |state| + next if state.name.blank? + domain_statuses << state.name + ok = false + end + + # OK status is default + domain_statuses << DomainStatus::OK if ok + domains << [ x.object_registry.name.try(:strip), x.object_registry.try(:crdate), @@ -296,7 +320,8 @@ namespace :import do user, x.id, x.object_registry.try(:crid), - x.registrant + x.registrant, + domain_statuses ] # admin contacts @@ -321,31 +346,6 @@ namespace :import do ] end - # domain statuses - ok = true - x.object_states.each do |state| - next if state.name.blank? - domain_statuses << [ - state.desc, - state.name, - user, - user, - x.id - ] - ok = false - end - - # OK status is default - if ok - domain_statuses << [ - nil, - DomainStatus::OK, - user, - user, - x.id - ] - end - # nameservers x.nsset.hosts.each do |host| ip_maps = host.host_ipaddr_maps @@ -384,9 +384,8 @@ namespace :import do Domain.import domain_columns, domains, validate: false Nameserver.import nameserver_columns, nameservers, validate: false Dnskey.import dnskey_columns, dnskeys, validate: false - DomainStatus.import domain_status_columns, domain_statuses, validate: false DomainContact.import domain_contact_columns, domain_contacts, validate: false - domains, nameservers, dnskeys, domain_statuses, domain_contacts = [], [], [], [], [] + domains, nameservers, dnskeys, domain_contacts = [], [], [], [] end rescue => e puts "ERROR on index #{index}" @@ -397,7 +396,6 @@ namespace :import do Domain.import domain_columns, domains, validate: false Nameserver.import nameserver_columns, nameservers, validate: false Dnskey.import dnskey_columns, dnskeys, validate: false - DomainStatus.import domain_status_columns, domain_statuses, validate: false DomainContact.import domain_contact_columns, domain_contacts, validate: false puts '-----> Updating relations...' @@ -461,16 +459,6 @@ namespace :import do "AND domain_id IS NULL" ) - # statuses - ActiveRecord::Base.connection.execute( - "UPDATE domain_statuses "\ - "SET domain_id = domains.id "\ - "FROM domains "\ - "WHERE domains.legacy_id = legacy_domain_id "\ - "AND legacy_domain_id IS NOT NULL "\ - "AND domain_id IS NULL" - ) - puts '-----> Generating dnskey digests...' Dnskey.all.each do |x| diff --git a/lib/tasks/zonefile.rake b/lib/tasks/zonefile.rake index 11b7c7fe3..3609341cd 100644 --- a/lib/tasks/zonefile.rake +++ b/lib/tasks/zonefile.rake @@ -13,7 +13,7 @@ namespace :zonefile do ret text; BEGIN -- define filters - include_filter = '%' || i_origin; + include_filter = '%.' || i_origin; -- for %.%.% IF i_origin ~ '\\.' THEN diff --git a/public/assets/.sprockets-manifest-777146d8396a4f217ac1f34291da0a5d.json b/public/assets/.sprockets-manifest-777146d8396a4f217ac1f34291da0a5d.json new file mode 100644 index 000000000..55ec94edb --- /dev/null +++ b/public/assets/.sprockets-manifest-777146d8396a4f217ac1f34291da0a5d.json @@ -0,0 +1 @@ +{"files":{"alpha-0ca6e1b4c58bac2800936ad023a1488e.png":{"logical_path":"alpha.png","mtime":"2015-02-03T16:52:02+02:00","size":7089,"digest":"0ca6e1b4c58bac2800936ad023a1488e"},"development-0107cbd9200b233a56713bdb4643eace.png":{"logical_path":"development.png","mtime":"2015-02-03T16:52:02+02:00","size":14496,"digest":"0107cbd9200b233a56713bdb4643eace"},"staging-5b1d74e291541214457521dd0c14f6a2.png":{"logical_path":"staging.png","mtime":"2015-02-03T16:52:02+02:00","size":12294,"digest":"5b1d74e291541214457521dd0c14f6a2"},"application-805c69cec6ea75185028b7e45efee5fd.js":{"logical_path":"application.js","mtime":"2015-02-03T16:52:02+02:00","size":233509,"digest":"805c69cec6ea75185028b7e45efee5fd"},"application-993e676726143d5ead2f8840bc8894a7.css":{"logical_path":"application.css","mtime":"2015-02-03T16:52:02+02:00","size":135007,"digest":"993e676726143d5ead2f8840bc8894a7"},"login-3546bfbfa6594a3ce191938a5e6d3066.css":{"logical_path":"login.css","mtime":"2015-02-03T16:52:02+02:00","size":137,"digest":"3546bfbfa6594a3ce191938a5e6d3066"},"bootstrap/glyphicons-halflings-regular-24b5f16fe2187cf515fc8a2babbd55da.eot":{"logical_path":"bootstrap/glyphicons-halflings-regular.eot","mtime":"2015-01-08T16:11:23+02:00","size":20335,"digest":"24b5f16fe2187cf515fc8a2babbd55da"},"bootstrap/glyphicons-halflings-regular-d0edb6d81c8df5ba60f44915ba986aa7.svg":{"logical_path":"bootstrap/glyphicons-halflings-regular.svg","mtime":"2015-01-08T16:11:23+02:00","size":62926,"digest":"d0edb6d81c8df5ba60f44915ba986aa7"},"bootstrap/glyphicons-halflings-regular-10c46f3d2df6eb4ec8b4f4a06a937419.ttf":{"logical_path":"bootstrap/glyphicons-halflings-regular.ttf","mtime":"2015-01-08T16:11:23+02:00","size":41280,"digest":"10c46f3d2df6eb4ec8b4f4a06a937419"},"bootstrap/glyphicons-halflings-regular-57dc61ddc965a9efa6e70b9d954a55fe.woff":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff","mtime":"2015-01-08T16:11:23+02:00","size":23320,"digest":"57dc61ddc965a9efa6e70b9d954a55fe"},"alpha-618f9900becef747a5a6952555e4b204.png":{"logical_path":"alpha.png","mtime":"2015-04-30T12:07:54+03:00","size":7089,"digest":"618f9900becef747a5a6952555e4b204"},"bg-f28afe55c5adffacf7b5452a6cae24c3.jpg":{"logical_path":"bg.jpg","mtime":"2015-03-30T11:10:52+03:00","size":69058,"digest":"f28afe55c5adffacf7b5452a6cae24c3"},"danske-3020934087f46316fd6ec2658033dab5.png":{"logical_path":"danske.png","mtime":"2015-04-14T17:25:27+03:00","size":1130,"digest":"3020934087f46316fd6ec2658033dab5"},"development-5cc9f2ddbd534e45e24078e203c7e01f.png":{"logical_path":"development.png","mtime":"2015-04-30T12:07:54+03:00","size":14496,"digest":"5cc9f2ddbd534e45e24078e203c7e01f"},"eis-logo-et-11d876ece7adf9172797bb174a79317f.png":{"logical_path":"eis-logo-et.png","mtime":"2015-04-14T17:25:27+03:00","size":1440,"digest":"11d876ece7adf9172797bb174a79317f"},"favicon-13c3c3833d62abd4e04a44220c8b1429.ico":{"logical_path":"favicon.ico","mtime":"2015-03-30T11:10:52+03:00","size":1150,"digest":"13c3c3833d62abd4e04a44220c8b1429"},"id_card-0024eba53ea49330fdcbda89bb371814.gif":{"logical_path":"id_card.gif","mtime":"2015-03-30T11:10:52+03:00","size":564,"digest":"0024eba53ea49330fdcbda89bb371814"},"lhv-011c68ea1402f858ba75e8a4050b5ca6.png":{"logical_path":"lhv.png","mtime":"2015-04-14T17:25:27+03:00","size":3417,"digest":"011c68ea1402f858ba75e8a4050b5ca6"},"mid-ed85374018c6f0889935b0682fa84642.gif":{"logical_path":"mid.gif","mtime":"2015-03-30T11:10:52+03:00","size":1566,"digest":"ed85374018c6f0889935b0682fa84642"},"nordea-2b47cfab5337c041fe49db79a1f69979.png":{"logical_path":"nordea.png","mtime":"2015-04-14T17:25:27+03:00","size":1181,"digest":"2b47cfab5337c041fe49db79a1f69979"},"registrar/bg-alpha-618f9900becef747a5a6952555e4b204.png":{"logical_path":"registrar/bg-alpha.png","mtime":"2015-04-30T12:07:54+03:00","size":7089,"digest":"618f9900becef747a5a6952555e4b204"},"registrar/bg-development-5cc9f2ddbd534e45e24078e203c7e01f.png":{"logical_path":"registrar/bg-development.png","mtime":"2015-04-13T10:48:57+03:00","size":14496,"digest":"5cc9f2ddbd534e45e24078e203c7e01f"},"registrar/bg-staging-26368b05bc701be6495a3cdad27593a3.png":{"logical_path":"registrar/bg-staging.png","mtime":"2015-04-30T12:07:54+03:00","size":12294,"digest":"26368b05bc701be6495a3cdad27593a3"},"registrar/favicon-7015acab0e7ee10d673b8d49cecfb54b.ico":{"logical_path":"registrar/favicon.ico","mtime":"2015-04-30T12:07:30+03:00","size":0,"digest":"7015acab0e7ee10d673b8d49cecfb54b"},"seb-7fc1e0a48b927e8afc437addf852fcc1.png":{"logical_path":"seb.png","mtime":"2015-04-14T17:25:27+03:00","size":2439,"digest":"7fc1e0a48b927e8afc437addf852fcc1"},"staging-26368b05bc701be6495a3cdad27593a3.png":{"logical_path":"staging.png","mtime":"2015-04-30T12:07:54+03:00","size":12294,"digest":"26368b05bc701be6495a3cdad27593a3"},"swed-4119c3462bfd9d768705f978bd0b8725.png":{"logical_path":"swed.png","mtime":"2015-04-14T17:25:27+03:00","size":1521,"digest":"4119c3462bfd9d768705f978bd0b8725"},"test-618f9900becef747a5a6952555e4b204.png":{"logical_path":"test.png","mtime":"2015-04-30T12:07:54+03:00","size":7089,"digest":"618f9900becef747a5a6952555e4b204"},"admin-manifest-81244fbcb2941dbf2b9cc6e7ad480060.js":{"logical_path":"admin-manifest.js","mtime":"2015-05-12T12:16:20+03:00","size":712371,"digest":"81244fbcb2941dbf2b9cc6e7ad480060"},"admin/application-187f808aa45da0795ce5d28f48e7970f.js":{"logical_path":"admin/application.js","mtime":"2015-04-20T16:41:29+03:00","size":289,"digest":"187f808aa45da0795ce5d28f48e7970f"},"registrant-manifest-1f30b53c57759af9a47c8a210e17c8a5.js":{"logical_path":"registrant-manifest.js","mtime":"2015-05-13T11:52:45+03:00","size":718718,"digest":"1f30b53c57759af9a47c8a210e17c8a5"},"registrar-manifest-1f30b53c57759af9a47c8a210e17c8a5.js":{"logical_path":"registrar-manifest.js","mtime":"2015-05-12T12:15:59+03:00","size":718718,"digest":"1f30b53c57759af9a47c8a210e17c8a5"},"registrar/application-80cb2a349e82ee26e038257ddce8642e.js":{"logical_path":"registrar/application.js","mtime":"2015-04-20T17:13:49+03:00","size":1084,"digest":"80cb2a349e82ee26e038257ddce8642e"},"admin-manifest-fceb6abfb995546297fca8180e251217.css":{"logical_path":"admin-manifest.css","mtime":"2015-05-15T09:58:24+03:00","size":393721,"digest":"fceb6abfb995546297fca8180e251217"},"registrant-manifest-3938764b3ef6aea7b5bc22b4969e7af0.css":{"logical_path":"registrant-manifest.css","mtime":"2015-05-19T11:21:41+03:00","size":474001,"digest":"3938764b3ef6aea7b5bc22b4969e7af0"},"registrar-manifest-622732055d28fda17d8cbfc1d00d4806.css":{"logical_path":"registrar-manifest.css","mtime":"2015-05-15T09:58:24+03:00","size":457291,"digest":"622732055d28fda17d8cbfc1d00d4806"},"shared/pdf-677bbf85989f907b03f3fca7c62b33dc.css":{"logical_path":"shared/pdf.css","mtime":"2015-05-12T12:15:59+03:00","size":351670,"digest":"677bbf85989f907b03f3fca7c62b33dc"},"etelkalight-webfont-ed13fffbfc3953a032a4c3671b8467cd.eot":{"logical_path":"etelkalight-webfont.eot","mtime":"2015-03-30T11:10:52+03:00","size":23109,"digest":"ed13fffbfc3953a032a4c3671b8467cd"},"etelkalight-webfont-7b1d2e2c635f04f583288fdf8f18deee.svg":{"logical_path":"etelkalight-webfont.svg","mtime":"2015-03-30T11:10:52+03:00","size":64768,"digest":"7b1d2e2c635f04f583288fdf8f18deee"},"etelkalight-webfont-0683b4d48ff1eee498ca094abbcecd6d.ttf":{"logical_path":"etelkalight-webfont.ttf","mtime":"2015-03-30T11:10:52+03:00","size":49748,"digest":"0683b4d48ff1eee498ca094abbcecd6d"},"etelkalight-webfont-72416c26c35dbd939703bfb1826ff2a8.woff":{"logical_path":"etelkalight-webfont.woff","mtime":"2015-03-30T11:10:52+03:00","size":26204,"digest":"72416c26c35dbd939703bfb1826ff2a8"},"etelkalightbold-webfont-dc2ee659eefb7289fe8f2ff6baa37445.eot":{"logical_path":"etelkalightbold-webfont.eot","mtime":"2015-03-30T11:10:52+03:00","size":23707,"digest":"dc2ee659eefb7289fe8f2ff6baa37445"},"etelkalightbold-webfont-bca484302b45333b390c3123614d2c1c.svg":{"logical_path":"etelkalightbold-webfont.svg","mtime":"2015-03-30T11:10:52+03:00","size":62829,"digest":"bca484302b45333b390c3123614d2c1c"},"etelkalightbold-webfont-821515fbb533b1135c8631936ffa5531.ttf":{"logical_path":"etelkalightbold-webfont.ttf","mtime":"2015-03-30T11:10:52+03:00","size":51172,"digest":"821515fbb533b1135c8631936ffa5531"},"etelkalightbold-webfont-0139c92ba83bc3743826c80b554bbda3.woff":{"logical_path":"etelkalightbold-webfont.woff","mtime":"2015-03-30T11:10:52+03:00","size":26956,"digest":"0139c92ba83bc3743826c80b554bbda3"},"etelkalightitalic-webfont-b12af89a8321d427c136e5ce99409b07.eot":{"logical_path":"etelkalightitalic-webfont.eot","mtime":"2015-03-30T11:10:52+03:00","size":26426,"digest":"b12af89a8321d427c136e5ce99409b07"},"etelkalightitalic-webfont-776d2dfa86c8119fd8cb78bfe57b1e47.svg":{"logical_path":"etelkalightitalic-webfont.svg","mtime":"2015-03-30T11:10:52+03:00","size":69857,"digest":"776d2dfa86c8119fd8cb78bfe57b1e47"},"etelkalightitalic-webfont-e9186197cc519611c84d7ac71ebbd2e5.ttf":{"logical_path":"etelkalightitalic-webfont.ttf","mtime":"2015-03-30T11:10:52+03:00","size":57040,"digest":"e9186197cc519611c84d7ac71ebbd2e5"},"etelkalightitalic-webfont-a8908cc11ab9d731b6227c8b2fb05b73.woff":{"logical_path":"etelkalightitalic-webfont.woff","mtime":"2015-03-30T11:10:52+03:00","size":29884,"digest":"a8908cc11ab9d731b6227c8b2fb05b73"},"infotexb-webfont-fb2fa9574b264dcc30a2050682bd52f4.eot":{"logical_path":"infotexb-webfont.eot","mtime":"2015-03-30T11:10:52+03:00","size":23124,"digest":"fb2fa9574b264dcc30a2050682bd52f4"},"infotexb-webfont-150d985c9a021dbe3bd6053372609118.svg":{"logical_path":"infotexb-webfont.svg","mtime":"2015-03-30T11:10:52+03:00","size":90188,"digest":"150d985c9a021dbe3bd6053372609118"},"infotexb-webfont-e738890c5d7af17632fa84dc9b42c747.ttf":{"logical_path":"infotexb-webfont.ttf","mtime":"2015-03-30T11:10:52+03:00","size":47396,"digest":"e738890c5d7af17632fa84dc9b42c747"},"infotexb-webfont-f112d498df4b5d3710bd40cc9e5781af.woff":{"logical_path":"infotexb-webfont.woff","mtime":"2015-03-30T11:10:52+03:00","size":26228,"digest":"f112d498df4b5d3710bd40cc9e5781af"},"infotexm-webfont-ca44c79c0f8d796b0b7d9b104abe4e17.eot":{"logical_path":"infotexm-webfont.eot","mtime":"2015-03-30T11:10:52+03:00","size":23273,"digest":"ca44c79c0f8d796b0b7d9b104abe4e17"},"infotexm-webfont-2c8e72831d6e851d286ff79afe28aa55.svg":{"logical_path":"infotexm-webfont.svg","mtime":"2015-03-30T11:10:52+03:00","size":90423,"digest":"2c8e72831d6e851d286ff79afe28aa55"},"infotexm-webfont-896292b5af614c36a26744815159b625.ttf":{"logical_path":"infotexm-webfont.ttf","mtime":"2015-03-30T11:10:52+03:00","size":47484,"digest":"896292b5af614c36a26744815159b625"},"infotexm-webfont-3549a25386cf49af60d984b80006547f.woff":{"logical_path":"infotexm-webfont.woff","mtime":"2015-03-30T11:10:52+03:00","size":26492,"digest":"3549a25386cf49af60d984b80006547f"},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-9f7b44c685ec9eeb173a8f920d4d29b8.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2015-05-12T11:03:08+03:00","size":180,"digest":"9f7b44c685ec9eeb173a8f920d4d29b8"},"jquery-ui/ui-bg_flat_75_ffffff_40x100-5549a64944ea9f0740ca1db910ff0f5a.png":{"logical_path":"jquery-ui/ui-bg_flat_75_ffffff_40x100.png","mtime":"2015-05-12T11:03:08+03:00","size":178,"digest":"5549a64944ea9f0740ca1db910ff0f5a"},"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-625ab42eb971ac89ac7e5b803eb7305e.png":{"logical_path":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png","mtime":"2015-05-12T11:03:08+03:00","size":120,"digest":"625ab42eb971ac89ac7e5b803eb7305e"},"jquery-ui/ui-bg_glass_65_ffffff_1x400-2825332fdb02e2521bc6deae40a6433a.png":{"logical_path":"jquery-ui/ui-bg_glass_65_ffffff_1x400.png","mtime":"2015-05-12T11:03:08+03:00","size":105,"digest":"2825332fdb02e2521bc6deae40a6433a"},"jquery-ui/ui-bg_glass_75_dadada_1x400-01ce21eb3d2c3a1b0fd4c5ceef0a700e.png":{"logical_path":"jquery-ui/ui-bg_glass_75_dadada_1x400.png","mtime":"2015-05-12T11:03:08+03:00","size":111,"digest":"01ce21eb3d2c3a1b0fd4c5ceef0a700e"},"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-bc720eb664eeca79d17081070f350db8.png":{"logical_path":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png","mtime":"2015-05-12T11:03:08+03:00","size":110,"digest":"bc720eb664eeca79d17081070f350db8"},"jquery-ui/ui-bg_glass_95_fef1ec_1x400-f7a402ed795ce14d3c63a12fa6abecfe.png":{"logical_path":"jquery-ui/ui-bg_glass_95_fef1ec_1x400.png","mtime":"2015-05-12T11:03:08+03:00","size":119,"digest":"f7a402ed795ce14d3c63a12fa6abecfe"},"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-cdbb4656bf485d74602d7cf42621b5c2.png":{"logical_path":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png","mtime":"2015-05-12T11:03:08+03:00","size":101,"digest":"cdbb4656bf485d74602d7cf42621b5c2"},"jquery-ui/ui-icons_222222_256x240-2be68d0c61b276fc37fca0dd0e093296.png":{"logical_path":"jquery-ui/ui-icons_222222_256x240.png","mtime":"2015-05-12T11:03:08+03:00","size":4369,"digest":"2be68d0c61b276fc37fca0dd0e093296"},"jquery-ui/ui-icons_2e83ff_256x240-16b100c149fe2aadb6285e316eee35fa.png":{"logical_path":"jquery-ui/ui-icons_2e83ff_256x240.png","mtime":"2015-05-12T11:03:08+03:00","size":4369,"digest":"16b100c149fe2aadb6285e316eee35fa"},"jquery-ui/ui-icons_454545_256x240-1c1d485b55c1bded3366a8cfb0a0daed.png":{"logical_path":"jquery-ui/ui-icons_454545_256x240.png","mtime":"2015-05-12T11:03:08+03:00","size":4369,"digest":"1c1d485b55c1bded3366a8cfb0a0daed"},"jquery-ui/ui-icons_888888_256x240-ed6c5b2703aba1e014120179504ddabb.png":{"logical_path":"jquery-ui/ui-icons_888888_256x240.png","mtime":"2015-05-12T11:03:08+03:00","size":4369,"digest":"ed6c5b2703aba1e014120179504ddabb"},"jquery-ui/ui-icons_cd0a0a_256x240-c5af554b5a90164d2c67a06d5cb9454a.png":{"logical_path":"jquery-ui/ui-icons_cd0a0a_256x240.png","mtime":"2015-05-12T11:03:08+03:00","size":4369,"digest":"c5af554b5a90164d2c67a06d5cb9454a"},"select2-spinner-0cb5e73ef8c0669f910bf9ce3d62c516.gif":{"logical_path":"select2-spinner.gif","mtime":"2015-05-12T11:05:57+03:00","size":1849,"digest":"0cb5e73ef8c0669f910bf9ce3d62c516"},"select2-7a233a3c56945673c6c1ebcbd205c1fd.png":{"logical_path":"select2.png","mtime":"2015-05-12T11:05:57+03:00","size":613,"digest":"7a233a3c56945673c6c1ebcbd205c1fd"},"select2x2-bdabb22531f7e0e104a602d47cb71e30.png":{"logical_path":"select2x2.png","mtime":"2015-05-12T11:05:57+03:00","size":845,"digest":"bdabb22531f7e0e104a602d47cb71e30"},"bootstrap/glyphicons-halflings-regular-8c7e3a81fcfddd99c12fab80bba274c2.eot":{"logical_path":"bootstrap/glyphicons-halflings-regular.eot","mtime":"2015-05-12T12:15:59+03:00","size":20127,"digest":"8c7e3a81fcfddd99c12fab80bba274c2"},"bootstrap/glyphicons-halflings-regular-9aa4cf766b78fa283fc5c65c92bb8de1.svg":{"logical_path":"bootstrap/glyphicons-halflings-regular.svg","mtime":"2015-05-12T12:15:59+03:00","size":108738,"digest":"9aa4cf766b78fa283fc5c65c92bb8de1"},"bootstrap/glyphicons-halflings-regular-3f35157d0fc792b1f0ee8dd82cc8aaf8.ttf":{"logical_path":"bootstrap/glyphicons-halflings-regular.ttf","mtime":"2015-05-12T12:15:59+03:00","size":45404,"digest":"3f35157d0fc792b1f0ee8dd82cc8aaf8"},"bootstrap/glyphicons-halflings-regular-b501c6ba89bfe0d9af27981a19c9e346.woff":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff","mtime":"2015-05-12T12:15:59+03:00","size":23424,"digest":"b501c6ba89bfe0d9af27981a19c9e346"},"bootstrap/glyphicons-halflings-regular-cde521afb829f829e7fcfabc094dc659.woff2":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff2","mtime":"2015-05-12T12:15:59+03:00","size":18028,"digest":"cde521afb829f829e7fcfabc094dc659"},"alpha-84eeebabe667b9b75b7b050eeee16eeb.png":{"logical_path":"alpha.png","mtime":"2015-04-30T12:07:54+03:00","size":7089,"digest":"84eeebabe667b9b75b7b050eeee16eeb"},"bg-841fa022251d290635254dbbc3097daf.jpg":{"logical_path":"bg.jpg","mtime":"2015-04-30T12:07:54+03:00","size":69058,"digest":"841fa022251d290635254dbbc3097daf"},"danske-fa2a4fcd35b59cb1255f800185840276.png":{"logical_path":"danske.png","mtime":"2015-04-30T12:07:54+03:00","size":1130,"digest":"fa2a4fcd35b59cb1255f800185840276"},"development-d24ec62be8078e61a3c656b83fa8fe9b.png":{"logical_path":"development.png","mtime":"2015-04-30T12:07:54+03:00","size":14496,"digest":"d24ec62be8078e61a3c656b83fa8fe9b"},"eis-logo-et-fd17d396191bd4e667509390f1922892.png":{"logical_path":"eis-logo-et.png","mtime":"2015-04-30T12:07:54+03:00","size":1440,"digest":"fd17d396191bd4e667509390f1922892"},"favicon-2435a1ee9e9dfca133abbca02619c8d9.ico":{"logical_path":"favicon.ico","mtime":"2015-04-30T12:07:54+03:00","size":1150,"digest":"2435a1ee9e9dfca133abbca02619c8d9"},"id_card-9926a89250d68222f45669dd7984c90d.gif":{"logical_path":"id_card.gif","mtime":"2015-04-30T12:07:54+03:00","size":564,"digest":"9926a89250d68222f45669dd7984c90d"},"lhv-5114f0bee2d3c70c47403f17e9d287e8.png":{"logical_path":"lhv.png","mtime":"2015-04-30T12:07:54+03:00","size":3417,"digest":"5114f0bee2d3c70c47403f17e9d287e8"},"mid-79dabc481b840aac303e5e1cc7dde8c6.gif":{"logical_path":"mid.gif","mtime":"2015-04-30T12:07:54+03:00","size":1566,"digest":"79dabc481b840aac303e5e1cc7dde8c6"},"nordea-87b186d736c3c93685086c13ee0a9f21.png":{"logical_path":"nordea.png","mtime":"2015-04-30T12:07:54+03:00","size":1181,"digest":"87b186d736c3c93685086c13ee0a9f21"},"registrar/bg-alpha-84eeebabe667b9b75b7b050eeee16eeb.png":{"logical_path":"registrar/bg-alpha.png","mtime":"2015-04-30T12:07:54+03:00","size":7089,"digest":"84eeebabe667b9b75b7b050eeee16eeb"},"registrar/bg-development-d24ec62be8078e61a3c656b83fa8fe9b.png":{"logical_path":"registrar/bg-development.png","mtime":"2015-04-30T12:07:54+03:00","size":14496,"digest":"d24ec62be8078e61a3c656b83fa8fe9b"},"registrar/bg-staging-672bd21ed4b9cb3245ea44f3a2629bf0.png":{"logical_path":"registrar/bg-staging.png","mtime":"2015-04-30T12:07:54+03:00","size":12294,"digest":"672bd21ed4b9cb3245ea44f3a2629bf0"},"registrar/favicon-c06dd6a542ea15147e6794e03643f87c.ico":{"logical_path":"registrar/favicon.ico","mtime":"2015-04-30T12:07:30+03:00","size":0,"digest":"c06dd6a542ea15147e6794e03643f87c"},"seb-b1fa76625f31c3f4d0b84d450dd4c383.png":{"logical_path":"seb.png","mtime":"2015-04-30T12:07:54+03:00","size":2439,"digest":"b1fa76625f31c3f4d0b84d450dd4c383"},"staging-672bd21ed4b9cb3245ea44f3a2629bf0.png":{"logical_path":"staging.png","mtime":"2015-04-30T12:07:54+03:00","size":12294,"digest":"672bd21ed4b9cb3245ea44f3a2629bf0"},"swed-b9efaf29f99a76ecc01b03803be7a88d.png":{"logical_path":"swed.png","mtime":"2015-04-30T12:07:54+03:00","size":1521,"digest":"b9efaf29f99a76ecc01b03803be7a88d"},"test-84eeebabe667b9b75b7b050eeee16eeb.png":{"logical_path":"test.png","mtime":"2015-04-30T12:07:54+03:00","size":7089,"digest":"84eeebabe667b9b75b7b050eeee16eeb"},"admin-manifest-6e6fcf039a6b92e085d41d339fec5884.js":{"logical_path":"admin-manifest.js","mtime":"2015-05-12T12:16:20+03:00","size":315161,"digest":"6e6fcf039a6b92e085d41d339fec5884"},"admin/application-6a07f91041ad3f20e1b1d5458955fc91.js":{"logical_path":"admin/application.js","mtime":"2015-04-30T12:07:30+03:00","size":206,"digest":"6a07f91041ad3f20e1b1d5458955fc91"},"registrant-manifest-d9d0c29fad78a10a0c792a1715edd3d5.js":{"logical_path":"registrant-manifest.js","mtime":"2015-05-25T12:59:47+03:00","size":303041,"digest":"d9d0c29fad78a10a0c792a1715edd3d5"},"registrar-manifest-d9d0c29fad78a10a0c792a1715edd3d5.js":{"logical_path":"registrar-manifest.js","mtime":"2015-05-12T12:15:59+03:00","size":303041,"digest":"d9d0c29fad78a10a0c792a1715edd3d5"},"registrar/application-becf26b2259105fe47b50b2d3c80138c.js":{"logical_path":"registrar/application.js","mtime":"2015-04-30T12:07:30+03:00","size":808,"digest":"becf26b2259105fe47b50b2d3c80138c"},"admin-manifest-701249458372f015ab0b876ee831bbb1.css":{"logical_path":"admin-manifest.css","mtime":"2015-05-25T12:59:47+03:00","size":146503,"digest":"701249458372f015ab0b876ee831bbb1"},"registrant-manifest-9d06c365b21295408f3ccd37298efffb.css":{"logical_path":"registrant-manifest.css","mtime":"2015-05-25T12:59:47+03:00","size":190071,"digest":"9d06c365b21295408f3ccd37298efffb"},"registrar-manifest-71050a07965f499a5e7d6973a1389b1b.css":{"logical_path":"registrar-manifest.css","mtime":"2015-05-25T12:59:47+03:00","size":189886,"digest":"71050a07965f499a5e7d6973a1389b1b"},"shared/pdf-ef071ef29698676d4abe7c36b565496f.css":{"logical_path":"shared/pdf.css","mtime":"2015-05-12T12:15:59+03:00","size":119980,"digest":"ef071ef29698676d4abe7c36b565496f"},"etelkalight-webfont-c0ee4f9aa372df807632e0bb0d0c5f44.eot":{"logical_path":"etelkalight-webfont.eot","mtime":"2015-03-30T11:10:52+03:00","size":23109,"digest":"c0ee4f9aa372df807632e0bb0d0c5f44"},"etelkalight-webfont-49e7a69f10dc2fb97fb75b4b600540fd.svg":{"logical_path":"etelkalight-webfont.svg","mtime":"2015-03-30T11:10:52+03:00","size":64768,"digest":"49e7a69f10dc2fb97fb75b4b600540fd"},"etelkalight-webfont-732b53bcc82de772b8fad153dba9e8ce.ttf":{"logical_path":"etelkalight-webfont.ttf","mtime":"2015-03-30T11:10:52+03:00","size":49748,"digest":"732b53bcc82de772b8fad153dba9e8ce"},"etelkalight-webfont-635643de24bc05d241849d2d94360411.woff":{"logical_path":"etelkalight-webfont.woff","mtime":"2015-03-30T11:10:52+03:00","size":26204,"digest":"635643de24bc05d241849d2d94360411"},"etelkalightbold-webfont-058000aa817bc9d3d3277193322e1571.eot":{"logical_path":"etelkalightbold-webfont.eot","mtime":"2015-03-30T11:10:52+03:00","size":23707,"digest":"058000aa817bc9d3d3277193322e1571"},"etelkalightbold-webfont-2228057f2bc65595b1aa6bb978fdc024.svg":{"logical_path":"etelkalightbold-webfont.svg","mtime":"2015-03-30T11:10:52+03:00","size":62829,"digest":"2228057f2bc65595b1aa6bb978fdc024"},"etelkalightbold-webfont-a4d498eb3e03127324d20d39402b737c.ttf":{"logical_path":"etelkalightbold-webfont.ttf","mtime":"2015-03-30T11:10:52+03:00","size":51172,"digest":"a4d498eb3e03127324d20d39402b737c"},"etelkalightbold-webfont-ca5e2f470b251e7706b3fd222f6c452b.woff":{"logical_path":"etelkalightbold-webfont.woff","mtime":"2015-03-30T11:10:52+03:00","size":26956,"digest":"ca5e2f470b251e7706b3fd222f6c452b"},"etelkalightitalic-webfont-0331b1a437f2be83bd1def92da31a621.eot":{"logical_path":"etelkalightitalic-webfont.eot","mtime":"2015-03-30T11:10:52+03:00","size":26426,"digest":"0331b1a437f2be83bd1def92da31a621"},"etelkalightitalic-webfont-c86d64373f2e5820cb9c7579744d862b.svg":{"logical_path":"etelkalightitalic-webfont.svg","mtime":"2015-03-30T11:10:52+03:00","size":69857,"digest":"c86d64373f2e5820cb9c7579744d862b"},"etelkalightitalic-webfont-eeab2ccc14859e347751e00b94c7468d.ttf":{"logical_path":"etelkalightitalic-webfont.ttf","mtime":"2015-03-30T11:10:52+03:00","size":57040,"digest":"eeab2ccc14859e347751e00b94c7468d"},"etelkalightitalic-webfont-11ecd04590d9c57d06af4fd7f1f200a1.woff":{"logical_path":"etelkalightitalic-webfont.woff","mtime":"2015-03-30T11:10:52+03:00","size":29884,"digest":"11ecd04590d9c57d06af4fd7f1f200a1"},"infotexb-webfont-8d885bee87d1477c6db0b59dd52fe896.eot":{"logical_path":"infotexb-webfont.eot","mtime":"2015-03-30T11:10:52+03:00","size":23124,"digest":"8d885bee87d1477c6db0b59dd52fe896"},"infotexb-webfont-0c710174eb8081bb570dcfc25caafa10.svg":{"logical_path":"infotexb-webfont.svg","mtime":"2015-03-30T11:10:52+03:00","size":90188,"digest":"0c710174eb8081bb570dcfc25caafa10"},"infotexb-webfont-e7609a76f035df9ef1161dea0cafc89c.ttf":{"logical_path":"infotexb-webfont.ttf","mtime":"2015-03-30T11:10:52+03:00","size":47396,"digest":"e7609a76f035df9ef1161dea0cafc89c"},"infotexb-webfont-71f78522d2a2c5a623ae6793fc18368e.woff":{"logical_path":"infotexb-webfont.woff","mtime":"2015-03-30T11:10:52+03:00","size":26228,"digest":"71f78522d2a2c5a623ae6793fc18368e"},"infotexm-webfont-b01aba1c16b6c69c24fd81580c4b252f.eot":{"logical_path":"infotexm-webfont.eot","mtime":"2015-03-30T11:10:52+03:00","size":23273,"digest":"b01aba1c16b6c69c24fd81580c4b252f"},"infotexm-webfont-78ba702105f983e7c3ffe8c71e5e2b73.svg":{"logical_path":"infotexm-webfont.svg","mtime":"2015-03-30T11:10:52+03:00","size":90423,"digest":"78ba702105f983e7c3ffe8c71e5e2b73"},"infotexm-webfont-5869797caccf6ab4d73938faf6b8588e.ttf":{"logical_path":"infotexm-webfont.ttf","mtime":"2015-03-30T11:10:52+03:00","size":47484,"digest":"5869797caccf6ab4d73938faf6b8588e"},"infotexm-webfont-3ce446804ee12a1aa4f0d3c67a2ec305.woff":{"logical_path":"infotexm-webfont.woff","mtime":"2015-03-30T11:10:52+03:00","size":26492,"digest":"3ce446804ee12a1aa4f0d3c67a2ec305"},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-f91ca0f37189f2d27c249be3a9b5fe8e.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2015-05-12T11:03:08+03:00","size":180,"digest":"f91ca0f37189f2d27c249be3a9b5fe8e"},"jquery-ui/ui-bg_flat_75_ffffff_40x100-bb0051ba9b6d87ef3f9425d05cb2f7f8.png":{"logical_path":"jquery-ui/ui-bg_flat_75_ffffff_40x100.png","mtime":"2015-05-12T11:03:08+03:00","size":178,"digest":"bb0051ba9b6d87ef3f9425d05cb2f7f8"},"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-0fe7774bbb53c9db24dcf4dc4514db77.png":{"logical_path":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png","mtime":"2015-05-12T11:03:08+03:00","size":120,"digest":"0fe7774bbb53c9db24dcf4dc4514db77"},"jquery-ui/ui-bg_glass_65_ffffff_1x400-e50e57d636a734253c3c0b4cb4cef861.png":{"logical_path":"jquery-ui/ui-bg_glass_65_ffffff_1x400.png","mtime":"2015-05-12T11:03:08+03:00","size":105,"digest":"e50e57d636a734253c3c0b4cb4cef861"},"jquery-ui/ui-bg_glass_75_dadada_1x400-3f7ec278f71651df1dda0e20ac460483.png":{"logical_path":"jquery-ui/ui-bg_glass_75_dadada_1x400.png","mtime":"2015-05-12T11:03:08+03:00","size":111,"digest":"3f7ec278f71651df1dda0e20ac460483"},"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-6522c988bbf45e6b805b6ed4adf70079.png":{"logical_path":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png","mtime":"2015-05-12T11:03:08+03:00","size":110,"digest":"6522c988bbf45e6b805b6ed4adf70079"},"jquery-ui/ui-bg_glass_95_fef1ec_1x400-addad4f60fb36fc37c7ed9ff916af31e.png":{"logical_path":"jquery-ui/ui-bg_glass_95_fef1ec_1x400.png","mtime":"2015-05-12T11:03:08+03:00","size":119,"digest":"addad4f60fb36fc37c7ed9ff916af31e"},"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-7984ba05f627254dfdbdde97f999f415.png":{"logical_path":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png","mtime":"2015-05-12T11:03:08+03:00","size":101,"digest":"7984ba05f627254dfdbdde97f999f415"},"jquery-ui/ui-icons_222222_256x240-6e4c17c299f104a87548b204269bb9e5.png":{"logical_path":"jquery-ui/ui-icons_222222_256x240.png","mtime":"2015-05-12T11:03:08+03:00","size":4369,"digest":"6e4c17c299f104a87548b204269bb9e5"},"jquery-ui/ui-icons_2e83ff_256x240-7cb6a4006575c000b8f91394a06b8391.png":{"logical_path":"jquery-ui/ui-icons_2e83ff_256x240.png","mtime":"2015-05-12T11:03:08+03:00","size":4369,"digest":"7cb6a4006575c000b8f91394a06b8391"},"jquery-ui/ui-icons_454545_256x240-3440f505d562d5b095634dcb3dcf7a07.png":{"logical_path":"jquery-ui/ui-icons_454545_256x240.png","mtime":"2015-05-12T11:03:08+03:00","size":4369,"digest":"3440f505d562d5b095634dcb3dcf7a07"},"jquery-ui/ui-icons_888888_256x240-cb45397ab08fadc7e4f1314b5d84e26c.png":{"logical_path":"jquery-ui/ui-icons_888888_256x240.png","mtime":"2015-05-12T11:03:08+03:00","size":4369,"digest":"cb45397ab08fadc7e4f1314b5d84e26c"},"jquery-ui/ui-icons_cd0a0a_256x240-b4b9d1b4f2de973c609e28b87fbfbd4d.png":{"logical_path":"jquery-ui/ui-icons_cd0a0a_256x240.png","mtime":"2015-05-12T11:03:08+03:00","size":4369,"digest":"b4b9d1b4f2de973c609e28b87fbfbd4d"},"select2-spinner-a9ae0d27964eb30e49e3396bb2b4bd3d.gif":{"logical_path":"select2-spinner.gif","mtime":"2015-05-12T11:05:57+03:00","size":1849,"digest":"a9ae0d27964eb30e49e3396bb2b4bd3d"},"select2-4a19e1b1ee05dc61304a3f9cf69ed866.png":{"logical_path":"select2.png","mtime":"2015-05-12T11:05:57+03:00","size":613,"digest":"4a19e1b1ee05dc61304a3f9cf69ed866"},"select2x2-3bb6e2999d204bf36746d95f840e6b51.png":{"logical_path":"select2x2.png","mtime":"2015-05-12T11:05:57+03:00","size":845,"digest":"3bb6e2999d204bf36746d95f840e6b51"},"bootstrap/glyphicons-halflings-regular-050f85c5fbaa79689431c2a1f211fe2a.eot":{"logical_path":"bootstrap/glyphicons-halflings-regular.eot","mtime":"2015-05-12T12:15:59+03:00","size":20127,"digest":"050f85c5fbaa79689431c2a1f211fe2a"},"bootstrap/glyphicons-halflings-regular-3c8f142df5ab3046bbeb3c3310ae4fa9.svg":{"logical_path":"bootstrap/glyphicons-halflings-regular.svg","mtime":"2015-05-12T12:15:59+03:00","size":108738,"digest":"3c8f142df5ab3046bbeb3c3310ae4fa9"},"bootstrap/glyphicons-halflings-regular-632d47971ce98f67252b59ec394cb688.ttf":{"logical_path":"bootstrap/glyphicons-halflings-regular.ttf","mtime":"2015-05-12T12:15:59+03:00","size":45404,"digest":"632d47971ce98f67252b59ec394cb688"},"bootstrap/glyphicons-halflings-regular-e88ed3ff660b39de62652ed99f351552.woff":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff","mtime":"2015-05-12T12:15:59+03:00","size":23424,"digest":"e88ed3ff660b39de62652ed99f351552"},"bootstrap/glyphicons-halflings-regular-b5493d564382942c09f766d4c2b51f0a.woff2":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff2","mtime":"2015-05-12T12:15:59+03:00","size":18028,"digest":"b5493d564382942c09f766d4c2b51f0a"},"admin-manifest-4df541812fe4c37894758e9b93a255ddeb09cae1a258ee62f8cb0746496124a0.css":{"logical_path":"admin-manifest.css","mtime":"2015-06-03T17:46:46+03:00","size":166887,"digest":"4df541812fe4c37894758e9b93a255ddeb09cae1a258ee62f8cb0746496124a0","integrity":"sha256-TfVBgS/kw3iUdY6bk6JV3esJyuGiWO5i+MsHRklhJKA="},"admin-manifest-a1d98585d33f501b3f72a9964749e49845ce9827c3254f31abc689b1cc284877.js":{"logical_path":"admin-manifest.js","mtime":"2015-06-03T23:30:45+03:00","size":323860,"digest":"a1d98585d33f501b3f72a9964749e49845ce9827c3254f31abc689b1cc284877","integrity":"sha256-odmFhdM/UBs/cqmWR0nkmEXOmCfDJU8xq8aJscwoSHc="},"registrar-manifest-bffa75923fdda878303aa17da806fcf43415a599a19bf0022cf3f9e9d6140a05.css":{"logical_path":"registrar-manifest.css","mtime":"2015-06-03T17:32:10+03:00","size":192110,"digest":"bffa75923fdda878303aa17da806fcf43415a599a19bf0022cf3f9e9d6140a05","integrity":"sha256-v/p1kj/dqHgwOqF9qAb89DQVpZmhm/ACLPP56dYUCgU="},"registrar-manifest-91e58ca08340b0a7792aaec3980fdb8595319d31ea237173494e505a5b3751c6.js":{"logical_path":"registrar-manifest.js","mtime":"2015-06-03T23:27:27+03:00","size":310445,"digest":"91e58ca08340b0a7792aaec3980fdb8595319d31ea237173494e505a5b3751c6","integrity":"sha256-keWMoINAsKd5Kq7DmA/bhZUxnTHqI3FzSU5QWls3UcY="},"registrant-manifest-5042d2816e8cc296ed38449bd684b7df1f827e9aebbade86995e44f0320de332.css":{"logical_path":"registrant-manifest.css","mtime":"2015-06-03T17:32:10+03:00","size":192295,"digest":"5042d2816e8cc296ed38449bd684b7df1f827e9aebbade86995e44f0320de332","integrity":"sha256-UELSgW6MwpbtOESb1oS33x+Cfprrut6GmV5E8DIN4zI="},"registrant-manifest-9fb37a048a37bc0d0dfa7530d548c0dd38c4ee2ad067fe962c06cc7e94d2ddac.js":{"logical_path":"registrant-manifest.js","mtime":"2015-06-03T23:27:27+03:00","size":310445,"digest":"9fb37a048a37bc0d0dfa7530d548c0dd38c4ee2ad067fe962c06cc7e94d2ddac","integrity":"sha256-n7N6BIo3vA0N+nUw1UjA3TjE7irQZ/6WLAbMfpTS3aw="},"shared/pdf-f6e83972424c39d3f7ebe55fb4679237496990148efb3bb9a2a10a2c070be1a7.css":{"logical_path":"shared/pdf.css","mtime":"2015-06-03T17:32:03+03:00","size":120172,"digest":"f6e83972424c39d3f7ebe55fb4679237496990148efb3bb9a2a10a2c070be1a7","integrity":"sha256-9ug5ckJMOdP36+VftGeSN0lpkBSO+zu5oqEKLAcL4ac="},"select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png":{"logical_path":"select2.png","mtime":"2015-05-12T11:05:57+03:00","size":613,"digest":"d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8","integrity":"sha256-1rXY2D28GPuNd8h2HTMc2eUSPJaElQurBAbpiiSsWug="},"select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif":{"logical_path":"select2-spinner.gif","mtime":"2015-05-12T11:05:57+03:00","size":1849,"digest":"f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c","integrity":"sha256-9uz/YX7Cun9Vnm9TXK2bcKP5ESBzdTXatNRUimyDV2w="},"select2x2-6fe28d687dc0ed4d96016238c608ba1e7198c9c9accfa0b360b78018b9fb9bc2.png":{"logical_path":"select2x2.png","mtime":"2015-05-12T11:05:57+03:00","size":845,"digest":"6fe28d687dc0ed4d96016238c608ba1e7198c9c9accfa0b360b78018b9fb9bc2","integrity":"sha256-b+KNaH3A7U2WAWI4xgi6HnGYycmsz6CzYLeAGLn7m8I="},"alpha-9ac45a6b3c13dd5c5cf1b5d18c6f24a537dd2e4598238527d232a3e2ea5b5947.png":{"logical_path":"alpha.png","mtime":"2015-04-30T12:07:54+03:00","size":7089,"digest":"9ac45a6b3c13dd5c5cf1b5d18c6f24a537dd2e4598238527d232a3e2ea5b5947","integrity":"sha256-msRaazwT3Vxc8bXRjG8kpTfdLkWYI4Un0jKj4upbWUc="},"bg-b8036abd2f0f36e3ab54d5d5b25b0fbac11d63ec6106d959df3fa180b379de05.jpg":{"logical_path":"bg.jpg","mtime":"2015-06-03T17:32:03+03:00","size":69058,"digest":"b8036abd2f0f36e3ab54d5d5b25b0fbac11d63ec6106d959df3fa180b379de05","integrity":"sha256-uANqvS8PNuOrVNXVslsPusEdY+xhBtlZ3z+hgLN53gU="},"danske-07a4395cc406785da129414e15872fe1d6a4f6f6da0066da6701b56cdb72ea96.png":{"logical_path":"danske.png","mtime":"2015-06-03T17:32:03+03:00","size":1130,"digest":"07a4395cc406785da129414e15872fe1d6a4f6f6da0066da6701b56cdb72ea96","integrity":"sha256-B6Q5XMQGeF2hKUFOFYcv4dak9vbaAGbaZwG1bNty6pY="},"development-0b993e22410c7952394ac19ce3b41b722a97b93138a9a002091e1e5226d29bf5.png":{"logical_path":"development.png","mtime":"2015-04-30T12:07:54+03:00","size":14496,"digest":"0b993e22410c7952394ac19ce3b41b722a97b93138a9a002091e1e5226d29bf5","integrity":"sha256-C5k+IkEMeVI5SsGc47QbciqXuTE4qaACCR4eUibSm/U="},"eis-logo-et-86a549d266cda73e3225c5eeba14532c59d498e1fd980ec129fded68da8bb307.png":{"logical_path":"eis-logo-et.png","mtime":"2015-06-03T17:32:03+03:00","size":1440,"digest":"86a549d266cda73e3225c5eeba14532c59d498e1fd980ec129fded68da8bb307","integrity":"sha256-hqVJ0mbNpz4yJcXuuhRTLFnUmOH9mA7BKf3taNqLswc="},"favicon-309e00e2f78f9a2b042abc2806a8a4ed9cf6bb5d3f00ccc0985b1308bfd86c49.ico":{"logical_path":"favicon.ico","mtime":"2015-06-03T17:32:03+03:00","size":1150,"digest":"309e00e2f78f9a2b042abc2806a8a4ed9cf6bb5d3f00ccc0985b1308bfd86c49","integrity":"sha256-MJ4A4vePmisEKrwoBqik7Zz2u10/AMzAmFsTCL/YbEk="},"id_card-ea506a49b25c8de4e68e786d90f5ec5defb6c8e895b90f2f129815f5e550fe8e.gif":{"logical_path":"id_card.gif","mtime":"2015-06-03T17:32:03+03:00","size":564,"digest":"ea506a49b25c8de4e68e786d90f5ec5defb6c8e895b90f2f129815f5e550fe8e","integrity":"sha256-6lBqSbJcjeTmjnhtkPXsXe+2yOiVuQ8vEpgV9eVQ/o4="},"lhv-4d09d3126a05df392b73c54fa9b1eb605798c2e9bd361cf44500f73038832030.png":{"logical_path":"lhv.png","mtime":"2015-06-03T17:32:03+03:00","size":3417,"digest":"4d09d3126a05df392b73c54fa9b1eb605798c2e9bd361cf44500f73038832030","integrity":"sha256-TQnTEmoF3zkrc8VPqbHrYFeYwum9Nhz0RQD3MDiDIDA="},"mid-275543ecea377debe1ac892470f3aea4f7e7f0f9089fc0fbea4de410742e5239.gif":{"logical_path":"mid.gif","mtime":"2015-06-03T17:32:03+03:00","size":1566,"digest":"275543ecea377debe1ac892470f3aea4f7e7f0f9089fc0fbea4de410742e5239","integrity":"sha256-J1VD7Oo3fevhrIkkcPOupPfn8PkIn8D76k3kEHQuUjk="},"nordea-75c938c7436e0c8316f056be8df8acd0e8b16e09790e78f78da96d9f8633ef3b.png":{"logical_path":"nordea.png","mtime":"2015-06-03T17:32:03+03:00","size":1181,"digest":"75c938c7436e0c8316f056be8df8acd0e8b16e09790e78f78da96d9f8633ef3b","integrity":"sha256-dck4x0NuDIMW8Fa+jfis0Oixbgl5Dnj3jaltn4Yz7zs="},"registrar/bg-alpha-9ac45a6b3c13dd5c5cf1b5d18c6f24a537dd2e4598238527d232a3e2ea5b5947.png":{"logical_path":"registrar/bg-alpha.png","mtime":"2015-06-03T17:32:03+03:00","size":7089,"digest":"9ac45a6b3c13dd5c5cf1b5d18c6f24a537dd2e4598238527d232a3e2ea5b5947","integrity":"sha256-msRaazwT3Vxc8bXRjG8kpTfdLkWYI4Un0jKj4upbWUc="},"registrar/bg-development-0b993e22410c7952394ac19ce3b41b722a97b93138a9a002091e1e5226d29bf5.png":{"logical_path":"registrar/bg-development.png","mtime":"2015-06-03T17:32:03+03:00","size":14496,"digest":"0b993e22410c7952394ac19ce3b41b722a97b93138a9a002091e1e5226d29bf5","integrity":"sha256-C5k+IkEMeVI5SsGc47QbciqXuTE4qaACCR4eUibSm/U="},"registrar/bg-staging-6276f8c00911bc99f301f919e408ae3ef726c7378324ac55fd5d378ba3a4dc2d.png":{"logical_path":"registrar/bg-staging.png","mtime":"2015-06-03T17:32:03+03:00","size":12294,"digest":"6276f8c00911bc99f301f919e408ae3ef726c7378324ac55fd5d378ba3a4dc2d","integrity":"sha256-Ynb4wAkRvJnzAfkZ5AiuPvcmxzeDJKxV/V03i6Ok3C0="},"registrar/favicon-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.ico":{"logical_path":"registrar/favicon.ico","mtime":"2015-06-03T17:32:03+03:00","size":0,"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"seb-9c9d943014cc4ee706244893cd8a2c4a8a7cc97bfbdef6a66e22c72f33d5f25e.png":{"logical_path":"seb.png","mtime":"2015-06-03T17:32:03+03:00","size":2439,"digest":"9c9d943014cc4ee706244893cd8a2c4a8a7cc97bfbdef6a66e22c72f33d5f25e","integrity":"sha256-nJ2UMBTMTucGJEiTzYosSop8yXv73vambiLHLzPV8l4="},"staging-6276f8c00911bc99f301f919e408ae3ef726c7378324ac55fd5d378ba3a4dc2d.png":{"logical_path":"staging.png","mtime":"2015-04-30T12:07:54+03:00","size":12294,"digest":"6276f8c00911bc99f301f919e408ae3ef726c7378324ac55fd5d378ba3a4dc2d","integrity":"sha256-Ynb4wAkRvJnzAfkZ5AiuPvcmxzeDJKxV/V03i6Ok3C0="},"swed-2cf45729062cf5fa634247ba372c579c97f382e5cc43fa111219077e7473fdbb.png":{"logical_path":"swed.png","mtime":"2015-06-03T17:32:03+03:00","size":1521,"digest":"2cf45729062cf5fa634247ba372c579c97f382e5cc43fa111219077e7473fdbb","integrity":"sha256-LPRXKQYs9fpjQke6NyxXnJfzguXMQ/oREhkHfnRz/bs="},"test-9ac45a6b3c13dd5c5cf1b5d18c6f24a537dd2e4598238527d232a3e2ea5b5947.png":{"logical_path":"test.png","mtime":"2015-06-03T17:32:03+03:00","size":7089,"digest":"9ac45a6b3c13dd5c5cf1b5d18c6f24a537dd2e4598238527d232a3e2ea5b5947","integrity":"sha256-msRaazwT3Vxc8bXRjG8kpTfdLkWYI4Un0jKj4upbWUc="},"admin/application-2e4aafc94dbce8d43d7bac4eb5521a14a72e3bbeece3b4363494d70fcd274542.js":{"logical_path":"admin/application.js","mtime":"2015-06-03T23:30:45+03:00","size":287,"digest":"2e4aafc94dbce8d43d7bac4eb5521a14a72e3bbeece3b4363494d70fcd274542","integrity":"sha256-LkqvyU286NQ9e6xOtVIaFKcuO77s47Q2NJTXD80nRUI="},"registrar/application-978b21a99ae3caabb8a9e301dccaa0b93f86cc789a9595158c98ee51393b8cb9.js":{"logical_path":"registrar/application.js","mtime":"2015-06-03T23:27:07+03:00","size":804,"digest":"978b21a99ae3caabb8a9e301dccaa0b93f86cc789a9595158c98ee51393b8cb9","integrity":"sha256-l4shqZrjyqu4qeMB3MqguT+GzHialZUVjJjuUTk7jLk="},"etelkalight-webfont-baf7e35ab2f64bf1c6fa4476d3934c7422062995738fd9e5715b02f55002d7c0.eot":{"logical_path":"etelkalight-webfont.eot","mtime":"2015-06-03T17:32:03+03:00","size":23109,"digest":"baf7e35ab2f64bf1c6fa4476d3934c7422062995738fd9e5715b02f55002d7c0","integrity":"sha256-uvfjWrL2S/HG+kR205NMdCIGKZVzj9nlcVsC9VAC18A="},"etelkalight-webfont-2b575f6e4696d74957af27a7c7bb7976b7ca31d0ebe8ec25bb4c3494d5d16e24.svg":{"logical_path":"etelkalight-webfont.svg","mtime":"2015-06-03T17:32:03+03:00","size":64768,"digest":"2b575f6e4696d74957af27a7c7bb7976b7ca31d0ebe8ec25bb4c3494d5d16e24","integrity":"sha256-K1dfbkaW10lXryenx7t5drfKMdDr6Owlu0w0lNXRbiQ="},"etelkalight-webfont-f68a2db6346d864f82c3b3e725ee60b0217e91e46ec47f96710f70f996b61af1.ttf":{"logical_path":"etelkalight-webfont.ttf","mtime":"2015-06-03T17:32:03+03:00","size":49748,"digest":"f68a2db6346d864f82c3b3e725ee60b0217e91e46ec47f96710f70f996b61af1","integrity":"sha256-9oottjRthk+Cw7PnJe5gsCF+keRuxH+WcQ9w+Za2GvE="},"etelkalight-webfont-1ed38dbac6b817bf74bd46a98d61005aa2615db7ac743e4037364d1021084043.woff":{"logical_path":"etelkalight-webfont.woff","mtime":"2015-06-03T17:32:03+03:00","size":26204,"digest":"1ed38dbac6b817bf74bd46a98d61005aa2615db7ac743e4037364d1021084043","integrity":"sha256-HtONusa4F790vUapjWEAWqJhXbesdD5ANzZNECEIQEM="},"etelkalightbold-webfont-1d94cabe6fb55b05f746fe0aa51a7a503683d7afdb68360ed26bfac03e1b3c39.eot":{"logical_path":"etelkalightbold-webfont.eot","mtime":"2015-06-03T17:32:03+03:00","size":23707,"digest":"1d94cabe6fb55b05f746fe0aa51a7a503683d7afdb68360ed26bfac03e1b3c39","integrity":"sha256-HZTKvm+1WwX3Rv4KpRp6UDaD16/baDYO0mv6wD4bPDk="},"etelkalightbold-webfont-bb0c8e17b99b10f211be3531a51d6ad48a5c6e4670c8fb6160a329fa4758c555.svg":{"logical_path":"etelkalightbold-webfont.svg","mtime":"2015-06-03T17:32:03+03:00","size":62829,"digest":"bb0c8e17b99b10f211be3531a51d6ad48a5c6e4670c8fb6160a329fa4758c555","integrity":"sha256-uwyOF7mbEPIRvjUxpR1q1IpcbkZwyPthYKMp+kdYxVU="},"etelkalightbold-webfont-0f06d1e7f099578e1cc0e9b1875aca2a7128c0ca0d640fd504e97bae0b028429.ttf":{"logical_path":"etelkalightbold-webfont.ttf","mtime":"2015-06-03T17:32:03+03:00","size":51172,"digest":"0f06d1e7f099578e1cc0e9b1875aca2a7128c0ca0d640fd504e97bae0b028429","integrity":"sha256-DwbR5/CZV44cwOmxh1rKKnEowMoNZA/VBOl7rgsChCk="},"etelkalightbold-webfont-d608c036b3e3f04ca87a1c494f8d9e9620a729b2760b5eb1dcee52c4bc8e8805.woff":{"logical_path":"etelkalightbold-webfont.woff","mtime":"2015-06-03T17:32:03+03:00","size":26956,"digest":"d608c036b3e3f04ca87a1c494f8d9e9620a729b2760b5eb1dcee52c4bc8e8805","integrity":"sha256-1gjANrPj8EyoehxJT42eliCnKbJ2C16x3O5SxLyOiAU="},"etelkalightitalic-webfont-ce5cdffe6c589a6dc6bd2c482c718486ff5fb416ab01740750db325179e58654.eot":{"logical_path":"etelkalightitalic-webfont.eot","mtime":"2015-06-03T17:32:03+03:00","size":26426,"digest":"ce5cdffe6c589a6dc6bd2c482c718486ff5fb416ab01740750db325179e58654","integrity":"sha256-zlzf/mxYmm3GvSxILHGEhv9ftBarAXQHUNsyUXnlhlQ="},"etelkalightitalic-webfont-dd5353c2af4ea63e1d0e99ec5f1f85162cee0c4dd0a3840260a2606eefc3e517.svg":{"logical_path":"etelkalightitalic-webfont.svg","mtime":"2015-06-03T17:32:03+03:00","size":69857,"digest":"dd5353c2af4ea63e1d0e99ec5f1f85162cee0c4dd0a3840260a2606eefc3e517","integrity":"sha256-3VNTwq9Opj4dDpnsXx+FFizuDE3Qo4QCYKJgbu/D5Rc="},"etelkalightitalic-webfont-54eb91ad0e0b639f50be02b7c25836c99ad989185f5d2a240d60ea14a1b7384a.ttf":{"logical_path":"etelkalightitalic-webfont.ttf","mtime":"2015-06-03T17:32:03+03:00","size":57040,"digest":"54eb91ad0e0b639f50be02b7c25836c99ad989185f5d2a240d60ea14a1b7384a","integrity":"sha256-VOuRrQ4LY59QvgK3wlg2yZrZiRhfXSokDWDqFKG3OEo="},"etelkalightitalic-webfont-d1fb9621d40ef45104078a4a5b98ce4cba00872cf8ac56e299cf1397c146cac3.woff":{"logical_path":"etelkalightitalic-webfont.woff","mtime":"2015-06-03T17:32:03+03:00","size":29884,"digest":"d1fb9621d40ef45104078a4a5b98ce4cba00872cf8ac56e299cf1397c146cac3","integrity":"sha256-0fuWIdQO9FEEB4pKW5jOTLoAhyz4rFbimc8Tl8FGysM="},"infotexb-webfont-1951e43e1d9ab99b0d4998abba4aab34f3e68b337be90800db517e4a8d27d001.eot":{"logical_path":"infotexb-webfont.eot","mtime":"2015-06-03T17:32:03+03:00","size":23124,"digest":"1951e43e1d9ab99b0d4998abba4aab34f3e68b337be90800db517e4a8d27d001","integrity":"sha256-GVHkPh2auZsNSZirukqrNPPmizN76QgA21F+So0n0AE="},"infotexb-webfont-0dda72e34d0d0ced7693b55ed08acc60fb1a9036afd7736e432ac3f22f2e6fdf.svg":{"logical_path":"infotexb-webfont.svg","mtime":"2015-06-03T17:32:03+03:00","size":90188,"digest":"0dda72e34d0d0ced7693b55ed08acc60fb1a9036afd7736e432ac3f22f2e6fdf","integrity":"sha256-Ddpy400NDO12k7Ve0IrMYPsakDav13NuQyrD8i8ub98="},"infotexb-webfont-c0737d1e2edff50645e201bf99f68f2313502ee2bdeb2e56435ee24721baf5cd.ttf":{"logical_path":"infotexb-webfont.ttf","mtime":"2015-06-03T17:32:03+03:00","size":47396,"digest":"c0737d1e2edff50645e201bf99f68f2313502ee2bdeb2e56435ee24721baf5cd","integrity":"sha256-wHN9Hi7f9QZF4gG/mfaPIxNQLuK96y5WQ17iRyG69c0="},"infotexb-webfont-8da32e6db23c39390c55dd5ea8949714757fddba516c5db65e72867504493fbc.woff":{"logical_path":"infotexb-webfont.woff","mtime":"2015-06-03T17:32:03+03:00","size":26228,"digest":"8da32e6db23c39390c55dd5ea8949714757fddba516c5db65e72867504493fbc","integrity":"sha256-jaMubbI8OTkMVd1eqJSXFHV/3bpRbF22XnKGdQRJP7w="},"infotexm-webfont-74df99faeb66d8b02966b8884b860af03c359ed41d348ddb813dbcc3c460eb26.eot":{"logical_path":"infotexm-webfont.eot","mtime":"2015-06-03T17:32:03+03:00","size":23273,"digest":"74df99faeb66d8b02966b8884b860af03c359ed41d348ddb813dbcc3c460eb26","integrity":"sha256-dN+Z+utm2LApZriIS4YK8Dw1ntQdNI3bgT28w8Rg6yY="},"infotexm-webfont-0b52ef10620b8cb7289dc809aac67826d5031e6ab040194fdb7365dc83e95557.svg":{"logical_path":"infotexm-webfont.svg","mtime":"2015-06-03T17:32:03+03:00","size":90423,"digest":"0b52ef10620b8cb7289dc809aac67826d5031e6ab040194fdb7365dc83e95557","integrity":"sha256-C1LvEGILjLconcgJqsZ4JtUDHmqwQBlP23Nl3IPpVVc="},"infotexm-webfont-1d244d27a4ec4c1a5f98c82966faa26e7855c4292c730429477003b6dab5c08b.ttf":{"logical_path":"infotexm-webfont.ttf","mtime":"2015-06-03T17:32:03+03:00","size":47484,"digest":"1d244d27a4ec4c1a5f98c82966faa26e7855c4292c730429477003b6dab5c08b","integrity":"sha256-HSRNJ6TsTBpfmMgpZvqibnhVxCkscwQpR3ADttq1wIs="},"infotexm-webfont-872b5ab4e0b7de6655a52f137a3c99f1e7941fa91ff21a56550f2039834ee9d0.woff":{"logical_path":"infotexm-webfont.woff","mtime":"2015-06-03T17:32:03+03:00","size":26492,"digest":"872b5ab4e0b7de6655a52f137a3c99f1e7941fa91ff21a56550f2039834ee9d0","integrity":"sha256-hytatOC33mZVpS8TejyZ8eeUH6kf8hpWVQ8gOYNO6dA="},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-9a8492a580bf85d3e98ae8861fbd45567e5a1f83eeafcf9574da0399d5f602ab.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2015-06-03T16:55:27+03:00","size":180,"digest":"9a8492a580bf85d3e98ae8861fbd45567e5a1f83eeafcf9574da0399d5f602ab","integrity":"sha256-moSSpYC/hdPpiuiGH71FVn5aH4Pur8+VdNoDmdX2Aqs="},"jquery-ui/ui-bg_flat_75_ffffff_40x100-39ab7ccd9f4e82579da78a9241265df288d8eb65dbbd7cf48aed2d0129887df5.png":{"logical_path":"jquery-ui/ui-bg_flat_75_ffffff_40x100.png","mtime":"2015-06-03T16:55:27+03:00","size":178,"digest":"39ab7ccd9f4e82579da78a9241265df288d8eb65dbbd7cf48aed2d0129887df5","integrity":"sha256-Oat8zZ9Ogledp4qSQSZd8ojY62XbvXz0iu0tASmIffU="},"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-691597e8a40a891ea94d3589976ecfc33e6145c49422443b00ac2b5a0022964c.png":{"logical_path":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png","mtime":"2015-06-03T16:55:27+03:00","size":120,"digest":"691597e8a40a891ea94d3589976ecfc33e6145c49422443b00ac2b5a0022964c","integrity":"sha256-aRWX6KQKiR6pTTWJl27Pwz5hRcSUIkQ7AKwrWgAilkw="},"jquery-ui/ui-bg_glass_65_ffffff_1x400-f0e6cd91b837d5c5644d026e5ffeccd907953317cd5c0f689901733afda260b2.png":{"logical_path":"jquery-ui/ui-bg_glass_65_ffffff_1x400.png","mtime":"2015-06-03T16:55:27+03:00","size":105,"digest":"f0e6cd91b837d5c5644d026e5ffeccd907953317cd5c0f689901733afda260b2","integrity":"sha256-8ObNkbg31cVkTQJuX/7M2QeVMxfNXA9omQFzOv2iYLI="},"jquery-ui/ui-bg_glass_75_dadada_1x400-c108f5cbf2dd9ec07a26530695ddd95e1664597ce6c056ae44c162cc2e28cec4.png":{"logical_path":"jquery-ui/ui-bg_glass_75_dadada_1x400.png","mtime":"2015-06-03T16:55:27+03:00","size":111,"digest":"c108f5cbf2dd9ec07a26530695ddd95e1664597ce6c056ae44c162cc2e28cec4","integrity":"sha256-wQj1y/LdnsB6JlMGld3ZXhZkWXzmwFauRMFizC4ozsQ="},"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-ddf5dd4e0ef2b185e8bb0af7b6e90ebe74a84384cb4700658e76e754c8bfe550.png":{"logical_path":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png","mtime":"2015-06-03T16:55:27+03:00","size":110,"digest":"ddf5dd4e0ef2b185e8bb0af7b6e90ebe74a84384cb4700658e76e754c8bfe550","integrity":"sha256-3fXdTg7ysYXouwr3tukOvnSoQ4TLRwBljnbnVMi/5VA="},"jquery-ui/ui-bg_glass_95_fef1ec_1x400-f6f1c1bedf1a0f37cfef81d12f5f012869d1ee7c984775a569827a1784d34f5c.png":{"logical_path":"jquery-ui/ui-bg_glass_95_fef1ec_1x400.png","mtime":"2015-06-03T16:55:27+03:00","size":119,"digest":"f6f1c1bedf1a0f37cfef81d12f5f012869d1ee7c984775a569827a1784d34f5c","integrity":"sha256-9vHBvt8aDzfP74HRL18BKGnR7nyYR3WlaYJ6F4TTT1w="},"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-54270656df079c4da5182629a080fc633b6f84b87985eb016d25a560e2c38d4a.png":{"logical_path":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png","mtime":"2015-06-03T16:55:27+03:00","size":101,"digest":"54270656df079c4da5182629a080fc633b6f84b87985eb016d25a560e2c38d4a","integrity":"sha256-VCcGVt8HnE2lGCYpoID8YztvhLh5hesBbSWlYOLDjUo="},"jquery-ui/ui-icons_222222_256x240-57adb0d65f4e91dacfee975d9574422bee7486c8a182d60133728c672f2cdbbc.png":{"logical_path":"jquery-ui/ui-icons_222222_256x240.png","mtime":"2015-06-03T16:55:27+03:00","size":4369,"digest":"57adb0d65f4e91dacfee975d9574422bee7486c8a182d60133728c672f2cdbbc","integrity":"sha256-V62w1l9OkdrP7pddlXRCK+50hsihgtYBM3KMZy8s27w="},"jquery-ui/ui-icons_2e83ff_256x240-20f8c6667afc48aa433ee9eb6d8a0584bdbd6b4a4a9091ff1e6b3adb31e63bd9.png":{"logical_path":"jquery-ui/ui-icons_2e83ff_256x240.png","mtime":"2015-06-03T16:55:27+03:00","size":4369,"digest":"20f8c6667afc48aa433ee9eb6d8a0584bdbd6b4a4a9091ff1e6b3adb31e63bd9","integrity":"sha256-IPjGZnr8SKpDPunrbYoFhL29a0pKkJH/Hms62zHmO9k="},"jquery-ui/ui-icons_454545_256x240-07460e843c3e59aaadbb34231e699e856a2980753c7a47b66447da5d9f93fb7f.png":{"logical_path":"jquery-ui/ui-icons_454545_256x240.png","mtime":"2015-06-03T16:55:27+03:00","size":4369,"digest":"07460e843c3e59aaadbb34231e699e856a2980753c7a47b66447da5d9f93fb7f","integrity":"sha256-B0YOhDw+WaqtuzQjHmmehWopgHU8eke2ZEfaXZ+T+38="},"jquery-ui/ui-icons_888888_256x240-ea2e29625de3463465e93b002b065f5833e05b97f7a052b1c141e754d62e1a8b.png":{"logical_path":"jquery-ui/ui-icons_888888_256x240.png","mtime":"2015-06-03T16:55:27+03:00","size":4369,"digest":"ea2e29625de3463465e93b002b065f5833e05b97f7a052b1c141e754d62e1a8b","integrity":"sha256-6i4pYl3jRjRl6TsAKwZfWDPgW5f3oFKxwUHnVNYuGos="},"jquery-ui/ui-icons_cd0a0a_256x240-1e32c6dbf5d3fd342f27a78aa881550d6412aa207f48468724a6a15402b6041b.png":{"logical_path":"jquery-ui/ui-icons_cd0a0a_256x240.png","mtime":"2015-06-03T16:55:27+03:00","size":4369,"digest":"1e32c6dbf5d3fd342f27a78aa881550d6412aa207f48468724a6a15402b6041b","integrity":"sha256-HjLG2/XT/TQvJ6eKqIFVDWQSqiB/SEaHJKahVAK2BBs="},"bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot":{"logical_path":"bootstrap/glyphicons-halflings-regular.eot","mtime":"2015-05-12T12:15:59+03:00","size":20127,"digest":"13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407","integrity":"sha256-E2NNqH2eI/jD7ZEIzhck0YOjmtBy5z4bPYy/ZG0tBAc="},"bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg":{"logical_path":"bootstrap/glyphicons-halflings-regular.svg","mtime":"2015-05-12T12:15:59+03:00","size":108738,"digest":"42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5","integrity":"sha256-QvYGWdJlwaPDD5+kKry7Vr1KU69Ng9MW1t16NpA8Q+U="},"bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf":{"logical_path":"bootstrap/glyphicons-halflings-regular.ttf","mtime":"2015-05-12T12:15:59+03:00","size":45404,"digest":"e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456","integrity":"sha256-45UEQJN1fYKvyxOJV9BqHqk2G9zwtELQahioBRr1dFY="},"bootstrap/glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff","mtime":"2015-05-12T12:15:59+03:00","size":23424,"digest":"a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742","integrity":"sha256-omOU9+3hAMoRjv8u2ghZYnWpg5uVnCJuFUOVV6WoB0I="},"bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff2","mtime":"2015-05-12T12:15:59+03:00","size":18028,"digest":"fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c","integrity":"sha256-/hhdEaSWdokNR7t4MxKgzaWkTEA5IUCU55V7TAQO8Rw="},"admin-manifest-5f612f59c9effcca0be5396c4f00654de236d2bb1b16bbdf929b47e6504381f3.js":{"logical_path":"admin-manifest.js","mtime":"2015-06-04T00:03:26+03:00","size":323893,"digest":"5f612f59c9effcca0be5396c4f00654de236d2bb1b16bbdf929b47e6504381f3","integrity":"sha256-X2EvWcnv/MoL5TlsTwBlTeI20rsbFrvfkptH5lBDgfM="},"registrar-manifest-413fda057832b25dee9d45f5f07b29ac369fc85f51ecd9e7bc2cdefa5297b4f3.js":{"logical_path":"registrar-manifest.js","mtime":"2015-06-04T00:03:26+03:00","size":314906,"digest":"413fda057832b25dee9d45f5f07b29ac369fc85f51ecd9e7bc2cdefa5297b4f3","integrity":"sha256-QT/aBXgysl3unUX18HsprDafyF9R7NnnvCze+lKXtPM="},"registrant-manifest-f9e9d795de4f7dabe387365fd329c1cb24da923bd357988c120cc5710230cc48.js":{"logical_path":"registrant-manifest.js","mtime":"2015-06-04T00:03:26+03:00","size":314906,"digest":"f9e9d795de4f7dabe387365fd329c1cb24da923bd357988c120cc5710230cc48","integrity":"sha256-+enXld5PfavjhzZf0ynByyTakjvTV5iMEgzFcQIwzEg="},"admin-manifest-eb07b709ba72ae98ac7c5fa544302094d97a44dd17e7f1e74a31f34c96c7f408.css":{"logical_path":"admin-manifest.css","mtime":"2015-06-17T07:55:18+03:00","size":166965,"digest":"eb07b709ba72ae98ac7c5fa544302094d97a44dd17e7f1e74a31f34c96c7f408","integrity":"sha256-6we3CbpyrpisfF+lRDAglNl6RN0X5/HnSjHzTJbH9Ag="},"registrar-manifest-a5bc16a2cd0ebd0bd28da13c2b56f7ebfcb196e17c6f21cc3f14d893750e25a4.css":{"logical_path":"registrar-manifest.css","mtime":"2015-06-17T07:55:18+03:00","size":192188,"digest":"a5bc16a2cd0ebd0bd28da13c2b56f7ebfcb196e17c6f21cc3f14d893750e25a4","integrity":"sha256-pbwWos0OvQvSjaE8K1b36/yxluF8byHMPxTYk3UOJaQ="},"registrant-manifest-45f5ecce96f10603807be03b9f6dacd1baa29ced98279059af55a9ac4cdd7b51.css":{"logical_path":"registrant-manifest.css","mtime":"2015-06-17T07:55:18+03:00","size":192373,"digest":"45f5ecce96f10603807be03b9f6dacd1baa29ced98279059af55a9ac4cdd7b51","integrity":"sha256-RfXszpbxBgOAe+A7n22s0bqinO2YJ5BZr1WprEzde1E="}},"assets":{"alpha.png":"alpha-9ac45a6b3c13dd5c5cf1b5d18c6f24a537dd2e4598238527d232a3e2ea5b5947.png","development.png":"development-0b993e22410c7952394ac19ce3b41b722a97b93138a9a002091e1e5226d29bf5.png","staging.png":"staging-6276f8c00911bc99f301f919e408ae3ef726c7378324ac55fd5d378ba3a4dc2d.png","application.js":"application-805c69cec6ea75185028b7e45efee5fd.js","application.css":"application-993e676726143d5ead2f8840bc8894a7.css","login.css":"login-3546bfbfa6594a3ce191938a5e6d3066.css","bootstrap/glyphicons-halflings-regular.eot":"bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot","bootstrap/glyphicons-halflings-regular.svg":"bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg","bootstrap/glyphicons-halflings-regular.ttf":"bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf","bootstrap/glyphicons-halflings-regular.woff":"bootstrap/glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff","bg.jpg":"bg-b8036abd2f0f36e3ab54d5d5b25b0fbac11d63ec6106d959df3fa180b379de05.jpg","danske.png":"danske-07a4395cc406785da129414e15872fe1d6a4f6f6da0066da6701b56cdb72ea96.png","eis-logo-et.png":"eis-logo-et-86a549d266cda73e3225c5eeba14532c59d498e1fd980ec129fded68da8bb307.png","favicon.ico":"favicon-309e00e2f78f9a2b042abc2806a8a4ed9cf6bb5d3f00ccc0985b1308bfd86c49.ico","id_card.gif":"id_card-ea506a49b25c8de4e68e786d90f5ec5defb6c8e895b90f2f129815f5e550fe8e.gif","lhv.png":"lhv-4d09d3126a05df392b73c54fa9b1eb605798c2e9bd361cf44500f73038832030.png","mid.gif":"mid-275543ecea377debe1ac892470f3aea4f7e7f0f9089fc0fbea4de410742e5239.gif","nordea.png":"nordea-75c938c7436e0c8316f056be8df8acd0e8b16e09790e78f78da96d9f8633ef3b.png","registrar/bg-alpha.png":"registrar/bg-alpha-9ac45a6b3c13dd5c5cf1b5d18c6f24a537dd2e4598238527d232a3e2ea5b5947.png","registrar/bg-development.png":"registrar/bg-development-0b993e22410c7952394ac19ce3b41b722a97b93138a9a002091e1e5226d29bf5.png","registrar/bg-staging.png":"registrar/bg-staging-6276f8c00911bc99f301f919e408ae3ef726c7378324ac55fd5d378ba3a4dc2d.png","registrar/favicon.ico":"registrar/favicon-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.ico","seb.png":"seb-9c9d943014cc4ee706244893cd8a2c4a8a7cc97bfbdef6a66e22c72f33d5f25e.png","swed.png":"swed-2cf45729062cf5fa634247ba372c579c97f382e5cc43fa111219077e7473fdbb.png","test.png":"test-9ac45a6b3c13dd5c5cf1b5d18c6f24a537dd2e4598238527d232a3e2ea5b5947.png","admin-manifest.js":"admin-manifest-5f612f59c9effcca0be5396c4f00654de236d2bb1b16bbdf929b47e6504381f3.js","admin/application.js":"admin/application-2e4aafc94dbce8d43d7bac4eb5521a14a72e3bbeece3b4363494d70fcd274542.js","registrant-manifest.js":"registrant-manifest-f9e9d795de4f7dabe387365fd329c1cb24da923bd357988c120cc5710230cc48.js","registrar-manifest.js":"registrar-manifest-413fda057832b25dee9d45f5f07b29ac369fc85f51ecd9e7bc2cdefa5297b4f3.js","registrar/application.js":"registrar/application-978b21a99ae3caabb8a9e301dccaa0b93f86cc789a9595158c98ee51393b8cb9.js","admin-manifest.css":"admin-manifest-eb07b709ba72ae98ac7c5fa544302094d97a44dd17e7f1e74a31f34c96c7f408.css","registrant-manifest.css":"registrant-manifest-45f5ecce96f10603807be03b9f6dacd1baa29ced98279059af55a9ac4cdd7b51.css","registrar-manifest.css":"registrar-manifest-a5bc16a2cd0ebd0bd28da13c2b56f7ebfcb196e17c6f21cc3f14d893750e25a4.css","shared/pdf.css":"shared/pdf-f6e83972424c39d3f7ebe55fb4679237496990148efb3bb9a2a10a2c070be1a7.css","etelkalight-webfont.eot":"etelkalight-webfont-baf7e35ab2f64bf1c6fa4476d3934c7422062995738fd9e5715b02f55002d7c0.eot","etelkalight-webfont.svg":"etelkalight-webfont-2b575f6e4696d74957af27a7c7bb7976b7ca31d0ebe8ec25bb4c3494d5d16e24.svg","etelkalight-webfont.ttf":"etelkalight-webfont-f68a2db6346d864f82c3b3e725ee60b0217e91e46ec47f96710f70f996b61af1.ttf","etelkalight-webfont.woff":"etelkalight-webfont-1ed38dbac6b817bf74bd46a98d61005aa2615db7ac743e4037364d1021084043.woff","etelkalightbold-webfont.eot":"etelkalightbold-webfont-1d94cabe6fb55b05f746fe0aa51a7a503683d7afdb68360ed26bfac03e1b3c39.eot","etelkalightbold-webfont.svg":"etelkalightbold-webfont-bb0c8e17b99b10f211be3531a51d6ad48a5c6e4670c8fb6160a329fa4758c555.svg","etelkalightbold-webfont.ttf":"etelkalightbold-webfont-0f06d1e7f099578e1cc0e9b1875aca2a7128c0ca0d640fd504e97bae0b028429.ttf","etelkalightbold-webfont.woff":"etelkalightbold-webfont-d608c036b3e3f04ca87a1c494f8d9e9620a729b2760b5eb1dcee52c4bc8e8805.woff","etelkalightitalic-webfont.eot":"etelkalightitalic-webfont-ce5cdffe6c589a6dc6bd2c482c718486ff5fb416ab01740750db325179e58654.eot","etelkalightitalic-webfont.svg":"etelkalightitalic-webfont-dd5353c2af4ea63e1d0e99ec5f1f85162cee0c4dd0a3840260a2606eefc3e517.svg","etelkalightitalic-webfont.ttf":"etelkalightitalic-webfont-54eb91ad0e0b639f50be02b7c25836c99ad989185f5d2a240d60ea14a1b7384a.ttf","etelkalightitalic-webfont.woff":"etelkalightitalic-webfont-d1fb9621d40ef45104078a4a5b98ce4cba00872cf8ac56e299cf1397c146cac3.woff","infotexb-webfont.eot":"infotexb-webfont-1951e43e1d9ab99b0d4998abba4aab34f3e68b337be90800db517e4a8d27d001.eot","infotexb-webfont.svg":"infotexb-webfont-0dda72e34d0d0ced7693b55ed08acc60fb1a9036afd7736e432ac3f22f2e6fdf.svg","infotexb-webfont.ttf":"infotexb-webfont-c0737d1e2edff50645e201bf99f68f2313502ee2bdeb2e56435ee24721baf5cd.ttf","infotexb-webfont.woff":"infotexb-webfont-8da32e6db23c39390c55dd5ea8949714757fddba516c5db65e72867504493fbc.woff","infotexm-webfont.eot":"infotexm-webfont-74df99faeb66d8b02966b8884b860af03c359ed41d348ddb813dbcc3c460eb26.eot","infotexm-webfont.svg":"infotexm-webfont-0b52ef10620b8cb7289dc809aac67826d5031e6ab040194fdb7365dc83e95557.svg","infotexm-webfont.ttf":"infotexm-webfont-1d244d27a4ec4c1a5f98c82966faa26e7855c4292c730429477003b6dab5c08b.ttf","infotexm-webfont.woff":"infotexm-webfont-872b5ab4e0b7de6655a52f137a3c99f1e7941fa91ff21a56550f2039834ee9d0.woff","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-9a8492a580bf85d3e98ae8861fbd45567e5a1f83eeafcf9574da0399d5f602ab.png","jquery-ui/ui-bg_flat_75_ffffff_40x100.png":"jquery-ui/ui-bg_flat_75_ffffff_40x100-39ab7ccd9f4e82579da78a9241265df288d8eb65dbbd7cf48aed2d0129887df5.png","jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-691597e8a40a891ea94d3589976ecfc33e6145c49422443b00ac2b5a0022964c.png","jquery-ui/ui-bg_glass_65_ffffff_1x400.png":"jquery-ui/ui-bg_glass_65_ffffff_1x400-f0e6cd91b837d5c5644d026e5ffeccd907953317cd5c0f689901733afda260b2.png","jquery-ui/ui-bg_glass_75_dadada_1x400.png":"jquery-ui/ui-bg_glass_75_dadada_1x400-c108f5cbf2dd9ec07a26530695ddd95e1664597ce6c056ae44c162cc2e28cec4.png","jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-ddf5dd4e0ef2b185e8bb0af7b6e90ebe74a84384cb4700658e76e754c8bfe550.png","jquery-ui/ui-bg_glass_95_fef1ec_1x400.png":"jquery-ui/ui-bg_glass_95_fef1ec_1x400-f6f1c1bedf1a0f37cfef81d12f5f012869d1ee7c984775a569827a1784d34f5c.png","jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-54270656df079c4da5182629a080fc633b6f84b87985eb016d25a560e2c38d4a.png","jquery-ui/ui-icons_222222_256x240.png":"jquery-ui/ui-icons_222222_256x240-57adb0d65f4e91dacfee975d9574422bee7486c8a182d60133728c672f2cdbbc.png","jquery-ui/ui-icons_2e83ff_256x240.png":"jquery-ui/ui-icons_2e83ff_256x240-20f8c6667afc48aa433ee9eb6d8a0584bdbd6b4a4a9091ff1e6b3adb31e63bd9.png","jquery-ui/ui-icons_454545_256x240.png":"jquery-ui/ui-icons_454545_256x240-07460e843c3e59aaadbb34231e699e856a2980753c7a47b66447da5d9f93fb7f.png","jquery-ui/ui-icons_888888_256x240.png":"jquery-ui/ui-icons_888888_256x240-ea2e29625de3463465e93b002b065f5833e05b97f7a052b1c141e754d62e1a8b.png","jquery-ui/ui-icons_cd0a0a_256x240.png":"jquery-ui/ui-icons_cd0a0a_256x240-1e32c6dbf5d3fd342f27a78aa881550d6412aa207f48468724a6a15402b6041b.png","select2-spinner.gif":"select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif","select2.png":"select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png","select2x2.png":"select2x2-6fe28d687dc0ed4d96016238c608ba1e7198c9c9accfa0b360b78018b9fb9bc2.png","bootstrap/glyphicons-halflings-regular.woff2":"bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2"}} \ No newline at end of file diff --git a/public/assets/admin-manifest-4df541812fe4c37894758e9b93a255ddeb09cae1a258ee62f8cb0746496124a0.css b/public/assets/admin-manifest-4df541812fe4c37894758e9b93a255ddeb09cae1a258ee62f8cb0746496124a0.css new file mode 100644 index 000000000..346fc2af2 --- /dev/null +++ b/public/assets/admin-manifest-4df541812fe4c37894758e9b93a255ddeb09cae1a258ee62f8cb0746496124a0.css @@ -0,0 +1,30 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url("/assets/bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot");src:url("/assets/bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot?#iefix") format("embedded-opentype"),url("/assets/bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2") format("woff2"),url("/assets/bootstrap/glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff") format("woff"),url("/assets/bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf") format("truetype"),url("/assets/bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"EtelkaLightProRegular", Arial, Helvetica, sans-serif;font-size:14px;line-height:1.42857143;color:#333333;background-color:#F8F8F8}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#F8F8F8;border:1px solid #ddd;border-radius:2px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eeeeee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#777777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:26px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase,.initialism{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff}.bg-primary{background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eeeeee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777777}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eeeeee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo, Monaco, Consolas, "Courier New", monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:2px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:2px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 768px){.container{width:750px}}@media (min-width: 992px){.container{width:970px}}@media (min-width: 1200px){.container{width:860px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.33333333%}.col-xs-2{width:16.66666667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333%}.col-xs-5{width:41.66666667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333333%}.col-xs-8{width:66.66666667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333%}.col-xs-11{width:91.66666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333333%}.col-xs-push-2{left:16.66666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333333%}.col-xs-push-5{left:41.66666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333333%}.col-xs-push-8{left:66.66666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333333%}.col-xs-push-11{left:91.66666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#F8F8F8}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eeeeee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,.input-group-sm>input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,.input-group-sm input[type="date"],input[type="time"].input-sm,.input-group-sm>input[type="time"].form-control,.input-group-sm>input[type="time"].input-group-addon,.input-group-sm>.input-group-btn>input[type="time"].btn,.input-group-sm input[type="time"],input[type="datetime-local"].input-sm,.input-group-sm>input[type="datetime-local"].form-control,.input-group-sm>input[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>input[type="datetime-local"].btn,.input-group-sm input[type="datetime-local"],input[type="month"].input-sm,.input-group-sm>input[type="month"].form-control,.input-group-sm>input[type="month"].input-group-addon,.input-group-sm>.input-group-btn>input[type="month"].btn,.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,.input-group-lg>input[type="date"].form-control,.input-group-lg>input[type="date"].input-group-addon,.input-group-lg>.input-group-btn>input[type="date"].btn,.input-group-lg input[type="date"],input[type="time"].input-lg,.input-group-lg>input[type="time"].form-control,.input-group-lg>input[type="time"].input-group-addon,.input-group-lg>.input-group-btn>input[type="time"].btn,.input-group-lg input[type="time"],input[type="datetime-local"].input-lg,.input-group-lg>input[type="datetime-local"].form-control,.input-group-lg>input[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>input[type="datetime-local"].btn,.input-group-lg input[type="datetime-local"],input[type="month"].input-lg,.input-group-lg>input[type="month"].form-control,.input-group-lg>input[type="month"].input-group-addon,.input-group-lg>.input-group-btn>input[type="month"].btn,.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:30px;line-height:30px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;min-height:32px}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:46px;line-height:46px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;min-height:38px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.field_with_errors .help-block,.has-error .control-label,.field_with_errors .control-label,.has-error .radio,.field_with_errors .radio,.has-error .checkbox,.field_with_errors .checkbox,.has-error .radio-inline,.field_with_errors .radio-inline,.has-error .checkbox-inline,.field_with_errors .checkbox-inline,.has-error.radio label,.radio.field_with_errors label,.has-error.checkbox label,.checkbox.field_with_errors label,.has-error.radio-inline label,.radio-inline.field_with_errors label,.has-error.checkbox-inline label,.checkbox-inline.field_with_errors label{color:#a94442}.has-error .form-control,.field_with_errors .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus,.field_with_errors .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon,.field_with_errors .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback,.field_with_errors .form-control-feedback{color:#a94442}.has-feedback label ~ .form-control-feedback{top:25px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width: 768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled,.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled.active,.btn-default[disabled],.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled].active,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled.active,.btn-primary[disabled],.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled,.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled.active,.btn-success[disabled],.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled].active,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled,.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled.active,.btn-info[disabled],.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled].active,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled,.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled.active,.btn-warning[disabled],.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled.active,.btn-danger[disabled],.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#777777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:2px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:2px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555555;text-align:center;background-color:#eeeeee;border:1px solid #ccc;border-radius:2px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eeeeee}.nav>li.disabled>a{color:#777777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eeeeee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:2px 2px 0 0}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555555;background-color:#F8F8F8;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:2px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:2px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:2px 2px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#F8F8F8}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 768px){.navbar{border-radius:2px}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width: 768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:2px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width: 768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width: 768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width: 768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:2px;border-top-left-radius:2px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width: 768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width: 768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right ~ .navbar-right{margin-right:0}}.navbar-default{background-color:#F69240;border-color:#f58020}.navbar-default .navbar-brand{color:#fff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#e6e6e6;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#fff}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#333;background-color:#f58020}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#f58020}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#f58020;color:#333}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#fff}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#333;background-color:#f58020}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#fff}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#fff}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:hover,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#090909;color:#fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:hover,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:2px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:2px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{color:#23527c;background-color:#eeeeee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eeeeee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eeeeee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width: 768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#F8F8F8;border:1px solid #ddd;border-radius:2px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333333}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:2px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:2px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eeeeee;color:#777777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:2px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:1px;border-top-left-radius:1px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:1px;border-top-left-radius:1px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:1px;border-top-left-radius:1px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:1px;border-top-right-radius:1px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:1px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:1px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:1px;border-bottom-right-radius:1px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:1px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:1px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:2px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"EtelkaLightProRegular", Arial, Helvetica, sans-serif;font-size:12px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:2px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"EtelkaLightProRegular", Arial, Helvetica, sans-serif;font-size:14px;font-weight:normal;line-height:1.42857143;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;-moz-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width: 768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs{display:none !important}.visible-sm{display:none !important}.visible-md{display:none !important}.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width: 767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width: 767px){.visible-xs-block{display:block !important}}@media (max-width: 767px){.visible-xs-inline{display:inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display:block !important}}@media (min-width: 1200px){.visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none !important}}@media (min-width: 1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}.center-block{float:none !important}.text-left-not-xs,.text-left-not-sm,.text-left-not-md,.text-left-not-lg{text-align:left}.text-center-not-xs,.text-center-not-sm,.text-center-not-md,.text-center-not-lg{text-align:center}.text-right-not-xs,.text-right-not-sm,.text-right-not-md,.text-right-not-lg{text-align:right}.text-justify-not-xs,.text-justify-not-sm,.text-justify-not-md,.text-justify-not-lg{text-align:justify}@media (max-width: 767px){.text-left-not-xs,.text-center-not-xs,.text-right-not-xs,.text-justify-not-xs{text-align:inherit}.text-left-xs{text-align:left}.text-center-xs{text-align:center}.text-right-xs{text-align:right}.text-justify-xs{text-align:justify}}@media (min-width: 768px) and (max-width: 991px){.text-left-not-sm,.text-center-not-sm,.text-right-not-sm,.text-justify-not-sm{text-align:inherit}.text-left-sm{text-align:left}.text-center-sm{text-align:center}.text-right-sm{text-align:right}.text-justify-sm{text-align:justify}}@media (min-width: 992px) and (max-width: 1199px){.text-left-not-md,.text-center-not-md,.text-right-not-md,.text-justify-not-md{text-align:inherit}.text-left-md{text-align:left}.text-center-md{text-align:center}.text-right-md{text-align:right}.text-justify-md{text-align:justify}}@media (min-width: 1200px){.text-left-not-lg,.text-center-not-lg,.text-right-not-lg,.text-justify-not-lg{text-align:inherit}.text-left-lg{text-align:left}.text-center-lg{text-align:center}.text-right-lg{text-align:right}.text-justify-lg{text-align:justify}}.required:after{content:"*";margin:0 0 0 1px}.not-required:after{content:""}/*! + * jQuery UI CSS Framework 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/ + */.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(/assets/jquery-ui/ui-bg_flat_75_ffffff_40x100-39ab7ccd9f4e82579da78a9241265df288d8eb65dbbd7cf48aed2d0129887df5.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(/assets/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-54270656df079c4da5182629a080fc633b6f84b87985eb016d25a560e2c38d4a.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(/assets/jquery-ui/ui-bg_glass_75_e6e6e6_1x400-ddf5dd4e0ef2b185e8bb0af7b6e90ebe74a84384cb4700658e76e754c8bfe550.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(/assets/jquery-ui/ui-bg_glass_75_dadada_1x400-c108f5cbf2dd9ec07a26530695ddd95e1664597ce6c056ae44c162cc2e28cec4.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(/assets/jquery-ui/ui-bg_glass_65_ffffff_1x400-f0e6cd91b837d5c5644d026e5ffeccd907953317cd5c0f689901733afda260b2.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(/assets/jquery-ui/ui-bg_glass_55_fbf9ee_1x400-691597e8a40a891ea94d3589976ecfc33e6145c49422443b00ac2b5a0022964c.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(/assets/jquery-ui/ui-bg_glass_95_fef1ec_1x400-f6f1c1bedf1a0f37cfef81d12f5f012869d1ee7c984775a569827a1784d34f5c.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(/assets/jquery-ui/ui-icons_222222_256x240-57adb0d65f4e91dacfee975d9574422bee7486c8a182d60133728c672f2cdbbc.png)}.ui-widget-header .ui-icon{background-image:url(/assets/jquery-ui/ui-icons_222222_256x240-57adb0d65f4e91dacfee975d9574422bee7486c8a182d60133728c672f2cdbbc.png)}.ui-state-default .ui-icon{background-image:url(/assets/jquery-ui/ui-icons_888888_256x240-ea2e29625de3463465e93b002b065f5833e05b97f7a052b1c141e754d62e1a8b.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(/assets/jquery-ui/ui-icons_454545_256x240-07460e843c3e59aaadbb34231e699e856a2980753c7a47b66447da5d9f93fb7f.png)}.ui-state-active .ui-icon{background-image:url(/assets/jquery-ui/ui-icons_454545_256x240-07460e843c3e59aaadbb34231e699e856a2980753c7a47b66447da5d9f93fb7f.png)}.ui-state-highlight .ui-icon{background-image:url(/assets/jquery-ui/ui-icons_2e83ff_256x240-20f8c6667afc48aa433ee9eb6d8a0584bdbd6b4a4a9091ff1e6b3adb31e63bd9.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(/assets/jquery-ui/ui-icons_cd0a0a_256x240-1e32c6dbf5d3fd342f27a78aa881550d6412aa207f48468724a6a15402b6041b.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100-9a8492a580bf85d3e98ae8861fbd45567e5a1f83eeafcf9574da0399d5f602ab.png) 50% 50% repeat-x;opacity:0.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100-9a8492a580bf85d3e98ae8861fbd45567e5a1f83eeafcf9574da0399d5f602ab.png) 50% 50% repeat-x;opacity:0.3;filter:Alpha(Opacity=30);border-radius:8px}/*! + * jQuery UI CSS Framework 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default !important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}/*! + * jQuery UI Datepicker 1.11.4 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/datepicker/#theming + */.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}@font-face{font-family:"EtelkaLightProRegular";src:url(/assets/etelkalight-webfont-baf7e35ab2f64bf1c6fa4476d3934c7422062995738fd9e5715b02f55002d7c0.eot);src:url(/assets/etelkalight-webfont-baf7e35ab2f64bf1c6fa4476d3934c7422062995738fd9e5715b02f55002d7c0.eot?#iefix) format("embedded-opentype"),url(/assets/etelkalight-webfont-1ed38dbac6b817bf74bd46a98d61005aa2615db7ac743e4037364d1021084043.woff) format("woff"),url(/assets/etelkalight-webfont-f68a2db6346d864f82c3b3e725ee60b0217e91e46ec47f96710f70f996b61af1.ttf) format("truetype"),url(/assets/etelkalight-webfont-2b575f6e4696d74957af27a7c7bb7976b7ca31d0ebe8ec25bb4c3494d5d16e24.svg#EtelkaLightProRegular) format("svg");font-weight:normal;font-style:normal}@font-face{font-family:"EtelkaLightProBold";src:url(/assets/etelkalightbold-webfont-1d94cabe6fb55b05f746fe0aa51a7a503683d7afdb68360ed26bfac03e1b3c39.eot);src:url(/assets/etelkalightbold-webfont-1d94cabe6fb55b05f746fe0aa51a7a503683d7afdb68360ed26bfac03e1b3c39.eot?#iefix) format("embedded-opentype"),url(/assets/etelkalightbold-webfont-d608c036b3e3f04ca87a1c494f8d9e9620a729b2760b5eb1dcee52c4bc8e8805.woff) format("woff"),url(/assets/etelkalightbold-webfont-0f06d1e7f099578e1cc0e9b1875aca2a7128c0ca0d640fd504e97bae0b028429.ttf) format("truetype"),url(/assets/etelkalightbold-webfont-bb0c8e17b99b10f211be3531a51d6ad48a5c6e4670c8fb6160a329fa4758c555.svg#EtelkaLightProBold) format("svg");font-weight:normal;font-style:normal}@font-face{font-family:"EtelkaLightProItalic";src:url(/assets/etelkalightitalic-webfont-ce5cdffe6c589a6dc6bd2c482c718486ff5fb416ab01740750db325179e58654.eot);src:url(/assets/etelkalightitalic-webfont-ce5cdffe6c589a6dc6bd2c482c718486ff5fb416ab01740750db325179e58654.eot?#iefix) format("embedded-opentype"),url(/assets/etelkalightitalic-webfont-d1fb9621d40ef45104078a4a5b98ce4cba00872cf8ac56e299cf1397c146cac3.woff) format("woff"),url(/assets/etelkalightitalic-webfont-54eb91ad0e0b639f50be02b7c25836c99ad989185f5d2a240d60ea14a1b7384a.ttf) format("truetype"),url(/assets/etelkalightitalic-webfont-dd5353c2af4ea63e1d0e99ec5f1f85162cee0c4dd0a3840260a2606eefc3e517.svg#EtelkaLightProItalic) format("svg");font-weight:normal;font-style:normal}@font-face{font-family:"InfoTextBold";src:url(/assets/infotexb-webfont-1951e43e1d9ab99b0d4998abba4aab34f3e68b337be90800db517e4a8d27d001.eot);src:url(/assets/infotexb-webfont-1951e43e1d9ab99b0d4998abba4aab34f3e68b337be90800db517e4a8d27d001.eot?#iefix) format("embedded-opentype"),url(/assets/infotexb-webfont-8da32e6db23c39390c55dd5ea8949714757fddba516c5db65e72867504493fbc.woff) format("woff"),url(/assets/infotexb-webfont-c0737d1e2edff50645e201bf99f68f2313502ee2bdeb2e56435ee24721baf5cd.ttf) format("truetype"),url(/assets/infotexb-webfont-0dda72e34d0d0ced7693b55ed08acc60fb1a9036afd7736e432ac3f22f2e6fdf.svg#InfoTextBold) format("svg");font-weight:normal;font-style:normal}@font-face{font-family:"InfoTextMedium";src:url(/assets/infotexm-webfont-74df99faeb66d8b02966b8884b860af03c359ed41d348ddb813dbcc3c460eb26.eot);src:url(/assets/infotexm-webfont-74df99faeb66d8b02966b8884b860af03c359ed41d348ddb813dbcc3c460eb26.eot?#iefix) format("embedded-opentype"),url(/assets/infotexm-webfont-872b5ab4e0b7de6655a52f137a3c99f1e7941fa91ff21a56550f2039834ee9d0.woff) format("woff"),url(/assets/infotexm-webfont-1d244d27a4ec4c1a5f98c82966faa26e7855c4292c730429477003b6dab5c08b.ttf) format("truetype"),url(/assets/infotexm-webfont-0b52ef10620b8cb7289dc809aac67826d5031e6ab040194fdb7365dc83e95557.svg#InfoTextMedium) format("svg");font-weight:normal;font-style:normal}@font-face{font-family:"InfoTextRegular";src:url(/fonts/infotexn-webfont.eot);src:url(/fonts/infotexn-webfont.eot?#iefix) format("embedded-opentype"),url(/fonts/infotexn-webfont.woff) format("woff"),url(/fonts/infotexn-webfont.ttf) format("truetype"),url(/fonts/infotexn-webfont.svg#InfoTextRegular) format("svg");font-weight:normal;font-style:normal}body>.container{min-height:800px}.error-tab>a{color:#a94442 !important}.edit-highlight{background-color:#E7E7E7}.navbar-brand{line-height:12px;padding-top:20px;padding-bottom:5px}.navbar-brand small{display:block;font-size:10px}.footer{color:#777;padding-top:15px;font-size:10px}.nowrap{white-space:nowrap}.form-signin{max-width:330px;padding:15px;margin:0 auto}.form-signin input{margin-bottom:10px}.form-signin .form-control{position:relative;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px;font-size:16px}.no-border{border:0px !important}.errors{color:#A94442}.typeahead{margin-left:5px}@media (min-width: 768px) and (max-width: 991px){.control-label{text-align:left !important}}.text-grey{color:grey}#nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:100;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d, 0 0 5px #29d;opacity:1.0;-webkit-transform:rotate(3deg) translate(0px, -4px);-ms-transform:rotate(3deg) translate(0px, -4px);transform:rotate(3deg) translate(0px, -4px)}#nprogress .spinner{display:block;position:fixed;z-index:100;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner 400ms linear infinite;animation:nprogress-spinner 400ms linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .spinner,.nprogress-custom-parent #nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#nprogress .bar,#nprogress .spinner{z-index:999999}.twitter-typeahead{width:100%;position:relative}.tt-dropdown-menu{width:100%;min-width:160px;margin-top:2px;padding:5px 0;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.tt-suggestion{display:block;padding:3px 20px}.twitter-typeahead .tt-suggestion.tt-cursor{color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}.tt-suggestion.tt-cursor a{color:#fff}.tt-suggestion p{margin:0}.selectize-control.plugin-drag_drop.multi>.selectize-input>div.ui-sortable-placeholder{visibility:visible !important;background:#f2f2f2 !important;background:rgba(0,0,0,0.06) !important;border:0 none !important;-webkit-box-shadow:inset 0 0 12px 4px #ffffff;box-shadow:inset 0 0 12px 4px #ffffff}.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after{content:'!';visibility:hidden}.selectize-control.plugin-drag_drop .ui-sortable-helper{-webkit-box-shadow:0 2px 5px rgba(0,0,0,0.2);box-shadow:0 2px 5px rgba(0,0,0,0.2)}.selectize-dropdown-header{position:relative;padding:5px 8px;border-bottom:1px solid #d0d0d0;background:#f8f8f8;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.selectize-dropdown-header-close{position:absolute;right:8px;top:50%;color:#303030;opacity:0.4;margin-top:-12px;line-height:20px;font-size:20px !important}.selectize-dropdown-header-close:hover{color:#000000}.selectize-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0 none;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0 none}.selectize-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.selectize-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0 none}.selectize-control.plugin-remove_button [data-value]{position:relative;padding-right:24px !important}.selectize-control.plugin-remove_button [data-value] .remove{z-index:1;position:absolute;top:0;right:0;bottom:0;width:17px;text-align:center;font-weight:bold;font-size:12px;color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:2px 0 0 0;border-left:1px solid #d0d0d0;-webkit-border-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-control.plugin-remove_button [data-value] .remove:hover{background:rgba(0,0,0,0.05)}.selectize-control.plugin-remove_button [data-value].active .remove{border-left-color:#cacaca}.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover{background:none}.selectize-control.plugin-remove_button .disabled [data-value] .remove{border-left-color:#ffffff}.selectize-control{position:relative}.selectize-dropdown,.selectize-input,.selectize-input input{color:#303030;font-family:inherit;font-size:13px;line-height:18px;-webkit-font-smoothing:inherit}.selectize-input,.selectize-control.single .selectize-input.input-active{background:#ffffff;cursor:text;display:inline-block}.selectize-input{border:1px solid #d0d0d0;padding:8px 8px;display:inline-block;width:100%;overflow:hidden;position:relative;z-index:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.1);box-shadow:inset 0 1px 1px rgba(0,0,0,0.1);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.selectize-control.multi .selectize-input.has-items{padding:6px 8px 3px}.selectize-input.full{background-color:#ffffff}.selectize-input.disabled,.selectize-input.disabled *{cursor:default !important}.selectize-input.focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.15)}.selectize-input.dropdown-active{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.selectize-input>*{vertical-align:baseline;display:-moz-inline-stack;display:inline-block;zoom:1;*display:inline}.selectize-control.multi .selectize-input>div{cursor:pointer;margin:0 3px 3px 0;padding:2px 6px;background:#f2f2f2;color:#303030;border:0 solid #d0d0d0}.selectize-control.multi .selectize-input>div.active{background:#e8e8e8;color:#303030;border:0 solid #cacaca}.selectize-control.multi .selectize-input.disabled>div,.selectize-control.multi .selectize-input.disabled>div.active{color:#7d7d7d;background:#ffffff;border:0 solid #ffffff}.selectize-input>input{display:inline-block !important;padding:0 !important;min-height:0 !important;max-height:none !important;max-width:100% !important;margin:0 2px 0 0 !important;text-indent:0 !important;border:0 none !important;background:none !important;line-height:inherit !important;-webkit-user-select:auto !important;-webkit-box-shadow:none !important;box-shadow:none !important}.selectize-input>input::-ms-clear{display:none}.selectize-input>input:focus{outline:none !important}.selectize-input::after{content:' ';display:block;clear:left}.selectize-input.dropdown-active::before{content:' ';display:block;position:absolute;background:#f0f0f0;height:1px;bottom:0;left:0;right:0}.selectize-dropdown{position:absolute;z-index:10;border:1px solid #d0d0d0;background:#ffffff;margin:-1px 0 0 0;border-top:0 none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.selectize-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.selectize-dropdown [data-selectable] .highlight{background:rgba(125,168,208,0.2);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.selectize-dropdown [data-selectable],.selectize-dropdown .optgroup-header{padding:5px 8px}.selectize-dropdown .optgroup:first-child .optgroup-header{border-top:0 none}.selectize-dropdown .optgroup-header{color:#303030;background:#ffffff;cursor:default}.selectize-dropdown .active{background-color:#f5fafd;color:#495c68}.selectize-dropdown .active.create{color:#495c68}.selectize-dropdown .create{color:rgba(48,48,48,0.5)}.selectize-dropdown-content{overflow-y:auto;overflow-x:hidden;max-height:200px}.selectize-control.single .selectize-input,.selectize-control.single .selectize-input input{cursor:pointer}.selectize-control.single .selectize-input.input-active,.selectize-control.single .selectize-input.input-active input{cursor:text}.selectize-control.single .selectize-input:after{content:' ';display:block;position:absolute;top:50%;right:15px;margin-top:-3px;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#808080 transparent transparent transparent}.selectize-control.single .selectize-input.dropdown-active:after{margin-top:-4px;border-width:0 5px 5px 5px;border-color:transparent transparent #808080 transparent}.selectize-control.rtl.single .selectize-input:after{left:15px;right:auto}.selectize-control.rtl .selectize-input>input{margin:0 4px 0 -2px !important}.selectize-control .selectize-input.disabled{opacity:0.5;background-color:#fafafa}.selectize-control.plugin-drag_drop.multi>.selectize-input>div.ui-sortable-placeholder{visibility:visible !important;background:#f2f2f2 !important;background:rgba(0,0,0,0.06) !important;border:0 none !important;-webkit-box-shadow:inset 0 0 12px 4px #ffffff;box-shadow:inset 0 0 12px 4px #ffffff}.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after{content:'!';visibility:hidden}.selectize-control.plugin-drag_drop .ui-sortable-helper{-webkit-box-shadow:0 2px 5px rgba(0,0,0,0.2);box-shadow:0 2px 5px rgba(0,0,0,0.2)}.selectize-dropdown-header{position:relative;padding:3px 12px;border-bottom:1px solid #d0d0d0;background:#f8f8f8;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.selectize-dropdown-header-close{position:absolute;right:12px;top:50%;color:#333333;opacity:0.4;margin-top:-12px;line-height:20px;font-size:20px !important}.selectize-dropdown-header-close:hover{color:#000000}.selectize-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0 none;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0 none}.selectize-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.selectize-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0 none}.selectize-control.plugin-remove_button [data-value]{position:relative;padding-right:24px !important}.selectize-control.plugin-remove_button [data-value] .remove{z-index:1;position:absolute;top:0;right:0;bottom:0;width:17px;text-align:center;font-weight:bold;font-size:12px;color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:1px 0 0 0;border-left:1px solid transparent;-webkit-border-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-control.plugin-remove_button [data-value] .remove:hover{background:rgba(0,0,0,0.05)}.selectize-control.plugin-remove_button [data-value].active .remove{border-left-color:transparent}.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover{background:none}.selectize-control.plugin-remove_button .disabled [data-value] .remove{border-left-color:rgba(77,77,77,0)}.selectize-control{position:relative}.selectize-dropdown,.selectize-input,.selectize-input input{color:#333333;font-family:inherit;font-size:inherit;line-height:20px;-webkit-font-smoothing:inherit}.selectize-input,.selectize-control.single .selectize-input.input-active{background:#ffffff;cursor:text;display:inline-block}.selectize-input{border:1px solid #cccccc;padding:6px 12px;display:inline-block;width:100%;overflow:hidden;position:relative;z-index:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.selectize-control.multi .selectize-input.has-items{padding:5px 12px 2px}.selectize-input.full{background-color:#ffffff}.selectize-input.disabled,.selectize-input.disabled *{cursor:default !important}.selectize-input.focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.15)}.selectize-input.dropdown-active{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.selectize-input>*{vertical-align:baseline;display:-moz-inline-stack;display:inline-block;zoom:1;*display:inline}.selectize-control.multi .selectize-input>div{cursor:pointer;margin:0 3px 3px 0;padding:1px 3px;background:#efefef;color:#333333;border:0 solid transparent}.selectize-control.multi .selectize-input>div.active{background:#428bca;color:#ffffff;border:0 solid transparent}.selectize-control.multi .selectize-input.disabled>div,.selectize-control.multi .selectize-input.disabled>div.active{color:#808080;background:#ffffff;border:0 solid rgba(77,77,77,0)}.selectize-input>input{display:inline-block !important;padding:0 !important;min-height:0 !important;max-height:none !important;max-width:100% !important;margin:0 !important;text-indent:0 !important;border:0 none !important;background:none !important;line-height:inherit !important;-webkit-user-select:auto !important;-webkit-box-shadow:none !important;box-shadow:none !important}.selectize-input>input::-ms-clear{display:none}.selectize-input>input:focus{outline:none !important}.selectize-input::after{content:' ';display:block;clear:left}.selectize-input.dropdown-active::before{content:' ';display:block;position:absolute;background:#ffffff;height:1px;bottom:0;left:0;right:0}.selectize-dropdown{position:absolute;z-index:10;border:1px solid #d0d0d0;background:#ffffff;margin:-1px 0 0 0;border-top:0 none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.selectize-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.selectize-dropdown [data-selectable] .highlight{background:rgba(255,237,40,0.4);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.selectize-dropdown [data-selectable],.selectize-dropdown .optgroup-header{padding:3px 12px}.selectize-dropdown .optgroup:first-child .optgroup-header{border-top:0 none}.selectize-dropdown .optgroup-header{color:#777777;background:#ffffff;cursor:default}.selectize-dropdown .active{background-color:#f5f5f5;color:#262626}.selectize-dropdown .active.create{color:#262626}.selectize-dropdown .create{color:rgba(51,51,51,0.5)}.selectize-dropdown-content{overflow-y:auto;overflow-x:hidden;max-height:200px}.selectize-control.single .selectize-input,.selectize-control.single .selectize-input input{cursor:pointer}.selectize-control.single .selectize-input.input-active,.selectize-control.single .selectize-input.input-active input{cursor:text}.selectize-control.single .selectize-input:after{content:' ';display:block;position:absolute;top:50%;right:17px;margin-top:-3px;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#333333 transparent transparent transparent}.selectize-control.single .selectize-input.dropdown-active:after{margin-top:-4px;border-width:0 5px 5px 5px;border-color:transparent transparent #333333 transparent}.selectize-control.rtl.single .selectize-input:after{left:17px;right:auto}.selectize-control.rtl .selectize-input>input{margin:0 4px 0 -2px !important}.selectize-control .selectize-input.disabled{opacity:0.5;background-color:#ffffff}.selectize-dropdown,.selectize-dropdown.form-control{height:auto;padding:0;margin:2px 0 0 0;z-index:1000;background:#ffffff;border:1px solid #cccccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.selectize-dropdown .optgroup-header{font-size:12px;line-height:1.42857143}.selectize-dropdown .optgroup:first-child:before{display:none}.selectize-dropdown .optgroup:before{content:' ';display:block;height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5;margin-left:-12px;margin-right:-12px}.selectize-dropdown-content{padding:5px 0}.selectize-dropdown-header{padding:6px 12px}.selectize-input{min-height:34px}.selectize-input.dropdown-active{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.selectize-input.dropdown-active::before{display:none}.selectize-input.focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.has-error .selectize-input{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .selectize-input:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.selectize-control.multi .selectize-input.has-items{padding-left:9px;padding-right:9px}.selectize-control.multi .selectize-input>div{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.form-control.selectize-control{padding:0;height:auto;border:none;background:none;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}html{font-size:100%;overflow-y:scroll;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body>.container{background:#fff;padding:16px 30px 30px 30px;margin-top:0px;border-radius:3px;min-height:600px}h1{font-size:26px;margin-bottom:16px}a{color:#23527C;text-decoration:none}a:hover,a:active{color:#23527C;outline:0}h1,h2,h3,h4,h1 a,h2 a,h3 a,h4 a{color:#272f34;text-decoration:none;font-weight:normal;font-family:"EtelkaLightProBold"}body,button,input,select,textarea{font-family:"EtelkaLightProRegular", Arial, Helvetica, sans-serif;color:#5d6064;font-size:13px}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:normal;font-family:"EtelkaLightProBold"}blockquote{margin:1em 40px}dfn{font-style:italic}mark{background:#ff0;color:#000}pre,code,kbd,samp{font-family:monospace, serif;_font-family:"courier new", monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:75%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}.title-row{margin-bottom:22px}.app-nav{padding-top:7px}.general-tab{padding-top:30px;padding-right:20px;border-top:0px}.container.version{background:transparent;margin-top:-116px;min-height:0px;text-align:right;font-size:12px;color:gray}.container.subnav{background:transparent;min-height:0;padding:0 46px 0 0;margin-bottom:0}.container.subnav ul.nav li a{background:#E7E7E7;height:33px;line-height:12px;color:gray}.container.subnav ul.nav li a:hover{color:#333}.container.subnav ul.nav li.active a{background:#F8F8F8;font-weight:bold;color:#333}.subactions{min-height:600px}.subactions h4{margin-bottom:20px;margin-top:10px}.sidebar{min-height:400px}.content{margin-right:240px;margin-left:0}h4{margin:0}.top-actions{margin-top:12px;margin-bottom:16px;float:right}.domify td{vertical-align:middle !important}body.login{padding-top:40px;padding-bottom:40px}body.login .checkbox{margin-bottom:10px}body.login .form-signin{max-width:330px;padding:15px;margin:0 auto}body.login .form-signin input[type="text"]{margin-bottom:8px}body.login .form-signin input[type="password"]{margin-bottom:10px}body.login .form-signin .btn-lg{margin-top:28px}body.login .form-signin .checkbox{font-weight:normal}body.login .form-signin .form-control{position:relative;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px;font-size:16px}body.login .form-signin .form-control:focus{z-index:2}.error-tab>a{color:#a94442 !important}.edit-highlight{background-color:#E7E7E7}.navbar-brand{line-height:12px;padding-top:20px;padding-bottom:5px}.navbar-brand small{display:block;font-size:10px}.navbar{margin-bottom:0}.footer{color:#777;padding-top:15px;font-size:10px}.nowrap{white-space:nowrap}.form-signin{max-width:330px;padding:15px;margin:0 auto}.form-signin input{margin-bottom:10px}.form-signin .form-control{position:relative;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px;font-size:16px}.form-signin{max-width:330px;padding:15px;margin:0 auto}.form-signin input{margin-bottom:10px}@media (min-width: 860px){.control-label{text-align:right;margin-bottom:0;padding-top:7px}} diff --git a/public/assets/admin-manifest-5f612f59c9effcca0be5396c4f00654de236d2bb1b16bbdf929b47e6504381f3.js b/public/assets/admin-manifest-5f612f59c9effcca0be5396c4f00654de236d2bb1b16bbdf929b47e6504381f3.js new file mode 100644 index 000000000..b2e3af1cf --- /dev/null +++ b/public/assets/admin-manifest-5f612f59c9effcca0be5396c4f00654de236d2bb1b16bbdf929b47e6504381f3.js @@ -0,0 +1,201 @@ +/*! + * jQuery JavaScript Library v1.11.2 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-12-17T15:27Z + */ +!function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){function n(t){var e=t.length,n=re.type(t);return"function"===n||re.isWindow(t)?!1:1===t.nodeType&&e?!0:"array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t}function i(t,e,n){if(re.isFunction(e))return re.grep(t,function(t,i){return!!e.call(t,i,t)!==n});if(e.nodeType)return re.grep(t,function(t){return t===e!==n});if("string"==typeof e){if(he.test(e))return re.filter(e,t,n);e=re.filter(e,t)}return re.grep(t,function(t){return re.inArray(t,e)>=0!==n})}function r(t,e){do t=t[e];while(t&&1!==t.nodeType);return t}function o(t){var e=we[t]={};return re.each(t.match(be)||[],function(t,n){e[n]=!0}),e}function a(){fe.addEventListener?(fe.removeEventListener("DOMContentLoaded",s,!1),t.removeEventListener("load",s,!1)):(fe.detachEvent("onreadystatechange",s),t.detachEvent("onload",s))}function s(){(fe.addEventListener||"load"===event.type||"complete"===fe.readyState)&&(a(),re.ready())}function l(t,e,n){if(void 0===n&&1===t.nodeType){var i="data-"+e.replace(De,"-$1").toLowerCase();if(n=t.getAttribute(i),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:_e.test(n)?re.parseJSON(n):n}catch(r){}re.data(t,e,n)}else n=void 0}return n}function u(t){var e;for(e in t)if(("data"!==e||!re.isEmptyObject(t[e]))&&"toJSON"!==e)return!1;return!0}function c(t,e,n,i){if(re.acceptData(t)){var r,o,a=re.expando,s=t.nodeType,l=s?re.cache:t,u=s?t[a]:t[a]&&a;if(u&&l[u]&&(i||l[u].data)||void 0!==n||"string"!=typeof e)return u||(u=s?t[a]=V.pop()||re.guid++:a),l[u]||(l[u]=s?{}:{toJSON:re.noop}),("object"==typeof e||"function"==typeof e)&&(i?l[u]=re.extend(l[u],e):l[u].data=re.extend(l[u].data,e)),o=l[u],i||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[re.camelCase(e)]=n),"string"==typeof e?(r=o[e],null==r&&(r=o[re.camelCase(e)])):r=o,r}}function d(t,e,n){if(re.acceptData(t)){var i,r,o=t.nodeType,a=o?re.cache:t,s=o?t[re.expando]:re.expando;if(a[s]){if(e&&(i=n?a[s]:a[s].data)){re.isArray(e)?e=e.concat(re.map(e,re.camelCase)):e in i?e=[e]:(e=re.camelCase(e),e=e in i?[e]:e.split(" ")),r=e.length;for(;r--;)delete i[e[r]];if(n?!u(i):!re.isEmptyObject(i))return}(n||(delete a[s].data,u(a[s])))&&(o?re.cleanData([t],!0):ne.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}function h(){return!0}function p(){return!1}function f(){try{return fe.activeElement}catch(t){}}function g(t){var e=Le.split("|"),n=t.createDocumentFragment();if(n.createElement)for(;e.length;)n.createElement(e.pop());return n}function m(t,e){var n,i,r=0,o=typeof t.getElementsByTagName!==Ce?t.getElementsByTagName(e||"*"):typeof t.querySelectorAll!==Ce?t.querySelectorAll(e||"*"):void 0;if(!o)for(o=[],n=t.childNodes||t;null!=(i=n[r]);r++)!e||re.nodeName(i,e)?o.push(i):re.merge(o,m(i,e));return void 0===e||e&&re.nodeName(t,e)?re.merge([t],o):o}function v(t){Ee.test(t.type)&&(t.defaultChecked=t.checked)}function y(t,e){return re.nodeName(t,"table")&&re.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function b(t){return t.type=(null!==re.find.attr(t,"type"))+"/"+t.type,t}function w(t){var e=Ye.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function x(t,e){for(var n,i=0;null!=(n=t[i]);i++)re._data(n,"globalEval",!e||re._data(e[i],"globalEval"))}function k(t,e){if(1===e.nodeType&&re.hasData(t)){var n,i,r,o=re._data(t),a=re._data(e,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(i=0,r=s[n].length;r>i;i++)re.event.add(e,n,s[n][i])}a.data&&(a.data=re.extend({},a.data))}}function C(t,e){var n,i,r;if(1===e.nodeType){if(n=e.nodeName.toLowerCase(),!ne.noCloneEvent&&e[re.expando]){r=re._data(e);for(i in r.events)re.removeEvent(e,i,r.handle);e.removeAttribute(re.expando)}"script"===n&&e.text!==t.text?(b(e).text=t.text,w(e)):"object"===n?(e.parentNode&&(e.outerHTML=t.outerHTML),ne.html5Clone&&t.innerHTML&&!re.trim(e.innerHTML)&&(e.innerHTML=t.innerHTML)):"input"===n&&Ee.test(t.type)?(e.defaultChecked=e.checked=t.checked,e.value!==t.value&&(e.value=t.value)):"option"===n?e.defaultSelected=e.selected=t.defaultSelected:("input"===n||"textarea"===n)&&(e.defaultValue=t.defaultValue)}}function _(e,n){var i,r=re(n.createElement(e)).appendTo(n.body),o=t.getDefaultComputedStyle&&(i=t.getDefaultComputedStyle(r[0]))?i.display:re.css(r[0],"display");return r.detach(),o}function D(t){var e=fe,n=Je[t];return n||(n=_(t,e),"none"!==n&&n||(Ge=(Ge||re("