// Path: src/main/java/de/undercouch/bson4jackson/types/JavaScript.java
// public class JavaScript {
//     /**
//      * The actual code
//      */
//     protected final String _code;
// 
//     /**
//      * The scope (may be null)
//      */
//     protected final Map<String, Object> _scope;
// 
//     /**
//      * Constructs a new JavaScript object
//      * @param code the actual code
//      */
//     public JavaScript(String code) {
//         this(code, null);
//     }
// 
//     /**
//      * Constructs a new JavaScript object
//      * @param code the actual code
//      * @param scope the scope (may be null)
//      */
//     public JavaScript(String code, Map<String, Object> scope) {
//         _code = code;
//         _scope = scope;
//     }
// 
//     /**
//      * @return the actual code
//      */
//     public String getCode() {
//         return _code;
//     }
// 
//     /**
//      * @return the scope (may be null)
//      */
//     public Map<String, Object> getScope() {
//         return _scope;
//     }
// }
// 
// Path: src/main/java/de/undercouch/bson4jackson/types/ObjectId.java
// public class ObjectId {
//     private final int timestamp;
//     private final int counter;
//     private final int randomValue1;
//     private final short randomValue2;
// 
//     /**
//      * Constructs a new identifier
//      * @param timestamp the timestamp
//      * @param counter the counter
//      * @param randomValue1 a random value
//      * @param randomValue2 a random value
//      */
//     public ObjectId(int timestamp, int counter, int randomValue1, short randomValue2) {
//         this.timestamp = timestamp;
//         this.counter = counter;
//         this.randomValue1 = randomValue1;
//         this.randomValue2 = randomValue2;
//     }
// 
//     /**
//      * Constructs a new identifier from legacy parameters
//      * @param time the timestamp
//      * @param machine the machine ID
//      * @param inc the counter
//      * @deprecated this constructor uses the legacy format of {@link ObjectId}.
//      * Please use the modern {@link #ObjectId(int, int, int, short)} instead.
//      */
//     @Deprecated
//     public ObjectId(int time, int machine, int inc) {
//         this.timestamp = time;
//         this.randomValue1 = (machine >> 8) & 0xFFFFFF;
//         this.randomValue2 = (short)((machine & 0xFF) << 8 | (inc >> 24) & 0xFF);
//         this.counter = inc & 0xFFFFFF;
//     }
// 
//     /**
//      * @return the timestamp
//      * @deprecated Use {@link #getTimestamp()} instead
//      */
//     @Deprecated
//     public int getTime() {
//         return timestamp;
//     }
// 
//     /**
//      * @return the timestamp
//      */
//     public int getTimestamp() {
//         return timestamp;
//     }
// 
//     /**
//      * @return the machine ID
//      * @deprecated This method will be removed in a subsequent version of
//      * bson4jackson. There is no replacement
//      */
//     @Deprecated
//     public int getMachine() {
//         return (randomValue1 & 0xFFFFFF) << 8 | (randomValue2 >> 8) & 0xFF;
//     }
// 
//     /**
//      * @return the counter
//      * @deprecated Use {@link #getCounter()}
//      */
//     @Deprecated
//     public int getInc() {
//         return (randomValue2 & 0xFF) << 24 | counter;
//     }
// 
//     /**
//      * @return the counter
//      */
//     public int getCounter() {
//         return counter;
//     }
// 
//     /**
//      * @return a random value
//      */
//     public int getRandomValue1() {
//         return randomValue1;
//     }
// 
//     /**
//      * @return a random value
//      */
//     public short getRandomValue2() {
//         return randomValue2;
//     }
// }
// 
// Path: src/main/java/de/undercouch/bson4jackson/types/Timestamp.java
// public class Timestamp {
//     /**
//      * The increment
//      */
//     protected final int _inc;
// 
//     /**
//      * The actual timestamp
//      */
//     protected final int _time;
// 
//     /**
//      * Constructs a new timestamp object
//      * @param time the actual timestamp
//      * @param inc the increment
//      */
//     public Timestamp(int time, int inc) {
//         _inc = inc;
//         _time = time;
//     }
// 
//     /**
//      * @return the increment
//      */
//     public int getInc() {
//         return _inc;
//     }
// 
//     /**
//      * @return the actual timestamp
//      */
//     public int getTime() {
//         return _time;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (!(o instanceof Timestamp)) {
//             return false;
//         }
//         Timestamp t = (Timestamp)o;
//         return (_inc == t._inc && _time == t._time);
//     }
// 
//     @Override
//     public int hashCode() {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + _inc;
//         result = prime * result + _time;
//         return result;
//     }
// }


import com.fasterxml.jackson.databind.module.SimpleDeserializers;
import de.undercouch.bson4jackson.types.JavaScript;
import de.undercouch.bson4jackson.types.ObjectId;
import de.undercouch.bson4jackson.types.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;
package de.undercouch.bson4jackson.deserializers;



/**
 * BSON deserializers
 * @author Michel Kraemer
 * @since 2.3.2
 */
public class BsonDeserializers extends SimpleDeserializers {
    private static final long serialVersionUID = 261492073508673840L;

