já agora, todos estes nomes de variaveis desta função parecem-me maus. estou a ter um pouco de dificuldade a perceber o codigo por causa disso