diff --git a/.env.example b/.env.example index 709af88..ef82558 100644 --- a/.env.example +++ b/.env.example @@ -9,8 +9,30 @@ # Use `development` só na sua máquina local. RAILS_ENV=production +# Fuso horário do sistema operacional dentro dos containers. +# Já é o padrão no Dockerfile — só mexa se a operação mudar de estado. +# ⚠️ Isto define o FUSO, não a HORA. Se a data/hora do servidor está errada +# (atrasa, ou volta errada depois de reboot/deploy), o problema é o relógio +# do HOST: rode uma vez `sudo bash deploy/ntp-seguro.sh`. +TZ=America/Sao_Paulo + +# ── Porta publicada no host ─────────────────────────────── +# A porta DENTRO do container é sempre 3000; esta é a do servidor. +# Neste branch (teste) o padrão do docker-compose.yml JÁ É 3001, porque a 3000 +# está ocupada por outro stack no mesmo NAS. Esta linha só é necessária para +# usar uma porta diferente da padrão. +# ⚠️ Tem que casar com o destino do proxy reverso (DSM / Cloudflare). +PORTA_APP=3001 + # ── Banco de dados (seu PostgreSQL já existente) ───────────── -# Aponte DB_HOST para o IP ou hostname do seu servidor PostgreSQL +# ⚠️ SÓ O `DATABASE_URL` É LIDO. Este projeto não tem config/database.yml — o +# Rails monta a conexão a partir desta URL, e nenhum código lê DB_HOST, +# DB_NAME, DB_USER ou DB_PASSWORD (elas ficam abaixo como documentação dos +# valores que compõem a URL). Se editar só as DB_*, nada muda. +# ⚠️ Senha com caractere especial precisa ser escapada na URL: +# @ → %40 # → %23 / → %2F : → %3A +# Deixar o valor de exemplo aqui derruba o boot com +# "URI::InvalidURIError: ... SEU_IP". DATABASE_URL=postgresql://postgres:senha_segura@SEU_IP:5432/logistica_db DB_HOST=SEU_IP # ex: 192.168.1.100 ou db.gade.com.br DB_PORT=5432 @@ -76,5 +98,32 @@ SMTP_DOMAIN=gade.com.br NOTIFICACAO_SECRET= # ── App ─────────────────────────────────────────────────────── -APP_HOST=localhost:3000 +# ⚠️ SÓ O HOST, sem "https://". O código monta os links como +# "https://#{APP_HOST}/motorista" (consolidacao_mailer.rb, +# notificacao_service.rb, gatilhos.rb): com o esquema aqui sai +# "https://https://..." e todo link de e-mail e de WhatsApp quebra. +# O docker-compose.yml já traz o host do ambiente como padrão — esta linha só +# é necessária para apontar para outro endereço. +APP_HOST=teste.reemtransportes.com.br APP_NAME=Reem Logística + +# Hosts extras aceitos além do APP_HOST, separados por vírgula (só vale com +# RAILS_ENV=production, onde o Rails checa o cabeçalho Host). +# Use quando o sistema também for acessado por IP:porta na rede interna — +# sem isso o Rails responde "Blocked hosts: :". +HOSTS_PERMITIDOS=100.75.222.23 + +# ── WhatsApp (ponte própria — sessão pareada por QR code) ────────────────── +# Token compartilhado entre o Rails e o container `whatsapp`. Qualquer string +# longa e aleatória: `openssl rand -hex 32`. Sem ele a ponte recusa TUDO. +WHATSAPP_TOKEN=troque_por_uma_string_aleatoria_longa +# URL da ponte dentro da rede do compose (não mexa, a menos que troque o nome +# do serviço no docker-compose.yml). +# (o nome antigo `BAILEYS_URL` ainda é aceito, para .env já em produção) +WHATSAPP_URL=http://whatsapp:3001 + +# ── Erros na tela ──────────────────────────────────────────────────────── +# Mostra a página de debug do Rails (parâmetros, SESSÃO, cookies, IP, trace). +# Deixe SEMPRE vazia/false em qualquer servidor: esse painel vai para a tela de +# quem provocou o erro. Ligue só na sua máquina, quando estiver depurando. +ERROS_DETALHADOS=false diff --git a/Dockerfile b/Dockerfile index f970493..5b1bd5b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,22 @@ FROM ruby:3.2.2-slim +# Fuso horário do container. +# +# POR QUE ISSO IMPORTA (caso real): a imagem sobe em UTC. O Rails até mostra a +# hora certa (`config.time_zone = "America/Sao_Paulo"`), mas TUDO que é do +# sistema operacional continuava 3h adiantado — timestamp de log, `date` nos +# scripts de bin/ e, o pior, o CRON: `every "*/30 8-18"` no config/schedule.rb +# rodava das 05h às 15h de Brasília, não das 08h às 18h. +# +# O cron do Debian lê `/etc/localtime`, não a variável TZ — por isso o symlink +# além do ENV. Os dois juntos cobrem processo Ruby e daemon de cron. +ENV TZ=America/Sao_Paulo +ENV DEBIAN_FRONTEND=noninteractive + # Dependências do sistema +# tzdata: explícito de propósito. O zoneinfo já vem na imagem hoje, mas se um +# rebuild futuro pegar uma base enxuta o symlink acima quebra em silêncio e a +# hora volta a ficar errada — que é exatamente o bug que estamos fechando. RUN apt-get update -qq && apt-get install -y \ build-essential \ libpq-dev \ @@ -10,6 +26,9 @@ RUN apt-get update -qq && apt-get install -y \ git \ libvips \ cron \ + tzdata \ + && ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime \ + && echo "$TZ" > /etc/timezone \ && rm -rf /var/lib/apt/lists/* # Diretório da app @@ -22,9 +41,14 @@ RUN bundle install --jobs 4 --retry 3 # Copia o restante do código COPY . . -# Pré-compila assets (em produção) -# RUN bundle exec rails assets:precompile +# Assets NÃO são pré-compilados aqui, e a linha comentada foi removida para +# ninguém "descomentar para resolver": o compose monta o projeto por cima +# (`volumes: - ".:/app"`), então o public/assets gerado na imagem some no boot. +# Quem pré-compila é bin/docker-boot, com o código que está de fato rodando. EXPOSE 3000 -CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"] +# O boot real (migrations, cron, servidor) mora em bin/docker-boot — ver os +# comentários lá. CMD aqui é só o fallback de quem roda a imagem sem o compose. +# (via `bash` — ver o motivo no docker-compose.yml) +CMD ["bash", "bin/docker-boot"] diff --git a/Erros/Action Controller_ Exception caught erro holerite com nqrcode.html b/Erros/Action Controller_ Exception caught erro holerite com nqrcode.html deleted file mode 100644 index aa790c3..0000000 --- a/Erros/Action Controller_ Exception caught erro holerite com nqrcode.html +++ /dev/null @@ -1,8856 +0,0 @@ - - - - - - - Action Controller: Exception caught - - - - - - -
-

- Prawn::Errors::IncompatibleStringEncoding - in ConsolidacoesController#gerar_pdf_holerite -