    /**
     * Default constructor
     */
    public BsonDeserializers() {
        addDeserializer(Date.class, new BsonDateDeserializer());
        addDeserializer(Calendar.class, new BsonCalendarDeserializer());
// Path: src/main/java/de/undercouch/bson4jackson/types/JavaScript.java
// public class JavaScript {
//     /**
//      * The actual code
//      */
//     protected final String _code;
// 
//     /**
//      * The scope (may be null)
//      */
//     protected final Map<String, Object> _scope;
// 
//     /**
//      * Constructs a new JavaScript object
//      * @param code the actual code
//      */
//     public JavaScript(String code) {
//         this(code, null);
//     }
// 
//     /**
//      * Constructs a new JavaScript object
//      * @param code the actual code
//      * @param scope the scope (may be null)
//      */
//     public JavaScript(String code, Map<String, Object> scope) {
//         _code = code;
//         _scope = scope;
//     }
// 
//     /**
//      * @return the actual code
//      */
//     public String getCode() {
//         return _code;
//     }
// 
//     /**
//      * @return the scope (may be null)
//      */
//     public Map<String, Object> getScope() {
//         return _scope;
//     }
// }
// 
// Path: src/main/java/de/undercouch/bson4jackson/types/ObjectId.java
// public class ObjectId {
//     private final int timestamp;
//     private final int counter;
//     private final int randomValue1;
//     private final short randomValue2;
// 
//     /**
//      * Constructs a new identifier
//      * @param timestamp the timestamp
//      * @param counter the counter
//      * @param randomValue1 a random value
//      * @param randomValue2 a random value
//      */
//     public ObjectId(int timestamp, int counter, int randomValue1, short randomValue2) {
//         this.timestamp = timestamp;
//         this.counter = counter;
//         this.randomValue1 = randomValue1;
//         this.randomValue2 = randomValue2;
//     }
// 
//     /**
//      * Constructs a new identifier from legacy parameters
//      * @param time the timestamp
//      * @param machine the machine ID
//      * @param inc the counter
//      * @deprecated this constructor uses the legacy format of {@link ObjectId}.
//      * Please use the modern {@link #ObjectId(int, int, int, short)} instead.
//      */
//     @Deprecated
//     public ObjectId(int time, int machine, int inc) {
//         this.timestamp = time;
//         this.randomValue1 = (machine >> 8) & 0xFFFFFF;
//         this.randomValue2 = (short)((machine & 0xFF) << 8 | (inc >> 24) & 0xFF);
//         this.counter = inc & 0xFFFFFF;
//     }
// 
//     /**
//      * @return the timestamp
//      * @deprecated Use {@link #getTimestamp()} instead
//      */
//     @Deprecated
//     public int getTime() {
//         return timestamp;
//     }
// 
//     /**
//      * @return the timestamp
//      */
//     public int getTimestamp() {
//         return timestamp;
//     }
// 
//     /**
//      * @return the machine ID
//      * @deprecated This method will be removed in a subsequent version of
//      * bson4jackson. There is no replacement
//      */
//     @Deprecated
//     public int getMachine() {
//         return (randomValue1 & 0xFFFFFF) << 8 | (randomValue2 >> 8) & 0xFF;
//     }
// 
//     /**
//      * @return the counter
//      * @deprecated Use {@link #getCounter()}
//      */
//     @Deprecated
//     public int getInc() {
//         return (randomValue2 & 0xFF) << 24 | counter;
//     }
// 
//     /**
//      * @return the counter
//      */
//     public int getCounter() {
//         return counter;
//     }
// 
//     /**
//      * @return a random value
//      */
//     public int getRandomValue1() {
//         return randomValue1;
//     }
// 
//     /**
//      * @return a random value
//      */
//     public short getRandomValue2() {
//         return randomValue2;
//     }
// }
// 
// Path: src/main/java/de/undercouch/bson4jackson/types/Timestamp.java
// public class Timestamp {
//     /**
//      * The increment
//      */
//     protected final int _inc;
// 
//     /**
//      * The actual timestamp
//      */
//     protected final int _time;
// 
//     /**
//      * Constructs a new timestamp object
//      * @param time the actual timestamp
//      * @param inc the increment
//      */
//     public Timestamp(int time, int inc) {
//         _inc = inc;
//         _time = time;
//     }
// 
//     /**
//      * @return the increment
//      */
//     public int getInc() {
//         return _inc;
//     }
// 
//     /**
//      * @return the actual timestamp
//      */
//     public int getTime() {
//         return _time;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (!(o instanceof Timestamp)) {
//             return false;
//         }
//         Timestamp t = (Timestamp)o;
//         return (_inc == t._inc && _time == t._time);
//     }
// 
//     @Override
//     public int hashCode() {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + _inc;
//         result = prime * result + _time;
//         return result;
//     }
// }


// Path: src/main/java/de/undercouch/bson4jackson/deserializers/BsonDeserializers.java
import com.fasterxml.jackson.databind.module.SimpleDeserializers;
import de.undercouch.bson4jackson.types.JavaScript;
import de.undercouch.bson4jackson.types.ObjectId;
import de.undercouch.bson4jackson.types.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;

package de.undercouch.bson4jackson.deserializers;



/**
 * BSON deserializers
 * @author Michel Kraemer
 * @since 2.3.2
 */
public class BsonDeserializers extends SimpleDeserializers {
    private static final long serialVersionUID = 261492073508673840L;

    /**
     * Default constructor
     */
    public BsonDeserializers() {
        addDeserializer(Date.class, new BsonDateDeserializer());
        addDeserializer(Calendar.class, new BsonCalendarDeserializer());
        addDeserializer(JavaScript.class, new BsonJavaScriptDeserializer());