Skip to content

Instantly share code, notes, and snippets.

@skmedix
Last active July 10, 2026 17:20
Show Gist options
  • Select an option

  • Save skmedix/6cdce9d6d3b464c1bd719b72d1f6bce4 to your computer and use it in GitHub Desktop.

Select an option

Save skmedix/6cdce9d6d3b464c1bd719b72d1f6bce4 to your computer and use it in GitHub Desktop.
Antiviruses False-Positives Report Emails
Engine Contact
360 kefu@360.cn
Abusix support@abusix.com, https://lookup.abusix.com/
Acronis virustotal-falsepositive@acronis.com
ADMINUSLabs info@adminuslabs.net, samples@adminus.net, falsepositive@adminuslabs.net
AegisLab support@aegislab.com
Ahnlab e-support@ahnlab.com, samples@ahnlab.com
AILabs (Monitorapp) aicc@monitorapp.com
Alibaba virustotal@list.alibaba-inc.com
AliCloud antivirus@alibabacloud.com
AlienVault otx-support@alienvault.com
AlphaMountain support@alphamountain.ai
AlphaSOC virustotal@alphasoc.com
Alyac (Estsoft) esrc@estsecurity.com
Antivir (Avira) https://www.avira.com/en/analysis/submit-url
Antiy avlsdk_support@antiy.cn
Arcabit vt.fp@arcabit.pl
ArcSight Threat Intelligence virustotalsupport@opentext.com
AutoShun info@autoshun.org
Avast DL-Virus@gendigital.com
AVG http://www.avg.com/submit-sample http://www.avg.com/us-en/whitelist
Baidu bav@baidu.com, gaoyingchun@baidu.com
BitDefender virus_submission@bitdefender.com
BforeAi https://bfore.ai/support
Bkav fpreport@bkav.com, bkav@bkav.com
Certego https://www.certego.net/en/contatti/
Chong Lua Dao info@chongluadao.vn
CINS Army (Sentinel IPS) http://cinsscore.com/#contact
ClamAV http://www.clamav.net/reports/fp
Clean-MX abuse@clean-mx.de
Cluster25 threatintel@cluster25.io
CMC PSIRT@cmccybersecurity.com
CRDF https://threatcenter.crdf.fr/false_positive.html
Criminal IP (AI Spera) support@aispera.com
CrowdStrike VTscanner@crowdstrike.com
CSIS Security Group. abuse-reporting@csis.com
CyanSecurity virustotal@cyansecurity.com
Cybereason vt-feedback@cybereason.com
Cyble cyblevt_patnership@cyble.com
Cylance cylancefilesubmit@blackberry.com
Cynet soc@cynet.com
CyRadar virustotal@cyradar.com
Deep Instinct vt-fps-requests@deepinstinct.com
DNS8 dns8@layer8.pt
DrWeb vms@drweb.com
eGambit (Tehtris) https://tehtris.com/egambit_fp.php virus@tehtris.com
Elastic Elastic False Positive Submission Form , https://discuss.elastic.co/t/submitting-false-positives/232322
Emsisoft submit@emsisoft.com or fp@emsisoft.com (false positives) https://www.emsisoft.com/en/support/contact/
Ermes support-vt@ermes.company
ESET https://support.eset.com/kb141/?page=content&id=SOLN141
FireEye virustotal@fireeye.com
F-Prot viruslab@f-prot.com
F-Secure/WithSecure spyware-samples@f-secure.com, vsamples@f-secure.com
Forcepoint ThreatSeeker reviewmysite@forcepoint.com
Fortinet https://www.fortiguard.com/faq/classificationdispute http://www.fortinet.com/support/contact_support.html
GData https://www.gdata.de/help/en/general/GeneralInformation/submitFileAppURL/
Google (File Scanner) google-at-virustotal@google.com
Google Safe Browsing (URL/Netloc Scanner) https://safebrowsing.google.com/safebrowsing/report_error/?hl=en
GreenSnow https://greensnow.co/contact
Gridinsoft virus@gridinsoft.com
Hacksoft virus@hacksoft.com.pe
Hauri viruslab@hauri.co.kr
Heimdal report-vt@heimdalsecurity.com
Hunt.io Intelligence k.lo@hunt.io
Huorong seclab@huorong.cn
Hoplite Industries vt-info@hopliteindustries.com
Ikarus fp@ikarus.at
IPsum https://github.com/stamparm/ipsum
Jiangmin support@jiangmin.com, shaojia@jiangmin.com
K7 reportfp@labs.k7computing.com, k7viruslab@labs.k7computing.com
Kaspersky newvirus@kaspersky.com
Kingsoft ti@mingting.cn
Lionic https://www.lionic.com/reportfp/ support@lionic.com
Lumu vt@lumu.io
Malbeacon vtreport@malbeacon.com
Malwarebytes https://forums.malwarebytes.com/forum/122-false-positives/
Malwares.com (Saint Security) kog@stsc.com
MalwareURL team@malwareurl.com
CTX (SaintSecurity) root@malwares.com
MaxSecure tech@maxpcsecure.com
McAfee https://www.mcafee.com/support/s/article/000001921?language=en_US, virus_research@mcafee.com
Microsoft https://www.microsoft.com/en-us/wdsi/filesubmission
Microworld samples@escanav.com
NANO http://www.nanoav.ru/index.php?option=com_content&view=article&id=15&Itemid=83&lang=en false@nanoav.ru
Netcraft https://report.netcraft.com/report/mistake
Inca (previous nProtect) virus_info@inca.co.kr
Palo Alto https://live.paloaltonetworks.com/t5/virustotal/bd-p/VirusTotal_Discussions vt-pan-false-positive@paloaltonetworks.com
Panda falsepositives@pandasecurity.com, virussamples@pandasecurity.com
Phishing Database https://github.com/Phishing-Database/Phishing.Database#reporting-issues
PhishLabs info@phishlabs.com
Prebytes https://www.support.prebytes.com/helpcenter/removals/
Qihoo360 support@360safe.com
QuickHeal viruslab@quickheal.com
Quttera support@quttera.com
Rising fp@rising.com.cn
SafeToOpen virustotal@safetoopen.com
Sansec eComscan support@sansec.io
Sangfor virustotal@sangfor.com.cn
Scumware.org https://www.scumware.org/removals.php
SecureAge https://www.secureaplus.com/features/antivirus/report-false-positive/
Seclookup info@seclookup.com
Segasec support@segasec.com
Sentinel One report@sentinelone.com
SkyHigh gatewayantimalwarefpsubmission@skyhighsecurity.com, virus_research_gateway@avertlabs.com
SOCRadar vt@socradar.io
Sophos https://support.sophos.com/ samples@sophos.com
Spamhaus https://www.spamhaus.org/dbl/removal/form/
Sucuri soc@sucuri.net
Symantec https://symsubmit.symantec.com/submit/false_positive https://knowledge.broadcom.com/external/article/173729/how-to-submit-false-positives-on-content.html
Tencent TAVfp@tencent.com
TheHacker virus@hacksoft.com.pe , falsopositivo@hacksoft.com.pe
Trapmine fp@trapmine.com
Trellix datasubmission@trellix.com
TrendMicro https://www.trendmicro.com/en_us/about/legal/detection-reevaluation.html, virus@trendmicro.com, virus_doctor@trendmicro.com
Trustwave https://support.trustwave.com/virustotal-detection-review/
Trustlook bd@trustlook.com
Underworld post@helsecert.no
URLQuery contact@urlquery.net
Varist support@varist.com , virus@avsubmit.com
VBA32 feedback@anti-virus.by
Viettel Threat Intelligence cyberthreat@viettel.com.vn
Vipre productsupport@vipre.com
VirIT virustotal@viritpro.com
VirusDie partners@virusdie.com
Webroot https://www.webroot.com/us/en/business/support/vendor-dispute-contact-us
WithSecure/F-Secure spyware-samples@f-secure.com, vsamples@f-secure.com
Xcitium Verdict Cloud (Comodo) support@xcitium.com
Yomi yomi-false-positives@yoroi.company
Yandex yandex-antivir@support.yandex.ru
Yandex Safebrowsing sbapi@support.yandex.ru
Zillya support@zillya.com
ZoneAlarm zonealarm_VT_reports@checkpoint.com
Zoner false@zonerantivirus.com
@andrevmann

