!function(i,e){var t=i.get,n=i.EnumerableUtils.forEach;e.UnderscoredSerializer=i.Mixin.create({keyForAttribute:function(e){return i.String.decamelize(e)},keyForRelationship:function(e,t){return e=i.String.decamelize(e),"belongsTo"===t?e+"_id":"hasMany"===t?i.String.singularize(e)+"_ids":e},serializeIntoHash:function(e,t,n,r){var o=i.String.decamelize(t.typeKey);e[o]=this.serialize(n,r)},serializePolymorphicType:function(e,n,r){var o=r.key,a=t(e,o);a&&(o=this.keyForAttribute(o),n[o+"_type"]=i.String.capitalize(a.constructor.typeKey))},typeForRoot:function(e){var t=i.String.camelize(e);return i.String.singularize(t)},normalize:function(i,e,t){return this.normalizeLinks(e),this._super(i,e,t)},normalizeLinks:function(e){if(e.links){var t=e.links;for(var n in t){var r=i.String.camelize(n);r!==n&&(t[r]=t[n],delete t[n])}}},normalizeRelationships:function(i,e){var t,r;this.keyForRelationship&&i.eachRelationship(function(i,o){if(o.options.polymorphic){if(t=this.keyForAttribute(i),r=e[t],r&&r.type)r.type=this.typeForRoot(r.type);else if(r&&"hasMany"===o.kind){var a=this;n(r,function(i){i.type=a.typeForRoot(i.type)})}}else t=this.keyForRelationship(i,o.kind),r=e[t];e[i]=r,i!==t&&delete e[t]},this)}})}(Ember,DS);