;(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; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // 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(); })();
  • AssineUOL
Topo

Esse conteúdo é antigo

Secretário diz que não há indicativos de que PMs tenham matado jovem em SP

O coronel Álvaro Camilo, secretário-executivo da Polícia Militar em São Paulo - Reprodução/TV Globo
O coronel Álvaro Camilo, secretário-executivo da Polícia Militar em São Paulo Imagem: Reprodução/TV Globo

Do UOL, em São Paulo

16/06/2020 07h47Atualizada em 16/06/2020 09h19

O coronel Álvaro Camilo, secretário-executivo da Polícia Militar em São Paulo, disse hoje que não há indicativos de que policiais militares estejam envolvidos no assassinato a tiros de um adolescente, na Vila Clara, bairro da zona sul de São Paulo, na divisa com Diadema, embora ressalte que nenhuma hipótese está descartada.

Segundo moradores, Guilherme, de 15 anos, foi morto por PMs. Ontem, dois ônibus e quatro trólebus foram incendiados e mais dois ônibus foram depredados após revolta popular em virtude do assassinato.

Camilo afirmou que o governo paulista lamenta a morte de Guilherme, mas que a informação de que ele foi morto numa operação da Polícia Militar não está correta. Uma tarja com a identificação de um PM foi encontrada no local do crime.

"Um carro preto pegou esse garoto perto da casa dele e depois foi encontrado morto após umas três, quatro horas. E tinha ali uma tarjeta, que é aquela identificação de um policial militar ao lado dele ou sobre o corpo do menino. Não tinha naquele momento nenhuma operação policial sendo realizada naquela região", afirmou em entrevista ao Bom Dia São Paulo, da TV Globo.

Sobre a tarja, o secretário disse que não há nenhum policial com aquele nome na região. "Não teve operação policial, não tem nenhum indicativo de que aquilo tenha sido cometido por policiais militares. Porém, não está descartado também, todas as hipóteses estão sendo avaliadas. Quem tiver informação, o Disque Denúncia é para isso mesmo, ajudem a polícia a elucidar. Até o momento, não há indicação de que tenha policiais envolvidos na morte lamentável do garoto Guilherme", ressaltou.

'Excessos serão apurados'

Camilo afirmou ainda que eventuais excessos cometidos por policiais militares serão apurados e disse que nem a PM nem o governo "compactuam com o erro".

Ontem, a Secretaria de Segurança Pública de São Paulo (SSP-SP) anunciou, em nota, a prisão preventiva de oito policiais militares envolvidos no espancamento de um jovem na madrugada do último sábado (13), na zona norte de São Paulo.

"Onde tem erro nós corrigimos. Oito já estão presos. Os que cometem excessos não representam a maioria esmagadora dos policiais militares, que fazem 20 mil atendimentos por dia (...) Compromisso é com o acerto, é para isso que estamos trabalhando. Não compactuamos com a coisa errada", acrescentou.