 				fatalError("Not Implemented")
 				
 			case .minKey?:
-				fatalError("Not Implemented")
+				ret[key] = MinKey()
 				
 			case .maxKey?:
-				fatalError("Not Implemented")
+				ret[key] = MaxKey()
 				
 			case .undefined?:
-				fatalError("Not Implemented")
+				ret[key] = nil
 				
 			case .dbPointer?:
-				fatalError("Not Implemented")
+				let stringPart = try readString(buffer: buffer, bufferStartPos: &posInBuffer, bufferValidLength: &bufferSize, maxBufferSize: maxBufferSize, totalNReadBytes: &totalBytesRead, stream: stream)
+				let bytesPartData = try readDataFromBuffer(dataSize: 12, alwaysCopyBytes: true, buffer: buffer, bufferStartPos: &posInBuffer, bufferValidLength: &bufferSize, maxBufferSize: maxBufferSize, totalNReadBytes: &totalBytesRead, stream: stream)
+				ret[key] = MongoDBPointer(stringPart: stringPart, bytesPartData: bytesPartData)
 				
 			case .symbol?:
 				ret[key] = try readString(buffer: buffer, bufferStartPos: &posInBuffer, bufferValidLength: &bufferSize, maxBufferSize: maxBufferSize, totalNReadBytes: &totalBytesRead, stream: stream)

	- Throws: `BSONSerializationError` in case of error.
	- Returns: The serialized BSON data.
	*/
	class func BSONObject(data: Data, options opt: BSONReadingOptions) throws -> [String: Any] {
		guard data.count >= 5 else {
			throw BSONSerializationError.dataTooSmall
		}




typealias BSONDoc = [String: Any?]

struct BSONReadingOptions : OptionSet {
	let rawValue: Int
	/* Empty. We just create the enum in case we want to add something to it later. */
