private function processElement($skin, $file)
 {
     $processedElements = array();
     $oldanimationRegex = "/sliderb\\d|pippidonclear\\d|pippidonfail\\d|pippidonidle\\d|pippidonkiai\\d/";
     $rules = array('file' => 'skinmimes');
     $manualMove = false;
     if ($file->getSize() < 10 && in_array($file->getClientOriginalExtension(), array("mp3", "wav", "ogg"))) {
         $file = new UploadedFile(public_path() . "/blank.wav", $file->getClientOriginalName());
         $manualMove = true;
     }
     if (!in_array($file->getMimeType(), array("application/x-font-ttf", "text/plain"))) {
         $validation = Validator::make(array("file" => $file), $rules);
         if ($validation->fails()) {
             return "error";
         }
     }
     //processing of skin metadata
     $elementName = strtolower($file->getClientOriginalName());
     $elementExt = strtolower($file->getClientOriginalExtension());
     $filename = array("fullname" => $elementName, "filename" => rtrim(basename($elementName, $elementExt), "."), "fullnameUntouched" => $elementName, "extension" => $elementExt, "ishd" => strpos($elementName, "@2x"), "shouldScaleDown" => true, "hashdcounterpart" => false);
     $sizeDifference = 0;
     if ($filename['ishd']) {
         $filename['filename'] = substr($filename['filename'], 0, -3);
         $filename['fullname'] = $filename['filename'] . "." . $filename['extension'];
     }
     //pretty complex check if animatable element fits few ... things!
     $filename['issequence'] = (preg_match("/-\\d/", $filename['filename']) === 1 || preg_match("/\\d/", $filename['filename']) === 1 && preg_match($oldanimationRegex, $filename['filename']) === 1) && preg_match("/score-\\d|default-\\d|comboburst-\\d/", $filename['filename']) !== 1;
     // don't mark score digits as animatable elements - they are obviously not.
     if ($filename["issequence"] && !in_array($filename['extension'], array("mp3", "ogg", "wav"))) {
         preg_match("/\\d+\$/", $filename['filename'], $sequenceMatches);
         $filename['frame'] = $sequenceMatches[0];
         $filename['filename'] = substr($filename['filename'], 0, -strlen((string) $filename['frame']));
     } else {
         $filename['frame'] = -1;
     }
     $DBskinElements = SkinElement::where("filename", "=", $filename['filename'])->where("skin_id", "=", $skin->id)->get();
     if (isset($DBskinElements)) {
         foreach ($DBskinElements as $DBskinElement) {
             if ($DBskinElement->ishd == 0 && $DBskinElement->useroverriden == 1) {
                 $filename['shouldScaleDown'] = false;
             }
             if ($DBskinElement->ishd == 1) {
                 $filename['hashdcountepart'] = true;
             }
         }
     }
     $elementGroup = Element::where('element_name', '=', $filename['filename'])->first();
     if (in_array($filename['extension'], array("jpg", "jpeg", "png"))) {
         if ($filename["ishd"] && $filename['shouldScaleDown']) {
             $hdSkinElement = SkinElement::firstOrNew(array("skin_id" => $skin->id, "filename" => $filename['filename'], "extension" => $filename['extension'], "ishd" => 1, "sequence_frame" => $filename['frame']));
             $hdSkinElement->group_id = isset($elementGroup) ? $elementGroup->group_id : -1;
             if ($hdSkinElement->exists) {
                 $sizeDifference += $hdSkinElement->size;
             }
             $hdSkinElement->size = $file->getSize();
             $file->move(public_path() . "/skins-content/" . $skin->id, $hdSkinElement->getFullname());
             if ($filename['issequence']) {
                 $hdSkinElement->issequence = 1;
                 $hdSkinElement->sequence_frame = $filename['frame'];
             }
             $hdSkinElement->save();
             $processedElements[] = $hdSkinElement;
             $sdSkinElement = SkinElement::firstOrNew(array("skin_id" => $skin->id, "filename" => $filename['filename'], "extension" => $filename['extension'], "ishd" => 0, "sequence_frame" => $filename['frame']));
             $sdSkinElement->group_id = isset($elementGroup) ? $elementGroup->group_id : -1;
             $imageToResize = Image::make(public_path() . "/skins-content/" . $skin->id . "/" . $hdSkinElement->getFullname());
             $imageToResize->resize(ceil(floatval($imageToResize->width() / 2)), ceil(floatval($imageToResize->height() / 2)));
             $imageToResize->save(public_path() . "/skins-content/" . $skin->id . "/" . $filename['fullname']);
             if ($sdSkinElement->exists) {
                 $sizeDifference += $sdSkinElement->size;
             }
             $sdSkinElement->size = filesize(public_path() . "/skins-content/" . $skin->id . "/" . $filename['fullname']);
             if ($filename['issequence']) {
                 $sdSkinElement->issequence = 1;
                 $sdSkinElement->sequence_frame = $filename['frame'];
             }
             $sdSkinElement->save();
             $processedElements[] = $sdSkinElement;
         } else {
             $skinElement = SkinElement::firstOrNew(array("skin_id" => $skin->id, "filename" => $filename['filename'], "extension" => $filename['extension'], "ishd" => $filename['ishd'] ? 1 : 0, "sequence_frame" => $filename['frame']));
             $skinElement->group_id = isset($elementGroup) ? $elementGroup->group_id : -1;
             if ($skinElement->exists) {
                 $sizeDifference += $skinElement->size;
             }
             $skinElement->size = $file->getSize();
             if ($filename['issequence']) {
                 $skinElement->issequence = 1;
                 $skinElement->sequence_frame = $filename['frame'];
             }
             if (($skinElement->exists || !$filename['hashdcounterpart']) && $skinElement->ishd != 1) {
                 $skinElement->useroverriden = 1;
             }
             $skinElement->save();
             $processedElements[] = $skinElement;
             $file->move(public_path() . "/skins-content/" . $skin->id, $filename['fullnameUntouched']);
         }
     } else {
         $skinElement = SkinElement::firstOrNew(array("skin_id" => $skin->id, "filename" => $filename['filename'], "extension" => $filename['extension'], "ishd" => $filename['ishd'] ? 1 : 0));
         $skinElement->element_id = isset($elementGroup) ? $elementGroup->group_id : -1;
         if ($skinElement->exists) {
             $sizeDifference += $skinElement->size;
         }
         $skinElement->size = $file->getSize();
         $skinElement->save();
         $processedElements[] = $skinElement;
         $pathToCopy = public_path() . "/skins-content/" . $skin->id;
         $manualMove ? copy(public_path() . "/blank.wav", $pathToCopy . "/" . $filename['fullnameUntouched']) : $file->move($pathToCopy, $filename['fullnameUntouched']);
     }
     $elementsSize = 0;
     foreach ($processedElements as $element) {
         $elementsSize += $element->size;
     }
     if ($sizeDifference != 0) {
         $diff = $sizeDifference - $elementsSize;
         $skin->size += $diff;
     } else {
         $skin->size += $elementsSize;
     }
     $skin->save();
     return $processedElements;
 }