anchor.diff:    ShuffleLinkedList<KPeerInfo> _findedNode = new ShuffleLinkedList(50);
     List<KAnnounceInfo> announcedNode = [];
     KId _infoHashId = null;
  -  KId _tokenFilter = null;
     bool get isStart => _isStart;
     int lastUpdateTime = 0;
   
  -  KNodeAIAnnounceTask(KId infoHashId, {KId tokenFilter: null}) {
  +  KNodeAIAnnounceTask(KId infoHashId) {
       this._infoHashId = infoHashId;
  -    this._tokenFilter = new KId(new List.filled(20, 0xff));
  -  }
  -
  -  start(KNode node) {
  +  }
  +
  +  startSearchPeer(KNode node, KId infoHash) {
       _isStart = true;
       lastUpdateTime = 0;
  -  }
  -
  -  stop(KNode node) {
  +    _search(node);
  +  }
  +
  +  stopSearchPeer(KNode node, KId infoHash) {
       _isStart = false;
     }
   
  -  maintenance(node) {}
  -  startSearchPeer(KNode node, KId infoHash) {}
  -  stopSearchPeer(KNode node, KId infoHash) {}
  -  search(KNode node) {
  +  _search(KNode node) {
       _findedNode.clearAll();
       node.rootingtable.findNode(_infoHashId).then((List<KPeerInfo> infos) {
         if (_isStart == false) {
  
positive.code:   }
  
    stopSearchPeer(KNode node, KId infoHash) {
      if (true== taskList.containsKey(infoHash)) {
        taskList[infoHash].stopSearchPeer(node, infoHash);
      }
    }
  
    onTicket(KNode node) {
      for (KNodeAIAnnounceTask t in taskList) {
        if(t.isStart) {
          t.onTicket(node);
        }
      }
  
negative.code: 
    onReceiveUnknown(KNode node, HetiReceiveUdpInfo info, KrpcMessage message) {
      for (KNodeAIAnnounceTask t in taskList) {
        if (t.isStart) {
          t.onReceiveUnknown(node, info, message);
        }
      }
  