          self._sub_crop = dict(size=None, slice_in=[], slice_out=[])
          self.set_blur_and_threshold()
  
      @property
      def mask(self):
          """ numpy.ndarray: The mask at the size of :attr:`stored_size` with any requested blurring
          and threshold amount applied."""
 
</s> remove     def _get_mask(self, detected_face, predicted_mask, sub_crop_offset):
 </s> add     def _get_mask(self, detected_face, predicted_mask, centering, sub_crop_offset): </s> remove                 predicted_mask=None,):
 </s> add                 centering, predicted_mask=None,): </s> remove         mask = self._get_mask(detected_face, predicted_mask, sub_crop_offset)
 </s> add         mask = self._get_mask(detected_face, predicted_mask, centering, sub_crop_offset) </s> remove     def set_sub_crop(self, offset):
 </s> add     def set_sub_crop(self, offset, centering): </s> remove         self._queue = queue_manager.get_queue(name=self.__class__.__name__, maxsize=queue_size)
 </s> add         queue_name = queue_manager.add_queue(name=self.__class__.__name__,
                                             maxsize=queue_size,
                                             create_new=True)
        self._queue = queue_manager.get_queue(queue_name)
        logger.trace("Initialized: %s", self.__class__.__name__)
          self._sub_crop = dict(size=None, slice_in=[], slice_out=[])
          self.set_blur_and_threshold()
        logger.trace("Initialized: %s", self.__class__.__name__)
  
      @property
      def mask(self):
          """ numpy.ndarray: The mask at the size of :attr:`stored_size` with any requested blurring
          and threshold amount applied."""
keep add keep keep keep keep keep
 core mask updates:
  - Add support for different mask centering
  - Update legacy alignments to store mask centering
  - Bugfix: lib.image ImageIO. Ensure unique queues are created (fixes mask tool when Face is input and an output folder is provided) 
lib/align/detected_face.py