Copy link
Copy Markdown

Same here - ADMINUSLabs is not responding.

What I tried:

  1. Wrote to ADMINUSLabs false/positive email
  2. Wrote to all other ADMINUSLabs email addresses
  3. Wrote to ADMINUSLabs on LinkedIn
  4. I asked VirusTotal for help - got none
  5. I asked SSLTrust for help - they added my service to a blacklist, which even looked more suspicious. Changed that back.

I don't understand how someone would include such a suspicious service in their offering (@VirusTotal @ssltrust)?

Btw. click on the "Submit CV" on the Contact page (https://www.adminuslabs.net/contact) and you'll see - what a professional company that is ;-)

I haven't tried to call them yet...

@Ketchoupii

Copy link
Copy Markdown

cyberfoxbd

Same here, tried several times, hey detect a false positive, contacted on their 3 email adresses but still no answer 3 weeks after.

Adminus is a shame honnestly

@cpvmediaworld

Copy link
Copy Markdown

Hi,

I have tried each and every single email for WEEKS now and they do not respond - not even a courtesy reply. I have my business on pause, because they decided it was ok to conveniently flag my website as malicious even when this flag is a False Positive.
I reached VirusTotal for help, because this company ADMINUSlabs is affecting companies everywhere with their false positives and so far I have not gotten any response.
Other forums, say exactly the same about ADMINUSlabs, so I'm just curious of this is a real company or a business just created to damage companies online.

If someone gets a response or a solution to this, please post it here.

If not, I may need to start my business and websites from scratch due to this absurd company.

@Ketchoupii

Copy link
Copy Markdown

Incredible, over a month for me ... if a company can flag you they should be able to answer too.

@AdmiralJuicy

Copy link
Copy Markdown

Yup, having the same issue as many of you have with ADMINUSLabs. Almost a year now with no reply and going strong! lol and that's how I found this thread, out of sheer desperation.

@tobylortz

tobylortz commented Mar 25, 2026

Copy link
Copy Markdown

Adding my voice to the chorus. We have sent multiple messages and contact form submissions to ADMINUSLabs with no response whatsoever. We've also sent messages to VirusTotal and received the same lack of response.

@cleuenberg

Copy link
Copy Markdown

@hiagodotme

Copy link
Copy Markdown

Hi friends, I submitted some reports to AdminUsLabs. I haven't received a response, but they removed one of my domains and it stopped appearing on VirusTotal.

However, Avast / AVG / Avira / Norton are still reporting me =/

I looked into this after they started reporting it to me. And so far, nothing.

The problem is that my SaaS has subdomains per tenant, and this is impacting all of our tenants.

Example:

Does anyone know a quick way to solve this?

@lastforkbender

Copy link
Copy Markdown
# JERI.PY
import math, uuid
import numpy as np
import faiss
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.cuda.amp import autocast, GradScaler

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

def rand_quaternion(batch=1, device=device, dtype=torch.float32):
    """Retorna quaternions normalizados (batch,4) no device e dtype especificados."""
    u1 = torch.rand(batch, device=device, dtype=dtype)
    u2 = torch.rand(batch, device=device, dtype=dtype)
    u3 = torch.rand(batch, device=device, dtype=dtype)
    q = torch.stack([
        torch.sqrt(1 - u1) * torch.sin(2 * math.pi * u2),
        torch.sqrt(1 - u1) * torch.cos(2 * math.pi * u2),
        torch.sqrt(u1) * torch.sin(2 * math.pi * u3),
        torch.sqrt(u1) * torch.cos(2 * math.pi * u3),
    ], dim=-1)
    return F.normalize(q, dim=-1)

def quat_slerp(q1, q2, t):
    """
    SLERP robusto entre quaternions.
    - q1, q2: tensors (...,4), assumidos normalizados
    - t: tensor (...) escalar ou com mesma shape de prefixo
    Corrige sinal quando dot < 0 para caminho mais curto e faz fallback linear quando sin(theta) ~ 0.
    """
    # assegura shapes compatíveis
    orig_shape = q1.shape
    dot = (q1 * q2).sum(-1, keepdim=True)
    # flip para menor arco quando necessário
    q2 = torch.where(dot < 0, -q2, q2)
    dot = (q1 * q2).sum(-1, keepdim=True).clamp(-1 + 1e-6, 1 - 1e-6)
    theta = torch.acos(dot)
    sinth = torch.sin(theta)
    t_shaped = t.unsqueeze(-1) if t.dim() == dot.dim() - 1 else t
    small = sinth.abs() < 1e-4
    s1 = torch.where(small, 1.0 - t_shaped, torch.sin((1.0 - t_shaped) * theta) / (sinth + 1e-12))
    s2 = torch.where(small, t_shaped, torch.sin(t_shaped * theta) / (sinth + 1e-12))
    out = s1 * q1 + s2 * q2
    return F.normalize(out, dim=-1)

class NodeTable(nn.Module):
    """
    Tabela de nós guardando CPs, centros, quat deltas e metadados.
    Buffers: active_mask, eligibility, responsibility, layer_id (ints).
    """
    def __init__(self, N_nodes, k_control, d_in):
        super().__init__()
        self.N_nodes = int(N_nodes)
        self.k = int(k_control)
        self.d = int(d_in)
        # parâmetros treináveis
        self.C = nn.Parameter(torch.randn(self.N_nodes, self.k, self.d, dtype=torch.float32) * 0.05)
        self.centers = nn.Parameter(torch.randn(self.N_nodes, self.d, dtype=torch.float32) * 0.05)
        self.delta_q = nn.Parameter(torch.zeros(self.N_nodes, 4, dtype=torch.float32))
        self.scale = nn.Parameter(torch.ones(self.N_nodes, 1, dtype=torch.float32))
        self.bias = nn.Parameter(torch.zeros(self.N_nodes, 1, dtype=torch.float32))
        # metadados persistentes como buffers (no CPU/GPU conforme .to())
        self.register_buffer('active_mask', torch.ones(self.N_nodes, dtype=torch.bool))
        self.register_buffer('eligibility', torch.zeros(self.N_nodes, dtype=torch.float32))
        self.register_buffer('responsibility', torch.zeros(self.N_nodes, dtype=torch.float32))
        # identificador de layer por nó (int32)
        self.register_buffer('layer_id', torch.zeros(self.N_nodes, dtype=torch.int32))

def eval_bspline_placeholder(C_nodes, x_local):
    """
    Avalia ativação placeholder:
    C_nodes: [M, k, d] (k centroids por nó) -> reduz para centro médio
    x_local: [B, d] (pontos locais)
    Retorna: [B, M] ativações
    """
    cp_centers = C_nodes.mean(dim=1)  # [M,d]
    dists = torch.cdist(x_local, cp_centers)  # [B, M]
    act = torch.exp(- (dists ** 2) / (2 * (0.5 ** 2)))
    return act

class SparseRouter:
    """
    Gerencia índice FAISS (GPU) para consulta de K vizinhos por centro.
    """
    def __init__(self, node_table: NodeTable, faiss_gpu_id=0):
        self.nodes = node_table
        self.faiss_index = None
        self.faiss_res = None
        self.gpu_id = int(faiss_gpu_id)

    def build_index(self):
        """Constroi/atualiza índice FAISS com os centros atuais (copia para FAISS)."""
        centers = self.nodes.centers.detach().cpu().numpy().astype('float32')
        d = centers.shape[1]
        # Recursos GPU padrão
        self.faiss_res = faiss.StandardGpuResources()
        idx = faiss.IndexFlatL2(d)
        # mover índice para GPU escolhida
        self.faiss_index = faiss.index_cpu_to_gpu(self.faiss_res, self.gpu_id, idx)
        self.faiss_index.add(centers)

    def query(self, x_batch, K=32):
        """
        Consulta K vizinhos para x_batch: x_batch tensor [B,d] (pode estar em GPU).
        Retorna indices tensor [B,K] no mesmo device do 'device' global.
        """
        xb = x_batch.detach().cpu().numpy().astype('float32')
        D, I = self.faiss_index.search(xb, K)
        return torch.from_numpy(I).long().to(device)  # [B,K]

class MetaController(nn.Module):
    """
    Controlador de fase/frequência por layer.
    Mantém buffers registrados para mover com .to(device) e parâmetros numpy para EMAs leves.
    """
    def __init__(self, n_layers, token_budget=64, token_period=100):
        super().__init__()
        self.n_layers = int(n_layers)
        # registramos fases e frequências como buffers (para mover com device)
        self.register_buffer('phases', torch.zeros(self.n_layers, dtype=torch.float32))
        self.register_buffer('freqs', torch.ones(self.n_layers, dtype=torch.float32) * 8.0)
        # EMAs mantidas em numpy (pequenas, persistência fora do grafo)
        self.A = np.zeros(self.n_layers, dtype='float32')  # alinhamento de fase(placeholder)
        self.D = np.zeros(self.n_layers, dtype='float32')  # demanda
        self.N = np.zeros(self.n_layers, dtype='float32')  # novidade/erro
        # tokens
        self.global_tokens = int(token_budget)
        self.token_budget = int(token_budget)
        self.token_period = int(token_period)
        self.step_count = 0
        # pesos fixos de spawn [A,D,N]
        self.w = np.array([1.0, 1.0, 1.0], dtype='float32')

    def step_phase(self, dt=1/256.0):
        """Avança fase por dt (em segundos). Fases mantêm-se em [0,1)."""
        self.phases = (self.phases + self.freqs * float(dt)) % 1.0

    def aggregate_layer_stats(self, layer_id_array, node_responsibility_cpu, node_errors_cpu):
        """
        Agrega estatísticas por layer a partir de arrays numpy por nó.
        layer_id_array: numpy int array shape (N_nodes,)
        node_responsibility_cpu, node_errors_cpu: numpy arrays shape (N_nodes,)
        """
        for l in range(self.n_layers):
            idxs = np.where(layer_id_array == l)[0]
            if len(idxs) == 0:
                continue
            self.D[l] = 0.9 * self.D[l] + 0.1 * node_responsibility_cpu[idxs].sum()
            self.N[l] = 0.9 * self.N[l] + 0.1 * node_errors_cpu[idxs].mean()

    def compute_spawn_tokens(self):
        """
        Computa alocação inteira de tokens por layer com base nas EMAs A,D,N.
        Retorna array int de tamanho n_layers.
        """
        spawn_rates = np.zeros(self.n_layers, dtype='float32')
        for l in range(self.n_layers):
            A_l, D_l, N_l = float(self.A[l]), float(self.D[l]), float(self.N[l])
            score = self.w[0] * A_l + self.w[1] * D_l + self.w[2] * N_l
            rate = 1.0 / (1.0 + math.exp(-score))
            spawn_rates[l] = rate
        if self.global_tokens <= 0:
            return np.zeros(self.n_layers, dtype=int)
        raw = spawn_rates / (spawn_rates.sum() + 1e-6)
        alloc = np.floor(raw * self.global_tokens).astype(int)
        if alloc.sum() == 0 and self.global_tokens > 0:
            top = spawn_rates.argsort()[::-1][:min(self.global_tokens, self.n_layers)]
            for t in top:
                alloc[t] += 1
        self.global_tokens -= alloc.sum()
        return alloc

    def refill_if_needed(self):
        """Refil de tokens periódico."""
        self.step_count += 1
        if self.step_count % self.token_period == 0:
            self.global_tokens = self.token_budget

class AgentStore:
    def __init__(self):
        self.store = {}

    def save(self, agent_dict):
        self.store[agent_dict['id']] = agent_dict

class SplineNet(nn.Module):
    """
    Rede que agrega K vizinhos usando features locais e um embedding pequeno de nó,
    evitando construir a matriz B x N completa.
    - node_table: NodeTable
    - meta: MetaController
    - topk: número de vizinhos retornados pelo router
    - out_dim: dimensão de saída
    """
    def __init__(self, node_table: NodeTable, meta: MetaController, topk=32, out_dim=10, node_emb_dim=16):
        super().__init__()
        self.nodes = node_table
        self.meta = meta
        self.topk = int(topk)
        self.out_dim = int(out_dim)
        self.node_emb_dim = int(node_emb_dim)
        # um embedding pequeno por nó (para leitura eficiente)
        self.node_emb = nn.Parameter(torch.randn(self.nodes.N_nodes, self.node_emb_dim) * 0.01)
        # pequena MLP de leitura que consome pooling local e produz saída
        self.readout = nn.Sequential(
            nn.Linear(self.node_emb_dim, 64),
            nn.ReLU(),
            nn.Linear(64, self.out_dim)
        )
        # peso para combinar matching de fase por layer (learnable)
        self.phase_match_w = nn.Parameter(torch.ones(meta.n_layers, dtype=torch.float32))

    def forward(self, x, neighbor_idx):
        """
        - x: [B,d]
        - neighbor_idx: [B,K] indices inteiros de nós
        Retorna:
          out [B, out_dim],
          node_out_local [B,K] (ativação/score por vizinho),
          idx_flat [B*K] índice plano dos vizinhos (para acumulação de responsabilidade)
        """
        B, K = neighbor_idx.shape
        # gather parâmetros dos nós vizinhos
        C = self.nodes.C  # [N, k, d]
        # seleciona por índice plano
        idx_flat = neighbor_idx.view(-1)  # [B*K]
        # gathered C e centers para os vizinhos
        gathered_C = C.index_select(0, idx_flat).view(B, K, C.shape[1], C.shape[2])  # [B,K,k,d]
        centers = self.nodes.centers.index_select(0, idx_flat).view(B, K, -1)  # [B,K,d]
        x_local = x.unsqueeze(1) - centers  # [B,K,d]
        # avalia ativação placeholder por vizinho
        C_flat = gathered_C.view(B * K, gathered_C.shape[2], gathered_C.shape[3])  # [B*K, k, d]
        xflat = x_local.view(B * K, x_local.shape[-1])  # [B*K, d]
        acts_flat = eval_bspline_placeholder(C_flat, xflat)  # [B*K, M?] -> nosso placeholder retorna [B*K, M_nodes_flat]
        # para placeholder, reduzimos por média (sendo coerente com a implementação previa)
        if acts_flat.ndim > 1:
            acts = acts_flat.mean(dim=1)
        else:
            acts = acts_flat
        acts = acts.view(B, K)  # [B,K]
        scale = self.nodes.scale.squeeze(-1).index_select(0, idx_flat).view(B, K)
        bias = self.nodes.bias.squeeze(-1).index_select(0, idx_flat).view(B, K)
        node_out = acts * scale + bias  # [B,K] -> "responsibility" local por vizinho

        # agora obtemos embeddings dos nós vizinhos e agregamos por soma ponderada
        node_embs = self.node_emb.index_select(0, idx_flat).view(B, K, self.node_emb_dim)  # [B,K,emb_dim]
        weights = F.softmax(node_out, dim=1).unsqueeze(-1)  # normaliza por K para estabilidade
        pooled = (weights * node_embs).sum(dim=1)  # [B, emb_dim]

        # possibilidade de ajustar por fase (meta): multiplicador escalar por layer médio
        # computa layer ids dos vizinhos (puxa do buffer layer_id)
        layer_ids = self.nodes.layer_id.index_select(0, idx_flat).view(B, K)  # [B,K]
        # média ponderada das phase_match_w por vizinho (convertendo para float tensor)
        phase_w_per_idx = self.phase_match_w[layer_ids]  # [B,K]
        phase_factor = (weights.squeeze(-1) * phase_w_per_idx).sum(dim=1, keepdim=True)  # [B,1]
        pooled = pooled * (1.0 + phase_factor)  # escala leve

        out = self.readout(pooled)  # [B, out_dim]

        return out, node_out, idx_flat

# # Lógica de arbitragem e spawn(igual mas com correções de device/dtype)
def arbitration_and_spawn(node_table: NodeTable, meta: MetaController, agent_store: AgentStore,
                          resp_accum_cpu, err_accum_cpu, max_spawn_per_layer=8):
    """
    resp_accum_cpu, err_accum_cpu: numpy arrays (N_nodes,) em CPU dtype float32
    Retorna lista de agentes spawnados (arquivados em agent_store).
    """
    layer_map = node_table.layer_id.detach().cpu().numpy()
    meta.aggregate_layer_stats(layer_map, resp_accum_cpu, err_accum_cpu)
    alloc = meta.compute_spawn_tokens()
    spawned = []
    for l, tokens in enumerate(alloc):
        if tokens <= 0:
            continue
        idxs = np.where(layer_map == l)[0]
        if len(idxs) == 0:
            continue
        scores = resp_accum_cpu[idxs] * 0.6 + err_accum_cpu[idxs] * 0.4
        order = np.argsort(scores)[::-1]
        chosen = idxs[order[:min(len(order), tokens, max_spawn_per_layer)]]
        for p in chosen:
            # prepara quaternions: pega parent, gera perturbação no mesmo device e dtype
            q_parent = node_table.delta_q[p].detach().to(device)  # tensor [4] no device
            q_pert = rand_quaternion(1, device=device)  # [1,4]
            q_child = quat_slerp(q_parent.unsqueeze(0), q_pert, torch.tensor(0.2, device=device))
            agent = {
                "id": str(uuid.uuid4()),
                "parent": int(p),
                "layer": int(l),
                "phase": float(meta.phases[l].item()),
                "freq": float(meta.freqs[l].item()),
                "rot_q": q_child.squeeze(0).detach().cpu().numpy().tolist(),
                "priority": float(scores[order[0]] if order.size > 0 else 0.5)
            }
            agent_store.save(agent)
            spawned.append(agent)
            # Em produção: escrever parâmetros do novo nó em um slot prealocado na GPU, ativar mask e inicializar eligibility
    meta.refill_if_needed()
    return spawned

def train_loop(model: SplineNet, router: SparseRouter, agent_store: AgentStore, optimizer, scaler, data_loader, meta: MetaController, K=32):
    model.train()
    N = model.nodes.N_nodes
    resp_accum = np.zeros(N, dtype='float32')
    err_accum = np.zeros(N, dtype='float32')
    for step, (x_batch, y_batch) in enumerate(data_loader):
        x = x_batch.to(device); y = y_batch.to(device)
        neighbor_idx = router.query(x, K=K)  # [B,K]
        optimizer.zero_grad()
        with autocast():
            y_pred, node_out, idx_flat = model(x, neighbor_idx)
            loss = F.mse_loss(y_pred, y)
            # regularizador leve sobre CPs
            loss = loss + 1e-4 * (model.nodes.C.float().pow(2).sum())
        scaler.scale(loss).backward()
        scaler.step(optimizer); scaler.update()

        # acumulação de responsabilidades por nó (CPU)
        B = node_out.shape[0]
        flat_idx = idx_flat.detach().cpu().numpy()  # length B*K
        flat_vals = node_out.view(-1).detach().cpu().numpy()
        np.add.at(resp_accum, flat_idx, np.abs(flat_vals))
        # erro por amostra
        batch_error = (y_pred - y).detach().cpu().numpy()  # [B, out_dim]
        sample_err = np.linalg.norm(batch_error, axis=1)  # [B]
        node_weights = np.abs(node_out.detach().cpu().numpy())  # [B,K]
        norm = node_weights.sum(axis=1, keepdims=True) + 1e-9
        contrib = (node_weights / norm) * sample_err[:, None]  # [B,K]
        for b in range(B):
            idxs = neighbor_idx[b].cpu().numpy()
            err_accum[idxs] += contrib[b]

        # periódica: arbitragem spawn / prune
        if step % 32 == 0 and step > 0:
            spawned = arbitration_and_spawn(model.nodes, meta, agent_store, resp_accum, err_accum)
            # decaimento dos acumuladores
            resp_accum *= 0.1
            err_accum *= 0.1
    return

# # Exemplo de montagem/execução
if __name__ == "__main__":
    N = 8192; k = 8; d = 32; n_layers = 8
    node_table = NodeTable(N, k, d).to(device)
    # atribui nós às layers uniformemente
    layer_ids = torch.arange(N, dtype=torch.int32) // (N // n_layers)
    node_table.layer_id.copy_(layer_ids.to(node_table.layer_id.device))
    router = SparseRouter(node_table, faiss_gpu_id=0); router.build_index()
    meta = MetaController(n_layers=n_layers, token_budget=64, token_period=200).to(device)
    agent_store = AgentStore()
    model = SplineNet(node_table, meta, topk=32, out_dim=10, node_emb_dim=32).to(device)
    optimizer = torch.optim.AdamW(model.parameters(), lr=3e-4)
    scaler = GradScaler()

    def loader(B=64, steps=200):
        for _ in range(steps):
            x = torch.randn(B, d); y = torch.randn(B, 10)
            yield x, y

    train_loop(model, router, agent_store, optimizer, scaler, loader(), meta, K=32)

@Repelstelertje

Copy link
Copy Markdown

Adding our case to the documented pattern of Dr.Web Virus Monitoring Service non-engagement.

Timeline:

  • 2026-05-27: Sent detailed false-positive report for 22 German-language adult dating chat platforms (Yellow Connectivity B.V., Dutch registered).
  • 2026-05-27 15:05 same-day: Received single-sentence template rejection from vms@drweb.com: "Your request has been analyzed. This is not a false positive."
  • 2026-05-27 follow-up: Submitted substantive 5-question response asking for technical indicators, trigger event, and category-vs-malicious clarification, with 10-business-day deadline.
  • 2026-06-10: Deadline expired. Zero further communication from Dr.Web.

Pattern across 38 affected domains: Dr.Web is the single outlier engine in 30 cases — every other major AV/URL classifier on VirusTotal returns clean. Statistical pattern points to category-policy labelling (adult content) misapplied as "Malicious".

Escalated to VirusTotal support@virustotal.com and to sales@drweb.com / commercial channel 2026-06-11.

Will update this comment with resolution if and when it materialises. Other vendors with similar issues — happy to compare notes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment