diff --git a/Gemfile b/Gemfile
index 7e59067d3aa677f47d5557f309a33ed7b150184e..d4f33ea316da3d1fad8ad212de25f686241954c0 100644
--- a/Gemfile
+++ b/Gemfile
@@ -143,3 +143,9 @@ gem 'gitlab'
 
 # upload
 gem 'resumablejs-rails'
+
+#authorization
+gem 'pundit'
+
+# elasticsearch integration
+gem 'searchkick'
diff --git a/Gemfile.lock b/Gemfile.lock
index 4c1f98d4f65ec8f2f528588670a012af3ccc1887..73890adc6f5fbedcca9c4b1b1872cc7c5564e804 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,6 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    abstract_type (0.0.7)
     actionmailer (4.2.0)
       actionpack (= 4.2.0)
       actionview (= 4.2.0)
@@ -37,13 +36,10 @@ GEM
       minitest (~> 5.1)
       thread_safe (~> 0.3, >= 0.3.4)
       tzinfo (~> 1.1)
-    adamantium (0.2.0)
-      ice_nine (~> 0.11.0)
-      memoizable (~> 0.4.0)
     addressable (2.3.8)
     arel (6.0.3)
-    ast (2.1.0)
-    autoprefixer-rails (6.1.2)
+    ast (2.2.0)
+    autoprefixer-rails (6.3.1)
       execjs
       json
     axiom-types (0.1.1)
@@ -61,7 +57,7 @@ GEM
       autoprefixer-rails (>= 5.2.1)
       sass (>= 3.3.4)
     builder (3.2.2)
-    bullet (4.14.10)
+    bullet (5.0.0)
       activesupport (>= 3.0.0)
       uniform_notifier (~> 1.9.0)
     byebug (8.2.1)
@@ -77,42 +73,47 @@ GEM
     coderay (1.1.0)
     coercible (1.0.0)
       descendants_tracker (~> 0.0.1)
-    coffee-rails (4.1.0)
+    coffee-rails (4.1.1)
       coffee-script (>= 2.2.0)
-      railties (>= 4.0.0, < 5.0)
+      railties (>= 4.0.0, < 5.1.x)
     coffee-script (2.4.1)
       coffee-script-source
       execjs
     coffee-script-source (1.10.0)
-    concord (0.1.5)
-      adamantium (~> 0.2.0)
-      equalizer (~> 0.0.9)
+    colorize (0.7.7)
     concurrent-ruby (1.0.0)
     connection_pool (2.2.0)
     curb (0.8.8)
-    dalli (2.7.4)
+    dalli (2.7.5)
     debug_inspector (0.0.2)
     descendants_tracker (0.0.4)
       thread_safe (~> 0.3, >= 0.3.1)
-    devise (3.5.3)
+    devise (3.5.6)
       bcrypt (~> 3.0)
       orm_adapter (~> 0.1)
       railties (>= 3.2.6, < 5)
       responders
       thread_safe (~> 0.1)
       warden (~> 1.2.3)
-    devise_token_auth (0.1.36)
-      devise (~> 3.5.2)
-      rails (~> 4.2)
-    diff-lcs (1.2.5)
-    domain_name (0.5.25)
+    devise_token_auth (0.1.37)
+      devise (> 3.5.2, < 4.1)
+      rails (< 6)
+    domain_name (0.5.20160128)
       unf (>= 0.0.5, < 1.0.0)
-    dspace_rest_client (2.2.1)
+    dspace_rest_client (2.2.2)
       activesupport (~> 4.2, >= 4.2.0)
       faraday (~> 0.9.2)
       json (~> 1.8, >= 1.8.3)
       net-http-persistent (~> 2.9, >= 2.9.4)
       resource_kit (~> 0.1.4)
+    elasticsearch (1.0.15)
+      elasticsearch-api (= 1.0.15)
+      elasticsearch-transport (= 1.0.15)
+    elasticsearch-api (1.0.15)
+      multi_json
+    elasticsearch-transport (1.0.15)
+      faraday
+      multi_json
     equalizer (0.0.11)
     erubis (2.7.0)
     execjs (2.6.0)
@@ -134,17 +135,18 @@ GEM
       terminal-table
     globalid (0.3.6)
       activesupport (>= 4.1.0)
+    hashie (3.4.3)
     http-cookie (1.0.2)
       domain_name (~> 0.5)
     httparty (0.13.7)
       json (~> 1.8)
       multi_xml (>= 0.5.2)
     i18n (0.7.0)
-    ice_nine (0.11.1)
-    jbuilder (2.3.2)
-      activesupport (>= 3.0.0, < 5)
+    ice_nine (0.11.2)
+    jbuilder (2.4.0)
+      activesupport (>= 3.0.0, < 5.1)
       multi_json (~> 1.2)
-    jquery-rails (4.0.5)
+    jquery-rails (4.1.0)
       rails-dom-testing (~> 1.0)
       railties (>= 4.2.0)
       thor (>= 0.14, < 2.0)
@@ -157,45 +159,46 @@ GEM
     kaminari (0.16.3)
       actionpack (>= 3.0.0)
       activesupport (>= 3.0.0)
+    launchy (2.4.3)
+      addressable (~> 2.3)
     libarchive-static (1.0.5)
     libv8 (3.16.14.13)
-    locastyle (0.0.2)
+    locastyle (0.0.3)
     loofah (2.0.3)
       nokogiri (>= 1.5.9)
     mail (2.6.3)
       mime-types (>= 1.16, < 3)
-    memoizable (0.4.2)
-      thread_safe (~> 0.3, >= 0.3.1)
     mime-types (2.99)
     mimemagic (0.3.0)
-    mina (0.3.7)
+    mina (0.3.8)
       open4 (~> 1.3.4)
       rake
     mini_portile2 (2.0.0)
-    minitest (5.8.3)
+    minitest (5.8.4)
     multi_json (1.11.2)
     multi_xml (0.5.5)
     multipart-post (2.0.0)
     net-http-persistent (2.9.4)
     netrc (0.11.0)
-    nokogiri (1.6.7)
+    nokogiri (1.6.7.2)
       mini_portile2 (~> 2.0.0.rc2)
     open4 (1.3.4)
     orientdb4r (0.5.1)
       rest-client (~> 1.7)
     orm_adapter (0.5.0)
-    paperclip (4.3.2)
+    paperclip (4.3.3)
       activemodel (>= 3.2.0)
       activesupport (>= 3.2.0)
       cocaine (~> 0.5.5)
       mime-types
       mimemagic (= 0.3.0)
-    parser (2.2.3.0)
-      ast (>= 1.1, < 3.0)
+    parser (2.3.0.2)
+      ast (~> 2.2)
     pg (0.18.4)
     private_attr (1.1.0)
-    procto (0.0.2)
-    puma (2.15.3)
+    puma (2.16.0)
+    pundit (1.1.0)
+      activesupport (>= 3.0.0)
     rack (1.6.4)
     rack-cors (0.4.0)
     rack-mini-profiler (0.9.8)
@@ -221,30 +224,30 @@ GEM
       activesupport (>= 4.2.0.beta, < 5.0)
       nokogiri (~> 1.6.0)
       rails-deprecated_sanitizer (>= 1.0.1)
-    rails-html-sanitizer (1.0.2)
+    rails-html-sanitizer (1.0.3)
       loofah (~> 2.0)
     railties (4.2.0)
       actionpack (= 4.2.0)
       activesupport (= 4.2.0)
       rake (>= 0.8.7)
       thor (>= 0.18.1, < 2.0)
-    rainbow (2.0.0)
-    rake (10.4.2)
+    rainbow (2.1.0)
+    rake (10.5.0)
     rake-compiler (0.9.5)
       rake
-    rdoc (4.2.0)
+    rdoc (4.2.1)
+      json (~> 1.4)
     redis (3.2.2)
-    reek (3.7.1)
+    reek (3.9.1)
       codeclimate-engine-rb (~> 0.1.0)
-      parser (~> 2.2, >= 2.2.2.5)
+      parser (~> 2.3)
       private_attr (~> 1.1)
       rainbow (~> 2.0)
-      unparser (~> 0.2.2)
     ref (2.0.0)
     resource_kit (0.1.4)
       addressable (~> 2.3.6)
-    responders (2.1.0)
-      railties (>= 4.2.0, < 5)
+    responders (2.1.1)
+      railties (>= 4.2.0, < 5.1)
     rest-client (1.8.0)
       http-cookie (>= 1.0.2, < 2.0)
       mime-types (>= 1.16, < 3.0)
@@ -254,15 +257,17 @@ GEM
     rmagick (2.15.4)
     rsolr (1.0.13)
       builder (>= 2.1.2)
-    ruby_parser (3.7.2)
+    ruby_parser (3.7.3)
       sexp_processor (~> 4.1)
-    rubycritic (2.3.0)
+    rubycritic (2.7.0)
+      colorize
       flay (= 2.6.1)
       flog (= 4.3.2)
-      parser (>= 2.2.0, < 3.0)
-      reek (= 3.7.1)
+      launchy (= 2.4.3)
+      parser (~> 2.3)
+      reek (= 3.9.1)
       virtus (~> 1.0)
-    sass (3.4.20)
+    sass (3.4.21)
     sass-rails (5.0.4)
       railties (>= 4.0.0, < 5.0)
       sass (~> 3.1)
@@ -272,9 +277,13 @@ GEM
     sdoc (0.4.1)
       json (~> 1.7, >= 1.7.7)
       rdoc (~> 4.0)
-    select2-rails (4.0.0)
+    searchkick (1.1.2)
+      activemodel
+      elasticsearch (>= 1)
+      hashie
+    select2-rails (4.0.1)
       thor (~> 0.14)
-    sexp_processor (4.6.0)
+    sexp_processor (4.6.1)
     shoulda (3.5.0)
       shoulda-context (~> 1.0, >= 1.0.1)
       shoulda-matchers (>= 1.4.1, < 3.0)
@@ -283,28 +292,27 @@ GEM
     shoulda-context (1.2.1)
     shoulda-matchers (2.8.0)
       activesupport (>= 3.0.0)
-    sidekiq (4.0.1)
+    sidekiq (4.1.0)
       concurrent-ruby (~> 1.0)
       connection_pool (~> 2.2, >= 2.2.0)
-      json (~> 1.0)
       redis (~> 3.2, >= 3.2.1)
-    sinatra (1.4.6)
-      rack (~> 1.4)
+    sinatra (1.4.7)
+      rack (~> 1.5)
       rack-protection (~> 1.4)
       tilt (>= 1.3, < 3)
     slim (3.0.6)
       temple (~> 0.7.3)
       tilt (>= 1.3.3, < 2.1)
-    spring (1.5.0)
+    spring (1.6.2)
     sprockets (3.5.2)
       concurrent-ruby (~> 1.0)
       rack (> 1, < 3)
-    sprockets-rails (2.3.3)
-      actionpack (>= 3.0)
-      activesupport (>= 3.0)
-      sprockets (>= 2.8, < 4.0)
+    sprockets-rails (3.0.1)
+      actionpack (>= 4.0)
+      activesupport (>= 4.0)
+      sprockets (>= 3.0.0)
     sqlite3 (1.3.11)
-    stackprof (0.2.7)
+    stackprof (0.2.8)
     streamio-ffmpeg (1.0.0)
     temple (0.7.6)
     terminal-table (1.5.2)
@@ -313,7 +321,7 @@ GEM
       ref
     thor (0.19.1)
     thread_safe (0.3.5)
-    tilt (2.0.1)
+    tilt (2.0.2)
     turbolinks (2.5.3)
       coffee-rails
     tzinfo (1.2.2)
@@ -325,22 +333,14 @@ GEM
       unf_ext
     unf_ext (0.0.7.1)
     uniform_notifier (1.9.0)
-    unparser (0.2.4)
-      abstract_type (~> 0.0.7)
-      adamantium (~> 0.2.0)
-      concord (~> 0.1.5)
-      diff-lcs (~> 1.2.5)
-      equalizer (~> 0.0.9)
-      parser (~> 2.2.2)
-      procto (~> 0.0.2)
     virtus (1.0.5)
       axiom-types (~> 0.1)
       coercible (~> 1.0)
       descendants_tracker (~> 0.0, >= 0.0.3)
       equalizer (~> 0.0, >= 0.0.9)
-    warden (1.2.4)
+    warden (1.2.6)
       rack (>= 1.0)
-    web-console (2.2.1)
+    web-console (2.3.0)
       activemodel (>= 4.0)
       binding_of_caller (>= 0.7.2)
       railties (>= 4.0)
@@ -379,6 +379,7 @@ DEPENDENCIES
   paperclip
   pg
   puma
+  pundit
   rack-cors
   rack-mini-profiler
   rails (= 4.2.0)
@@ -390,6 +391,7 @@ DEPENDENCIES
   rubycritic
   sass-rails (~> 5.0)
   sdoc (~> 0.4.0)
+  searchkick
   select2-rails
   shoulda
   shoulda-callback-matchers (~> 1.1.1)
