;(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

Antes de pisoteio e mortes, PM cercou baile, dizem frequentadores

Bernardo Barbosa e Cleber Souza

Do UOL, em São Paulo

01/12/2019 14h56

Policiais militares cercaram um baile funk na favela de Paraisópolis, zona sul de São Paulo, e impediram sua dispersão, relataram participantes do evento à imprensa. O cerco teria levado quem estava na rua a correr para uma viela — e o resultado foi a morte de pelo menos nove pessoas pisoteadas. A Polícia Militar nega ter encurralado os frequentadores.

Segundo o estudante de direito Luiz Henrique, 26 anos, é comum que policiais militares sejam chamados para acabar com bailes e, por vezes, ajam com truculência para dispersar a festa. No entanto, mesmo quando há agressões e uso de munição não letal, os policiais "geralmente deixam o pessoal correr". Segundo ele, não foi o que ocorreu na última madrugada.

"Eles fecharam dos dois lados, e todo mundo correu para uma viela de três metros de largura. Quem estava na frente caiu", afirmou. Um vídeo que circula nas redes sociais (veja abaixo) mostra policiais encurralando frequentadores do baile, mas não há confirmação de que a gravação foi feita durante esta madrugada.

Ainda de acordo com Luiz, policiais chegaram a jogar bombas de efeito moral na viela, o que deixou os frequentadores — adolescentes, em sua maioria — mais desesperados. "Um outro policial mandou pararem", disse.

À GloboNews, uma frequentadora que não quis se identificar disse que não conseguiu fugir da polícia.

Frequentadores rebatem versão da PM

Luiz Henrique e outras duas pessoas presentes ao baile que foram ouvidas pelo UOL e pediram anonimato também rebateram a versão da PM de que uma moto com duas pessoas entrou no baile "ainda efetuando disparos, ocasionando um tumulto entre os frequentadores do evento", depois de terem atirado contra policiais.

"É mentira. Eles (PM) que já chegaram atirando, pisoteando a cara das pessoas, quebrando carros e motos. Foi tudo planejado", disse um jovem morador de Paraisópolis, que prefere não se identificar por medo e que estava no momento da ação da PM na comunidade.

Segundo este mesmo jovem, o que aconteceu foi uma "cena de horror."

"Um amigo meu acabou falecendo. Eles [os policiais] fizeram isso por vingança e pessoas que não têm nada a ver estão pagando", afirmou.

Um outro morador de Paraisópolis afirmou que, depois da morte de um sargento em confronto na favela no começo de novembro, começaram a circular rumores entre comerciantes no bairro de que "haveria uma chacina". Este morador também pediu anonimato.

"Os donos de bares estavam todos com medo. O que aconteceu ontem foi uma vingança pela morte do policial", disse.

O estudante Luiz Henrique afirma ainda que ouviu relatos de que uma jovem teria sido atingida por uma garrafa por um policial militar. Ela estava no chão durante a dispersão e, quando levantou, foi agredida; de acordo com Luiz, a jovem foi em um primeiro momento para uma unidade de saúde de Paraisópolis, e depois transferida para um hospital particular.