Program: 85643
Project: 85643
Buggy source:
public static void main(String[] args) throws Exception {
  BriefLogFormatter.init();
  System.out.println("String_Node_Str");
  boolean runExpensiveTests=args.length > 1 && Integer.parseInt(args[1]) == 1;
  params=RegTestParams.get();
  File blockFile=File.createTempFile("String_Node_Str","String_Node_Str");
  blockFile.deleteOnExit();
  FullBlockTestGenerator generator=new FullBlockTestGenerator(params);
  final RuleList blockList=generator.getBlocksToTest(true,runExpensiveTests,blockFile);
  final Map<Sha256Hash,Block> preloadedBlocks=new HashMap<Sha256Hash,Block>();
  final Iterator<Block> blocks=new BlockFileLoader(params,Arrays.asList(blockFile));
  try {
    store=new H2FullPrunedBlockStore(params,args.length > 0 ? args[0] : "String_Node_Str",blockList.maximumReorgBlockCount);
    ((H2FullPrunedBlockStore)store).resetStore();
    chain=new FullPrunedBlockChain(params,store);
  }
 catch (  BlockStoreException e) {
    e.printStackTrace();
    System.exit(1);
  }
  VersionMessage ver=new VersionMessage(params,42);
  ver.appendToSubVer("String_Node_Str","String_Node_Str",null);
  ver.localServices=VersionMessage.NODE_NETWORK;
  final Peer bitcoind=new Peer(params,ver,new BlockChain(params,new MemoryBlockStore(params)),new PeerAddress(InetAddress.getLocalHost()));
  Preconditions.checkState(bitcoind.getVersionMessage().hasBlockChain());
  final BlockWrapper currentBlock=new BlockWrapper();
  final Set<Sha256Hash> blocksRequested=Collections.synchronizedSet(new HashSet<Sha256Hash>());
  final Set<Sha256Hash> blocksPendingSend=Collections.synchronizedSet(new HashSet<Sha256Hash>());
  final AtomicInteger unexpectedInvs=new AtomicInteger(0);
  final SettableFuture<Void> connectedFuture=SettableFuture.create();
  bitcoind.addEventListener(new AbstractPeerEventListener(){
    @Override public void onPeerConnected(    Peer peer,    int peerCount){
      if (!peer.getPeerVersionMessage().subVer.contains("String_Node_Str")) {
        System.out.println();
        System.out.println("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
        System.out.println();
        System.out.println("String_Node_Str");
        Uninterruptibles.sleepUninterruptibly(30,TimeUnit.SECONDS);
      }
      log.info("String_Node_Str");
      bitcoind.setDownloadParameters(0,false);
      bitcoind.startBlockChainDownload();
      connectedFuture.set(null);
    }
    @Override public void onPeerDisconnected(    Peer peer,    int peerCount){
      log.error("String_Node_Str");
      System.exit(1);
    }
    @Override public Message onPreMessageReceived(    Peer peer,    Message m){
      if (m instanceof HeadersMessage) {
        if (!((HeadersMessage)m).getBlockHeaders().isEmpty()) {
          Block b=Iterables.getLast(((HeadersMessage)m).getBlockHeaders());
          log.info("String_Node_Str" + b.getHashAsString());
          bitcoindChainHead=b.getHash();
        }
 else         log.info("String_Node_Str");
        return null;
      }
 else       if (m instanceof Block) {
        log.error("String_Node_Str");
        System.exit(1);
      }
 else       if (m instanceof GetDataMessage) {
        for (        InventoryItem item : ((GetDataMessage)m).items)         if (item.type == InventoryItem.Type.Block) {
          log.info("String_Node_Str" + item.hash);
          if (currentBlock.block.getHash().equals(item.hash))           bitcoind.sendMessage(currentBlock.block);
 else {
            Block nextBlock=preloadedBlocks.get(item.hash);
            if (nextBlock != null)             bitcoind.sendMessage(nextBlock);
 else {
              blocksPendingSend.add(item.hash);
              log.info("String_Node_Str");
            }
          }
          blocksRequested.add(item.hash);
        }
        return null;
      }
 else       if (m instanceof GetHeadersMessage) {
        try {
          if (currentBlock.block == null) {
            log.info("String_Node_Str");
            return null;
          }
          LinkedList<Block> headers=new LinkedList<Block>();
          Block it=blockList.hashHeaderMap.get(currentBlock.block.getHash());
          while (it != null) {
            headers.addFirst(it);
            it=blockList.hashHeaderMap.get(it.getPrevBlockHash());
          }
          LinkedList<Block> sendHeaders=new LinkedList<Block>();
          boolean found=false;
          for (          Sha256Hash hash : ((GetHeadersMessage)m).getLocator()) {
            for (            Block b : headers) {
              if (found) {
                sendHeaders.addLast(b);
                log.info("String_Node_Str" + b.getPrevBlockHash() + "String_Node_Str"+ b.getHash());
                if (b.getHash().equals(((GetHeadersMessage)m).getStopHash()))                 break;
              }
 else               if (b.getHash().equals(hash)) {
                log.info("String_Node_Str" + b.getHashAsString());
                found=true;
              }
            }
            if (found)             break;
          }
          if (!found)           sendHeaders=headers;
          bitcoind.sendMessage(new HeadersMessage(params,sendHeaders));
          InventoryMessage i=new InventoryMessage(params);
          for (          Block b : sendHeaders)           i.addBlock(b);
          bitcoind.sendMessage(i);
        }
 catch (        Exception e) {
          throw new RuntimeException(e);
        }
        return null;
      }
 else       if (m instanceof InventoryMessage) {
        if (mostRecentInv != null) {
          log.error("String_Node_Str");
          unexpectedInvs.incrementAndGet();
        }
        mostRecentInv=(InventoryMessage)m;
      }
      return m;
    }
  }
,Threading.SAME_THREAD);
  bitcoindChainHead=params.getGenesisBlock().getHash();
  new NioClient(new InetSocketAddress(InetAddress.getLoopbackAddress(),args.length > 2 ? Integer.parseInt(args[2]) : params.getPort()),bitcoind,1000);
  connectedFuture.get();
  ArrayList<Sha256Hash> locator=new ArrayList<Sha256Hash>(1);
  locator.add(params.getGenesisBlock().getHash());
  Sha256Hash hashTo=new Sha256Hash("String_Node_Str");
  int rulesSinceFirstFail=0;
  for (  Rule rule : blockList.list) {
    if (rule instanceof FullBlockTestGenerator.BlockAndValidity) {
      FullBlockTestGenerator.BlockAndValidity block=(FullBlockTestGenerator.BlockAndValidity)rule;
      boolean threw=false;
      Block nextBlock=preloadedBlocks.get(((FullBlockTestGenerator.BlockAndValidity)rule).blockHash);
      for (int i=0; i < 1 || nextBlock == null || !nextBlock.getHash().equals(block.blockHash); i++) {
        try {
          Block b=blocks.next();
          Block oldBlockWithSameHash=preloadedBlocks.put(b.getHash(),b);
          if (oldBlockWithSameHash != null && oldBlockWithSameHash.getTransactions().size() != b.getTransactions().size())           blocksRequested.remove(b.getHash());
          nextBlock=preloadedBlocks.get(block.blockHash);
        }
 catch (        NoSuchElementException e) {
          if (nextBlock == null || !nextBlock.getHash().equals(block.blockHash))           throw e;
        }
      }
      currentBlock.block=nextBlock;
      log.info("String_Node_Str",block.ruleName,currentBlock.block.getHash());
      try {
        if (chain.add(nextBlock) != block.connects) {
          log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
          rulesSinceFirstFail++;
        }
      }
 catch (      VerificationException e) {
        threw=true;
        if (!block.throwsException) {
          log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
          e.printStackTrace();
          rulesSinceFirstFail++;
        }
 else         if (block.connects) {
          log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
          e.printStackTrace();
          rulesSinceFirstFail++;
        }
      }
      if (!threw && block.throwsException) {
        log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
        rulesSinceFirstFail++;
      }
 else       if (!chain.getChainHead().getHeader().getHash().equals(block.hashChainTipAfterBlock)) {
        log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
        rulesSinceFirstFail++;
      }
 else       if (chain.getChainHead().getHeight() != block.heightAfterBlock) {
        log.error("String_Node_Str" + block.ruleName);
        rulesSinceFirstFail++;
      }
      boolean shouldntRequest=blocksRequested.contains(nextBlock.getHash());
      if (shouldntRequest)       blocksRequested.remove(nextBlock.getHash());
      InventoryMessage message=new InventoryMessage(params);
      message.addBlock(nextBlock);
      bitcoind.sendMessage(message);
      log.info("String_Node_Str" + nextBlock.getHashAsString());
      if (blocksPendingSend.contains(nextBlock.getHash())) {
        bitcoind.sendMessage(nextBlock);
        log.info("String_Node_Str" + nextBlock.getHashAsString());
      }
      for (int i=0; !shouldntRequest && !blocksRequested.contains(nextBlock.getHash()); i++) {
        int SLEEP_TIME=1;
        if (i % 1000 / SLEEP_TIME == 1000 / SLEEP_TIME - 1)         log.error("String_Node_Str" + block.ruleName + "String_Node_Str"+ nextBlock.getHash());
        Thread.sleep(SLEEP_TIME);
        if (i > 60000 / SLEEP_TIME) {
          log.error("String_Node_Str" + block.ruleName);
          System.exit(1);
        }
      }
      if (shouldntRequest) {
        Thread.sleep(100);
        if (blocksRequested.contains(nextBlock.getHash())) {
          log.error("String_Node_Str" + block.ruleName + "String_Node_Str"+ nextBlock.getHash());
          rulesSinceFirstFail++;
        }
      }
      if (block.throwsException)       blocksRequested.remove(nextBlock.getHash());
      locator.clear();
      locator.add(bitcoindChainHead);
      bitcoind.sendMessage(new GetHeadersMessage(params,locator,hashTo));
      bitcoind.ping().get();
      if (!chain.getChainHead().getHeader().getHash().equals(bitcoindChainHead)) {
        rulesSinceFirstFail++;
        log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
      }
      if (block.sendOnce)       preloadedBlocks.remove(nextBlock.getHash());
      log.info("String_Node_Str" + block.ruleName + "String_Node_Str");
    }
 else     if (rule instanceof MemoryPoolState) {
      MemoryPoolMessage message=new MemoryPoolMessage();
      bitcoind.sendMessage(message);
      bitcoind.ping().get();
      if (mostRecentInv == null && !((MemoryPoolState)rule).mempool.isEmpty()) {
        log.error("String_Node_Str" + rule.ruleName);
        rulesSinceFirstFail++;
      }
 else       if (mostRecentInv != null && ((MemoryPoolState)rule).mempool.isEmpty()) {
        log.error("String_Node_Str" + rule.ruleName);
        rulesSinceFirstFail++;
      }
 else       if (mostRecentInv != null) {
        Set<InventoryItem> originalRuleSet=new HashSet<InventoryItem>(((MemoryPoolState)rule).mempool);
        boolean matches=mostRecentInv.items.size() == ((MemoryPoolState)rule).mempool.size();
        for (        InventoryItem item : mostRecentInv.items)         if (!((MemoryPoolState)rule).mempool.remove(item))         matches=false;
        if (matches)         continue;
        log.error("String_Node_Str" + rule.ruleName);
        log.info("String_Node_Str");
        for (        InventoryItem item : mostRecentInv.items)         log.info("String_Node_Str" + item.hash);
        log.info("String_Node_Str");
        for (        InventoryItem item : originalRuleSet)         log.info("String_Node_Str" + item.hash);
        rulesSinceFirstFail++;
      }
      mostRecentInv=null;
    }
 else {
      throw new RuntimeException("String_Node_Str");
    }
    if (rulesSinceFirstFail > 0)     rulesSinceFirstFail++;
    if (rulesSinceFirstFail > 6)     System.exit(1);
  }
  if (unexpectedInvs.get() > 0)   log.error("String_Node_Str" + unexpectedInvs.get() + "String_Node_Str");
  log.info("String_Node_Str");
  System.exit(rulesSinceFirstFail > 0 || unexpectedInvs.get() > 0 ? 1 : 0);
}

Fixed version (ground truth):
public static void main(String[] args) throws Exception {
  BriefLogFormatter.init();
  System.out.println("String_Node_Str");
  boolean runExpensiveTests=args.length > 1 && Integer.parseInt(args[1]) == 1;
  params=RegTestParams.get();
  File blockFile=File.createTempFile("String_Node_Str","String_Node_Str");
  blockFile.deleteOnExit();
  FullBlockTestGenerator generator=new FullBlockTestGenerator(params);
  final RuleList blockList=generator.getBlocksToTest(true,runExpensiveTests,blockFile);
  final Map<Sha256Hash,Block> preloadedBlocks=new HashMap<Sha256Hash,Block>();
  final Iterator<Block> blocks=new BlockFileLoader(params,Arrays.asList(blockFile));
  try {
    store=new H2FullPrunedBlockStore(params,args.length > 0 ? args[0] : "String_Node_Str",blockList.maximumReorgBlockCount);
    ((H2FullPrunedBlockStore)store).resetStore();
    chain=new FullPrunedBlockChain(params,store);
  }
 catch (  BlockStoreException e) {
    e.printStackTrace();
    System.exit(1);
  }
  VersionMessage ver=new VersionMessage(params,42);
  ver.appendToSubVer("String_Node_Str","String_Node_Str",null);
  ver.localServices=VersionMessage.NODE_NETWORK;
  final Peer bitcoind=new Peer(params,ver,new BlockChain(params,new MemoryBlockStore(params)),new PeerAddress(InetAddress.getLocalHost()));
  Preconditions.checkState(bitcoind.getVersionMessage().hasBlockChain());
  final BlockWrapper currentBlock=new BlockWrapper();
  final Set<Sha256Hash> blocksRequested=Collections.synchronizedSet(new HashSet<Sha256Hash>());
  final Set<Sha256Hash> blocksPendingSend=Collections.synchronizedSet(new HashSet<Sha256Hash>());
  final AtomicInteger unexpectedInvs=new AtomicInteger(0);
  final SettableFuture<Void> connectedFuture=SettableFuture.create();
  bitcoind.addEventListener(new AbstractPeerEventListener(){
    @Override public void onPeerConnected(    Peer peer,    int peerCount){
      if (!peer.getPeerVersionMessage().subVer.contains("String_Node_Str")) {
        System.out.println();
        System.out.println("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
        System.out.println();
        System.out.println("String_Node_Str");
        Uninterruptibles.sleepUninterruptibly(30,TimeUnit.SECONDS);
      }
      log.info("String_Node_Str");
      bitcoind.setDownloadParameters(0,false);
      bitcoind.startBlockChainDownload();
      connectedFuture.set(null);
    }
    @Override public void onPeerDisconnected(    Peer peer,    int peerCount){
      log.error("String_Node_Str");
      System.exit(1);
    }
    @Override public Message onPreMessageReceived(    Peer peer,    Message m){
      if (m instanceof HeadersMessage) {
        if (!((HeadersMessage)m).getBlockHeaders().isEmpty()) {
          Block b=Iterables.getLast(((HeadersMessage)m).getBlockHeaders());
          log.info("String_Node_Str" + b.getHashAsString());
          bitcoindChainHead=b.getHash();
        }
 else         log.info("String_Node_Str");
        return null;
      }
 else       if (m instanceof Block) {
        log.error("String_Node_Str");
        System.exit(1);
      }
 else       if (m instanceof GetDataMessage) {
        for (        InventoryItem item : ((GetDataMessage)m).items)         if (item.type == InventoryItem.Type.Block) {
          log.info("String_Node_Str" + item.hash);
          if (currentBlock.block.getHash().equals(item.hash))           bitcoind.sendMessage(currentBlock.block);
 else {
            Block nextBlock=preloadedBlocks.get(item.hash);
            if (nextBlock != null)             bitcoind.sendMessage(nextBlock);
 else {
              blocksPendingSend.add(item.hash);
              log.info("String_Node_Str");
            }
          }
          blocksRequested.add(item.hash);
        }
        return null;
      }
 else       if (m instanceof GetHeadersMessage) {
        try {
          if (currentBlock.block == null) {
            log.info("String_Node_Str");
            return null;
          }
          LinkedList<Block> headers=new LinkedList<Block>();
          Block it=blockList.hashHeaderMap.get(currentBlock.block.getHash());
          while (it != null) {
            headers.addFirst(it);
            it=blockList.hashHeaderMap.get(it.getPrevBlockHash());
          }
          LinkedList<Block> sendHeaders=new LinkedList<Block>();
          boolean found=false;
          for (          Sha256Hash hash : ((GetHeadersMessage)m).getLocator()) {
            for (            Block b : headers) {
              if (found) {
                sendHeaders.addLast(b);
                log.info("String_Node_Str" + b.getPrevBlockHash() + "String_Node_Str"+ b.getHash());
                if (b.getHash().equals(((GetHeadersMessage)m).getStopHash()))                 break;
              }
 else               if (b.getHash().equals(hash)) {
                log.info("String_Node_Str" + b.getHashAsString());
                found=true;
              }
            }
            if (found)             break;
          }
          if (!found)           sendHeaders=headers;
          bitcoind.sendMessage(new HeadersMessage(params,sendHeaders));
          InventoryMessage i=new InventoryMessage(params);
          for (          Block b : sendHeaders)           i.addBlock(b);
          bitcoind.sendMessage(i);
        }
 catch (        Exception e) {
          throw new RuntimeException(e);
        }
        return null;
      }
 else       if (m instanceof InventoryMessage) {
        if (mostRecentInv != null) {
          log.error("String_Node_Str");
          unexpectedInvs.incrementAndGet();
        }
        mostRecentInv=(InventoryMessage)m;
      }
      return m;
    }
  }
,Threading.SAME_THREAD);
  bitcoindChainHead=params.getGenesisBlock().getHash();
  new NioClient(new InetSocketAddress(InetAddress.getLocalHost(),args.length > 2 ? Integer.parseInt(args[2]) : params.getPort()),bitcoind,1000);
  connectedFuture.get();
  ArrayList<Sha256Hash> locator=new ArrayList<Sha256Hash>(1);
  locator.add(params.getGenesisBlock().getHash());
  Sha256Hash hashTo=new Sha256Hash("String_Node_Str");
  int rulesSinceFirstFail=0;
  for (  Rule rule : blockList.list) {
    if (rule instanceof FullBlockTestGenerator.BlockAndValidity) {
      FullBlockTestGenerator.BlockAndValidity block=(FullBlockTestGenerator.BlockAndValidity)rule;
      boolean threw=false;
      Block nextBlock=preloadedBlocks.get(((FullBlockTestGenerator.BlockAndValidity)rule).blockHash);
      for (int i=0; i < 1 || nextBlock == null || !nextBlock.getHash().equals(block.blockHash); i++) {
        try {
          Block b=blocks.next();
          Block oldBlockWithSameHash=preloadedBlocks.put(b.getHash(),b);
          if (oldBlockWithSameHash != null && oldBlockWithSameHash.getTransactions().size() != b.getTransactions().size())           blocksRequested.remove(b.getHash());
          nextBlock=preloadedBlocks.get(block.blockHash);
        }
 catch (        NoSuchElementException e) {
          if (nextBlock == null || !nextBlock.getHash().equals(block.blockHash))           throw e;
        }
      }
      currentBlock.block=nextBlock;
      log.info("String_Node_Str",block.ruleName,currentBlock.block.getHash());
      try {
        if (chain.add(nextBlock) != block.connects) {
          log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
          rulesSinceFirstFail++;
        }
      }
 catch (      VerificationException e) {
        threw=true;
        if (!block.throwsException) {
          log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
          e.printStackTrace();
          rulesSinceFirstFail++;
        }
 else         if (block.connects) {
          log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
          e.printStackTrace();
          rulesSinceFirstFail++;
        }
      }
      if (!threw && block.throwsException) {
        log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
        rulesSinceFirstFail++;
      }
 else       if (!chain.getChainHead().getHeader().getHash().equals(block.hashChainTipAfterBlock)) {
        log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
        rulesSinceFirstFail++;
      }
 else       if (chain.getChainHead().getHeight() != block.heightAfterBlock) {
        log.error("String_Node_Str" + block.ruleName);
        rulesSinceFirstFail++;
      }
      boolean shouldntRequest=blocksRequested.contains(nextBlock.getHash());
      if (shouldntRequest)       blocksRequested.remove(nextBlock.getHash());
      InventoryMessage message=new InventoryMessage(params);
      message.addBlock(nextBlock);
      bitcoind.sendMessage(message);
      log.info("String_Node_Str" + nextBlock.getHashAsString());
      if (blocksPendingSend.contains(nextBlock.getHash())) {
        bitcoind.sendMessage(nextBlock);
        log.info("String_Node_Str" + nextBlock.getHashAsString());
      }
      for (int i=0; !shouldntRequest && !blocksRequested.contains(nextBlock.getHash()); i++) {
        int SLEEP_TIME=1;
        if (i % 1000 / SLEEP_TIME == 1000 / SLEEP_TIME - 1)         log.error("String_Node_Str" + block.ruleName + "String_Node_Str"+ nextBlock.getHash());
        Thread.sleep(SLEEP_TIME);
        if (i > 60000 / SLEEP_TIME) {
          log.error("String_Node_Str" + block.ruleName);
          System.exit(1);
        }
      }
      if (shouldntRequest) {
        Thread.sleep(100);
        if (blocksRequested.contains(nextBlock.getHash())) {
          log.error("String_Node_Str" + block.ruleName + "String_Node_Str"+ nextBlock.getHash());
          rulesSinceFirstFail++;
        }
      }
      if (block.throwsException)       blocksRequested.remove(nextBlock.getHash());
      locator.clear();
      locator.add(bitcoindChainHead);
      bitcoind.sendMessage(new GetHeadersMessage(params,locator,hashTo));
      bitcoind.ping().get();
      if (!chain.getChainHead().getHeader().getHash().equals(bitcoindChainHead)) {
        rulesSinceFirstFail++;
        log.error("String_Node_Str" + block.ruleName + "String_Node_Str");
      }
      if (block.sendOnce)       preloadedBlocks.remove(nextBlock.getHash());
      log.info("String_Node_Str" + block.ruleName + "String_Node_Str");
    }
 else     if (rule instanceof MemoryPoolState) {
      MemoryPoolMessage message=new MemoryPoolMessage();
      bitcoind.sendMessage(message);
      bitcoind.ping().get();
      if (mostRecentInv == null && !((MemoryPoolState)rule).mempool.isEmpty()) {
        log.error("String_Node_Str" + rule.ruleName);
        rulesSinceFirstFail++;
      }
 else       if (mostRecentInv != null && ((MemoryPoolState)rule).mempool.isEmpty()) {
        log.error("String_Node_Str" + rule.ruleName);
        rulesSinceFirstFail++;
      }
 else       if (mostRecentInv != null) {
        Set<InventoryItem> originalRuleSet=new HashSet<InventoryItem>(((MemoryPoolState)rule).mempool);
        boolean matches=mostRecentInv.items.size() == ((MemoryPoolState)rule).mempool.size();
        for (        InventoryItem item : mostRecentInv.items)         if (!((MemoryPoolState)rule).mempool.remove(item))         matches=false;
        if (matches)         continue;
        log.error("String_Node_Str" + rule.ruleName);
        log.info("String_Node_Str");
        for (        InventoryItem item : mostRecentInv.items)         log.info("String_Node_Str" + item.hash);
        log.info("String_Node_Str");
        for (        InventoryItem item : originalRuleSet)         log.info("String_Node_Str" + item.hash);
        rulesSinceFirstFail++;
      }
      mostRecentInv=null;
    }
 else {
      throw new RuntimeException("String_Node_Str");
    }
    if (rulesSinceFirstFail > 0)     rulesSinceFirstFail++;
    if (rulesSinceFirstFail > 6)     System.exit(1);
  }
  if (unexpectedInvs.get() > 0)   log.error("String_Node_Str" + unexpectedInvs.get() + "String_Node_Str");
  log.info("String_Node_Str");
  System.exit(rulesSinceFirstFail > 0 || unexpectedInvs.get() > 0 ? 1 : 0);
}