diff --git a/app/assets/javascripts/application/autocomplete.js b/app/assets/javascripts/application/autocomplete.js
index 8e42ea9a6997c1d0d63167d6d45b3f856eb4350d..6d532090f9258290ba92a88269fc08cc03b7491c 100644
--- a/app/assets/javascripts/application/autocomplete.js
+++ b/app/assets/javascripts/application/autocomplete.js
@@ -4,7 +4,7 @@ $(document).ready(function() {
 		source: function (request, response) {
 			$.ajax({
 				url: "/autocomplete",
-				data: { q: request.term },
+				data: { query: request.term },
 				dataType: "json",
 				success: response,
 				error: function () {
diff --git a/app/assets/javascripts/management/institutions.coffee b/app/assets/javascripts/management/institutions.coffee
index 24edb353d62c2955277978889d478edf15b0666b..b9fc9e9669381a293bbe1c93a9a5910a3ab0c590 100644
--- a/app/assets/javascripts/management/institutions.coffee
+++ b/app/assets/javascripts/management/institutions.coffee
@@ -24,7 +24,7 @@ $ ->
         len = all.length
         html = ''
         while i < len
-          name = 'user_' + all[i].rid.split(':').slice(-1)[0]
+          name = 'user_' + all[i].id
           html += '<input type="checkbox" class="institutional-user-element" data-uid="' + all[i].id + '" data-institution-id="' + institution_id + '" id="' + name + '"'
           if lookup[all[i].id] != undefined
             html += " checked"
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 72738b2576c586728bb1990ed969421a3a18a1c5..fa2e1abfe2cbb1a83f18fa94066f136fdfe8444a 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -21,6 +21,7 @@
 @import "select2";
 @import "select2-bootstrap";
 @import "bootstrap-tagsinput";
+@import "spinners";
 
 $header-blue: #1676bc;
 $link-grey: #343D3E;
diff --git a/app/builders/attribute_builder.rb b/app/builders/attribute_builder.rb
index 2e6526c3de74377e4a5a3f5385f054f99c8c21a8..b471ea786fd67304389e0af79a0047ae0562248b 100644
--- a/app/builders/attribute_builder.rb
+++ b/app/builders/attribute_builder.rb
@@ -8,7 +8,7 @@ class AttributeBuilder < Builder
 
   def self.build_from_orientdb(args = {})
     super(args) do
-      Attribute.new(
+      ::Orientdb::Attribute.new(
         id: args['@rid'],
         key: args['key'],
         value: args['value']
diff --git a/app/builders/collection_builder.rb b/app/builders/collection_builder.rb
index c26d1fc920b697edc8071c0a03c954879889877e..83bb9fa94699243070d53cf5cd4a63a12973da25 100644
--- a/app/builders/collection_builder.rb
+++ b/app/builders/collection_builder.rb
@@ -14,7 +14,7 @@ class CollectionBuilder < Builder
   def self.build_from_orientdb(args = {})
     super(args) do
       learning_objects = args['learning_objects'].nil? ? [] : LearningObjectBuilder.build(map_rid_to_object(args['learning_objects']))
-      obj = Collection.new(
+      obj = Orientdb::Collection.new(
         learning_objects: learning_objects,
         privacy: args['privacy'],
         id: args['@rid'],
diff --git a/app/builders/complaint_builder.rb b/app/builders/complaint_builder.rb
index ea434a24bbc8a18f3fa46cdf4332928b02ff950a..2bfa6416852ab094e8aaa1ac8dfdf24ab1d360ac 100644
--- a/app/builders/complaint_builder.rb
+++ b/app/builders/complaint_builder.rb
@@ -11,12 +11,12 @@ class ComplaintBuilder < Builder
       created = DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
       created = DateTime.strptime(args['created_at'], "%Y-%m-%d %H:%M:%S") unless args['created_at'].blank?
 
-      Complaint.new(
+      Orientdb::Complaint.new(
         id: args['@rid'],
         user: user_repository.get_by_rid(args['out']),
         created_at: created,
         object: learning_object_repository.find(args['in'].to_s),
-        message: ComplaintMessage.new(args['message']),
+        message: Orientdb::ComplaintMessage.new(args['message']),
         description: args['description'] || ''
       )
     end
diff --git a/app/builders/institution_builder.rb b/app/builders/institution_builder.rb
index e41388c00dfed1e528b3ce2c7353fd3012421319..41e49bd6ff4e3b3c50d5c4f1a5702e305c16937d 100644
--- a/app/builders/institution_builder.rb
+++ b/app/builders/institution_builder.rb
@@ -8,7 +8,7 @@ class InstitutionBuilder < Builder
 
   def self.build_from_orientdb(args = {})
     super(args)
-      Institution.new(
+    Orientdb::Institution.new(
         id: args['@rid'],
         name: args['name'],
         created_at: args['created_at'],
diff --git a/app/builders/learning_object/attachment_builder.rb b/app/builders/learning_object/attachment_builder.rb
index 82fde31334d66407faf66202ba54ac5664a81c4a..30dae96ad3aca4e8d904375711349753efed29fd 100644
--- a/app/builders/learning_object/attachment_builder.rb
+++ b/app/builders/learning_object/attachment_builder.rb
@@ -8,7 +8,7 @@ class LearningObject::AttachmentBuilder < ::Builder
 
   def self.build_from_orientdb(args = {})
     build_from_cache args do
-      ::LearningObject::Attachment.new(sanitize_args(args))
+      ::Orientdb::LearningObject::Attachment.new(sanitize_args(args))
     end
   end
 
diff --git a/app/builders/learning_object_builder.rb b/app/builders/learning_object_builder.rb
index 8f7eec29af5b9cfda451a3dfe90c724cc185e485..485c92c0701682e1dd82b9ce576a3e7ec0b93e26 100644
--- a/app/builders/learning_object_builder.rb
+++ b/app/builders/learning_object_builder.rb
@@ -7,11 +7,28 @@ class LearningObjectBuilder < Builder
     super(learning_object_repository, objects, true, 'rid')
   end
 
+  def self.build_from_dspace(item)
+    lo = LearningObject.new(
+      name: item.name,
+      id_dspace: item.id,
+      thumbnail: nil,
+      metadata: item.metadata.to_json
+    )
+
+    lo.author = lo.get_metadata_values_of('dc.contributor.author').join(', ')
+    lo.description = lo.get_metadata_value_of('dc.description')
+    lo.object_type = lo.get_metadata_value_of('dc.type')
+    lo.language = lo.get_metadata_value_of('dc.language')
+    date = lo.get_metadata_value_of('dc.date.issued')
+    lo.published_at = Time.iso8601(date) unless date.nil?
+    lo
+  end
+
   def self.build_from_orientdb(args = {})
     super(args) do
       # args['metadata'] = []
       args['metadata'] = JSON.parse(args['metadata']) if args['metadata'].class == String
-      obj = LearningObject.new(
+      obj = Orientdb::LearningObject.new(
           id: args['@rid'],
           name: args['name'],
           description: args['description'],
diff --git a/app/builders/subject_builder.rb b/app/builders/subject_builder.rb
index b211cbc497c9b36befe3df9547e91f2359502807..3f8e0c53f83f9ed3dc54e07a2129f1abffc0a32d 100644
--- a/app/builders/subject_builder.rb
+++ b/app/builders/subject_builder.rb
@@ -12,7 +12,7 @@ class SubjectBuilder < Builder
 
   def self.build_from_orientdb(args = {})
     super(args) do
-      Subject.new(
+      Orientdb::Subject.new(
         id: args['@rid'],
         name: args['name'],
         created_at: args['created_at'],
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 106b97dbe9c01f0768f25cdb9a2df90a03e47bb6..63c441455e67618f7c7a8859a45386ee9a7bf1bd 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -6,16 +6,11 @@ class ApplicationController < ActionController::Base
   protect_from_forgery with: :null_session
   before_action :count_learning_objects
   before_action :configure_permitted_parameters, if: :devise_controller?
-  before_action :set_current_user_collections, if: :user_signed_in?
 
   protected
 
   def count_learning_objects
-    @learning_object_count = learning_object_repository.count_all
-  end
-
-  def set_current_user_collections
-    @user_collections = collection_repository.all Collections::UserContext.new(current_user)
+    @learning_object_count = LearningObject.count
   end
 
   def configure_permitted_parameters
@@ -32,17 +27,4 @@ class ApplicationController < ActionController::Base
     end
   end
 
-  def dspace_service
-    @dspace_service ||= DspaceService.new(
-        DspaceService.create_dspace_client(
-            Rails.application.secrets.dspace_host,
-            get_dspace_authenticable_token
-        )
-    )
-  end
-
-  def get_dspace_authenticable_token
-    session[:dspace_auth_token] || nil
-  end
-
 end
diff --git a/app/controllers/collections_controller.rb b/app/controllers/collections_controller.rb
index 377bcf070322933996b6abee984ba97c8858d96b..579ac97593418960f11e7cce6a570e003b3116ad 100644
--- a/app/controllers/collections_controller.rb
+++ b/app/controllers/collections_controller.rb
@@ -9,8 +9,7 @@ class CollectionsController < ApplicationController
     respond_to do |format|
       # for HTML page, returns institutional collections
       format.html do
-        context = Collections::InstitutionsContext.new(institution_repository.all)
-        @collections = collection_repository.all context
+        @collections = Collection.all.where(owner: Institution.all)
       end
 
       # returns all collection of logged user as JSON for UI actions
@@ -37,7 +36,7 @@ class CollectionsController < ApplicationController
       @own = user_signed_in? ? @collection.owner?(current_user) : false
     end
 
-    render partial: 'list' if params[:list] == "true"
+    render partial: 'list' if params[:list] == 'true'
   end
 
   # POST /collections/1/like
@@ -52,7 +51,7 @@ class CollectionsController < ApplicationController
     @collection.owner = current_user if collection_params[:owner].blank?
 
     respond_to do |format|
-      if collection_repository.create @collection
+      if @collection.save
         format.html { redirect_to :back, notice: 'Coleção criada com sucesso.' }
       else
         format.html { render :new }
@@ -88,7 +87,7 @@ class CollectionsController < ApplicationController
     # list all
     @collection = nil if @collection == 'all'
 
-    @collections = collection_repository.all(Collections::UserContext.new(current_user))
+    @collections = Collection.from_user(current_user)
     @collections.select! { |c| c.id != @collection.id } unless @collection.blank?
 
     unless params[:type].blank?
@@ -125,16 +124,13 @@ class CollectionsController < ApplicationController
     @collections.each do |collection|
       if collection.owner?(current_user)
         @learning_objects.each do |learning_object|
-          collection.add learning_object
+          collection.learning_objects << learning_object
         end
-
-        collection_repository.save_learning_objects(collection)
+        collection.save
       end
     end
 
-    if request.xhr?
-      render json: {status: true}
-    end
+    render json: { status: true } if request.xhr?
   end
 
   # DELETE /collections/1/learning_object
@@ -142,50 +138,48 @@ class CollectionsController < ApplicationController
     @collections.each do |collection|
       if collection.owner?(current_user)
         @learning_objects.each do |learning_object|
-          collection.remove learning_object
+          collection.learning_objects.destroy(learning_object)
         end
-
-        collection_repository.save_learning_objects(collection)
+        collection.save
       end
     end
 
-    if request.xhr?
-      render json: {status: true}
-    end
+    render json: { status: true } if request.xhr?
   end
 
   # change collection privacy
   def change_privacy
-    collection_repository.change_privacy(@collection, params[:privacy])
+    @collection.privacy = params[:privacy]
 
-    if request.xhr?
-      render json: {status: true}
-    end
+    response = @collection.save
+
+    render json: { status: response } if request.xhr?
   end
 
   private
+
   def check_collection_privacy!(collection)
-    if collection.privacy == "private"
+    if collection.private?
       redirect_to :root, notice: 'Está é uma coleção privada.' unless collection.owner?(current_user)
     end
   end
 
   def set_collection
-    @collection = collection_repository.find params[:id]
+    @collection = Collection.find params[:id]
   end
 
   def set_collections
     if params[:id] == "all" || params[:id].blank?
       @collections = ['all']
     else
-      @collections = (params[:id].class == String) ? [collection_repository.find(params[:id])] : params[:id].map{|id| collection_repository.find id}
+      @collections = (params[:id].class == String) ? [Collection.find(params[:id])] : params[:id].map{|id| Collection.find id}
     end
 
     unless params[:learning_objects_ids].blank?
       @learning_objects = []
 
       params[:learning_objects_ids].split(',').each do |id|
-        object = learning_object_repository.find id
+        object = LearningObject.find id
         @learning_objects << object unless object.blank?
       end
     end
@@ -201,7 +195,7 @@ class CollectionsController < ApplicationController
 
   # Never trust parameters from the scary internet, only allow the white list through.
   def collection_params
-    params.require(:collection).permit(:name, :description, :owner,learning_objects: [])
+    params.require(:collection).permit(:name, :description, :owner, learning_objects: [])
   end
 
 end
diff --git a/app/controllers/institutions_controller.rb b/app/controllers/institutions_controller.rb
index 9bc354c56c7823d2b44ef7eb378807a43ab2ec7e..15c60d0212fde1e5f4dd7893a16bf9a1089d6191 100644
--- a/app/controllers/institutions_controller.rb
+++ b/app/controllers/institutions_controller.rb
@@ -58,13 +58,13 @@ class InstitutionsController < ApplicationController
   end
 
   def users
-    @users = institution_repository.associated_with @institution
+    @users = @institution.users
   end
 
   private
 
   def set_institution
-    @institution = institution_repository.find(params[:id])
+    @institution = Institution.find(params[:id])
   end
 
   # Never trust parameters from the scary internet, only allow the white list through.
diff --git a/app/controllers/learning_objects_controller.rb b/app/controllers/learning_objects_controller.rb
index 135da181b20d402d92689bec79bc7aa7d3a3c0e4..847ded97dc0c2a250359137e641bc0344946e551 100644
--- a/app/controllers/learning_objects_controller.rb
+++ b/app/controllers/learning_objects_controller.rb
@@ -14,7 +14,7 @@ class LearningObjectsController < ApplicationController
   # GET /learning_objects/1
   # GET /learning_objects/1.json
   def show
-    @liked = learning_object_repository.liked?(current_user, @learning_object) if user_signed_in?
+    @liked = !@learning_object.likes.where(user: current_user).blank? if user_signed_in?
   end
 
   # GET /learning_objects/new
@@ -83,7 +83,7 @@ class LearningObjectsController < ApplicationController
     end
 
     if request.xhr?
-      render json: {count: @learning_object.likes, id: params[:id]}
+      render json: {count: @learning_object.likes.count, id: params[:id]}
     end
   end
 
@@ -118,14 +118,14 @@ class LearningObjectsController < ApplicationController
 
   # Use callbacks to share common setup or constraints between actions.
   def set_learning_object
-    @learning_object = learning_object_repository.find params[:id]
+    @learning_object = LearningObject.find params[:id]
   end
 
   def set_learning_object_type
     allowed_types = ['Vídeo', 'Imagem', 'Áudio']
 
-    if allowed_types.include? @learning_object.type
-      @type = @learning_object.type
+    if allowed_types.include? @learning_object.object_type
+      @type = @learning_object.object_type
     else
       @type = case @learning_object.default_attachment.mime_type
                 when /image\//i then 'Imagem'
@@ -142,9 +142,7 @@ class LearningObjectsController < ApplicationController
   end
 
   def increment_learning_object_views
-    if user_signed_in?
-      learning_object_repository.increment_views current_user, @learning_object
-    end
+    View.create(viewable: @learning_object, user: current_user) if user_signed_in?
   end
 
   def success_redirect(learning_object)
diff --git a/app/controllers/management/carousels_controller.rb b/app/controllers/management/carousels_controller.rb
index b39f2c5bb0e2d4a120d6c6111dba53d9ff836c4b..9eb9c5e295db8333ece0da6cb17452b3707780e1 100644
--- a/app/controllers/management/carousels_controller.rb
+++ b/app/controllers/management/carousels_controller.rb
@@ -2,7 +2,7 @@ class Management::CarouselsController < ManagementController
   before_action :set_carousel, only: [:edit, :update, :destroy]
 
   def index
-    @carousels = carousel_repository.all
+    @carousels = Carousel.all
   end
 
   def new
@@ -13,7 +13,7 @@ class Management::CarouselsController < ManagementController
     @carousel = Carousel.new(carousel_params)
 
     respond_to do |format|
-      if carousel_repository.save @carousel
+      if @carousel.save
         format.html { redirect_to management_carousels_path }
       else
         format.html { render :new }
@@ -26,7 +26,7 @@ class Management::CarouselsController < ManagementController
 
   def update
     respond_to do |format|
-      if carousel_repository.update(@carousel, carousel_params)
+      if @carousel.update(carousel_params)
         format.html { redirect_to management_carousels_path }
       else
         format.html { render :edit }
@@ -36,7 +36,7 @@ class Management::CarouselsController < ManagementController
 
   def destroy
     @carousel.image = nil
-    carousel_repository.destroy @carousel
+    @carousel.destroy
     respond_to do |format|
       format.html { redirect_to management_carousels_path }
     end
@@ -45,7 +45,7 @@ class Management::CarouselsController < ManagementController
   private
 
   def set_carousel
-    @carousel = carousel_repository.find params[:id]
+    @carousel = Carousel.find params[:id]
   end
 
   def carousel_params
diff --git a/app/controllers/management/institutions_controller.rb b/app/controllers/management/institutions_controller.rb
index 7ae24fe55649646028423c0171b9fbb2fd3ae115..9cc46be075da09ef71d754c0a5db64aef3f6ec42 100644
--- a/app/controllers/management/institutions_controller.rb
+++ b/app/controllers/management/institutions_controller.rb
@@ -4,7 +4,7 @@ class Management::InstitutionsController < ManagementController
   # GET /management/institutions
   # GET /management/institutions.json
   def index
-    @institutions = institution_repository.all || []
+    @institutions = Institution.all
   end
 
   # GET /management/institutions/1
@@ -27,7 +27,7 @@ class Management::InstitutionsController < ManagementController
     @institution = Institution.new(institution_params)
 
     respond_to do |format|
-      if institution_repository.create @institution
+      if @institution.save
         format.html { redirect_to [:management, @institution], notice: 'Instituição criada com sucesso.' }
         format.json { render :show, status: :created, location: @institution }
       else
@@ -42,7 +42,10 @@ class Management::InstitutionsController < ManagementController
   def add_user
     user = User.find(params[:user_id])
 
-    institution_repository.add_user(user, @institution) unless user.blank?
+    unless user.blank?
+      @institution.users << user
+      @institution.save
+    end
 
     render json: true
   end
@@ -50,9 +53,7 @@ class Management::InstitutionsController < ManagementController
   # DELETE /management/institutions/:id/user/:user_id
   # remove user from institution
   def remove_user
-    user = User.find(params[:user_id])
-
-    institution_repository.remove_user(user, @institution) unless user.blank?
+    @institution.users.delete(params[:user_id])
 
     render json: true
   end
@@ -61,7 +62,7 @@ class Management::InstitutionsController < ManagementController
   # PATCH/PUT /management/institutions/1.json
   def update
     respond_to do |format|
-      if @institution.update(institution_params)
+      if @institution.update institution_params
         format.html { redirect_to [:management, @institution], notice: 'Instituição modificada com sucesso.' }
         format.json { render :show, status: :ok, location: @institution }
       else
@@ -74,7 +75,7 @@ class Management::InstitutionsController < ManagementController
   # DELETE /management/institutions/1
   # DELETE /management/institutions/1.json
   def destroy
-    institution_repository.destroy @institution
+    @institution.destroy
     respond_to do |format|
       format.html { redirect_to management_institutions_url, notice: 'Instituição deletada com sucesso.' }
       format.json { head :no_content }
@@ -82,13 +83,13 @@ class Management::InstitutionsController < ManagementController
   end
 
   private
-    # Use callbacks to share common setup or constraints between actions.
-    def set_institution
-      @institution = institution_repository.find(params[:id])
-    end
+  # Use callbacks to share common setup or constraints between actions.
+  def set_institution
+    @institution = Institution.find params[:id]
+  end
 
-    # Never trust parameters from the scary internet, only allow the white list through.
-    def institution_params
-      params[:institution]
-    end
+  # Never trust parameters from the scary internet, only allow the white list through.
+  def institution_params
+    params.require(:institution).permit(:name, :city, :country, :address, :description)
+  end
 end
diff --git a/app/controllers/management/statistics_controller.rb b/app/controllers/management/statistics_controller.rb
index c073cd2c2de8a2ed88f5f75547dce5896ace44da..a2b32010c871c2ac8f53c744fc2f319300f56ef0 100644
--- a/app/controllers/management/statistics_controller.rb
+++ b/app/controllers/management/statistics_controller.rb
@@ -24,21 +24,9 @@ class Management::StatisticsController < ManagementController
   def users
     #missing roles
     @n_users = User.count
-    @n_curators = 0
-    @n_admins = 0
-    @n_teachers = 0
-    User.includes(:roles).all.each do |u|
-      if !u.roles[0].nil?
-        if u.roles[0]["name"] == "curator"
-          @n_curators += 1
-        elsif u.roles[0]["name"] == "admin"
-          @n_admins += 1
-        elsif u.roles[0]["name"] == "teacher"
-          @n_teachers +=1
-        end
-      end
-    end
-
+    @n_curators = Role.find_by(name: "curator").users.size
+    @n_admins = Role.find_by(name: "admin").users.size
+    @n_teachers = Role.find_by(name: "teacher").users.size
   end
 
   def accesses
@@ -74,11 +62,11 @@ class Management::StatisticsController < ManagementController
 
   def set_statistics
     @@n_users = User.count
-    @@n_collections = collection_repository.get_number_of_collections || []
-    @@n_learning_objects = learning_object_repository.count_all || []
-    @@n_non_visualised = learning_object_repository.get_number_of_non_visualised || []
-    @@most_visualised = learning_object_repository.get_most_visualised || []
-    @@n_views = learning_object_repository.get_number_of("Views") || []
+    @@n_collections = Collection.all.size
+    @@n_learning_objects = LearningObject.all.size
+    @@n_non_visualised = LearningObject.where(views_count: 0).size
+    @@most_visualised = LearningObject.order(:views_count)
+    @@n_views = LearningObject.sum(:views_count)
    end
 
   def views
diff --git a/app/controllers/management/users_controller.rb b/app/controllers/management/users_controller.rb
index 73bdc0ff6cab056350dba03b882e2ce658f69068..61eaf953179d25dd84bdeaf0c1414021824dde03 100644
--- a/app/controllers/management/users_controller.rb
+++ b/app/controllers/management/users_controller.rb
@@ -3,7 +3,7 @@ class Management::UsersController < ManagementController
   before_action :set_roles, only: [:new, :edit]
 
   def index
-    @users = user_repository.all
+    @users = User.includes(:roles).all
   end
 
   # GET /users/1
@@ -24,11 +24,10 @@ class Management::UsersController < ManagementController
   # POST /users.json
   def create
     @user = User.new(user_params)
-    @user.roles.ids = role_repository.all.ids
 
     respond_to do |format|
-      if user_repository.save @user
-        format.html { redirect_to management_user_path(@user), notice: "User created!" }
+      if @user.save
+        format.html { redirect_to management_users_path, notice: "User created!" }
         format.json { render :show, status: :created, location: @user }
       else
         format.html { render :new }
@@ -41,8 +40,8 @@ class Management::UsersController < ManagementController
   # PATCH/PUT /users/1.json
   def update
     respond_to do |format|
-      if user_repository.update(@user, user_params)
-        format.html { redirect_to management_user_path(@user), notice: "User updated!" }
+      if @user.update(user_params)
+        format.html { redirect_to management_users_path, notice: "User updated!" }
       else
         format.html { render :edit }
       end
@@ -52,7 +51,7 @@ class Management::UsersController < ManagementController
   # DELETE /users/1
   # DELETE /users/1.json
   def destroy
-    user_repository.destroy @user
+    @user.destroy
     respond_to do |format|
       format.html { redirect_to management_users_path, notice: "User destroyed!" }
     end
@@ -60,10 +59,10 @@ class Management::UsersController < ManagementController
 
   def change_roles
     @user.roles = []
-    @user.roles << role_repository.find_by_id(params[:role_id])
+    @user.roles << Role.find(params[:role_id])
 
     respond_to do |format|
-      if user_repository.save @user
+      if @user.save
         format.html {redirect_to :back, notice: "Usuário #{@user.name} definido como #{@user.roles[0].name}"}
       else
         format.html {redirect_to :back, notice: "Erro na atribuição!"}
@@ -77,7 +76,7 @@ class Management::UsersController < ManagementController
     @users = User.includes(:roles).all
     @users.all.each do |user|
       if !user.roles[0].nil?
-        @curators << user unless !(user.roles[0].name == "curator") 
+        @curators << user unless !(user.roles[0].name == "curator")
       end
     end
   end
@@ -96,7 +95,7 @@ class Management::UsersController < ManagementController
 
   # Use callbacks to share common setup or constraints between actions.
   def set_user
-    @user = user_repository.find(params[:id])
+    @user = User.find(params[:id])
   end
 
   # Never trust parameters from the scary internet, only allow the white list through.
@@ -105,7 +104,7 @@ class Management::UsersController < ManagementController
   end
 
   def set_roles
-    @roles = role_repository.all
+    @roles = Role.all
   end
 
 end
diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
index 98cb38d14bb84b25f7345937b55dc3cb09c3143b..70e9f5b69c8640ea40d04aa5e4e589df12ecd55a 100644
--- a/app/controllers/search_controller.rb
+++ b/app/controllers/search_controller.rb
@@ -1,52 +1,60 @@
 class SearchController < ApplicationController
-  include SearchEngine::OrientdbLucene
-
   def index
     @types = learning_object_repository.types
 
-    @subjects = Subject.default_list
+    @subjects = Topic.default_list
 
-    @school_levels = ['Educação Infantil', 'Ensino Fundamental', 'Ensino Médio']
+    @school_levels = ['Educação Infantil', 'Ensino Fundamental', 'Ensino Médio'].map { |o| Topic.find_by_name(o) }
 
-    @source = institution_repository.all
+    @source = Institution.all
   end
 
   def fetch
-    objectsFound = []
-
-    params[:subject]= params[:subject].split(', ') unless params[:subject].nil?
-    params[:type] = params[:type].split(', ') unless params[:type].nil?
-    params[:school_level] = params[:school_level].split(', ') unless params[:school_level].nil?
-    params[:year] = params[:year].split('-').take(2) unless params[:year].nil?
-    page=1
-    if (params[:page])
-      page = params[:page].to_i
-    end
+    params[:query] = "*" if params[:query].blank?
 
-    @pagination_limit=10
+    @result = LearningObject.search params[:query], where: where_hash(params), order: order_hash(params), page: params[:page] || 1, per_page: 10
 
-    unless params[:query].blank?
-      objectsFound = search params
-      @numFound = objectsFound.length
-    end
+    render partial: 'search/fetch'
+  end
+
+  def autocomplete
+    render json: LearningObject.search(params[:query], {
+      fields: ['name^5', 'author'],
+      limit: 10,
+      load: false,
+      misspellings: { below: 5 }
+    }).map(&:name)
+  end
 
-    @result = Kaminari.paginate_array(objectsFound).page(page).per(@pagination_limit)
-    @last_page = (@result.num_pages <= page) ? true : false;
+  private
 
-    # build objects from one page only
-    @objects = GenericBuilder.build(@result)
+  def where_hash(params)
+    hash = {}
 
-    render partial: 'search/fetch'
+    topics = params[:subject] unless params[:subject].blank?
+    topics += ", " unless topics.nil?
+    topics = topics.to_s + params[:school_level] unless params[:school_level].blank?
+
+    # build hash
+    hash[:topics_name] = topics.split(', ') unless topics.nil?
+    hash[:object_type] = params[:type].split(', ') unless params[:type].blank?
+    # year = params[:year].blank? ? nil : params[:year].split('-').take(2)
+
+    hash.blank? ? nil : hash
   end
 
-  def autocomplete
-    begin
-      auto = AutocompleteService.new
-      query = params['q'] || ''
-      json_data = auto.query(query)
-      render text: json_data
-    rescue
-      render text: '[]'
+  def order_hash(params)
+    case params[:order]
+    when 'author'
+      { author: :asc }
+    when 'publicationasc'
+      { published_at: :asc }
+    when 'publicationdesc'
+      { published_at: :desc }
+    when 'title'
+      { name: :asc }
+    else
+      { score: :desc }
     end
   end
 
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index d8ae7a02f5bf663c5c7cb01f639f158241d2e4f5..0d05825874299f4a0adc22779709c322c8ac3035 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -21,7 +21,7 @@ class UsersController < ApplicationController
   end
 
   def me
-    @publishers = publishers_for current_user
+    @publishers = current_user.institutions
     @objects = current_user.learning_objects
     @bookmarks = current_user.bookmarks
     @groups = [
@@ -33,7 +33,7 @@ class UsersController < ApplicationController
   end
 
   def list
-    @users = user_repository.all
+    @users = User.all
   end
 
   private
diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb
index ff6597b91f18eccd4015ee14220eee7cdd352350..3b374228aab799a0fd298d23d90e8f780c152742 100644
--- a/app/controllers/welcome_controller.rb
+++ b/app/controllers/welcome_controller.rb
@@ -1,9 +1,9 @@
 class WelcomeController < ApplicationController
 
   def index
-    @carousel = carousel_repository.all || []
+    @carousel = Carousel.all || []
 
-    @highlights = learning_object_repository.all_by_score_from_offset_to_limit 0, 6
+    @highlights = LearningObject.order(:score).limit(6)
   end
 
   def faq
diff --git a/app/helpers/bookmarks_helper.rb b/app/helpers/bookmarks_helper.rb
new file mode 100644
index 0000000000000000000000000000000000000000..433821fa2298397dc533180373ea9d942da37f14
--- /dev/null
+++ b/app/helpers/bookmarks_helper.rb
@@ -0,0 +1,15 @@
+module BookmarksHelper
+
+  ##
+  # x objetos educacionais
+  def bookmark_length(user)
+    count = user.bookmarks.count
+
+    if count > 0
+      "#{count} objetos"
+    else
+      'nenhum item'
+    end
+  end
+
+end
diff --git a/app/helpers/learning_objects_helper.rb b/app/helpers/learning_objects_helper.rb
index f561f4e9964b43f0c92376e692c0a367d4202601..3f052804f0e2f6cb83f9cdd3827b63721ce98b24 100644
--- a/app/helpers/learning_objects_helper.rb
+++ b/app/helpers/learning_objects_helper.rb
@@ -6,7 +6,7 @@ module LearningObjectsHelper
 
   def learning_object_thumbnail(learning_object, size = "")
     if learning_object.thumbnail.blank?
-      thumbnail = case learning_object.type
+      thumbnail = case learning_object.object_type
       when "Vídeo" then 'video.png'
       when "Imagem" then 'image.png'
       when "Hipertexto" then 'text.png'
diff --git a/app/models/bookmark.rb b/app/models/bookmark.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e3440ab12cbb8f3339587e9524a88c3418de6461
--- /dev/null
+++ b/app/models/bookmark.rb
@@ -0,0 +1,6 @@
+class Bookmark < ActiveRecord::Base
+  belongs_to :user, counter_cache: true
+  belongs_to :bookmarkable, polymorphic: true
+
+  validates :user_id, uniqueness: { scope: [:bookmarkable_id, :bookmarkable_type] }
+end
diff --git a/app/models/collection.rb b/app/models/collection.rb
index a39ca74c501250bda6cccc9421a479b274034b28..c602de343fc999ded56ed4db1d640b96948573f3 100644
--- a/app/models/collection.rb
+++ b/app/models/collection.rb
@@ -1,62 +1,24 @@
-class Collection
-  include ActiveModel::Model
-  include OrientDbSerializable
-  include RepositoriesProxy
-  attr_accessor :id, :created_at, :last_modified, :name, :description, :privacy,
-                :owner, :learning_objects
-  validates_presence_of :name, :created_at, :owner, :learning_objects
+class Collection < ActiveRecord::Base
+  include Reviewable
+  include Sociable
+  include Followable
 
-  def initialize(params = {})
-    super(defaults.merge(params))
-  end
-
-  ##
-  # Add +learning_object+ to collection
-  #
-  # After adding some learning object to collection, you must use CollectionRepository to persist
-  # the changes.
-  #
-  # Example:
-  #   @test_collection = Collection.new(name: 'test', description: 'test', owner: current_user)
-  #   @test_collection.add @learning_object
-  #
-  #   @test_collection.learning_objects # [@learning_object]
-  #   collection_repository.save @test_collection
-  def add(learning_object)
-    learning_objects.append learning_object
-  end
-
-  ##
-  # Remove +learning_object+ from collection
-  #
-  # After remove some learning object to collection, you must use CollectionRepository to persist
-  # the changes.
-  def remove(learning_object)
-    learning_objects.delete_if { |x| x.id == learning_object.id }
-  end
+  has_many :collection_items, as: :collectionable
+  has_many :collections, through: :collection_items, source: :collectionable, source_type: 'Collection'
+  has_many :learning_objects, through: :collection_items, source: :collectionable, source_type: 'LearningObject'
+  has_many :collection_items
 
-  def owner?(user)
-    collection_repository.owner?(self, user)
-  end
+  belongs_to :owner, polymorphic: true
 
-  def valid?
-    !@name.blank?
-  end
+  validates :privacy, inclusion: { in: %w(public private), message: "%{value} is not a valid privacy" }
 
-  protected
+  scope :from_user, ->(user) { where(owner: user) }
 
-  def excluded_orientdb_properties
-    ['owner']
+  def owner?(candidate)
+    owner == candidate
   end
 
-  def defaults
-    {
-        created_at: DateTime.now.strftime("%Y-%m-%d %H:%M:%S"),
-        last_modified: DateTime.now.strftime("%Y-%m-%d %H:%M:%S"),
-        owner: User.new,
-        learning_objects: [],
-        privacy: 'private'
-    }
+  def private?
+    privacy == 'private'
   end
-
 end
diff --git a/app/models/collection_item.rb b/app/models/collection_item.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5aba4c6d945baf546d28cde15fd3060dbd811353
--- /dev/null
+++ b/app/models/collection_item.rb
@@ -0,0 +1,7 @@
+class CollectionItem < ActiveRecord::Base
+  belongs_to :collection
+
+  belongs_to :collectionable, polymorphic: true
+
+  validates_presence_of :collection, :collectionable
+end
diff --git a/app/models/collections/context.rb b/app/models/collections/context.rb
deleted file mode 100644
index b2a971487086393f6f43b4b4924625dd5698b9bd..0000000000000000000000000000000000000000
--- a/app/models/collections/context.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-module Collections
-  class Context
-
-    def from
-      raise NotImplementedError, 'This method must be implemented'
-    end
-
-    def privacy
-      nil
-    end
-
-  end
-end
diff --git a/app/models/collections/institutions_context.rb b/app/models/collections/institutions_context.rb
deleted file mode 100644
index 1ffa31c4f366984628bb5e06c95081219d88fc70..0000000000000000000000000000000000000000
--- a/app/models/collections/institutions_context.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-##
-# This class represents an specification for listing collections
-# The PublicContext class specify all collections with field privacy=public
-module Collections
-  class InstitutionsContext < Context
-
-    def initialize(institutions)
-      @institutions = institutions
-    end
-
-    def from
-      ids = @institutions.map(&:id).join(',')
-      sprintf "(SELECT FROM (select expand(in('BelongsTo')) from [%s]) WHERE @class = 'Collection')", ids
-    end
-
-    def privacy
-      'public'
-    end
-
-  end
-end
\ No newline at end of file
diff --git a/app/models/collections/public_context.rb b/app/models/collections/public_context.rb
deleted file mode 100644
index ba6b51acab6499e387e277d8b0a245e282baaadd..0000000000000000000000000000000000000000
--- a/app/models/collections/public_context.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-##
-# This class represents an specification for listing collections
-# The PublicContext class specify all collections with field privacy=public
-module Collections
-  class PublicContext < Context
-
-    def from
-      'Collection'
-    end
-
-    def privacy
-      'public'
-    end
-
-  end
-end
\ No newline at end of file
diff --git a/app/models/collections/user_context.rb b/app/models/collections/user_context.rb
deleted file mode 100644
index e9610f1625ec967cdc43b5db4b18c772b5dfe976..0000000000000000000000000000000000000000
--- a/app/models/collections/user_context.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-module Collections
-
-  ##
-  # This class represents a context for select collections
-  # where select all collections that *user* can see, including institutional collections
-  class UserContext < Context
-
-    def initialize(user)
-      @user = user
-    end
-
-    def from
-      institutions = @user.institutions
-      ids = (institutions.blank?) ? @user.rid : @user.rid + ',' + institutions.map(&:id).join(',')
-
-      sprintf "(SELECT FROM (select expand(in('BelongsTo')) from [%s]) WHERE @class = 'Collection')", ids
-    end
-
-  end
-end
diff --git a/app/models/collections/user_private_context.rb b/app/models/collections/user_private_context.rb
deleted file mode 100644
index 96e7772c1f964a0140a79d9024f08f0d33d79fb1..0000000000000000000000000000000000000000
--- a/app/models/collections/user_private_context.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-##
-# This class represents an specification for listing collections
-# The PublicContext class specify all collections with field privacy=public
-module Collections
-  class UserPrivateContext < UserContext
-
-    def privacy
-      'private'
-    end
-
-  end
-end
\ No newline at end of file
diff --git a/app/models/collections/user_public_context.rb b/app/models/collections/user_public_context.rb
deleted file mode 100644
index 1c5b02014753887eaa6c68f042102028765a0475..0000000000000000000000000000000000000000
--- a/app/models/collections/user_public_context.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-##
-# This class represents an specification for listing collections
-# The PublicContext class specify all collections with field privacy=public
-module Collections
-  class UserPublicContext < UserContext
-
-    def privacy
-      'public'
-    end
-
-  end
-end
\ No newline at end of file
diff --git a/app/models/complaint.rb b/app/models/complaint.rb
index 83ae4172ac55d6be0709eb7aa170ca546952be57..1727c93151b29a49afa3ad2e353f394462f9f0fd 100644
--- a/app/models/complaint.rb
+++ b/app/models/complaint.rb
@@ -1,44 +1,5 @@
-class Complaint
-  include ActiveModel::Model
-  include OrientDbSerializable
-
-  attr_accessor :id, :user, :object, :message, :description, :created_at
-  validates_presence_of :user, :object, :message, :created_at
-
-  def initialize(params={})
-    super(params.merge(defaults))
-  end
-
-  def self.copyrights
-    ComplaintMessage.new("Objeto viola direitos autorais")
-  end
-
-  def self.ofensive_content
-    ComplaintMessage.new "Objeto contém conteúdo ofensivo/abusivo"
-  end
-
-  def self.ofensive_user
-    ComplaintMessage.new "Usuário ofensivo/agressivo"
-  end
-
-  def self.fake_user
-    ComplaintMessage.new "Usuário falso"
-  end
-
-  def to_orientdb_hash
-    super.merge("message" => @message.to_s)
-  end
-
-  private
-
-  def excluded_orientdb_properties
-    ['user', 'object', '@class']
-  end
-
-  def defaults
-    {
-        created_at: DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
-    }
-  end
-
+class Complaint < ActiveRecord::Base
+  belongs_to :user
+  belongs_to :learning_object
+  belongs_to :complaint_reason
 end
diff --git a/app/models/complaint_reason.rb b/app/models/complaint_reason.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f81ffb9976210e191414fe16d854e16de4a026a7
--- /dev/null
+++ b/app/models/complaint_reason.rb
@@ -0,0 +1,3 @@
+class ComplaintReason < ActiveRecord::Base
+  has_many :complaints
+end
diff --git a/app/models/concerns/followable.rb b/app/models/concerns/followable.rb
new file mode 100644
index 0000000000000000000000000000000000000000..743d8712f5933daa5a80e0211e41b71e3366d733
--- /dev/null
+++ b/app/models/concerns/followable.rb
@@ -0,0 +1,20 @@
+module Followable
+  extend ActiveSupport::Concern
+
+  included do
+    has_many :follows, as: :followable
+  end
+
+  def follow(user)
+    Follow.create(user: user, followable: self)
+  end
+
+  def unfollow(user)
+    Follow.where(user: user, followable: self).destroy_all
+  end
+
+  def following?(user)
+    !follows.where(user: user).blank?
+  end
+
+end
\ No newline at end of file
diff --git a/app/models/concerns/metadatable.rb b/app/models/concerns/metadatable.rb
index 57171e4e142451764c9fb1103f165cb690ee899f..a06b88994e4730e442dafdb0f5330f1f0a60e9dc 100644
--- a/app/models/concerns/metadatable.rb
+++ b/app/models/concerns/metadatable.rb
@@ -9,8 +9,9 @@ module Metadatable
 
   def get_metadata_values_of key
     values = []
-    if @metadata.is_a? Array
-      @metadata.each do |m|
+    metadata = JSON.parse(metadata) if metadata.class == String
+    unless metadata.blank?
+      metadata.each do |m|
         m = m.with_indifferent_access
         values << m["value"] if m["key"] == key
       end
@@ -18,4 +19,4 @@ module Metadatable
     values
   end
 
-end
\ No newline at end of file
+end
diff --git a/app/models/concerns/reviewable.rb b/app/models/concerns/reviewable.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e42b0a8715cbc1e56bd2992932017df4984bb6fb
--- /dev/null
+++ b/app/models/concerns/reviewable.rb
@@ -0,0 +1,8 @@
+module Reviewable
+  extend ActiveSupport::Concern
+
+  included do
+    has_many :reviews, as: :reviewable
+  end
+
+end
\ No newline at end of file
diff --git a/app/models/concerns/sociable.rb b/app/models/concerns/sociable.rb
new file mode 100644
index 0000000000000000000000000000000000000000..21ce5ed2a0b626e175aac1f7cef3bfec4df91a21
--- /dev/null
+++ b/app/models/concerns/sociable.rb
@@ -0,0 +1,23 @@
+module Sociable
+  extend ActiveSupport::Concern
+
+  included do
+    has_many :views, as: :viewable
+    has_many :downloads, as: :downloadable
+    has_many :likes, as: :likeable
+    has_many :shares, as: :shareable
+  end
+
+  def liked?(user)
+    !likes.where(user: user).blank?
+  end
+
+  def like(user)
+    Like.create(user: user, likeable: self)
+  end
+
+  def dislike(user)
+    Like.where(user: user, likeable: self).destroy_all
+  end
+
+end
\ No newline at end of file
diff --git a/app/models/concerns/stateful.rb b/app/models/concerns/stateful.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b0e24aa10de8d929e3b2b5804672d299d2272367
--- /dev/null
+++ b/app/models/concerns/stateful.rb
@@ -0,0 +1,20 @@
+module Stateful
+  extend ActiveSupport::Concern
+
+  included do
+    validates_presence_of :state
+  end
+
+  def is_published?
+    'published' == @state
+  end
+
+  def is_draft?
+    'draft' == @state
+  end
+
+  def publish
+    @state = 'published'
+  end
+
+end
\ No newline at end of file
diff --git a/app/models/download.rb b/app/models/download.rb
new file mode 100644
index 0000000000000000000000000000000000000000..23f240594ba80c4c0cd7ac9feec02683a2b02f84
--- /dev/null
+++ b/app/models/download.rb
@@ -0,0 +1,4 @@
+class Download < ActiveRecord::Base
+  belongs_to :downloadable, polymorphic: true, counter_cache: true
+  belongs_to :user
+end
diff --git a/app/models/duplicated_user_index_error.rb b/app/models/duplicated_user_index_error.rb
deleted file mode 100644
index 1356e37c37b4b85f197f64f42071e9fc702438d0..0000000000000000000000000000000000000000
--- a/app/models/duplicated_user_index_error.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class DuplicatedUserIndexError < Orientdb4r::ServerError
-end
\ No newline at end of file
diff --git a/app/models/feedback.rb b/app/models/feedback.rb
deleted file mode 100644
index a43add1966c039ed14e2163d840965dca0eb42c0..0000000000000000000000000000000000000000
--- a/app/models/feedback.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-##Feedback is an user review of the system
-class Feedback < ActiveRecord::Base
-  belongs_to :user
-  has_and_belongs_to_many :feedback_ratings
-end
diff --git a/app/models/feedback_rating.rb b/app/models/feedback_rating.rb
deleted file mode 100644
index a15178b4cc66a8cf83af98bdfe342cd93a55d697..0000000000000000000000000000000000000000
--- a/app/models/feedback_rating.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class FeedbackRating < ActiveRecord::Base
-  has_and_belongs_to_many :feedbacks
-end
diff --git a/app/models/follow.rb b/app/models/follow.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c2384eec7188ec3cf9131488fa74045e2dae4a60
--- /dev/null
+++ b/app/models/follow.rb
@@ -0,0 +1,6 @@
+class Follow < ActiveRecord::Base
+  belongs_to :followable, polymorphic: true, counter_cache: true
+  belongs_to :user
+
+  validates :user_id, uniqueness: { scope: [:followable_id, :followable_type] }
+end
diff --git a/app/models/institution.rb b/app/models/institution.rb
index 6980161060195312aad709c441162a223c2f5038..16ad8b8a3c846c316093348f51a73ca4ceb6e527 100644
--- a/app/models/institution.rb
+++ b/app/models/institution.rb
@@ -1,4 +1,5 @@
-class Institution
-  include ActiveModel::Model
-  attr_accessor :id, :name, :created_at, :last_modified, :country, :city, :description, :thumbnail, :address
-end
\ No newline at end of file
+class Institution < ActiveRecord::Base
+  has_and_belongs_to_many :users
+
+  has_many :learning_objects, as: :publisher
+end
diff --git a/app/models/learning_object.rb b/app/models/learning_object.rb
index 18163e425f4cdd044ac3e8f90d4f4961b2c6f63b..559758044fac2f0cec5a0df882034820010fb2ab 100644
--- a/app/models/learning_object.rb
+++ b/app/models/learning_object.rb
@@ -1,97 +1,49 @@
-class LearningObject
-  include ActiveModel::Model
-  include RepositoriesProxy
-  include OrientDbSerializable
+class LearningObject < ActiveRecord::Base
   include Metadatable
+  include Reviewable
+  include Sociable
+  include Stateful
 
-  EXTERNAL_LINK_TYPE = 'Link Externo'
+  has_and_belongs_to_many :topics
 
-  attr_accessor :id, :id_dspace, :rid, :name, :author, :description,
-                :published_at, :thumbnail, :created_at, :last_modified,
-                :type, :metadata, :score, :school_level, :language,
-                :source, :license, :keywords, :attachments
+  has_many :collection_items, as: :collectionable
+  has_many :collections, through: :collection_items
 
-  #not implemented yet
-  attr_accessor :grade_level
+  has_many :complaints
+  has_many :attachments, class_name: 'LearningObject::Attachment', dependent: :destroy
 
-  # associations
-  attr_accessor :likes, :views, :downloads, :subjects, :attributes, :publisher
+  belongs_to :publisher, polymorphic: true
 
-  # flags
-  attr_accessor :status
+  searchkick language: 'brazilian', searchable: [:name, :description, :author, :object_type]
 
-  validates_presence_of :name, :created_at, :type
-
-  def initialize(params={})
-    super(params.merge(defaults) { |key, oldval, newval| oldval.blank? ? newval : oldval })
-  end
-
-  def retrievelink
-    "#{DspaceService.link}/rest#{default_attachment.retrieve_link}"
-  end
-
-  def default_attachment
-    return attachments.find { |a|  a.bundle_name == 'ORIGINAL' } unless attachments.blank?
-    return attachments.first || LearningObject::Attachment.new
-  end
-
-  def collections
-    collection_repository.find_by_learning_object self
+  def search_data
+    {
+      name: name,
+      description: description,
+      author: author,
+      object_type: object_type,
+      score: score,
+      published_at: published_at,
+      # publisher_id: publisher.id,
+      topics_name: topics.map(&:name)
+    }
   end
 
   def categories
     get_metadata_value_of 'dc.subject.category'
   end
 
-  ## social actions
-  def like(user)
-    learning_object_repository.like user, self
-  end
-
-  def liked?(user)
-    learning_object_repository.liked? user, self
-  end
-
-  def dislike(user)
-    learning_object_repository.dislike user, self
-  end
-
-  def download(user)
-    learning_object_repository.download user, self
-  end
-  ## end social actions
-
-  def likes
-    learning_object_repository.count('Likes', self)
-  end
-
-  def views
-    learning_object_repository.count('Views', self)
-  end
-
-  def to_orientdb_hash
-    bitstreams = attachments.map { |attachment| attachment.to_orientdb_hash }
-    super.merge({'bitstreams' => bitstreams})
+  def default_attachment
+    attachments.where(bundle_name: 'ORIGINAL').first
   end
 
-  def excluded_orientdb_properties
-    ['likes', 'views', 'downloads', 'subjects', 'attributes', 'publisher', 'attachments', 'language']
+  def url_reference
+    get_metadata_value_of 'dc.object.url'
   end
 
-  private
-
-  def defaults
-    {
-        downloads: 0,
-        score: 0,
-        status: 'active',
-        attachments: [],
-        attributes: [],
-        subjects: [],
-        metadata: [],
-        created_at: DateTime.now.strftime("%Y-%m-%d %H:%M:%S"),
-        last_modified: DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
-    }
+  ##checks if learning object link to an url.
+  #returns boolean
+  def has_url_reference?
+    !url_reference.blank?
   end
-
 end
diff --git a/app/models/learning_object/attachment.rb b/app/models/learning_object/attachment.rb
index 60f65a5300facc96bcdc9023369f303e6f9a499a..7b93f32b805630d528aba18fee9f16308b8f5393 100644
--- a/app/models/learning_object/attachment.rb
+++ b/app/models/learning_object/attachment.rb
@@ -1,29 +1,3 @@
-class LearningObject::Attachment
-  include ActiveModel::Model
-  include OrientDbSerializable
-
-  #this attributes mirror Dspace bitstream values
-  attr_accessor :id, :name, :link, :retrieve_link, :description, :format, :mime_type, :size, :bundle_name, :uptodate, :sync_feature
-
-  def to_orientdb_hash
-    super.merge('retrieveLink' => @retrieve_link, 'mimeType' => @mime_type, 'sizeBytes' => @size, 'bundleName' => @bundle_name)
-  end
-
-  def excluded_orientdb_properties
-    super + ['retrieve_link', 'mime_type', 'bundle_name', 'size', '@class']
-  end
-
-  def initialize(params={})
-    @sync_feature = false
-    super(params)
-  end
-
-  #set attachment up to date with dspace
-  def uptodate!
-    @uptodate, @sync_feature = true
-  end
-
-  def uptodate?
-    @uptodate && @sync_feature
-  end
+class LearningObject::Attachment < ActiveRecord::Base
+  belongs_to :learning_object
 end
diff --git a/app/models/learning_object/draft.rb b/app/models/learning_object/draft.rb
index cee1b97ec8094b59979f51003be172b16387ca91..36c59c60019d40172a1b44314d67ac5f7f035b1b 100644
--- a/app/models/learning_object/draft.rb
+++ b/app/models/learning_object/draft.rb
@@ -1,17 +1,9 @@
 class LearningObject::Draft < LearningObject
 
-  def valid?
-    true
-  end
-
-  def to_orientdb_hash
-    super.merge('@class' => 'LearningObject')
-  end
-
-  private
-
-  def defaults
-    super.merge(status: 'draft')
+  ##overwrites initialize method to force @state value as draft
+  def initialize(attributes = nil, options = {})
+    super(attributes, options)
+    @state = 'draft'
   end
 
 end
\ No newline at end of file
diff --git a/app/models/learning_object/type.rb b/app/models/learning_object/type.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5c7496f1c8a180fab03a32f80cd6813f361c95f8
--- /dev/null
+++ b/app/models/learning_object/type.rb
@@ -0,0 +1,5 @@
+class LearningObject::Type
+  URL_REFERENCE = 'url_reference'
+  VIDEO = 'video'
+  IMAGE = 'imagem'
+end
diff --git a/app/models/like.rb b/app/models/like.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3b7e6fcbd203b42b74c950cad41ade236fdc11c6
--- /dev/null
+++ b/app/models/like.rb
@@ -0,0 +1,6 @@
+class Like < ActiveRecord::Base
+  belongs_to :likeable, polymorphic: true, counter_cache: true
+  belongs_to :user
+
+  validates :user_id, uniqueness: { scope: [:likeable_id, :likeable_type] }
+end
diff --git a/app/models/attribute.rb b/app/models/orientdb/attribute.rb
similarity index 76%
rename from app/models/attribute.rb
rename to app/models/orientdb/attribute.rb
index 403de827e79c89db129ffb655cd0e36587ad9c0b..31a726ed47221d347c5af27e5e2c5afd7b1a6731 100644
--- a/app/models/attribute.rb
+++ b/app/models/orientdb/attribute.rb
@@ -1,6 +1,6 @@
-class Attribute
+class Orientdb::Attribute
   include ActiveModel::Model
   include OrientDbSerializable
 
   attr_accessor :id, :key, :value
-end
\ No newline at end of file
+end
diff --git a/app/models/bookmarks.rb b/app/models/orientdb/bookmarks.rb
similarity index 90%
rename from app/models/bookmarks.rb
rename to app/models/orientdb/bookmarks.rb
index 336d216106b993748f43d308095bd5e30e949e21..fae461b14c33b79d67d251b49275aa52992187f8 100644
--- a/app/models/bookmarks.rb
+++ b/app/models/orientdb/bookmarks.rb
@@ -1,7 +1,8 @@
-class Bookmarks < Collection
+class Orientdb::Bookmarks < Collection
   include ActiveModel::Model
   include OrientDbSerializable
   include RepositoriesProxy
+
   attr_accessor :id, :owner, :learning_objects, :last_modified
   validates_presence_of :id, :owner
 
diff --git a/app/models/orientdb/collection.rb b/app/models/orientdb/collection.rb
new file mode 100644
index 0000000000000000000000000000000000000000..65c8546e472d1dad9683eb4757d2e868ef56f90c
--- /dev/null
+++ b/app/models/orientdb/collection.rb
@@ -0,0 +1,62 @@
+class Orientdb::Collection
+  include ActiveModel::Model
+  include OrientDbSerializable
+  include RepositoriesProxy
+  attr_accessor :id, :created_at, :last_modified, :name, :description, :privacy,
+                :owner, :learning_objects
+  validates_presence_of :name, :created_at, :owner, :learning_objects
+
+  def initialize(params = {})
+    super(defaults.merge(params))
+  end
+
+  ##
+  # Add +learning_object+ to collection
+  #
+  # After adding some learning object to collection, you must use CollectionRepository to persist
+  # the changes.
+  #
+  # Example:
+  #   @test_collection = Collection.new(name: 'test', description: 'test', owner: current_user)
+  #   @test_collection.add @learning_object
+  #
+  #   @test_collection.learning_objects # [@learning_object]
+  #   collection_repository.save @test_collection
+  def add(learning_object)
+    learning_objects.append learning_object
+  end
+
+  ##
+  # Remove +learning_object+ from collection
+  #
+  # After remove some learning object to collection, you must use CollectionRepository to persist
+  # the changes.
+  def remove(learning_object)
+    learning_objects.delete_if { |x| x.id == learning_object.id }
+  end
+
+  def owner?(user)
+    collection_repository.owner?(self, user)
+  end
+
+  def valid?
+    !@name.blank?
+  end
+
+  protected
+
+  def excluded_orientdb_properties
+    ['owner']
+  end
+
+  def defaults
+    {
+        created_at: DateTime.now.strftime("%Y-%m-%d %H:%M:%S"),
+        last_modified: DateTime.now.strftime("%Y-%m-%d %H:%M:%S"),
+        owner: User.new,
+        learning_objects: [],
+        privacy: 'private'
+    }
+  end
+
+end
diff --git a/app/models/orientdb/complaint.rb b/app/models/orientdb/complaint.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5bd5ad106071d6f03c12b7418da4f64fd4415a4e
--- /dev/null
+++ b/app/models/orientdb/complaint.rb
@@ -0,0 +1,44 @@
+class Orientdb::Complaint
+  include ActiveModel::Model
+  include OrientDbSerializable
+
+  attr_accessor :id, :user, :object, :message, :description, :created_at
+  validates_presence_of :user, :object, :message, :created_at
+
+  def initialize(params={})
+    super(params.merge(defaults))
+  end
+
+  def self.copyrights
+    ComplaintMessage.new("Objeto viola direitos autorais")
+  end
+
+  def self.ofensive_content
+    ComplaintMessage.new "Objeto contém conteúdo ofensivo/abusivo"
+  end
+
+  def self.ofensive_user
+    ComplaintMessage.new "Usuário ofensivo/agressivo"
+  end
+
+  def self.fake_user
+    ComplaintMessage.new "Usuário falso"
+  end
+
+  def to_orientdb_hash
+    super.merge("message" => @message.to_s)
+  end
+
+  private
+
+  def excluded_orientdb_properties
+    ['user', 'object', '@class']
+  end
+
+  def defaults
+    {
+        created_at: DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
+    }
+  end
+
+end
diff --git a/app/models/complaint_message.rb b/app/models/orientdb/complaint_message.rb
similarity index 78%
rename from app/models/complaint_message.rb
rename to app/models/orientdb/complaint_message.rb
index a87abecbfeac95fbc8431adc9c7ad80fc40dc3f3..492b58c5e3330b7eaa205d8866598afcfd7db978 100644
--- a/app/models/complaint_message.rb
+++ b/app/models/orientdb/complaint_message.rb
@@ -1,4 +1,4 @@
-class ComplaintMessage
+class Orientdb::ComplaintMessage
   attr_accessor :message
 
   def initialize(message)
diff --git a/app/models/orientdb/institution.rb b/app/models/orientdb/institution.rb
new file mode 100644
index 0000000000000000000000000000000000000000..085632c9b1ae55a03be1974e9946713c3373814f
--- /dev/null
+++ b/app/models/orientdb/institution.rb
@@ -0,0 +1,4 @@
+class Orientdb::Institution
+  include ActiveModel::Model
+  attr_accessor :id, :name, :created_at, :last_modified, :country, :city, :description, :thumbnail, :address
+end
\ No newline at end of file
diff --git a/app/models/orientdb/learning_object.rb b/app/models/orientdb/learning_object.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f651dc134d8ab9a105ba77f31f43f6d698d7ef57
--- /dev/null
+++ b/app/models/orientdb/learning_object.rb
@@ -0,0 +1,100 @@
+class Orientdb::LearningObject
+  include ActiveModel::Model
+  include RepositoriesProxy
+  include OrientDbSerializable
+  include Metadatable
+
+  attr_accessor :id, :id_dspace, :rid, :name, :author, :description,
+                :published_at, :thumbnail, :created_at, :last_modified,
+                :type, :metadata, :score, :school_level, :language,
+                :source, :license, :keywords, :attachments
+
+  #not implemented yet
+  attr_accessor :grade_level
+
+  # associations
+  attr_accessor :likes, :views, :downloads, :subjects, :attributes, :publisher
+
+  # flags
+  attr_accessor :status
+
+  validates_presence_of :name, :created_at, :type
+
+  def initialize(params={})
+    super(params.merge(defaults) { |key, oldval, newval| oldval.blank? ? newval : oldval })
+  end
+
+  def retrievelink
+    "#{DspaceService.link}/rest#{default_attachment.retrieve_link}"
+  end
+
+  def default_attachment
+    return attachments.find { |a|  a.bundle_name == 'ORIGINAL' } unless attachments.blank?
+    ::LearningObject::Attachment.new
+  end
+
+  def collections
+    collection_repository.find_by_learning_object self
+  end
+
+  def categories
+    get_metadata_value_of 'dc.subject.category'
+  end
+
+  ## social actions
+  def like(user)
+    learning_object_repository.like user, self
+  end
+
+  def liked?(user)
+    learning_object_repository.liked? user, self
+  end
+
+  def dislike(user)
+    learning_object_repository.dislike user, self
+  end
+
+  def download(user)
+    learning_object_repository.download user, self
+  end
+  ## end social actions
+
+  ## metadata methods
+  def get_metadata_value_of key
+    get_metadata_values_of(key).first
+  end
+
+  def likes
+    learning_object_repository.count('Likes', self)
+  end
+
+  def views
+    learning_object_repository.count('Views', self)
+  end
+
+  def to_orientdb_hash
+    bitstreams = attachments.map { |attachment| attachment.to_orientdb_hash }
+    super.merge({'bitstreams' => bitstreams})
+  end
+
+  def excluded_orientdb_properties
+    ['likes', 'views', 'downloads', 'subjects', 'attributes', 'publisher', 'attachments']
+  end
+
+  private
+
+  def defaults
+    {
+        downloads: 0,
+        score: 0,
+        status: 'active',
+        attachments: [],
+        attributes: [],
+        subjects: [],
+        metadata: [],
+        created_at: DateTime.now.strftime("%Y-%m-%d %H:%M:%S"),
+        last_modified: DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
+    }
+  end
+
+end
diff --git a/app/models/orientdb/learning_object/attachment.rb b/app/models/orientdb/learning_object/attachment.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ae67a909a06459e620abf643bdb3468c8b19596c
--- /dev/null
+++ b/app/models/orientdb/learning_object/attachment.rb
@@ -0,0 +1,6 @@
+class Orientdb::LearningObject::Attachment
+  include ActiveModel::Model
+
+  #this attributes mirror Dspace bitstream values
+  attr_accessor :id, :name, :link, :retrieve_link, :description, :format, :mime_type, :size, :bundle_name
+end
diff --git a/app/models/orientdb/learning_object/draft.rb b/app/models/orientdb/learning_object/draft.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b2413a5fa23328cf804e432e3146b0ac3be63dfa
--- /dev/null
+++ b/app/models/orientdb/learning_object/draft.rb
@@ -0,0 +1,17 @@
+class Orientdb::LearningObject::Draft < LearningObject
+
+  def valid?
+    true
+  end
+
+  def to_orientdb_hash
+    super.merge('@class' => 'LearningObject')
+  end
+
+  private
+
+  def defaults
+    super.merge(status: 'draft')
+  end
+
+end
\ No newline at end of file
diff --git a/app/models/subject.rb b/app/models/orientdb/subject.rb
similarity index 97%
rename from app/models/subject.rb
rename to app/models/orientdb/subject.rb
index 89aebfefcab464124fe5f2e3eb60f396e274c3f8..c97802a4dde2096ad24e1a3daa9e95110ae0fee1 100644
--- a/app/models/subject.rb
+++ b/app/models/orientdb/subject.rb
@@ -1,4 +1,4 @@
-class Subject
+class Orientdb::Subject
   include ActiveModel::Model
   include RepositoriesProxy
 
diff --git a/app/models/rating.rb b/app/models/rating.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a8a63a00385218a107c257a88a15f3509be78bbb
--- /dev/null
+++ b/app/models/rating.rb
@@ -0,0 +1,4 @@
+class Rating < ActiveRecord::Base
+  has_many :review_ratings
+  has_many :reviews, through: :review_ratings
+end
diff --git a/app/models/review.rb b/app/models/review.rb
new file mode 100644
index 0000000000000000000000000000000000000000..36bb8b6143f9cdd8db2b180afd4ad35eabbf7e19
--- /dev/null
+++ b/app/models/review.rb
@@ -0,0 +1,8 @@
+class Review < ActiveRecord::Base
+  belongs_to :reviewable, polymorphic: true
+
+  belongs_to :user
+
+  has_many :review_ratings
+  has_many :ratings, through: :review_ratings
+end
diff --git a/app/models/review_rating.rb b/app/models/review_rating.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d14a06f2bda17add57a68ebe1aaf6a018f216dcc
--- /dev/null
+++ b/app/models/review_rating.rb
@@ -0,0 +1,4 @@
+class ReviewRating < ActiveRecord::Base
+  belongs_to :review
+  belongs_to :rating
+end
diff --git a/app/models/share.rb b/app/models/share.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0956dc88923714211aa33176a0788c8cdaa76118
--- /dev/null
+++ b/app/models/share.rb
@@ -0,0 +1,4 @@
+class Share < ActiveRecord::Base
+  belongs_to :shareable, polymorphic: true, counter_cache: true
+  belongs_to :user
+end
diff --git a/app/models/topic.rb b/app/models/topic.rb
new file mode 100644
index 0000000000000000000000000000000000000000..330ded6c55b6e5ec71304afa8030fe6ff9c228a0
--- /dev/null
+++ b/app/models/topic.rb
@@ -0,0 +1,16 @@
+class Topic < ActiveRecord::Base
+  has_and_belongs_to_many :learning_objects
+
+  has_many :topic_relationships, foreign_key: "parent_id"
+  has_many :subtopics, through: :topic_relationships, source: :child
+
+  has_many :topic_highlights
+  has_many :highlights, through: :topic_highlights, source: :learning_object
+
+  def self.default_list
+    ['Artes', 'Biologia', 'Ciências', 'Educação Física', 'Filosofia',
+     'Física', 'Geografia', 'História', 'Matemática', 'Língua Portuguesa', 'Química', 'Sociologia'].map do |topic|
+      Topic.find_by_name(topic)
+    end
+  end
+end
diff --git a/app/models/topic_highlight.rb b/app/models/topic_highlight.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3c626c3f3cda19f86389527cdcdb1c44c42ff7e3
--- /dev/null
+++ b/app/models/topic_highlight.rb
@@ -0,0 +1,4 @@
+class TopicHighlight < ActiveRecord::Base
+  belongs_to :topic
+  belongs_to :learning_object
+end
diff --git a/app/models/topic_relationship.rb b/app/models/topic_relationship.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5dd3f84bb5ab5e127c95f4725304d88af5059f71
--- /dev/null
+++ b/app/models/topic_relationship.rb
@@ -0,0 +1,6 @@
+class TopicRelationship < ActiveRecord::Base
+  belongs_to :parent, class_name: 'Topic'
+  belongs_to :child, class_name: 'Topic'
+
+  validates_presence_of :parent, :child
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index 58cc3281e2e9fd7b7fbebd16124b2e66bfcbcdbd..571f0048651b9a17914198a8f6a36598f3db24bf 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,56 +1,34 @@
-# For now, the User model is being persisted in two repositories:
-#   * On postgres, using ActiveRecord
-#   * OrientDb as graph nodes
-#
-# Goals: Keep the users in both (postgres, orientdb)
-#
-#               Devise Controllers -----> User model (with active record api)
-#              /
-#     Client -/
-#             \
-#              \
-#               Portal Mec Controllers -> User repository
-#
-# How works?
-#   For keep simple, user node in orientdb stored only a reference to the real user in postgres.
-#   So, the user node will be only created or destroyed.
-#
-#    When devise create user, the active record hooks will sync with user repository
-#    And, when the application call the user repository, it will keep sync with active record user model
 class User < ActiveRecord::Base
   include RepositoriesProxy
+  include Followable
 
   # Include default devise modules. Others available are:
   # :confirmable, :lockable, :timeoutable and :omniauthable
   devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :trackable, :validatable
-  has_and_belongs_to_many :roles
 
-  after_create SyncUserRepositoryService.new
-  after_create :default_role
+  has_and_belongs_to_many :roles
+  has_and_belongs_to_many :institutions
 
-  after_destroy SyncUserRepositoryService.new
+  has_many :bookmarks, as: :bookmarkable
+  has_many :bookmark_collections, through: :bookmarks, source: :bookmarkable, source_type: 'Collection'
+  has_many :bookmark_learning_objects, through: :bookmarks, source: :bookmarkable, source_type: 'LearningObject'
+  has_many :bookmarks
 
-  has_attached_file :avatar, styles: {medium: "300x300>", thumb: "60x60>"}, default_url: lambda { |image| ActionController::Base.helpers.asset_path('user-anon.png') }
-  validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/
+  has_many :collections, as: :owner
 
-  def collections
-    public_collections = collection_repository.all(Collections::UserPublicContext.new(self))
-    private_collections = collection_repository.all(Collections::UserPrivateContext.new(self))
-    @collections = public_collections + private_collections
-  end
+  has_many :learning_objects, as: :publisher
 
-  def institutions
-    institution_repository.associated_with self
-  end
+  has_many :views
+  has_many :downloads
+  has_many :likes
+  has_many :shares
+  has_many :follows
 
-  def bookmarks
-    collection_repository.bookmarks self
-  end
+  after_create :default_role
 
-  def learning_objects
-    learning_object_repository.all self
-  end
+  has_attached_file :avatar, styles: {medium: "300x300>", thumb: "60x60>"}, default_url: lambda { |image| ActionController::Base.helpers.asset_path('user-anon.png') }
+  validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/
 
   def is_admin?
     roles.each do |role|
@@ -62,7 +40,7 @@ class User < ActiveRecord::Base
   private
 
   def default_role
-    roles << role_repository.find_by_name("teacher")
+  #  roles << role_repository.find_by_name("teacher")
   end
 
 end
diff --git a/app/models/validators/collection_owner_validator.rb b/app/models/validators/collection_owner_validator.rb
deleted file mode 100644
index a0412d1ce29e772b9c77a2c3406b877a5e21897e..0000000000000000000000000000000000000000
--- a/app/models/validators/collection_owner_validator.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class Validators::CollectionOwnerValidator < ActiveModel::Validator
-
-  def validate(record)
-    unless record.owner.is_a?(User) || record.owner.is_a?(Institution)
-      record.errors.add :base, 'The owner must be an User or an Institution'
-    end
-  end
-
-end
diff --git a/app/models/view.rb b/app/models/view.rb
new file mode 100644
index 0000000000000000000000000000000000000000..33078c9c91d76e67de379b133ef11ed22964da5e
--- /dev/null
+++ b/app/models/view.rb
@@ -0,0 +1,20 @@
+class View < ActiveRecord::Base
+  belongs_to :viewable, polymorphic: true, counter_cache: true
+  belongs_to :user
+
+  scope :created_last, ->(user) { where(user: user).order('created_at DESC').limit(1).first }
+
+  before_create :current_time_greater_than_last
+
+  private
+
+  def current_time_greater_than_last
+    last_view = viewable.views.created_last(user)
+
+    unless last_view.blank?
+      return false if Time.now < (last_view.created_at + 1.days)
+    end
+
+    true
+  end
+end
diff --git a/app/services/dspace/attachment_mapper.rb b/app/services/dspace/attachment_mapper.rb
new file mode 100644
index 0000000000000000000000000000000000000000..40087ca9edccf146dba48d5d65e6a1abda4d6eb8
--- /dev/null
+++ b/app/services/dspace/attachment_mapper.rb
@@ -0,0 +1,11 @@
+class Dspace::AttachmentMapper
+
+  ##Map Dspace::Bitstream to Attachment model compatible hash
+  def self.call(bitstream, options = {})
+    {id_dspace: bitstream.id, name: bitstream.name, link: bitstream.link,
+     retrieve_link: bitstream.retrieve_link, description: bitstream.description,
+     format: bitstream.format, mime_type: bitstream.mime_type, size: bitstream.size_bytes,
+     bundle_name: bitstream.bundle_name}.merge(options)
+  end
+
+end
\ No newline at end of file
diff --git a/app/services/dspace/learning_object_importer.rb b/app/services/dspace/learning_object_importer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0413ee7687d29f6f988366514fc46c6901194004
--- /dev/null
+++ b/app/services/dspace/learning_object_importer.rb
@@ -0,0 +1,30 @@
+class Dspace::LearningObjectImporter
+
+  def initialize(items)
+    @items = items
+  end
+
+  def import
+    @items.each do |item|
+      if !item_exists? item
+        learning_object = LearningObjectBuilder.build_from_dspace item
+        create_attachments learning_object, item.bit_streams if learning_object.save
+        yield(learning_object) if block_given?
+      end
+    end
+  end
+
+  private
+
+  def create_attachments(learning_object, bitstreams)
+    bitstreams = JSON.parse bitstreams if bitstreams.class == String
+    bitstreams.each do |bitstream|
+      learning_object.attachments.create ::Dspace::AttachmentMapper.call(bitstream)
+    end
+  end
+
+  def item_exists? item
+    LearningObject.exists? id_dspace: item.id
+  end
+
+end
\ No newline at end of file
diff --git a/app/services/learning_object_publisher.rb b/app/services/learning_object_publisher.rb
index 55d4fd456a897050ab5d13992221f9c9a227442c..06b1ad7be6294c62c51c830703cf96c9e546bd75 100644
--- a/app/services/learning_object_publisher.rb
+++ b/app/services/learning_object_publisher.rb
@@ -1,7 +1,6 @@
 require 'dspace'
 
 class LearningObjectPublisher
-  include RepositoriesProxy
 
   def initialize(dspace_client)
     @dspace = dspace_client
@@ -12,8 +11,8 @@ class LearningObjectPublisher
   def create_draft(draft)
     item = @dspace.collections.create_item(build_dspace_item(draft), id: DspaceService::TEST_COLLECTION)
     draft.id_dspace = item.id
-    draft = learning_object_repository.create draft
-    publish! draft if draft.type == LearningObject::EXTERNAL_LINK_TYPE
+    draft.save!
+    publish! draft if draft.has_url_reference?
     draft
   end
 
@@ -22,27 +21,19 @@ class LearningObjectPublisher
     DspaceUploadWorker.perform_async learning_object.id, learning_object.id_dspace, media_path
   end
 
+  ##publish *learning_object*
+  #this method will create thumbnails, change state to published and will save it.
   def publish!(learning_object)
-    activate! learning_object
-    update_attachments! learning_object
-    create_thumbnail! learning_object
-  end
-
-  private
+    if learning_object.is_draft?
+      create_thumbnail! learning_object
+      learning_object.publish
+    end
 
-  # change *learning_object* status to active
-  def activate!(learning_object)
-    learning_object.status = 'active'
-    learning_object_repository.update_property(learning_object, 'status', learning_object.status)
+    learning_object.save
   end
 
-  def update_attachments!(learning_object)
-    bitstreams_list = learning_object.attachments.each do |attachment|
-      if !attachment.uptodate?
-        attachment.uptodate!
-        learning_object_repository.add_attachment learning_object, attachment
-      end
-    end
+  def create_thumbnail!(learning_object)
+    #call thumbnail worker
   end
 
   def create_thumbnail!(learning_object)
@@ -55,4 +46,4 @@ class LearningObjectPublisher
                        })
   end
 
-end
\ No newline at end of file
+end
diff --git a/app/services/sync_user_repository_service.rb b/app/services/sync_user_repository_service.rb
deleted file mode 100644
index 65f9008243b80b2c17a5f709fcf3caef5c1b38a5..0000000000000000000000000000000000000000
--- a/app/services/sync_user_repository_service.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class SyncUserRepositoryService
-  include RepositoriesProxy
-
-  def after_create(user)
-    user_repository.create_graph_node user
-  end
-
-  def after_destroy(user)
-    user_repository.destroy_graph_node user
-  end
-
-end
diff --git a/app/views/bookmarks/_bookmark.html.erb b/app/views/bookmarks/_bookmark.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..aab483bbcef093a28e71c1652f20dc69b8861b82
--- /dev/null
+++ b/app/views/bookmarks/_bookmark.html.erb
@@ -0,0 +1,11 @@
+<%= link_to bookmark_path do %>
+  <div class="col-sm-4">
+    <div>
+      <%= image_tag 'icons/star-grey.png', style: 'max-height: 100px;' %>
+    </div>
+    <div class="panel-body">
+      <h4 class="media-heading">Favoritos</h4>
+      <span><a><%= bookmark_length current_user %></a></span>
+    </div>
+  </div>
+<% end %>
diff --git a/app/views/bookmarks/_bookmarks.html.erb b/app/views/bookmarks/_bookmarks.html.erb
deleted file mode 100644
index 3478a96108a5f3d4d2697f577d5cb27176767fed..0000000000000000000000000000000000000000
--- a/app/views/bookmarks/_bookmarks.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= render 'collections/bookmarks', collection: bookmarks %>
\ No newline at end of file
diff --git a/app/views/bookmarks/show.html.erb b/app/views/bookmarks/show.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..764dc5519603bfb2874dcebef68a9db16a7093ab
--- /dev/null
+++ b/app/views/bookmarks/show.html.erb
@@ -0,0 +1,50 @@
+<nav class="navigation navbar-default collection-show-page" data-cid="<%= @user.id %>">
+  <br/>
+  <div class="container-fluid">
+    <div class="navbar-header">
+      <%= image_tag image_path("icons/star-grey.png"), class: "logo-image", style: 'max-height: 80px;' %>
+      <ul class="nav navbar-nav navbar-right collection-header" style="margin-left: 30px;">
+        <li><h2>Favoritos</h2></li>
+        <li>
+          <a class="count-collections-objects" data-toggle="tooltip" data-placement="bottom" title="Selecionar todos">
+            <%= image_tag image_path("icons/square.png"), class: "logo-image", size: "20x20" %>
+            <%= bookmark_length @user %>
+          </a>
+        </li>
+      </ul>
+    </div>
+  </div>
+  <br/>
+</nav>
+<nav class="navigation navbar-inverse collection-show-select-nav" style="display:none;">
+  <div class="container-fluid">
+    <a class="navbar-brand" href="javascript:void(0);" data-toggle="tooltip" data-placement="bottom" title="Limpar seleção"></a>
+    <ul class="nav navbar-nav navbar-right">
+      <li class="set-align collection-button" data-action="download">
+        <a href="javascript:void(0);"><span class="left-edge1"><%= image_tag image_path("icons/Download_01.png"), class: "logo-image", size: "35x35" %></span><span style="color: white">
+          Salvar no <br>computador</span></a>
+      </li>
+      <li class="set-align collection-button" data-action="copy">
+        <a href="javascript:void(0);"><span class="left-edge1"><%= image_tag image_path("icons/Copiar_Seleção.png"), class: "logo-image", size: "35x35" %></span><span style="color: white">
+          Copiar <br>para</span></a>
+      </li>
+      <li class="set-align collection-button" data-action="move">
+        <a href="javascript:void(0);"><span class="left-edge1"><%= image_tag image_path("icons/Mover_Seleção.png"), class: "logo-image", size: "35x35" %></span><span style="color: white">
+          Mover <br>para</span></a>
+      </li>
+      <li class="set-align collection-button" data-action="remove">
+        <a href="javascript:void(0);"><span class="left-edge1"><%= image_tag image_path("icons/Remover_da_Coleção_Seleção.png"), class: "logo-image", size: "35x35" %></span><span style="color: white">
+          Remover da <br>coleção</span></a>
+      </li>
+    </ul>
+  </div>
+</nav>
+
+<div class= "row">
+  <div class="learning-object-columns">
+    <br/>
+    <% @user.bookmark_learning_objects.each do |object| %>
+      <%= render object, orientation: 'vertical' %>
+    <% end %>
+  </div>
+</div>
diff --git a/app/views/collections/_bookmarks.html.erb b/app/views/collections/_bookmarks.html.erb
deleted file mode 100644
index d1b7a91e344d3ceb821741b0d2fe4c2ee96b8eb1..0000000000000000000000000000000000000000
--- a/app/views/collections/_bookmarks.html.erb
+++ /dev/null
@@ -1,11 +0,0 @@
-<%= link_to collection_path(id: collection.id) do %>
-          <div class="col-sm-4">
-        <div>
-          <%= image_tag 'icons/star-grey.png', style: 'max-height: 100px;' %>
-        </div>
-        <div class="panel-body">
-          <h4 class="media-heading">Favoritos</h4>
-          <span><a><%= collection_length collection %></a></span>
-        </div>
-      </div>
-<% end %>
diff --git a/app/views/collections/show.html.erb b/app/views/collections/show.html.erb
index ea3e4c77f6ffb39e3fe68f9b0e99068c16149551..ea55f316b1f555b7d914dce1f1fddfd0e0015b1c 100644
--- a/app/views/collections/show.html.erb
+++ b/app/views/collections/show.html.erb
@@ -3,7 +3,7 @@
   <div class="container-fluid">
     <div class="navbar-right" style="text-align:right">
       <% if @own %>
-        <% if @collection.class != Bookmarks %>
+        <% if @collection.class != Bookmark %>
           <%= link_to '#' do %>
             <%= link_to 'APAGAR', collection_path(@collection.id), method: :delete, class: 'btn btn-danger btn-remove', style: 'margin-right: 30px', data: {confirm: 'Não será possível recuperá-la, você tem certeza?'} %></span>
           <% end %>
@@ -18,13 +18,13 @@
     </div>
 
     <div class="navbar-header">
-      <% if @collection.class != Bookmarks %>
+      <% if @collection.class != Bookmark %>
           <%= image_tag image_path("icons/collection.png"), class: "logo-image", size: "90x66" %>
       <% else %>
           <%= image_tag image_path("icons/star-grey.png"), class: "logo-image", style: 'max-height: 80px;' %>
       <% end %>
       <ul class="nav navbar-nav navbar-right collection-header" style="margin-left: 30px;">
-        <li><h2><%= (@collection.class != Bookmarks) ? @collection.name : "Favoritos" %></h2></li>
+        <li><h2><%= (@collection.class != Bookmark) ? @collection.name : "Favoritos" %></h2></li>
         <li>
           <a class="count-collections-objects" data-toggle="tooltip" data-placement="bottom" title="Selecionar todos">
             <%= image_tag image_path("icons/square.png"), class: "logo-image", size: "20x20" %>
diff --git a/app/views/learning_objects/_bookmarks_button.html.erb b/app/views/learning_objects/_bookmarks_button.html.erb
index 9a5885c16f2560599bc1fab75aacc9592b7e1f12..f5aaa1ab7eb253c16099de9f8e64120c86036204 100644
--- a/app/views/learning_objects/_bookmarks_button.html.erb
+++ b/app/views/learning_objects/_bookmarks_button.html.erb
@@ -1,3 +1,3 @@
-<%= link_to bookmarks_learning_object_path(id: learning_object.id), class: 'btn btn-default btn-xs', title: "Adicionar aos favoritos", method: :post, remote: true do %>
+<%= link_to bookmark_add_path(id: learning_object.id, type: learning_object.class.to_s), class: 'btn btn-default btn-xs', title: "Adicionar aos favoritos", method: :post, remote: true do %>
   <span class="glyphicon glyphicon-bookmark" aria-hidden="true"></span>
 <% end %>
diff --git a/app/views/learning_objects/_learning_object_horizontal.erb b/app/views/learning_objects/_learning_object_horizontal.erb
index db10f2ae074254e81234f4758d61eb47973cc462..b4b8f123dbd917baf50a748c4d743292a728fe69 100644
--- a/app/views/learning_objects/_learning_object_horizontal.erb
+++ b/app/views/learning_objects/_learning_object_horizontal.erb
@@ -18,8 +18,8 @@
       <% end %>
 
       <span class="author-label">Por <%= learning_object.get_metadata_value_of("dc.contributor.author") %></span><br/>
-      <span class="glyphicon glyphicon-eye-open" data-toggle="tooltip" data-placement="bottom" title="Visualizações"><%= learning_object.views %></span>&nbsp;&nbsp;&nbsp;
-      <span class="glyphicon glyphicon-star votes-count" data-id="<%= learning_object.id %>" data-toggle="tooltip" data-placement="bottom" title="Curtidas"><%= learning_object.likes %></span><br>
+      <span class="glyphicon glyphicon-eye-open" data-toggle="tooltip" data-placement="bottom" title="Visualizações"><%= learning_object.views.count %></span>&nbsp;&nbsp;&nbsp;
+      <span class="glyphicon glyphicon-star votes-count" data-id="<%= learning_object.id %>" data-toggle="tooltip" data-placement="bottom" title="Curtidas"><%= learning_object.likes.count %></span><br>
 
       <% unless learning_object.description.nil? %>
         <div class="learning-object-text">
diff --git a/app/views/learning_objects/_learning_object_vertical.erb b/app/views/learning_objects/_learning_object_vertical.erb
index 50156e91a5d71e5c8a1d031ca628320e16ab6ec1..58aada1502d2ae275eced9af1e1f714b09abab78 100644
--- a/app/views/learning_objects/_learning_object_vertical.erb
+++ b/app/views/learning_objects/_learning_object_vertical.erb
@@ -10,8 +10,8 @@
     </div>
     <div class="panel-body">
       <h4 class="media-heading"><%= learning_object_title(learning_object) %></h4>
-      <span class="glyphicon glyphicon-eye-open" data-toggle="tooltip" data-placement="bottom" title="Visualizações"><%= learning_object.views %></span>&nbsp;
-      <span class="glyphicon glyphicon-star votes-count" data-id="<%= learning_object.id %>" data-toggle="tooltip" data-placement="bottom" title="Curtidas"><%= learning_object.likes %></span>&nbsp;
+      <span class="glyphicon glyphicon-eye-open" data-toggle="tooltip" data-placement="bottom" title="Visualizações"><%= learning_object.views.size %></span>&nbsp;
+      <span class="glyphicon glyphicon-star votes-count" data-id="<%= learning_object.id %>" data-toggle="tooltip" data-placement="bottom" title="Curtidas"><%= learning_object.likes.size %></span>&nbsp;
       <span class="author-label">Por <%= learning_object.get_metadata_value_of("dc.contributor.author") %></span>
     </div>
   </div>
diff --git a/app/views/learning_objects/show.html.erb b/app/views/learning_objects/show.html.erb
index 229c9f0087be9d4963936bac62a621fd593e8af8..c6603abcbc0ba7815a29a6339ae2c6a09011d4f3 100644
--- a/app/views/learning_objects/show.html.erb
+++ b/app/views/learning_objects/show.html.erb
@@ -12,8 +12,8 @@
       %>
     </div>
     <div class="pull-right" style="padding-right:122px">
-      <span class="glyphicon glyphicon-eye-open"><%= @learning_object.views %>&nbsp;</span>
-      <span class="glyphicon glyphicon-star votes-count" data-id="<%= @learning_object.id %>" data-toggle="tooltip" data-placement="bottom" title="Curtidas"><%= @learning_object.likes %></span>&nbsp;
+      <span class="glyphicon glyphicon-eye-open"><%= @learning_object.views.size %>&nbsp;</span>
+      <span class="glyphicon glyphicon-star votes-count" data-id="<%= @learning_object.id %>" data-toggle="tooltip" data-placement="bottom" title="Curtidas"><%= @learning_object.likes.size %></span>&nbsp;
     </div>
     <br/><br/>
     <h2 class="title"><%= @learning_object.name %></h2>
@@ -36,16 +36,18 @@
           </div>
         </div>
       <% end %>
-      <div class="media">
-        <div class="media-left">
-          <a href="#"><img class="user-image-small" src="<%#= current_user.avatar.url(:thumb) %><%= asset_path('user-anon.png')%>" alt="Foto do usuário"/></a>
-        </div>
-        <div class="media-body">
-          <% publisher_type = @learning_object.publisher.class %>
-          <h5><%= publisher_type == User ? 'Adicionado por' : 'Origem'%></h5>
-          <h3 class="media-heading"><%= @learning_object.publisher.name %></h3>
+      <% unless @learning_object.publisher.nil? %>
+        <div class="media">
+          <div class="media-left">
+            <a href="#"><img class="user-image-small" src="<%#= current_user.avatar.url(:thumb) %><%= asset_path('user-anon.png')%>" alt="Foto do usuário"/></a>
+          </div>
+          <div class="media-body">
+            <% publisher_type = @learning_object.publisher.class %>
+            <h5><%= publisher_type == User ? 'Adicionado por' : 'Origem'%></h5>
+            <h3 class="media-heading"><%= @learning_object.publisher.name %></h3>
+          </div>
         </div>
-      </div>
+      <% end %>
       <div class="rating-panel">
         <% if user_signed_in? %>
           <div class="actions">
diff --git a/app/views/management/institutions/show.html.erb b/app/views/management/institutions/show.html.erb
index 675726e73ddedc66946cc170b3c4fd0cf17689b8..de1e5d1e4b50bd48157719ac7bfa5ab6529ab787 100644
--- a/app/views/management/institutions/show.html.erb
+++ b/app/views/management/institutions/show.html.erb
@@ -1,4 +1,4 @@
 <p id="notice"><%= notice %></p>
 
-<%= link_to 'Edit', edit_management_institution_path(@management_institution) %> |
+<%= link_to 'Edit', edit_management_institution_path(@institution) %> |
 <%= link_to 'Back', management_institutions_path %>
diff --git a/app/views/management/statistics/index.html.erb b/app/views/management/statistics/index.html.erb
index 08f372ad15e21e249096a0dfb600e49fcaa2930a..35e6504b01803bee13fd9efa0857efbb25daee2d 100644
--- a/app/views/management/statistics/index.html.erb
+++ b/app/views/management/statistics/index.html.erb
@@ -4,4 +4,4 @@
   <li>Estatísticas</li>
 </ol>
 
-<%= render 'general_stats', users_number: 10, collections_number: 20, learning_objects_number: 12333, total_accesses: 1000283474 %>
+<%= render 'general_stats', users_number: @n_users, collections_number: @n_collections, learning_objects_number: @n_learning_objects, total_accesses: @total_accesses %>
diff --git a/app/views/management/statistics/learning_objects.html.erb b/app/views/management/statistics/learning_objects.html.erb
index 999870e07de6c60c307478b9c926e4957adaaae6..68d09eb00dcedd06336bfd4407b71b3145727a05 100644
--- a/app/views/management/statistics/learning_objects.html.erb
+++ b/app/views/management/statistics/learning_objects.html.erb
@@ -53,7 +53,7 @@
     <div class="row learning-object-columns">
       <% @most_visualised.each do |most| %>
         <%#= render_learning_object("vertical", most) %>
-        <li><%= link_to most["name"], learning_object_path(most["@rid"]) %></li><BR>
+        <li><%= link_to most["name"], learning_object_path(most["id"]) %></li><BR>
       <% end %>
     </div>
   </div>
diff --git a/app/views/management/users/admins.html.erb b/app/views/management/users/admins.html.erb
index 0e0624ec950eaae99c2b316b87d03dcb6fc2c0ed..87d84d49a6d264e1db68bf48d2ba51f1ee540664 100644
--- a/app/views/management/users/admins.html.erb
+++ b/app/views/management/users/admins.html.erb
@@ -1,7 +1,6 @@
 <h1 class="ls-title-intro ls-ico-users">Administradores</h1>
 
-<a href="#" class="ls-btn-primary" aria-expanded="false" role="combobox">Cadastrar
-  novo</a>
+<%= link_to "Cadastrar novo", new_management_user_path, class:"ls-btn-primary", 'aria-expanded' => 'false', 'role' => 'combobox'%>
 
 <% if @admins.empty? %>
     <br /><br /><h3>Não há adminstradores cadastrados</h3>
@@ -50,11 +49,15 @@
             <td>
               <a href="#"><%= c.name %></a>
               <% nome = translate_role(c.roles[0].name) %>
-                  <span class="ls-tag hidden-xs"><%= nome %></span>
-              </td>
+              <span class="ls-tag hidden-xs"><%= nome %></span>
+            </td>
             </td>
             <td class="ls-txt-center hidden-xs">
-              <small class="ls-display-block"><b>Último acesso:</b> <%= c.current_sign_in_at.to_date %></small>
+              <% if c.current_sign_in_at %>
+                  <small class="ls-display-block"><b>Último acesso:</b> <%= c.current_sign_in_at.to_date %></small>
+              <% else %>
+                  <small class="ls-display-block"><b>Último acesso:</b>Nunca acessou</small>
+              <% end  %>
               <small class="ls-display-block"><b>Total de acessos:</b>  <%= c.sign_in_count %></small>
             </td>
             <td class="ls-txt-center">
@@ -67,7 +70,7 @@
                 <a href="#" class="ls-btn ls-btn-sm" aria-expanded="false" role="combobox">Nível</a>
                 <ul class="ls-dropdown-nav" aria-hidden="true">
                   <% Role.all.each do |r| %>
-                  <% nome = translate_role(r.name) %>
+                      <% nome = translate_role(r.name) %>
                       <li><%= link_to "Definir como #{nome}", change_roles_management_user_path(:id => c.id, :role_id => r.id), :method => :post %></li>
                   <% end %>
                 </ul>
diff --git a/app/views/management/users/curators.html.erb b/app/views/management/users/curators.html.erb
index 41cf35c40cde8c763859e021ee0b8d851d020d9e..720b04eeac6bdbacc015bf930715b12d7ded22a7 100644
--- a/app/views/management/users/curators.html.erb
+++ b/app/views/management/users/curators.html.erb
@@ -1,7 +1,6 @@
 <h1 class="ls-title-intro ls-ico-users">Curadores</h1>
 
-<a href="#" class="ls-btn-primary" aria-expanded="false" role="combobox">Cadastrar
-  novo</a>
+<%= link_to "Cadastrar novo", new_management_user_path, class:"ls-btn-primary", 'aria-expanded' => 'false', 'role' => 'combobox'%>
 
 <% if @curators.empty? %>
     <br /><br /><h3>Não há curadores cadastrados</h3>
@@ -46,15 +45,19 @@
       <tbody>
 
 
-    <% @curators.each do |c| %>
-        <tr>
-          <td>
-            <a href="#"><%= c.name %></a>
-            <%nome = translate_role(c.roles[0].name) %>
-                <span class="ls-tag hidden-xs"><%= nome %></span>
+      <% @curators.each do |c| %>
+          <tr>
+            <td>
+              <a href="#"><%= c.name %></a>
+              <%nome = translate_role(c.roles[0].name) %>
+              <span class="ls-tag hidden-xs"><%= nome %></span>
             </td>
             <td class="ls-txt-center hidden-xs">
-              <small class="ls-display-block"><b>Último acesso:</b> <%= c.current_sign_in_at.to_date %></small>
+              <% if c.current_sign_in_at %>
+                  <small class="ls-display-block"><b>Último acesso:</b> <%= c.current_sign_in_at.to_date %></small>
+              <% else %>
+                  <small class="ls-display-block"><b>Último acesso:</b>Nunca acessou</small>
+              <% end  %>
               <small class="ls-display-block"><b>Total de acessos:</b>  <%= c.sign_in_count %></small>
             </td>
             <td class="ls-txt-center">
@@ -67,7 +70,7 @@
                 <a href="#" class="ls-btn ls-btn-sm" aria-expanded="false" role="combobox">Nível</a>
                 <ul class="ls-dropdown-nav" aria-hidden="true">
                   <% Role.all.each do |r| %>
-                  <% nome = translate_role(r.name) %>
+                      <% nome = translate_role(r.name) %>
                       <li><%= link_to "Definir como #{nome}", change_roles_management_user_path(:id => c.id, :role_id => r.id), :method => :post %></li>
                   <% end %>
                 </ul>
diff --git a/app/views/management/users/index.html.erb b/app/views/management/users/index.html.erb
index 57654c29077c60062ed2322a0eac7c5f0c88fc4d..a48ce9277ca77aefd456c0e9d68c5210303568c8 100644
--- a/app/views/management/users/index.html.erb
+++ b/app/views/management/users/index.html.erb
@@ -1,7 +1,6 @@
 <h1 class="ls-title-intro ls-ico-users">Usuários</h1>
 
-<a href="#" class="ls-btn-primary" aria-expanded="false" role="combobox">Cadastrar
-  novo</a>
+<%= link_to "Cadastrar novo", new_management_user_path, class:"ls-btn-primary", 'aria-expanded' => 'false'%>
 
 <div class="ls-box-filter">
   <form action="" class="ls-form ls-form-inline ls-float-left">
@@ -47,37 +46,41 @@
           <a href="#"><%= u.name %></a>
 
           <% u.roles.each do |r| %>
-          <% nome = translate_role(u.roles[0].name) %>
+              <% nome = translate_role(u.roles[0].name) %>
               <span class="ls-tag hidden-xs"><%= nome %></span>
-          </td>
+              </td>
           <% end %>
-        </td>
+          </td>
 
           <td class="ls-txt-center hidden-xs">
-            <small class="ls-display-block"><b>Último acesso:</b> <%= u.current_sign_in_at.to_date %></small>
+            <%if u.current_sign_in_at%>
+                <small class="ls-display-block"><b>Último acesso:</b> <%= u.current_sign_in_at.to_date %></small>
+            <% else %>
+                <small class="ls-display-block"><b>Último acesso:</b>Nunca acessou</small>
+            <% end %>
             <small class="ls-display-block"><b>Total de acessos:</b>  <%= u.sign_in_count %></small>
           </td>
 
-        <td class="ls-txt-center">
-          <%= u.email %>
-        </td>
-        <td class="ls-txt-right ls-regroup">
+          <td class="ls-txt-center">
+            <%= u.email %>
+          </td>
+          <td class="ls-txt-right ls-regroup">
 
-          <%= link_to 'Administrar', edit_management_user_path(u), {class: 'ls-btn ls-btn-sm', aria: {expanded: false}, role: 'combobox'} %>
-          <%= link_to 'Excluir', management_user_path(u), {method: :delete, data: {confirm: 'Tem certeza que deseja excluir?'}, title: 'Apagar usuário', class: 'ls-btn ls-btn-sm', role: 'option'} %>
-          <div data-ls-module="dropdown" class="ls-dropdown ls-pos-right">
-            <a href="#" class="ls-btn ls-btn-sm" aria-expanded="false" role="combobox">Nível</a>
-            <ul class="ls-dropdown-nav">
-              <% @user = u %>
-              <% Role.all.each do |r| %>
-                <% nome = translate_role(r.name) %>
-                <li><%= link_to  "Definir como #{nome}", change_roles_management_user_path( :id => u, :role_id => r.id),:method => :post %></li>
-              <% end %>
-            </ul>
-          </div>
+            <%= link_to 'Administrar', edit_management_user_path(u), {class: 'ls-btn ls-btn-sm', aria: {expanded: false}, role: 'combobox'} %>
+            <%= link_to 'Excluir', management_user_path(u), {method: :delete, data: {confirm: 'Tem certeza que deseja excluir?'}, title: 'Apagar usuário', class: 'ls-btn ls-btn-sm', role: 'option'} %>
+            <div data-ls-module="dropdown" class="ls-dropdown ls-pos-right">
+              <a href="#" class="ls-btn ls-btn-sm" aria-expanded="false" role="combobox">Nível</a>
+              <ul class="ls-dropdown-nav">
+                <% @user = u %>
+                <% Role.all.each do |r| %>
+                    <% nome = translate_role(r.name) %>
+                    <li><%= link_to  "Definir como #{nome}", change_roles_management_user_path( :id => u, :role_id => r.id),:method => :post %></li>
+                <% end %>
+              </ul>
+            </div>
 
-        </td>
-      </tr>
+          </td>
+          </tr>
   <% end %>
 
   </tbody>
diff --git a/app/views/orientdb/learning_objects/_actions_buttons.html.erb b/app/views/orientdb/learning_objects/_actions_buttons.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..ab828128232d17171862d63e352460910dbb62ba
--- /dev/null
+++ b/app/views/orientdb/learning_objects/_actions_buttons.html.erb
@@ -0,0 +1,5 @@
+<div class="learning-object-actions">
+  <%= render 'learning_objects/like_button', learning_object: learning_object %>
+  <%= render 'learning_objects/bookmarks_button', learning_object: learning_object %>
+  <%= render 'learning_objects/collections_button', learning_object: learning_object %>
+</div>
diff --git a/app/views/orientdb/learning_objects/_add_to_collection_popover.html.erb b/app/views/orientdb/learning_objects/_add_to_collection_popover.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..d26c583cf49cf913a2e5a9f900896f36887d61d1
--- /dev/null
+++ b/app/views/orientdb/learning_objects/_add_to_collection_popover.html.erb
@@ -0,0 +1,16 @@
+<div id="collections_list_popover-<%= learning_object.id %>">
+  <% if collections.empty? %>
+      <%= link_to 'Criar coleção', me_users_path %>
+  <% else %>
+
+      <ul>
+        <% collections.each do |collection| %>
+            <li>
+              <%= link_to collection.name, add_learning_object_collection(id: collection.id, learning_object_id: learning_object.id), class: 'default_btn', method: :post, remote: true %>
+            </li>
+        <% end %>
+      </ul>
+
+
+  <% end %>
+</div>
diff --git a/app/views/orientdb/learning_objects/_bookmarks_button.html.erb b/app/views/orientdb/learning_objects/_bookmarks_button.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..9a5885c16f2560599bc1fab75aacc9592b7e1f12
--- /dev/null
+++ b/app/views/orientdb/learning_objects/_bookmarks_button.html.erb
@@ -0,0 +1,3 @@
+<%= link_to bookmarks_learning_object_path(id: learning_object.id), class: 'btn btn-default btn-xs', title: "Adicionar aos favoritos", method: :post, remote: true do %>
+  <span class="glyphicon glyphicon-bookmark" aria-hidden="true"></span>
+<% end %>
diff --git a/app/views/orientdb/learning_objects/_collections_button.html.erb b/app/views/orientdb/learning_objects/_collections_button.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..1f2b4f7802cf33b365f73a207f3e9620a0124aad
--- /dev/null
+++ b/app/views/orientdb/learning_objects/_collections_button.html.erb
@@ -0,0 +1,3 @@
+<a tabindex="0" class="add-to-collection btn btn-default btn-xs" role="button" title="Adicionar as coleções" data-loid="<%= learning_object.id %>">
+  <span class="glyphicon glyphicon-list" aria-hidden="true"></span>
+</a>
diff --git a/app/views/orientdb/learning_objects/_file_upload_form.html.erb b/app/views/orientdb/learning_objects/_file_upload_form.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..f35e007fa56149c64b46e9892022c7c74937da03
--- /dev/null
+++ b/app/views/orientdb/learning_objects/_file_upload_form.html.erb
@@ -0,0 +1,111 @@
+<div class="row">
+  <div class="small-12 columns">
+    <fieldset>
+      <legend>Enviar arquivo do objeto educacional</legend>
+      <div class="small-12 columns">
+        <div class="file">
+          <a href="#" id="browseButton" class="expand button">Selecionar o arquivo</a>
+        </div>
+        <div class="controls" style="display: none">
+          <a href="#" id="continueButton" class="success radius small button">Continuar</a>
+          <a href="#" id="pauseButton" class="radius small button">Pausar</a>
+          <a href="#" id="cancelButton" class="alert radius small button">Cancelar</a>
+        </div>
+        <div class="progress" style="display: none">
+          <span class="meter text-right" style="width: 0%; font-weight: bold;"></span>
+        </div>
+        <div class="row">
+          <label id="alertSuccess" class="text-center" style="display: none">
+            Seu arquivo foi enviado e está sendo processado, em alguns minutos ele será publicado!
+          </label>
+        </div>
+    </fieldset>
+  </div>
+</div>
+
+<script type="text/javascript" charset="utf-8">
+  // resumable
+  var r = new Resumable({
+    target: "<%= chunk_path %>",
+    query: {learning_object_id: "<%= ERB::Util.url_encode(@learning_object.id) %>"},
+    headers: {
+      'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
+    },
+    //source: https://gist.github.com/JAndritsch/3920385
+    chunkSize: 1024 * 256
+  });
+
+  // buttons
+  r.assignBrowse(document.getElementById('browseButton'));
+  $("#continueButton").click(function () {
+    $('#continueButton').hide();
+    $('#pauseButton').show();
+    r.upload();
+  });
+  $("#pauseButton").click(function () {
+    r.pause()
+  });
+  $("#cancelButton").click(function () {
+    r.cancel()
+  });
+
+  // events
+  var progress_percent = 0;
+  r.on('fileSuccess', function (file) {
+    $('.file').hide();
+    $('.controls').hide();
+    $('.progress').show();
+    $('.progress').addClass('success');
+    $('#alertSuccess').show();
+    $('.links').show();
+    //console.debug(file);
+  });
+  r.on('fileProgress', function (file) {
+    progress_percent = Math.floor(file.progress() * 100);
+    $('.progress > .meter').html(progress_percent + '%');
+    $('.progress > .meter').css('width', progress_percent + '%');
+    //console.debug(file);
+  });
+  r.on('fileAdded', function (file, event) {
+    $('#continueButton').hide();
+    $('#pauseButton').show();
+    $('#cancelButton').show();
+    $('.file').hide();
+    $('.controls').show();
+    $('.progress').show();
+    r.upload();
+    //console.debug(file, event);
+  });
+  r.on('fileRetry', function (file) {
+    //console.debug(file);
+  });
+  r.on('fileError', function (file, message) {
+    //console.debug(file, message);
+  });
+  r.on('uploadStart', function () {
+    $('.progress').show();
+    //console.debug();
+  });
+  r.on('complete', function () {
+    //console.debug();
+  });
+  r.on('progress', function () {
+    //console.debug();
+  });
+  r.on('error', function (message, file) {
+    //console.debug(message, file);
+  });
+  r.on('pause', function () {
+    $('#continueButton').show();
+    $('#pauseButton').hide();
+    $('#cancelButton').show();
+  });
+  r.on('cancel', function () {
+    $('.file').show();
+    $('.controls').hide();
+    $('.progress').hide();
+    $('.progress > .meter').html('');
+    $('.progress > .meter').css('width', '0%');
+    //console.debug();
+  });
+</script>
\ No newline at end of file
diff --git a/app/views/orientdb/learning_objects/_form.html.erb b/app/views/orientdb/learning_objects/_form.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..c82330503d3626ac311a5d29cae3ff31e0a9a9bd
--- /dev/null
+++ b/app/views/orientdb/learning_objects/_form.html.erb
@@ -0,0 +1,68 @@
+<%= form_for(@learning_object) do |f| %>
+    <% if @learning_object.errors.any? %>
+        <div id="error_explanation">
+          <h2><%= pluralize(@learning_object.errors.count, "error") %> prohibited this learning_object from being
+            saved:</h2>
+
+          <ul>
+            <% @learning_object.errors.full_messages.each do |message| %>
+                <li><%= message %></li>
+            <% end %>
+          </ul>
+        </div>
+    <% end %>
+
+    <div class="row">
+      <div class="col-md-12">
+
+      </div>
+
+      <div class="row">
+        <div class="col-md-12">
+          <fieldset>
+            <legend>Envie seu objeto educacional</legend>
+            <%= f.label :name, "Título" %>
+            <%= f.text_field :name, class: "form-control" %> <br>
+
+            <%= f.label :description, "Descreva seu objeto" %>
+            <%= f.text_area :description, class: "form-control" %><br>
+
+            <%= f.label :language, "Idioma do objeto" %>
+            <%= f.text_field :language, class: "form-control" %><br>
+
+            <%= f.label :author, "Autor" %>
+            <%= f.text_field :author, class: "form-control" %><br>
+
+            <%= f.label :type, "Tipo do objeto" %>
+            <% @types.each do |type| %>
+                <br><input type="radio" name="learning_object[type]" value="<%= type %>"> <%= type %>
+            <% end %>
+            <br><br>
+
+            <%= f.label :subjects, 'Assuntos (Selecione 1 ou mais assuntos)' %>
+            <select id='subjectSelect' name="learning_object[subjects][]" multiple>
+              <%= @subjects.each do |subject| %>
+                  <option value='<%= subject.id %>'><%= subject.name %></option>
+              <% end %>
+            </select>
+            <br><br>
+
+            <%= f.label :school_level, "Nível Escolar" %><br>
+            <select name="learning_object[school_level]">
+              <%= @school_levels.each do |school_level| %>
+                  <option value="<%= school_level %>"><%= school_level %></option>
+              <% end %>
+            </select>
+            <br><br>
+            <%= f.submit 'Criar Objeto' %>
+          </fieldset>
+        </div>
+      </div>
+    </div>
+
+<% end %>
+<script>
+  $("#subjectSelect").select2({
+    placeholder: "Assuntos"
+  });
+</script>
diff --git a/app/views/orientdb/learning_objects/_learning_object.erb b/app/views/orientdb/learning_objects/_learning_object.erb
new file mode 100644
index 0000000000000000000000000000000000000000..db67c9c3b6b5b6f3e7e351ae921e2b7dbb388565
--- /dev/null
+++ b/app/views/orientdb/learning_objects/_learning_object.erb
@@ -0,0 +1 @@
+<%= render_learning_object orientation, learning_object %>
diff --git a/app/views/orientdb/learning_objects/_learning_object_horizontal.erb b/app/views/orientdb/learning_objects/_learning_object_horizontal.erb
new file mode 100644
index 0000000000000000000000000000000000000000..db10f2ae074254e81234f4758d61eb47973cc462
--- /dev/null
+++ b/app/views/orientdb/learning_objects/_learning_object_horizontal.erb
@@ -0,0 +1,39 @@
+
+  <% link = learning_object_path(id: learning_object.id) %>
+  <div class="learning-object-horizontal row">
+    <!-- <div class="col-md-5"> -->
+      <div class="learning-object-thumbnail">
+        <%= link_to link do
+          learning_object_thumbnail learning_object
+        end %>
+
+        <% if user_signed_in? %>
+            <%= render 'learning_objects/actions_buttons', learning_object: learning_object %>
+        <% end %>
+      </div>
+    <!-- </div> -->
+    <div class="learning-object-body">
+      <%= link_to link do %>
+        <h4 class="learning-object-heading"><%= learning_object_title learning_object %></h4>
+      <% end %>
+
+      <span class="author-label">Por <%= learning_object.get_metadata_value_of("dc.contributor.author") %></span><br/>
+      <span class="glyphicon glyphicon-eye-open" data-toggle="tooltip" data-placement="bottom" title="Visualizações"><%= learning_object.views %></span>&nbsp;&nbsp;&nbsp;
+      <span class="glyphicon glyphicon-star votes-count" data-id="<%= learning_object.id %>" data-toggle="tooltip" data-placement="bottom" title="Curtidas"><%= learning_object.likes %></span><br>
+
+      <% unless learning_object.description.nil? %>
+        <div class="learning-object-text">
+          <%=
+            if learning_object.description.length > 150
+              d = learning_object.description[0..150]
+              d = d[0...d.rindex(' ')]
+              d << "..."
+            else
+              learning_object.description
+            end
+          %>
+        </div>
+        <br/>
+      <% end %>
+    </div>
+  </div>
diff --git a/app/views/orientdb/learning_objects/_learning_object_vertical.erb b/app/views/orientdb/learning_objects/_learning_object_vertical.erb
new file mode 100644
index 0000000000000000000000000000000000000000..50156e91a5d71e5c8a1d031ca628320e16ab6ec1
--- /dev/null
+++ b/app/views/orientdb/learning_objects/_learning_object_vertical.erb
@@ -0,0 +1,18 @@
+<div class="learning-object-vertical" data-loid="<%= learning_object.id %>">
+  <div class="panel">
+    <div class="learning-object-thumbnail">
+      <%= link_to learning_object_path(id: learning_object.id) do
+        learning_object_thumbnail learning_object
+      end %>
+      <% if user_signed_in? %>
+          <%= render 'learning_objects/actions_buttons', learning_object: learning_object %>
+      <% end %>
+    </div>
+    <div class="panel-body">
+      <h4 class="media-heading"><%= learning_object_title(learning_object) %></h4>
+      <span class="glyphicon glyphicon-eye-open" data-toggle="tooltip" data-placement="bottom" title="Visualizações"><%= learning_object.views %></span>&nbsp;
+      <span class="glyphicon glyphicon-star votes-count" data-id="<%= learning_object.id %>" data-toggle="tooltip" data-placement="bottom" title="Curtidas"><%= learning_object.likes %></span>&nbsp;
+      <span class="author-label">Por <%= learning_object.get_metadata_value_of("dc.contributor.author") %></span>
+    </div>
+  </div>
+</div>
diff --git a/app/views/orientdb/learning_objects/_like_button.html.erb b/app/views/orientdb/learning_objects/_like_button.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..45a5e00594c3d1309068f409a1fa4466f28321af
--- /dev/null
+++ b/app/views/orientdb/learning_objects/_like_button.html.erb
@@ -0,0 +1,3 @@
+<%= link_to like_learning_object_path(id: learning_object.id), class: 'btn btn-primary btn-xs vote', method: :post, remote: true do %>
+    <span class="glyphicon glyphicon-thumbs-up" aria-hidden="true"></span>
+<% end %>
\ No newline at end of file
diff --git a/app/views/orientdb/learning_objects/collections.json.jbuilder b/app/views/orientdb/learning_objects/collections.json.jbuilder
new file mode 100644
index 0000000000000000000000000000000000000000..5a5e53a6c7785008f21f843e09b65aa42e172cba
--- /dev/null
+++ b/app/views/orientdb/learning_objects/collections.json.jbuilder
@@ -0,0 +1,3 @@
+json.array!(@collections) do |collection|
+  json.extract! collection, :id, :name
+end
diff --git a/app/views/orientdb/learning_objects/edit.html.erb b/app/views/orientdb/learning_objects/edit.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..9564e46a360dbe30ce2a24e697d60eae386dffe0
--- /dev/null
+++ b/app/views/orientdb/learning_objects/edit.html.erb
@@ -0,0 +1,6 @@
+<h1>Editing Learning Object</h1>
+
+<%= render 'form' %>
+
+<%= link_to 'Show', @learning_object %> |
+<%= link_to 'Back', learning_objects_path %>
diff --git a/app/views/orientdb/learning_objects/new.html.erb b/app/views/orientdb/learning_objects/new.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..bcaa506113f69d69ab3ca0a7249be1cb43573571
--- /dev/null
+++ b/app/views/orientdb/learning_objects/new.html.erb
@@ -0,0 +1,3 @@
+<%= render 'form' %>
+
+<%= link_to 'Voltar', learning_objects_path %>
diff --git a/app/views/orientdb/learning_objects/show.html.erb b/app/views/orientdb/learning_objects/show.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..229c9f0087be9d4963936bac62a621fd593e8af8
--- /dev/null
+++ b/app/views/orientdb/learning_objects/show.html.erb
@@ -0,0 +1,138 @@
+<% content_for(:body_attributes) do %>data-no-turbolink="true"<% end %>
+<div class="row learning-object">
+  <div class="col-md-7">
+    <div class="view">
+      <%=
+        case @type
+        when 'Áudio' then audio_tag(@learning_object.retrievelink, controls: true)
+        when 'Vídeo' then video_tag(@learning_object.retrievelink, autobuffer: true, poster: @learning_object.thumbnail)
+        when 'PDF' then "<iframe src=\"/pdfjs/web/viewer.html?file=#{@learning_object.retrievelink }\" style=\"border: 0 \" width=\"125%\" height=\"280\" frameborder=\"0\" scrolling=\"no\"></iframe>".html_safe
+        else learning_object_thumbnail @learning_object, "large"
+        end
+      %>
+    </div>
+    <div class="pull-right" style="padding-right:122px">
+      <span class="glyphicon glyphicon-eye-open"><%= @learning_object.views %>&nbsp;</span>
+      <span class="glyphicon glyphicon-star votes-count" data-id="<%= @learning_object.id %>" data-toggle="tooltip" data-placement="bottom" title="Curtidas"><%= @learning_object.likes %></span>&nbsp;
+    </div>
+    <br/><br/>
+    <h2 class="title"><%= @learning_object.name %></h2>
+    <% unless @learning_object.description.nil? %>
+      <p class="description"><%= @learning_object.description %></p>
+    <% end %>
+    <span class="category"><%= ("Em " + show_categories(@learning_object.categories)) unless @learning_object.categories.nil? %></span>
+  </div>
+  <div class="col-md-5">
+    <div class="rightbar">
+      <% author = @learning_object.get_metadata_value_of("dc.contributor.author") %>
+      <% unless author.blank? %>
+        <div class="media">
+          <div class="media-left">
+            <a href="#"><img class="user-image-small" src="<%#= current_user.avatar.url(:thumb) %><%= asset_path('user-anon.png')%>" alt="Foto do usuário"/></a>
+          </div>
+          <div class="media-body">
+            <h5>Autor</h5>
+            <h3 class="media-heading"><%= author %></h3>
+          </div>
+        </div>
+      <% end %>
+      <div class="media">
+        <div class="media-left">
+          <a href="#"><img class="user-image-small" src="<%#= current_user.avatar.url(:thumb) %><%= asset_path('user-anon.png')%>" alt="Foto do usuário"/></a>
+        </div>
+        <div class="media-body">
+          <% publisher_type = @learning_object.publisher.class %>
+          <h5><%= publisher_type == User ? 'Adicionado por' : 'Origem'%></h5>
+          <h3 class="media-heading"><%= @learning_object.publisher.name %></h3>
+        </div>
+      </div>
+      <div class="rating-panel">
+        <% if user_signed_in? %>
+          <div class="actions">
+            <div class="col-sm-3 action">
+              <%= link_to like_learning_object_path(id: @learning_object.id), class: 'vote',method: :post, remote: true do %>
+                  <% if @liked %>
+                    <%= image_tag "icons/Curtir_02.png", alt: "Descurtir" %>
+                  <% else %>
+                    <%= image_tag "icons/Curtir_01.png", alt: "Curtir" %>
+                  <% end %>
+                  <h6>curtir objeto</h6>
+              <% end %>
+            </div>
+            <div class="col-sm-3 action">
+              <%= link_to download_learning_object_path, target: "_blank" do %>
+              <%#= @learning_object.retrievelink %>
+                <%= image_tag "icons/download.png", alt: "Download do objeto" %>
+                <h6>salvar no computador</h6>
+              <%end%>
+            </div>
+            <div class="col-sm-3 action">
+            <a tabindex="0" class="add-to-collection" role="button" title="Adicionar as coleções" data-loid="<%= @learning_object.id %>">
+              <%= image_tag "icons/collection-add.png", alt: "Adicionar à coleção" %>
+              <h6>adicionar à coleção</h6>
+            </a>
+            </div>
+            <div class="col-sm-3 action">
+              <%= render 'complaints/complaints_button' %>
+            </div>
+          </div>
+        <% else %>
+          <br/>
+          <h4>Logue-se para poder curtir, adicionar o objeto em uma coleção, baixar o counteúdo ou denunciar.</h4>
+        <% end %>
+      </div>
+    </div>
+  </div>
+</div>
+<br/>
+
+<a class="btn btn-primary" type="button" data-toggle="modal" data-target="#extra_metadata_modal" title="Metadados Adicionais">Metadados Adicionais</a>
+<div class="modal fade" id="extra_metadata_modal" tabindex="-1" role="dialog" aria-labelledby="extra_metadata_modal_label">
+  <div class="modal-dialog" role="document">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close" data-dismiss="modal" aria-label="Fechar"><span aria-hidden="true">&times;</span></button>
+        <h4 class="modal-title" id="extra_metadata_modal_label">Metadados Adicionais</h4>
+      </div>
+        <div class="modal-body" style="text-align:justify">
+
+          <div class="container-fluid">
+            <div class="row">
+              <div class="col-sm-12">
+                <ul>
+                  <li><b>Autor:</b> <%= @learning_object.get_metadata_value_of("dc.contributor.author") %></li>
+                  <li><b>Tipo:</b> <%= @learning_object.get_metadata_value_of("dc.type") %></li>
+                  <li><b>Data:</b> <%= @learning_object.get_metadata_value_of("dc.date.available") %></li>
+                  <li><b>Linguagem:</b> <%= @learning_object.get_metadata_value_of("dc.language") %></li>
+                </ul>
+                <table class="table table-striped">
+                  <% @learning_object.metadata.each do |m| %>
+                    <tr>
+                      <th><span><%= "#{m["key"]}:"  %></span></th>
+                      <td><%=  "#{m["value"]}" %></td>
+                    </tr>
+                  <% end %>
+                </table>
+              </div>
+            </div>
+          </div>
+
+        </div>
+        <div class="modal-footer">
+          <button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button>
+        </div>
+    </div>
+  </div>
+</div>
+
+
+<script type="text/javascript">
+  $(".view video").hover(function(event) {
+    if (event.type === "mouseenter") {
+      this.setAttribute("controls","controls")
+    }
+    else if(event.type === "mouseleave") {
+      this.removeAttribute("controls")
+    }
+  });
+</script>
diff --git a/app/views/orientdb/learning_objects/show.json.jbuilder b/app/views/orientdb/learning_objects/show.json.jbuilder
new file mode 100644
index 0000000000000000000000000000000000000000..7e33e8d0f96501cf92c3c34101365723a62f0d53
--- /dev/null
+++ b/app/views/orientdb/learning_objects/show.json.jbuilder
@@ -0,0 +1 @@
+json.extract! @learning_object, :id, :created_at, :updated_at
diff --git a/app/views/orientdb/learning_objects/upload.html.erb b/app/views/orientdb/learning_objects/upload.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..d68577e9a20f31d56ac58e625ff75375b68a58ca
--- /dev/null
+++ b/app/views/orientdb/learning_objects/upload.html.erb
@@ -0,0 +1,3 @@
+<%= render 'file_upload_form' %>
+
+<%= link_to 'Voltar', learning_objects_path %>
diff --git a/app/views/search/_fetch.html.erb b/app/views/search/_fetch.html.erb
index b0f414da55524e3811335079fde2d6d381c3f310..dd7384b56e05e66b962f05fc84a3cd9526622509 100644
--- a/app/views/search/_fetch.html.erb
+++ b/app/views/search/_fetch.html.erb
@@ -1,5 +1,5 @@
 <input type="hidden" name="learning-objects-count" value="<%= @result.total_count %>"/>
 <div class="row">
-  <%= render @objects, orientation: "horizontal" %>
+  <%= render @result, orientation: "horizontal" %>
   <%= paginate @result %>
 </div>
diff --git a/app/views/search/index.html.erb b/app/views/search/index.html.erb
index 58e26782491ed6471546f26244643c75d8d65e31..d1d372028b61a3289ebccd0acf1de1dafbb5c6db 100644
--- a/app/views/search/index.html.erb
+++ b/app/views/search/index.html.erb
@@ -34,7 +34,7 @@
       <h3 class="dropdown">Níveis de Ensino<span class="caret caret-align-right"/></h3>
       <div class="dropdown-element">
         <% @school_levels.each  do |school_level|%>
-          <label class="label-checkbox"><%= school_level %><input value="<%= school_level %>" name="filter-school-level" type="checkbox"/></label><br>
+          <label class="label-checkbox"><%= school_level.name %><input value="<%= school_level.name %>" name="filter-school-level" type="checkbox"/></label><br>
         <% end %>
       </div>
 
@@ -42,7 +42,7 @@
       <h3 class="dropdown">Origem<span class="caret caret-align-right"/></h3>
       <div class="dropdown-element">
         <% @source.each  do |source|%>
-          <label class="label-checkbox"><%= source.name %><input value="<%= source.name %>" name="filter-source" type="checkbox"/></label><br>
+          <label class="label-checkbox"><%= source.name %><input value="<%= source.id %>" name="filter-source" type="checkbox"/></label><br>
         <% end %>
       </div>
       <% end %>
diff --git a/app/views/shared/application/_header.html.erb b/app/views/shared/application/_header.html.erb
index c94bdbf9417c4ca23b489cfff5cec53ab5585488..3bd7359b6be4b726c9bbf9a9263507b5367d4326 100644
--- a/app/views/shared/application/_header.html.erb
+++ b/app/views/shared/application/_header.html.erb
@@ -35,7 +35,7 @@
           <div class="search-input">
             <form action="/search" method="get">
               <div class="input-group" id="search">
-                <input type="text" placeholder="buscar em <%= number_with_delimiter(@learning_object_count, delimiter: ".") %> objetos" class="form-control" name="query" id="main_search">
+                <input type="text" placeholder="buscar em <%= number_with_delimiter(LearningObject.count, delimiter: ".") %> objetos" class="form-control" name="query" id="main_search">
                 <div class="input-group-btn">
                   <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i></button>
                 </div>
diff --git a/app/workers/dspace_upload_worker.rb b/app/workers/dspace_upload_worker.rb
index 0c582c3eede3b38640803bc36e02d645b1193b32..0666a13ddf8004e5e2c9478c324dd04f31773d81 100644
--- a/app/workers/dspace_upload_worker.rb
+++ b/app/workers/dspace_upload_worker.rb
@@ -12,19 +12,15 @@ class DspaceUploadWorker
     bitstream = dspace.items.add_bitstream(file, id: item_id, name: File.basename(media_path), description: get_description(options))
 
     #find learning object
-    learning_object = learning_object_repository.find learning_object_id
-    learning_object.attachments << build_attachment(bitstream)
-
-    #build attachments and publish
+    learning_object = LearningObject.find learning_object_id
+    learning_object.attachments.create map_bitstream2attachment(bitstream)
     publisher.publish! learning_object
   end
 
   private
 
-  def build_attachment(bitstream)
-    ::LearningObject::Attachment.new(id: bitstream.id, name: bitstream.name, link: bitstream.link,
-                                     retrieve_link: bitstream.retrieve_link, description: bitstream.description,
-                                     format: bitstream.format, mime_type: bitstream.mime_type, size: bitstream.size_bytes, bundle_name: bitstream.bundle_name, uptodate: false)
+  def map_bitstream2attachment(bitstream)
+    ::Dspace::AttachmentMapper.call bitstream
   end
 
   def publisher
diff --git a/app/workers/import_learning_object_worker.rb b/app/workers/import_learning_object_worker.rb
new file mode 100644
index 0000000000000000000000000000000000000000..12ffcd0a5f668f4ffbd8656755662c104dd088d7
--- /dev/null
+++ b/app/workers/import_learning_object_worker.rb
@@ -0,0 +1,25 @@
+class ImportLearningObjectWorker
+  include Sidekiq::Worker
+  sidekiq_options queue: :import
+  include RepositoriesProxy
+
+  def perform(rid)
+    object = learning_object_repository.find(rid)
+
+    LearningObject.create do |o|
+      o.name = object.name
+      o.created_at = object.created_at
+      o.updated_at = object.last_modified
+      o.status = object.status
+      o.author = object.author
+      o.description = object.description
+      o.school_level = object.grade_level
+      o.id_dspace = object.id_dspace
+      o.published_at = object.published_at
+      o.score = object.score
+      o.thumbnail = object.thumbnail
+      o.type = object.type
+    end
+
+  end
+end
diff --git a/app/workers/massive_dspace_sync_worker.rb b/app/workers/massive_dspace_sync_worker.rb
deleted file mode 100644
index bfce0c92a2ff9aa1022e37ebb3959a607116ad7c..0000000000000000000000000000000000000000
--- a/app/workers/massive_dspace_sync_worker.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-class MassiveDspaceSyncWorker
-
-  include Sidekiq::Worker
-  include RepositoriesProxy
-
-  def perform(item_ids)
-    item_ids.each do |id|
-      begin
-        dspace_repository.items.find(id: id["id_dspace"])
-      rescue
-        puts "----------------------------------------------"
-        puts "ITEM WILL BE REMOVED: #{item.to_json}"
-        puts "----------------------------------------------"
-        broken_item = learning_object_repository.find id["id"]
-        learning_object_repository.destroy broken_item
-
-      end
-    end
-
-  end
-
-  private
-
-  def dspace_repository
-    DspaceService.create_client
-  end
-
-end
diff --git a/app/workers/massive_likes_creator_worker.rb b/app/workers/massive_likes_creator_worker.rb
deleted file mode 100644
index 79506a6831d6571a912b2a24990054f0f60ed616..0000000000000000000000000000000000000000
--- a/app/workers/massive_likes_creator_worker.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-class MassiveLikesCreatorWorker
-
-  include Sidekiq::Worker
-  include RepositoriesProxy
-
-  def perform(item_id, users_ids)
-
-    item = learning_object_repository.find item_id
-
-    users_ids.each do |user_id|
-      user = User.find user_id
-      begin
-        learning_object_repository.like user, item
-      rescue
-        next
-      end
-    end
-
-  end
-
-end
diff --git a/app/workers/massive_views_creator_worker.rb b/app/workers/massive_views_creator_worker.rb
deleted file mode 100644
index a5903a0a87314ecb87074abfc47cf1e90e4ab418..0000000000000000000000000000000000000000
--- a/app/workers/massive_views_creator_worker.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-class MassiveViewsCreatorWorker
-
-  include Sidekiq::Worker
-  include RepositoriesProxy
-
-  def perform(item_id, users_ids)
-
-    item = learning_object_repository.find item_id
-
-    users_ids.each do |user_id|
-      user = User.find user_id
-      begin
-        learning_object_repository.increment_views user, item
-      rescue
-        next
-      end
-    end
-
-  end
-
-end
diff --git a/config/routes.rb b/config/routes.rb
index cb8c4cdd22dd9b3311e701a4036fe606fb0e71da..f5a3db21c2ed045ea6813c6447df56b12d71790d 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -64,7 +64,6 @@ Rails.application.routes.draw do
   resources :learning_objects do
     member do
       post :like
-      post :bookmarks
       get :collections
       get :upload
       get :download
@@ -89,6 +88,10 @@ Rails.application.routes.draw do
     end
   end
 
+  get '/bookmarks' => 'bookmarks#show', as: 'bookmark'
+  post '/bookmarks/:type/:id' => 'bookmarks#add_object', as: :bookmark_add
+  delete '/bookmarks/:type/:id' => 'bookmarks#remove_object', as: :bookmark_remove
+
   get '/users/list' => 'users#list', as: :list_all_users
   resources :users, only: [:show] do
     collection do
diff --git a/db/migrate/20150918134417_add_rid_column_to_users.rb b/db/migrate/20150918134417_add_rid_column_to_users.rb
deleted file mode 100644
index b31a51e799c6f0a54fe2aaa7e8680606f670e7d4..0000000000000000000000000000000000000000
--- a/db/migrate/20150918134417_add_rid_column_to_users.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class AddRidColumnToUsers < ActiveRecord::Migration
-  def change
-    add_column :users, :rid, :string
-  end
-end
diff --git a/db/migrate/20151218130048_create_feedback_ratings.rb b/db/migrate/20151218130048_create_feedback_ratings.rb
deleted file mode 100644
index 59431ce4445d2a3aa009a0556387a8fc37eb01ec..0000000000000000000000000000000000000000
--- a/db/migrate/20151218130048_create_feedback_ratings.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class CreateFeedbackRatings < ActiveRecord::Migration
-  def change
-    create_table :feedback_ratings do |t|
-      t.string :name
-
-      t.timestamps null: false
-    end
-  end
-end
diff --git a/db/migrate/20151218130232_create_feedbacks.rb b/db/migrate/20151218130232_create_feedbacks.rb
deleted file mode 100644
index 2381556153e73deae75b393cd62d34b2f0bcbc26..0000000000000000000000000000000000000000
--- a/db/migrate/20151218130232_create_feedbacks.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class CreateFeedbacks < ActiveRecord::Migration
-  def change
-    create_table :feedbacks do |t|
-      t.belongs_to :user, index: true
-      t.text :message
-
-      t.timestamps null: false
-    end
-    add_foreign_key :feedbacks, :users
-  end
-end
diff --git a/db/migrate/20151218131811_create_feedbacks_ratings_join_table.rb b/db/migrate/20151218131811_create_feedbacks_ratings_join_table.rb
deleted file mode 100644
index acf847d144b914f7529c7588762503f7e140ca14..0000000000000000000000000000000000000000
--- a/db/migrate/20151218131811_create_feedbacks_ratings_join_table.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class CreateFeedbacksRatingsJoinTable < ActiveRecord::Migration
-  def change
-    create_table :feedbacks_feedback_ratings, id: false do |t|
-      t.integer :feedback_id
-      t.integer :feedback_rating_id
-      t.integer :rating
-    end
-
-    add_index :feedbacks_feedback_ratings, :feedback_id
-    add_index :feedbacks_feedback_ratings, :feedback_rating_id
-  end
-end
diff --git a/db/migrate/20160125120915_create_learning_objects.rb b/db/migrate/20160125120915_create_learning_objects.rb
new file mode 100644
index 0000000000000000000000000000000000000000..30a512e9c11ef20851258894b35b784985663f6a
--- /dev/null
+++ b/db/migrate/20160125120915_create_learning_objects.rb
@@ -0,0 +1,23 @@
+class CreateLearningObjects < ActiveRecord::Migration
+  def change
+    create_table :learning_objects do |t|
+      t.integer :id_dspace, index: true
+      t.string :name
+      t.string :author
+      t.text :description
+      t.datetime :published_at
+      t.string :object_type
+      t.integer :score, default: 0
+      t.integer :school_level
+      t.string :language
+      t.jsonb :metadata, default: {}
+      t.text :bitstreams
+      t.string :thumbnail
+      t.text :keywords
+
+      t.references :publisher, polymorphic: true, index: true
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160125121603_create_topics.rb b/db/migrate/20160125121603_create_topics.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5d483cc840d6660fc8bf987957fc71f5e73cf53b
--- /dev/null
+++ b/db/migrate/20160125121603_create_topics.rb
@@ -0,0 +1,9 @@
+class CreateTopics < ActiveRecord::Migration
+  def change
+    create_table :topics do |t|
+      t.string :name
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160125122642_learning_objects_topics.rb b/db/migrate/20160125122642_learning_objects_topics.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1a5f0e26fb0de1deacc23aa8d8e92fbc5c398c7b
--- /dev/null
+++ b/db/migrate/20160125122642_learning_objects_topics.rb
@@ -0,0 +1,10 @@
+class LearningObjectsTopics < ActiveRecord::Migration
+  def change
+    create_table :learning_objects_topics do |t|
+      t.integer :learning_object_id
+      t.integer :topic_id
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160125122943_create_institutions.rb b/db/migrate/20160125122943_create_institutions.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b2d1ca55b3af8743a0836f1585f613c6c02ca0c6
--- /dev/null
+++ b/db/migrate/20160125122943_create_institutions.rb
@@ -0,0 +1,13 @@
+class CreateInstitutions < ActiveRecord::Migration
+  def change
+    create_table :institutions do |t|
+      t.string :name
+      t.string :address
+      t.string :city
+      t.string :country
+      t.text :description
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160125123423_create_collections.rb b/db/migrate/20160125123423_create_collections.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e325052aa8dc079bbe13dcd41144b8d89a93d065
--- /dev/null
+++ b/db/migrate/20160125123423_create_collections.rb
@@ -0,0 +1,13 @@
+class CreateCollections < ActiveRecord::Migration
+  def change
+    create_table :collections do |t|
+      t.string :name
+      t.text :description
+      t.string :privacy, default: 'private'
+
+      t.references :owner, index: true, polymorphic: true
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160125124125_institutions_users.rb b/db/migrate/20160125124125_institutions_users.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1e1da18f7911a129348814505b0a7bf53ec2442e
--- /dev/null
+++ b/db/migrate/20160125124125_institutions_users.rb
@@ -0,0 +1,10 @@
+class InstitutionsUsers < ActiveRecord::Migration
+  def change
+    create_table :institutions_users do |t|
+      t.integer :institution_id
+      t.integer :user_id
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160125124508_create_complaints.rb b/db/migrate/20160125124508_create_complaints.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1552127562b86827e1107330e14b54d25068f59b
--- /dev/null
+++ b/db/migrate/20160125124508_create_complaints.rb
@@ -0,0 +1,12 @@
+class CreateComplaints < ActiveRecord::Migration
+  def change
+    create_table :complaints do |t|
+      t.text :description
+      t.belongs_to :user
+      t.belongs_to :learning_object
+      t.belongs_to :complaint_reason
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160125124545_create_complaint_reasons.rb b/db/migrate/20160125124545_create_complaint_reasons.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c5a2764e7de12ddfd9948a716d55f36bb8952b71
--- /dev/null
+++ b/db/migrate/20160125124545_create_complaint_reasons.rb
@@ -0,0 +1,9 @@
+class CreateComplaintReasons < ActiveRecord::Migration
+  def change
+    create_table :complaint_reasons do |t|
+      t.text :reason
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160125132447_create_bookmarks.rb b/db/migrate/20160125132447_create_bookmarks.rb
new file mode 100644
index 0000000000000000000000000000000000000000..79e5cbed98c256237144eda5576b73a0df1ab645
--- /dev/null
+++ b/db/migrate/20160125132447_create_bookmarks.rb
@@ -0,0 +1,12 @@
+class CreateBookmarks < ActiveRecord::Migration
+  def change
+    create_table :bookmarks do |t|
+      t.references :user, index: true
+      t.references :bookmarkable, polymorphic: true, index: true
+
+      t.timestamps null: false
+    end
+
+    add_column :users, :bookmarks_count, :integer, default: 0
+  end
+end
diff --git a/db/migrate/20160127135807_create_reviews.rb b/db/migrate/20160127135807_create_reviews.rb
new file mode 100644
index 0000000000000000000000000000000000000000..dba1b25503dc8edf9616e977bd0cc6746c80d371
--- /dev/null
+++ b/db/migrate/20160127135807_create_reviews.rb
@@ -0,0 +1,15 @@
+class CreateReviews < ActiveRecord::Migration
+  def change
+    create_table :reviews do |t|
+      t.string :name
+      t.text :description
+      t.text :pros
+      t.text :cons
+      t.references :reviewable, polymorphic: true, index: true
+
+      t.references :user, index: true
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160128115107_create_views.rb b/db/migrate/20160128115107_create_views.rb
new file mode 100644
index 0000000000000000000000000000000000000000..4a4a68cbdd34743b1036b19f45ef638e8a106ebe
--- /dev/null
+++ b/db/migrate/20160128115107_create_views.rb
@@ -0,0 +1,11 @@
+class CreateViews < ActiveRecord::Migration
+  def change
+    create_table :views do |t|
+      t.references :viewable, polymorphic: true, index: true
+
+      t.references :user, index: true
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160128115428_create_downloads.rb b/db/migrate/20160128115428_create_downloads.rb
new file mode 100644
index 0000000000000000000000000000000000000000..51e72c889239738bc00504ae7ae5e98eb1129ef8
--- /dev/null
+++ b/db/migrate/20160128115428_create_downloads.rb
@@ -0,0 +1,11 @@
+class CreateDownloads < ActiveRecord::Migration
+  def change
+    create_table :downloads do |t|
+      t.references :downloadable, polymorphic: true, index: true
+
+      t.references :user, index: true
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160128115555_create_likes.rb b/db/migrate/20160128115555_create_likes.rb
new file mode 100644
index 0000000000000000000000000000000000000000..72febb8fa4ac3c3f24c53fda6b73c73062a012a7
--- /dev/null
+++ b/db/migrate/20160128115555_create_likes.rb
@@ -0,0 +1,13 @@
+class CreateLikes < ActiveRecord::Migration
+  def change
+    create_table :likes do |t|
+      t.references :likeable, polymorphic: true, index: true
+
+      t.references :user, index: true
+
+      t.timestamps null: false
+    end
+
+    add_index :likes, [:user_id, :likeable_id, :likeable_type], unique: true, name: 'user_and_likeable'
+  end
+end
diff --git a/db/migrate/20160128115721_create_shares.rb b/db/migrate/20160128115721_create_shares.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8ff08d5739fb38f1731a281ec9fd7500bff258e2
--- /dev/null
+++ b/db/migrate/20160128115721_create_shares.rb
@@ -0,0 +1,11 @@
+class CreateShares < ActiveRecord::Migration
+  def change
+    create_table :shares do |t|
+      t.references :shareable, polymorphic: true, index: true
+
+      t.references :user, index: true
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160128122557_create_ratings.rb b/db/migrate/20160128122557_create_ratings.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5a03ba45194ac4403deedecb7228b7b45e2ef50a
--- /dev/null
+++ b/db/migrate/20160128122557_create_ratings.rb
@@ -0,0 +1,9 @@
+class CreateRatings < ActiveRecord::Migration
+  def change
+    create_table :ratings do |t|
+      t.string :name
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160128123028_create_review_ratings.rb b/db/migrate/20160128123028_create_review_ratings.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f8f2d48caefc5a9d9854aa43b16503263676d882
--- /dev/null
+++ b/db/migrate/20160128123028_create_review_ratings.rb
@@ -0,0 +1,12 @@
+class CreateReviewRatings < ActiveRecord::Migration
+  def change
+    create_table :review_ratings do |t|
+      t.references :review, index: true
+      t.references :rating, index: true
+
+      t.integer :value
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160128123901_create_follows.rb b/db/migrate/20160128123901_create_follows.rb
new file mode 100644
index 0000000000000000000000000000000000000000..724308c4343ebcf729f4db37d0a893cc19e506a3
--- /dev/null
+++ b/db/migrate/20160128123901_create_follows.rb
@@ -0,0 +1,13 @@
+class CreateFollows < ActiveRecord::Migration
+  def change
+    create_table :follows do |t|
+      t.references :followable, polymorphic: true, index: true
+
+      t.references :user, index: true
+
+      t.timestamps null: false
+    end
+
+    add_index :follows, [:user_id, :followable_id, :followable_type], unique: true, name: 'user_and_followable'
+  end
+end
diff --git a/db/migrate/20160128125336_create_collection_items.rb b/db/migrate/20160128125336_create_collection_items.rb
new file mode 100644
index 0000000000000000000000000000000000000000..735387e2e3a61606590b3a07027f22be655c1d54
--- /dev/null
+++ b/db/migrate/20160128125336_create_collection_items.rb
@@ -0,0 +1,13 @@
+class CreateCollectionItems < ActiveRecord::Migration
+  def change
+    create_table :collection_items do |t|
+      t.references :collectionable, polymorphic: true, index: {name: "index_citems_on_ctype_and_cid"}
+
+      t.references :collection, index: true
+
+      t.integer :order
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160129191739_create_topic_highlights.rb b/db/migrate/20160129191739_create_topic_highlights.rb
new file mode 100644
index 0000000000000000000000000000000000000000..62f79f78bd416ccb723da143328f5bfe2555a291
--- /dev/null
+++ b/db/migrate/20160129191739_create_topic_highlights.rb
@@ -0,0 +1,12 @@
+class CreateTopicHighlights < ActiveRecord::Migration
+  def change
+    create_table :topic_highlights do |t|
+      t.references :topic, index: true
+      t.references :learning_object, index: true
+
+      t.timestamps null: false
+    end
+    add_foreign_key :topic_highlights, :topics
+    add_foreign_key :topic_highlights, :learning_objects
+  end
+end
diff --git a/db/migrate/20160130191533_create_topic_relationships.rb b/db/migrate/20160130191533_create_topic_relationships.rb
new file mode 100644
index 0000000000000000000000000000000000000000..bd03053afb5a63b9aaa8cea9817ffe547b77c013
--- /dev/null
+++ b/db/migrate/20160130191533_create_topic_relationships.rb
@@ -0,0 +1,10 @@
+class CreateTopicRelationships < ActiveRecord::Migration
+  def change
+    create_table :topic_relationships do |t|
+      t.references :parent, index: true
+      t.references :child, index: true
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/db/migrate/20160131115733_add_counter_to_view_like_share_download.rb b/db/migrate/20160131115733_add_counter_to_view_like_share_download.rb
new file mode 100644
index 0000000000000000000000000000000000000000..7df3a140b48f5d272e923c9c962e8b42a8968758
--- /dev/null
+++ b/db/migrate/20160131115733_add_counter_to_view_like_share_download.rb
@@ -0,0 +1,13 @@
+class AddCounterToViewLikeShareDownload < ActiveRecord::Migration
+  def change
+    add_column :learning_objects, :views_count, :integer, default: 0
+    add_column :learning_objects, :downloads_count, :integer, default: 0
+    add_column :learning_objects, :likes_count, :integer, default: 0
+    add_column :learning_objects, :shares_count, :integer, default: 0
+
+    add_column :collections, :views_count, :integer, default: 0
+    add_column :collections, :downloads_count, :integer, default: 0
+    add_column :collections, :likes_count, :integer, default: 0
+    add_column :collections, :shares_count, :integer, default: 0
+  end
+end
diff --git a/db/migrate/20160201135415_create_learning_object_attachments.rb b/db/migrate/20160201135415_create_learning_object_attachments.rb
new file mode 100644
index 0000000000000000000000000000000000000000..fbcdecef74ce086e64edba3726739c4824526a6f
--- /dev/null
+++ b/db/migrate/20160201135415_create_learning_object_attachments.rb
@@ -0,0 +1,18 @@
+class CreateLearningObjectAttachments < ActiveRecord::Migration
+  def change
+    create_table :learning_object_attachments do |t|
+      t.string :name
+      t.string :link
+      t.string :retrieve_link
+      t.text :description
+      t.string :format
+      t.string :mime_type
+      t.integer :size
+      t.string :bundle_name
+      t.belongs_to :learning_object, index: true
+
+      t.timestamps null: false
+    end
+    add_foreign_key :learning_object_attachments, :learning_objects
+  end
+end
diff --git a/db/migrate/20160201140345_remove_bitstreams_column_from_learning_objects.rb b/db/migrate/20160201140345_remove_bitstreams_column_from_learning_objects.rb
new file mode 100644
index 0000000000000000000000000000000000000000..56da4dd0fffbfabf1e60ad481e3656b14208942c
--- /dev/null
+++ b/db/migrate/20160201140345_remove_bitstreams_column_from_learning_objects.rb
@@ -0,0 +1,5 @@
+class RemoveBitstreamsColumnFromLearningObjects < ActiveRecord::Migration
+  def change
+    remove_column :learning_objects, :bitstreams
+  end
+end
diff --git a/db/migrate/20160202121737_add_state_column_for_learning_objects.rb b/db/migrate/20160202121737_add_state_column_for_learning_objects.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3597ebca1ef2edf9ebeb18b1878e063192948cb4
--- /dev/null
+++ b/db/migrate/20160202121737_add_state_column_for_learning_objects.rb
@@ -0,0 +1,5 @@
+class AddStateColumnForLearningObjects < ActiveRecord::Migration
+  def change
+    add_column :learning_objects, :state, :string, default: 'published'
+  end
+end
diff --git a/db/migrate/20160202134938_add_id_dspace_column_for_attachments.rb b/db/migrate/20160202134938_add_id_dspace_column_for_attachments.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f11460ceea8cd04c5be23dfc8d5e6f9c3e0aa91d
--- /dev/null
+++ b/db/migrate/20160202134938_add_id_dspace_column_for_attachments.rb
@@ -0,0 +1,5 @@
+class AddIdDspaceColumnForAttachments < ActiveRecord::Migration
+  def change
+    add_column :learning_object_attachments, :id_dspace, :integer
+  end
+end
diff --git a/db/seeds.rb b/db/seeds.rb
index 658adbf35b6cc6e8dd608da47241174be24b2163..dce80d0f0c00172a7423abb06578ffed91228f08 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -16,3 +16,11 @@ User.create!(
   password: '123mudar',
   roles: [Role.admin]
 )
+
+# data for portalmec
+Institution.create(name: 'C3SL/UFPR', address: 'Centro Politécnico', city: 'Curitiba', country: 'Brasil', description: 'Centro de Computação Científica e Software Livre')
+Institution.create(name: 'University of Colorado at Boulder, Physics Education Technology (PhET)')
+Institution.create(name: 'TV Escola')
+Institution.create(name: 'Portal Domínio Público')
+Institution.create(name: 'Portal Dia-a-dia Educação')
+Institution.create(name: 'Banco Internacional de Objetos Educacionais', description: 'Itens carregados do site http://objetoseducacionais2.mec.gov.br/')
diff --git a/lib/bitstream/accepted_formats.rb b/lib/bitstream/accepted_formats.rb
deleted file mode 100644
index 8b8088d0e86e1701fc3da15a59d151f3cc23f822..0000000000000000000000000000000000000000
--- a/lib/bitstream/accepted_formats.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-module Bitstream
-  module AcceptedFormats
-
-    def get_file_basename file
-      unless file.nil?
-        file_format = File.basename(file)
-      else
-        file_format = ""
-      end
-      file_format
-    end
-
-    def get_file_extname file
-      unless file.nil?
-        file_name = File.extname(file)
-      else
-        file_name = ""
-      end
-      file_name
-    end
-
-    def array_to_upcase array
-      upcase_array = []
-      array.each do |a|
-        upcase_array << a.upcase
-      end
-      upcase_array
-    end
-
-    def accepted_archive_formats
-      lower = [".zip", ".gzip", ".bzip", ".tar"]
-      upper = array_to_upcase lower
-      return lower + upper
-    end
-
-    def accepted_video_formats
-      lower = [".mp4", ".wmv", ".3gp", ".asf", ".avi", ".flv", ".swf", ".mov", ".mpg", ".mpeg", ".rmvb", ".rm", ".vob", ".webm"]
-      upper = array_to_upcase lower
-      return lower + upper
-    end
-
-    def accepted_image_formats
-      lower = [".jpg", ".jpeg", ".gif", ".png", ".bmp", ".tif", ".wmf"]
-      upper = array_to_upcase lower
-      return lower + upper
-    end
-
-    def accepted_other_formats
-      lower = [".pdf", ".pps"]
-      upper = array_to_upcase lower
-      return lower + upper
-    end
-
-    def accepted_formats
-      return accepted_video_formats + accepted_image_formats + accepted_other_formats
-    end
-
-  end
-end
diff --git a/lib/bitstream/utils.rb b/lib/bitstream/utils.rb
deleted file mode 100644
index a01ff78e697a00e68d03612c99896c452d82651c..0000000000000000000000000000000000000000
--- a/lib/bitstream/utils.rb
+++ /dev/null
@@ -1,122 +0,0 @@
-module Bitstream
-  module Utils
-
-    include AcceptedFormats
-
-    def clean_tmpfiles(workdir,files)
-      files.each do |f|
-        delete_file f
-      end
-      delete_dir workdir
-    end
-
-    def tmpdir_path(id)
-      tmpdir = "/tmp/#{id}/"
-      create_dir tmpdir
-      return tmpdir
-    end
-
-    def create_dir(dirname)
-      FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
-    end
-
-    def delete_dir(dir)
-      FileUtils.rmdir(dir) if File.directory?(dir)
-    end
-
-    def delete_file(file)
-      FileUtils.rm(file) if File.exist?(file)
-    end
-
-    def public_dir
-      @public_dir ||= Rails.root.join('public')
-    end
-
-    def get_accepted_bitstreams(filename,retrieve_link,workdir)
-
-      file_format = get_file_extname filename
-
-      accepted_files = []
-
-      if accepted_formats.include? file_format or accepted_archive_formats.include? file_format
-        begin
-          file = workdir + filename
-          download_bitstream(retrieve_link,file)
-        rescue Exception => e
-          puts "#{method_log_tag} #{e}"
-        else
-          if accepted_archive_formats.include? file_format
-            extract_accepted_bitstreams(file,workdir).each do |f|
-              accepted_files << f
-            end
-            delete_file file
-          else
-            accepted_files << file
-          end
-        end
-      end
-
-      return accepted_files
-    end
-
-    def extract_accepted_bitstreams(archive_file,workdir)
-
-      return [] if archive_file.nil?
-
-      extracted_files = []
-
-      puts "#{method_log_tag} Extracting accepted files out from '#{get_file_basename(archive_file)}'"
-      begin
-        Archive.read_open_filename(archive_file) do |archive|
-          while entry = archive.next_header
-            if accepted_formats.include? get_file_extname(entry.pathname)
-              filename = get_file_basename(entry.pathname)
-              file = workdir + filename
-              begin
-                File.open(file, 'wb') do |f|
-                  archive.read_data(1024) do |d|
-                   f << d
-                  end
-                end
-              rescue Exception => e
-                puts "#{method_log_tag} #{e}
-                    \r#{method_log_tag} ERROR: Some error occurred while extracting file '#{filename}'"
-              else
-                puts "#{method_log_tag} SUCCESS: Extracted '#{filename}' to '#{file}'"
-                extracted_files << file
-              end
-            end
-          end
-        end
-      rescue Exception => e
-        puts "#{method_log_tag} #{e}
-            \r#{method_log_tag} ERROR: Some error occurred while extracting files from '#{get_file_basename(archive_file)}'"
-      end
-
-      return extracted_files
-    end
-
-    def download_bitstream(url,output)
-      puts "#{method_log_tag} Downloading bitstream: '#{url}' => '#{output}'"
-      begin
-        c = Curl::Easy.new(url)
-        c.ssl_verify_peer = false
-        c.ssl_verify_host = false
-        File.open(output, 'wb') do |f|
-          c.on_body {|data| f << data; data.size }
-          c.perform
-        end
-      rescue Exception => e
-        raise "#{method_log_tag} #{e}
-            \r#{method_log_tag} ERROR: Some error occurred during file download."
-      else
-        return true
-      end
-    end
-
-    def method_log_tag
-      return "[#{caller_locations(1,1)[0].label}]"
-    end
-
-  end
-end
diff --git a/lib/ranking/README.md b/lib/ranking/README.md
deleted file mode 100644
index f41dc954faec97127360ce65987cec7704697365..0000000000000000000000000000000000000000
--- a/lib/ranking/README.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Ranking Module
- 
-To use you'll need to instanciate a Rater, and call its method sortByRate with an Item array. (see below)
-
-The ranking module will generate ranking score for each item, order them by that score and return this ordered list.
-
-- **Input:** Array of Item
-- **Output:** Ordered array of Item, most ranked coming first
-
-### Ranking::Item Class
-
-- +name+: name of object
-- +views+: view count
-- +downloads+: download count
-- +likes+: like count
-- +info+: anything, just for convinience of sorting it together, won't be modified
-
-
-### Usage Example
-
-```ruby
-
-items = []
-items << Ranking::Item.new("ax",1,1,1,["otherStuffA","lala",'a'])
-items << Ranking::Item.new("bx",2,2,2,[1,2,3,"teste","lblb",'b'])
-items << Ranking::Item.new("cx",1,1,99,[3,2,1,"teste","lclc",'c'])
-
-rater = Ranking::Rater.new(Ranking::Strategies::BasicRater.new(1000, 1, 100))
-rater.sortByRate(items).each do |i|
-    p i.name
-end
-```
-
-## Output
- - ordered array of Items, starting from the most ranked to the least
-
-``` ruby
-rater = Ranking::Rater.new(
-      Ranking::Strategies::BasicRater.new( 
-         #define sorting weights
-         positionWeight = 1000,
-         useWeight = 1,
-         likeWeight = 100
-      )
-    )
-
-sorted_item_array = rater.sortByRate(items) # Returns sorted array of items
-```
-
-### Sorting Weights
-
-| **Weight**    | **Ranking Points**  |
-| :----------   | :--------------  |
-| ***Position*** | If two items A and B are in positions 1(first) and 2, respectively, A will have [positionWeight] more rank points than B. This basically means that the higher the position weight the more dificult is to items change positions by likes, views and downloads. |
-| ***Use***      | Ranking Points = [useWeight] * minimum ( views , downloads ) |
-| ***Like***     | For each like, items receive [likeWeight] ranking points     |
diff --git a/lib/ranking/item.rb b/lib/ranking/item.rb
deleted file mode 100644
index 33fc5009b43282fb1ab453f477ff8fcbadd47ae3..0000000000000000000000000000000000000000
--- a/lib/ranking/item.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# This class represents an item of ranking
-class Ranking::Item
-  # name = name of object
-  # views = view count
-  # downloads = download count
-  # likes = like count
-  # info = just for convinience of sorting it together, won't be touched
-  attr_accessor :name, :views, :downloads, :likes, :info
-
-  def initialize(name, views = 0, downloads = 0, likes = 0, info = nil)
-    @name = name
-    @views = views
-    @downloads = downloads
-    @likes = likes
-    @info = info
-  end
-
-end
\ No newline at end of file
diff --git a/lib/ranking/rated_item.rb b/lib/ranking/rated_item.rb
deleted file mode 100644
index baa5aa8ec8a304efd2bdbad02187b7093b0e7ea7..0000000000000000000000000000000000000000
--- a/lib/ranking/rated_item.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# This class represents an item rated in ranking
-#  Have an association with a rank item
-class Ranking::RatedItem
-  attr_accessor :item, :rate
-
-  def initialize(item, rate)
-    @item = item
-    @rate = rate
-  end
-end
\ No newline at end of file
diff --git a/lib/ranking/rater.rb b/lib/ranking/rater.rb
deleted file mode 100644
index 75b3d40181a6f580dfef543a4e56e872e59edb74..0000000000000000000000000000000000000000
--- a/lib/ranking/rater.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class Ranking::Rater
-
-  def initialize(rater_strategy)
-    @rater = rater_strategy
-  end
-
-  def sortByRate(items)
-    @rater.sortByRate items
-  end
-
-end
\ No newline at end of file
diff --git a/lib/ranking/strategies/basic_rater.rb b/lib/ranking/strategies/basic_rater.rb
deleted file mode 100644
index d88d4951319be14be40f90ce16d2c461c249ca27..0000000000000000000000000000000000000000
--- a/lib/ranking/strategies/basic_rater.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-class Ranking::Strategies::BasicRater < Ranking::Strategy
-
-  def sortByRate(items)
-    items.zip( items.size.downto(1) )
-        .collect { |item,reverseIndex| rateItem( item, reverseIndex ) }
-        .sort { |itemA,itemB| itemA.rate <=> itemB.rate }
-        .collect { |ri| ri.item }
-        .reverse # Best ranked comes first
-  end
-
-  private
-
-  def rateItem(item, inversePosition)
-    positionRating = inversePosition * @positionWeight
-    useRating = (item.downloads < item.views ? item.downloads : item.views) * @useWeight
-    likeRating = item.likes * @likeWeight
-
-    rate = positionRating + useRating + likeRating
-    build_rated_item item, rate
-  end
-
-end
diff --git a/lib/ranking/strategy.rb b/lib/ranking/strategy.rb
deleted file mode 100644
index 3568addcb0a194e276c2f603019c9a51b2d5494a..0000000000000000000000000000000000000000
--- a/lib/ranking/strategy.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-class Ranking::Strategy
-
-  def initialize(positionWeight = 1000, useWeight = 3, likeWeight = 100)
-    @positionWeight = positionWeight
-    @useWeight = useWeight
-    @likeWeight = likeWeight
-  end
-
-  protected
-
-  def build_rated_item(item, rate)
-    Ranking::RatedItem.new(item, rate)
-  end
-
-end
\ No newline at end of file
diff --git a/lib/search_engine/dspace_solr.rb b/lib/search_engine/dspace_solr.rb
deleted file mode 100644
index 4ddc03ced7b015e260e28a8c581415017df37bab..0000000000000000000000000000000000000000
--- a/lib/search_engine/dspace_solr.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-module SearchEngine
-  module DspaceSolr
-
-    def search(qry)
-
-      queryParams = merge_search_parameters(
-                      {:q => '*:*', :fq => qry},
-                      solr_search_default_parameters
-                    )
-      results = solr_client.get 'select', :params => queryParams
-      objectsFound = select_items_from_results(results)
-
-      return objectsFound
-    end
-
-    private
-
-    #Resource types:
-    # 2 = Item
-    # 3 = Collection
-    # 4 = Community
-    def select_items_from_results(results)
-      resultList = Set.new
-      results["response"]["docs"].select { |r|
-        r["search.resourcetype"].to_i.equal? 2
-      }.each do |i|
-        resultList.add i
-      end
-      return resultList
-    end
-
-    def solr_client
-      return RSolr.connect :url => 'http://portalmecdev.c3sl.ufpr.br:8080/solr/search/'
-    end
-
-    def merge_search_parameters(p1, p2)
-      return p1.merge(p2) { |key,oldval,newval| key = [newval,oldval].flatten }
-    end
-
-    def solr_search_default_parameters
-      return {
-          "fl"=>["
-          search.resourcetype, search.resourceid,
-          handle, author, title, dc.description
-        "],
-          "type"=>"0",
-          "start"=>"0",
-          "rows"=>"1000",
-          "facet"=>"true",
-          "facet.offset"=>"0",
-          "facet.mincount"=>"1",
-          "f.subject_tax_0_filter.facet.sort"=>"count",
-          "f.subject_tax_0_filter.facet.limit"=>"11",
-          "f.author_filter.facet.limit"=>"11",
-          "f.dateIssued.year.facet.sort"=>"index",
-          "f.dateIssued.year.facet.limit"=>"10",
-          "f.author_filter.facet.sort"=>"count",
-          "facet.field"=>["author_filter","subject_tax_0_filter","dateIssued.year"],
-          "fq"=>["NOT(withdrawn:true)","NOT(discoverable:false)","read:(g0 OR g0)"]
-      }
-    end
-
-  end
-end
diff --git a/lib/tasks/dspace.rake b/lib/tasks/dspace.rake
index 76315b4026796d36140da1887c3a9c790d54c5db..6b9d1efcce51ada2c0fb8958fb29552746bf7f2f 100644
--- a/lib/tasks/dspace.rake
+++ b/lib/tasks/dspace.rake
@@ -13,7 +13,7 @@ namespace :dspace do
     logger.level = Log::DatabaseLogger::CREATE
 
     # Quantity of items fetched on each iteration
-    limit = 500
+    limit = 1000
 
     # Start point from where items will be fetched
     offset = 0
@@ -24,7 +24,7 @@ namespace :dspace do
 
       begin
         # Get items from dspace (from offset to offset+limit)
-        dspace_items = get_items_from_dspace(limit,offset, ['metadata','bitstreams'])
+        dspace_items = get_items_from_dspace(limit, offset, ['metadata', 'bitstreams'])
       rescue => e
         logger.warn "Database error, going to sleep"
         logger.error e
@@ -36,6 +36,12 @@ namespace :dspace do
         # Terminate loop if there are no more items to import
         break if dspace_items.empty?
 
+        # continue if receive an error string
+        if dspace_items.is_a? String
+          logger.warn "Received a string instead of items: #{dspace_items}"
+          next
+        end
+
         # Increment offset, to get new items on next iteration
         offset = offset + limit
 
@@ -43,15 +49,8 @@ namespace :dspace do
         # Verifies if item is already on repository
         # Initializes new LearningObjects
         # and saves them on LearningObjects's repository
-        dspace_items.each do |item|
-          result = learning_object_repository.get_by_dspace_id item.id
-          if result.nil?
-            learning_object = initialize_learning_object item
-            learning_object_repository.create learning_object
-            # Comment the line below if you don't want print the itens
-            logger.create "Imported: #{item.id} -> #{learning_object.id} "
-          end
-        end
+        importer = Dspace::LearningObjectImporter.new(dspace_items)
+        importer.import { |learning_object| logger.create "Imported: #{learning_object.id_dspace} -> #{learning_object.id}" }
       end
     end
     logger.close
@@ -74,7 +73,7 @@ namespace :dspace do
 
       begin
         # Get items from dspace (from offset to offset+limit)
-        dspace_items = get_items_from_dspace(limit,offset, ['parentCollection'])
+        dspace_items = get_items_from_dspace(limit, offset, ['parentCollection'])
       rescue
         # Sleeps for a while to wait database's recovery
         sleep(10.seconds)
@@ -126,8 +125,8 @@ namespace :dspace do
 
   def get_items_from_dspace(limit, offset, expand=[])
     dspace_repository.items.all(
-      expand: expand,
-      limit: limit, offset: offset
+        expand: expand.join(','),
+        limit: limit, offset: offset
     )
   end
 
@@ -136,38 +135,16 @@ namespace :dspace do
     current_date = Time.now
 
     inst = Institution.new(
-      :name => item.name,
-      :last_modified => current_date,
-      :created_at => current_date,
-      :country => "",
-      :city => "",
-      :description => item.short_description
+        :name => item.name,
+        :last_modified => current_date,
+        :created_at => current_date,
+        :country => "",
+        :city => "",
+        :description => item.short_description
     )
 
   end
 
-  def initialize_learning_object item
-    metadata = build_array_of(item.metadata)
-    bitstreams = build_array_of(item.bit_streams)
-    current_date = Time.now
-
-    lo = LearningObject.new(
-      :name => item.name,
-      :last_modified => current_date,
-      :created_at => current_date,
-      :id_dspace => item.id,
-      :thumbnail => nil,
-      :bitstreams => bitstreams,
-      :metadata => metadata
-    )
-    lo.author = lo.get_metadata_values_of("dc.contributor.author").join(', ')
-    lo.description = lo.get_metadata_value_of("dc.description")
-    lo.type = lo.get_metadata_value_of("dc.type")
-    date = lo.get_metadata_value_of("dc.date.issued")
-    lo.published_at = Time.iso8601(date) unless date.nil?
-    lo
-  end
-
   def build_array_of(item_content=[])
     return item_content if item_content.nil?
     content_array = []
diff --git a/lib/tasks/mainPage.rake b/lib/tasks/mainPage.rake
deleted file mode 100644
index bb6e25e0c90acd0dc5a38358aeb351779d7be14d..0000000000000000000000000000000000000000
--- a/lib/tasks/mainPage.rake
+++ /dev/null
@@ -1,37 +0,0 @@
-namespace :mainPage do
-  desc "Generate the MainPage"
-  task :highlights => :environment do
-    include RepositoriesProxy
-    # repository = Portalmec::Application.repository
-    puts 'Generate the main page subject highlights'
-    general_highlights = Array.new
-    subjects = subject_repository.all
-    subjects.each do |subject|
-      # select all the learning objects about that subject
-      objects = subject.learning_objects
-      # transform the objects to RankingItem
-      objects = objects.collect do |object|
-        Ranking::Item.new(object.id,object.views,object.downloads,object.likes)
-      end
-      # rank them
-      rater = Ranking::Rater.new(Ranking::Strategies::BasicRater.new(0,1,100))
-      objects = rater.sortByRate(objects)
-      # select the five first objects to the general highlight
-      (general_highlights << objects.take(5)).flatten!
-
-      # add the object to the subject highlight
-      puts subject.name
-      subject_repository.update(subject.id,'set','highlights','[]')
-      objects.each do |object|
-        subject_repository.update(subject.id,'add','highlights',object.name)
-      end
-    end
-    puts 'Generating the main page highlights'
-    mainPage = main_page_repository.all.first
-    rid = mainPage['@rid']
-    main_page_repository.update(rid,'set','highlights','[]')
-    general_highlights.each do |general_highlight|
-      main_page_repository.update(rid,'add','highlights',general_highlight.name)
-    end
-  end
-end
diff --git a/lib/tasks/orientdb.rake b/lib/tasks/orientdb.rake
index 3508f153293b0c501b66b8c9b9744b0979b50d39..5f39f9dea65dafb55397d8c571949619ffa2b745 100644
--- a/lib/tasks/orientdb.rake
+++ b/lib/tasks/orientdb.rake
@@ -102,7 +102,7 @@ namespace :orientdb do
               lo.attributes << helper.get_attribute(key, v, create_first_attr)
             end
           end
-          
+
           # Create LearningObject relations that were added to its attrs
           learning_object_repository.create_relations(lo)
         end
@@ -118,7 +118,7 @@ namespace :orientdb do
 
     include RepositoriesProxy
     include Log::Logging
-    
+
     args.with_defaults(:log => STDOUT)
     Log::Logging.logger = Log::DatabaseLogger.new(args.log)
     logger.level = Log::DatabaseLogger::UPDATE
@@ -131,4 +131,45 @@ namespace :orientdb do
 
     logger.close
   end
+
+  task :import_subjects, [:log] => [:environment] do |t, args|
+    include RepositoriesProxy
+    include Log::Logging
+
+    args.with_defaults(:log => STDOUT)
+    Log::Logging.logger = Log::DatabaseLogger.new(args.log)
+    logger.level = Log::DatabaseLogger::UPDATE
+
+    subject_repository.all.each do |subject|
+      Topic.where(name: subject.name).first_or_create
+    end
+
+    logger.info "all topics imported!"
+
+    subject_repository.all.each do |subject|
+      topic = Topic.where(name: subject.name).first_or_create
+
+      subject_repository.get_subtopics(subject).each do |subtopic|
+        subtopic = Topic.where(name: subtopic.name).first_or_create
+
+        TopicRelationship.create(parent: topic, child: subtopic)
+      end
+
+      subject_repository.get_learning_objects(subject).each do |lo|
+        object = LearningObject.where(id_dspace: lo.id_dspace)
+
+        topic.learning_objects << object unless object.blank?
+      end
+
+      subject_repository.get_highlights(subject).each do |highlight|
+        object = LearningObject.where(id_dspace: highlight.id_dspace)
+
+        topic.highlights << object unless object.blank?
+      end
+
+      logger.info "topic '#{topic.name}' associations imported!"
+    end
+
+    logger.info "all topics associations imported!"
+  end
 end
diff --git a/test/fixtures/bookmarks.yml b/test/fixtures/bookmarks.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d9098d9934714fbe4ea20f4003a7c8beacfb73c6
--- /dev/null
+++ b/test/fixtures/bookmarks.yml
@@ -0,0 +1,7 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  user_id: 
+
+two:
+  user_id: 
diff --git a/test/fixtures/collection_items.yml b/test/fixtures/collection_items.yml
new file mode 100644
index 0000000000000000000000000000000000000000..937a0c002e426861e33bb25a2a8ce2b20b3efaa3
--- /dev/null
+++ b/test/fixtures/collection_items.yml
@@ -0,0 +1,11 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+# This model initially had no columns defined.  If you add columns to the
+# model remove the '{}' from the fixture names and add the columns immediately
+# below each fixture, per the syntax in the comments below
+#
+one: {}
+# column: value
+#
+two: {}
+#  column: value
diff --git a/test/fixtures/collections.yml b/test/fixtures/collections.yml
new file mode 100644
index 0000000000000000000000000000000000000000..be5d2e5138faca1e2c1b2c1a69b6fd2db1c3422a
--- /dev/null
+++ b/test/fixtures/collections.yml
@@ -0,0 +1,11 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  name: MyString
+  description: MyText
+  privacy: MyString
+
+two:
+  name: MyString
+  description: MyText
+  privacy: MyString
diff --git a/test/fixtures/complaint_reasons.yml b/test/fixtures/complaint_reasons.yml
new file mode 100644
index 0000000000000000000000000000000000000000..da295fd51a59cdbdc988d07823748ad7a3772934
--- /dev/null
+++ b/test/fixtures/complaint_reasons.yml
@@ -0,0 +1,7 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  reason: MyText
+
+two:
+  reason: MyText
diff --git a/test/fixtures/complaints.yml b/test/fixtures/complaints.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2e0c8cd169031d5a07b8f13b498743093d6310b7
--- /dev/null
+++ b/test/fixtures/complaints.yml
@@ -0,0 +1,7 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  description: MyText
+
+two:
+  description: MyText
diff --git a/test/fixtures/downloads.yml b/test/fixtures/downloads.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1afd2aa2c6cc5e33cf90cf2d48fe9b3f20b3a653
--- /dev/null
+++ b/test/fixtures/downloads.yml
@@ -0,0 +1,7 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  date: 2016-01-28 09:54:28
+
+two:
+  date: 2016-01-28 09:54:28
diff --git a/test/fixtures/follows.yml b/test/fixtures/follows.yml
new file mode 100644
index 0000000000000000000000000000000000000000..937a0c002e426861e33bb25a2a8ce2b20b3efaa3
--- /dev/null
+++ b/test/fixtures/follows.yml
@@ -0,0 +1,11 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+# This model initially had no columns defined.  If you add columns to the
+# model remove the '{}' from the fixture names and add the columns immediately
+# below each fixture, per the syntax in the comments below
+#
+one: {}
+# column: value
+#
+two: {}
+#  column: value
diff --git a/test/fixtures/institutions.yml b/test/fixtures/institutions.yml
new file mode 100644
index 0000000000000000000000000000000000000000..fe0cfd491980a84ebfad5d27bfdfd4c03156ecf9
--- /dev/null
+++ b/test/fixtures/institutions.yml
@@ -0,0 +1,15 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  name: MyString
+  address: MyString
+  city: MyString
+  country: MyString
+  description: MyText
+
+two:
+  name: MyString
+  address: MyString
+  city: MyString
+  country: MyString
+  description: MyText
diff --git a/test/fixtures/learning_object/attachments.yml b/test/fixtures/learning_object/attachments.yml
new file mode 100644
index 0000000000000000000000000000000000000000..cf9b5d498a8df28b59ea854eb13a353b00f3f5a6
--- /dev/null
+++ b/test/fixtures/learning_object/attachments.yml
@@ -0,0 +1,23 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  name: MyString
+  link: MyString
+  retrieve_link: MyString
+  description: MyText
+  format: MyString
+  mime_type: MyString
+  size: 1
+  bundle_name: MyString
+  learning_object_id: 
+
+two:
+  name: MyString
+  link: MyString
+  retrieve_link: MyString
+  description: MyText
+  format: MyString
+  mime_type: MyString
+  size: 1
+  bundle_name: MyString
+  learning_object_id: 
diff --git a/test/fixtures/learning_objects.yml b/test/fixtures/learning_objects.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7c75fb6710d6fc594b31b98a3a5d720bf587e0ff
--- /dev/null
+++ b/test/fixtures/learning_objects.yml
@@ -0,0 +1,25 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  id_dspace: 1
+  name: MyString
+  author: MyString
+  description: MyText
+  published_at: 2016-01-25 10:09:28
+  type: 
+  score: 1
+  school_level: 1
+  language: MyString
+  keywords: MyText
+
+two:
+  id_dspace: 1
+  name: MyString
+  author: MyString
+  description: MyText
+  published_at: 2016-01-25 10:09:28
+  type: 
+  score: 1
+  school_level: 1
+  language: MyString
+  keywords: MyText
diff --git a/test/fixtures/likes.yml b/test/fixtures/likes.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9dc57b68dd5ad1d883dda1bc093a8900ef1e745e
--- /dev/null
+++ b/test/fixtures/likes.yml
@@ -0,0 +1,7 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  date: 2016-01-28 09:55:55
+
+two:
+  date: 2016-01-28 09:55:55
diff --git a/test/fixtures/metadata.yml b/test/fixtures/metadata.yml
new file mode 100644
index 0000000000000000000000000000000000000000..fe5d943f69d2c6a8061a1f0adf2ee2ccecc29f81
--- /dev/null
+++ b/test/fixtures/metadata.yml
@@ -0,0 +1,11 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  key: MyString
+  value: MyText
+  language: MyString
+
+two:
+  key: MyString
+  value: MyText
+  language: MyString
diff --git a/test/fixtures/ratings.yml b/test/fixtures/ratings.yml
new file mode 100644
index 0000000000000000000000000000000000000000..56066c68af42f307f5780e9ac146e3651cea3979
--- /dev/null
+++ b/test/fixtures/ratings.yml
@@ -0,0 +1,7 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  name: MyString
+
+two:
+  name: MyString
diff --git a/test/fixtures/review_ratings.yml b/test/fixtures/review_ratings.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8572d47bb22aff1982ccd334b08f16f0cb1bd027
--- /dev/null
+++ b/test/fixtures/review_ratings.yml
@@ -0,0 +1,9 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  review: 
+  rating: 
+
+two:
+  review: 
+  rating: 
diff --git a/test/fixtures/reviews.yml b/test/fixtures/reviews.yml
new file mode 100644
index 0000000000000000000000000000000000000000..de59d391dbd04461c963962a78e1761c203693d9
--- /dev/null
+++ b/test/fixtures/reviews.yml
@@ -0,0 +1,15 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  name: MyString
+  description: MyText
+  pros: MyText
+  cons: MyText
+  reviewable_id: 
+
+two:
+  name: MyString
+  description: MyText
+  pros: MyText
+  cons: MyText
+  reviewable_id: 
diff --git a/test/fixtures/shares.yml b/test/fixtures/shares.yml
new file mode 100644
index 0000000000000000000000000000000000000000..18c323239a0eec3362ec5b1f64da298702dc123a
--- /dev/null
+++ b/test/fixtures/shares.yml
@@ -0,0 +1,7 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  date: 2016-01-28 09:57:21
+
+two:
+  date: 2016-01-28 09:57:21
diff --git a/test/fixtures/subjects.yml b/test/fixtures/subjects.yml
new file mode 100644
index 0000000000000000000000000000000000000000..56066c68af42f307f5780e9ac146e3651cea3979
--- /dev/null
+++ b/test/fixtures/subjects.yml
@@ -0,0 +1,7 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  name: MyString
+
+two:
+  name: MyString
diff --git a/test/fixtures/topic_highlights.yml b/test/fixtures/topic_highlights.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2d9646a7ee4cb282a40ccdf6a949543ece5b364c
--- /dev/null
+++ b/test/fixtures/topic_highlights.yml
@@ -0,0 +1,9 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  subject_id: 
+  learning_object_id: 
+
+two:
+  subject_id: 
+  learning_object_id: 
diff --git a/test/fixtures/topic_relationships.yml b/test/fixtures/topic_relationships.yml
new file mode 100644
index 0000000000000000000000000000000000000000..937a0c002e426861e33bb25a2a8ce2b20b3efaa3
--- /dev/null
+++ b/test/fixtures/topic_relationships.yml
@@ -0,0 +1,11 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+# This model initially had no columns defined.  If you add columns to the
+# model remove the '{}' from the fixture names and add the columns immediately
+# below each fixture, per the syntax in the comments below
+#
+one: {}
+# column: value
+#
+two: {}
+#  column: value
diff --git a/test/fixtures/views.yml b/test/fixtures/views.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2450a5d83c100365f3b24912a5ba086970603d0a
--- /dev/null
+++ b/test/fixtures/views.yml
@@ -0,0 +1,7 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  date: 2016-01-28 09:51:07
+
+two:
+  date: 2016-01-28 09:51:07
diff --git a/test/models/bookmark_test.rb b/test/models/bookmark_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5051073b52ebb4119518c2adb27978a85817d2eb
--- /dev/null
+++ b/test/models/bookmark_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class BookmarkTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/collection_item_test.rb b/test/models/collection_item_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..550996a8c0c8f0bfb2d3e41617501655ec722805
--- /dev/null
+++ b/test/models/collection_item_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class CollectionItemTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/collection_test.rb b/test/models/collection_test.rb
index eac7a38bfd207529fac40053bc58f206de882290..4f73670750e0f2ab0d70425f7d880dd2ab9da7b2 100644
--- a/test/models/collection_test.rb
+++ b/test/models/collection_test.rb
@@ -1,55 +1,7 @@
 require 'test_helper'
 
 class CollectionTest < ActiveSupport::TestCase
-
-  test 'collection is invalid when name attribute is empty' do
-    collection = Collection.new
-    assert !collection.valid?
-  end
-
-  test 'collection is valid when name attribute is not empty' do
-    collection = Collection.new(name: 'Minha coleção de teste')
-    assert collection.valid?
-  end
-
-  test 'append learning objects to collection' do
-    collection = Collection.new(name: 'Minha coleção de teste')
-    collection.add LearningObject.new
-    collection.add LearningObject.new
-
-    assert_count 2, collection.learning_objects
-  end
-
-  test 'remove learning object from collection' do
-    lo1 = LearningObject.new(id: '#45:2')
-    collection = Collection.new(name: 'Minha coleção de teste')
-    collection.add lo1
-    collection.add LearningObject.new(id: '#43:34')
-    assert_count 2, collection.learning_objects
-
-    collection.remove lo1
-    assert_count 1, collection.learning_objects
-  end
-
-  test 'serialize collection for orientdb' do
-    collection = Collection.new(name: 'Minha coleção de teste')
-    assert_equal(build_collection_hash(collection), collection.to_orientdb_hash)
-    #collection.add LearningObject.new(id: '#43:34')
-    #collection.add LearningObject.new(id: '#43:53')
-    #assert_equal({"@class" => "Collection", "created_at" => "2015-11-18 16:10:52", "last_modified" => "2015-11-18 16:10:52", "learning_objects" => ['#43:34', '#43:53'], "privacy" => "private", "name" => "Minha coleção de teste"}, collection.to_orientdb_hash)
-  end
-
-  private
-
-  def build_collection_hash(collection)
-    {
-        "@class" => "Collection",
-        "created_at" => collection.created_at,
-        "last_modified" => collection.last_modified,
-        "learning_objects" => [],
-        "privacy" => collection.privacy,
-        "name" => collection.name
-    }
-  end
-
-end
\ No newline at end of file
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/complaint_reason_test.rb b/test/models/complaint_reason_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..940c0c24c1ec5b1f1822a186f246db882a1e30ac
--- /dev/null
+++ b/test/models/complaint_reason_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class ComplaintReasonTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/complaint_test.rb b/test/models/complaint_test.rb
index 02a3bb18a66da317ecefcd4b2db5dd8cc9278388..ccd8f10a73688f4a7b14721e33455616cd7e3478 100644
--- a/test/models/complaint_test.rb
+++ b/test/models/complaint_test.rb
@@ -1,42 +1,7 @@
 require 'test_helper'
 
 class ComplaintTest < ActiveSupport::TestCase
-  should validate_presence_of :user
-  should validate_presence_of :object
-  should validate_presence_of :message
-
-  test 'serialize for orientdb' do
-    complaint = Complaint.new(
-        user: User.new(rid: '#14:15'),
-        object: LearningObject.new(id: '#16:43'),
-        message: Complaint.copyrights,
-        description: 'teste',
-        created_at: DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
-    )
-
-    expected_hash = {"created_at" => complaint.created_at.to_s, "description" => complaint.description, "message" => complaint.message.to_s}
-    assert_equal(expected_hash, complaint.to_orientdb_hash)
-  end
-
-  test 'should returns copyright message' do
-    assert_complaint_message Complaint.copyrights
-  end
-
-  test 'should returns ofensive content message' do
-    assert_complaint_message Complaint.ofensive_content
-  end
-
-  test 'should returns ofensive user message' do
-    assert_complaint_message Complaint.ofensive_user
-  end
-
-  test 'should returns fake user message' do
-    assert_complaint_message Complaint.fake_user
-  end
-
-  private
-
-  def assert_complaint_message(complaint_message)
-    assert_instance_of ComplaintMessage, complaint_message
-  end
+  # test "the truth" do
+  #   assert true
+  # end
 end
diff --git a/test/models/download_test.rb b/test/models/download_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..471c30070e50d48ce3b1e10e4f07bd277878dc37
--- /dev/null
+++ b/test/models/download_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class DownloadTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/follow_test.rb b/test/models/follow_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e314829c2feb503f9432c654d782da44df27ef39
--- /dev/null
+++ b/test/models/follow_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class FollowTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/institution_test.rb b/test/models/institution_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1bfb14f7160add281dda354154be23c3b52e09df
--- /dev/null
+++ b/test/models/institution_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class InstitutionTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/learning_object/attachment_test.rb b/test/models/learning_object/attachment_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..bb5827e84db32533af7aec00b87dffd4effa6b7f
--- /dev/null
+++ b/test/models/learning_object/attachment_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class LearningObject::AttachmentTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/learning_object_test.rb b/test/models/learning_object_test.rb
index 3a7c972ea22a714e93b038298a11c7c1db55d486..c37c3d8078e4090bc576e56276b62549e38caa4e 100644
--- a/test/models/learning_object_test.rb
+++ b/test/models/learning_object_test.rb
@@ -1,25 +1,7 @@
 require 'test_helper'
 
 class LearningObjectTest < ActiveSupport::TestCase
-  should validate_presence_of(:name)
-  should validate_presence_of(:created_at)
-  should validate_presence_of(:type)
-
-  test 'serialize for orientdb' do
-    learning_object = LearningObject.new(
-        id: '#15:23',
-        name: 'Teste',
-        description: 'teste de serialização',
-        thumbnail: '/asdasdasd.jpg',
-        id_dspace: '123213',
-        type: 'image',
-        attachment: LearningObject::Attachment.new('[{"id":2203,"name":"Pontociencia_Efe_chamas_na_horizontal.flv","type":"bitstream","link":"/rest/bitstreams/2203","bundleName":"ORIGINAL","description":null,"format":"Unknown","mimeType":"application/octet-stream","sizeBytes":4108209,"parentObject":null,"retrieveLink":"/bitstreams/2203/retrieve","checkSum":{"value":"43bd43bea944dcb8708d6ec708fb510d","checkSumAlgorithm":"MD5"},"sequenceId":-1,"policies":null,"expand":["parent","policies","all"]}]'),
-        last_modified: '2015-03-10 15:33:45',
-        metadata: []
-    )
-
-    expected_hash = {"@class" => "LearningObject", "score" => 0, "name" => "Teste", "description" => "teste de serialização", "thumbnail" => "/asdasdasd.jpg", "id_dspace" => "123213", "type" => "image", "last_modified" => "2015-03-10 15:33:45", "metadata" => [], "bitstreams" => "[{\"id\":2203,\"name\":\"Pontociencia_Efe_chamas_na_horizontal.flv\",\"type\":\"bitstream\",\"link\":\"/rest/bitstreams/2203\",\"bundleName\":\"ORIGINAL\",\"description\":null,\"format\":\"Unknown\",\"mimeType\":\"application/octet-stream\",\"sizeBytes\":4108209,\"parentObject\":null,\"retrieveLink\":\"/bitstreams/2203/retrieve\",\"checkSum\":{\"value\":\"43bd43bea944dcb8708d6ec708fb510d\",\"checkSumAlgorithm\":\"MD5\"},\"sequenceId\":-1,\"policies\":null,\"expand\":[\"parent\",\"policies\",\"all\"]}]"}
-    assert_equal(expected_hash, learning_object.to_orientdb_hash)
-  end
-
+  # test "the truth" do
+  #   assert true
+  # end
 end
diff --git a/test/models/like_test.rb b/test/models/like_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1eea9915b68a28a21919fb50394338431984af7b
--- /dev/null
+++ b/test/models/like_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class LikeTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/metadatum_test.rb b/test/models/metadatum_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1fd95dbec6d44f86691843c5ee686c0150588d93
--- /dev/null
+++ b/test/models/metadatum_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class MetadatumTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/rating_test.rb b/test/models/rating_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..febf8586ae3878c3996c4f3102f7fa75b84a12c7
--- /dev/null
+++ b/test/models/rating_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class RatingTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/review_rating_test.rb b/test/models/review_rating_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d4c6ce96df2d1d05430046b8a1923cce09344e62
--- /dev/null
+++ b/test/models/review_rating_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class ReviewRatingTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/review_test.rb b/test/models/review_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..11aa5204f0dd5b20006590706ee5d4179cae2b0a
--- /dev/null
+++ b/test/models/review_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class ReviewTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/share_test.rb b/test/models/share_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..199d2709b3512e02b7c1aba7feafdb18b19aa76d
--- /dev/null
+++ b/test/models/share_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class ShareTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/subject_test.rb b/test/models/subject_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d54e76f758ea59928ad5c1d8d014fddbaf3eb378
--- /dev/null
+++ b/test/models/subject_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class SubjectTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/topic_highlight_test.rb b/test/models/topic_highlight_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..713a19b743250ba8747c320795a5ec79896c7f22
--- /dev/null
+++ b/test/models/topic_highlight_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class HighlightTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/topic_relationship_test.rb b/test/models/topic_relationship_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..aafd0d273d62c8629edac0697975fa2c36f1c9b3
--- /dev/null
+++ b/test/models/topic_relationship_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class SubtopicTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/test/models/view_test.rb b/test/models/view_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..08f73486899f884148b0e421792c4b2975a39663
--- /dev/null
+++ b/test/models/view_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class ViewTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/vendor/assets/stylesheets/spinners.css b/vendor/assets/stylesheets/spinners.css
index 509fa18d959bdf783cc2b165339e88ca37dc483d..a308762e5dab94f01a5e9842024fc7deaf375d2f 100644
--- a/vendor/assets/stylesheets/spinners.css
+++ b/vendor/assets/stylesheets/spinners.css
@@ -21,3053 +21,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
-@-moz-keyframes spinner-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes spinner-loader {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@keyframes spinner-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(360deg);
-    -ms-transform: rotate(360deg);
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.spinner-loader:not(:required) {
-  -moz-animation: spinner-loader 1500ms infinite linear;
-  -webkit-animation: spinner-loader 1500ms infinite linear;
-  animation: spinner-loader 1500ms infinite linear;
-  -moz-border-radius: 0.5em;
-  -webkit-border-radius: 0.5em;
-  border-radius: 0.5em;
-  -moz-box-shadow: rgba(0, 0, 51, 0.3) 1.5em 0 0 0, rgba(0, 0, 51, 0.3) 1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) 0 1.5em 0 0, rgba(0, 0, 51, 0.3) -1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) -1.5em 0 0 0, rgba(0, 0, 51, 0.3) -1.1em -1.1em 0 0, rgba(0, 0, 51, 0.3) 0 -1.5em 0 0, rgba(0, 0, 51, 0.3) 1.1em -1.1em 0 0;
-  -webkit-box-shadow: rgba(0, 0, 51, 0.3) 1.5em 0 0 0, rgba(0, 0, 51, 0.3) 1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) 0 1.5em 0 0, rgba(0, 0, 51, 0.3) -1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) -1.5em 0 0 0, rgba(0, 0, 51, 0.3) -1.1em -1.1em 0 0, rgba(0, 0, 51, 0.3) 0 -1.5em 0 0, rgba(0, 0, 51, 0.3) 1.1em -1.1em 0 0;
-  box-shadow: rgba(0, 0, 51, 0.3) 1.5em 0 0 0, rgba(0, 0, 51, 0.3) 1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) 0 1.5em 0 0, rgba(0, 0, 51, 0.3) -1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) -1.5em 0 0 0, rgba(0, 0, 51, 0.3) -1.1em -1.1em 0 0, rgba(0, 0, 51, 0.3) 0 -1.5em 0 0, rgba(0, 0, 51, 0.3) 1.1em -1.1em 0 0;
-  display: inline-block;
-  font-size: 10px;
-  width: 1em;
-  height: 1em;
-  margin: 1.5em;
-  overflow: hidden;
-  text-indent: 100%;
-}
-
-@-moz-keyframes refreshing-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes refreshing-loader {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@keyframes refreshing-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(360deg);
-    -ms-transform: rotate(360deg);
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.refreshing-loader:not(:required) {
-  -moz-animation: refreshing-loader 1000ms infinite linear;
-  -webkit-animation: refreshing-loader 1000ms infinite linear;
-  animation: refreshing-loader 1000ms infinite linear;
-  -moz-border-radius: 2.4em;
-  -webkit-border-radius: 2.4em;
-  border-radius: 2.4em;
-  border: 0.4em solid #9ac;
-  border-left-color: transparent;
-  color: transparent;
-  display: inline-block;
-  font-size: 10px;
-  line-height: 1.2;
-  width: 3em;
-  height: 3em;
-  text-indent: 100%;
-}
-.refreshing-loader:not(:required):after {
-  display: block;
-  border: 0.5em solid transparent;
-  border-top-color: #9ac;
-  border-left-color: #9ac;
-  content: '';
-  width: 0;
-  height: 0;
-  overflow: hidden;
-  margin-left: -0.2em;
-  margin-top: 1em;
-}
-
-@-moz-keyframes throbber-loader {
-  0% {
-    background: #dde2e7;
-  }
-  10% {
-    background: #6b9dc8;
-  }
-  40% {
-    background: #dde2e7;
-  }
-}
-@-webkit-keyframes throbber-loader {
-  0% {
-    background: #dde2e7;
-  }
-  10% {
-    background: #6b9dc8;
-  }
-  40% {
-    background: #dde2e7;
-  }
-}
-@keyframes throbber-loader {
-  0% {
-    background: #dde2e7;
-  }
-  10% {
-    background: #6b9dc8;
-  }
-  40% {
-    background: #dde2e7;
-  }
-}
-/* :not(:required) hides these rules from IE9 and below */
-.throbber-loader:not(:required) {
-  -moz-animation: throbber-loader 2000ms 300ms infinite ease-out;
-  -webkit-animation: throbber-loader 2000ms 300ms infinite ease-out;
-  animation: throbber-loader 2000ms 300ms infinite ease-out;
-  background: #dde2e7;
-  display: inline-block;
-  position: relative;
-  text-indent: -9999px;
-  width: 0.9em;
-  height: 1.5em;
-  margin: 0 1.6em;
-}
-.throbber-loader:not(:required):before, .throbber-loader:not(:required):after {
-  background: #dde2e7;
-  content: '\x200B';
-  display: inline-block;
-  width: 0.9em;
-  height: 1.5em;
-  position: absolute;
-  top: 0;
-}
-.throbber-loader:not(:required):before {
-  -moz-animation: throbber-loader 2000ms 150ms infinite ease-out;
-  -webkit-animation: throbber-loader 2000ms 150ms infinite ease-out;
-  animation: throbber-loader 2000ms 150ms infinite ease-out;
-  left: -1.6em;
-}
-.throbber-loader:not(:required):after {
-  -moz-animation: throbber-loader 2000ms 450ms infinite ease-out;
-  -webkit-animation: throbber-loader 2000ms 450ms infinite ease-out;
-  animation: throbber-loader 2000ms 450ms infinite ease-out;
-  right: -1.6em;
-}
-
-@-moz-keyframes heartbeat-loader {
-  0% {
-    -moz-transform: rotate(45deg) scale(1);
-    transform: rotate(45deg) scale(1);
-  }
-  14% {
-    -moz-transform: rotate(45deg) scale(1.3);
-    transform: rotate(45deg) scale(1.3);
-  }
-  28% {
-    -moz-transform: rotate(45deg) scale(1);
-    transform: rotate(45deg) scale(1);
-  }
-  42% {
-    -moz-transform: rotate(45deg) scale(1.3);
-    transform: rotate(45deg) scale(1.3);
-  }
-  70% {
-    -moz-transform: rotate(45deg) scale(1);
-    transform: rotate(45deg) scale(1);
-  }
-}
-@-webkit-keyframes heartbeat-loader {
-  0% {
-    -webkit-transform: rotate(45deg) scale(1);
-    transform: rotate(45deg) scale(1);
-  }
-  14% {
-    -webkit-transform: rotate(45deg) scale(1.3);
-    transform: rotate(45deg) scale(1.3);
-  }
-  28% {
-    -webkit-transform: rotate(45deg) scale(1);
-    transform: rotate(45deg) scale(1);
-  }
-  42% {
-    -webkit-transform: rotate(45deg) scale(1.3);
-    transform: rotate(45deg) scale(1.3);
-  }
-  70% {
-    -webkit-transform: rotate(45deg) scale(1);
-    transform: rotate(45deg) scale(1);
-  }
-}
-@keyframes heartbeat-loader {
-  0% {
-    -moz-transform: rotate(45deg) scale(1);
-    -ms-transform: rotate(45deg) scale(1);
-    -webkit-transform: rotate(45deg) scale(1);
-    transform: rotate(45deg) scale(1);
-  }
-  14% {
-    -moz-transform: rotate(45deg) scale(1.3);
-    -ms-transform: rotate(45deg) scale(1.3);
-    -webkit-transform: rotate(45deg) scale(1.3);
-    transform: rotate(45deg) scale(1.3);
-  }
-  28% {
-    -moz-transform: rotate(45deg) scale(1);
-    -ms-transform: rotate(45deg) scale(1);
-    -webkit-transform: rotate(45deg) scale(1);
-    transform: rotate(45deg) scale(1);
-  }
-  42% {
-    -moz-transform: rotate(45deg) scale(1.3);
-    -ms-transform: rotate(45deg) scale(1.3);
-    -webkit-transform: rotate(45deg) scale(1.3);
-    transform: rotate(45deg) scale(1.3);
-  }
-  70% {
-    -moz-transform: rotate(45deg) scale(1);
-    -ms-transform: rotate(45deg) scale(1);
-    -webkit-transform: rotate(45deg) scale(1);
-    transform: rotate(45deg) scale(1);
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.heartbeat-loader:not(:required) {
-  -moz-animation: heartbeat-loader 1300ms ease 0s infinite normal;
-  -webkit-animation: heartbeat-loader 1300ms ease 0s infinite normal;
-  animation: heartbeat-loader 1300ms ease 0s infinite normal;
-  display: inline-block;
-  position: relative;
-  overflow: hidden;
-  text-indent: -9999px;
-  width: 36px;
-  height: 36px;
-  -moz-transform: rotate(45deg) scale(1);
-  -ms-transform: rotate(45deg) scale(1);
-  -webkit-transform: rotate(45deg) scale(1);
-  transform: rotate(45deg) scale(1);
-  -moz-transform-origin: 50% 50%;
-  -ms-transform-origin: 50% 50%;
-  -webkit-transform-origin: 50% 50%;
-  transform-origin: 50% 50%;
-}
-.heartbeat-loader:not(:required):after, .heartbeat-loader:not(:required):before {
-  position: absolute;
-  content: "";
-  background: #e87;
-}
-.heartbeat-loader:not(:required):before {
-  -moz-border-radius-topleft: 12px;
-  -webkit-border-top-left-radius: 12px;
-  border-top-left-radius: 12px;
-  -moz-border-radius-bottomleft: 12px;
-  -webkit-border-bottom-left-radius: 12px;
-  border-bottom-left-radius: 12px;
-  top: 12px;
-  left: 0;
-  width: 36px;
-  height: 24px;
-}
-.heartbeat-loader:not(:required):after {
-  -moz-border-radius-topleft: 12px;
-  -webkit-border-top-left-radius: 12px;
-  border-top-left-radius: 12px;
-  -moz-border-radius-topright: 12px;
-  -webkit-border-top-right-radius: 12px;
-  border-top-right-radius: 12px;
-  top: 0;
-  left: 12px;
-  width: 24px;
-  height: 12px;
-}
-
-@-moz-keyframes gauge-loader {
-  0% {
-    -moz-transform: rotate(-50deg);
-    transform: rotate(-50deg);
-  }
-  10% {
-    -moz-transform: rotate(20deg);
-    transform: rotate(20deg);
-  }
-  20% {
-    -moz-transform: rotate(60deg);
-    transform: rotate(60deg);
-  }
-  24% {
-    -moz-transform: rotate(60deg);
-    transform: rotate(60deg);
-  }
-  40% {
-    -moz-transform: rotate(-20deg);
-    transform: rotate(-20deg);
-  }
-  54% {
-    -moz-transform: rotate(70deg);
-    transform: rotate(70deg);
-  }
-  56% {
-    -moz-transform: rotate(78deg);
-    transform: rotate(78deg);
-  }
-  58% {
-    -moz-transform: rotate(73deg);
-    transform: rotate(73deg);
-  }
-  60% {
-    -moz-transform: rotate(75deg);
-    transform: rotate(75deg);
-  }
-  62% {
-    -moz-transform: rotate(70deg);
-    transform: rotate(70deg);
-  }
-  70% {
-    -moz-transform: rotate(-20deg);
-    transform: rotate(-20deg);
-  }
-  80% {
-    -moz-transform: rotate(20deg);
-    transform: rotate(20deg);
-  }
-  83% {
-    -moz-transform: rotate(25deg);
-    transform: rotate(25deg);
-  }
-  86% {
-    -moz-transform: rotate(20deg);
-    transform: rotate(20deg);
-  }
-  89% {
-    -moz-transform: rotate(25deg);
-    transform: rotate(25deg);
-  }
-  100% {
-    -moz-transform: rotate(-50deg);
-    transform: rotate(-50deg);
-  }
-}
-@-webkit-keyframes gauge-loader {
-  0% {
-    -webkit-transform: rotate(-50deg);
-    transform: rotate(-50deg);
-  }
-  10% {
-    -webkit-transform: rotate(20deg);
-    transform: rotate(20deg);
-  }
-  20% {
-    -webkit-transform: rotate(60deg);
-    transform: rotate(60deg);
-  }
-  24% {
-    -webkit-transform: rotate(60deg);
-    transform: rotate(60deg);
-  }
-  40% {
-    -webkit-transform: rotate(-20deg);
-    transform: rotate(-20deg);
-  }
-  54% {
-    -webkit-transform: rotate(70deg);
-    transform: rotate(70deg);
-  }
-  56% {
-    -webkit-transform: rotate(78deg);
-    transform: rotate(78deg);
-  }
-  58% {
-    -webkit-transform: rotate(73deg);
-    transform: rotate(73deg);
-  }
-  60% {
-    -webkit-transform: rotate(75deg);
-    transform: rotate(75deg);
-  }
-  62% {
-    -webkit-transform: rotate(70deg);
-    transform: rotate(70deg);
-  }
-  70% {
-    -webkit-transform: rotate(-20deg);
-    transform: rotate(-20deg);
-  }
-  80% {
-    -webkit-transform: rotate(20deg);
-    transform: rotate(20deg);
-  }
-  83% {
-    -webkit-transform: rotate(25deg);
-    transform: rotate(25deg);
-  }
-  86% {
-    -webkit-transform: rotate(20deg);
-    transform: rotate(20deg);
-  }
-  89% {
-    -webkit-transform: rotate(25deg);
-    transform: rotate(25deg);
-  }
-  100% {
-    -webkit-transform: rotate(-50deg);
-    transform: rotate(-50deg);
-  }
-}
-@keyframes gauge-loader {
-  0% {
-    -moz-transform: rotate(-50deg);
-    -ms-transform: rotate(-50deg);
-    -webkit-transform: rotate(-50deg);
-    transform: rotate(-50deg);
-  }
-  10% {
-    -moz-transform: rotate(20deg);
-    -ms-transform: rotate(20deg);
-    -webkit-transform: rotate(20deg);
-    transform: rotate(20deg);
-  }
-  20% {
-    -moz-transform: rotate(60deg);
-    -ms-transform: rotate(60deg);
-    -webkit-transform: rotate(60deg);
-    transform: rotate(60deg);
-  }
-  24% {
-    -moz-transform: rotate(60deg);
-    -ms-transform: rotate(60deg);
-    -webkit-transform: rotate(60deg);
-    transform: rotate(60deg);
-  }
-  40% {
-    -moz-transform: rotate(-20deg);
-    -ms-transform: rotate(-20deg);
-    -webkit-transform: rotate(-20deg);
-    transform: rotate(-20deg);
-  }
-  54% {
-    -moz-transform: rotate(70deg);
-    -ms-transform: rotate(70deg);
-    -webkit-transform: rotate(70deg);
-    transform: rotate(70deg);
-  }
-  56% {
-    -moz-transform: rotate(78deg);
-    -ms-transform: rotate(78deg);
-    -webkit-transform: rotate(78deg);
-    transform: rotate(78deg);
-  }
-  58% {
-    -moz-transform: rotate(73deg);
-    -ms-transform: rotate(73deg);
-    -webkit-transform: rotate(73deg);
-    transform: rotate(73deg);
-  }
-  60% {
-    -moz-transform: rotate(75deg);
-    -ms-transform: rotate(75deg);
-    -webkit-transform: rotate(75deg);
-    transform: rotate(75deg);
-  }
-  62% {
-    -moz-transform: rotate(70deg);
-    -ms-transform: rotate(70deg);
-    -webkit-transform: rotate(70deg);
-    transform: rotate(70deg);
-  }
-  70% {
-    -moz-transform: rotate(-20deg);
-    -ms-transform: rotate(-20deg);
-    -webkit-transform: rotate(-20deg);
-    transform: rotate(-20deg);
-  }
-  80% {
-    -moz-transform: rotate(20deg);
-    -ms-transform: rotate(20deg);
-    -webkit-transform: rotate(20deg);
-    transform: rotate(20deg);
-  }
-  83% {
-    -moz-transform: rotate(25deg);
-    -ms-transform: rotate(25deg);
-    -webkit-transform: rotate(25deg);
-    transform: rotate(25deg);
-  }
-  86% {
-    -moz-transform: rotate(20deg);
-    -ms-transform: rotate(20deg);
-    -webkit-transform: rotate(20deg);
-    transform: rotate(20deg);
-  }
-  89% {
-    -moz-transform: rotate(25deg);
-    -ms-transform: rotate(25deg);
-    -webkit-transform: rotate(25deg);
-    transform: rotate(25deg);
-  }
-  100% {
-    -moz-transform: rotate(-50deg);
-    -ms-transform: rotate(-50deg);
-    -webkit-transform: rotate(-50deg);
-    transform: rotate(-50deg);
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.gauge-loader:not(:required) {
-  background: #6ca;
-  -moz-border-radius-topleft: 32px;
-  -webkit-border-top-left-radius: 32px;
-  border-top-left-radius: 32px;
-  -moz-border-radius-topright: 32px;
-  -webkit-border-top-right-radius: 32px;
-  border-top-right-radius: 32px;
-  display: inline-block;
-  width: 64px;
-  height: 32px;
-  overflow: hidden;
-  position: relative;
-  text-indent: -9999px;
-}
-.gauge-loader:not(:required)::before {
-  -moz-animation: gauge-loader 4000ms infinite ease;
-  -webkit-animation: gauge-loader 4000ms infinite ease;
-  animation: gauge-loader 4000ms infinite ease;
-  background: white;
-  -moz-border-radius: 2px;
-  -webkit-border-radius: 2px;
-  border-radius: 2px;
-  content: '';
-  position: absolute;
-  left: 30px;
-  top: 5.33333px;
-  width: 4px;
-  height: 26.66667px;
-  -moz-transform-origin: 50% 100%;
-  -ms-transform-origin: 50% 100%;
-  -webkit-transform-origin: 50% 100%;
-  transform-origin: 50% 100%;
-}
-.gauge-loader:not(:required)::after {
-  content: '';
-  background: white;
-  -moz-border-radius: 8px;
-  -webkit-border-radius: 8px;
-  border-radius: 8px;
-  position: absolute;
-  left: 25.6px;
-  top: 25.6px;
-  width: 12.8px;
-  height: 12.8px;
-}
-
-@-moz-keyframes timer-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes timer-loader {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@keyframes timer-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(360deg);
-    -ms-transform: rotate(360deg);
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.timer-loader:not(:required) {
-  border: 6px solid #c8d;
-  -moz-border-radius: 24px;
-  -webkit-border-radius: 24px;
-  border-radius: 24px;
-  -moz-box-sizing: border-box;
-  -webkit-box-sizing: border-box;
-  box-sizing: border-box;
-  display: inline-block;
-  overflow: hidden;
-  position: relative;
-  text-indent: -9999px;
-  width: 48px;
-  height: 48px;
-}
-.timer-loader:not(:required)::before {
-  -moz-animation: timer-loader 1250ms infinite linear;
-  -webkit-animation: timer-loader 1250ms infinite linear;
-  animation: timer-loader 1250ms infinite linear;
-  -moz-transform-origin: 3px 3px;
-  -ms-transform-origin: 3px 3px;
-  -webkit-transform-origin: 3px 3px;
-  transform-origin: 3px 3px;
-  background: #c8d;
-  -moz-border-radius: 3px;
-  -webkit-border-radius: 3px;
-  border-radius: 3px;
-  content: '';
-  display: block;
-  position: absolute;
-  width: 6px;
-  height: 19.2px;
-  left: 15px;
-  top: 15px;
-}
-.timer-loader:not(:required)::after {
-  -moz-animation: timer-loader 15000ms infinite linear;
-  -webkit-animation: timer-loader 15000ms infinite linear;
-  animation: timer-loader 15000ms infinite linear;
-  -moz-transform-origin: 3px 3px;
-  -ms-transform-origin: 3px 3px;
-  -webkit-transform-origin: 3px 3px;
-  transform-origin: 3px 3px;
-  background: #c8d;
-  -moz-border-radius: 3px;
-  -webkit-border-radius: 3px;
-  border-radius: 3px;
-  content: '';
-  display: block;
-  position: absolute;
-  width: 6px;
-  height: 16px;
-  left: 15px;
-  top: 15px;
-}
-
-@-moz-keyframes three-quarters-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes three-quarters-loader {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@keyframes three-quarters-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(360deg);
-    -ms-transform: rotate(360deg);
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.three-quarters-loader:not(:required) {
-  -moz-animation: three-quarters-loader 1250ms infinite linear;
-  -webkit-animation: three-quarters-loader 1250ms infinite linear;
-  animation: three-quarters-loader 1250ms infinite linear;
-  border: 8px solid #38e;
-  border-right-color: transparent;
-  border-radius: 16px;
-  box-sizing: border-box;
-  display: inline-block;
-  position: relative;
-  overflow: hidden;
-  text-indent: -9999px;
-  width: 32px;
-  height: 32px;
-}
-
-@-moz-keyframes wobblebar-loader {
-  0% {
-    left: 4px;
-  }
-  3% {
-    left: 104px;
-  }
-  6% {
-    left: 4px;
-  }
-  9% {
-    left: 104px;
-  }
-  12% {
-    left: 4px;
-  }
-  15% {
-    left: 104px;
-  }
-  18% {
-    left: 32px;
-  }
-  27% {
-    left: 32px;
-  }
-  30% {
-    left: 104px;
-  }
-  33% {
-    left: 4px;
-  }
-  36% {
-    left: 104px;
-  }
-  39% {
-    left: 4px;
-  }
-  42% {
-    left: 104px;
-  }
-  45% {
-    left: 4px;
-  }
-  48% {
-    left: 104px;
-  }
-  51% {
-    left: 52px;
-  }
-  63% {
-    left: 52px;
-  }
-  66% {
-    left: 4px;
-  }
-  69% {
-    left: 104px;
-  }
-  72% {
-    left: 4px;
-  }
-  75% {
-    left: 104px;
-  }
-  78% {
-    left: 4px;
-  }
-  81% {
-    left: 104px;
-  }
-  84% {
-    left: 72px;
-  }
-  94% {
-    left: 72px;
-  }
-  97% {
-    left: 104px;
-  }
-}
-@-webkit-keyframes wobblebar-loader {
-  0% {
-    left: 4px;
-  }
-  3% {
-    left: 104px;
-  }
-  6% {
-    left: 4px;
-  }
-  9% {
-    left: 104px;
-  }
-  12% {
-    left: 4px;
-  }
-  15% {
-    left: 104px;
-  }
-  18% {
-    left: 32px;
-  }
-  27% {
-    left: 32px;
-  }
-  30% {
-    left: 104px;
-  }
-  33% {
-    left: 4px;
-  }
-  36% {
-    left: 104px;
-  }
-  39% {
-    left: 4px;
-  }
-  42% {
-    left: 104px;
-  }
-  45% {
-    left: 4px;
-  }
-  48% {
-    left: 104px;
-  }
-  51% {
-    left: 52px;
-  }
-  63% {
-    left: 52px;
-  }
-  66% {
-    left: 4px;
-  }
-  69% {
-    left: 104px;
-  }
-  72% {
-    left: 4px;
-  }
-  75% {
-    left: 104px;
-  }
-  78% {
-    left: 4px;
-  }
-  81% {
-    left: 104px;
-  }
-  84% {
-    left: 72px;
-  }
-  94% {
-    left: 72px;
-  }
-  97% {
-    left: 104px;
-  }
-}
-@keyframes wobblebar-loader {
-  0% {
-    left: 4px;
-  }
-  3% {
-    left: 104px;
-  }
-  6% {
-    left: 4px;
-  }
-  9% {
-    left: 104px;
-  }
-  12% {
-    left: 4px;
-  }
-  15% {
-    left: 104px;
-  }
-  18% {
-    left: 32px;
-  }
-  27% {
-    left: 32px;
-  }
-  30% {
-    left: 104px;
-  }
-  33% {
-    left: 4px;
-  }
-  36% {
-    left: 104px;
-  }
-  39% {
-    left: 4px;
-  }
-  42% {
-    left: 104px;
-  }
-  45% {
-    left: 4px;
-  }
-  48% {
-    left: 104px;
-  }
-  51% {
-    left: 52px;
-  }
-  63% {
-    left: 52px;
-  }
-  66% {
-    left: 4px;
-  }
-  69% {
-    left: 104px;
-  }
-  72% {
-    left: 4px;
-  }
-  75% {
-    left: 104px;
-  }
-  78% {
-    left: 4px;
-  }
-  81% {
-    left: 104px;
-  }
-  84% {
-    left: 72px;
-  }
-  94% {
-    left: 72px;
-  }
-  97% {
-    left: 104px;
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.wobblebar-loader:not(:required) {
-  background: #a9d;
-  -moz-border-radius: 10.66667px;
-  -webkit-border-radius: 10.66667px;
-  border-radius: 10.66667px;
-  display: inline-block;
-  overflow: hidden;
-  text-indent: -9999px;
-  width: 128px;
-  height: 21.33333px;
-  position: relative;
-}
-.wobblebar-loader:not(:required)::after {
-  -moz-animation: wobblebar-loader 15000ms infinite ease;
-  -webkit-animation: wobblebar-loader 15000ms infinite ease;
-  animation: wobblebar-loader 15000ms infinite ease;
-  background: white;
-  display: block;
-  -moz-border-radius: 7.11111px;
-  -webkit-border-radius: 7.11111px;
-  border-radius: 7.11111px;
-  content: '';
-  position: absolute;
-  top: 3.55556px;
-  left: 4px;
-  width: 21.33333px;
-  height: 14.22222px;
-}
-
-@-moz-keyframes atebits-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  3% {
-    -moz-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  10% {
-    -moz-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  13% {
-    -moz-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  20% {
-    -moz-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  23% {
-    -moz-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  30% {
-    -moz-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  33% {
-    -moz-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  40% {
-    -moz-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  43% {
-    -moz-transform: rotate(270deg);
-    transform: rotate(270deg);
-  }
-  50% {
-    -moz-transform: rotate(270deg);
-    transform: rotate(270deg);
-  }
-  53% {
-    -moz-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  60% {
-    -moz-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  63% {
-    -moz-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  70% {
-    -moz-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  73% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  80% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  83% {
-    -moz-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-  }
-  90% {
-    -moz-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-  }
-  93% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-}
-@-webkit-keyframes atebits-loader {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  3% {
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  10% {
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  13% {
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  20% {
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  23% {
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  30% {
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  33% {
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  40% {
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  43% {
-    -webkit-transform: rotate(270deg);
-    transform: rotate(270deg);
-  }
-  50% {
-    -webkit-transform: rotate(270deg);
-    transform: rotate(270deg);
-  }
-  53% {
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  60% {
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  63% {
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  70% {
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  73% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  80% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  83% {
-    -webkit-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-  }
-  90% {
-    -webkit-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-  }
-  93% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-}
-@keyframes atebits-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  3% {
-    -moz-transform: rotate(90deg);
-    -ms-transform: rotate(90deg);
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  10% {
-    -moz-transform: rotate(90deg);
-    -ms-transform: rotate(90deg);
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  13% {
-    -moz-transform: rotate(180deg);
-    -ms-transform: rotate(180deg);
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  20% {
-    -moz-transform: rotate(180deg);
-    -ms-transform: rotate(180deg);
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  23% {
-    -moz-transform: rotate(90deg);
-    -ms-transform: rotate(90deg);
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  30% {
-    -moz-transform: rotate(90deg);
-    -ms-transform: rotate(90deg);
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  33% {
-    -moz-transform: rotate(180deg);
-    -ms-transform: rotate(180deg);
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  40% {
-    -moz-transform: rotate(180deg);
-    -ms-transform: rotate(180deg);
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  43% {
-    -moz-transform: rotate(270deg);
-    -ms-transform: rotate(270deg);
-    -webkit-transform: rotate(270deg);
-    transform: rotate(270deg);
-  }
-  50% {
-    -moz-transform: rotate(270deg);
-    -ms-transform: rotate(270deg);
-    -webkit-transform: rotate(270deg);
-    transform: rotate(270deg);
-  }
-  53% {
-    -moz-transform: rotate(180deg);
-    -ms-transform: rotate(180deg);
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  60% {
-    -moz-transform: rotate(180deg);
-    -ms-transform: rotate(180deg);
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-  }
-  63% {
-    -moz-transform: rotate(90deg);
-    -ms-transform: rotate(90deg);
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  70% {
-    -moz-transform: rotate(90deg);
-    -ms-transform: rotate(90deg);
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  73% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  80% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  83% {
-    -moz-transform: rotate(-90deg);
-    -ms-transform: rotate(-90deg);
-    -webkit-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-  }
-  90% {
-    -moz-transform: rotate(-90deg);
-    -ms-transform: rotate(-90deg);
-    -webkit-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-  }
-  93% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.atebits-loader:not(:required) {
-  background: rgba(0, 0, 0, 0.5);
-  display: inline-block;
-  width: 9px;
-  height: 9px;
-  overflow: hidden;
-  position: relative;
-  text-indent: -9999px;
-  -moz-box-shadow: rgba(0, 0, 0, 0.5) -12px -12px 0 0, rgba(0, 0, 0, 0.5) 12px -12px 0 0, rgba(0, 0, 0, 0.5) -12px 0 0 0, rgba(0, 0, 0, 0.5) 12px 0 0 0, rgba(0, 0, 0, 0.5) -12px 12px 0 0, rgba(0, 0, 0, 0.5) 0 12px 0 0, rgba(0, 0, 0, 0.5) 12px 12px 0 0;
-  -webkit-box-shadow: rgba(0, 0, 0, 0.5) -12px -12px 0 0, rgba(0, 0, 0, 0.5) 12px -12px 0 0, rgba(0, 0, 0, 0.5) -12px 0 0 0, rgba(0, 0, 0, 0.5) 12px 0 0 0, rgba(0, 0, 0, 0.5) -12px 12px 0 0, rgba(0, 0, 0, 0.5) 0 12px 0 0, rgba(0, 0, 0, 0.5) 12px 12px 0 0;
-  box-shadow: rgba(0, 0, 0, 0.5) -12px -12px 0 0, rgba(0, 0, 0, 0.5) 12px -12px 0 0, rgba(0, 0, 0, 0.5) -12px 0 0 0, rgba(0, 0, 0, 0.5) 12px 0 0 0, rgba(0, 0, 0, 0.5) -12px 12px 0 0, rgba(0, 0, 0, 0.5) 0 12px 0 0, rgba(0, 0, 0, 0.5) 12px 12px 0 0;
-  -moz-animation: atebits-loader 8s infinite ease-in-out;
-  -webkit-animation: atebits-loader 8s infinite ease-in-out;
-  animation: atebits-loader 8s infinite ease-in-out;
-  -moz-transform-origin: 50% 50%;
-  -ms-transform-origin: 50% 50%;
-  -webkit-transform-origin: 50% 50%;
-  transform-origin: 50% 50%;
-}
-
-@-moz-keyframes whirly-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes whirly-loader {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@keyframes whirly-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(360deg);
-    -ms-transform: rotate(360deg);
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.whirly-loader:not(:required) {
-  overflow: hidden;
-  position: relative;
-  text-indent: -9999px;
-  display: inline-block;
-  width: 8px;
-  height: 8px;
-  background: transparent;
-  -moz-border-radius: 100%;
-  -webkit-border-radius: 100%;
-  border-radius: 100%;
-  -moz-box-shadow: #e66 0px 26px 0 6px, #e66 0.90971px 26.05079px 0 5.93333px, #e66 1.82297px 26.06967px 0 5.86667px, #e66 2.73865px 26.05647px 0 5.8px, #e66 3.65561px 26.01104px 0 5.73333px, #e66 4.57274px 25.93327px 0 5.66667px, #e66 5.48887px 25.8231px 0 5.6px, #e66 6.40287px 25.68049px 0 5.53333px, #e66 7.31358px 25.50548px 0 5.46667px, #e66 8.21985px 25.2981px 0 5.4px, #e66 9.12054px 25.05847px 0 5.33333px, #e66 10.01448px 24.78672px 0 5.26667px, #e66 10.90054px 24.48302px 0 5.2px, #e66 11.77757px 24.1476px 0 5.13333px, #e66 12.64443px 23.78072px 0 5.06667px, #e66 13.5px 23.38269px 0 5px, #e66 14.34315px 22.95384px 0 4.93333px, #e66 15.17277px 22.49455px 0 4.86667px, #e66 15.98776px 22.00526px 0 4.8px, #e66 16.78704px 21.48643px 0 4.73333px, #e66 17.56953px 20.93855px 0 4.66667px, #e66 18.33418px 20.36217px 0 4.6px, #e66 19.07995px 19.75787px 0 4.53333px, #e66 19.80582px 19.12626px 0 4.46667px, #e66 20.5108px 18.468px 0 4.4px, #e66 21.1939px 17.78379px 0 4.33333px, #e66 21.85416px 17.07434px 0 4.26667px, #e66 22.49067px 16.34043px 0 4.2px, #e66 23.10251px 15.58284px 0 4.13333px, #e66 23.68881px 14.80241px 0 4.06667px, #e66 24.24871px 14.0px 0 4px, #e66 24.7814px 13.1765px 0 3.93333px, #e66 25.28607px 12.33284px 0 3.86667px, #e66 25.76198px 11.46997px 0 3.8px, #e66 26.2084px 10.58888px 0 3.73333px, #e66 26.62462px 9.69057px 0 3.66667px, #e66 27.01001px 8.77608px 0 3.6px, #e66 27.36392px 7.84648px 0 3.53333px, #e66 27.68577px 6.90284px 0 3.46667px, #e66 27.97502px 5.94627px 0 3.4px, #e66 28.23116px 4.97791px 0 3.33333px, #e66 28.4537px 3.99891px 0 3.26667px, #e66 28.64223px 3.01042px 0 3.2px, #e66 28.79635px 2.01364px 0 3.13333px, #e66 28.91571px 1.00976px 0 3.06667px, #e66 29px 0.0px 0 3px, #e66 29.04896px -1.01441px 0 2.93333px, #e66 29.06237px -2.03224px 0 2.86667px, #e66 29.04004px -3.05223px 0 2.8px, #e66 28.98185px -4.07313px 0 2.73333px, #e66 28.88769px -5.09368px 0 2.66667px, #e66 28.75754px -6.1126px 0 2.6px, #e66 28.59138px -7.12863px 0 2.53333px, #e66 28.38926px -8.14049px 0 2.46667px, #e66 28.15127px -9.1469px 0 2.4px, #e66 27.87755px -10.1466px 0 2.33333px, #e66 27.56827px -11.1383px 0 2.26667px, #e66 27.22365px -12.12075px 0 2.2px, #e66 26.84398px -13.09268px 0 2.13333px, #e66 26.42956px -14.05285px 0 2.06667px, #e66 25.98076px -15.0px 0 2px, #e66 25.49798px -15.93291px 0 1.93333px, #e66 24.98167px -16.85035px 0 1.86667px, #e66 24.43231px -17.75111px 0 1.8px, #e66 23.85046px -18.63402px 0 1.73333px, #e66 23.23668px -19.49789px 0 1.66667px, #e66 22.5916px -20.34157px 0 1.6px, #e66 21.91589px -21.16393px 0 1.53333px, #e66 21.21024px -21.96384px 0 1.46667px, #e66 20.4754px -22.74023px 0 1.4px, #e66 19.71215px -23.49203px 0 1.33333px, #e66 18.92133px -24.2182px 0 1.26667px, #e66 18.10379px -24.91772px 0 1.2px, #e66 17.26042px -25.58963px 0 1.13333px, #e66 16.39217px -26.23295px 0 1.06667px, #e66 15.5px -26.84679px 0 1px, #e66 14.58492px -27.43024px 0 0.93333px, #e66 13.64796px -27.98245px 0 0.86667px, #e66 12.69018px -28.50262px 0 0.8px, #e66 11.7127px -28.98995px 0 0.73333px, #e66 10.71663px -29.4437px 0 0.66667px, #e66 9.70313px -29.86317px 0 0.6px, #e66 8.67339px -30.2477px 0 0.53333px, #e66 7.6286px -30.59666px 0 0.46667px, #e66 6.57001px -30.90946px 0 0.4px, #e66 5.49886px -31.18558px 0 0.33333px, #e66 4.41643px -31.42451px 0 0.26667px, #e66 3.32401px -31.6258px 0 0.2px, #e66 2.22291px -31.78904px 0 0.13333px, #e66 1.11446px -31.91388px 0 0.06667px, #e66 0.0px -32px 0 0px, #e66 -1.11911px -32.04713px 0 -0.06667px, #e66 -2.24151px -32.05506px 0 -0.13333px, #e66 -3.36582px -32.02361px 0 -0.2px, #e66 -4.49065px -31.95265px 0 -0.26667px, #e66 -5.61462px -31.84212px 0 -0.33333px, #e66 -6.73634px -31.69198px 0 -0.4px, #e66 -7.8544px -31.50227px 0 -0.46667px, #e66 -8.9674px -31.27305px 0 -0.53333px, #e66 -10.07395px -31.00444px 0 -0.6px, #e66 -11.17266px -30.69663px 0 -0.66667px, #e66 -12.26212px -30.34982px 0 -0.73333px, #e66 -13.34096px -29.96429px 0 -0.8px, #e66 -14.4078px -29.54036px 0 -0.86667px, #e66 -15.46126px -29.07841px 0 -0.93333px, #e66 -16.5px -28.57884px 0 -1px, #e66 -17.52266px -28.04212px 0 -1.06667px, #e66 -18.52792px -27.46878px 0 -1.13333px, #e66 -19.51447px -26.85936px 0 -1.2px, #e66 -20.48101px -26.21449px 0 -1.26667px, #e66 -21.42625px -25.53481px 0 -1.33333px, #e66 -22.34896px -24.82104px 0 -1.4px, #e66 -23.2479px -24.07391px 0 -1.46667px, #e66 -24.12186px -23.29421px 0 -1.53333px, #e66 -24.96967px -22.48279px 0 -1.6px, #e66 -25.79016px -21.64052px 0 -1.66667px, #e66 -26.58223px -20.76831px 0 -1.73333px, #e66 -27.34477px -19.86714px 0 -1.8px, #e66 -28.07674px -18.938px 0 -1.86667px, #e66 -28.7771px -17.98193px 0 -1.93333px, #e66 -29.44486px -17.0px 0 -2px, #e66 -30.07908px -15.99333px 0 -2.06667px, #e66 -30.67884px -14.96307px 0 -2.13333px, #e66 -31.24325px -13.91039px 0 -2.2px, #e66 -31.7715px -12.83652px 0 -2.26667px, #e66 -32.26278px -11.74269px 0 -2.33333px, #e66 -32.71634px -10.63018px 0 -2.4px, #e66 -33.13149px -9.5003px 0 -2.46667px, #e66 -33.50755px -8.35437px 0 -2.53333px, #e66 -33.84391px -7.19374px 0 -2.6px, #e66 -34.14px -6.0198px 0 -2.66667px, #e66 -34.39531px -4.83395px 0 -2.73333px, #e66 -34.60936px -3.63759px 0 -2.8px, #e66 -34.78173px -2.43218px 0 -2.86667px, #e66 -34.91205px -1.21916px 0 -2.93333px, #e66 -35px 0.0px 0 -3px, #e66 -35.04531px 1.22381px 0 -3.06667px, #e66 -35.04775px 2.45078px 0 -3.13333px, #e66 -35.00717px 3.6794px 0 -3.2px, #e66 -34.92345px 4.90817px 0 -3.26667px, #e66 -34.79654px 6.13557px 0 -3.33333px, #e66 -34.62643px 7.36007px 0 -3.4px, #e66 -34.41316px 8.58016px 0 -3.46667px, #e66 -34.15683px 9.79431px 0 -3.53333px, #e66 -33.85761px 11.001px 0 -3.6px, #e66 -33.5157px 12.19872px 0 -3.66667px, #e66 -33.13137px 13.38594px 0 -3.73333px, #e66 -32.70493px 14.56117px 0 -3.8px, #e66 -32.23675px 15.72291px 0 -3.86667px, #e66 -31.72725px 16.86968px 0 -3.93333px, #e66 -31.17691px 18px 0 -4px, #e66 -30.58627px 19.11242px 0 -4.06667px, #e66 -29.95589px 20.2055px 0 -4.13333px, #e66 -29.28642px 21.27783px 0 -4.2px, #e66 -28.57852px 22.32799px 0 -4.26667px, #e66 -27.83295px 23.35462px 0 -4.33333px, #e66 -27.05047px 24.35635px 0 -4.4px, #e66 -26.23192px 25.33188px 0 -4.46667px, #e66 -25.37819px 26.27988px 0 -4.53333px, #e66 -24.49018px 27.1991px 0 -4.6px, #e66 -23.56888px 28.0883px 0 -4.66667px, #e66 -22.6153px 28.94626px 0 -4.73333px, #e66 -21.6305px 29.77183px 0 -4.8px, #e66 -20.61558px 30.56385px 0 -4.86667px, #e66 -19.57168px 31.32124px 0 -4.93333px, #e66 -18.5px 32.04294px 0 -5px, #e66 -17.40175px 32.72792px 0 -5.06667px, #e66 -16.27818px 33.37522px 0 -5.13333px, #e66 -15.1306px 33.98389px 0 -5.2px, #e66 -13.96034px 34.55305px 0 -5.26667px, #e66 -12.76875px 35.08186px 0 -5.33333px, #e66 -11.55724px 35.56951px 0 -5.4px, #e66 -10.32721px 36.01527px 0 -5.46667px, #e66 -9.08014px 36.41843px 0 -5.53333px, #e66 -7.81748px 36.77835px 0 -5.6px, #e66 -6.54075px 37.09443px 0 -5.66667px, #e66 -5.25147px 37.36612px 0 -5.73333px, #e66 -3.95118px 37.59293px 0 -5.8px, #e66 -2.64145px 37.77443px 0 -5.86667px, #e66 -1.32385px 37.91023px 0 -5.93333px;
-  -webkit-box-shadow: #e66 0px 26px 0 6px, #e66 0.90971px 26.05079px 0 5.93333px, #e66 1.82297px 26.06967px 0 5.86667px, #e66 2.73865px 26.05647px 0 5.8px, #e66 3.65561px 26.01104px 0 5.73333px, #e66 4.57274px 25.93327px 0 5.66667px, #e66 5.48887px 25.8231px 0 5.6px, #e66 6.40287px 25.68049px 0 5.53333px, #e66 7.31358px 25.50548px 0 5.46667px, #e66 8.21985px 25.2981px 0 5.4px, #e66 9.12054px 25.05847px 0 5.33333px, #e66 10.01448px 24.78672px 0 5.26667px, #e66 10.90054px 24.48302px 0 5.2px, #e66 11.77757px 24.1476px 0 5.13333px, #e66 12.64443px 23.78072px 0 5.06667px, #e66 13.5px 23.38269px 0 5px, #e66 14.34315px 22.95384px 0 4.93333px, #e66 15.17277px 22.49455px 0 4.86667px, #e66 15.98776px 22.00526px 0 4.8px, #e66 16.78704px 21.48643px 0 4.73333px, #e66 17.56953px 20.93855px 0 4.66667px, #e66 18.33418px 20.36217px 0 4.6px, #e66 19.07995px 19.75787px 0 4.53333px, #e66 19.80582px 19.12626px 0 4.46667px, #e66 20.5108px 18.468px 0 4.4px, #e66 21.1939px 17.78379px 0 4.33333px, #e66 21.85416px 17.07434px 0 4.26667px, #e66 22.49067px 16.34043px 0 4.2px, #e66 23.10251px 15.58284px 0 4.13333px, #e66 23.68881px 14.80241px 0 4.06667px, #e66 24.24871px 14.0px 0 4px, #e66 24.7814px 13.1765px 0 3.93333px, #e66 25.28607px 12.33284px 0 3.86667px, #e66 25.76198px 11.46997px 0 3.8px, #e66 26.2084px 10.58888px 0 3.73333px, #e66 26.62462px 9.69057px 0 3.66667px, #e66 27.01001px 8.77608px 0 3.6px, #e66 27.36392px 7.84648px 0 3.53333px, #e66 27.68577px 6.90284px 0 3.46667px, #e66 27.97502px 5.94627px 0 3.4px, #e66 28.23116px 4.97791px 0 3.33333px, #e66 28.4537px 3.99891px 0 3.26667px, #e66 28.64223px 3.01042px 0 3.2px, #e66 28.79635px 2.01364px 0 3.13333px, #e66 28.91571px 1.00976px 0 3.06667px, #e66 29px 0.0px 0 3px, #e66 29.04896px -1.01441px 0 2.93333px, #e66 29.06237px -2.03224px 0 2.86667px, #e66 29.04004px -3.05223px 0 2.8px, #e66 28.98185px -4.07313px 0 2.73333px, #e66 28.88769px -5.09368px 0 2.66667px, #e66 28.75754px -6.1126px 0 2.6px, #e66 28.59138px -7.12863px 0 2.53333px, #e66 28.38926px -8.14049px 0 2.46667px, #e66 28.15127px -9.1469px 0 2.4px, #e66 27.87755px -10.1466px 0 2.33333px, #e66 27.56827px -11.1383px 0 2.26667px, #e66 27.22365px -12.12075px 0 2.2px, #e66 26.84398px -13.09268px 0 2.13333px, #e66 26.42956px -14.05285px 0 2.06667px, #e66 25.98076px -15.0px 0 2px, #e66 25.49798px -15.93291px 0 1.93333px, #e66 24.98167px -16.85035px 0 1.86667px, #e66 24.43231px -17.75111px 0 1.8px, #e66 23.85046px -18.63402px 0 1.73333px, #e66 23.23668px -19.49789px 0 1.66667px, #e66 22.5916px -20.34157px 0 1.6px, #e66 21.91589px -21.16393px 0 1.53333px, #e66 21.21024px -21.96384px 0 1.46667px, #e66 20.4754px -22.74023px 0 1.4px, #e66 19.71215px -23.49203px 0 1.33333px, #e66 18.92133px -24.2182px 0 1.26667px, #e66 18.10379px -24.91772px 0 1.2px, #e66 17.26042px -25.58963px 0 1.13333px, #e66 16.39217px -26.23295px 0 1.06667px, #e66 15.5px -26.84679px 0 1px, #e66 14.58492px -27.43024px 0 0.93333px, #e66 13.64796px -27.98245px 0 0.86667px, #e66 12.69018px -28.50262px 0 0.8px, #e66 11.7127px -28.98995px 0 0.73333px, #e66 10.71663px -29.4437px 0 0.66667px, #e66 9.70313px -29.86317px 0 0.6px, #e66 8.67339px -30.2477px 0 0.53333px, #e66 7.6286px -30.59666px 0 0.46667px, #e66 6.57001px -30.90946px 0 0.4px, #e66 5.49886px -31.18558px 0 0.33333px, #e66 4.41643px -31.42451px 0 0.26667px, #e66 3.32401px -31.6258px 0 0.2px, #e66 2.22291px -31.78904px 0 0.13333px, #e66 1.11446px -31.91388px 0 0.06667px, #e66 0.0px -32px 0 0px, #e66 -1.11911px -32.04713px 0 -0.06667px, #e66 -2.24151px -32.05506px 0 -0.13333px, #e66 -3.36582px -32.02361px 0 -0.2px, #e66 -4.49065px -31.95265px 0 -0.26667px, #e66 -5.61462px -31.84212px 0 -0.33333px, #e66 -6.73634px -31.69198px 0 -0.4px, #e66 -7.8544px -31.50227px 0 -0.46667px, #e66 -8.9674px -31.27305px 0 -0.53333px, #e66 -10.07395px -31.00444px 0 -0.6px, #e66 -11.17266px -30.69663px 0 -0.66667px, #e66 -12.26212px -30.34982px 0 -0.73333px, #e66 -13.34096px -29.96429px 0 -0.8px, #e66 -14.4078px -29.54036px 0 -0.86667px, #e66 -15.46126px -29.07841px 0 -0.93333px, #e66 -16.5px -28.57884px 0 -1px, #e66 -17.52266px -28.04212px 0 -1.06667px, #e66 -18.52792px -27.46878px 0 -1.13333px, #e66 -19.51447px -26.85936px 0 -1.2px, #e66 -20.48101px -26.21449px 0 -1.26667px, #e66 -21.42625px -25.53481px 0 -1.33333px, #e66 -22.34896px -24.82104px 0 -1.4px, #e66 -23.2479px -24.07391px 0 -1.46667px, #e66 -24.12186px -23.29421px 0 -1.53333px, #e66 -24.96967px -22.48279px 0 -1.6px, #e66 -25.79016px -21.64052px 0 -1.66667px, #e66 -26.58223px -20.76831px 0 -1.73333px, #e66 -27.34477px -19.86714px 0 -1.8px, #e66 -28.07674px -18.938px 0 -1.86667px, #e66 -28.7771px -17.98193px 0 -1.93333px, #e66 -29.44486px -17.0px 0 -2px, #e66 -30.07908px -15.99333px 0 -2.06667px, #e66 -30.67884px -14.96307px 0 -2.13333px, #e66 -31.24325px -13.91039px 0 -2.2px, #e66 -31.7715px -12.83652px 0 -2.26667px, #e66 -32.26278px -11.74269px 0 -2.33333px, #e66 -32.71634px -10.63018px 0 -2.4px, #e66 -33.13149px -9.5003px 0 -2.46667px, #e66 -33.50755px -8.35437px 0 -2.53333px, #e66 -33.84391px -7.19374px 0 -2.6px, #e66 -34.14px -6.0198px 0 -2.66667px, #e66 -34.39531px -4.83395px 0 -2.73333px, #e66 -34.60936px -3.63759px 0 -2.8px, #e66 -34.78173px -2.43218px 0 -2.86667px, #e66 -34.91205px -1.21916px 0 -2.93333px, #e66 -35px 0.0px 0 -3px, #e66 -35.04531px 1.22381px 0 -3.06667px, #e66 -35.04775px 2.45078px 0 -3.13333px, #e66 -35.00717px 3.6794px 0 -3.2px, #e66 -34.92345px 4.90817px 0 -3.26667px, #e66 -34.79654px 6.13557px 0 -3.33333px, #e66 -34.62643px 7.36007px 0 -3.4px, #e66 -34.41316px 8.58016px 0 -3.46667px, #e66 -34.15683px 9.79431px 0 -3.53333px, #e66 -33.85761px 11.001px 0 -3.6px, #e66 -33.5157px 12.19872px 0 -3.66667px, #e66 -33.13137px 13.38594px 0 -3.73333px, #e66 -32.70493px 14.56117px 0 -3.8px, #e66 -32.23675px 15.72291px 0 -3.86667px, #e66 -31.72725px 16.86968px 0 -3.93333px, #e66 -31.17691px 18px 0 -4px, #e66 -30.58627px 19.11242px 0 -4.06667px, #e66 -29.95589px 20.2055px 0 -4.13333px, #e66 -29.28642px 21.27783px 0 -4.2px, #e66 -28.57852px 22.32799px 0 -4.26667px, #e66 -27.83295px 23.35462px 0 -4.33333px, #e66 -27.05047px 24.35635px 0 -4.4px, #e66 -26.23192px 25.33188px 0 -4.46667px, #e66 -25.37819px 26.27988px 0 -4.53333px, #e66 -24.49018px 27.1991px 0 -4.6px, #e66 -23.56888px 28.0883px 0 -4.66667px, #e66 -22.6153px 28.94626px 0 -4.73333px, #e66 -21.6305px 29.77183px 0 -4.8px, #e66 -20.61558px 30.56385px 0 -4.86667px, #e66 -19.57168px 31.32124px 0 -4.93333px, #e66 -18.5px 32.04294px 0 -5px, #e66 -17.40175px 32.72792px 0 -5.06667px, #e66 -16.27818px 33.37522px 0 -5.13333px, #e66 -15.1306px 33.98389px 0 -5.2px, #e66 -13.96034px 34.55305px 0 -5.26667px, #e66 -12.76875px 35.08186px 0 -5.33333px, #e66 -11.55724px 35.56951px 0 -5.4px, #e66 -10.32721px 36.01527px 0 -5.46667px, #e66 -9.08014px 36.41843px 0 -5.53333px, #e66 -7.81748px 36.77835px 0 -5.6px, #e66 -6.54075px 37.09443px 0 -5.66667px, #e66 -5.25147px 37.36612px 0 -5.73333px, #e66 -3.95118px 37.59293px 0 -5.8px, #e66 -2.64145px 37.77443px 0 -5.86667px, #e66 -1.32385px 37.91023px 0 -5.93333px;
-  box-shadow: #e66 0px 26px 0 6px, #e66 0.90971px 26.05079px 0 5.93333px, #e66 1.82297px 26.06967px 0 5.86667px, #e66 2.73865px 26.05647px 0 5.8px, #e66 3.65561px 26.01104px 0 5.73333px, #e66 4.57274px 25.93327px 0 5.66667px, #e66 5.48887px 25.8231px 0 5.6px, #e66 6.40287px 25.68049px 0 5.53333px, #e66 7.31358px 25.50548px 0 5.46667px, #e66 8.21985px 25.2981px 0 5.4px, #e66 9.12054px 25.05847px 0 5.33333px, #e66 10.01448px 24.78672px 0 5.26667px, #e66 10.90054px 24.48302px 0 5.2px, #e66 11.77757px 24.1476px 0 5.13333px, #e66 12.64443px 23.78072px 0 5.06667px, #e66 13.5px 23.38269px 0 5px, #e66 14.34315px 22.95384px 0 4.93333px, #e66 15.17277px 22.49455px 0 4.86667px, #e66 15.98776px 22.00526px 0 4.8px, #e66 16.78704px 21.48643px 0 4.73333px, #e66 17.56953px 20.93855px 0 4.66667px, #e66 18.33418px 20.36217px 0 4.6px, #e66 19.07995px 19.75787px 0 4.53333px, #e66 19.80582px 19.12626px 0 4.46667px, #e66 20.5108px 18.468px 0 4.4px, #e66 21.1939px 17.78379px 0 4.33333px, #e66 21.85416px 17.07434px 0 4.26667px, #e66 22.49067px 16.34043px 0 4.2px, #e66 23.10251px 15.58284px 0 4.13333px, #e66 23.68881px 14.80241px 0 4.06667px, #e66 24.24871px 14.0px 0 4px, #e66 24.7814px 13.1765px 0 3.93333px, #e66 25.28607px 12.33284px 0 3.86667px, #e66 25.76198px 11.46997px 0 3.8px, #e66 26.2084px 10.58888px 0 3.73333px, #e66 26.62462px 9.69057px 0 3.66667px, #e66 27.01001px 8.77608px 0 3.6px, #e66 27.36392px 7.84648px 0 3.53333px, #e66 27.68577px 6.90284px 0 3.46667px, #e66 27.97502px 5.94627px 0 3.4px, #e66 28.23116px 4.97791px 0 3.33333px, #e66 28.4537px 3.99891px 0 3.26667px, #e66 28.64223px 3.01042px 0 3.2px, #e66 28.79635px 2.01364px 0 3.13333px, #e66 28.91571px 1.00976px 0 3.06667px, #e66 29px 0.0px 0 3px, #e66 29.04896px -1.01441px 0 2.93333px, #e66 29.06237px -2.03224px 0 2.86667px, #e66 29.04004px -3.05223px 0 2.8px, #e66 28.98185px -4.07313px 0 2.73333px, #e66 28.88769px -5.09368px 0 2.66667px, #e66 28.75754px -6.1126px 0 2.6px, #e66 28.59138px -7.12863px 0 2.53333px, #e66 28.38926px -8.14049px 0 2.46667px, #e66 28.15127px -9.1469px 0 2.4px, #e66 27.87755px -10.1466px 0 2.33333px, #e66 27.56827px -11.1383px 0 2.26667px, #e66 27.22365px -12.12075px 0 2.2px, #e66 26.84398px -13.09268px 0 2.13333px, #e66 26.42956px -14.05285px 0 2.06667px, #e66 25.98076px -15.0px 0 2px, #e66 25.49798px -15.93291px 0 1.93333px, #e66 24.98167px -16.85035px 0 1.86667px, #e66 24.43231px -17.75111px 0 1.8px, #e66 23.85046px -18.63402px 0 1.73333px, #e66 23.23668px -19.49789px 0 1.66667px, #e66 22.5916px -20.34157px 0 1.6px, #e66 21.91589px -21.16393px 0 1.53333px, #e66 21.21024px -21.96384px 0 1.46667px, #e66 20.4754px -22.74023px 0 1.4px, #e66 19.71215px -23.49203px 0 1.33333px, #e66 18.92133px -24.2182px 0 1.26667px, #e66 18.10379px -24.91772px 0 1.2px, #e66 17.26042px -25.58963px 0 1.13333px, #e66 16.39217px -26.23295px 0 1.06667px, #e66 15.5px -26.84679px 0 1px, #e66 14.58492px -27.43024px 0 0.93333px, #e66 13.64796px -27.98245px 0 0.86667px, #e66 12.69018px -28.50262px 0 0.8px, #e66 11.7127px -28.98995px 0 0.73333px, #e66 10.71663px -29.4437px 0 0.66667px, #e66 9.70313px -29.86317px 0 0.6px, #e66 8.67339px -30.2477px 0 0.53333px, #e66 7.6286px -30.59666px 0 0.46667px, #e66 6.57001px -30.90946px 0 0.4px, #e66 5.49886px -31.18558px 0 0.33333px, #e66 4.41643px -31.42451px 0 0.26667px, #e66 3.32401px -31.6258px 0 0.2px, #e66 2.22291px -31.78904px 0 0.13333px, #e66 1.11446px -31.91388px 0 0.06667px, #e66 0.0px -32px 0 0px, #e66 -1.11911px -32.04713px 0 -0.06667px, #e66 -2.24151px -32.05506px 0 -0.13333px, #e66 -3.36582px -32.02361px 0 -0.2px, #e66 -4.49065px -31.95265px 0 -0.26667px, #e66 -5.61462px -31.84212px 0 -0.33333px, #e66 -6.73634px -31.69198px 0 -0.4px, #e66 -7.8544px -31.50227px 0 -0.46667px, #e66 -8.9674px -31.27305px 0 -0.53333px, #e66 -10.07395px -31.00444px 0 -0.6px, #e66 -11.17266px -30.69663px 0 -0.66667px, #e66 -12.26212px -30.34982px 0 -0.73333px, #e66 -13.34096px -29.96429px 0 -0.8px, #e66 -14.4078px -29.54036px 0 -0.86667px, #e66 -15.46126px -29.07841px 0 -0.93333px, #e66 -16.5px -28.57884px 0 -1px, #e66 -17.52266px -28.04212px 0 -1.06667px, #e66 -18.52792px -27.46878px 0 -1.13333px, #e66 -19.51447px -26.85936px 0 -1.2px, #e66 -20.48101px -26.21449px 0 -1.26667px, #e66 -21.42625px -25.53481px 0 -1.33333px, #e66 -22.34896px -24.82104px 0 -1.4px, #e66 -23.2479px -24.07391px 0 -1.46667px, #e66 -24.12186px -23.29421px 0 -1.53333px, #e66 -24.96967px -22.48279px 0 -1.6px, #e66 -25.79016px -21.64052px 0 -1.66667px, #e66 -26.58223px -20.76831px 0 -1.73333px, #e66 -27.34477px -19.86714px 0 -1.8px, #e66 -28.07674px -18.938px 0 -1.86667px, #e66 -28.7771px -17.98193px 0 -1.93333px, #e66 -29.44486px -17.0px 0 -2px, #e66 -30.07908px -15.99333px 0 -2.06667px, #e66 -30.67884px -14.96307px 0 -2.13333px, #e66 -31.24325px -13.91039px 0 -2.2px, #e66 -31.7715px -12.83652px 0 -2.26667px, #e66 -32.26278px -11.74269px 0 -2.33333px, #e66 -32.71634px -10.63018px 0 -2.4px, #e66 -33.13149px -9.5003px 0 -2.46667px, #e66 -33.50755px -8.35437px 0 -2.53333px, #e66 -33.84391px -7.19374px 0 -2.6px, #e66 -34.14px -6.0198px 0 -2.66667px, #e66 -34.39531px -4.83395px 0 -2.73333px, #e66 -34.60936px -3.63759px 0 -2.8px, #e66 -34.78173px -2.43218px 0 -2.86667px, #e66 -34.91205px -1.21916px 0 -2.93333px, #e66 -35px 0.0px 0 -3px, #e66 -35.04531px 1.22381px 0 -3.06667px, #e66 -35.04775px 2.45078px 0 -3.13333px, #e66 -35.00717px 3.6794px 0 -3.2px, #e66 -34.92345px 4.90817px 0 -3.26667px, #e66 -34.79654px 6.13557px 0 -3.33333px, #e66 -34.62643px 7.36007px 0 -3.4px, #e66 -34.41316px 8.58016px 0 -3.46667px, #e66 -34.15683px 9.79431px 0 -3.53333px, #e66 -33.85761px 11.001px 0 -3.6px, #e66 -33.5157px 12.19872px 0 -3.66667px, #e66 -33.13137px 13.38594px 0 -3.73333px, #e66 -32.70493px 14.56117px 0 -3.8px, #e66 -32.23675px 15.72291px 0 -3.86667px, #e66 -31.72725px 16.86968px 0 -3.93333px, #e66 -31.17691px 18px 0 -4px, #e66 -30.58627px 19.11242px 0 -4.06667px, #e66 -29.95589px 20.2055px 0 -4.13333px, #e66 -29.28642px 21.27783px 0 -4.2px, #e66 -28.57852px 22.32799px 0 -4.26667px, #e66 -27.83295px 23.35462px 0 -4.33333px, #e66 -27.05047px 24.35635px 0 -4.4px, #e66 -26.23192px 25.33188px 0 -4.46667px, #e66 -25.37819px 26.27988px 0 -4.53333px, #e66 -24.49018px 27.1991px 0 -4.6px, #e66 -23.56888px 28.0883px 0 -4.66667px, #e66 -22.6153px 28.94626px 0 -4.73333px, #e66 -21.6305px 29.77183px 0 -4.8px, #e66 -20.61558px 30.56385px 0 -4.86667px, #e66 -19.57168px 31.32124px 0 -4.93333px, #e66 -18.5px 32.04294px 0 -5px, #e66 -17.40175px 32.72792px 0 -5.06667px, #e66 -16.27818px 33.37522px 0 -5.13333px, #e66 -15.1306px 33.98389px 0 -5.2px, #e66 -13.96034px 34.55305px 0 -5.26667px, #e66 -12.76875px 35.08186px 0 -5.33333px, #e66 -11.55724px 35.56951px 0 -5.4px, #e66 -10.32721px 36.01527px 0 -5.46667px, #e66 -9.08014px 36.41843px 0 -5.53333px, #e66 -7.81748px 36.77835px 0 -5.6px, #e66 -6.54075px 37.09443px 0 -5.66667px, #e66 -5.25147px 37.36612px 0 -5.73333px, #e66 -3.95118px 37.59293px 0 -5.8px, #e66 -2.64145px 37.77443px 0 -5.86667px, #e66 -1.32385px 37.91023px 0 -5.93333px;
-  -moz-animation: whirly-loader 1.25s infinite linear;
-  -webkit-animation: whirly-loader 1.25s infinite linear;
-  animation: whirly-loader 1.25s infinite linear;
-  -moz-transform-origin: 50% 50%;
-  -ms-transform-origin: 50% 50%;
-  -webkit-transform-origin: 50% 50%;
-  transform-origin: 50% 50%;
-}
-
-@-moz-keyframes flower-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-    -moz-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
-    box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
-  }
-  50% {
-    -moz-transform: rotate(1080deg);
-    transform: rotate(1080deg);
-    -moz-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
-    box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
-  }
-}
-@-webkit-keyframes flower-loader {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-    -webkit-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
-    box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
-  }
-  50% {
-    -webkit-transform: rotate(1080deg);
-    transform: rotate(1080deg);
-    -webkit-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
-    box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
-  }
-}
-@keyframes flower-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-    -moz-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
-    -webkit-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
-    box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
-  }
-  50% {
-    -moz-transform: rotate(1080deg);
-    -ms-transform: rotate(1080deg);
-    -webkit-transform: rotate(1080deg);
-    transform: rotate(1080deg);
-    -moz-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
-    -webkit-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
-    box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.flower-loader:not(:required) {
-  overflow: hidden;
-  position: relative;
-  text-indent: -9999px;
-  display: inline-block;
-  width: 16px;
-  height: 16px;
-  background: #e96;
-  border-radius: 100%;
-  -moz-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
-  -webkit-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
-  box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
-  -moz-animation: flower-loader 5s infinite ease-in-out;
-  -webkit-animation: flower-loader 5s infinite ease-in-out;
-  animation: flower-loader 5s infinite ease-in-out;
-  -moz-transform-origin: 50% 50%;
-  -ms-transform-origin: 50% 50%;
-  -webkit-transform-origin: 50% 50%;
-  transform-origin: 50% 50%;
-}
-
-@-moz-keyframes dots-loader {
-  0% {
-    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  8.33% {
-    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  16.67% {
-    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  25% {
-    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  33.33% {
-    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
-  }
-  41.67% {
-    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  50% {
-    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  58.33% {
-    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  66.67% {
-    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  75% {
-    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  83.33% {
-    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
-    box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
-  }
-  91.67% {
-    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  100% {
-    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-}
-@-webkit-keyframes dots-loader {
-  0% {
-    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  8.33% {
-    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  16.67% {
-    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  25% {
-    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  33.33% {
-    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
-  }
-  41.67% {
-    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  50% {
-    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  58.33% {
-    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  66.67% {
-    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  75% {
-    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  83.33% {
-    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
-    box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
-  }
-  91.67% {
-    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  100% {
-    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-}
-@keyframes dots-loader {
-  0% {
-    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  8.33% {
-    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  16.67% {
-    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  25% {
-    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  33.33% {
-    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
-    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
-  }
-  41.67% {
-    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  50% {
-    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  58.33% {
-    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  66.67% {
-    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  75% {
-    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
-    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
-  }
-  83.33% {
-    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
-    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
-    box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
-  }
-  91.67% {
-    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-  100% {
-    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.dots-loader:not(:required) {
-  overflow: hidden;
-  position: relative;
-  text-indent: -9999px;
-  display: inline-block;
-  width: 7px;
-  height: 7px;
-  background: transparent;
-  border-radius: 100%;
-  -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
-  -moz-animation: dots-loader 5s infinite ease-in-out;
-  -webkit-animation: dots-loader 5s infinite ease-in-out;
-  animation: dots-loader 5s infinite ease-in-out;
-  -moz-transform-origin: 50% 50%;
-  -ms-transform-origin: 50% 50%;
-  -webkit-transform-origin: 50% 50%;
-  transform-origin: 50% 50%;
-}
-
-@-moz-keyframes circles-loader {
-  0% {
-    -moz-transform: rotate(-720deg);
-    transform: rotate(-720deg);
-  }
-  50% {
-    -moz-transform: rotate(720deg);
-    transform: rotate(720deg);
-  }
-}
-@-webkit-keyframes circles-loader {
-  0% {
-    -webkit-transform: rotate(-720deg);
-    transform: rotate(-720deg);
-  }
-  50% {
-    -webkit-transform: rotate(720deg);
-    transform: rotate(720deg);
-  }
-}
-@keyframes circles-loader {
-  0% {
-    -moz-transform: rotate(-720deg);
-    -ms-transform: rotate(-720deg);
-    -webkit-transform: rotate(-720deg);
-    transform: rotate(-720deg);
-  }
-  50% {
-    -moz-transform: rotate(720deg);
-    -ms-transform: rotate(720deg);
-    -webkit-transform: rotate(720deg);
-    transform: rotate(720deg);
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.circles-loader:not(:required) {
-  position: relative;
-  text-indent: -9999px;
-  display: inline-block;
-  width: 25px;
-  height: 25px;
-  background: rgba(255, 204, 51, 0.9);
-  border-radius: 100%;
-  -moz-animation: circles-loader 3s infinite ease-in-out;
-  -webkit-animation: circles-loader 3s infinite ease-in-out;
-  animation: circles-loader 3s infinite ease-in-out;
-  -moz-transform-origin: 50% 100%;
-  -ms-transform-origin: 50% 100%;
-  -webkit-transform-origin: 50% 100%;
-  transform-origin: 50% 100%;
-}
-.circles-loader:not(:required)::before {
-  background: rgba(255, 102, 0, 0.6);
-  border-radius: 100%;
-  content: '';
-  position: absolute;
-  width: 25px;
-  height: 25px;
-  top: 18.75px;
-  left: -10.82532px;
-}
-.circles-loader:not(:required)::after {
-  background: rgba(255, 51, 0, 0.4);
-  border-radius: 100%;
-  content: '';
-  position: absolute;
-  width: 25px;
-  height: 25px;
-  top: 18.75px;
-  left: 10.82532px;
-}
-
-@-moz-keyframes plus-loader-top {
-  2.5% {
-    background: #f86;
-    -moz-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  13.75% {
-    background: #ff430d;
-    -moz-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  13.76% {
-    background: #ffae0d;
-    -moz-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  25% {
-    background: #fc6;
-    -moz-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-  }
-  27.5% {
-    background: #fc6;
-    -moz-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  41.25% {
-    background: #ffae0d;
-    -moz-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  41.26% {
-    background: #2cc642;
-    -moz-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  50% {
-    background: #6d7;
-    -moz-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-  }
-  52.5% {
-    background: #6d7;
-    -moz-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  63.75% {
-    background: #2cc642;
-    -moz-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  63.76% {
-    background: #1386d2;
-    -moz-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  75% {
-    background: #4ae;
-    -moz-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-  }
-  77.5% {
-    background: #4ae;
-    -moz-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  91.25% {
-    background: #1386d2;
-    -moz-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  91.26% {
-    background: #ff430d;
-    -moz-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  100% {
-    background: #f86;
-    -moz-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-}
-@-webkit-keyframes plus-loader-top {
-  2.5% {
-    background: #f86;
-    -webkit-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  13.75% {
-    background: #ff430d;
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  13.76% {
-    background: #ffae0d;
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  25% {
-    background: #fc6;
-    -webkit-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-  }
-  27.5% {
-    background: #fc6;
-    -webkit-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  41.25% {
-    background: #ffae0d;
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  41.26% {
-    background: #2cc642;
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  50% {
-    background: #6d7;
-    -webkit-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-  }
-  52.5% {
-    background: #6d7;
-    -webkit-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  63.75% {
-    background: #2cc642;
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  63.76% {
-    background: #1386d2;
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  75% {
-    background: #4ae;
-    -webkit-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-  }
-  77.5% {
-    background: #4ae;
-    -webkit-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  91.25% {
-    background: #1386d2;
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  91.26% {
-    background: #ff430d;
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  100% {
-    background: #f86;
-    -webkit-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-}
-@keyframes plus-loader-top {
-  2.5% {
-    background: #f86;
-    -moz-transform: rotateY(0deg);
-    -ms-transform: rotateY(0deg);
-    -webkit-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  13.75% {
-    background: #ff430d;
-    -moz-transform: rotateY(90deg);
-    -ms-transform: rotateY(90deg);
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  13.76% {
-    background: #ffae0d;
-    -moz-transform: rotateY(90deg);
-    -ms-transform: rotateY(90deg);
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: ease-out;
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  25% {
-    background: #fc6;
-    -moz-transform: rotateY(180deg);
-    -ms-transform: rotateY(180deg);
-    -webkit-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-  }
-  27.5% {
-    background: #fc6;
-    -moz-transform: rotateY(180deg);
-    -ms-transform: rotateY(180deg);
-    -webkit-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  41.25% {
-    background: #ffae0d;
-    -moz-transform: rotateY(90deg);
-    -ms-transform: rotateY(90deg);
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  41.26% {
-    background: #2cc642;
-    -moz-transform: rotateY(90deg);
-    -ms-transform: rotateY(90deg);
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: ease-out;
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  50% {
-    background: #6d7;
-    -moz-transform: rotateY(0deg);
-    -ms-transform: rotateY(0deg);
-    -webkit-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-  }
-  52.5% {
-    background: #6d7;
-    -moz-transform: rotateY(0deg);
-    -ms-transform: rotateY(0deg);
-    -webkit-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  63.75% {
-    background: #2cc642;
-    -moz-transform: rotateY(90deg);
-    -ms-transform: rotateY(90deg);
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  63.76% {
-    background: #1386d2;
-    -moz-transform: rotateY(90deg);
-    -ms-transform: rotateY(90deg);
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: ease-out;
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  75% {
-    background: #4ae;
-    -moz-transform: rotateY(180deg);
-    -ms-transform: rotateY(180deg);
-    -webkit-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-  }
-  77.5% {
-    background: #4ae;
-    -moz-transform: rotateY(180deg);
-    -ms-transform: rotateY(180deg);
-    -webkit-transform: rotateY(180deg);
-    transform: rotateY(180deg);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  91.25% {
-    background: #1386d2;
-    -moz-transform: rotateY(90deg);
-    -ms-transform: rotateY(90deg);
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  91.26% {
-    background: #ff430d;
-    -moz-transform: rotateY(90deg);
-    -ms-transform: rotateY(90deg);
-    -webkit-transform: rotateY(90deg);
-    transform: rotateY(90deg);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  100% {
-    background: #f86;
-    -moz-transform: rotateY(0deg);
-    -ms-transform: rotateY(0deg);
-    -webkit-transform: rotateY(0deg);
-    transform: rotateY(0deg);
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-}
-@-moz-keyframes plus-loader-bottom {
-  0% {
-    background: #fc6;
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  50% {
-    background: #fc6;
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  75% {
-    background: #4ae;
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  100% {
-    background: #4ae;
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-}
-@-webkit-keyframes plus-loader-bottom {
-  0% {
-    background: #fc6;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  50% {
-    background: #fc6;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  75% {
-    background: #4ae;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  100% {
-    background: #4ae;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-}
-@keyframes plus-loader-bottom {
-  0% {
-    background: #fc6;
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  50% {
-    background: #fc6;
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  75% {
-    background: #4ae;
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  100% {
-    background: #4ae;
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-}
-@-moz-keyframes plus-loader-background {
-  0% {
-    background: #f86;
-    -moz-transform: rotateZ(180deg);
-    transform: rotateZ(180deg);
-  }
-  25% {
-    background: #f86;
-    -moz-transform: rotateZ(180deg);
-    transform: rotateZ(180deg);
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  27.5% {
-    background: #6d7;
-    -moz-transform: rotateZ(90deg);
-    transform: rotateZ(90deg);
-  }
-  50% {
-    background: #6d7;
-    -moz-transform: rotateZ(90deg);
-    transform: rotateZ(90deg);
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  52.5% {
-    background: #6d7;
-    -moz-transform: rotateZ(0deg);
-    transform: rotateZ(0deg);
-  }
-  75% {
-    background: #6d7;
-    -moz-transform: rotateZ(0deg);
-    transform: rotateZ(0deg);
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  77.5% {
-    background: #f86;
-    -moz-transform: rotateZ(270deg);
-    transform: rotateZ(270deg);
-  }
-  100% {
-    background: #f86;
-    -moz-transform: rotateZ(270deg);
-    transform: rotateZ(270deg);
-    -moz-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-}
-@-webkit-keyframes plus-loader-background {
-  0% {
-    background: #f86;
-    -webkit-transform: rotateZ(180deg);
-    transform: rotateZ(180deg);
-  }
-  25% {
-    background: #f86;
-    -webkit-transform: rotateZ(180deg);
-    transform: rotateZ(180deg);
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  27.5% {
-    background: #6d7;
-    -webkit-transform: rotateZ(90deg);
-    transform: rotateZ(90deg);
-  }
-  50% {
-    background: #6d7;
-    -webkit-transform: rotateZ(90deg);
-    transform: rotateZ(90deg);
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  52.5% {
-    background: #6d7;
-    -webkit-transform: rotateZ(0deg);
-    transform: rotateZ(0deg);
-  }
-  75% {
-    background: #6d7;
-    -webkit-transform: rotateZ(0deg);
-    transform: rotateZ(0deg);
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  77.5% {
-    background: #f86;
-    -webkit-transform: rotateZ(270deg);
-    transform: rotateZ(270deg);
-  }
-  100% {
-    background: #f86;
-    -webkit-transform: rotateZ(270deg);
-    transform: rotateZ(270deg);
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-}
-@keyframes plus-loader-background {
-  0% {
-    background: #f86;
-    -moz-transform: rotateZ(180deg);
-    -ms-transform: rotateZ(180deg);
-    -webkit-transform: rotateZ(180deg);
-    transform: rotateZ(180deg);
-  }
-  25% {
-    background: #f86;
-    -moz-transform: rotateZ(180deg);
-    -ms-transform: rotateZ(180deg);
-    -webkit-transform: rotateZ(180deg);
-    transform: rotateZ(180deg);
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  27.5% {
-    background: #6d7;
-    -moz-transform: rotateZ(90deg);
-    -ms-transform: rotateZ(90deg);
-    -webkit-transform: rotateZ(90deg);
-    transform: rotateZ(90deg);
-  }
-  50% {
-    background: #6d7;
-    -moz-transform: rotateZ(90deg);
-    -ms-transform: rotateZ(90deg);
-    -webkit-transform: rotateZ(90deg);
-    transform: rotateZ(90deg);
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  52.5% {
-    background: #6d7;
-    -moz-transform: rotateZ(0deg);
-    -ms-transform: rotateZ(0deg);
-    -webkit-transform: rotateZ(0deg);
-    transform: rotateZ(0deg);
-  }
-  75% {
-    background: #6d7;
-    -moz-transform: rotateZ(0deg);
-    -ms-transform: rotateZ(0deg);
-    -webkit-transform: rotateZ(0deg);
-    transform: rotateZ(0deg);
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-  77.5% {
-    background: #f86;
-    -moz-transform: rotateZ(270deg);
-    -ms-transform: rotateZ(270deg);
-    -webkit-transform: rotateZ(270deg);
-    transform: rotateZ(270deg);
-  }
-  100% {
-    background: #f86;
-    -moz-transform: rotateZ(270deg);
-    -ms-transform: rotateZ(270deg);
-    -webkit-transform: rotateZ(270deg);
-    transform: rotateZ(270deg);
-    -moz-animation-timing-function: step-start;
-    -webkit-animation-timing-function: step-start;
-    animation-timing-function: step-start;
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.plus-loader:not(:required) {
-  overflow: hidden;
-  position: relative;
-  text-indent: -9999px;
-  display: inline-block;
-  width: 48px;
-  height: 48px;
-  background: #f86;
-  -moz-border-radius: 24px;
-  -webkit-border-radius: 24px;
-  border-radius: 24px;
-  -moz-transform: rotateZ(90deg);
-  -ms-transform: rotateZ(90deg);
-  -webkit-transform: rotateZ(90deg);
-  transform: rotateZ(90deg);
-  -moz-transform-origin: 50% 50%;
-  -ms-transform-origin: 50% 50%;
-  -webkit-transform-origin: 50% 50%;
-  transform-origin: 50% 50%;
-  -moz-animation: plus-loader-background 3s infinite ease-in-out;
-  -webkit-animation: plus-loader-background 3s infinite ease-in-out;
-  animation: plus-loader-background 3s infinite ease-in-out;
-}
-.plus-loader:not(:required)::after {
-  background: #f86;
-  -moz-border-radius: 24px 0 0 24px;
-  -webkit-border-radius: 24px;
-  border-radius: 24px 0 0 24px;
-  content: '';
-  position: absolute;
-  right: 50%;
-  top: 0;
-  width: 50%;
-  height: 100%;
-  -moz-transform-origin: 100% 50%;
-  -ms-transform-origin: 100% 50%;
-  -webkit-transform-origin: 100% 50%;
-  transform-origin: 100% 50%;
-  -moz-animation: plus-loader-top 3s infinite linear;
-  -webkit-animation: plus-loader-top 3s infinite linear;
-  animation: plus-loader-top 3s infinite linear;
-}
-.plus-loader:not(:required)::before {
-  background: #fc6;
-  -moz-border-radius: 24px 0 0 24px;
-  -webkit-border-radius: 24px;
-  border-radius: 24px 0 0 24px;
-  content: '';
-  position: absolute;
-  right: 50%;
-  top: 0;
-  width: 50%;
-  height: 100%;
-  -moz-transform-origin: 100% 50%;
-  -ms-transform-origin: 100% 50%;
-  -webkit-transform-origin: 100% 50%;
-  transform-origin: 100% 50%;
-  -moz-animation: plus-loader-bottom 3s infinite linear;
-  -webkit-animation: plus-loader-bottom 3s infinite linear;
-  animation: plus-loader-bottom 3s infinite linear;
-}
-
-@-moz-keyframes ball-loader {
-  0% {
-    -moz-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-    transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  45% {
-    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
-    transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  50% {
-    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
-    transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
-    -moz-animation-timing-function: linear;
-    animation-timing-function: linear;
-  }
-  55% {
-    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
-    transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
-    -moz-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-}
-@-webkit-keyframes ball-loader {
-  0% {
-    -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-    transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  45% {
-    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
-    transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  50% {
-    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
-    transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
-    -webkit-animation-timing-function: linear;
-    animation-timing-function: linear;
-  }
-  55% {
-    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
-    transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-}
-@keyframes ball-loader {
-  0% {
-    -moz-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-    -ms-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-    -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-    transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  45% {
-    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
-    -ms-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
-    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
-    transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  50% {
-    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
-    -ms-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
-    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
-    transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
-    -moz-animation-timing-function: linear;
-    -webkit-animation-timing-function: linear;
-    animation-timing-function: linear;
-  }
-  55% {
-    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
-    -ms-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
-    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
-    transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
-    -moz-animation-timing-function: ease-out;
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-}
-@-moz-keyframes ball-loader-highlight {
-  0% {
-    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  45% {
-    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  50% {
-    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -moz-animation-timing-function: linear;
-    animation-timing-function: linear;
-  }
-  55% {
-    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -moz-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  100% {
-    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-}
-@-webkit-keyframes ball-loader-highlight {
-  0% {
-    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  45% {
-    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  50% {
-    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -webkit-animation-timing-function: linear;
-    animation-timing-function: linear;
-  }
-  55% {
-    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  100% {
-    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-}
-@keyframes ball-loader-highlight {
-  0% {
-    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    -ms-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  45% {
-    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -ms-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  50% {
-    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -ms-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -moz-animation-timing-function: linear;
-    -webkit-animation-timing-function: linear;
-    animation-timing-function: linear;
-  }
-  55% {
-    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -ms-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
-    -moz-animation-timing-function: ease-out;
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  100% {
-    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    -ms-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-}
-@-moz-keyframes ball-loader-shadow {
-  0% {
-    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  45% {
-    -moz-transform: translate3d(12.5px, -15px, -1px);
-    transform: translate3d(12.5px, -15px, -1px);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  50% {
-    -moz-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
-    transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
-    -moz-animation-timing-function: linear;
-    animation-timing-function: linear;
-  }
-  55% {
-    -moz-transform: translate3d(12.5px, -15px, -1px);
-    transform: translate3d(12.5px, -15px, -1px);
-    -moz-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  100% {
-    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    -moz-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-}
-@-webkit-keyframes ball-loader-shadow {
-  0% {
-    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  45% {
-    -webkit-transform: translate3d(12.5px, -15px, -1px);
-    transform: translate3d(12.5px, -15px, -1px);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  50% {
-    -webkit-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
-    transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
-    -webkit-animation-timing-function: linear;
-    animation-timing-function: linear;
-  }
-  55% {
-    -webkit-transform: translate3d(12.5px, -15px, -1px);
-    transform: translate3d(12.5px, -15px, -1px);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  100% {
-    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-}
-@keyframes ball-loader-shadow {
-  0% {
-    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    -ms-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  45% {
-    -moz-transform: translate3d(12.5px, -15px, -1px);
-    -ms-transform: translate3d(12.5px, -15px, -1px);
-    -webkit-transform: translate3d(12.5px, -15px, -1px);
-    transform: translate3d(12.5px, -15px, -1px);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-  50% {
-    -moz-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
-    -ms-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
-    -webkit-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
-    transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
-    -moz-animation-timing-function: linear;
-    -webkit-animation-timing-function: linear;
-    animation-timing-function: linear;
-  }
-  55% {
-    -moz-transform: translate3d(12.5px, -15px, -1px);
-    -ms-transform: translate3d(12.5px, -15px, -1px);
-    -webkit-transform: translate3d(12.5px, -15px, -1px);
-    transform: translate3d(12.5px, -15px, -1px);
-    -moz-animation-timing-function: ease-out;
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-  100% {
-    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    -ms-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-    -moz-animation-timing-function: ease-in;
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.ball-loader:not(:required) {
-  position: relative;
-  display: inline-block;
-  font-size: 0;
-  letter-spacing: -1px;
-  border-radius: 100%;
-  background: #f86;
-  width: 50px;
-  height: 50px;
-  -moz-transform-style: preserve-3d;
-  -webkit-transform-style: preserve-3d;
-  transform-style: preserve-3d;
-  -moz-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-  -ms-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-  -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-  transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
-  -moz-transform-origin: 0 100%;
-  -ms-transform-origin: 0 100%;
-  -webkit-transform-origin: 0 100%;
-  transform-origin: 0 100%;
-  -moz-animation: ball-loader 1500ms infinite linear;
-  -webkit-animation: ball-loader 1500ms infinite linear;
-  animation: ball-loader 1500ms infinite linear;
-}
-.ball-loader:not(:required)::after {
-  content: '';
-  position: absolute;
-  top: 4.5px;
-  left: 5.5px;
-  width: 15px;
-  height: 15px;
-  background: #ffb099;
-  border-radius: 100%;
-  -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-  -ms-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-  -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-  transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
-  -moz-animation: ball-loader-highlight 1500ms infinite linear;
-  -webkit-animation: ball-loader-highlight 1500ms infinite linear;
-  animation: ball-loader-highlight 1500ms infinite linear;
-}
-.ball-loader:not(:required)::before {
-  content: '';
-  position: absolute;
-  top: 50px;
-  left: 5.5px;
-  width: 50px;
-  height: 15px;
-  background: rgba(0, 0, 0, 0.2);
-  border-radius: 100%;
-  -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-  -ms-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-  -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-  transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
-  -moz-animation: ball-loader-shadow 1500ms infinite linear;
-  -webkit-animation: ball-loader-shadow 1500ms infinite linear;
-  animation: ball-loader-shadow 1500ms infinite linear;
-  -webkit-filter: blur(1px);
-  filter: blur(1px);
-}
-
-@-moz-keyframes hexdots-loader {
-  0% {
-    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  8.33% {
-    -moz-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  16.67% {
-    -moz-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  25% {
-    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  33.33% {
-    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  41.67% {
-    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  50% {
-    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
-    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
-  }
-  58.33% {
-    -moz-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
-    box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
-  }
-  66.67% {
-    -moz-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
-    box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
-  }
-  75% {
-    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
-    box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
-  }
-  83.33% {
-    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
-    box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
-  }
-  91.67% {
-    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  100% {
-    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-}
-@-webkit-keyframes hexdots-loader {
-  0% {
-    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  8.33% {
-    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  16.67% {
-    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  25% {
-    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  33.33% {
-    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  41.67% {
-    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  50% {
-    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
-    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
-  }
-  58.33% {
-    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
-    box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
-  }
-  66.67% {
-    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
-    box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
-  }
-  75% {
-    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
-    box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
-  }
-  83.33% {
-    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
-    box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
-  }
-  91.67% {
-    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  100% {
-    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-}
-@keyframes hexdots-loader {
-  0% {
-    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  8.33% {
-    -moz-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  16.67% {
-    -moz-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  25% {
-    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  33.33% {
-    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  41.67% {
-    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
-    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  50% {
-    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
-    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
-    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
-  }
-  58.33% {
-    -moz-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
-    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
-    box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
-  }
-  66.67% {
-    -moz-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
-    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
-    box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
-  }
-  75% {
-    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
-    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
-    box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
-  }
-  83.33% {
-    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
-    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
-    box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
-  }
-  91.67% {
-    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-  100% {
-    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
-  }
-}
-/* :not(:required) hides this rule from IE9 and below */
-.hexdots-loader:not(:required) {
-  overflow: hidden;
-  position: relative;
-  text-indent: -9999px;
-  display: inline-block;
-  width: 7px;
-  height: 7px;
-  background: transparent;
-  border-radius: 100%;
-  -moz-box-shadow: #666666 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
-  -webkit-box-shadow: #666666 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
-  box-shadow: #666666 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
-  -moz-animation: hexdots-loader 5s infinite ease-in-out;
-  -webkit-animation: hexdots-loader 5s infinite ease-in-out;
-  animation: hexdots-loader 5s infinite ease-in-out;
-  -moz-transform-origin: 50% 50%;
-  -ms-transform-origin: 50% 50%;
-  -webkit-transform-origin: 50% 50%;
-  transform-origin: 50% 50%;
-}
-
-/* :not(:required) hides this rule from IE9 and below */
-.inner-circles-loader:not(:required) {
-  -moz-transform: translate3d(0, 0, 0);
-  -ms-transform: translate3d(0, 0, 0);
-  -webkit-transform: translate3d(0, 0, 0);
-  transform: translate3d(0, 0, 0);
-  position: relative;
-  display: inline-block;
-  width: 50px;
-  height: 50px;
-  background: rgba(25, 165, 152, 0.5);
-  border-radius: 50%;
-  overflow: hidden;
-  text-indent: -9999px;
-  /* Hides inner circles outside base circle at safari */
-  -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);
-}
-.inner-circles-loader:not(:required):before, .inner-circles-loader:not(:required):after {
-  content: '';
-  position: absolute;
-  top: 0;
-  display: inline-block;
-  width: 50px;
-  height: 50px;
-  border-radius: 50%;
-}
-.inner-circles-loader:not(:required):before {
-  -moz-animation: inner-circles-loader 3s infinite;
-  -webkit-animation: inner-circles-loader 3s infinite;
-  animation: inner-circles-loader 3s infinite;
-  -moz-transform-origin: 0 50%;
-  -ms-transform-origin: 0 50%;
-  -webkit-transform-origin: 0 50%;
-  transform-origin: 0 50%;
-  left: 0;
-  background: #c7efcf;
-}
-.inner-circles-loader:not(:required):after {
-  -moz-animation: inner-circles-loader 3s 0.2s reverse infinite;
-  -webkit-animation: inner-circles-loader 3s 0.2s reverse infinite;
-  animation: inner-circles-loader 3s 0.2s reverse infinite;
-  -moz-transform-origin: 100% 50%;
-  -ms-transform-origin: 100% 50%;
-  -webkit-transform-origin: 100% 50%;
-  transform-origin: 100% 50%;
-  right: 0;
-  background: #eef5db;
-}
-
-@-moz-keyframes inner-circles-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  50% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-  100% {
-    -moz-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-}
-@-webkit-keyframes inner-circles-loader {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  50% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-  100% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-}
-@keyframes inner-circles-loader {
-  0% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  50% {
-    -moz-transform: rotate(360deg);
-    -ms-transform: rotate(360deg);
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-  100% {
-    -moz-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-}
 @-moz-keyframes pong-loader {
   0% {
     left: 5px;
@@ -3342,64 +295,3 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   height: 10px;
   background: #8cdb8b;
 }
-
-.pulse-loader:not(:required) {
-  display: inline-block;
-  width: 50px;
-  height: 50px;
-  -moz-animation: pulse-loader 0.7s linear infinite alternate;
-  -webkit-animation: pulse-loader 0.7s linear infinite alternate;
-  animation: pulse-loader 0.7s linear infinite alternate;
-  border: 2px solid #e67e22;
-  -moz-border-radius: 50%;
-  -webkit-border-radius: 50%;
-  border-radius: 50%;
-  overflow: hidden;
-  text-indent: 50px;
-}
-
-@-moz-keyframes pulse-loader {
-  0% {
-    -moz-box-shadow: #e67e22 0 0 0px 20px;
-    box-shadow: #e67e22 0 0 0px 20px;
-  }
-  40% {
-    -moz-box-shadow: none;
-    box-shadow: none;
-  }
-  100% {
-    -moz-box-shadow: #e67e22 0 0 0px 25px inset;
-    box-shadow: #e67e22 0 0 0px 25px inset;
-  }
-}
-@-webkit-keyframes pulse-loader {
-  0% {
-    -webkit-box-shadow: #e67e22 0 0 0px 20px;
-    box-shadow: #e67e22 0 0 0px 20px;
-  }
-  40% {
-    -webkit-box-shadow: none;
-    box-shadow: none;
-  }
-  100% {
-    -webkit-box-shadow: #e67e22 0 0 0px 25px inset;
-    box-shadow: #e67e22 0 0 0px 25px inset;
-  }
-}
-@keyframes pulse-loader {
-  0% {
-    -moz-box-shadow: #e67e22 0 0 0px 20px;
-    -webkit-box-shadow: #e67e22 0 0 0px 20px;
-    box-shadow: #e67e22 0 0 0px 20px;
-  }
-  40% {
-    -moz-box-shadow: none;
-    -webkit-box-shadow: none;
-    box-shadow: none;
-  }
-  100% {
-    -moz-box-shadow: #e67e22 0 0 0px 25px inset;
-    -webkit-box-shadow: #e67e22 0 0 0px 25px inset;
-    box-shadow: #e67e22 0 0 0px 25px inset;
-  }
-}