Earlier I defined the process of crushing an array
In a crush we read the array left to right. If at a point we encounter two of the same element in a row we remove the first one and double the second one.
For example here is the process of crushing the following array
[5,2,2,4] ^ [5,2,2,4] ^ [5,2,2,4] ^ [5,4,4] ^ [5,4,4] ^ [5,8] ^
Note that the same element can be collapsed multiple times. In the example
2,2,4 was collapsed into
8 in a single pass.
Now crushing arrays is easy, whats hard is uncrushing them. Your task is to take an array of positive integers as input and output the largest array that can form the input when crushed repeatedly. For example the array
 is formed by crushing
[2,2] which is in turn formed by crushing
[1,1,1,1]. Since we can't have non integer values
[1,1,1,1] cannot be uncrushed any further and thus is our answer.
You will never receive a
0 in your input array because such arrays can be expanded indefinitely. You will also never receive a case with two of the same odd number next to each other, such cases cannot be the result of a crushing.
This is code-golf so answers will be scored with the size of their source measured in bytes with less bytes being better.
Before you start making your answer I just want to say that this challenge is significantly more difficult than it seems. Check your intuition as you go along and make sure your answer passes all the test cases.
 ->   ->   -> [3,3]  -> [1,1,1,1,1,1,1,1] [4,8] -> [1,1,1,1,1,1,1,1,1,1,2] [2,8] -> [1, 1, 1, 1, 2, 1, 1, 1, 1] [4,4] -> [1,1,1,1,1,1,1,1]