-
- -
-
-
Your document includes text that's not compatible with the Windows-1252 character set. -
If you need full UTF-8 support, use external fonts instead of PDF's built-in fonts. -
-
- - - - - - - - - - - - - - - - - - - - -
-
- Extracted source (around line #114): -
-
- - - - - -
-
-112
-113
-114
-115
-116
-117
-              
-
-
-
@pdf.fill_rounded_rectangle [0, @pdf.cursor], 250, 26, 5 -
@pdf.fill_color(pago ? 'FFFFFF' : '374151') -
@pdf.text_box texto, at: [12, @pdf.cursor - 8], width: 238, size: 10, style: :bold -
@pdf.fill_color '000000' -
@pdf.move_down 34 -
end -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Rails.root: /app

- -
- Application Trace | - Framework Trace | - Full Trace - - - - - - -
- - -

Exception Causes

- - - - - -

Request

-

Parameters:

{"motorista"=>"Bruno Corgozinho", "id"=>"9"}
-
- -
- - -
- -
- - -
- -

Response

-

Headers:

None
- -
- - - - diff --git a/Erros/Action Controller_ Exception caughtQuando clica na opção usuarios.html b/Erros/Action Controller_ Exception caughtQuando clica na opção usuarios.html deleted file mode 100644 index 0aef099..0000000 --- a/Erros/Action Controller_ Exception caughtQuando clica na opção usuarios.html +++ /dev/null @@ -1,5441 +0,0 @@ - - - - - - - Action Controller: Exception caught - - - - - - -
-

- NoMethodError in - Admin::Usuarios#index -

-
- -
-

- Showing /app/app/views/admin/usuarios/index.html.erb where line #60 raised: -

-
undefined method `badge_status_usuario' for #<ActionView::Base:0x00000000011f80>
- - -
-
- Extracted source (around line #61): -
-
- - - - - -
-
-59
-60
-61
-62
-63
-64
-              
-
-
-
</td> -
<td class="px-6 py-4"> -
'.freeze; @output_buffer.append=( badge_status_usuario(usuario.ativo?) ); @output_buffer.safe_append=' -
</td> -
<td class="px-6 py-4"> -
<div class="flex items-center justify-end gap-2 opacity-0 group-hover:opacity-100 transition-opacity"> -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - -

Rails.root: /app

- -
- Application Trace | - Framework Trace | - Full Trace - - - - - - -
- -

Request

-

Parameters:

None
- -
- - -
- -
- - -
- -

Response

-

Headers:

None
- -
- - - - diff --git a/Erros/Action Controller_ Exception caught_quando Cria uma consolidação.html b/Erros/Action Controller_ Exception caught_quando Cria uma consolidação.html deleted file mode 100644 index 2d59e8f..0000000 --- a/Erros/Action Controller_ Exception caught_quando Cria uma consolidação.html +++ /dev/null @@ -1,3987 +0,0 @@ - - - - - - - Action Controller: Exception caught - - - - - - -
-

- NoMethodError - in ConsolidacoesController#new -

-
- -
-
-
undefined method `new?' for #<ConsolidacaoPolicy:0x00007f710ab493f8 @user=#<User id: 1, email: "admin@gade.com", nome: "Administrador Gade", telefone: nil, pin_code: nil, role: "admin", ativo: true, tema_preferido: "dark", created_at: "2026-06-11 23:00:11.605256000 -0300", updated_at: "2026-06-11 23:00:11.605256000 -0300", login_token: nil>, @record=Consolidacao(id: integer, nome: string, data_inicio: date, data_fim: date, status: integer, valor_total: decimal, created_by: integer, finalizado_por: integer, finalizado_em: datetime, deleted_at: datetime, created_at: datetime, updated_at: datetime, route_ids: jsonb, arquivado_por: integer, arquivado_em: datetime)>
-
- - - - - - - - -
-
- Extracted source (around line #32): -
-
- - - - - -
-
-30
-31
-32
-33
-34
-35
-              
-
-
-
# GET /consolidacoes/new -
def new -
authorize Consolidacao -
@consolidacao = Consolidacao.new( -
data_inicio: Date.current.beginning_of_month, -
data_fim: Date.current -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Rails.root: /app

- -
- Application Trace | - Framework Trace | - Full Trace - - - - - - -
- - - - -

Request

-

Parameters:

None
- -
- - -
- -
- - -
- -

Response

-

Headers:

None
- -
- - - - diff --git a/Erros/Action Controller_ Exception caught_quando aperta as configuraçoes .html b/Erros/Action Controller_ Exception caught_quando aperta as configuraçoes .html deleted file mode 100644 index d75a32d..0000000 --- a/Erros/Action Controller_ Exception caught_quando aperta as configuraçoes .html +++ /dev/null @@ -1,4026 +0,0 @@ - - - - - - - Action Controller: Exception caught - - - - - - -
-

- NoMethodError - in Admin::ConfiguracoesController#index -

-
- -
-
-
undefined method `admin_ou_gerente?' for #<ConfiguracaoPolicy:0x00007efdbb16abb0 @user=#<User id: 1, email: "admin@gade.com", nome: "Administrador Gade", telefone: nil, pin_code: nil, role: "admin", ativo: true, tema_preferido: "dark", created_at: "2026-06-11 23:00:11.605256000 -0300", updated_at: "2026-06-11 23:00:11.605256000 -0300", login_token: nil>, @record=Configuracao(id: integer, chave: string, valor: string, descricao: string, updated_by: integer, created_at: datetime, updated_at: datetime)>
-
- - - - - -
-
- Extracted source (around line #4): -
-
- - - - - -
-
-2
-3
-4
-5
-6
-7
-              
-
-
-
class ConfiguracaoPolicy < ApplicationPolicy -
def index? -
admin_ou_gerente? -
end -
-
def edit? -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Rails.root: /app

- -
- Application Trace | - Framework Trace | - Full Trace - - - - - - -
- - - - -

Request

-

Parameters:

None
- -
- - -
- -
- - -
- -

Response

-

Headers:

None
- -
- - - - diff --git a/Erros/Action Controller_ Exception caught_quando aperta na parte de usuario.html b/Erros/Action Controller_ Exception caught_quando aperta na parte de usuario.html deleted file mode 100644 index 0cc889a..0000000 --- a/Erros/Action Controller_ Exception caught_quando aperta na parte de usuario.html +++ /dev/null @@ -1,4027 +0,0 @@ - - - - - - - Action Controller: Exception caught - - - - - - -
-

- NoMethodError - in Admin::UsuariosController#index -

-
- -
-
-
undefined method `admin_ou_gerente?' for #<UserPolicy:0x00007f710b57d3d8 @user=#<User id: 1, email: "admin@gade.com", nome: "Administrador Gade", telefone: nil, pin_code: nil, role: "admin", ativo: true, tema_preferido: "dark", created_at: "2026-06-11 23:00:11.605256000 -0300", updated_at: "2026-06-11 23:00:11.605256000 -0300", login_token: nil>, @record=User(id: integer, email: string, encrypted_password: string, reset_password_token: string, reset_password_sent_at: datetime, remember_created_at: datetime, nome: string, telefone: string, pin_code: string, role: integer, ativo: boolean, tema_preferido: string, created_at: datetime, updated_at: datetime, login_token: string, sign_in_count: integer, current_sign_in_at: datetime, last_sign_in_at: datetime, current_sign_in_ip: string, last_sign_in_ip: string, failed_attempts: integer, unlock_token: string, locked_at: datetime)>
-
- - - - - -
-
- Extracted source (around line #4): -
-
- - - - - -
-
-2
-3
-4
-5
-6
-7
-              
-
-
-
class UserPolicy < ApplicationPolicy -
def index? -
admin_ou_gerente? -
end -
-
def show? -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Rails.root: /app

- -
- Application Trace | - Framework Trace | - Full Trace - - - - - - -
- - - - -

Request

-

Parameters:

None
- -
- - -
- -
- - -
- -

Response

-

Headers:

None
- -
- - - - diff --git a/Erros/Action Controller_ Exception caught_quando aperta nos usuarios .html b/Erros/Action Controller_ Exception caught_quando aperta nos usuarios .html deleted file mode 100644 index 3f57202..0000000 --- a/Erros/Action Controller_ Exception caught_quando aperta nos usuarios .html +++ /dev/null @@ -1,5440 +0,0 @@ - - - - - - - Action Controller: Exception caught - - - - - - -
-

- NoMethodError in - Admin::Usuarios#index -

-
- -
-

- Showing /app/app/views/admin/usuarios/index.html.erb where line #57 raised: -

-
undefined method `badge_role' for #<ActionView::Base:0x0000000000fc80>
- - -
-
- Extracted source (around line #58): -
-
- - - - - -
-
-56
-57
-58
-59
-60
-61
-              
-
-
-
@output_buffer.safe_append=' </td> -
<td class="px-6 py-4"> -
'.freeze; @output_buffer.append=( badge_role(usuario.role) ); @output_buffer.safe_append=' -
</td> -
<td class="px-6 py-4"> -
'.freeze; @output_buffer.append=( badge_status_usuario(usuario.ativo?) ); @output_buffer.safe_append=' -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - -

Rails.root: /app

- -
- Application Trace | - Framework Trace | - Full Trace - - - - - - -
- -

Request

-

Parameters:

None
- -
- - -
- -
- - -
- -

Response

-

Headers:

None
- -
- - - - diff --git a/Erros/Action Controller_ Exception caught_quando aperta o botão de relatório individual.html b/Erros/Action Controller_ Exception caught_quando aperta o botão de relatório individual.html deleted file mode 100644 index d5cc393..0000000 --- a/Erros/Action Controller_ Exception caught_quando aperta o botão de relatório individual.html +++ /dev/null @@ -1,4148 +0,0 @@ - - - - - - - Action Controller: Exception caught - - - - - - -
-

- Pundit::NotDefinedError - in ConsolidacoesController#gerar_pdf_relatorio -

-
- -
-
-
unable to find policy `NilClassPolicy` for `nil`
-
- - - - - - - - - - - - -
-
- Extracted source (around line #116): -
-
- - - - - -
-
-114
-115
-116
-117
-118
-119
-              
-
-
-
# GET /consolidacoes/:id/gerar_pdf_relatorio?motorista=X -
def gerar_pdf_relatorio -
authorize @consolidacao, :show? -
motorista = params[:motorista] -
-
pdf = Pdf::RelatorioMotoristaPdf.new(consolidacao: @consolidacao, motorista: motorista) -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Rails.root: /app

- -
- Application Trace | - Framework Trace | - Full Trace - - - - - - -
- - - - -

Request

-

Parameters:

{"motorista"=>"Bruno Corgozinho", "id"=>"3"}
-
- -
- - -
- -
- - -
- -

Response

-

Headers:

None
- -
- - - - diff --git a/Erros/Action Controller_ Exception caught_quando aperta para modificar os usuario .html b/Erros/Action Controller_ Exception caught_quando aperta para modificar os usuario .html deleted file mode 100644 index 9129811..0000000 --- a/Erros/Action Controller_ Exception caught_quando aperta para modificar os usuario .html +++ /dev/null @@ -1,6176 +0,0 @@ - - - - - - - Action Controller: Exception caught - - - - - - -
-

- NameError in - Admin::Usuarios#edit -

-
- -
-

- Showing /app/app/views/admin/usuarios/_form.html.erb where line #47 raised: -

-
undefined local variable or method `role_options_for_select' for #<ActionView::Base:0x0000000000fb68>
- - -
-
- Extracted source (around line #48): -
-
- - - - - -
-
-46
-47
-48
-49
-50
-51
-              
-
-
-
'.freeze; @output_buffer.append=( f.label :role, 'Perfil de acesso', class: 'block text-sm font-medium text-gray-300 mb-1.5' ); @output_buffer.safe_append=' -
'.freeze; @output_buffer.append=( f.select :role, -
options_for_select(role_options_for_select, usuario.role), -
{}, -
class: 'w-full px-4 py-3 bg-[#0a0a0a] border border-white/10 rounded-xl text-white -
focus:outline-none focus:border-[#f97316] focus:ring-1 focus:ring-[#f97316] -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Trace of template inclusion: #<ActionView::Template app/views/admin/usuarios/edit.html.erb locals=[]>

- - -

Rails.root: /app

- -
- Application Trace | - Framework Trace | - Full Trace - - - - - - -
- -

Request

-

Parameters:

{"id"=>"1"}
-
- -
- - -
- -
- - -
- -

Response

-

Headers:

None
- -
- - - - diff --git a/Erros/Action Controller_ Exception caughtq_quando aperta para sair .html b/Erros/Action Controller_ Exception caughtq_quando aperta para sair .html deleted file mode 100644 index 9a90010..0000000 --- a/Erros/Action Controller_ Exception caughtq_quando aperta para sair .html +++ /dev/null @@ -1,2130 +0,0 @@ - - - - - - - Action Controller: Exception caught - - - - - - -
-

Routing Error

-
-
-

No route matches [GET] "/auth/logout"

- - -

Rails.root: /app

- -
- Application Trace | - Framework Trace | - Full Trace - -
- - -
- - - - -
- - -

- Routes -

- -

- Routes match in priority from top to bottom -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Helper - (Path / - Url) - HTTP VerbPathController#ActionSource Location
- new_user_session_path - - GET - - /auth/login(.:format) - -

users/sessions#new

-
-

devise (5.0.4) lib/devise/rails/routes.rb:378

-
- user_session_path - - POST - - /auth/login(.:format) - -

users/sessions#create

-
-

devise (5.0.4) lib/devise/rails/routes.rb:379

-
- destroy_user_session_path - - DELETE - - /auth/logout(.:format) - -

users/sessions#destroy

-
-

devise (5.0.4) lib/devise/rails/routes.rb:380

-
- new_user_password_path - - GET - - /auth/senha/new(.:format) - -

devise/passwords#new

-
-

devise (5.0.4) lib/devise/rails/routes.rb:385

-
- edit_user_password_path - - GET - - /auth/senha/edit(.:format) - -

devise/passwords#edit

-
-

devise (5.0.4) lib/devise/rails/routes.rb:385

-
- user_password_path - - PATCH - - /auth/senha(.:format) - -

devise/passwords#update

-
-

devise (5.0.4) lib/devise/rails/routes.rb:385

-
- - PUT - - /auth/senha(.:format) - -

devise/passwords#update

-
-

devise (5.0.4) lib/devise/rails/routes.rb:385

-
- - POST - - /auth/senha(.:format) - -

devise/passwords#create

-
-

devise (5.0.4) lib/devise/rails/routes.rb:385

-
- root_path - - GET - - / - -

dashboard#index

-
-

/app/config/routes.rb:13

-
- dashboard_path - - GET - - /dashboard(.:format) - -

dashboard#index

-
-

/app/config/routes.rb:16

-
- motorista_dashboard_path - - GET - - /motorista(.:format) - -

motorista/dashboard#index

-
-

/app/config/routes.rb:19

-
- motorista_login_path - - GET - - /motorista/login(.:format) - -

motorista/sessoes#new

-
-

/app/config/routes.rb:22

-
- - POST - - /motorista/login(.:format) - -

motorista/sessoes#create

-
-

/app/config/routes.rb:23

-
- motorista_acesso_qr_path - - GET - - /motorista/acesso/:token(.:format) - -

motorista/sessoes#acesso_qr

-
-

/app/config/routes.rb:24

-
- wizard_consolidacao_path - - GET - - /consolidacoes/:id/wizard(.:format) - -

consolidacoes#wizard

-
-

/app/config/routes.rb:29

-
- finalizar_consolidacao_path - - POST - - /consolidacoes/:id/finalizar(.:format) - -

consolidacoes#finalizar

-
-

/app/config/routes.rb:30

-
- arquivar_consolidacao_path - - POST - - /consolidacoes/:id/arquivar(.:format) - -

consolidacoes#arquivar

-
-

/app/config/routes.rb:31

-
- preview_holerite_consolidacao_path - - GET - - /consolidacoes/:id/preview_holerite(.:format) - -

consolidacoes#preview_holerite

-
-

/app/config/routes.rb:32

-
- gerar_pdf_relatorio_consolidacao_path - - GET - - /consolidacoes/:id/gerar_pdf_relatorio(.:format) - -

consolidacoes#gerar_pdf_relatorio

-
-

/app/config/routes.rb:33

-
- gerar_pdf_holerite_consolidacao_path - - GET - - /consolidacoes/:id/gerar_pdf_holerite(.:format) - -

consolidacoes#gerar_pdf_holerite

-
-

/app/config/routes.rb:34

-
- validar_consolidacao_consolidacao_entregas_path - - GET - - /consolidacoes/:consolidacao_id/consolidacao_entregas/validar(.:format) - -

consolidacao_entregas#validar

-
-

/app/config/routes.rb:39

-
- classificar_consolidacao_consolidacao_entregas_path - - POST - - /consolidacoes/:consolidacao_id/consolidacao_entregas/classificar(.:format) - -

consolidacao_entregas#classificar

-
-

/app/config/routes.rb:40

-
- classificar_em_massa_consolidacao_consolidacao_entregas_path - - POST - - /consolidacoes/:consolidacao_id/consolidacao_entregas/classificar_em_massa(.:format) - -

consolidacao_entregas#classificar_em_massa

-
-

/app/config/routes.rb:41

-
- revisar_consolidacao_consolidacao_entregas_path - - GET - - /consolidacoes/:consolidacao_id/consolidacao_entregas/revisar(.:format) - -

consolidacao_entregas#revisar

-
-

/app/config/routes.rb:42

-
- consolidacoes_path - - GET - - /consolidacoes(.:format) - -

consolidacoes#index

-
-

/app/config/routes.rb:27

-
- - POST - - /consolidacoes(.:format) - -

consolidacoes#create

-
-

/app/config/routes.rb:27

-
- new_consolidacao_path - - GET - - /consolidacoes/new(.:format) - -

consolidacoes#new

-
-

/app/config/routes.rb:27

-
- edit_consolidacao_path - - GET - - /consolidacoes/:id/edit(.:format) - -

consolidacoes#edit

-
-

/app/config/routes.rb:27

-
- consolidacao_path - - GET - - /consolidacoes/:id(.:format) - -

consolidacoes#show

-
-

/app/config/routes.rb:27

-
- - PATCH - - /consolidacoes/:id(.:format) - -

consolidacoes#update

-
-

/app/config/routes.rb:27

-
- - PUT - - /consolidacoes/:id(.:format) - -

consolidacoes#update

-
-

/app/config/routes.rb:27

-
- - DELETE - - /consolidacoes/:id(.:format) - -

consolidacoes#destroy

-
-

/app/config/routes.rb:27

-
- toggle_ativo_admin_usuario_path - - PATCH - - /admin/usuarios/:id/toggle_ativo(.:format) - -

admin/usuarios#toggle_ativo

-
-

/app/config/routes.rb:50

-
- admin_usuarios_path - - GET - - /admin/usuarios(.:format) - -

admin/usuarios#index

-
-

/app/config/routes.rb:49

-
- - POST - - /admin/usuarios(.:format) - -

admin/usuarios#create

-
-

/app/config/routes.rb:49

-
- new_admin_usuario_path - - GET - - /admin/usuarios/new(.:format) - -

admin/usuarios#new

-
-

/app/config/routes.rb:49

-
- edit_admin_usuario_path - - GET - - /admin/usuarios/:id/edit(.:format) - -

admin/usuarios#edit

-
-

/app/config/routes.rb:49

-
- admin_usuario_path - - PATCH - - /admin/usuarios/:id(.:format) - -

admin/usuarios#update

-
-

/app/config/routes.rb:49

-
- - PUT - - /admin/usuarios/:id(.:format) - -

admin/usuarios#update

-
-

/app/config/routes.rb:49

-
- - DELETE - - /admin/usuarios/:id(.:format) - -

admin/usuarios#destroy

-
-

/app/config/routes.rb:49

-
- toggle_tema_admin_configuracoes_path - - POST - - /admin/configuracoes/toggle_tema(.:format) - -

admin/configuracoes#toggle_tema

-
-

/app/config/routes.rb:53

-
- admin_configuracoes_path - - GET - - /admin/configuracoes(.:format) - -

admin/configuracoes#index

-
-

/app/config/routes.rb:52

-
- edit_admin_configuracao_path - - GET - - /admin/configuracoes/:id/edit(.:format) - -

admin/configuracoes#edit

-
-

/app/config/routes.rb:52

-
- admin_configuracao_path - - PATCH - - /admin/configuracoes/:id(.:format) - -

admin/configuracoes#update

-
-

/app/config/routes.rb:52

-
- - PUT - - /admin/configuracoes/:id(.:format) - -

admin/configuracoes#update

-
-

/app/config/routes.rb:52

-
- admin_auditoria_logs_path - - GET - - /admin/auditoria_logs(.:format) - -

admin/auditoria_logs#index

-
-

/app/config/routes.rb:55

-
- api_v1_dashboard_metricas_path - - GET - - /api/v1/dashboard/metricas(.:format) - -

api/v1/dashboard#metricas

-
-

/app/config/routes.rb:61

-
- health_path - - GET - - /health(.:format) - -

Inline handler (Proc/Lambda)

-
-

/app/config/routes.rb:66

-
- turbo_recede_historical_location_path - - GET - - /recede_historical_location(.:format) - -

turbo/native/navigation#recede

-
-

turbo-rails (2.0.23) config/routes.rb:2

-
- turbo_resume_historical_location_path - - GET - - /resume_historical_location(.:format) - -

turbo/native/navigation#resume

-
-

turbo-rails (2.0.23) config/routes.rb:3

-
- turbo_refresh_historical_location_path - - GET - - /refresh_historical_location(.:format) - -

turbo/native/navigation#refresh

-
-

turbo-rails (2.0.23) config/routes.rb:4

-
- rails_postmark_inbound_emails_path - - POST - - /rails/action_mailbox/postmark/inbound_emails(.:format) - -

action_mailbox/ingresses/postmark/inbound_emails#create

-
-

actionmailbox (7.1.6) config/routes.rb:5

-
- rails_relay_inbound_emails_path - - POST - - /rails/action_mailbox/relay/inbound_emails(.:format) - -

action_mailbox/ingresses/relay/inbound_emails#create

-
-

actionmailbox (7.1.6) config/routes.rb:6

-
- rails_sendgrid_inbound_emails_path - - POST - - /rails/action_mailbox/sendgrid/inbound_emails(.:format) - -

action_mailbox/ingresses/sendgrid/inbound_emails#create

-
-

actionmailbox (7.1.6) config/routes.rb:7

-
- rails_mandrill_inbound_health_check_path - - GET - - /rails/action_mailbox/mandrill/inbound_emails(.:format) - -

action_mailbox/ingresses/mandrill/inbound_emails#health_check

-
-

actionmailbox (7.1.6) config/routes.rb:10

-
- rails_mandrill_inbound_emails_path - - POST - - /rails/action_mailbox/mandrill/inbound_emails(.:format) - -

action_mailbox/ingresses/mandrill/inbound_emails#create

-
-

actionmailbox (7.1.6) config/routes.rb:11

-
- rails_mailgun_inbound_emails_path - - POST - - /rails/action_mailbox/mailgun/inbound_emails/mime(.:format) - -

action_mailbox/ingresses/mailgun/inbound_emails#create

-
-

actionmailbox (7.1.6) config/routes.rb:14

-
- rails_conductor_inbound_emails_path - - GET - - /rails/conductor/action_mailbox/inbound_emails(.:format) - -

rails/conductor/action_mailbox/inbound_emails#index

-
-

actionmailbox (7.1.6) config/routes.rb:19

-
- - POST - - /rails/conductor/action_mailbox/inbound_emails(.:format) - -

rails/conductor/action_mailbox/inbound_emails#create

-
-

actionmailbox (7.1.6) config/routes.rb:19

-
- new_rails_conductor_inbound_email_path - - GET - - /rails/conductor/action_mailbox/inbound_emails/new(.:format) - -

rails/conductor/action_mailbox/inbound_emails#new

-
-

actionmailbox (7.1.6) config/routes.rb:19

-
- rails_conductor_inbound_email_path - - GET - - /rails/conductor/action_mailbox/inbound_emails/:id(.:format) - -

rails/conductor/action_mailbox/inbound_emails#show

-
-

actionmailbox (7.1.6) config/routes.rb:19

-
- new_rails_conductor_inbound_email_source_path - - GET - - /rails/conductor/action_mailbox/inbound_emails/sources/new(.:format) - -

rails/conductor/action_mailbox/inbound_emails/sources#new

-
-

actionmailbox (7.1.6) config/routes.rb:20

-
- rails_conductor_inbound_email_sources_path - - POST - - /rails/conductor/action_mailbox/inbound_emails/sources(.:format) - -

rails/conductor/action_mailbox/inbound_emails/sources#create

-
-

actionmailbox (7.1.6) config/routes.rb:21

-
- rails_conductor_inbound_email_reroute_path - - POST - - /rails/conductor/action_mailbox/:inbound_email_id/reroute(.:format) - -

rails/conductor/action_mailbox/reroutes#create

-
-

actionmailbox (7.1.6) config/routes.rb:23

-
- rails_conductor_inbound_email_incinerate_path - - POST - - /rails/conductor/action_mailbox/:inbound_email_id/incinerate(.:format) - -

rails/conductor/action_mailbox/incinerates#create

-
-

actionmailbox (7.1.6) config/routes.rb:24

-
- rails_service_blob_path - - GET - - /rails/active_storage/blobs/redirect/:signed_id/*filename(.:format) - -

active_storage/blobs/redirect#show

-
-

activestorage (7.1.6) config/routes.rb:5

-
- rails_service_blob_proxy_path - - GET - - /rails/active_storage/blobs/proxy/:signed_id/*filename(.:format) - -

active_storage/blobs/proxy#show

-
-

activestorage (7.1.6) config/routes.rb:6

-
- - GET - - /rails/active_storage/blobs/:signed_id/*filename(.:format) - -

active_storage/blobs/redirect#show

-
-

activestorage (7.1.6) config/routes.rb:7

-
- rails_blob_representation_path - - GET - - /rails/active_storage/representations/redirect/:signed_blob_id/:variation_key/*filename(.:format) - -

active_storage/representations/redirect#show

-
-

activestorage (7.1.6) config/routes.rb:9

-
- rails_blob_representation_proxy_path - - GET - - /rails/active_storage/representations/proxy/:signed_blob_id/:variation_key/*filename(.:format) - -

active_storage/representations/proxy#show

-
-

activestorage (7.1.6) config/routes.rb:10

-
- - GET - - /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) - -

active_storage/representations/redirect#show

-
-

activestorage (7.1.6) config/routes.rb:11

-
- rails_disk_service_path - - GET - - /rails/active_storage/disk/:encoded_key/*filename(.:format) - -

active_storage/disk#show

-
-

activestorage (7.1.6) config/routes.rb:13

-
- update_rails_disk_service_path - - PUT - - /rails/active_storage/disk/:encoded_token(.:format) - -

active_storage/disk#update

-
-

activestorage (7.1.6) config/routes.rb:14

-
- rails_direct_uploads_path - - POST - - /rails/active_storage/direct_uploads(.:format) - -

active_storage/direct_uploads#create

-
-

activestorage (7.1.6) config/routes.rb:15

-
- - - - -

Request

-

Parameters:

None
- -
- - -
- -
- - -
- -

Response

-

Headers:

None
- -
- - - - diff --git a/Erros/Action Controller_ Exception caughtquando aperta o botçao de gerar holerite.html b/Erros/Action Controller_ Exception caughtquando aperta o botçao de gerar holerite.html deleted file mode 100644 index 58bb3d2..0000000 --- a/Erros/Action Controller_ Exception caughtquando aperta o botçao de gerar holerite.html +++ /dev/null @@ -1,4148 +0,0 @@ - - - - - - - Action Controller: Exception caught - - - - - - -
-

- Pundit::NotDefinedError - in ConsolidacoesController#gerar_pdf_holerite -

-
- -
-
-
unable to find policy `NilClassPolicy` for `nil`
-
- - - - - - - - - - - - -
-
- Extracted source (around line #130): -
-
- - - - - -
-
-128
-129
-130
-131
-132
-133
-              
-
-
-
# GET /consolidacoes/:id/gerar_pdf_holerite?motorista=X -
def gerar_pdf_holerite -
authorize @consolidacao, :show? -
motorista = params[:motorista] -
user_mot = User.motorista.find_by('LOWER(nome) = ?', motorista.to_s.downcase) -
user_mot&.regenerar_login_token! if user_mot&.login_token.blank? -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Rails.root: /app

- -
- Application Trace | - Framework Trace | - Full Trace - - - - - - -
- - - - -

Request

-

Parameters:

{"motorista"=>"Bruno Corgozinho", "id"=>"3"}
-
- -
- - -
- -
- - -
- -

Response

-

Headers:

None
- -
- - - - diff --git a/Erros/Action Controller_ Exception caughtquando termina de criar o usuario motorista.html b/Erros/Action Controller_ Exception caughtquando termina de criar o usuario motorista.html deleted file mode 100644 index 92d39ef..0000000 --- a/Erros/Action Controller_ Exception caughtquando termina de criar o usuario motorista.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - - Reem Logística - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
G
- Reem Logística -
-
-
-
- - - - - - -
-
- -
-

- Novo Usuário -

-

- Preencha os dados para criar um novo acesso -

-
- - - - -
- - -
-
- - -
- -
- - -
- -
-
- -

Usuários inativos não conseguem fazer login

-
- -
-
- -
-
-

Credenciais de acesso

-
-
- - -
-
- - -
-
- - -
-
-
-
- - - -
- Cancelar - -
-
- - - - -
- - - - - - diff --git a/Erros/holerite_carlos-matheus-pimentel_10-1.pdf b/Erros/holerite_carlos-matheus-pimentel_10-1.pdf deleted file mode 100644 index 2e16bc1..0000000 --- a/Erros/holerite_carlos-matheus-pimentel_10-1.pdf +++ /dev/null @@ -1,2280 +0,0 @@ -%PDF-1.3 -% -1 0 obj -<< /Creator -/Producer ->> -endobj -2 0 obj -<< /Pages 3 0 R -/Type /Catalog ->> -endobj -3 0 obj -<< /Count 1 -/Kids [5 0 R] -/Type /Pages ->> -endobj -4 0 obj -<< /Length 13502 ->> -stream -q -/DeviceRGB cs -0.03922 0.03922 0.03922 scn -0.0 771.89 595.28 70.0 re -f -0.97647 0.45098 0.08627 scn -0.0 771.89 8.0 70.0 re -f -1.0 1.0 1.0 scn - -BT -50.0 806.71 Td -/F2.0 20 Tf -[<5245454d205452414e53504f52> 44.92188 <5445>] TJ -ET - -0.97647 0.45098 0.08627 scn - -BT -50.0 790.3 Td -/F1.0 10 Tf -[<53697374656d6120646520436f6e7472> 21.97266 <6f6c6520646520437573746f73204c> 17.57812 <6f6792737469636f73>] TJ -ET - -0.0 0.0 0.0 scn -0.97647 0.45098 0.08627 scn - -BT -40.0 723.023 Td -/F2.0 13 Tf -[<484f4c45524954452044452050> 91.79688 <4147414d454e544f20d120454e545245474153>] TJ -ET - -/DeviceRGB CS -0.97647 0.45098 0.08627 SCN -40.0 717.303 m -555.28 717.303 l -S -0.0 0.0 0.0 scn -0.95294 0.95686 0.96471 scn -40.0 689.313 120.0 19.99 re -f -0.0 0.0 0.0 scn -0.95294 0.95686 0.96471 scn -40.0 669.323 120.0 19.99 re -f -0.0 0.0 0.0 scn -0.95294 0.95686 0.96471 scn -40.0 649.333 120.0 19.99 re -f -0.0 0.0 0.0 scn -0.95294 0.95686 0.96471 scn -40.0 629.343 120.0 19.99 re -f -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -40.0 709.303 m -160.0 709.303 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 689.313 m -160.0 689.313 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 709.803 m -40.0 688.813 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 709.803 m -160.0 688.813 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 695.073 Td -/F2.0 10 Tf -<4d6f746f7269737461> Tj -ET - -1 w -0.0 0.0 0.0 SCN -160.0 709.303 m -555.28 709.303 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 689.313 m -555.28 689.313 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 709.803 m -160.0 688.813 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 709.803 m -555.28 688.813 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -168.0 695.073 Td -/F1.0 10 Tf -[<4361726c6f73204d6174686575732050> 21.97266 <696d656e74656c>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -40.0 689.313 m -160.0 689.313 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 669.323 m -160.0 669.323 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 689.813 m -40.0 668.823 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 689.813 m -160.0 668.823 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 675.083 Td -/F2.0 10 Tf -<436f6e736f6c6964618d8b6f> Tj -ET - -1 w -0.0 0.0 0.0 SCN -160.0 689.313 m -555.28 689.313 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 669.323 m -555.28 669.323 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 689.813 m -160.0 668.823 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 689.813 m -555.28 668.823 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -168.0 675.083 Td -/F1.0 10 Tf -[<5562732053756c204c> 17.57812 <65737465204d6169203230323620204361726c6f73>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -40.0 669.323 m -160.0 669.323 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 649.333 m -160.0 649.333 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 669.823 m -40.0 648.833 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 669.823 m -160.0 648.833 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 655.093 Td -/F2.0 10 Tf -<506572926f646f> Tj -ET - -1 w -0.0 0.0 0.0 SCN -160.0 669.323 m -555.28 669.323 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 649.333 m -555.28 649.333 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 669.823 m -160.0 648.833 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 669.823 m -555.28 648.833 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -168.0 655.093 Td -/F1.0 10 Tf -<30312f30352f3230323620612032392f30352f32303236> Tj -ET - -1 w -0.0 0.0 0.0 SCN -40.0 649.333 m -160.0 649.333 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 629.343 m -160.0 629.343 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 649.833 m -40.0 628.843 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 649.833 m -160.0 628.843 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 635.103 Td -/F2.0 10 Tf -<456d6973738b6f> Tj -ET - -1 w -0.0 0.0 0.0 SCN -160.0 649.333 m -555.28 649.333 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 629.343 m -555.28 629.343 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -160.0 649.833 m -160.0 628.843 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 649.833 m -555.28 628.843 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -168.0 635.103 Td -/F1.0 10 Tf -<31382f30362f32303236> Tj -ET - -0.13333 0.77255 0.36863 scn -45.0 619.343 m -285.0 619.343 l -287.76142 619.343 290.0 617.10442 290.0 614.343 c -290.0 598.343 l -290.0 595.58158 287.76142 593.343 285.0 593.343 c -45.0 593.343 l -42.23858 593.343 40.0 595.58158 40.0 598.343 c -40.0 614.343 l -40.0 617.10442 42.23858 619.343 45.0 619.343 c -h -f -1.0 1.0 1.0 scn - -BT -52.0 603.753 Td -/F2.1 10 Tf -<2120> Tj -/F2.0 10 Tf -[<50> 91.79688 <41474f20656d2031372f30362f3230323620e120506978>] TJ -ET - -0.0 0.0 0.0 scn -0.97647 0.45098 0.08627 scn - -BT -40.0 563.476 Td -/F2.0 13 Tf -[<50524f> 26.85547 <56454e544f53204520444553434f4e544f53>] TJ -ET - -0.97647 0.45098 0.08627 SCN -40.0 557.756 m -555.28 557.756 l -S -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -40.0 529.766 150.81161 19.99 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -190.81161 529.766 100.23675 19.99 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -291.04837 529.766 121.60214 19.99 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -412.65051 529.766 142.62949 19.99 re -f -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -40.0 549.756 m -190.81161 549.756 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 529.766 m -190.81161 529.766 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 550.256 m -40.0 529.266 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 550.256 m -190.81161 529.266 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -48.0 535.526 Td -/F2.0 10 Tf -<4465736372698d8b6f> Tj -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -190.81161 549.756 m -291.04837 549.756 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 529.766 m -291.04837 529.766 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 550.256 m -190.81161 529.266 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 550.256 m -291.04837 529.266 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -263.61837 535.526 Td -/F2.0 10 Tf -<517464> Tj -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -291.04837 549.756 m -412.65051 549.756 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 529.766 m -412.65051 529.766 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 550.256 m -291.04837 529.266 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 550.256 m -412.65051 529.266 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -378.43051 535.526 Td -/F2.0 10 Tf -<556e69742e> Tj -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -412.65051 549.756 m -555.28 549.756 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 529.766 m -555.28 529.766 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 550.256 m -412.65051 529.266 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 550.256 m -555.28 529.266 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -519.13688 535.526 Td -/F2.0 10 Tf -[<56> 54.6875 <616c6f72>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -40.0 529.766 m -190.81161 529.766 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 509.776 m -190.81161 509.776 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 530.266 m -40.0 509.276 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 530.266 m -190.81161 509.276 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 515.536 Td -/F1.0 10 Tf -[<456e7472> 21.97266 <656761204e6f72> 17.57812 <6d616c>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -190.81161 529.766 m -291.04837 529.766 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 509.776 m -291.04837 509.776 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 530.266 m -190.81161 509.276 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 530.266 m -291.04837 509.276 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -264.96837 515.536 Td -/F1.0 10 Tf -<313036> Tj -ET - -1 w -0.0 0.0 0.0 SCN -291.04837 529.766 m -412.65051 529.766 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 509.776 m -412.65051 509.776 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 530.266 m -291.04837 509.276 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 530.266 m -412.65051 509.276 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -360.57051 515.536 Td -/F1.0 10 Tf -<52242031352c3030> Tj -ET - -1 w -0.0 0.0 0.0 SCN -412.65051 529.766 m -555.28 529.766 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 509.776 m -555.28 509.776 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 530.266 m -412.65051 509.276 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 530.266 m -555.28 509.276 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -478.94 515.536 Td -/F1.0 10 Tf -<2b20522420313539302c3030> Tj -ET - -1 w -0.0 0.0 0.0 SCN -40.0 509.776 m -190.81161 509.776 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 489.786 m -190.81161 489.786 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 510.276 m -40.0 489.286 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 510.276 m -190.81161 489.286 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 495.546 Td -/F1.0 10 Tf -[<52> 44.92188 <65746972616461>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -190.81161 509.776 m -291.04837 509.776 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 489.786 m -291.04837 489.786 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 510.276 m -190.81161 489.286 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 510.276 m -291.04837 489.286 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -271.32837 495.546 Td -/F1.0 10 Tf -<3131> Tj -ET - -1 w -0.0 0.0 0.0 SCN -291.04837 509.776 m -412.65051 509.776 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 489.786 m -412.65051 489.786 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 510.276 m -291.04837 489.286 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 510.276 m -412.65051 489.286 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -360.57051 495.546 Td -/F1.0 10 Tf -<52242032302c3030> Tj -ET - -1 w -0.0 0.0 0.0 SCN -412.65051 509.776 m -555.28 509.776 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 489.786 m -555.28 489.786 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 510.276 m -412.65051 489.286 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 510.276 m -555.28 489.286 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -485.3 495.546 Td -/F1.0 10 Tf -<2b205224203232302c3030> Tj -ET - -1 w -0.0 0.0 0.0 SCN -40.0 489.786 m -190.81161 489.786 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 469.796 m -190.81161 469.796 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 490.286 m -40.0 469.296 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 490.286 m -190.81161 469.296 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 475.556 Td -/F1.0 10 Tf -<42996e7573> Tj -ET - -1 w -0.0 0.0 0.0 SCN -190.81161 489.786 m -291.04837 489.786 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 469.796 m -291.04837 469.796 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 490.286 m -190.81161 469.296 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 490.286 m -291.04837 469.296 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -277.68837 475.556 Td -/F1.0 10 Tf -<34> Tj -ET - -1 w -0.0 0.0 0.0 SCN -291.04837 489.786 m -412.65051 489.786 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 469.796 m -412.65051 469.796 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 490.286 m -291.04837 469.296 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 490.286 m -412.65051 469.296 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -366.93051 475.556 Td -/F1.0 10 Tf -<522420352c3030> Tj -ET - -1 w -0.0 0.0 0.0 SCN -412.65051 489.786 m -555.28 489.786 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 469.796 m -555.28 469.796 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 490.286 m -412.65051 469.296 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 490.286 m -555.28 469.296 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -491.66 475.556 Td -/F1.0 10 Tf -<2b2052242032302c3030> Tj -ET - -1 w -0.0 0.0 0.0 SCN -40.0 469.796 m -190.81161 469.796 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 449.806 m -190.81161 449.806 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 470.296 m -40.0 449.306 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 470.296 m -190.81161 449.306 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 455.566 Td -/F1.0 10 Tf -<446573636f6e746f> Tj -ET - -1 w -0.0 0.0 0.0 SCN -190.81161 469.796 m -291.04837 469.796 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 449.806 m -291.04837 449.806 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -190.81161 470.296 m -190.81161 449.306 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 470.296 m -291.04837 449.306 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -271.32837 455.566 Td -/F1.0 10 Tf -<3131> Tj -ET - -1 w -0.0 0.0 0.0 SCN -291.04837 469.796 m -412.65051 469.796 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 449.806 m -412.65051 449.806 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -291.04837 470.296 m -291.04837 449.306 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 470.296 m -412.65051 449.306 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -360.57051 455.566 Td -/F1.0 10 Tf -<52242031352c3030> Tj -ET - -1 w -0.0 0.0 0.0 SCN -412.65051 469.796 m -555.28 469.796 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 449.806 m -555.28 449.806 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -412.65051 470.296 m -412.65051 449.306 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 470.296 m -555.28 449.306 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -490.07 455.566 Td -/F1.0 10 Tf -<2d205224203136352c3030> Tj -ET - -0.97647 0.45098 0.08627 scn -48.0 437.806 m -547.28 437.806 l -551.69828 437.806 555.28 434.22428 555.28 429.806 c -555.28 395.806 l -555.28 391.38772 551.69828 387.806 547.28 387.806 c -48.0 387.806 l -43.58172 387.806 40.0 391.38772 40.0 395.806 c -40.0 429.806 l -40.0 434.22428 43.58172 437.806 48.0 437.806 c -h -f -0.0 0.0 0.0 scn - -BT -56.0 420.216 Td -/F2.0 10 Tf -[<56> 67.87109 <414c> 35.64453 <4f52204cea515549444f20412052454345424552>] TJ -ET - - -BT -56.0 397.108 Td -/F2.0 22 Tf -<522420313636352c3030> Tj -ET - -0.41961 0.44706 0.50196 scn - -BT -40.0 374.975 Td -/F1.0 9 Tf -[<54> 169.92188 <6f74616c20646520656e7472> 21.97266 <656761733a20313332>] TJ -ET - - -BT -40.0 364.184 Td -/F1.0 9 Tf -[<56> 77.63672 <659263756c6f73206174656e6469646f733a20474144455f3030362c20474144455f3031312c20474144455f3035312c20474144455f303434>] TJ -ET - -0.0 0.0 0.0 scn -0.0 0.0 0.0 SCN -0.7 w -40.0 320.224 m -277.64 320.224 l -S -317.64 320.224 m -555.28 320.224 l -S -0.0 0.0 0.0 scn - -BT -95.532 305.393 Td -/F2.0 9 Tf -<4361726c6f73204d6174686575732050696d656e74656c> Tj -ET - - -BT -393.20988 305.393 Td -/F2.0 9 Tf -[<5265656d2054> 109.86328 <72616e73706f727465>] TJ -ET - -0.41961 0.44706 0.50196 scn - -BT -111.376 292.152 Td -/F1.0 8 Tf -<417373696e617475726120646f204d6f746f7269737461> Tj -ET - - -BT -379.55831 292.152 Td -/F1.0 8 Tf -[<417373696e617475726120646f2041> 17.57812 <646d696e6973747261646f72>] TJ -ET - -0.0 0.0 0.0 scn -/Stamp1 Do -Q - -endstream -endobj -5 0 obj -<< /ArtBox [0 0 595.28 841.89] -/BleedBox [0 0 595.28 841.89] -/Contents 4 0 R -/CropBox [0 0 595.28 841.89] -/MediaBox [0 0 595.28 841.89] -/Parent 3 0 R -/Resources << /Font << /F1.0 7 0 R -/F2.0 6 0 R -/F2.1 8 0 R ->> -/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/XObject << /Stamp1 9 0 R ->> ->> -/TrimBox [0 0 595.28 841.89] -/Type /Page ->> -endobj -6 0 obj -<< /BaseFont /80f3e1+DejaVuSans-Bold -/FirstChar 32 -/FontDescriptor 11 0 R -/LastChar 234 -/Subtype /TrueType -/ToUnicode 12 0 R -/Type /Font -/Widths 13 0 R ->> -endobj -7 0 obj -<< /BaseFont /916dd0+DejaVuSans -/FirstChar 32 -/FontDescriptor 15 0 R -/LastChar 225 -/Subtype /TrueType -/ToUnicode 16 0 R -/Type /Font -/Widths 17 0 R ->> -endobj -8 0 obj -<< /BaseFont /1a10e1+DejaVuSans-Bold -/FirstChar 32 -/FontDescriptor 19 0 R -/LastChar 33 -/Subtype /TrueType -/ToUnicode 20 0 R -/Type /Font -/Widths 21 0 R ->> -endobj -9 0 obj -<< /BBox [0 0 595.28 841.89] -/Length 369 -/Resources << /Font << /F1.0 7 0 R ->> ->> -/Subtype /Form -/Type /XObject ->> -stream -q -/DeviceRGB cs -0.0 0.0 0.0 scn -/DeviceRGB CS -0.0 0.0 0.0 SCN -0.7 w -0 J -0 j -[] 0 d -/DeviceRGB cs -0.41961 0.44706 0.50196 scn - -BT -155.96989 29.928 Td -/F1.0 8 Tf -[<47657261646f20656d2031382f30362f323032362032303a323320e12052> 44.92188 <65656d2054> 146.97266 <72616e73706f72746520d120646f63756d656e746f20696e746572> 17.57812 <6e6f>] TJ -ET - -/DeviceRGB cs -0.0 0.0 0.0 scn -Q - -endstream -endobj -10 0 obj -<< /Length 27924 -/Length1 27924 ->> -stream -`OS/2k!hVcmap(ccvt >1 Tfpgm[kgaspm glyf!™y head&LK6hhea S$$hmtx&kloca^dvmaxpEH name./,,G}G - -@ -2 -d۠d%%%   %ё%Д #&̑ɻ]ɻɀ@%]@%dĐ::2  }& -@ ]%]@..@   K%%%2 -~}|{zywvwvututsr}qpo,o,nmlkjihc h2gf2ed -ed -d@cb -c b -a`a``_ -^]\\[Z[ZZYXWV@VUTSRQRQQPOPONONMLKLKJKJIJIHGFGFEDCDCBA%BAA%@?@?>?>=< =< ;d:987656%54554 - 4432 33@2 10100/ .-,:-,%,:+d*d)(''& %$#@+$#" "!!@  -%@ K}K%%dd   2 -    -  -@  - -@d  d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++f3f=ffTbfTfmf3bq%fHZfm99Xm=fuff9{{X3fLfLJ#DDf?;Pw -/X#/553X -sf+j-j!f#^`3B3\fy```{j\{`bXP1L`%!JJ7{'}3Xy9bs&&&>l.\L~6R0z(V t - -b - - - ^ 6 r  x : -(Rff&&/10!%!!fsr)#*1s@? -%$ + ,#,, (/($ +/ 2<<991/99999990#.''.546?3.'>54&}osy!dede GUNWWP-.);?7* "*/(BE5;CBBDCm9@ 10!#hdu91/0!!h}B/99103#mb/ #@  10&#"326! ! i||jj|{j@'&@mstm -(@  1/20!%!!!T[nT -HH5@)% K TX8Y9991/2990KSX9Y"@&**"""555BJFF]]!!>54&#">3 N!IFuZzz )~B~DiMLH+-zӱ=@"  " -190!!>3 !"&'32654&#"v,Y00{zaSl 12/FFuv+-# $7@ "% %$%190"32654&.#">32! !2eeeefeev_PB[uEgჃ-+11ir E@%91/0KSXY"]@ &5F]!!!e'1 -' -@@ - -  - -% - -   Բ]91/<90KSXY"@ -/ -V -f - t - - - - - - - -  %* IFGH XYVWhifg` t{zu{t      /]]!!!!!F_}))}+%R P@%    !299991/90@ ""/"P"]2654&+2654&+)! [^^[tutuH|B7fPNMQsbcaay$ռmf\;@    - +21990/_]%# !2.#"3267\j}Lu}jksskR78ef87IDDI9.@  --. 99991/0P]32654&#! )=TMwiffixjq#ateeta 0@ -  21/0 P p ]!!!!!!rgfK@%    1 3/-+19990_]%# !2.#"3267#!ʥLy}|@ -  221/<<0@P ` p -]!!!!!!89+y=,KTKT[X@8Y1/0@P]!!+@ 1/0!!!N9 @3666 - 6 - - % -   -1 -1 91/<290KSXY"]@f    -+?HOLL -WYY -hoo -  -*%:5O@GVY Phgej ` ]]! !!#!TV+D% |@66%11 -991/<2990KSXY"]@4 - 8GJVYP gh` >3IO@UZfi ]]!!!!mR+ff 2@  -7-+10@ /?]"3254 ! f°±hhgddjk -1@   - 299991/0]! !#!32654&#1pzzp_mddlffb@  - - -7-+999190@,  '/V S f ` w w p  Y Y YXj i x ]]# ! !"3254fgk-¾lkh\@2% -   -   29991/<9990KSX9Y"]@66EEVVPee`]2654&+!! !.#yiiyL'O}@f7q^?ZgfX֔-XspR-'@*% - %( - "(999919990@Tp)9999 JJJ X -]\^^ Z!joooh o n!t t t || |!  !  !(]].#"!"$'32654&/.54$!2{hYuӎ⏏ |~[ {78LP3 pq[QeiH"ӆsUst/ LJDMm)f]ˢŸUO..X5{7@ -B ;210_].#"3267# !25IOT@TWV/X=202177\8@ @B ;221/0O`]!!5#"322654&#"hJu -tsyysryyXc\II]ɨX -{C@!    D ;9190/?]!3267# ! 4&#" - q}K"=w`h3f~~CD015:“f}un5@  - G 21/<9990`]!54&'.#"!!>32 H.pfQnVon#'b])@ <21/0@ P ` p ]!!!!ff` 1/0@ P`p]!!f{%i@)   #  H H &KTX@8Y<991/<<<29990@'0'P'p'''']>32!>54&#"!4&#"!!>32DpFNfo@RgphBgthmVH wkHk`_`p{5@  - G 21/<9990`]!54&'.#"!!>32 H.pfQnVon#'`b]X'{ -@  BLB;107?G]"32654& ! w}}wu||u!EG{88V^{;@B @ 2210O`]%!!>32#"&"32654&fJu -us{{ssyy -b]]7{7@    - KTX8Y21/990.#"!!>32/]/fE}*(/`nejb{'@@  6  -6% - %( - SRP"M(9999190KSX99Y" ]@^ - #  ,. . -. . . ) 9; ; -; : : K J -J J H w w  - %  - 7 ?)_) ]].#"!"&'32654&/.54632s_fcKa?o}ktijIm?c=0035+. ###44:90/ m@ -   TKTKT[KT[KT[X@8Y<<991/<2990@??PPP`` ]]!!;!"&5#33q>\Ա%N7>`;@  G 291/29990`]!3265!!5#"&hG.pfQmp[.w#&)b] -` y@F -   - %  -  K -TKT[KT[KT[X @8Y91/<290KSXY"@  / 3< CL R\ bl sz         2   - - $++$ -4;;4 -0 DKKD -o  - - - - - -:]] !! ! !l{{l=#LbX9&6 ?0+1Xo5{& 7f&89w@p]1n/10!!n$910!!h}k&5du@@]1mN810K TX@878Y@ //]!#3\9@  - @  -999919999990K TKT[X@878Y@T              ( ]]'&'&#"#4632326=3#"&7/$&g]$I)=%$(g]$CT%>;+@9o5@ -   991/0K -TX@878Y!#"&/32654&'Z:7{0f42S!:A+->j/_[ .(R<` 1/0@ P`p]!!f`mf710K TKT[X@878Y]!#f2    4  0 ' =  E  e  " : %: h;3 ; ;Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. -DejaVu changes are in public domain -DejaVu SansBoldDejaVu Sans BoldDejaVu Sans BoldVersion 2.3780f3e1+DejaVuSans-BoldDejaVu fonts teamhttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) - -Bitstream Vera Fonts Copyright ------------------------------- - -Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is -a trademark of Bitstream, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of the fonts accompanying this license ("Fonts") and associated -documentation files (the "Font Software"), to reproduce and distribute the -Font Software, including without limitation the rights to use, copy, merge, -publish, distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to the -following conditions: - -The above copyright and trademark notices and this permission notice shall -be included in all copies of one or more of the Font Software typefaces. - -The Font Software may be modified, altered, or added to, and in particular -the designs of glyphs or characters in the Fonts may be modified and -additional glyphs or characters may be added to the Fonts, only if the fonts -are renamed to names not containing either the words "Bitstream" or the word -"Vera". - -This License becomes null and void to the extent applicable to Fonts or Font -Software that has been modified and is distributed under the "Bitstream -Vera" names. - -The Font Software may be sold as part of a larger software package but no -copy of one or more of the Font Software typefaces may be sold by itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, -TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME -FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING -ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE -FONT SOFTWARE. - -Except as contained in this notice, the names of Gnome, the Gnome -Foundation, and Bitstream Inc., shall not be used in advertising or -otherwise to promote the sale, use or other dealings in this Font Software -without prior written authorization from the Gnome Foundation or Bitstream -Inc., respectively. For further information, contact: fonts at gnome dot -org. - -Arev Fonts Copyright ------------------------------- - -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the fonts accompanying this license ("Fonts") and -associated documentation files (the "Font Software"), to reproduce -and distribute the modifications to the Bitstream Vera Font Software, -including without limitation the rights to use, copy, merge, publish, -distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to -the following conditions: - -The above copyright and trademark notices and this permission notice -shall be included in all copies of one or more of the Font Software -typefaces. - -The Font Software may be modified, altered, or added to, and in -particular the designs of glyphs or characters in the Fonts may be -modified and additional glyphs or characters may be added to the -Fonts, only if the fonts are renamed to names not containing either -the words "Tavmjong Bah" or the word "Arev". - -This License becomes null and void to the extent applicable to Fonts -or Font Software that has been modified and is distributed under the -"Tavmjong Bah Arev" names. - -The Font Software may be sold as part of a larger software package but -no copy of one or more of the Font Software typefaces may be sold by -itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL -TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -Except as contained in this notice, the name of Tavmjong Bah shall not -be used in advertising or otherwise to promote the sale, use or other -dealings in this Font Software without prior written authorization -from Tavmjong Bah. For further information, contact: tavmjong @ free -. fr.http://dejavu.sourceforge.net/wiki/index.php/LicenseDejaVu SansBoldCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. -DejaVu changes are in public domain -DejaVu SansBoldDejaVu Sans BoldDejaVu Sans BoldVersion 2.37DejaVu fonts teamhttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) - -Bitstream Vera Fonts Copyright ------------------------------- - -Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is -a trademark of Bitstream, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of the fonts accompanying this license ("Fonts") and associated -documentation files (the "Font Software"), to reproduce and distribute the -Font Software, including without limitation the rights to use, copy, merge, -publish, distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to the -following conditions: - -The above copyright and trademark notices and this permission notice shall -be included in all copies of one or more of the Font Software typefaces. - -The Font Software may be modified, altered, or added to, and in particular -the designs of glyphs or characters in the Fonts may be modified and -additional glyphs or characters may be added to the Fonts, only if the fonts -are renamed to names not containing either the words "Bitstream" or the word -"Vera". - -This License becomes null and void to the extent applicable to Fonts or Font -Software that has been modified and is distributed under the "Bitstream -Vera" names. - -The Font Software may be sold as part of a larger software package but no -copy of one or more of the Font Software typefaces may be sold by itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, -TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME -FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING -ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE -FONT SOFTWARE. - -Except as contained in this notice, the names of Gnome, the Gnome -Foundation, and Bitstream Inc., shall not be used in advertising or -otherwise to promote the sale, use or other dealings in this Font Software -without prior written authorization from the Gnome Foundation or Bitstream -Inc., respectively. For further information, contact: fonts at gnome dot -org. - -Arev Fonts Copyright ------------------------------- - -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the fonts accompanying this license ("Fonts") and -associated documentation files (the "Font Software"), to reproduce -and distribute the modifications to the Bitstream Vera Font Software, -including without limitation the rights to use, copy, merge, publish, -distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to -the following conditions: - -The above copyright and trademark notices and this permission notice -shall be included in all copies of one or more of the Font Software -typefaces. - -The Font Software may be modified, altered, or added to, and in -particular the designs of glyphs or characters in the Fonts may be -modified and additional glyphs or characters may be added to the -Fonts, only if the fonts are renamed to names not containing either -the words "Tavmjong Bah" or the word "Arev". - -This License becomes null and void to the extent applicable to Fonts -or Font Software that has been modified and is distributed under the -"Tavmjong Bah Arev" names. - -The Font Software may be sold as part of a larger software package but -no copy of one or more of the Font Software typefaces may be sold by -itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL -TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -Except as contained in this notice, the name of Tavmjong Bah shall not -be used in advertising or otherwise to promote the sale, use or other -dealings in this Font Software without prior written authorization -from Tavmjong Bah. For further information, contact: tavmjong @ free -. fr.http://dejavu.sourceforge.net/wiki/index.php/LicenseDejaVu SansBoldZ:$%&'(*+,/0123456789DFGHKLOPQRSUVWX[motAcute -endstream -endobj -11 0 obj -<< /Ascent 759 -/CapHeight 759 -/Descent -240 -/Flags 4 -/FontBBox [-1069 -415 1975 1175] -/FontFile2 10 0 R -/FontName /80f3e1+DejaVuSans-Bold -/ItalicAngle 0 -/StemV 0 -/Type /FontDescriptor -/XHeight 0 ->> -endobj -12 0 obj -<< /Length 634 ->> -stream -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (UCS) def - /Supplement 0 def -end def -/CMapName /Adobe-Identity-UCS def -/CMapType 2 def -1 begincodespacerange -<00> -endcodespacerange -9 beginbfrange -<2E><32><002e> -<35><37><0035> -<41><45><0041> -<47><49><0047> -<4C><56><004c> -<63><65><0063> -<68><69><0068> -<6C><70><006c> -<72><75><0072> -endbfrange -11 beginbfchar -<20><0020> -<24><0024> -<2C><002c> -<61><0061> -<78><0078> -<8B><00e3> -<8D><00e7> -<92><00ed> -<2014> -<00b7> -<00cd> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -endstream -endobj -13 0 obj -[348 0 0 0 695 0 0 0 0 0 0 0 379 0 379 365 695 695 695 0 0 695 695 695 0 0 0 0 0 0 0 0 0 773 762 733 830 683 0 820 836 372 0 0 637 995 836 850 732 850 770 720 682 812 773 0 0 0 0 0 0 0 0 0 0 674 0 592 715 678 0 0 711 342 0 0 342 1041 711 687 715 0 493 595 478 711 0 0 645 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 674 0 592 0 0 0 0 342 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 379 0 0 0 0 0 0 0 0 372] -endobj -14 0 obj -<< /Length 27148 -/Length1 27148 ->> -stream -`OS/2ihVcmap9\cvt i9 fpgmq4vjgaspj glyf$zk @ dhead(J6hhea!$$hmtx  loca tmaxplH name/,=>=<=<; <@; :987876765 65 43 21 21 0/ 0 / .- .- ,2+*%+d*)*%)('%(A'%&% &% $#"!! d d BBBdB-B}d      - -d@--d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++5fqu-J3T99NR7s`s3VV9s3D{o{RoHT3fs -+b-{T#\q#H99`#fy```{w``b{{Rffw;{J/}oo5jo{-{T7fD)fs""*PJ|RZ>nb 4 v - - * v D ( d >,nz2ff@ /10!%!!fsr)m!(/@U" - -'&( -/)/))/B" -) *!#*- -) " & 0K TX8YK TKT[KT[X@8Y<<<1/299990KSX99Y"#.'5.546753.'>54&dijfod]SS\dtzq{---@A$*.U# jXV`OnZXh #@  - <<1/<<0!!#!5!-Ө-Ӫ--@ 1073#ӤR@d10!!dB-@B/9910KSXY"3#m #@  10"32'2#"  P3343ssyzZ -@@B  KTX@8Y1/20KSXY"]7!5%3!!JeJsHHժJ@'B  - -KTKT[KT[X8Y91/20KSX9Y"@2UVVzzvtvust]]%!!567>54&#"5>32Ls3aM_xzXE[w:mIwBC12\ps(p@. -    #)&  )KTKT[X 8Y99190@ daa d!]!"&'532654&+532654&#"5>32?^jTmǹSrsY %Đ%%12wps{$& Ѳ|d @   B   - K TK T[X 8Y<291/<290KSXY"@* *HYiw+&+6NO O Vfuz ]] !33##!55^%3`d^@#   - -KTKT[X8YKTX@8Y190!!>32!"&'532654&#",X,$^hZkʭQTժ 10$& $X@$  "% " !%190@]]"32654&.#">32# !2 LL;kPL;y$&W]yb #/C@% '-'0 $*$ !0991990"32654&%.54$32#"$54632654&#"HŚV г "Əُattt$X@# -%!"" %190@]]7532#"543 !"&2654&#"LK:lL>$& V\s[#@<21/073#3##h -@A - - -  - - -B    - 91/<90KSXY" ]@BXvp  VXP ghxv|rwx ]] !3#!#%{9҈_+ C@# -  - . !29991/90"]!2654&#!2654&#%!2#!D+ |݇f>orqp ˘s'6@  - 0210].# !267# !2'ffjzSb_^^_HHghG.@  - 2 99991/0`]3 !%! )5BhPa/w.,~ .@ -  21/0 ]!!!!!!9>ժFs9@ 43 1990%!5!# !2.# !26uu^opkSUmnHF_`%j%@ :1/0@ 0P]3!!_ժ @4 -  - - B -   -> - 91/<290KSXY"p]@V  - -&& & - -45 -i|{y - - #,'( 4<VY ej vy ]]! !###-}-+3 y@B6 -991/<2990KSXY" ]@068HGif FIWXeiy ]]!3!#j+:@  - ? 291/0@ ?_]32654&#%!2+#8/ϒT@5  -B    -? - 299991/<9990KSX9Y"@]@Bz%%%&'&&& 66FFhuuw]]#.+#! 32654&#A{>ٿJx~hb؍O'~@<    -B - %( - "-"(9999190KSX99Y")])/)O)].#"!"&'532654&/.54$32Hs_wzj{r{i76vce+ٶ0/EF~n|-&J@@@1/20K -TX@878Y@  @ p ]!!#!ժ+)@@   -8AKTX8Y1299990]332653! ˮ®u\*$h@'B91/290KSXY"P]@b*GGZ} *&&))% 833<<7HEEIIGYVfiizvvyyu)]]!3 3J+10!5{-{ -%@'   #   E&22991/9990@n0000 0!0"?'@@@@ @!@"PPPP P!P"P'p' !"'''000 0!@@@ @!PPP P!``` `!ppp p! !]]"326=7#5#"&5463!54&#"5>32߬o?`TeZ3f{bsٴ)Lfa..'' 8@  G F221/0`]4&#"326>32#"&'#3姒:{{:/Rdaadq{?@ - HE210@ ].#"3267#"!2NPƳPNM]-U5++++$$>:#qZ8@G E221/0`]3#5#"3232654&#":||ǧ^daDDaq{p@$   KE9190@)?p?????,// , -ooooo ]q]!3267# 32.#" ͷjbck)^Z44*,8 -CėqVZ{ (J@#  &#' & G E)221/990`***]4&#"326!"&'5326=#"3253aQQR9||9=,*[cb::bcd4@  -N  F21/<90`]#4&#"#3>32d||Bu\edy+@F<21/0@  @ P ` p ]3#3#`y"F1/0@ @P`p]3#{"Z@&   PPF#291/<<<290@0$P$p$$$$$$$ ]>32#4&#"#4&#"#3>32)Erurw?yz|v\`gb|d{6@  -N  F21/<90`]#4&#"#3>32d||Bu\`edqu{ J@  QE10@#?{{  - {  {]"32654&'2#"s98V{>@ GF2210@ `]%#3>32#"&4&#"326s:{{8 -daaJ{0@    -F21/90P].#"#3>32JI,:.˾`fco{'@<  S  -SB - %( - R"E(9999190KSX99Y"']@m -  . , -, , ; ; -; ; $( -( *//*(() )!$' -  -    '/)?)_))))))]]q.#"#"&'532654&/.54632NZb?ĥZlfae@f?((TT@I!*##55YQKP%$78@ -  F<<2991/<2990]!!;#"&5#53w{KsբN`>X{;@  -  NF921/290o]332653#5#"&||Cua{fcof'67quf&,8s+1dy/10!!d8yHF103#FsRf1@ D10K TKT[X@878Y3#fy{,@ F91/0@4D@P`p]3#\`{?f7@ u91290K TKT[X@878Y3#'#f2      4  0  . 6 L b "z : %: h; ;x ;Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. -DejaVu changes are in public domain -DejaVu SansBookDejaVu SansDejaVu SansVersion 2.37916dd0+DejaVuSansDejaVu fonts teamhttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) - -Bitstream Vera Fonts Copyright ------------------------------- - -Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is -a trademark of Bitstream, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of the fonts accompanying this license ("Fonts") and associated -documentation files (the "Font Software"), to reproduce and distribute the -Font Software, including without limitation the rights to use, copy, merge, -publish, distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to the -following conditions: - -The above copyright and trademark notices and this permission notice shall -be included in all copies of one or more of the Font Software typefaces. - -The Font Software may be modified, altered, or added to, and in particular -the designs of glyphs or characters in the Fonts may be modified and -additional glyphs or characters may be added to the Fonts, only if the fonts -are renamed to names not containing either the words "Bitstream" or the word -"Vera". - -This License becomes null and void to the extent applicable to Fonts or Font -Software that has been modified and is distributed under the "Bitstream -Vera" names. - -The Font Software may be sold as part of a larger software package but no -copy of one or more of the Font Software typefaces may be sold by itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, -TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME -FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING -ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE -FONT SOFTWARE. - -Except as contained in this notice, the names of Gnome, the Gnome -Foundation, and Bitstream Inc., shall not be used in advertising or -otherwise to promote the sale, use or other dealings in this Font Software -without prior written authorization from the Gnome Foundation or Bitstream -Inc., respectively. For further information, contact: fonts at gnome dot -org. - -Arev Fonts Copyright ------------------------------- - -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the fonts accompanying this license ("Fonts") and -associated documentation files (the "Font Software"), to reproduce -and distribute the modifications to the Bitstream Vera Font Software, -including without limitation the rights to use, copy, merge, publish, -distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to -the following conditions: - -The above copyright and trademark notices and this permission notice -shall be included in all copies of one or more of the Font Software -typefaces. - -The Font Software may be modified, altered, or added to, and in -particular the designs of glyphs or characters in the Fonts may be -modified and additional glyphs or characters may be added to the -Fonts, only if the fonts are renamed to names not containing either -the words "Tavmjong Bah" or the word "Arev". - -This License becomes null and void to the extent applicable to Fonts -or Font Software that has been modified and is distributed under the -"Tavmjong Bah Arev" names. - -The Font Software may be sold as part of a larger software package but -no copy of one or more of the Font Software typefaces may be sold by -itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL -TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -Except as contained in this notice, the name of Tavmjong Bah shall not -be used in advertising or otherwise to promote the sale, use or other -dealings in this Font Software without prior written authorization -from Tavmjong Bah. For further information, contact: tavmjong @ free -. fr.http://dejavu.sourceforge.net/wiki/index.php/LicenseDejaVu SansBookCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. -DejaVu changes are in public domain -DejaVu SansBookDejaVu SansDejaVu SansVersion 2.37DejaVu fonts teamhttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) - -Bitstream Vera Fonts Copyright ------------------------------- - -Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is -a trademark of Bitstream, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of the fonts accompanying this license ("Fonts") and associated -documentation files (the "Font Software"), to reproduce and distribute the -Font Software, including without limitation the rights to use, copy, merge, -publish, distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to the -following conditions: - -The above copyright and trademark notices and this permission notice shall -be included in all copies of one or more of the Font Software typefaces. - -The Font Software may be modified, altered, or added to, and in particular -the designs of glyphs or characters in the Fonts may be modified and -additional glyphs or characters may be added to the Fonts, only if the fonts -are renamed to names not containing either the words "Bitstream" or the word -"Vera". - -This License becomes null and void to the extent applicable to Fonts or Font -Software that has been modified and is distributed under the "Bitstream -Vera" names. - -The Font Software may be sold as part of a larger software package but no -copy of one or more of the Font Software typefaces may be sold by itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, -TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME -FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING -ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE -FONT SOFTWARE. - -Except as contained in this notice, the names of Gnome, the Gnome -Foundation, and Bitstream Inc., shall not be used in advertising or -otherwise to promote the sale, use or other dealings in this Font Software -without prior written authorization from the Gnome Foundation or Bitstream -Inc., respectively. For further information, contact: fonts at gnome dot -org. - -Arev Fonts Copyright ------------------------------- - -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the fonts accompanying this license ("Fonts") and -associated documentation files (the "Font Software"), to reproduce -and distribute the modifications to the Bitstream Vera Font Software, -including without limitation the rights to use, copy, merge, publish, -distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to -the following conditions: - -The above copyright and trademark notices and this permission notice -shall be included in all copies of one or more of the Font Software -typefaces. - -The Font Software may be modified, altered, or added to, and in -particular the designs of glyphs or characters in the Fonts may be -modified and additional glyphs or characters may be added to the -Fonts, only if the fonts are renamed to names not containing either -the words "Tavmjong Bah" or the word "Arev". - -This License becomes null and void to the extent applicable to Fonts -or Font Software that has been modified and is distributed under the -"Tavmjong Bah Arev" names. - -The Font Software may be sold as part of a larger software package but -no copy of one or more of the Font Software typefaces may be sold by -itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL -TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -Except as contained in this notice, the name of Tavmjong Bah shall not -be used in advertising or otherwise to promote the sale, use or other -dealings in this Font Software without prior written authorization -from Tavmjong Bah. For further information, contact: tavmjong @ free -. fr.http://dejavu.sourceforge.net/wiki/index.php/LicenseDejaVu SansBookZ9$%&'(*/01356789BDEFGHJKLOPQRSUVWXt{ -endstream -endobj -15 0 obj -<< /Ascent 759 -/CapHeight 759 -/Descent -240 -/Flags 4 -/FontBBox [-1020 -462 1793 1232] -/FontFile2 14 0 R -/FontName /916dd0+DejaVuSans -/ItalicAngle 0 -/StemV 0 -/Type /FontDescriptor -/XHeight 0 ->> -endobj -16 0 obj -<< /Length 627 ->> -stream -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (UCS) def - /Supplement 0 def -end def -/CMapName /Adobe-Identity-UCS def -/CMapType 2 def -1 begincodespacerange -<00> -endcodespacerange -10 beginbfrange -<2B><2D><002b> -<2F><36><002f> -<38><3A><0038> -<41><45><0041> -<4C><4E><004c> -<52><56><0052> -<61><65><0061> -<67><69><0067> -<6C><70><006c> -<72><75><0072> -endbfrange -9 beginbfchar -<20><0020> -<24><0024> -<47><0047> -<50><0050> -<5F><005f> -<92><00ed> -<99><00f4> -<2014> -<00b7> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -endstream -endobj -17 0 obj -[317 0 0 0 636 0 0 0 0 0 0 837 317 360 0 336 636 636 636 636 636 636 636 0 636 636 336 0 0 0 0 0 0 684 686 698 770 631 0 774 0 0 0 0 557 862 748 0 603 0 694 634 610 731 684 0 0 0 0 0 0 0 0 500 0 612 634 549 634 615 0 634 633 277 0 0 277 974 633 611 634 0 411 520 392 633 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277 0 0 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 317] -endobj -18 0 obj -<< /Length 19304 -/Length1 19304 ->> -stream -`OS/2k"qhVcmapcvt >1 4Tfpgm[kgaspK\ glyfV( head&Ja6hhea <$$hmtxJ loca&~ maxp iH name^@,,G}G - -@ -2 -d۠d%%%   %ё%Д #&̑ɻ]ɻɀ@%]@%dĐ::2  }& -@ ]%]@..@   K%%%2 -~}|{zywvwvututsr}qpo,o,nmlkjihc h2gf2ed -ed -d@cb -c b -a`a``_ -^]\\[Z[ZZYXWV@VUTSRQRQQPOPONONMLKLKJKJIJIHGFGFEDCDCBA%BAA%@?@?>?>=< =< ;d:987656%54554 - 4432 33@2 10100/ .-,:-,%,:+d*d)(''& %$#@+$#" "!!@  -%@ K}K%%dd   2 -    -  -@  - -@d  d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++f3f=ffTbfTfmf3bq%fHZfm99Xm=fuff9{{X3fLfLJ#DDf?;Pw -/X#/553X -sf+j-j!f#^`3B3\fy```{j\{`bXP1L`%!JJ7{'}3Xy9bs&&&Xff&&/10!%!!fsr)3W -2327632#"'&'&5476'( > !~GH ".4F+@xH )0$'*'2    4  0 ' =  E  e  " : %: h;3 ; ;Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. -DejaVu changes are in public domain -DejaVu SansBoldDejaVu Sans BoldDejaVu Sans BoldVersion 2.371a10e1+DejaVuSans-BoldDejaVu fonts teamhttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) - -Bitstream Vera Fonts Copyright ------------------------------- - -Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is -a trademark of Bitstream, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of the fonts accompanying this license ("Fonts") and associated -documentation files (the "Font Software"), to reproduce and distribute the -Font Software, including without limitation the rights to use, copy, merge, -publish, distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to the -following conditions: - -The above copyright and trademark notices and this permission notice shall -be included in all copies of one or more of the Font Software typefaces. - -The Font Software may be modified, altered, or added to, and in particular -the designs of glyphs or characters in the Fonts may be modified and -additional glyphs or characters may be added to the Fonts, only if the fonts -are renamed to names not containing either the words "Bitstream" or the word -"Vera". - -This License becomes null and void to the extent applicable to Fonts or Font -Software that has been modified and is distributed under the "Bitstream -Vera" names. - -The Font Software may be sold as part of a larger software package but no -copy of one or more of the Font Software typefaces may be sold by itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, -TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME -FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING -ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE -FONT SOFTWARE. - -Except as contained in this notice, the names of Gnome, the Gnome -Foundation, and Bitstream Inc., shall not be used in advertising or -otherwise to promote the sale, use or other dealings in this Font Software -without prior written authorization from the Gnome Foundation or Bitstream -Inc., respectively. For further information, contact: fonts at gnome dot -org. - -Arev Fonts Copyright ------------------------------- - -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the fonts accompanying this license ("Fonts") and -associated documentation files (the "Font Software"), to reproduce -and distribute the modifications to the Bitstream Vera Font Software, -including without limitation the rights to use, copy, merge, publish, -distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to -the following conditions: - -The above copyright and trademark notices and this permission notice -shall be included in all copies of one or more of the Font Software -typefaces. - -The Font Software may be modified, altered, or added to, and in -particular the designs of glyphs or characters in the Fonts may be -modified and additional glyphs or characters may be added to the -Fonts, only if the fonts are renamed to names not containing either -the words "Tavmjong Bah" or the word "Arev". - -This License becomes null and void to the extent applicable to Fonts -or Font Software that has been modified and is distributed under the -"Tavmjong Bah Arev" names. - -The Font Software may be sold as part of a larger software package but -no copy of one or more of the Font Software typefaces may be sold by -itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL -TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -Except as contained in this notice, the name of Tavmjong Bah shall not -be used in advertising or otherwise to promote the sale, use or other -dealings in this Font Software without prior written authorization -from Tavmjong Bah. For further information, contact: tavmjong @ free -. fr.http://dejavu.sourceforge.net/wiki/index.php/LicenseDejaVu SansBoldCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. -DejaVu changes are in public domain -DejaVu SansBoldDejaVu Sans BoldDejaVu Sans BoldVersion 2.37DejaVu fonts teamhttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) - -Bitstream Vera Fonts Copyright ------------------------------- - -Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is -a trademark of Bitstream, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of the fonts accompanying this license ("Fonts") and associated -documentation files (the "Font Software"), to reproduce and distribute the -Font Software, including without limitation the rights to use, copy, merge, -publish, distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to the -following conditions: - -The above copyright and trademark notices and this permission notice shall -be included in all copies of one or more of the Font Software typefaces. - -The Font Software may be modified, altered, or added to, and in particular -the designs of glyphs or characters in the Fonts may be modified and -additional glyphs or characters may be added to the Fonts, only if the fonts -are renamed to names not containing either the words "Bitstream" or the word -"Vera". - -This License becomes null and void to the extent applicable to Fonts or Font -Software that has been modified and is distributed under the "Bitstream -Vera" names. - -The Font Software may be sold as part of a larger software package but no -copy of one or more of the Font Software typefaces may be sold by itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, -TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME -FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING -ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE -FONT SOFTWARE. - -Except as contained in this notice, the names of Gnome, the Gnome -Foundation, and Bitstream Inc., shall not be used in advertising or -otherwise to promote the sale, use or other dealings in this Font Software -without prior written authorization from the Gnome Foundation or Bitstream -Inc., respectively. For further information, contact: fonts at gnome dot -org. - -Arev Fonts Copyright ------------------------------- - -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the fonts accompanying this license ("Fonts") and -associated documentation files (the "Font Software"), to reproduce -and distribute the modifications to the Bitstream Vera Font Software, -including without limitation the rights to use, copy, merge, publish, -distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to -the following conditions: - -The above copyright and trademark notices and this permission notice -shall be included in all copies of one or more of the Font Software -typefaces. - -The Font Software may be modified, altered, or added to, and in -particular the designs of glyphs or characters in the Fonts may be -modified and additional glyphs or characters may be added to the -Fonts, only if the fonts are renamed to names not containing either -the words "Tavmjong Bah" or the word "Arev". - -This License becomes null and void to the extent applicable to Fonts -or Font Software that has been modified and is distributed under the -"Tavmjong Bah Arev" names. - -The Font Software may be sold as part of a larger software package but -no copy of one or more of the Font Software typefaces may be sold by -itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL -TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -Except as contained in this notice, the name of Tavmjong Bah shall not -be used in advertising or otherwise to promote the sale, use or other -dealings in this Font Software without prior written authorization -from Tavmjong Bah. For further information, contact: tavmjong @ free -. fr.http://dejavu.sourceforge.net/wiki/index.php/LicenseDejaVu SansBoldZuni2713 -endstream -endobj -19 0 obj -<< /Ascent 759 -/CapHeight 759 -/Descent -240 -/Flags 4 -/FontBBox [-1069 -415 1975 1175] -/FontFile2 18 0 R -/FontName /1a10e1+DejaVuSans-Bold -/ItalicAngle 0 -/StemV 0 -/Type /FontDescriptor -/XHeight 0 ->> -endobj -20 0 obj -<< /Length 376 ->> -stream -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (UCS) def - /Supplement 0 def -end def -/CMapName /Adobe-Identity-UCS def -/CMapType 2 def -1 begincodespacerange -<00><21> -endcodespacerange -1 beginbfrange -<20><21>[<0020><2713>] -endbfrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end -endstream -endobj -21 0 obj -[348 837] -endobj -xref -0 22 -0000000000 65535 f -0000000015 00000 n -0000000109 00000 n -0000000158 00000 n -0000000215 00000 n -0000013770 00000 n -0000014119 00000 n -0000014289 00000 n -0000014454 00000 n -0000014623 00000 n -0000015140 00000 n -0000043133 00000 n -0000043347 00000 n -0000044033 00000 n -0000044563 00000 n -0000071780 00000 n -0000071989 00000 n -0000072668 00000 n -0000073181 00000 n -0000092554 00000 n -0000092768 00000 n -0000093196 00000 n -trailer -<< /Info 1 0 R -/Root 2 0 R -/Size 22 ->> -startxref -93222 -%%EOF diff --git a/Erros/relatorio_bruno-corgozinho_4-2.pdf b/Erros/relatorio_bruno-corgozinho_4-2.pdf deleted file mode 100644 index a806fcf..0000000 --- a/Erros/relatorio_bruno-corgozinho_4-2.pdf +++ /dev/null @@ -1,3911 +0,0 @@ -%PDF-1.3 -% -1 0 obj -<< /Creator -/Producer ->> -endobj -2 0 obj -<< /Pages 3 0 R -/Type /Catalog ->> -endobj -3 0 obj -<< /Count 2 -/Kids [5 0 R 9 0 R] -/Type /Pages ->> -endobj -4 0 obj -<< /Length 28303 ->> -stream -q -/DeviceRGB cs -0.03922 0.03922 0.03922 scn -0.0 771.89 595.28 70.0 re -f -0.97647 0.45098 0.08627 scn -0.0 771.89 8.0 70.0 re -f -1.0 1.0 1.0 scn - -BT -50.0 807.53 Td -/F2.0 20 Tf -[<5245454d205452414e53504f52> 20 <5445>] TJ -ET - -0.97647 0.45098 0.08627 scn - -BT -50.0 790.71 Td -/F1.0 10 Tf -[<53697374656d6120646520436f6e74726f6c6520646520437573746f73204c6f67ed737469636f73>] TJ -ET - -0.0 0.0 0.0 scn -0.97647 0.45098 0.08627 scn - -BT -40.0 723.556 Td -/F2.0 13 Tf -[<52454c41> 90 <54> 40 50 <414c20444520454e545245474153>] TJ -ET - -/DeviceRGB CS -0.97647 0.45098 0.08627 SCN -40.0 717.42 m -555.28 717.42 l -S -0.0 0.0 0.0 scn - -BT -40.0 701.522 Td -/F2.0 11 Tf -[<436f6e736f6c696461e7e36f3a207465737465>] TJ -ET - - -BT -40.0 688.432 Td -/F1.0 11 Tf -[<4d6f746f72> -15 <697374613a204272> -15 <756e6f20436f72676f7a696e686f>] TJ -ET - - -BT -40.0 676.434 Td -/F1.0 10 Tf -[<50> 50 <6572> -15 ] TJ -ET - -0.41961 0.44706 0.50196 scn - -BT -40.0 664.874 Td -/F1.0 10 Tf -[<5374617475733a2046696e616c697a616461>] TJ -ET - -0.0 0.0 0.0 scn -0.97647 0.45098 0.08627 scn - -BT -40.0 637.16 Td -/F2.0 13 Tf -[<454e5452454741532028323929>] TJ -ET - -0.97647 0.45098 0.08627 SCN -40.0 631.024 m -555.28 631.024 l -S -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -40.0 605.504 22.0 17.52 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -62.0 605.504 70.0 17.52 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -132.0 605.504 60.0 17.52 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -192.0 605.504 208.28 17.52 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -400.28 605.504 95.0 17.52 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -495.28 605.504 60.0 17.52 re -f -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -40.0 623.024 m -62.0 623.024 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 605.504 m -62.0 605.504 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 623.524 m -40.0 605.004 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -62.0 623.524 m -62.0 605.004 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -46.0 610.448 Td -/F2.0 8 Tf -[<23>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -62.0 623.024 m -132.0 623.024 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -62.0 605.504 m -132.0 605.504 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -62.0 623.524 m -62.0 605.004 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -132.0 623.524 m -132.0 605.004 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -68.0 610.448 Td -/F2.0 8 Tf -[<56> 50 <65ed63756c6f>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -132.0 623.024 m -192.0 623.024 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -132.0 605.504 m -192.0 605.504 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -132.0 623.524 m -132.0 605.004 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -192.0 623.524 m -192.0 605.004 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -138.0 610.448 Td -/F2.0 8 Tf -[<4e46>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -192.0 623.024 m -400.28 623.024 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -192.0 605.504 m -400.28 605.504 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -192.0 623.524 m -192.0 605.004 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -400.28 623.524 m -400.28 605.004 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -198.0 610.448 Td -/F2.0 8 Tf -[<456e64657265e76f>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -400.28 623.024 m -495.28 623.024 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -400.28 605.504 m -495.28 605.504 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -400.28 623.524 m -400.28 605.004 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -495.28 623.524 m -495.28 605.004 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -406.28 610.448 Td -/F2.0 8 Tf -[<5469706f>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -495.28 623.024 m -555.28 623.024 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -495.28 605.504 m -555.28 605.504 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -495.28 623.524 m -495.28 605.004 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 623.524 m -555.28 605.004 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -530.752 610.448 Td -/F2.0 8 Tf -[<56> 60 <616c6f72>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.86667 0.86667 0.86667 SCN -40.0 579.008 m -62.0 579.008 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 593.132 Td -/F1.0 8 Tf -[<31>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 579.008 m -132.0 579.008 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 593.132 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 579.008 m -192.0 579.008 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 593.132 Td -/F1.0 8 Tf -[<4e46203532343038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 579.008 m -400.28 579.008 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 593.132 Td -/F1.0 8 Tf -[<52756120476f6e7a616c6f2042657263656f> 40 <2e2035332e204a> 20 <617264696d204d6f72> 10 <616973205072> 10 <61646f> 40 <2e2053e36f>] TJ -ET - - -BT -198.0 583.884 Td -/F1.0 8 Tf -[<50> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835352d343130>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 579.008 m -495.28 579.008 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 593.132 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 579.008 m -555.28 579.008 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 593.132 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 552.512 m -62.0 552.512 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 566.636 Td -/F1.0 8 Tf -[<32>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 552.512 m -132.0 552.512 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 566.636 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 552.512 m -192.0 552.512 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 566.636 Td -/F1.0 8 Tf -[<4e46203532343036>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 552.512 m -400.28 552.512 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 566.636 Td -/F1.0 8 Tf -[<52756120526f676572204261636f6e2e203238392e204a> 20 <617264696d204d6f72> 10 <616973205072> 10 <61646f> 40 <2e2053e36f>] TJ -ET - - -BT -198.0 557.388 Td -/F1.0 8 Tf -[<50> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835352d333630>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 552.512 m -495.28 552.512 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 566.636 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 552.512 m -555.28 552.512 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 566.636 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 526.016 m -62.0 526.016 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 540.14 Td -/F1.0 8 Tf -[<33>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 526.016 m -132.0 526.016 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 540.14 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 526.016 m -192.0 526.016 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 540.14 Td -/F1.0 8 Tf -[<4e46203532343130>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 526.016 m -400.28 526.016 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 540.14 Td -/F1.0 8 Tf -[<52756120526f676572204261636f6e2e2033322e204a> 20 <617264696d204d6f72> 10 <616973205072> 10 <61646f> 40 <2e2053e36f>] TJ -ET - - -BT -198.0 530.892 Td -/F1.0 8 Tf -[<50> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835352d333630>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 526.016 m -495.28 526.016 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 540.14 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 526.016 m -555.28 526.016 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 540.14 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 499.52 m -62.0 499.52 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 513.644 Td -/F1.0 8 Tf -[<34>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 499.52 m -132.0 499.52 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 513.644 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 499.52 m -192.0 499.52 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 513.644 Td -/F1.0 8 Tf -[<4e46203532333331>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 499.52 m -400.28 499.52 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 513.644 Td -/F1.0 8 Tf -[<5275612047656e6572> 10 <616c204a6f736520436f727265612e203338392e204368e1636172> 10 <6120436f636169612e2053e36f>] TJ -ET - - -BT -198.0 504.396 Td -/F1.0 8 Tf -[<50> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835342d303930>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 499.52 m -495.28 499.52 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 513.644 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 499.52 m -555.28 499.52 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 513.644 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 473.024 m -62.0 473.024 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 487.148 Td -/F1.0 8 Tf -[<35>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 473.024 m -132.0 473.024 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 487.148 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 473.024 m -192.0 473.024 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 487.148 Td -/F1.0 8 Tf -[<4e46203532323935>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 473.024 m -400.28 473.024 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 487.148 Td -/F1.0 8 Tf -[<527561204d6172636f2041> 30 <7572656c696f204d6172> -15 <6c69616e692e203130332e204a> 20 <617264696d20416c6d65696461>] TJ -ET - - -BT -198.0 477.9 Td -/F1.0 8 Tf -[<5072> 10 <61646f> 40 <2e2053e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835342d313730>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 473.024 m -495.28 473.024 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 487.148 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 473.024 m -555.28 473.024 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 487.148 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 446.528 m -62.0 446.528 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 460.652 Td -/F1.0 8 Tf -[<36>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 446.528 m -132.0 446.528 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 460.652 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 446.528 m -192.0 446.528 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 460.652 Td -/F1.0 8 Tf -[<4e46203532333435>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 446.528 m -400.28 446.528 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 460.652 Td -/F1.0 8 Tf -[<5275612044616e746520416d62726f73696f> 40 <2e2039382e204a> 20 <617264696d20416c6d65696461205072> 10 <61646f> 40 <2e2053e36f>] TJ -ET - - -BT -198.0 451.404 Td -/F1.0 8 Tf -[<50> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835342d323030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 446.528 m -495.28 446.528 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 460.652 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 446.528 m -555.28 446.528 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 460.652 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 420.032 m -62.0 420.032 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 434.156 Td -/F1.0 8 Tf -[<37>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 420.032 m -132.0 420.032 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 434.156 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 420.032 m -192.0 420.032 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 434.156 Td -/F1.0 8 Tf -[<4e46203532323835>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 420.032 m -400.28 420.032 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 434.156 Td -/F1.0 8 Tf -[<5275612053616e746f20416e746f6e696f> 40 <2e20342e204a> 20 <617264696d20416c6d65696461205072> 10 <61646f> 40 <2e2053e36f>] TJ -ET - - -BT -198.0 424.908 Td -/F1.0 8 Tf -[<50> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835342d323730>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 420.032 m -495.28 420.032 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 434.156 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 420.032 m -555.28 420.032 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 434.156 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 393.536 m -62.0 393.536 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 407.66 Td -/F1.0 8 Tf -[<38>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 393.536 m -132.0 393.536 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 407.66 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 393.536 m -192.0 393.536 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 407.66 Td -/F1.0 8 Tf -[<4e46203532323836>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 393.536 m -400.28 393.536 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 407.66 Td -/F1.0 8 Tf -[<527561204272656e6f2042657273612e203634612e204a> 20 <617264696d20416c6d65696461205072> 10 <61646f> 40 <2e2053e36f>] TJ -ET - - -BT -198.0 398.412 Td -/F1.0 8 Tf -[<50> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835342d323330>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 393.536 m -495.28 393.536 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 407.66 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 393.536 m -555.28 393.536 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 407.66 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 367.04 m -62.0 367.04 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 381.164 Td -/F1.0 8 Tf -[<39>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 367.04 m -132.0 367.04 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 381.164 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 367.04 m -192.0 367.04 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 381.164 Td -/F1.0 8 Tf -[<4e46203532323832>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 367.04 m -400.28 367.04 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 381.164 Td -/F1.0 8 Tf -[<527561204272656e6f2042657273612e20382e204a> 20 <617264696d20416c6d65696461205072> 10 <61646f> 40 <2e2053e36f2050> 40 <61756c6f> 40 <2e>] TJ -ET - - -BT -198.0 371.916 Td -/F1.0 8 Tf -[<5370> 35 <2e204365703a2030343835342d323330>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 367.04 m -495.28 367.04 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 381.164 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 367.04 m -555.28 367.04 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 381.164 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 340.544 m -62.0 340.544 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 354.668 Td -/F1.0 8 Tf -[<3130>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 340.544 m -132.0 340.544 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 354.668 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 340.544 m -192.0 340.544 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 354.668 Td -/F1.0 8 Tf -[<4e46203532333530>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 340.544 m -400.28 340.544 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 354.668 Td -/F1.0 8 Tf -[<527561204d6172> -15 <696120416e746f6e69612046> 30 <6572> -25 <6e616e64657a2e20342e204a> 20 <617264696d20416c6d65696461>] TJ -ET - - -BT -198.0 345.42 Td -/F1.0 8 Tf -[<5072> 10 <61646f> 40 <2e2053e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835342d313630>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 340.544 m -495.28 340.544 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 354.668 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 340.544 m -555.28 340.544 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 354.668 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 314.048 m -62.0 314.048 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 328.172 Td -/F1.0 8 Tf -[<3131>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 314.048 m -132.0 314.048 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 328.172 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 314.048 m -192.0 314.048 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 328.172 Td -/F1.0 8 Tf -[<4e46203532333339>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 314.048 m -400.28 314.048 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 328.172 Td -/F1.0 8 Tf -[<527561204c6972> -15 <696f20446f2056> 70 <616c65> 15 <2e2039362e204a> 20 <617264696d20417a616e6f2049692e2053e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e>] TJ -ET - - -BT -198.0 318.924 Td -/F1.0 8 Tf -[<4365703a2030343835342d353630>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 314.048 m -495.28 314.048 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 328.172 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 314.048 m -555.28 314.048 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 328.172 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 287.552 m -62.0 287.552 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 301.676 Td -/F1.0 8 Tf -[<3132>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 287.552 m -132.0 287.552 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 301.676 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 287.552 m -192.0 287.552 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 301.676 Td -/F1.0 8 Tf -[<4e46203532333037>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 287.552 m -400.28 287.552 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 301.676 Td -/F1.0 8 Tf -[<527561204d6172> -15 <69612054686572657a612047616c76> 25 <616f204275656e6f> 40 <2e2038312e204a> 20 <617264696d205a696c64612e>] TJ -ET - - -BT -198.0 292.428 Td -/F1.0 8 Tf -[<53e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835362d333735>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 287.552 m -495.28 287.552 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 301.676 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 287.552 m -555.28 287.552 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 301.676 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 261.056 m -62.0 261.056 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 275.18 Td -/F1.0 8 Tf -[<3133>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 261.056 m -132.0 261.056 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 275.18 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 261.056 m -192.0 261.056 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 275.18 Td -/F1.0 8 Tf -[<4e46203532323936>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 261.056 m -400.28 261.056 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 275.18 Td -/F1.0 8 Tf -[<527561204775737461> 20 <76> 25 <6f204261636172> -15 <69736173> 15 <2e203130342e204a> 20 <617264696d205a696c64612e2053e36f2050> 40 <61756c6f> 40 <2e>] TJ -ET - - -BT -198.0 265.932 Td -/F1.0 8 Tf -[<5370> 35 <2e204365703a2030343835362d333832>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 261.056 m -495.28 261.056 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 275.18 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 261.056 m -555.28 261.056 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 275.18 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 234.56 m -62.0 234.56 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 248.684 Td -/F1.0 8 Tf -[<3134>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 234.56 m -132.0 234.56 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 248.684 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 234.56 m -192.0 234.56 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 248.684 Td -/F1.0 8 Tf -[<4e46203532333430>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 234.56 m -400.28 234.56 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 248.684 Td -/F1.0 8 Tf -[<5275612052656e65204a> 20 <75737465> 15 <2e20313562> 40 <2e204a> 20 <617264696d205a696c64612e2053e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e>] TJ -ET - - -BT -198.0 239.436 Td -/F1.0 8 Tf -[<4365703a2030343835362d333835>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 234.56 m -495.28 234.56 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 248.684 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 234.56 m -555.28 234.56 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 248.684 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 208.064 m -62.0 208.064 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 222.188 Td -/F1.0 8 Tf -[<3135>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 208.064 m -132.0 208.064 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 222.188 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 208.064 m -192.0 208.064 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 222.188 Td -/F1.0 8 Tf -[<4e46203532323833>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 208.064 m -400.28 208.064 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 222.188 Td -/F1.0 8 Tf -[<527561204c756172204465204c6167> 10 <72> -15 <696d6173> 15 <2e2031322e204a> 20 <617264696d204e6f> 15 <76> 25 <6f20486f72> -15 <697a> 15 <6f6e7465> 15 <2e>] TJ -ET - - -BT -198.0 212.94 Td -/F1.0 8 Tf -[<53e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835362d323130>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 208.064 m -495.28 208.064 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 222.188 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 208.064 m -555.28 208.064 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 222.188 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 181.568 m -62.0 181.568 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 195.692 Td -/F1.0 8 Tf -[<3136>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 181.568 m -132.0 181.568 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 195.692 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 181.568 m -192.0 181.568 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 195.692 Td -/F1.0 8 Tf -[<4e46203532323937>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 181.568 m -400.28 181.568 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 195.692 Td -/F1.0 8 Tf -[<527561204c756172204465204c6167> 10 <72> -15 <696d6173> 15 <2e2032372e204a> 20 <617264696d204e6f> 15 <76> 25 <6f20486f72> -15 <697a> 15 <6f6e7465> 15 <2e>] TJ -ET - - -BT -198.0 186.444 Td -/F1.0 8 Tf -[<53e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835362d323130>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 181.568 m -495.28 181.568 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 195.692 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 181.568 m -555.28 181.568 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 195.692 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 155.072 m -62.0 155.072 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 169.196 Td -/F1.0 8 Tf -[<3137>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 155.072 m -132.0 155.072 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 169.196 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 155.072 m -192.0 155.072 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 169.196 Td -/F1.0 8 Tf -[<4e46203532333239>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 155.072 m -400.28 155.072 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 169.196 Td -/F1.0 8 Tf -[<54> 120 <72> 10 <61> 20 <76> 25 <657373612043687570696d2e2035372e204a> 20 <617264696d204e6f> 15 <76> 25 <6f20486f72> -15 <697a> 15 <6f6e7465> 15 <2e2053e36f>] TJ -ET - - -BT -198.0 159.948 Td -/F1.0 8 Tf -[<50> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835372d343630>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 155.072 m -495.28 155.072 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 169.196 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 155.072 m -555.28 155.072 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 169.196 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 128.576 m -62.0 128.576 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 142.7 Td -/F1.0 8 Tf -[<3138>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 128.576 m -132.0 128.576 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 142.7 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 128.576 m -192.0 128.576 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 142.7 Td -/F1.0 8 Tf -[<4e46203532333139>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 128.576 m -400.28 128.576 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 142.7 Td -/F1.0 8 Tf -[<54> 120 <72> 10 <61> 20 <76> 25 <6573736120446f20426572> -15 <696d6261752e2033302e204a> 20 <617264696d204d6172> -15 <696c64612e2053e36f2050> 40 <61756c6f> 40 <2e>] TJ -ET - - -BT -198.0 133.452 Td -/F1.0 8 Tf -[<5370> 35 <2e204365703a2030343835372d343430>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 128.576 m -495.28 128.576 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 142.7 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 128.576 m -555.28 128.576 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 142.7 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 102.08 m -62.0 102.08 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 116.204 Td -/F1.0 8 Tf -[<3139>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 102.08 m -132.0 102.08 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 116.204 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 102.08 m -192.0 102.08 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 116.204 Td -/F1.0 8 Tf -[<4e46203532323834>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 102.08 m -400.28 102.08 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 116.204 Td -/F1.0 8 Tf -[<54> 120 <72> 10 <61> 20 <76> 25 <6573736120507265736964656e746520526f626572> -40 <746f204f72> -40 <74692e2036342e204a> 20 <617264696d204e6f> 15 <76> 25 <6f>] TJ -ET - - -BT -198.0 106.956 Td -/F1.0 8 Tf -[<486f72> -15 <697a> 15 <6f6e7465> 15 <2e2053e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835372d353230>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 102.08 m -495.28 102.08 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 116.204 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 102.08 m -555.28 102.08 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 116.204 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 75.584 m -62.0 75.584 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 89.708 Td -/F1.0 8 Tf -[<3230>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 75.584 m -132.0 75.584 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 89.708 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 75.584 m -192.0 75.584 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 89.708 Td -/F1.0 8 Tf -[<4e46203532333135>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 75.584 m -400.28 75.584 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 89.708 Td -/F1.0 8 Tf -[<5275612053617069746963612e2031342e204a> 20 <617264696d2053e36f204a> 20 <756461732054> 120 <616465752e2053e36f2050> 40 <61756c6f> 40 <2e>] TJ -ET - - -BT -198.0 80.46 Td -/F1.0 8 Tf -[<5370> 35 <2e204365703a2030343835382d323330>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 75.584 m -495.28 75.584 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 89.708 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 75.584 m -555.28 75.584 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 89.708 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -/Stamp1 Do -Q - -endstream -endobj -5 0 obj -<< /ArtBox [0 0 595.28 841.89] -/BleedBox [0 0 595.28 841.89] -/Contents 4 0 R -/CropBox [0 0 595.28 841.89] -/MediaBox [0 0 595.28 841.89] -/Parent 3 0 R -/Resources << /Font << /F1.0 7 0 R -/F2.0 6 0 R ->> -/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/XObject << /Stamp1 10 0 R ->> ->> -/TrimBox [0 0 595.28 841.89] -/Type /Page ->> -endobj -6 0 obj -<< /BaseFont /Helvetica-Bold -/Encoding /WinAnsiEncoding -/Subtype /Type1 -/Type /Font ->> -endobj -7 0 obj -<< /BaseFont /Helvetica -/Encoding /WinAnsiEncoding -/Subtype /Type1 -/Type /Font ->> -endobj -8 0 obj -<< /Length 18183 ->> -stream -q -/DeviceRGB CS -0.97647 0.45098 0.08627 SCN -/DeviceRGB cs -0.03922 0.03922 0.03922 scn -40.0 784.37 22.0 17.52 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -62.0 784.37 70.0 17.52 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -132.0 784.37 60.0 17.52 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -192.0 784.37 208.28 17.52 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -400.28 784.37 95.0 17.52 re -f -0.0 0.0 0.0 scn -0.03922 0.03922 0.03922 scn -495.28 784.37 60.0 17.52 re -f -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -40.0 801.89 m -62.0 801.89 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 784.37 m -62.0 784.37 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 802.39 m -40.0 783.87 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -62.0 802.39 m -62.0 783.87 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -46.0 789.314 Td -/F2.0 8 Tf -[<23>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -62.0 801.89 m -132.0 801.89 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -62.0 784.37 m -132.0 784.37 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -62.0 802.39 m -62.0 783.87 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -132.0 802.39 m -132.0 783.87 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -68.0 789.314 Td -/F2.0 8 Tf -[<56> 50 <65ed63756c6f>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -132.0 801.89 m -192.0 801.89 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -132.0 784.37 m -192.0 784.37 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -132.0 802.39 m -132.0 783.87 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -192.0 802.39 m -192.0 783.87 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -138.0 789.314 Td -/F2.0 8 Tf -[<4e46>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -192.0 801.89 m -400.28 801.89 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -192.0 784.37 m -400.28 784.37 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -192.0 802.39 m -192.0 783.87 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -400.28 802.39 m -400.28 783.87 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -198.0 789.314 Td -/F2.0 8 Tf -[<456e64657265e76f>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -400.28 801.89 m -495.28 801.89 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -400.28 784.37 m -495.28 784.37 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -400.28 802.39 m -400.28 783.87 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -495.28 802.39 m -495.28 783.87 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -406.28 789.314 Td -/F2.0 8 Tf -[<5469706f>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -495.28 801.89 m -555.28 801.89 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -495.28 784.37 m -555.28 784.37 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -495.28 802.39 m -495.28 783.87 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -555.28 802.39 m -555.28 783.87 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -1.0 1.0 1.0 scn - -BT -530.752 789.314 Td -/F2.0 8 Tf -[<56> 60 <616c6f72>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.86667 0.86667 0.86667 SCN -40.0 757.874 m -62.0 757.874 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 771.998 Td -/F1.0 8 Tf -[<3231>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 757.874 m -132.0 757.874 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 771.998 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 757.874 m -192.0 757.874 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 771.998 Td -/F1.0 8 Tf -[<4e46203532333038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 757.874 m -400.28 757.874 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 771.998 Td -/F1.0 8 Tf -[<527561204d6172> -15 <757061204d6972> -15 <696d2e20312e204a> 20 <617264696d2053616269e12049692e2053e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e>] TJ -ET - - -BT -198.0 762.75 Td -/F1.0 8 Tf -[<4365703a2030343835362d353830>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 757.874 m -495.28 757.874 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 771.998 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 757.874 m -555.28 757.874 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 771.998 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 731.378 m -62.0 731.378 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 745.502 Td -/F1.0 8 Tf -[<3232>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 731.378 m -132.0 731.378 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 745.502 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 731.378 m -192.0 731.378 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 745.502 Td -/F1.0 8 Tf -[<4e46203532343133>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 731.378 m -400.28 731.378 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 745.502 Td -/F1.0 8 Tf -[<527561204167656e6f72204b6c617573736e6572> 50 <2e2032342e204a> 20 <617264696d204e6f> 15 <76> 25 <6f20486f72> -15 <697a> 15 <6f6e7465> 15 <2e>] TJ -ET - - -BT -198.0 736.254 Td -/F1.0 8 Tf -[<53e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835362d353130>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 731.378 m -495.28 731.378 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 745.502 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 731.378 m -555.28 731.378 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 745.502 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 704.882 m -62.0 704.882 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 719.006 Td -/F1.0 8 Tf -[<3233>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 704.882 m -132.0 704.882 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 719.006 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 704.882 m -192.0 704.882 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 719.006 Td -/F1.0 8 Tf -[<4e46203532333936>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 704.882 m -400.28 704.882 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 719.006 Td -/F1.0 8 Tf -[<527561204167656e6f72204b6c617573736e6572> 50 <2e203234302e204a> 20 <617264696d204e6f> 15 <76> 25 <6f20486f72> -15 <697a> 15 <6f6e7465> 15 <2e>] TJ -ET - - -BT -198.0 709.758 Td -/F1.0 8 Tf -[<53e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835362d353130>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 704.882 m -495.28 704.882 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 719.006 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 704.882 m -555.28 704.882 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 719.006 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 678.386 m -62.0 678.386 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 692.51 Td -/F1.0 8 Tf -[<3234>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 678.386 m -132.0 678.386 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 692.51 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 678.386 m -192.0 678.386 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 692.51 Td -/F1.0 8 Tf -[<4e46203532323939>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 678.386 m -400.28 678.386 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 692.51 Td -/F1.0 8 Tf -[<527561204167656e6f72204b6c617573736e6572> 50 <2e203238372e204a> 20 <617264696d204e6f> 15 <76> 25 <6f20486f72> -15 <697a> 15 <6f6e7465> 15 <2e>] TJ -ET - - -BT -198.0 683.262 Td -/F1.0 8 Tf -[<53e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835362d353130>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 678.386 m -495.28 678.386 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 692.51 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 678.386 m -555.28 678.386 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 692.51 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 651.89 m -62.0 651.89 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 666.014 Td -/F1.0 8 Tf -[<3235>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 651.89 m -132.0 651.89 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 666.014 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 651.89 m -192.0 651.89 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 666.014 Td -/F1.0 8 Tf -[<4e46203532333233>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 651.89 m -400.28 651.89 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 666.014 Td -/F1.0 8 Tf -[<527561204c6976696e6f2046> 50 <61757374696e6f> 40 <2e20342e204a> 20 <617264696d2056> 70 <617267696e68612e2053e36f2050> 40 <61756c6f> 40 <2e>] TJ -ET - - -BT -198.0 656.766 Td -/F1.0 8 Tf -[<5370> 35 <2e204365703a2030343835372d363130>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 651.89 m -495.28 651.89 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 666.014 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 651.89 m -555.28 651.89 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 666.014 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 625.394 m -62.0 625.394 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 639.518 Td -/F1.0 8 Tf -[<3236>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 625.394 m -132.0 625.394 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 639.518 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 625.394 m -192.0 625.394 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 639.518 Td -/F1.0 8 Tf -[<4e46203532333034>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 625.394 m -400.28 625.394 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 639.518 Td -/F1.0 8 Tf -[<5275612048656e72> -15 <6971756520416c626572> -40 <747573> 15 <2e20322e204a> 20 <617264696d2056> 70 <617267696e68612e2053e36f2050> 40 <61756c6f> 40 <2e>] TJ -ET - - -BT -198.0 630.27 Td -/F1.0 8 Tf -[<5370> 35 <2e204365703a2030343835372d303135>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 625.394 m -495.28 625.394 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 639.518 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 625.394 m -555.28 625.394 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 639.518 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 598.898 m -62.0 598.898 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 613.022 Td -/F1.0 8 Tf -[<3237>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 598.898 m -132.0 598.898 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 613.022 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 598.898 m -192.0 598.898 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 613.022 Td -/F1.0 8 Tf -[<4e46203532333434>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 598.898 m -400.28 598.898 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 613.022 Td -/F1.0 8 Tf -[<5275612042656e69746f205361657a204761726369612e2038382e204a> 20 <617264696d2056> 70 <617267696e68612e2053e36f>] TJ -ET - - -BT -198.0 603.774 Td -/F1.0 8 Tf -[<50> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835372d303830>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 598.898 m -495.28 598.898 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 613.022 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 598.898 m -555.28 598.898 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 613.022 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 572.402 m -62.0 572.402 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 586.526 Td -/F1.0 8 Tf -[<3238>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 572.402 m -132.0 572.402 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 586.526 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 572.402 m -192.0 572.402 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 586.526 Td -/F1.0 8 Tf -[<4e46203532333138>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 572.402 m -400.28 572.402 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 586.526 Td -/F1.0 8 Tf -[<5275612052696f2053616f204a6f7365> 15 <2e2037312e204a> 20 <617264696d204d6172> -15 <696c64612e2053e36f2050> 40 <61756c6f> 40 <2e205370> 35 <2e>] TJ -ET - - -BT -198.0 577.278 Td -/F1.0 8 Tf -[<4365703a2030343835372d323930>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 572.402 m -495.28 572.402 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 586.526 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 572.402 m -555.28 572.402 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 586.526 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -40.0 545.906 m -62.0 545.906 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -46.0 560.03 Td -/F1.0 8 Tf -[<3239>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -62.0 545.906 m -132.0 545.906 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -68.0 560.03 Td -/F1.0 8 Tf -[<474144455f313038>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -132.0 545.906 m -192.0 545.906 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -138.0 560.03 Td -/F1.0 8 Tf -[<4e46203532333431>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -192.0 545.906 m -400.28 545.906 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -198.0 560.03 Td -/F1.0 8 Tf -[<5275612045737465> 30 <76> 25 <616f20426572> -25 <6e617264692e2038322e204a> 20 <617264696d20416c6d65696461205072> 10 <61646f> 40 <2e2053e36f>] TJ -ET - - -BT -198.0 550.782 Td -/F1.0 8 Tf -[<50> 40 <61756c6f> 40 <2e205370> 35 <2e204365703a2030343835342d323230>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -400.28 545.906 m -495.28 545.906 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -406.28 560.03 Td -/F1.0 8 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.86667 0.86667 0.86667 SCN -495.28 545.906 m -555.28 545.906 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -517.816 560.03 Td -/F1.0 8 Tf -[<52242031352c3030>] TJ -ET - -0.97647 0.45098 0.08627 scn - -BT -40.0 522.572 Td -/F2.0 13 Tf -[<524553554d4f>] TJ -ET - -0.97647 0.45098 0.08627 SCN -40.0 516.436 m -555.28 516.436 l -S -0.0 0.0 0.0 scn -0.97647 0.45098 0.08627 scn -40.0 489.726 130.95045 18.71 re -f -0.0 0.0 0.0 scn -0.97647 0.45098 0.08627 scn -170.95045 489.726 119.04955 18.71 re -f -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -40.0 508.436 m -170.95045 508.436 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 489.726 m -170.95045 489.726 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 508.936 m -40.0 489.226 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 508.936 m -170.95045 489.226 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -0.0 0.0 0.0 scn - -BT -48.0 495.142 Td -/F2.0 9 Tf -[<5469706f>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -170.95045 508.436 m -290.0 508.436 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 489.726 m -290.0 489.726 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 508.936 m -170.95045 489.226 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -290.0 508.936 m -290.0 489.226 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN -0.0 0.0 0.0 scn - -BT -178.95045 495.142 Td -/F2.0 9 Tf -[<5175616e746964616465>] TJ -ET - -0.0 0.0 0.0 scn -1 w -0.0 0.0 0.0 SCN -40.0 489.726 m -170.95045 489.726 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 471.322 m -170.95045 471.322 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 490.226 m -40.0 470.822 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 490.226 m -170.95045 470.822 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 476.636 Td -/F1.0 9 Tf -[<456e7472656761204e6f72> -25 <6d616c>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -170.95045 489.726 m -290.0 489.726 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 471.322 m -290.0 471.322 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 490.226 m -170.95045 470.822 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -290.0 490.226 m -290.0 470.822 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -178.95045 476.636 Td -/F1.0 9 Tf -[<3239>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -40.0 471.322 m -170.95045 471.322 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 452.918 m -170.95045 452.918 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 471.822 m -40.0 452.418 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 471.822 m -170.95045 452.418 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 458.232 Td -/F1.0 9 Tf -[<5265746972> 10 <616461>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -170.95045 471.322 m -290.0 471.322 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 452.918 m -290.0 452.918 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 471.822 m -170.95045 452.418 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -290.0 471.822 m -290.0 452.418 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -178.95045 458.232 Td -/F1.0 9 Tf -[<30>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -40.0 452.918 m -170.95045 452.918 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 434.514 m -170.95045 434.514 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 453.418 m -40.0 434.014 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 453.418 m -170.95045 434.014 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 439.828 Td -/F1.0 9 Tf -[<42f46e> 10 <7573>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -170.95045 452.918 m -290.0 452.918 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 434.514 m -290.0 434.514 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 453.418 m -170.95045 434.014 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -290.0 453.418 m -290.0 434.014 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -178.95045 439.828 Td -/F1.0 9 Tf -[<30>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -40.0 434.514 m -170.95045 434.514 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 416.11 m -170.95045 416.11 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -40.0 435.014 m -40.0 415.61 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 435.014 m -170.95045 415.61 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -48.0 421.424 Td -/F1.0 9 Tf -[<446573636f6e746f>] TJ -ET - -1 w -0.0 0.0 0.0 SCN -170.95045 434.514 m -290.0 434.514 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 416.11 m -290.0 416.11 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -170.95045 435.014 m -170.95045 415.61 l -S -[] 0 d -1 w -0.0 0.0 0.0 SCN -290.0 435.014 m -290.0 415.61 l -S -[] 0 d -1 w -0.97647 0.45098 0.08627 SCN - -BT -178.95045 421.424 Td -/F1.0 9 Tf -[<30>] TJ -ET - -0.97647 0.45098 0.08627 scn - -BT -40.0 390.622 Td -/F2.0 16 Tf -[<54> 40 <4f> 40 <54> 90 <414c20412050> 100 <41> 50 <4741523a205224203433352c3030>] TJ -ET - -0.0 0.0 0.0 scn -0.0 0.0 0.0 SCN -0.7 w -40.0 323.07 m -277.64 323.07 l -S -317.64 323.07 m -555.28 323.07 l -S -0.0 0.0 0.0 scn - -BT -119.391 308.608 Td -/F2.0 9 Tf -[<4272756e6f20436f72> 15 <676f7a696e686f>] TJ -ET - - -BT -399.722 308.608 Td -/F2.0 9 Tf -[<5265656d2054> 80 <72616e73706f72> -20 <7465>] TJ -ET - -0.41961 0.44706 0.50196 scn - -BT -116.784 295.326 Td -/F1.0 8 Tf -[<417373696e61747572> 10 <6120646f204d6f746f72> -15 <69737461>] TJ -ET - - -BT -386.3 295.326 Td -/F1.0 8 Tf -[<417373696e61747572> 10 <6120646f2041646d696e69737472> 10 <61646f72>] TJ -ET - -0.0 0.0 0.0 scn -/Stamp1 Do -Q - -endstream -endobj -9 0 obj -<< /ArtBox [0 0 595.28 841.89] -/BleedBox [0 0 595.28 841.89] -/Contents 8 0 R -/CropBox [0 0 595.28 841.89] -/MediaBox [0 0 595.28 841.89] -/Parent 3 0 R -/Resources << /Font << /F1.0 7 0 R -/F2.0 6 0 R ->> -/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] -/XObject << /Stamp1 10 0 R ->> ->> -/TrimBox [0 0 595.28 841.89] -/Type /Page ->> -endobj -10 0 obj -<< /BBox [0 0 595.28 841.89] -/Length 363 -/Resources << /Font << /F1.0 7 0 R ->> ->> -/Subtype /Form -/Type /XObject ->> -stream -q -/DeviceRGB cs -0.0 0.0 0.0 scn -/DeviceRGB CS -0.0 0.0 0.0 SCN -0.7 w -0 J -0 j -[] 0 d -/DeviceRGB cs -0.41961 0.44706 0.50196 scn - -BT -171.876 86.256 Td -/F1.0 8 Tf -[<476572> 10 <61646f20656d2031372f30362f323032362031353a313420b7205265656d2054> 120 <72> 10 <616e73706f72> -40 <7465209720646f63756d656e746f20696e746572> -25 <6e6f>] TJ -ET - -/DeviceRGB cs -0.0 0.0 0.0 scn -Q - -endstream -endobj -xref -0 11 -0000000000 65535 f -0000000015 00000 n -0000000109 00000 n -0000000158 00000 n -0000000221 00000 n -0000028577 00000 n -0000028915 00000 n -0000029017 00000 n -0000029114 00000 n -0000047350 00000 n -0000047688 00000 n -trailer -<< /Info 1 0 R -/Root 2 0 R -/Size 11 ->> -startxref -48200 -%%EOF diff --git a/Erros/teste _ Reem Logística_quando aperta a pre visualização do holerite.html b/Erros/teste _ Reem Logística_quando aperta a pre visualização do holerite.html deleted file mode 100644 index 888642b..0000000 --- a/Erros/teste _ Reem Logística_quando aperta a pre visualização do holerite.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - - teste | Reem Logística - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
G
- Reem Logística -
-
-
-
- - - - - - -
- -
- -
- ← Consolidações -
-
-
-

teste

- 📝 Rascunho -
-

- 📅 01/02/2026 → 28/02/2026 - · Criada por Administrador Gade -

-
-
- ✏️ Continuar validação -
-
-
-
- -
-

Valor total da consolidação

-

R$ 5265,00

-
- -

👥 Motoristas

-
-
-
-
-

Bruno Corgozinho

-

R$ 5265,00

-
-
- - 📄 Relatório Individual - 🧾 Gerar Holerite -
-
-
-
-
- - - - - -
- - - - - - diff --git a/Gemfile b/Gemfile index a8683a4..d69d0a2 100644 --- a/Gemfile +++ b/Gemfile @@ -29,6 +29,11 @@ gem "prawn-table" # Planilhas (XLSX) — geração da carga de importação do SimpliRoute gem "caxlsx" +# Leitura do .xlsx do PLANO do SimpliRoute (reserva do romaneio, quando a API não +# responde ou o plano do dia ainda não foi publicado). A roo pina rubyzip < 3.0; +# o único outro consumidor é o selenium-webdriver (grupo de teste, aceita >= 1.2.2, +# < 4.0), então o bundler rebaixa o rubyzip sem quebrar nada. +gem "roo", "~> 2.10" gem "rqrcode" # QR code no holerite (login rápido motorista) gem "chunky_png" # renderiza QR como PNG para embed no Prawn @@ -47,6 +52,10 @@ group :development, :test do gem "rspec-rails" gem "factory_bot_rails" gem "faker" + # Lê o PDF gerado (páginas e texto) nos specs. Sem ele, o único jeito de testar + # um PDF do Prawn seria olhar o arquivo: as fontes TTF são subsetadas, então o + # texto não é "grepável" no binário. + gem "pdf-inspector", require: false end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index cdfc2a2..ffa2121 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,7 @@ GEM remote: https://rubygems.org/ specs: + Ascii85 (2.0.1) actioncable (7.1.6) actionpack (= 7.1.6) activesupport (= 7.1.6) @@ -82,6 +83,7 @@ GEM tzinfo (~> 2.0) addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) + afm (1.0.0) annotate (3.2.0) activerecord (>= 3.2, < 8.0) rake (>= 10.4, < 14.0) @@ -100,6 +102,11 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) + caxlsx (4.5.0) + htmlentities (~> 4.3, >= 4.3.4) + marcel (~> 1.0) + nokogiri (~> 1.10, >= 1.10.4) + rubyzip (>= 2.4, < 4) cgi (0.5.1) chronic (0.10.2) chunky_png (1.4.0) @@ -139,6 +146,8 @@ GEM net-http (~> 0.5) globalid (1.3.0) activesupport (>= 6.1) + hashery (2.1.2) + htmlentities (4.4.2) i18n (1.14.8) concurrent-ruby (~> 1.0) image_processing (2.0.2) @@ -192,6 +201,13 @@ GEM orm_adapter (0.5.0) pagy (9.4.0) pdf-core (0.10.0) + pdf-inspector (1.3.0) + pdf-reader (>= 1.0, < 3.0.a) + pdf-reader (2.16.0) + Ascii85 (>= 1.0, < 3.0, != 2.0.0) + afm (>= 0.2.1, < 2) + hashery (~> 2.0) + ttfunk pg (1.6.3-x86_64-linux) pp (0.6.3) prettyprint @@ -269,6 +285,9 @@ GEM actionpack (>= 7.0) railties (>= 7.0) rexml (3.4.4) + roo (2.10.1) + nokogiri (~> 1) + rubyzip (>= 1.3.0, < 3.0.0) rqrcode (3.2.0) chunky_png (~> 1.0) rqrcode_core (~> 2.0) @@ -290,7 +309,7 @@ GEM rspec-mocks (~> 3.13) rspec-support (~> 3.13) rspec-support (3.13.7) - rubyzip (3.4.0) + rubyzip (2.4.1) securerandom (0.4.1) selenium-webdriver (4.44.0) base64 (~> 0.2) @@ -344,6 +363,7 @@ PLATFORMS DEPENDENCIES annotate capybara + caxlsx chunky_png debug devise @@ -354,6 +374,7 @@ DEPENDENCIES importmap-rails jbuilder pagy (~> 9.0) + pdf-inspector pg (~> 1.1) prawn prawn-table @@ -362,6 +383,7 @@ DEPENDENCIES pundit rack-mini-profiler rails (~> 7.1.0) + roo (~> 2.10) rqrcode rspec-rails selenium-webdriver diff --git a/README.md b/README.md index e3d1a16..8c94f2d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Sistema web para controle de custos de entregas hospitalares da **Gade Hospitalar**. **Stack:** Ruby on Rails 7+ · PostgreSQL 15 · Docker · Tailwind CSS · Hotwire (Turbo + Stimulus) -**Repositório:** https://git.xenserver.com.br/Cludio-code/logistica-controle-custos +**Repositório:** https://git.xenserver.com.br/victor/Reem-Notas --- @@ -2113,3 +2113,1627 @@ docker compose exec app bundle exec rspec \ ``` + +--- + +
+🔢 Dashboard × Operações: por que os números não batiam — notas x visitas + painel de avulsas (24/08/2026) + +> ⚠️ **STATUS: implementado, ainda NÃO executado.** Não há Ruby/Bundler nem Postgres na máquina de +> desenvolvimento — foi conferida a sintaxe de todos os `.rb` e `.erb` alterados. **A suíte e a +> validação com dado real continuam pendentes** — roteiro no fim desta seção. + +### 🎯 O problema +Mesmo período filtrado, dois números diferentes: + +| | Dashboard financeiro | Dashboard de Operações | +|---|---|---| +| Total | 4977 | 4973 | +| Entregues / Sucesso | 4852 | 4851 | +| Falhadas / Recusas | 124 | 122 | +| Pendentes | 1 | 0 | + +Não era arredondamento: **as duas telas contam coisas diferentes**, e nada na interface dizia isso. + +- O **financeiro** conta **visitas** (idas ao local). É o recorte certo lá, porque é por ida que o + motorista recebe — `Entrega.contar_atendidas` conta linhas, e a consolidação paga em cima disso. +- **Operações** conta **notas fiscais** (último status de cada NF). É o recorte certo aqui, porque + é o que o cliente paga e o que confere nos documentos físicos — o mesmo critério da aba ENTREGAS + da planilha entregue (`Analytics::PlanilhaEntregas`). + +Uma NF que falhou dia 10 e foi entregue dia 12 vale **2 no financeiro e 1 em Operações**. Correto +nos dois — mas invisível. + +### 🐛 Três defeitos reais por trás disso + +**1. O dedup rodava sobre a tabela inteira, não sobre o período.** O `ROW_NUMBER() ... rn = 1` +ficava numa CTE **antes** do filtro de data. Se o último checkout de uma NF era **posterior** ao fim +do período, a visita que aconteceu **dentro** do período sumia da contagem do mês. Subcontagem +silenciosa em todo fechamento. Agora o dedup acontece em `#linhas`, **depois** do período e do +cross-filter. + +**2. O dedup escondia todo o insucesso reentregue.** NF que falhou duas vezes antes de entregar +aparecia como 100% de sucesso, e o motivo sumia do "Índices de falha". + +**3. O período nem era aplicado no modo Operação.** `montar([@operacao], ...)` era chamado **sem +`inicio:`/`fim:`** e o seletor de data só aparecia no modo Global — comparar as duas telas "no mesmo +período" era literalmente impossível. + +### 🆕 O que mudou na tela + +**Operações — camada "Visitas ao local"** (abaixo dos 4 cards): visitas realizadas, retentativas, +insucessos por visita e "entregues na 2ª ida ou mais". Os 4 cards de cima seguem contando **notas**. + +**Operações — painel "Notas fora da operação"**: NFs entregues no período que **não estão em nenhuma +planilha `gade_entregas_*`** — os planos avulsos e de inclusão. Contavam no financeiro e o +`INNER JOIN` com a tabela da operação as descartava aqui. Agora aparecem com NF, plano/título, +motorista, unidade, data, resultado e motivo, com quebra por plano de origem. + +**Operações — período no modo Operação**: o seletor passa a valer também aqui, mas **só quando o +operador escolhe uma faixa** (`inicio`/`fim` na URL). Sem escolha, o recorte segue sendo a operação +inteira — senão abrir uma operação de meses atrás cairia no mês corrente e mostraria zero. Botão +**"Operação inteira"** volta ao recorte natural. + +**Financeiro — linha "N notas fiscais"** no card Total Entregas, ao lado de "visitas atendidas". + +**Financeiro — card "N pendentes" agora é clicável** → `/dashboard/pendentes`, a tela nova +**"Entregas em aberto"**. O número existia desde sempre e **nenhuma tela listava as linhas por trás +dele** — só dava para descobrir por `rails runner`. A lista traz NF, status, motorista, veículo, +unidade, data planejada, **em qual operação a NF está** (ou "fora da operação") e **quantas visitas +o rastreio tem para ela**. Essas duas últimas colunas respondem sozinhas por que a entrega ficou em +aberto e por que o dashboard de Operações não a mostrava. + +### 🔍 O que o dado real mostrou (24/08/2026, teste) +A "1 pendente" que não aparecia em Operações era a **NF 85382 — MARIA APARECIDA JESUS SANTOS**: +plano avulso, status `pending`, **sem motorista**, planejada 03/08/2026, STS VILA PRUDENTE _ +SAPOPEMBA. Nota **fora da operação** — o `INNER JOIN` a descartava. Confirmado no painel novo. + +⚠️ **`title` NÃO é o nome do plano.** No dado real ele traz `NF 89096 - KAIQUE TAUAN DA SILVA` — o +formato da coluna A da planilha de importação (`NF {nota_fiscal} - {nome_completo}`), ou seja, o +**destinatário**. Agrupar por ele dava um grupo por NF. `COLUNAS_PLANO` passou a ser +`notes, comments, route_id`; `title` virou a coluna "Destinatário". Quando nenhuma coluna de plano +vem preenchida, a quebra cai para **unidade**, que ainda informa algo. **A coluna que carrega +"(Avulsa)"/"INCLUSÃO" segue não confirmada** — pode ser que o espelho simplesmente não a traga +(o sync já deixa 4 colunas 100% NULL). + +### ⚙️ Pontos não-óbvios + +**Duas camadas no mesmo objeto.** `OperacaoMetricas#visitas` = uma linha por ida; `#linhas` = uma +linha por NF (a última visita). Todos os KPIs, o donut, os motivos, o mapa e a tabela espelho +continuam saindo de `#linhas` — ou seja, **a tela segue batendo com a planilha do cliente**. Só a +faixa nova lê `#visitas`. + +**`uniq` por `tracking_id`.** Sem a CTE, se a mesma `nota_fiscal` estiver repetida dentro de uma +tabela de operação (ou em duas tabelas do UNION global), o `INNER JOIN` devolvia a **mesma visita** +mais de uma vez. Agora colapsa. + +**Filtro de conta unificado.** `Entrega.condicao_conta_sql` nasceu para as queries cruas de +`Analytics` usarem exatamente o mesmo recorte de `DB_EXISTING_ACCOUNT_ID` do scope +`da_conta_gade` — antes o dashboard filtrava conta e Operações não. + +**`NOT IN` com `NULL` devolve zero linhas.** Cada `SELECT` da união em `NotasForaOperacao` filtra +`nota_fiscal IS NOT NULL`; sem isso um único NULL numa planilha deixaria o painel vazio para sempre. +Tem spec para isso. + +### 📂 Arquivos +``` +app/models/entrega.rb (contas_gade + condicao_conta_sql) +app/models/operacao.rb (por_notas — em que operação cada NF está) +app/services/analytics/operacao_metricas.rb (visitas x linhas; dedup pós-filtro; conta) +app/services/analytics/notas_fora_operacao.rb (NOVO — avulsas/inclusão) +app/controllers/operacoes_dashboard_controller.rb (período no modo Operação; @fora_operacao) +app/controllers/dashboard_controller.rb (@notas_atendidas + action #pendentes) +app/views/dashboard/pendentes.html.erb (NOVO — tela "Entregas em aberto") +config/routes.rb (GET /dashboard/pendentes) +app/views/operacoes_dashboard/_painel.html.erb (faixa "Visitas ao local") +app/views/operacoes_dashboard/_fora_operacao.html.erb (NOVO — painel de avulsas) +app/views/operacoes_dashboard/index.html.erb (seletor de período + render do painel) +app/views/dashboard/index.html.erb (linha "N notas fiscais" + card clicável) +spec/services/analytics/operacao_metricas_spec.rb (+ NF com retentativa) +spec/services/analytics/notas_fora_operacao_spec.rb (NOVO) +spec/requests/dashboard_spec.rb (+ tela de entregas em aberto) +``` + +> **Sem migration e sem gem nova** — model, services, controllers, views e specs. + +### ⏳ Pendente — roteiro +```bash +# 1. Suíte (não pôde ser executada aqui — sem Ruby/Bundler local) +docker compose exec app bundle exec rspec \ + spec/services/analytics/operacao_metricas_spec.rb \ + spec/services/analytics/notas_fora_operacao_spec.rb \ + spec/requests/dashboard_spec.rb \ + spec/models/entrega_spec.rb + +# 2. Achar a coluna do PLANO ("(Avulsa)", "INCLUSÃO"). title JÁ foi descartado +# (é o destinatário). Dump de uma nota avulsa real para ver onde o plano está: +docker compose exec app bin/rails runner ' + e = Entrega.por_nf(85382).first + e&.attributes&.reject { |_, v| v.blank? }&.each { |k, v| puts "#{k.ljust(28)} #{v}" } +' + +# 3. Com dado real, no mesmo período nas duas telas: +# financeiro "N notas fiscais" == Operações Global "Total de Entregas" +# financeiro "Total Entregas" == Operações "Visitas ao local" + notas fora da operação +``` + +
+ +--- + +
+📣 Notificações: WhatsApp por QR (Baileys) no lugar do Twilio + contatos, grupos e eventos — ETAPA 1 (24/08/2026) + +> ✅ **STATUS: NO AR no ambiente de teste (24/08/2026).** Migrations aplicadas, container da ponte +> buildado e **WhatsApp pareado por QR** — número `5511920051157`, conectado às 18:07, intervalo em +> 20s. Telas de contatos, grupos, eventos, envios e conexão validadas no navegador. +> +> ⚠️ **A suíte continua sem rodar** — não há Ruby/Bundler na máquina de desenvolvimento. A sintaxe +> de todos os `.rb`/`.erb` foi conferida (com um checker que emula o handler ERB do Rails, porque +> `<%= form_with … do %>` não passa no ERB da stdlib) e a do `server.js` com `node --check`. + +> Esta é a **etapa 1 de 3**. Ver "O que NÃO está aqui" no fim. + +### 🎯 O problema +O canal de WhatsApp era Twilio (pago). Além disso, "quem recebe" era implícito: o +`NotificacaoService` procurava o `User` motorista **pelo nome** da consolidação. Quem não é usuário +do sistema — diretoria, cliente, terceiro — não tinha como ser avisado, e não havia tela nenhuma +para controlar isso. O corpo da mensagem era string interpolada em Ruby. + +### 🆕 O que existe agora + +| Tela | O quê | +|---|---| +| **Notificações → Contatos** | Cadastro manual: nome, WhatsApp e/ou e-mail, grupo. Quem tem só número recebe só WhatsApp. | +| **Notificações → Grupos** | Diretoria, Operação, Motoristas… É o **grupo** que assina os eventos. | +| **Notificações → Eventos** | Cria eventos e marca quais grupos recebem, por qual canal. Gatilho `manual` tem botão "disparar agora". | +| **Notificações → WhatsApp** | Pareamento por **QR code**, status ao vivo, envio de teste, desconectar. | +| **Notificações → Envios** | Log de tudo que saiu: destinatário, canal, situação e o erro real. | + +### ⚙️ Pontos não-óbvios + +**Container Node novo (`whatsapp/`).** Não existe biblioteca Ruby que fale o protocolo do WhatsApp +Web — é Baileys. A ponte expõe `/status`, `/enviar`, `/logout` e `/health`, protegida por +`WHATSAPP_TOKEN`. A **porta não é publicada** no compose: só o container do Rails alcança. Publicar +exporia um endpoint que manda mensagem em nome da empresa. + +**A sessão precisa de volume.** `whatsapp_auth:/data` — sem ele, cada deploy exige escanear o QR +de novo. + +**Envio serializado e com intervalo.** Disparo em rajada é o que mais causa banimento no canal não +oficial. A fila do Node serializa e o Rails pausa entre mensagens (`whatsapp_intervalo_segundos`, +nasce em 5s). Como `sleep(5) × 30 contatos` penduraria o Puma por 2min30, o envio roda em +`NotificacaoJob`, **nunca dentro da requisição**. + +**`whatsapp_provedor` nasce em `twilio`.** O deploy não muda o comportamento até o ADM parear o QR +e trocar o provedor na tela. `Notificacao::Whatsapp` é o ponto único que escolhe — trocar +Twilio ↔ Baileys é um campo, não um `if` espalhado. + +**Nomes de rota ≠ nomes de controller, de propósito.** `grupos_contato` e `eventos_notificacao` +têm singular igual ao plural para o Inflector (que não fala português) e o Rails sufixaria o helper +de index com `_index` — pegadinha silenciosa. As rotas se chamam `grupos`, `eventos`, `envios`. +Por isso o `form_with` dos grupos passa `url:` explícita: a rota polimórfica de `GrupoContato` +procuraria `admin_grupo_contato_path`. + +**O aviso pessoal ao motorista não regrediu.** Ele continua recebendo o e-mail formatado do +`ConsolidacaoMailer` (não virou texto puro); o que mudou é que o WhatsApp passa pelo provedor +escolhido e **tudo fica logado**. Os grupos recebem uma cópia via `Despachante`, com +`envolvido: nil` para o motorista não receber duas vezes. + +**Log em tabela, não em arquivo.** O envio engole exceção de propósito (um SMTP fora do ar não pode +travar um fechamento). Com sessão QR — que cai sozinha e exige repareamento — "o motorista +recebeu?" vira pergunta de rotina, e a resposta precisava sair do `log/production.log`. + +### ⚠️ O risco, dito na tela +Conectar por QR usa a porta do WhatsApp Web por engenharia reversa: está **fora dos Termos do +WhatsApp** e a Meta **pode banir o número** sem aviso. A tela de pareamento diz isso em texto e +recomenda **chip dedicado**, não o número principal da operação. + +### 📂 Arquivos +``` +db/migrate/20260824000001_create_notificacao_contatos.rb (NOVO) +db/migrate/20260824000002_create_notificacao_eventos.rb (NOVO — semeia os 2 eventos atuais) +db/migrate/20260824000003_create_notificacao_envios.rb (NOVO) +db/migrate/20260824000004_add_baileys_to_configuracao_...rb (NOVO) +whatsapp/{server.js,package.json,Dockerfile} (NOVO — ponte Baileys) +docker-compose.yml (serviço whatsapp + volume) +app/models/{grupo_contato,contato,evento_notificacao}.rb (NOVO) +app/models/{grupo_evento_assinatura,notificacao_envio}.rb (NOVO) +app/models/configuracao_notificacao.rb (provedor + credenciais Baileys) +app/services/notificacao/{cliente_whatsapp,whatsapp,despachante}.rb (NOVO) +app/services/notificacao_service.rb (grupos + provedor + log) +app/jobs/notificacao_job.rb (NOVO) +app/mailers/notificacao_mailer.rb + view (NOVO — e-mail genérico) +app/controllers/admin/{grupos_contato,contatos,eventos_notificacao}_controller.rb (NOVO) +app/controllers/admin/{whatsapp_sessoes,notificacao_envios}_controller.rb (NOVO) +app/policies/{contato,grupo_contato,evento_notificacao,notificacao_envio,whatsapp_sessao}_policy.rb (NOVO) +app/views/admin/{grupos_contato,contatos,eventos_notificacao,whatsapp_sessoes,notificacao_envios}/ (NOVO) +app/views/layouts/_navbar.html.erb (seção Notificações) +config/routes.rb + .env.example +spec/{models,services}/… (NOVO) +``` + +> **4 migrations e 1 container novo.** Nenhuma gem nova no Gemfile. + +### ⏳ Pendente — roteiro +```bash +# 1. Gerar o token da ponte e colocar no .env do servidor: +openssl rand -hex 32 # -> WHATSAPP_TOKEN=... +# e BAILEYS_URL=http://whatsapp:3001 + +# 2. Subir (a 1ª vez baixa o Baileys; leva alguns minutos): +docker compose up -d --build + +# ⚠️ Se a build da ponte falhar com `npm error syscall spawn git / ENOENT`: +# falta `git` na imagem. O Baileys puxa `libsignal` de um repositório GIT, +# não do registry do npm. Já está no whatsapp/Dockerfile (`apk add git`) — +# se sumir de lá, é isto. NÃO é erro de rede nem de versão do pacote. + +# 3. Migrar: +docker compose exec app bin/rails db:migrate + +# 4. Suíte (não pôde ser executada aqui — sem Ruby/Bundler local): +docker compose exec app bundle exec rspec \ + spec/models/contato_spec.rb spec/models/evento_notificacao_spec.rb \ + spec/services/notificacao/ + +# 5. Parear: Notificações → WhatsApp → ler o QR com o CHIP DEDICADO. +# Depois: Configurações → Notificações → provedor = Baileys, e enviar um teste. + +# 6. Cadastrar um grupo, um contato e marcar o grupo nos 2 eventos de sistema. +# Conferir o resultado em Notificações → Envios. +``` + +### 🚧 O que NÃO está aqui (etapas 2 e 3) +- **Editor de blocos** (arrastar cabeçalho / tabela de valores / aviso / botão / rodapé, com preview + e HTML montado no e-mail). Hoje o texto dos 2 eventos de sistema ainda é o do código, e o disparo + manual usa um campo de texto. +- **Gatilhos novos**: `valor_alterado`, `operacao_alterada` e `agendado` já existem como opção no + cadastro e o `Despachante` os atende — mas **ainda não há código chamando** esses gatilhos, nem o + job de varredura do agendado. Um evento com esses gatilhos hoje só dispara pelo botão manual. + +
+ +--- + +
+🧱 Editor de blocos das mensagens — ETAPA 2 (24/08/2026) + +> ✅ **STATUS: NO AR no ambiente de teste (24/08/2026).** Migration aplicada; a tela de eventos já +> mostra o ✓ dos canais com mensagem montada. +> +> ⚠️ **Não validado ainda**: o arrastar/soltar e o preview com dado real, na mão, no navegador — e a +> suíte. Sintaxe conferida em todos os `.rb`, `.erb` e **no JavaScript do editor** (`node --check` +> sobre o ` diff --git a/app/views/admin/contatos/edit.html.erb b/app/views/admin/contatos/edit.html.erb new file mode 100644 index 0000000..7698323 --- /dev/null +++ b/app/views/admin/contatos/edit.html.erb @@ -0,0 +1,8 @@ +
+
+

Editar: <%= @contato.nome %>

+

Atualize os dados deste contato

+
+ <%= render 'shared/flash' %> + <%= render 'form', contato: @contato %> +
diff --git a/app/views/admin/contatos/index.html.erb b/app/views/admin/contatos/index.html.erb new file mode 100644 index 0000000..e622273 --- /dev/null +++ b/app/views/admin/contatos/index.html.erb @@ -0,0 +1,146 @@ +
+ + <%# Header — mesmo padrão de Usuários: título, subtítulo e ação primária %> +
+
+

+ <%= icone :usuarios, espaco: false %> Contatos +

+

+ Quem recebe as mensagens. Quem tem só número recebe só WhatsApp; quem tem só + e-mail recebe só e-mail. +

+
+ <%= link_to new_admin_contato_path(grupo_id: params[:grupo_id]), data: { turbo: false }, + class: 'inline-flex items-center gap-2 px-5 py-3 bg-[#f97316] hover:bg-orange-500 + text-white font-semibold rounded-xl transition-colors min-h-[48px] whitespace-nowrap' do %> + <%= icone :adicionar, cor: nil, tamanho: 'w-5 h-5', espaco: false %> Novo contato + <% end %> +
+ + <%= render 'shared/flash' %> + + <%# Filtros %> +
+
+ + <%= icone :buscar, cor: 'text-gray-500', tamanho: 'w-4 h-4', espaco: false %> + + +
+ + + <% if params[:q].present? || params[:grupo_id].present? %> + <%= link_to 'Limpar', admin_contatos_path, data: { turbo: false }, + class: 'text-gray-500 hover:text-white text-sm transition-colors' %> + <% end %> +
+ + <%# Tabela %> +
+
+ + + + + + + + + + + + + <% @contatos.each do |contato| %> + + + + + + + + + <% end %> + + <% if @contatos.empty? %> + + + + <% end %> + +
NomeWhatsAppE-mailGrupoSituaçãoAções
+
+ <%# Avatar: inicial para pessoa, ícone para grupo — dá para + distinguir os dois tipos sem ler a linha inteira. %> +
+ <% if contato.grupo_whatsapp? %> + <%= icone :usuarios, cor: nil, tamanho: 'w-4 h-4', espaco: false %> + <% else %> + <%= contato.nome.to_s[0].to_s.upcase %> + <% end %> +
+
+ <%= contato.nome %> + <% if contato.grupo_whatsapp? %> + grupo do WhatsApp + <% end %> +
+
+
+ <% if contato.grupo_whatsapp? %> + + <%= contato.whatsapp_grupo_nome.presence || contato.whatsapp_grupo_jid %> + + <% else %> + <%= contato.telefone.presence || '—' %> + <% end %> + <%= contato.email.presence || '—' %> + <% if contato.grupo_contato %> + <%= contato.grupo_contato.nome %> + <% else %> + + <%= icone :alerta, cor: nil, tamanho: 'w-3.5 h-3.5', espaco: false %> sem grupo + + <% end %> + <%= badge_status_usuario(contato.ativo?) %> +
+ <%= link_to edit_admin_contato_path(contato), data: { turbo: false }, + class: 'p-2 text-gray-400 hover:text-white hover:bg-white/10 rounded-lg transition-colors', + title: 'Editar' do %> + <%= icone :editar, cor: nil, tamanho: 'w-4 h-4', espaco: false %> + <% end %> + <%= button_to admin_contato_path(contato), method: :delete, + class: 'p-2 text-gray-600 hover:text-red-400 hover:bg-red-900/20 rounded-lg transition-colors', + title: 'Excluir', + form: { data: { turbo_confirm: "Excluir #{contato.nome}?" } } do %> + <%= icone :excluir, cor: nil, tamanho: 'w-4 h-4', espaco: false %> + <% end %> +
+
+
<%= icone :vazio, tamanho: 'w-10 h-10', cor: 'text-gray-600', espaco: false %>
+

Nenhum contato encontrado.

+
+
+
+
diff --git a/app/views/admin/contatos/new.html.erb b/app/views/admin/contatos/new.html.erb new file mode 100644 index 0000000..9cf802c --- /dev/null +++ b/app/views/admin/contatos/new.html.erb @@ -0,0 +1,8 @@ +
+
+

Novo contato

+

Cadastre quem vai receber as mensagens

+
+ <%= render 'shared/flash' %> + <%= render 'form', contato: @contato %> +
diff --git a/app/views/admin/eventos_notificacao/_form.html.erb b/app/views/admin/eventos_notificacao/_form.html.erb new file mode 100644 index 0000000..7cca379 --- /dev/null +++ b/app/views/admin/eventos_notificacao/_form.html.erb @@ -0,0 +1,172 @@ +<% + input = 'w-full px-4 py-3 bg-[#0a0a0a] border border-white/10 rounded-xl text-white + placeholder-gray-600 focus:outline-none focus:border-[#f97316] focus:ring-1 + focus:ring-[#f97316] transition-colors' + menor = 'w-full px-3 py-2.5 bg-[#0a0a0a] border border-white/10 rounded-xl text-white text-sm + focus:outline-none focus:border-[#f97316] focus:ring-1 focus:ring-[#f97316] transition-colors' + rotulo = 'block text-sm font-medium text-gray-300 mb-1.5' + secao = 'text-sm font-medium text-gray-300 mb-4' + toggle = "w-11 h-6 bg-gray-700 peer-focus:outline-none rounded-full peer + peer-checked:after:translate-x-full peer-checked:after:border-white + after:content-[''] after:absolute after:top-[2px] after:left-[2px] + after:bg-white after:border-gray-300 after:border after:rounded-full + after:h-5 after:w-5 after:transition-all peer-checked:bg-[#f97316]" +%> +<%= form_with model: [:admin, evento], + url: (evento.persisted? ? admin_evento_path(evento) : admin_eventos_path), + data: { turbo: false }, + class: 'bg-[#1a1a1a] rounded-2xl border border-white/5 p-8 space-y-6' do |f| %> + + <% if evento.errors.any? %> +
+

+ <%= pluralize(evento.errors.count, 'erro', 'erros') %> encontrado<%= evento.errors.count > 1 ? 's' : '' %>: +

+
    + <% evento.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %> + +
+
+ <%= f.label :nome, class: rotulo %> + <%= f.text_field :nome, required: true, + placeholder: 'Aviso de fechamento para a diretoria', class: input %> +
+ +
+ <%= f.label :gatilho, 'Gatilho (o que faz disparar)', class: rotulo %> + <% if evento.sistema? %> +

+ <%= icone :travado, cor: 'text-gray-500', tamanho: 'w-4 h-4', espaco: false %> + <%= evento.gatilho_label %> +

+

+ Evento de sistema: o gatilho e a chave são fixos porque o código dispara por eles. +

+ <% else %> + <%= f.select :gatilho, + EventoNotificacao::GATILHOS.map { |g| [EventoNotificacao::GATILHO_LABEL[g], g] }, {}, + class: "#{input} cursor-pointer" %> + <% end %> +
+ +
+ <%= f.label :descricao, 'Descrição', class: rotulo %> + <%= f.text_field :descricao, placeholder: 'Opcional', class: input %> +
+
+ + <%# Agendamento — só faz sentido no gatilho `agendado`; deixo sempre visível + para não depender de JS, com a explicação de quando vale. %> +
+

+ Agendamento + — só vale no gatilho "Agendado" +

+
+
+ <%= f.label :frequencia, 'Frequência', class: rotulo %> + <%= f.select :frequencia, EventoNotificacao::FREQUENCIAS.map { |x| [x.capitalize, x] }, + { include_blank: '—' }, class: "#{menor} cursor-pointer" %> +
+
+ <%= f.label :hora, 'Hora', class: rotulo %> + <%= f.number_field :hora, min: 0, max: 23, class: menor %> +
+
+ <%= f.label :dia_semana, 'Dia (semanal)', class: rotulo %> + <%= f.select :dia_semana, Date::DAYNAMES.each_with_index.map { |nome, i| [nome, i] }, + { include_blank: '—' }, class: "#{menor} cursor-pointer" %> +
+
+
+ + <%# Assinatura por grupo: TODOS os grupos ativos aparecem, marcados os que já + assinam. Sem isso a tela só mostraria os já configurados e não haveria por + onde adicionar. %> +
+

Quais grupos recebem

+ + <% if @linhas_assinatura.blank? %> +
+
<%= icone :vazio, tamanho: 'w-8 h-8', cor: 'text-gray-600', espaco: false %>
+

+ Nenhum grupo cadastrado ainda — + <%= link_to 'crie um grupo', new_admin_grupo_path, data: { turbo: false }, + class: 'text-[#f97316] hover:text-orange-400 underline' %> + antes. +

+
+ <% else %> +
+ <% Array(@linhas_assinatura).each do |linha| %> + <% grupo = linha[:grupo]; assinatura = linha[:assinatura] %> +
+ + <%= select_tag "assinaturas[#{grupo.id}][canal]", + options_for_select( + GrupoEventoAssinatura::CANAIS.map { |c| [GrupoEventoAssinatura::CANAL_LABEL[c], c] }, + assinatura&.canal || 'ambos' + ), + class: 'px-3 py-2 bg-[#1a1a1a] border border-white/10 rounded-xl text-white text-sm + focus:outline-none focus:border-[#f97316] focus:ring-1 focus:ring-[#f97316] + transition-colors cursor-pointer' %> +
+ <% end %> +
+ <% end %> +
+ + <%# Opções %> +
+
+
+ <%= f.label :notificar_envolvido, 'Avisar também a pessoa envolvida no fato', + class: 'block text-sm font-medium text-gray-300' %> +

+ Ex.: o motorista dono do pagamento, além dos grupos. Só se aplica aos gatilhos de + consolidação/pagamento/valor. +

+
+ +
+ +
+
+ <%= f.label :ativo, 'Evento ativo', class: 'block text-sm font-medium text-gray-300' %> +

Evento inativo não dispara nada

+
+ +
+
+ +
+ <%= link_to 'Cancelar', admin_eventos_path, data: { turbo: false }, + class: 'px-6 py-3 text-gray-400 hover:text-white border border-white/10 + hover:border-white/20 rounded-xl transition-colors' %> + <%= f.submit evento.new_record? ? 'Criar Evento' : 'Salvar Alterações', + class: 'px-8 py-3 bg-[#f97316] hover:bg-orange-500 text-white font-semibold + rounded-xl transition-colors cursor-pointer min-h-[48px]' %> +
+<% end %> diff --git a/app/views/admin/eventos_notificacao/edit.html.erb b/app/views/admin/eventos_notificacao/edit.html.erb new file mode 100644 index 0000000..1af5e2b --- /dev/null +++ b/app/views/admin/eventos_notificacao/edit.html.erb @@ -0,0 +1,8 @@ +
+
+

Editar: <%= @evento.nome %>

+

Atualize o gatilho, o agendamento e os grupos assinantes

+
+ <%= render 'shared/flash' %> + <%= render 'form', evento: @evento %> +
diff --git a/app/views/admin/eventos_notificacao/index.html.erb b/app/views/admin/eventos_notificacao/index.html.erb new file mode 100644 index 0000000..ac20768 --- /dev/null +++ b/app/views/admin/eventos_notificacao/index.html.erb @@ -0,0 +1,157 @@ +<% + input = 'w-full px-4 py-3 bg-[#0a0a0a] border border-white/10 rounded-xl text-white + placeholder-gray-600 focus:outline-none focus:border-[#f97316] focus:ring-1 + focus:ring-[#f97316] transition-colors text-sm' + pill = 'inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-bold' +%> +
+ +
+
+

+ <%= icone :diario, espaco: false %> Eventos de notificação +

+

+ O que dispara mensagem e para quais grupos. Você cria quantos eventos quiser — + o gatilho sai de uma lista fixa, porque gatilho é código. +

+
+ <%= link_to new_admin_evento_path, data: { turbo: false }, + class: 'inline-flex items-center gap-2 px-5 py-3 bg-[#f97316] hover:bg-orange-500 + text-white font-semibold rounded-xl transition-colors min-h-[48px] whitespace-nowrap' do %> + <%= icone :adicionar, cor: nil, tamanho: 'w-5 h-5', espaco: false %> Novo evento + <% end %> +
+ + <%= render 'shared/flash' %> + +
+ <% @eventos.each do |evento| %> + <%# Evento desativado fica esmaecido: a lista mistura ativo e inativo e sem + isso os dois pesam igual na varredura visual. %> +
+
+
+
+

<%= evento.nome %>

+ + <%= evento.gatilho_label %> + + <% if evento.sistema? %> + sistema + <% end %> + <% unless evento.ativo? %> + desativado + <% end %> +
+ +

<%= evento.descricao.presence || '—' %>

+ +
+ <% assinantes = evento.assinaturas.select(&:ativo) %> + <% if assinantes.any? %> +
+ Grupos + <% assinantes.each do |a| %> + + <%= a.grupo_contato.nome %> + · <%= a.canal_label %> + + <% end %> +
+ <% else %> +

+ <%= icone :alerta, cor: nil, tamanho: 'w-3.5 h-3.5', espaco: false %> + Nenhum grupo assina — este evento não manda nada. +

+ <% end %> + + <% if evento.agendado? %> +

+ <%= icone :relogio, cor: 'text-gray-500', tamanho: 'w-3.5 h-3.5', espaco: false %> + <%= evento.frequencia == 'semanal' ? "Toda #{Date::DAYNAMES[evento.dia_semana.to_i]}" : 'Todo dia' %> + às <%= format('%02d:00', evento.hora.to_i) %> +

+ <% end %> +
+
+ + <%# Ações: editor de mensagem por canal + editar/excluir %> +
+
+ <%# O ✓ diz se já existe mensagem montada — sem ela o evento usa o + texto padrão do sistema. %> + <% %w[whatsapp email].each do |canal| %> + <% montado = evento.template_utilizavel(canal).present? %> + <%= link_to template_admin_evento_path(evento, canal: canal), data: { turbo: false }, + title: montado ? 'Mensagem montada no editor' : 'Sem mensagem — usa o texto padrão', + class: "inline-flex items-center gap-1.5 px-3 py-2 rounded-xl text-sm border transition-colors #{ + montado ? 'bg-green-500/10 border-green-500/30 text-green-300 hover:border-green-500' + : 'bg-[#0a0a0a] border-white/10 text-gray-400 hover:border-[#f97316] hover:text-white'}" do %> + <%= icone(montado ? :sucesso : (canal == 'email' ? :email : :telefone), + cor: nil, tamanho: 'w-4 h-4', espaco: false) %> + <%= canal == 'email' ? 'E-mail' : 'WhatsApp' %> + <% end %> + <% end %> +
+ +
+ <%= link_to edit_admin_evento_path(evento), data: { turbo: false }, + class: 'p-2 text-gray-400 hover:text-white hover:bg-white/10 rounded-lg transition-colors', + title: 'Editar' do %> + <%= icone :editar, cor: nil, tamanho: 'w-4 h-4', espaco: false %> + <% end %> + <% if evento.apagavel? %> + <%= button_to admin_evento_path(evento), method: :delete, + class: 'p-2 text-gray-600 hover:text-red-400 hover:bg-red-900/20 rounded-lg transition-colors', + title: 'Excluir', + form: { data: { turbo_confirm: "Excluir o evento #{evento.nome}?" } } do %> + <%= icone :excluir, cor: nil, tamanho: 'w-4 h-4', espaco: false %> + <% end %> + <% end %> +
+
+
+ + <%# Disparo manual: manda mensagem DE VERDADE. %> + <% if evento.manual? && evento.ativo? %> +
+ + <%= icone :expandir, cor: nil, tamanho: 'w-4 h-4', espaco: false %> Disparar agora + + <% com_template = %w[whatsapp email].any? { |c| evento.template_utilizavel(c) } %> + <%= form_with url: disparar_admin_evento_path(evento), method: :post, + data: { turbo: false }, class: 'mt-4 space-y-3' do |f| %> + <% if com_template %> +

+ <%= icone :sucesso, cor: nil, tamanho: 'w-4 h-4', espaco: false, classe: 'mt-0.5' %> + + Este evento tem mensagem montada no editor — ela será usada nos canais configurados. + O texto abaixo só vale para o canal que ainda não tem mensagem própria. + +

+ <% end %> + <%= f.text_field :assunto, placeholder: 'Assunto (só e-mail)', value: evento.nome, class: input %> + <%= f.text_area :corpo, rows: 4, required: !com_template, class: input, + placeholder: com_template ? 'Opcional — só para o canal sem mensagem montada' : 'Mensagem que será enviada…' %> + <%= f.submit 'Enviar para os grupos assinantes', + data: { turbo_confirm: 'Isso envia mensagem de verdade para todos os contatos dos grupos assinantes. Confirmar?' }, + class: 'px-6 py-3 bg-[#f97316] hover:bg-orange-500 text-white font-semibold + rounded-xl transition-colors cursor-pointer min-h-[48px]' %> + <% end %> +
+ <% end %> +
+ <% end %> + + <% if @eventos.empty? %> +
+
<%= icone :vazio, tamanho: 'w-10 h-10', cor: 'text-gray-600', espaco: false %>
+

Nenhum evento cadastrado.

+
+ <% end %> +
+
diff --git a/app/views/admin/eventos_notificacao/new.html.erb b/app/views/admin/eventos_notificacao/new.html.erb new file mode 100644 index 0000000..9f2cc8f --- /dev/null +++ b/app/views/admin/eventos_notificacao/new.html.erb @@ -0,0 +1,8 @@ +
+
+

Novo evento

+

Defina o que dispara a mensagem e quem recebe

+
+ <%= render 'shared/flash' %> + <%= render 'form', evento: @evento %> +
diff --git a/app/views/admin/grupos_contato/_form.html.erb b/app/views/admin/grupos_contato/_form.html.erb new file mode 100644 index 0000000..f8ecbd4 --- /dev/null +++ b/app/views/admin/grupos_contato/_form.html.erb @@ -0,0 +1,63 @@ +<% + input = 'w-full px-4 py-3 bg-[#0a0a0a] border border-white/10 rounded-xl text-white + placeholder-gray-600 focus:outline-none focus:border-[#f97316] focus:ring-1 + focus:ring-[#f97316] transition-colors' + rotulo = 'block text-sm font-medium text-gray-300 mb-1.5' + toggle = "w-11 h-6 bg-gray-700 peer-focus:outline-none rounded-full peer + peer-checked:after:translate-x-full peer-checked:after:border-white + after:content-[''] after:absolute after:top-[2px] after:left-[2px] + after:bg-white after:border-gray-300 after:border after:rounded-full + after:h-5 after:w-5 after:transition-all peer-checked:bg-[#f97316]" +%> +<%# URL explícita: a rota se chama `grupo`/`grupos` (ver routes.rb), então a + rota polimórfica de `model:` procuraria admin_grupo_contato_path e estouraria. + O `model:` continua valendo para nomear os campos (grupo_contato[...]). %> +<%= form_with model: [:admin, grupo], + url: (grupo.persisted? ? admin_grupo_path(grupo) : admin_grupos_path), + data: { turbo: false }, + class: 'bg-[#1a1a1a] rounded-2xl border border-white/5 p-8 space-y-6' do |f| %> + + <% if grupo.errors.any? %> +
+

+ <%= pluralize(grupo.errors.count, 'erro', 'erros') %> encontrado<%= grupo.errors.count > 1 ? 's' : '' %>: +

+
    + <% grupo.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= f.label :nome, class: rotulo %> + <%= f.text_field :nome, required: true, placeholder: 'Diretoria', class: input %> +
+ +
+ <%= f.label :descricao, 'Descrição', class: rotulo %> + <%= f.text_field :descricao, placeholder: 'Quem acompanha o fechamento', class: input %> +

Opcional — ajuda a lembrar para que serve o grupo.

+
+ +
+
+ <%= f.label :ativo, 'Grupo ativo', class: 'block text-sm font-medium text-gray-300' %> +

Grupo inativo não recebe nada, mesmo assinando eventos

+
+ +
+ +
+ <%= link_to 'Cancelar', admin_grupos_path, data: { turbo: false }, + class: 'px-6 py-3 text-gray-400 hover:text-white border border-white/10 + hover:border-white/20 rounded-xl transition-colors' %> + <%= f.submit grupo.new_record? ? 'Criar Grupo' : 'Salvar Alterações', + class: 'px-8 py-3 bg-[#f97316] hover:bg-orange-500 text-white font-semibold + rounded-xl transition-colors cursor-pointer min-h-[48px]' %> +
+<% end %> diff --git a/app/views/admin/grupos_contato/edit.html.erb b/app/views/admin/grupos_contato/edit.html.erb new file mode 100644 index 0000000..1942319 --- /dev/null +++ b/app/views/admin/grupos_contato/edit.html.erb @@ -0,0 +1,8 @@ +
+
+

Editar: <%= @grupo.nome %>

+

Atualize as informações do grupo

+
+ <%= render 'shared/flash' %> + <%= render 'form', grupo: @grupo %> +
diff --git a/app/views/admin/grupos_contato/index.html.erb b/app/views/admin/grupos_contato/index.html.erb new file mode 100644 index 0000000..646f108 --- /dev/null +++ b/app/views/admin/grupos_contato/index.html.erb @@ -0,0 +1,105 @@ +
+ +
+
+

+ <%= icone :tag, espaco: false %> Grupos de contato +

+

+ É o grupo que assina os eventos — cadastrar alguém novo é escolher o grupo, + não repetir a configuração pessoa por pessoa. +

+
+ <%= link_to new_admin_grupo_path, data: { turbo: false }, + class: 'inline-flex items-center gap-2 px-5 py-3 bg-[#f97316] hover:bg-orange-500 + text-white font-semibold rounded-xl transition-colors min-h-[48px] whitespace-nowrap' do %> + <%= icone :adicionar, cor: nil, tamanho: 'w-5 h-5', espaco: false %> Novo grupo + <% end %> +
+ + <%= render 'shared/flash' %> + +
+
+ + + + + + + + + + + + + <% @grupos.each do |grupo| %> + + + + + + + + + <% end %> + + <% if @grupos.empty? %> + + + + <% end %> + +
GrupoDescriçãoContatosAssina os eventosSituaçãoAções
+
+
+ <%= icone :tag, cor: nil, tamanho: 'w-4 h-4', espaco: false %> +
+ <%= grupo.nome %> +
+
<%= grupo.descricao.presence || '—' %> + <%= link_to admin_contatos_path(grupo_id: grupo.id), data: { turbo: false }, + class: 'inline-flex items-center px-2.5 py-1 rounded-full text-xs font-bold + bg-[#f97316]/15 border border-[#f97316]/30 text-[#f97316] + hover:bg-[#f97316]/25 transition-colors', + title: 'Ver os contatos deste grupo' do %> + <%= grupo.contatos.size %> + <% end %> + + <% nomes = grupo.assinaturas.select(&:ativo).map { |a| a.evento_notificacao.nome } %> + <% if nomes.any? %> +
+ <% nomes.each do |nome| %> + <%= nome %> + <% end %> +
+ <% else %> + — nenhum + <% end %> +
<%= badge_status_usuario(grupo.ativo?) %> +
+ <%= link_to edit_admin_grupo_path(grupo), data: { turbo: false }, + class: 'p-2 text-gray-400 hover:text-white hover:bg-white/10 rounded-lg transition-colors', + title: 'Editar' do %> + <%= icone :editar, cor: nil, tamanho: 'w-4 h-4', espaco: false %> + <% end %> + <%= button_to admin_grupo_path(grupo), method: :delete, + class: 'p-2 text-gray-600 hover:text-red-400 hover:bg-red-900/20 rounded-lg transition-colors', + title: 'Excluir', + form: { data: { turbo_confirm: "Excluir #{grupo.nome}? Os #{grupo.contatos.size} contato(s) ficam sem grupo e param de receber." } } do %> + <%= icone :excluir, cor: nil, tamanho: 'w-4 h-4', espaco: false %> + <% end %> +
+
+
<%= icone :vazio, tamanho: 'w-10 h-10', cor: 'text-gray-600', espaco: false %>
+

Nenhum grupo ainda.

+

+ Crie um (ex.: Diretoria, + Motoristas) e depois cadastre os contatos dentro dele. +

+
+
+
+
diff --git a/app/views/admin/grupos_contato/new.html.erb b/app/views/admin/grupos_contato/new.html.erb new file mode 100644 index 0000000..aba1218 --- /dev/null +++ b/app/views/admin/grupos_contato/new.html.erb @@ -0,0 +1,8 @@ +
+
+

Novo grupo de contato

+

Junte contatos que recebem os mesmos eventos

+
+ <%= render 'shared/flash' %> + <%= render 'form', grupo: @grupo %> +
diff --git a/app/views/admin/mensagem_templates/edit.html.erb b/app/views/admin/mensagem_templates/edit.html.erb new file mode 100644 index 0000000..bccbf0a --- /dev/null +++ b/app/views/admin/mensagem_templates/edit.html.erb @@ -0,0 +1,398 @@ +<%# Editor de blocos de UM evento em UM canal. + O estado vive num array JS; o HTML dos cards é desenhado a partir dele e + serializado num hidden ao salvar. Desenhar a partir do estado (em vez de ler + o DOM) é o que faz arrastar, remover e reordenar não perderem conteúdo. %> +<% outro_canal = @canal == 'email' ? 'whatsapp' : 'email' %> +
+ +
+
+

+ <%= icone :editar, espaco: false %> Mensagem — <%= @evento.nome %> +

+
+ <% wpp = @canal != 'email' %> + + <%= icone(wpp ? :telefone : :email, cor: nil, tamanho: 'w-3.5 h-3.5', espaco: false) %> + <%= wpp ? 'WhatsApp' : 'E-mail' %> + + + <%= @evento.gatilho_label %> + +
+
+
+ <%= link_to template_admin_evento_path(@evento, canal: outro_canal), data: { turbo: false }, + class: 'inline-flex items-center gap-2 px-4 py-2.5 rounded-xl text-sm border + border-white/10 text-gray-300 hover:border-white/20 hover:text-white + transition-colors whitespace-nowrap' do %> + <%= icone(outro_canal == 'email' ? :email : :telefone, cor: nil, tamanho: 'w-4 h-4', espaco: false) %> + Editar <%= outro_canal == 'email' ? 'e-mail' : 'WhatsApp' %> + <% end %> + <%= link_to admin_eventos_path, data: { turbo: false }, + class: 'inline-flex items-center gap-2 px-4 py-2.5 rounded-xl text-sm border + border-white/10 text-gray-300 hover:border-white/20 hover:text-white + transition-colors whitespace-nowrap' do %> + <%= icone :voltar, cor: nil, tamanho: 'w-4 h-4', espaco: false %> Voltar + <% end %> +
+
+ + <%= render 'shared/flash' %> + + <% if @template.errors.any? %> +
+

+ <%= pluralize(@template.errors.count, 'erro', 'erros') %> encontrado<%= @template.errors.count > 1 ? 's' : '' %>: +

+
    + <% @template.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %> + + <%= form_with url: template_admin_evento_path(@evento, canal: @canal), method: :patch, + data: { turbo: false }, id: 'form-template' do |f| %> + <%= hidden_field_tag :blocos, @template.blocos.to_json, id: 'campo-blocos' %> + +
+ + <%# ── Paleta ──────────────────────────────────────────── %> +
+
+

Blocos

+

Arraste para a mensagem — ou clique.

+
+ <% Notificacao::Blocos::CATALOGO.each do |tipo, meta| %> +
+ + <%= meta[:rotulo] %> + <%= meta[:dica] %> +
+ <% end %> +
+
+ + <%# ── Variáveis ─────────────────────────────────────── %> + <%# ── EMOJIS ───────────────────────────────────────── + Digitar emoji no teclado do computador é o passo que trava o ADM; + aqui ele clica. A lista é curta e curada de propósito — um seletor + completo viraria uma biblioteca externa (e CSP) para inserir 3 + caracteres. %> +
+

Emojis

+
+ <% %w[✅ ❌ ⚠️ 📌 📢 💰 💵 🧾 📅 🕒 🚚 📦 📍 👤 👍 🙏 ⭐ 🔴 🟢 🟡 ➡️ 📄 📷 🔔 ✍️ 😀 🎉].each do |emoji| %> + + <% end %> +
+
+ +
+

Variáveis

+

+ Clique num campo da mensagem e depois numa variável para inseri-la ali. +

+ + <%# Agrupadas por ORIGEM e sem esconder o que não se aplica: a variável + de outro gatilho aparece apagada, com o aviso de que sai em branco. + Antes, a tela só listava as 6 do contexto — qualquer outro dado + exigia deploy. %> + <% @variaveis.each do |origem, itens| %> + <% next if itens.empty? %> +

+ <%= Notificacao::CatalogoVariaveis::ORIGENS[origem] %> +

+
+ <% itens.each do |v| %> + + <% end %> +
+ <% end %> + +

+ As apagadas (·) não existem neste gatilho e sairiam em branco. + <%= link_to 'Criar variável própria', admin_variaveis_path, class: 'text-orange-500 hover:underline' %>. +

+
+
+ + <%# ── Mensagem ────────────────────────────────────────── %> +
+ <% if @canal == 'email' %> +
+ + <%= text_field_tag :assunto, @template.assunto, id: 'assunto', + class: 'campo-editavel w-full px-4 py-3 bg-[#0a0a0a] border border-white/10 rounded-xl + text-white placeholder-gray-600 focus:outline-none focus:border-[#f97316] + focus:ring-1 focus:ring-[#f97316] transition-colors text-sm' %> +
+ <% end %> + +
+

Mensagem

+
+
+
<%= icone :vazio, tamanho: 'w-8 h-8', cor: 'text-gray-600', espaco: false %>
+

+ Arraste um bloco para cá. Sem blocos, o evento continua usando o texto padrão do sistema. +

+
+
+ +
+ <%= submit_tag 'Salvar mensagem', + class: 'px-6 py-3 bg-[#f97316] hover:bg-orange-500 text-white font-semibold + rounded-xl transition-colors cursor-pointer min-h-[48px]' %> + + +
+
+ + <%# ── Preview ─────────────────────────────────────────── %> +
+

Preview

+

+ Com valores de exemplo, renderizado pelo mesmo código do envio. +

+

+ <%# iframe sandbox: o HTML do e-mail é montado pelo nosso renderizador + (que escapa tudo), mas exibir dentro de um sandbox sem scripts evita + que os estilos do e-mail vazem para o admin — e vice-versa. %> + +

+      
+
+ <% end %> +
+ + + diff --git a/app/views/admin/notificacao_envios/index.html.erb b/app/views/admin/notificacao_envios/index.html.erb new file mode 100644 index 0000000..a027a7e --- /dev/null +++ b/app/views/admin/notificacao_envios/index.html.erb @@ -0,0 +1,142 @@ +<% ctx = { status: params[:status], canal: params[:canal] }.compact_blank %> +<% + # Pílula de filtro: uma só definição para os dois grupos (situação e canal), + # senão o estilo do "ativo" fatalmente diverge entre eles com o tempo. + pilula = lambda do |ativo| + base = 'px-4 py-2 rounded-xl text-sm border transition-colors' + ativo ? "#{base} bg-[#f97316] text-white border-[#f97316] font-semibold" + : "#{base} bg-[#0a0a0a] text-gray-400 border-white/10 hover:border-white/20 hover:text-white" + end +%> +
+ +
+

+ <%= icone :historico, espaco: false %> Envios +

+

+ O que saiu, para quem e se chegou. Uma falha de envio nunca trava o fechamento — + então é aqui que ela aparece. +

+
+ + <%= render 'shared/flash' %> + + <%# Filtros %> +
+
+ Situação + <% [['', 'Todos'], ['enviado', 'Enviados'], ['falhou', 'Falhados'], ['pendente', 'Pendentes']].each do |valor, rotulo| %> + <%= link_to rotulo, admin_envios_path(ctx.merge(status: valor.presence).compact), + data: { turbo: false }, class: pilula.call(params[:status].to_s == valor) %> + <% end %> +
+ + + +
+ Canal + <% [['', 'Todos'], ['whatsapp', 'WhatsApp'], ['email', 'E-mail']].each do |valor, rotulo| %> + <%= link_to rotulo, admin_envios_path(ctx.merge(canal: valor.presence).compact), + data: { turbo: false }, class: pilula.call(params[:canal].to_s == valor) %> + <% end %> +
+ + <% if @total_falhas.positive? %> + + <%= icone :erro, cor: nil, tamanho: 'w-3.5 h-3.5', espaco: false %> + <%= @total_falhas %> falha(s) neste filtro + + <% end %> +
+ + <%# Tabela %> +
+
+ + + + + + + + + + + + + <% @envios.each do |envio| %> + + + + + + + + + <% end %> + + <% if @envios.empty? %> + + + + <% end %> + +
QuandoEventoDestinatárioCanalSituaçãoMensagem
+ <%= envio.created_at.strftime('%d/%m/%Y') %> + <%= envio.created_at.strftime('%H:%M') %> + <%= envio.evento_notificacao&.nome || '—' %> + <%= envio.contato&.nome || envio.user&.nome || '—' %> + <%= envio.destino %> + + <% wpp = envio.canal == 'whatsapp' %> + + <%= icone(wpp ? :telefone : :email, cor: nil, tamanho: 'w-3.5 h-3.5', espaco: false) %> + <%= wpp ? 'WhatsApp' : 'E-mail' %> + + + <% cfg = case envio.status + when 'enviado' then { cor: 'bg-green-600 text-white', icone: :sucesso, label: 'Enviado' } + when 'falhou' then { cor: 'bg-red-600 text-white', icone: :erro, label: 'Falhou' } + else { cor: 'bg-yellow-500 text-black', icone: :relogio, label: envio.status.to_s.capitalize } + end %> + <%= badge_com_icone(cfg) %> + <% if envio.falhou? && envio.erro.present? %> + <%= envio.erro.truncate(160) %> + <% end %> + + <%= envio.corpo.to_s.truncate(90) %> +
+
<%= icone :vazio, tamanho: 'w-10 h-10', cor: 'text-gray-600', espaco: false %>
+

Nenhum envio registrado ainda.

+
+
+ + <% if @envios.any? && @pagy.pages > 1 %> + <% pag = ->(p) { admin_envios_path(ctx.merge(page: p)) } %> + + <% end %> +
+
diff --git a/app/views/admin/perfis_acesso/_form.html.erb b/app/views/admin/perfis_acesso/_form.html.erb new file mode 100644 index 0000000..0ce7ff5 --- /dev/null +++ b/app/views/admin/perfis_acesso/_form.html.erb @@ -0,0 +1,83 @@ +<%# app/views/admin/perfis_acesso/_form.html.erb + O ADM marca o que o perfil enxerga. As caixas vêm agrupadas por área do + catálogo (Permissao.por_grupo) e cada uma traz a descrição do EFEITO real — + "Registrar pagamento" sem a linha de baixo não diz se inclui estornar. %> +<%= form_with model: [:admin, perfil], url: (perfil.persisted? ? admin_perfil_path(perfil) : admin_perfis_path), + data: { turbo: false }, class: 'space-y-6' do |f| %> + + <% if perfil.errors.any? %> +
+

<%= icone :erro, cor: 'text-red-400' %> Não foi possível salvar

+
    + <% perfil.errors.full_messages.each do |msg| %>
  • <%= msg %>
  • <% end %> +
+
+ <% end %> + + <%# ── Identificação ──────────────────────────────────── %> +
+
+ <%= f.label :nome, 'Nome do perfil', class: 'block text-sm font-medium text-gray-300 mb-1.5' %> + <%= f.text_field :nome, required: true, placeholder: 'Ex.: Gerente sem configurações', + class: 'w-full px-4 py-3 bg-[#0a0a0a] border border-white/10 rounded-xl text-white + focus:outline-none focus:border-[#f97316]' %> +
+ +
+ <%= f.label :descricao, 'Para que serve', class: 'block text-sm font-medium text-gray-300 mb-1.5' %> + <%= f.text_field :descricao, placeholder: 'Quem usa este perfil e por quê', + class: 'w-full px-4 py-3 bg-[#0a0a0a] border border-white/10 rounded-xl text-white + focus:outline-none focus:border-[#f97316]' %> +
+ +
+
+ <%= f.label :ativo, 'Perfil ativo', class: 'block text-sm font-medium text-gray-300' %> +

Desativado, quem estiver nele perde os acessos marcados aqui.

+
+ <%= f.check_box :ativo, class: 'w-5 h-5 accent-orange-500' %> +
+ + <% if perfil.sistema? %> +

+ <%= icone :alerta, cor: 'text-amber-400' %> Perfil que vem com o sistema: pode ser editado e desativado, mas não excluído. +

+ <% end %> +
+ + <%# ── Permissões ───────────────────────────────────────── + O campo vazio antes das caixas é obrigatório: sem ele, desmarcar TUDO faria + o parâmetro sumir do POST e o controller entenderia "não mexeu". %> + <%= hidden_field_tag 'perfil_acesso[permissoes][]', '' %> + + <% marcadas = perfil.permissoes_validas %> + <% Permissao.por_grupo.each do |grupo, itens| %> +
+
+

<%= Permissao.grupo_label(grupo) %>

+ <%= itens.count { |chave, _| marcadas.include?(chave) } %> de <%= itens.size %> +
+ +
+ <% itens.each do |chave, cfg| %> + + <% end %> +
+
+ <% end %> + +
+ <%= f.submit perfil.persisted? ? 'Salvar perfil' : 'Criar perfil', + class: 'bg-orange-500 hover:bg-orange-600 text-black font-bold px-6 py-3.5 rounded-xl + min-h-[48px] cursor-pointer' %> + <%= link_to 'Cancelar', admin_perfis_path, + class: 'px-5 py-3.5 text-gray-300 hover:text-white border border-[#2a2a2a] rounded-xl min-h-[48px] flex items-center' %> +
+<% end %> diff --git a/app/views/admin/perfis_acesso/edit.html.erb b/app/views/admin/perfis_acesso/edit.html.erb new file mode 100644 index 0000000..7452162 --- /dev/null +++ b/app/views/admin/perfis_acesso/edit.html.erb @@ -0,0 +1,10 @@ +<% content_for :title, "Perfil #{@perfil.nome}" %> +
+

+ <%= icone :usuarios, espaco: false %> <%= @perfil.nome %> +

+

+ <%= @perfil.users.count %> usuário(s) neste perfil — o que você mudar aqui vale para todos eles. +

+ <%= render 'form', perfil: @perfil %> +
diff --git a/app/views/admin/perfis_acesso/index.html.erb b/app/views/admin/perfis_acesso/index.html.erb new file mode 100644 index 0000000..215ce04 --- /dev/null +++ b/app/views/admin/perfis_acesso/index.html.erb @@ -0,0 +1,70 @@ +<%# app/views/admin/perfis_acesso/index.html.erb %> +<% content_for :title, 'Perfis de acesso' %> + +
+
+

+ <%= icone :usuarios, espaco: false %> Perfis de acesso +

+

+ O perfil define o que a pessoa enxerga e pode fazer. Mudou a regra, muda aqui — vale para todos do perfil. +

+
+ <%= link_to new_admin_perfil_path, data: { turbo: false }, + class: 'inline-flex items-center gap-2 px-5 py-3 bg-[#f97316] hover:bg-orange-500 + text-white font-semibold rounded-xl transition-colors min-h-[48px] whitespace-nowrap' do %> + <%= icone :adicionar, cor: nil %> Novo perfil + <% end %> +
+ +<% if @perfis.any? %> +
+ <% @perfis.each do |perfil| %> +
+
+
+
+

<%= perfil.nome %>

+ <% if perfil.sistema? %> + Do sistema + <% end %> + <% unless perfil.ativo? %> + Desativado + <% end %> + <% if perfil.vazio? %> + Sem nenhum acesso + <% end %> +
+ <% if perfil.descricao.present? %> +

<%= perfil.descricao %>

+ <% end %> +

+ <%= icone :pessoa %> <%= perfil.users.size %> usuário(s) + · <%= icone :chave %> <%= perfil.total_permissoes %> de <%= Permissao.chaves.size %> permissões +

+
+ +
+ <%= link_to rotulo(:editar, 'Editar', cor: nil), edit_admin_perfil_path(perfil), data: { turbo: false }, + class: 'px-4 py-3 text-gray-300 hover:text-white border border-[#2a2a2a] hover:border-orange-500 rounded-xl min-h-[48px] flex items-center' %> + <%# button_to com BLOCO: passando o rótulo como primeiro argumento, o + Rails escapa o HTML e o ícone sai como texto cru na tela. %> + <% if policy(perfil).destroy? %> + <%= button_to admin_perfil_path(perfil), method: :delete, + class: 'px-4 py-3 text-red-400 hover:text-red-300 border border-[#2a2a2a] hover:border-red-500 rounded-xl min-h-[48px] flex items-center gap-2', + form: { data: { turbo_confirm: "Excluir o perfil #{perfil.nome}?" } } do %> + <%= icone :excluir, cor: nil, tamanho: 'w-4 h-4', espaco: false %> Excluir + <% end %> + <% end %> +
+
+
+ <% end %> +
+<% else %> +
+

<%= icone :vazio, tamanho: 'w-12 h-12', cor: 'text-gray-600', espaco: false %>

+

Nenhum perfil cadastrado ainda.

+

Enquanto não houver perfil, cada pessoa acessa conforme o tipo de conta dela.

+
+<% end %> diff --git a/app/views/admin/perfis_acesso/new.html.erb b/app/views/admin/perfis_acesso/new.html.erb new file mode 100644 index 0000000..fb64b19 --- /dev/null +++ b/app/views/admin/perfis_acesso/new.html.erb @@ -0,0 +1,8 @@ +<% content_for :title, 'Novo perfil de acesso' %> +
+

+ <%= icone :usuarios, espaco: false %> Novo perfil de acesso +

+

Marque o que este perfil enxerga. Você atribui o perfil a cada pessoa na tela de Usuários.

+ <%= render 'form', perfil: @perfil %> +
diff --git a/app/views/admin/romaneios/_avisos.html.erb b/app/views/admin/romaneios/_avisos.html.erb new file mode 100644 index 0000000..7b5580b --- /dev/null +++ b/app/views/admin/romaneios/_avisos.html.erb @@ -0,0 +1,50 @@ +<%# Divergências explicadas ONDE elas aparecem — não em documentação. %> +<% multifolha = @romaneio.veiculos_multifolha %> + +<% if @colunas_ausentes.include?('status') && @romaneio.operacao_tabela.present? %> +
+ ⚠️ +

+ A operação <%= @romaneio.operacao_label %> não tem a coluna + STATUS, então não dá para saber quem é paciente novo — a coluna + APARELHO saiu vazia para todos e precisa ser preenchida à mão. + Um romaneio em que ninguém recebe aparelho, entregue calado, vira aparelho não entregue. +

+
+<% end %> + +<% if @colunas_ausentes.include?('telefones') && @romaneio.operacao_tabela.present? %> +
+ ☎️ +

+ A operação <%= @romaneio.operacao_label %> não tem a coluna + TELEFONES. O que aparece na tabela veio do “TEL:” das anotações do + plano, que nem sempre traz todos os números. +

+
+<% end %> + +<% if @romaneio.operacao_tabela.blank? %> +
+ ℹ️ +

+ Este romaneio foi importado sem operação vinculada: a coluna APARELHO + não é preenchida sozinha e o telefone vem só das anotações do plano. + Escolha a operação do mês em “Vincular operação”, logo acima — não + é preciso reimportar o plano. +

+
+<% end %> + +<% if multifolha.any? %> +
+ 🖨️ +

+ <% multifolha.each do |veiculo, total| %> + <%= veiculo %> tem <%= total %> paradas → + sai em <%= @romaneio.folhas_de(veiculo) %> folhas<%= ',' unless veiculo == multifolha.keys.last %> + <% end %> + — cada folha vai com o próprio bloco de assinatura, e a numeração continua entre elas. +

+
+<% end %> diff --git a/app/views/admin/romaneios/_celula.html.erb b/app/views/admin/romaneios/_celula.html.erb new file mode 100644 index 0000000..ad83ff8 --- /dev/null +++ b/app/views/admin/romaneios/_celula.html.erb @@ -0,0 +1,13 @@ +<%# Uma célula editável + o marcador de "editado". %> +
+ + <%= render 'marcador', linha: linha, campo: campo %> +
diff --git a/app/views/admin/romaneios/_controles.html.erb b/app/views/admin/romaneios/_controles.html.erb new file mode 100644 index 0000000..b3dd38a --- /dev/null +++ b/app/views/admin/romaneios/_controles.html.erb @@ -0,0 +1,48 @@ +<%# Zona "Filtros" — busca e o rótulo do cabeçalho do PDF. + O seletor de veículo saiu daqui para o _veiculos.html.erb, que mostra a lista + inteira; aqui fica só o que age sobre a FOLHA em edição. %> +
+
+
+ + <%# `min-w-0` no input é o que impede rolagem lateral no celular: um + tem largura intrínseca (~20 caracteres) e `flex-1` NÃO encolhe abaixo + dela, porque o `min-width` padrão de um item flex é `auto`. Com o botão + ao lado, o par estourava para 487px numa tela de 393px e levava a página + junto. O `flex-wrap` é a segunda rede: em tela muito estreita o botão + desce em vez de espremer o campo. %> +
+ + <%# Rótulo que descreve o que o controle faz (diretriz 2): limpa a BUSCA, + não o romaneio. %> + +
+
+ +
+ + +
+
+ + <%# Contador: no programa original ele fica no rodapé da tabela ("0 registros") + e é como se percebe que a busca escondeu tudo — sem ele, a tabela vazia + parece plano vazio. %> + <%# Sem um segundo alvo "status" aqui: ele já existe no _tabela.html.erb + ("Alterações salvam sozinhas") e o Stimulus devolveria só o primeiro. %> +

+ <%= @linhas.size %> <%= @linhas.size == 1 ? 'parada' : 'paradas' %> nesta folha +

+
diff --git a/app/views/admin/romaneios/_marcador.html.erb b/app/views/admin/romaneios/_marcador.html.erb new file mode 100644 index 0000000..c737be7 --- /dev/null +++ b/app/views/admin/romaneios/_marcador.html.erb @@ -0,0 +1,12 @@ +<%# Ponto laranja = campo tocado por humano, e por isso protegido na reimportação. + O botão ↺ devolve o valor do plano (e destrava o campo de novo) — sem ele, uma + tecla acidental seria permanente. %> + + <% if linha.editado?(campo) %> + + <% end %> + diff --git a/app/views/admin/romaneios/_operacao.html.erb b/app/views/admin/romaneios/_operacao.html.erb new file mode 100644 index 0000000..e8f9a55 --- /dev/null +++ b/app/views/admin/romaneios/_operacao.html.erb @@ -0,0 +1,76 @@ +<%# app/views/admin/romaneios/_operacao.html.erb + Vínculo MANUAL da operação do mês, feito na própria tela do romaneio. + + Por que aqui e não só na criação: é aqui que o operador descobre que a coluna + APARELHO saiu vazia. Mandar ele reimportar o plano (única saída até então) + depende da API do SimpliRoute responder ou de o .xlsx ainda estar em mãos. + + Sem JavaScript de propósito:
nativo + form comum. Este controle é o + conserto de um romaneio que já está errado — precisa funcionar mesmo quando o + Stimulus não carrega (foi exatamente esse o caso em 28/08/2026, com os assets + dando 404 no servidor e a tela inteira sem JS). %> +<% vinculada = @romaneio.operacao_tabela.present? %> + +<%# O cabeçalho e o formulário ficam EMPILHADOS, não lado a lado: aberto, o + seletor + botão precisam da largura toda da caixa; espremidos numa coluna + lateral o rótulo do estado saía cortado justamente quando ele é a informação + que importa ("Nenhuma vinculada"). %> +
+
+

Operação do mês

+

+ <%= vinculada ? @romaneio.operacao_label : 'Nenhuma vinculada — APARELHO não é preenchido sozinho' %> +

+

+ É ela que diz quem é paciente NOVO, e quem é novo sempre leva aparelho. +

+
+ + <%# Já vinculada: fica fechado, para não convidar a trocar sem motivo. Sem + operação: abre sozinho, porque é a pendência da tela. %> + <%# group-open: aberto, o gatilho fica discreto. Aberto ele vira só o título do + painel — deixá-lo laranja poria DOIS botões laranja um sobre o outro e o + operador não saberia qual confirma. %> +
> + + <%# cor: nil e espaco: false — o fundo laranja apagaria o laranja da marca + e o container já tem gap-2. %> + <%= icone :operacao, cor: nil, espaco: false %> + <%= vinculada ? 'Trocar operação' : 'Vincular operação' %> + + + <%= form_with url: vincular_operacao_admin_romaneio_path(@romaneio), method: :patch, + class: 'mt-3 flex flex-col sm:flex-row gap-2 sm:items-center' do %> + + + + <% end %> + +

+ Preenche APARELHO, TELEFONES e NOME pelas notas fiscais já importadas. + O que você digitou na tabela é mantido — só os campos sem edição são + atualizados. +

+
+
diff --git a/app/views/admin/romaneios/_previa.html.erb b/app/views/admin/romaneios/_previa.html.erb new file mode 100644 index 0000000..de3aeb4 --- /dev/null +++ b/app/views/admin/romaneios/_previa.html.erb @@ -0,0 +1,125 @@ +<%# Prévia do PDF em POP-UP, com navegação entre as folhas no mesmo desenho do + carrossel do motorista (setas grandes + contador "3 de 72"). + + ── O ESTADO "ABERTA" MORA NA URL (?previa=1) ────────────────────────────── + Foram três tentativas até aqui, e cada uma quebrou de um jeito: + + 1. modal por JavaScript → morreu junto com os assets 404 no servidor: o + botão não fazia NADA e a tela abria normal, sem erro visível; + 2.
nativo → funcionava, mas não é pop-up e não dava para + navegar entre as folhas sem fechar; + 3. :target (#previa) → abria com o JS fora do ar e parava de abrir + quando ele voltava: o Turbo intercepta o clique, revisita a página e o + hash se perde no caminho. Pior dos mundos — funcionava no ambiente + quebrado e falhava no ambiente são. + + Com a prévia na query string nada disso se aplica: é uma página como outra + qualquer, o Turbo trata como navegação normal, funciona sem JavaScript, + sobrevive ao F5 e ao "voltar", e o link pode ser enviado para outra pessoa + já com a folha aberta. + + Fechado, este partial não renderiza NADA: o iframe nem existe, então o + servidor não monta um PDF que ninguém pediu (era o custo do desenho + original, que montava o iframe a cada carregamento da tela). + + + + <%# AVISO SEMPRE VISÍVEL, não um alerta que aparece só no erro: quando o + navegador se recusa a desenhar o PDF, ele não avisa ninguém — o quadro + fica branco e a leitura natural é "o sistema está quebrado". O navegador + tem uma opção, ligada por padrão em algumas instalações, de BAIXAR PDF em + vez de exibir; bloqueador de conteúdo (Brave Shields, uBlock) e bloqueio + de pop-up derrubam o mesmo quadro. Como não dá para detectar isso de + dentro da página (o iframe é opaco por segurança), a saída honesta é + dizer onde fica a alternativa. %> +

+ Quadro em branco? O navegador pode estar configurado para baixar PDF + em vez de exibir, ou um bloqueador está barrando — + <%= link_to 'abra em outra aba', + pdf_admin_romaneio_path(@romaneio, veiculo: @veiculo), + target: '_blank', rel: 'noopener', + class: 'underline text-gray-300 hover:text-white' %> + ou libere PDF para este site nas permissões (cadeado da barra de endereço). +

+ + <%# Controles no mesmo desenho do carrossel do motorista (redondos, 56px, + próximo em laranja), mas como LINKS: cada folha é uma URL. Na ponta vira + apagado em vez de sumir — botão que some muda o layout no meio da + conferência e o operador perde o alvo do clique. %> +
+ <% if anterior %> + <%= link_to admin_romaneio_path(@romaneio, veiculo: anterior, previa: 1), + 'aria-label': "Folha anterior (#{anterior})", + class: 'w-14 h-14 rounded-full flex items-center justify-center + bg-[#1a1a1a]/90 backdrop-blur border border-white/15 text-white + hover:border-orange-500 transition-colors' do %> + <%= icone :voltar, cor: nil, tamanho: 'w-6 h-6', espaco: false %> + <% end %> + <% else %> + + <%= icone :voltar, cor: nil, tamanho: 'w-6 h-6', espaco: false %> + + <% end %> + + + <%= posicao ? posicao + 1 : 1 %> de <%= nomes.size %> · <%= @veiculo %> + + + <% if proximo %> + <%= link_to admin_romaneio_path(@romaneio, veiculo: proximo, previa: 1), + 'aria-label': "Próxima folha (#{proximo})", + class: 'w-14 h-14 rounded-full flex items-center justify-center + bg-orange-500/90 backdrop-blur border border-orange-400 text-black + hover:bg-orange-500 transition-colors' do %> + <%= icone :avancar, cor: nil, tamanho: 'w-6 h-6', espaco: false %> + <% end %> + <% else %> + + <%= icone :avancar, cor: nil, tamanho: 'w-6 h-6', espaco: false %> + + <% end %> +
+ + diff --git a/app/views/admin/romaneios/_removidas.html.erb b/app/views/admin/romaneios/_removidas.html.erb new file mode 100644 index 0000000..c1234b9 --- /dev/null +++ b/app/views/admin/romaneios/_removidas.html.erb @@ -0,0 +1,21 @@ +<%# Paradas que saíram do plano mas tinham edição humana. Não são impressas, e não + são apagadas: quem decide o que fazer com elas é o operador. %> +<% if linhas.any? %> +
+

+ <%= linhas.size %> parada(s) saíram do plano +

+

+ Elas tinham edição sua, então foram guardadas em vez de apagadas — e não entram no PDF. + Se voltarem ao plano numa próxima importação, voltam sozinhas para a folha. +

+
    + <% linhas.each do |linha| %> +
  • + <%= linha.veiculo %> · + NF <%= linha.nota_fiscal.presence || '—' %> · <%= linha.nome %> +
  • + <% end %> +
+
+<% end %> diff --git a/app/views/admin/romaneios/_tabela.html.erb b/app/views/admin/romaneios/_tabela.html.erb new file mode 100644 index 0000000..8446ace --- /dev/null +++ b/app/views/admin/romaneios/_tabela.html.erb @@ -0,0 +1,62 @@ +<%# Tabela editável do veículo selecionado. + SEM paginação de propósito: acima de 1366px a lista inteira é o certo — esconder + item em monitor grande atrapalha até o Ctrl+F do navegador, e conferir romaneio é + exatamente procurar uma NF na lista. A busca acima filtra sem esconder nada. + + por célula, e não contenteditable: colar do Excel num contenteditable + traz HTML junto. %> +
+
+ <%# Sem repetir a contagem aqui: ela agora é VIVA no bloco de filtros (muda + conforme a busca esconde linhas). Dois números para a mesma coisa, um + atualizando e outro não, é a divergência que a diretriz 1 proíbe. %> +

Paradas de <%= @veiculo %>

+ Alterações salvam sozinhas +
+ +
+ + + + + + + + + + + + + <% linhas.each_with_index do |linha, i| %> + + + <% %w[nota_fiscal nome endereco].each do |campo| %> + + <% end %> + + <%# APARELHO só assume 'SIM' ou vazio: um botão de dois estados é alvo de + toque de verdade e não deixa digitar um terceiro valor. %> + + + + + <% end %> + +
#Nota fiscalNomeEndereçoAparelhoTelefones
<%= i + 1 %> + <%= render 'celula', linha: linha, campo: campo %> + + + <%= render 'marcador', linha: linha, campo: 'aparelho' %> + + <%= render 'celula', linha: linha, campo: 'telefones' %> +
+
+
diff --git a/app/views/admin/romaneios/_veiculos.html.erb b/app/views/admin/romaneios/_veiculos.html.erb new file mode 100644 index 0000000..540af2e --- /dev/null +++ b/app/views/admin/romaneios/_veiculos.html.erb @@ -0,0 +1,148 @@ +<%# Coluna "Veículos" — a lista INTEIRA visível, como no programa original. + Antes era um + + + + diff --git a/app/views/admin/romaneios/index.html.erb b/app/views/admin/romaneios/index.html.erb new file mode 100644 index 0000000..c130ded --- /dev/null +++ b/app/views/admin/romaneios/index.html.erb @@ -0,0 +1,302 @@ +<%# app/views/admin/romaneios/index.html.erb %> +
+ +
+

Romaneio de entrega

+

+ Monta o "CONTROLE DE ENTREGA" — uma folha por veículo, assinada pelo motorista na retirada +

+
+ + <%= render 'shared/flash' %> + +
+ ℹ️ +

+ A coluna APARELHO é marcada sozinha para quem está como + NOVO na operação do mês, e o telefone vem da própria + operação — não é preciso subir uma segunda planilha. Tudo continua editável na tela + antes de imprimir. +

+
+ + <%# Logo do cabeçalho — zona "Arquivos" do programa original. + Fica ANTES da importação porque é configuração que vale para todos os + romaneios, não escolha por plano: quem troca de contratante troca uma vez. %> +
+ <%# `authenticity_token: form_authenticity_token` pelo mesmo motivo do + formulário de importação logo abaixo (o comentário longo está lá): com + `load_defaults 7.1` o Rails usa token POR FORMULÁRIO, e qualquer + descasamento entre o token embutido e a action recebida devolve "A ação + foi recusada por uma verificação de segurança". O helper sem argumentos + devolve o token GLOBAL, que vale para qualquer action da sessão — este + form era o único da tela sem ele. %> + <%= form_with url: atualizar_logo_admin_romaneios_path, method: :post, multipart: true, + authenticity_token: form_authenticity_token, + data: { turbo: false }, + class: 'flex flex-col sm:flex-row sm:items-end gap-3' do %> +
+ +

+ Em uso: + <%= @logo_atual.presence || 'logo-gade.png (padrão)' %> +

+ + <%# O logo está configurado mas o ARQUIVO sumiu do disco. Antes isto era + mudo: a tela dizia o nome do logo novo e o PDF saía com o antigo. + Agora aparece aqui, que é onde a pessoa está olhando quando troca. %> + <% if @logo_problema == :sumiu %> +

+ O arquivo deste logo não está mais no servidor — os PDFs estão + saindo com o logo padrão. Envie o arquivo de novo. +

+ <% end %> + +

+ PNG ou JPG, até 2 MB — é o que o PDF consegue embutir. Vale para os próximos PDFs gerados. +

+
+ + <% end %> +
+ + <%# Importação %> +
+

Importar plano

+ + <%# UM formulário com DUAS actions: "Buscar no SimpliRoute" usa a action do +
e "Enviar planilha" a troca por `formaction`, para não repetir data, + operação e rótulo em dois formulários que sairiam de sincronia. + + `authenticity_token: form_authenticity_token` é o que faz o segundo botão + funcionar. Com `load_defaults 7.1` o Rails liga `per_form_csrf_tokens`: o + token embutido vale só para o par (action, method) do , então o POST + que o `formaction` manda para /importar_planilha era recusado SEMPRE, com a + tela "A ação foi recusada por uma verificação de segurança" e volta ao + início — enquanto o botão de buscar, na action original, passava. O helper + sem argumentos devolve o token GLOBAL, válido para as duas actions. %> + <%# ── Período dos planos ──────────────────────────────────────────────── + Form SEPARADO e em GET: filtra a LISTA de planos, não importa nada. + Fica antes do formulário de importação porque é o que se mexe primeiro + quando o plano procurado não está entre os 5. + + Por que período e não data: período é aproximado por natureza — "agosto" + a pessoa sabe; "20/08" ela não sabia, e era esse chute que a tela veio + eliminar. É também o recorte que a própria tela do SimpliRoute usa, então + não há tradução a fazer entre as duas. %> + <%= form_with url: admin_romaneios_path, method: :get, + class: 'flex flex-wrap items-end gap-3 mb-4 pb-4 border-b border-white/5' do %> +
+ + +
+
+ + +
+ + <%# Rótulo que diz o que o controle FAZ (diretriz 2): limpa o período e + devolve os 5 mais recentes — não "limpa a tela". %> + <% if @planos_filtrados %> + <%= link_to 'Voltar aos 5 mais recentes', admin_romaneios_path, + class: 'px-4 py-2.5 text-gray-400 hover:text-white border border-[#2a2a2a] rounded-xl min-h-[48px] inline-flex items-center whitespace-nowrap' %> + <% end %> + <% end %> + + <%= form_with url: admin_romaneios_path, method: :post, multipart: true, + authenticity_token: form_authenticity_token, + data: { turbo: false }, class: 'space-y-4' do %> +
+ <%# ── Plano ──────────────────────────────────────────────────────── + Antes aqui se pedia a DATA do plano, e era o passo que mais errava: + o operador pensa por operação ("lançou a UBS Sudeste"), e a data + nem estava ao alcance dele — o plano tem uma JANELA e o dia das + rotas ora é o começo dela, ora o fim (EMAD SETEMBRO 2026 vai de + 31/08 a 08/09 e roda em 31/08; UBS OESTE AGOSTO vai de 18 a 20/08 e + roda em 20/08). Agora ele escolhe pelo NOME e quem descobre o dia é + a API. + + Cinco planos porque a ferramenta é usada logo depois de lançar uma + operação — o que ele quer está sempre entre os últimos. + + A lista vazia (API fora, token vencido) NÃO tranca a tela: cai no + campo de data, que é o comportamento antigo inteiro. %> +
+ + + <% if @planos.present? %> + +

+ <% if @planos_filtrados %> + <%= pluralize(@planos.size, 'plano', plural: 'planos') %> no período. + <% else %> + Os 5 mais recentes. O dia é descoberto pelo plano. + <% end %> +

+ <% else %> +

+ <% if @planos_filtrados %> + Nenhum plano nesse período — amplie a faixa ou limpe o filtro. + <% else %> + Não consegui listar os planos do SimpliRoute agora — informe a data. + <% end %> +

+ <% end %> + + <%# A data solta só aparece quando NÃO há lista de planos: ela é a rede + para a API fora do ar, e voltar a oferecê-la de graça reintroduziria + justamente o chute que esta tela existe para eliminar. Para alcançar + um plano antigo o caminho é o filtro de período, logo abaixo. %> + <% if @planos.blank? %> + + <% end %> +
+ +
+ + +
+ +
+ + +

+ <% if @planos.present? %> + Em branco, usa o nome do plano escolhido — é por ele que a operação + do mês (quem é NOVO) é encontrada. Preencha só para + imprimir um texto diferente no canto do PDF. + <% else %> + Cole o nome do plano como está no SimpliRoute — é por ele que a + operação do mês (quem é NOVO) é encontrada. + <% end %> +

+
+
+ +
+ + + <%# Reserva: o plano do dia pode ainda não estar publicado. %> +
+ + Ou enviar a planilha do plano (.xlsx) + +
+ + +
+

+ Use quando o plano do dia ainda não estiver publicado no SimpliRoute. + O arquivo é lido na hora e não fica guardado no sistema. +

+
+
+ <% end %> +
+ + <%# Romaneios já importados %> +
+ <% if @romaneios.empty? %> +
+

Nenhum romaneio ainda.

+

Escolha a data do plano acima e clique em “Buscar no SimpliRoute”.

+
+ <% else %> + + + + + + + + + + + + + <% @romaneios.each do |r| %> + + + + + + + + + <% end %> + +
DataPlanoOperaçãoVeículosOrigem
<%= l r.planned_date, format: '%d/%m/%Y' %><%= r.rotulo_plano.presence || '—' %><%= r.operacao_label || '—' %><%= r.romaneio_veiculos.size %> + <%= r.origem %> + + <%= link_to rotulo(:editar, 'Abrir'), admin_romaneio_path(r), + class: 'text-orange-400 hover:text-orange-300 font-medium' %> + <%# button_to em BLOCO: sem bloco ele vira , que + não aceita o SVG do ícone dentro (ver ApplicationHelper#rotulo). %> + <%= button_to admin_romaneio_path(r), method: :delete, + form: { data: { turbo_confirm: 'Excluir este romaneio e todas as edições feitas nele?' }, + class: 'inline-block ml-3' }, + class: 'text-gray-500 hover:text-red-400' do %> + <%= icone :excluir, cor: nil %> Excluir + <% end %> +
+ <% end %> +
+
diff --git a/app/views/admin/romaneios/show.html.erb b/app/views/admin/romaneios/show.html.erb new file mode 100644 index 0000000..6129b65 --- /dev/null +++ b/app/views/admin/romaneios/show.html.erb @@ -0,0 +1,88 @@ +<%# app/views/admin/romaneios/show.html.erb + Editor do romaneio: veículos à esquerda, tabela editável à direita, e o PDF + REAL num pop-up com navegação entre as folhas (partial `_previa`, que explica + por que a prévia aberta é estado na URL e não estado de JavaScript). %> +
+ +
+
+

+ Romaneio de <%= l @romaneio.planned_date, format: '%d/%m/%Y' %> +

+

+ <%= @romaneio.operacao_label || 'Sem operação vinculada' %> · + <%= @romaneio.contagem_por_veiculo.values.sum %> paradas em + <%= @veiculos.size %> veículo(s) · + importado de <%= @romaneio.origem %> + <%= "em #{l @romaneio.importado_em, format: '%d/%m %H:%M'}" if @romaneio.importado_em %> +

+
+ <%# NOVOS x RECORRENTES: o mesmo aviso que o programa antigo dava numa caixa + de diálogo depois de aplicar o status. Fica ao lado do título porque é a + primeira coisa a conferir — "0 novos" quase sempre significa importação + sem operação vinculada, e o aviso azul abaixo explica o que fazer. %> + <% contagem = @romaneio.contagem_aparelho %> +
+ + <%= contagem[:novos] %> com aparelho (NOVOS) + + + <%= contagem[:recorrentes] %> recorrentes + +
+ +
+ <%= link_to rotulo(:baixar, 'Baixar todos'), + pdf_admin_romaneio_path(@romaneio), + class: 'px-4 py-2.5 bg-[#f97316] hover:bg-orange-500 text-white font-semibold rounded-xl min-h-[44px] inline-flex items-center' %> + <%# Em BLOCO: button_to sem bloco gera , que não aceita + o SVG do ícone (ver ApplicationHelper#rotulo). %> + <%= button_to reimportar_admin_romaneio_path(@romaneio, veiculo: @veiculo), method: :post, + form: { data: { turbo_confirm: 'Rebuscar o plano? Os campos que você editou são preservados.' } }, + class: 'px-4 py-2.5 bg-[#1a1a1a] hover:bg-[#242424] text-white border border-white/10 rounded-xl min-h-[44px]' do %> + <%= icone :restaurar, cor: nil %> Reimportar plano + <% end %> + <%= link_to 'Voltar', admin_romaneios_path, + class: 'px-4 py-2.5 text-gray-400 hover:text-white min-h-[44px] inline-flex items-center' %> +
+
+ + <%= render 'shared/flash' %> + + <% if @veiculos.empty? %> +
+

Este romaneio está sem paradas.

+

Clique em “Reimportar plano” ou envie a planilha do plano na tela anterior.

+
+ <% else %> + <%= render 'operacao' %> + <%= render 'avisos' %> + + <%# Duas zonas na tela: VEÍCULOS e a edição. A prévia é o pop-up mais abaixo — + o PDF só é gerado quando alguém o abre (antes o