;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
PUBLICIDADE
Topo

Fórmula 1

Quem é o diretor de provas da Fórmula 1 alvo de críticas das equipes

O diretor de provas da F1, Michael Masi, assumiu o cargo em 2019 - Mark Thompson/Getty Images
O diretor de provas da F1, Michael Masi, assumiu o cargo em 2019 Imagem: Mark Thompson/Getty Images

Do UOL, em São Paulo

13/12/2021 11h53

Michael Masi, diretor de provas da Fórmula 1, teve semanas turbulentas na reta final da temporada 2021 da categoria. Foram reclamações da Mercedes, da Red Bull e até de outros pilotos e equipes que nem estavam disputando o título.

Masi nasceu na Austrália, tem 42 anos e iniciou a carreira em cargos istrativos no automobilismo australiano. Ele começou como voluntário quando ainda estava na escola.

O australiano chegou à Fórmula 1 em 2008 para trabalhar na implementação da corrida em Singapura. Em 2010, foi a vez de atuar no GP da Coreia do Sul.

Na categoria, Masi conheceu Charlie Whiting, diretor de provas da F1 por décadas e encarregado de fazer as vistorias em novas pistas. Em 2018, o australiano foi integrado à equipe graças a Whiting e foi tratado pelo britânico como seu sucessor.

Masi assumiu a posição de forma inesperada no início de 2019, com a morte de Whiting na quinta-feira anterior ao início da temporada, na Austrália. Desde então, ele ocupa o cargo e teve muito trabalho, ontem, no GP de Abu Dhabi.

GP de Abu Dhabi

O safety car entrou na reta final da prova após acidente de Nicholas Latifi (Williams). Verstappen, atrás de Hamilton, foi para os boxes trocar os pneus. Em um primeiro momento, Masi informou que os carros retardatários que estavam entre o holandês e o britânico não seriam autorizados a ultraar o carro de segurança.

Christian Horner, chefe da Red Bull, mostrou insatisfação. "Por que não estamos tirando esses carros do caminho?", questionou Horner. "Me dê um segundo. Meu principal objetivo é deixar este incidente claro", respondeu Masi.

Após questionamento da Red Bull, a direção de prova decidiu mudar a decisão, o que deixou Verstappen novamente em segundo, atrás apenas de Hamilton, e com pneus novos. Aí foi a vez da Mercedes reclamar. "Michael, isso não é certo. Michael", disse Toto Wolff, chefe da Mercedes.

Toto, isso é o esporte a motor", rebateu Masi.

A confusão continuou depois da prova e do título de Verstappen. A Mercedes entrou com dois protestos, ambos rejeitados pela FIA.

Em um dos protestos, a equipe reclamava justamente sobre Masi ter autorizado que apenas cinco retardatários ultraassem o safety car, e não todos. Outros três carros ficaram onde estavam, já que provavelmente não haveria tempo de eles completarem a volta e se juntarem ao pelotão antes da bandeirada.

Segundo a FIA, a intenção de mandar só cinco carros ultraarem o carro de segurança foi "remover estes carros que pudessem 'interferir' na disputa entre os líderes". O órgão também defendeu que é consenso entre as equipes que sempre deve ser feito um esforço para as corridas terminarem com bandeira verde.

Já no outro protesto, a Mercedes alegava que Verstappen colocou o carro à frente de Hamilton na curva 12, na preparação para a relargada após a saída do safety car, o que configuraria uma ultraagem proibida. O argumento foi rejeitado pela FIA, que considerou que não houve ultraagem e que os carros estavam apenas acelerando.

Fórmula 1