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

"Fiquei em choque": homem é flagrado se masturbando em biblioteca de SP

Biblioteca Mário de Andrade é uma das mais importantes da América Latina; homem foi liberado após  termo circunstanciado  - Divulgação/Jose Cordeiro/SPTuris
Biblioteca Mário de Andrade é uma das mais importantes da América Latina; homem foi liberado após termo circunstanciado Imagem: Divulgação/Jose Cordeiro/SPTuris

Marcos Candido

Da Universa

22/03/2019 04h00

Era para ser só uma tarde de estudos, mas duas moradoras de São Paulo acabaram ando a tarde da última sexta (15) em uma delegacia. Tudo começou quando elas chegaram à biblioteca Mário de Andrade e toparam com um homem que se masturbava.

"Eu fiquei em choque", relembra Fernanda Aguiar, 21. A estudante foi a primeira a flagrar Carlos Aparecido Motta, 48, se masturbando enquanto assistia a um desenho animado em um pequeno computador. Ele estava sentado em uma das mesas do local e não parecia preocupado em esconder o que estava fazendo. Fernanda havia chegado um pouco antes de sua professora particular de inglês, Melissa Martins, 22, quando se deparou com o homem com o pênis para fora.

Seguranças ajudaram vítimas; homem ainda estava com a calça abaixada

As duas chamaram os seguranças da biblioteca, que chamaram a polícia militar. Segundo o boletim de ocorrência, Carlos ainda estava com a calça arriada quando foi abordado. As duas e o homem foram parar no 3º Distrito Policial de Campos Elíseos.

Após aguardar por três horas na delegacia, o suspeito foi indiciado por ato obsceno, considerado de menor potencial ofensivo e foi liberado. "Nós fomos liberadas ao mesmo tempo e nos escondemos para que ele não nos visse", diz Fernanda.

A aluna e a professora acreditaram que o caso seria enquadrado no crime de importunação sexual, com pena de um a cinco anos de prisão. Porém, na interpretação do delegado, Carlos não atacou ou ameaçou uma pessoa para ser enquadrado na lei que está em vigor desde setembro do ano ado.

...e foi liberado

No fim das contas, o caso foi registrado como ato obsceno, crime com pena três meses a um ano. Por ser considerado pela legislação como de menor potencial ofensivo, ele foi liberado após a de um termo.

Segundo o boletim de ocorrência, o suspeito trabalha como vigilante e mora na zona leste. A Universa não conseguiu localizar o suspeito. No documento, ao qual Universa teve o, ele nega as acusações.

'Voltar ao local é estranho'

Apesar de se considerar bem amparada pela equipe da biblioteca, Melissa ficou abalada. "Eu fiquei até meio traumatizada. Sempre frequentei aquela biblioteca. É uma sensação muito estranha que isso aconteça em um lugar supercomum a você. Tive que voltar lá na semana seguinte e fiquei até meio assim [preocupada]", desabafa a professora de inglês.

A biblioteca Mário de Andrade tem o segundo maior acervo público do país e é uma das mais renomadas da América Latina. Fundada em 1925, fica na região central de São Paulo e tem mais de 50 mil itens só na coleção de obras raras.

Em nota, a Secretaria Municipal de Cultura, que istra a biblioteca, afirma que reforçou a segurança e instalou mais um controle de o para saber quem entra e sai.