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

Tese do MPF contra Glenn Greenwald criminaliza jornalismo, dizem juristas

Glenn Greenwald em audiência pública na Comissão de Direitos da Câmara - Loures/Ag. Câmara
Glenn Greenwald em audiência pública na Comissão de Direitos da Câmara Imagem: Loures/Ag. Câmara

Vinicius Konchinski

Colaboração para o UOL, em Curitiba

22/01/2020 04h01

O MPF (Ministério Público Federal) denunciou nesta terça-feira o jornalista Glenn Greenwald, um dos fundadores do site The Intercept, por supostamente ter auxiliado, incentivado e orientado a invasão de celulares de autoridades brasileiras.

Para responsabilizar Greenwald pelo crime, o procurador da República Wellington Divino Marques de Oliveira argumentou que o jornalista conversou com hackers enquanto a invasão ocorria e, por isso, também seria responsável por ela.

O jornalista, por sua vez, considera a denúncia uma tentativa óbvia de atacar a liberdade de imprensa livre. Em nota, afirmou que a acusação é uma retaliação por revelações feitas a respeito do ministro da Justiça, Sergio Moro, e do governo do presidente Jair Bolsonaro.

O jornalista afirmou na nota que, há dois meses, a Polícia Federal declarou explicitamente que ele não cometeu nem participou de nenhum crime.

Argumento do MPF inviabiliza jornalismo investigativo, diz advogado

O advogado criminalista Gustavo Badaró, professor da USP (Universidade de São Paulo), contesta a argumentação usada pelo MPF ao denunciar Greenwald. Para ele, não se pode punir o jornalista dizendo que ele é culpado pela invasão dos celulares só porque ele supostamente sabia que ela estava ocorrendo.

"Isso é um profundo desconhecimento da lei ou uma tentativa desesperada de criminalizar o trabalho do jornalista", afirmou ele, em entrevista ao UOL.

O material apreendido com a autorização da Justiça inclui conversas entre um dos supostos hackers (Luiz Henrique Molição) e Greenwald. Segundo o MPF, essas conversas apontam que o jornalista "sabia que o grupo não havia encerrado a atividade criminosa e permanecia realizando condutas de invasões de dispositivos informáticos e o monitoramento ilegal de comunicações".

Greenwald, segundo o MPF, "buscou criar uma narrativa de 'proteção à fonte' que incentivou a continuidade delitiva." Por isso, o MPF considera que o jornalista participou das invasões de celulares.

Para o advogado Pedro Serrano, professor da PUC-SP (Pontifícia Universidade Católica de São Paulo). "Pouco importa se a informação foi entregue neste ou naquele momento. A informação só é entregue depois de obtida pelo hacker. É o hacker que obteve a informação", afirmou.

Serrano destaca o perigo à democracia contido no argumento do MPF. Para ele, levando o entendimento do procurador Oliveira em consideração, todo jornalista que obtém uma informação sigilosa de um inquérito em andamento cometeria um crime, já que o vazamento teria ocorrido antes do inquérito ser encerrado.

Greenwald não foi investigado; áudios embasam denúncia do MPF

Em nota, o The Intercept Brasil reforçou que a PF concluiu que Greenwald não cometeu crime. Lembrou que o jornalista não foi sequer investigado.

Uma decisão do ministro do STF (Supremo Tribunal Federal) Gilmar Mendes proibiu, em agosto, a apuração sobre a conduta do jornalista por conta do risco de se ferir a liberdade de imprensa.

O Intercept declarou ainda estar perplexo com o papel "claramente político" prestado pelo MPF. Informou ainda que vê na denúncia uma "tentativa de criminalizar não somente o nosso trabalho, mas todo o jornalismo brasileiro".

O advogado Anderson Lopes também critica a denúncia. "O jornalista não é um agente de investigação para apurar se o hackeamento ainda está em curso ou ordenar que ele seja interrompido."

Para Lopes, a obrigação legal do jornalista é preservar sua fonte. "Não tendo havido instigação, auxílio ou execução da violação por parte do jornalista, ele não tem qualquer responsabilidade pelo que foi feito", disse.

Augusto Nunes agride Glenn Greenwald em programa de rádio

Band Notí­cias