function releasePointerEvent(eventType, region, callback) {
	if (pointerEventList.indexOf(eventType) === -1) {
		throw new Error("invalid event type : " + eventType);
	}

	// convert to supported event type if pointerEvent not natively supported
	const eventTypes = findAllActiveEvents(
		activeEventList,
		pointerEventMap[eventType],
	);

	const handlers = eventHandlers.get(region);
	if (typeof handlers !== "undefined") {
		for (let i = 0; i < eventTypes.length; i++) {
			const eventType = eventTypes[i];
			if (handlers.callbacks[eventType]) {
				if (typeof callback !== "undefined") {
					remove(handlers.callbacks[eventType], callback);
				} else {
					while (handlers.callbacks[eventType].length > 0) {
						handlers.callbacks[eventType].pop();
					}
				}
				// free the array if empty
				if (handlers.callbacks[eventType].length === 0) {
					delete handlers.callbacks[eventType];
				}
			}
		}
		if (Object.keys(handlers.callbacks).length === 0) {
			eventHandlers.delete(region);
		}
	}
}
allows the removal of event listeners from the object target.
@see {@link http://www.w3.org/TR/pointerevents/#list-of-pointer-events|W3C Pointer Event list}
@memberof input
@param {string} eventType - The event type for which the object was registered. See {@link input.registerPointerEvent}
@param {Rect|Polygon|Line|Ellipse} region - the registered region to release for this event
@param {Function} [callback="all"] - if specified unregister the event only for the specific callback
@example
// release the registered region on the 'pointerdown' event
me.input.releasePointerEvent('pointerdown', this);