func: function giveBirth(uint256 _matronId)
      external
      onlyCOO
      whenNotPaused
      returns (uint256)
      {
          
          Monster storage matron = monsters[_matronId];
  
          
          require(matron.birthTime != 0);
  
          
          require(_isReadyToGiveBirth(matron));
  
          
          uint256 sireId = matron.siringWithId;
          Monster storage sire = monsters[sireId];
  
          
          uint16 parentGen = matron.generation;
          if (sire.generation > matron.generation) {
              parentGen = sire.generation;
          }
  
          
          
          uint256 childGenes = geneScience.mixGenes(matron.genes, sire.genes, matron.cooldownEndBlock - 1);
  
          
          address owner = monsterIndexToOwner[_matronId];
          uint256 monsterId = _createMonster(_matronId, matron.siringWithId, parentGen + 1, childGenes, owner);
  
          
          
          delete matron.siringWithId;
  
          
          pregnantMonsters--;
  
          
          msg.sender.send(autoBirthFee);
  
          
          return monsterId;
      }