@Override
  public BasicValue naryOperation(AbstractInsnNode insn, List<? extends BasicValue> values) throws AnalyzerException {
    int opCode = insn.getOpcode();
    switch (opCode) {
      case INVOKESPECIAL, INVOKEINTERFACE, INVOKEVIRTUAL -> {
        BasicValue receiver = values.get(0);
        if (receiver instanceof Calls calls) {
          delta = calls.mergedLabels;
        }
        if (receiver instanceof LabeledNull labeledNull) {
          nullsDelta = labeledNull.origins;
        }
      }
      default -> { }
    }

    switch (opCode) {
      case INVOKESTATIC, INVOKESPECIAL, INVOKEVIRTUAL -> {
        int insnIndex = insns.indexOf(insn);
        if (origins[insnIndex]) {
          boolean stable = opCode == INVOKESTATIC || opCode == INVOKESPECIAL;
          MethodInsnNode mNode = ((MethodInsnNode)insn);
          Member method = new Member(mNode.owner, mNode.name, mNode.desc);
          int label = 1 << originsMapping[insnIndex];
          if (keys[insnIndex] == null) {
            keys[insnIndex] = new EKey(method, Direction.NullableOut, stable);
          }
          return new Calls(label);
        }
      }
      default -> { }
    }
    return super.naryOperation(insn, values);
  }
@Override
  public BasicValue naryOperation(AbstractInsnNode insn, List<? extends BasicValue> values)