// Path: src/main/java/io/usethesource/criterion/api/JmhMap.java
// public interface JmhMap extends Iterable<JmhValue>, JmhValue {
// 
//   public boolean isEmpty();
// 
//   public int size();
// 
//   public JmhMap put(JmhValue key, JmhValue value);
// 
//   public JmhMap removeKey(JmhValue key);
// 
//   /**
//    * @return the value that is mapped to this key, or null if no such value exists
//    */
//   public JmhValue get(JmhValue key);
// 
//   public boolean containsKey(JmhValue key);
// 
//   public boolean containsValue(JmhValue value);
// 
//   /**
//    * @return an iterator over the keys of the map
//    */
//   @Override
//   public Iterator<JmhValue> iterator();
// 
//   /**
//    * @return an iterator over the values of the map
//    */
//   public Iterator<JmhValue> valueIterator();
// 
//   /**
//    * @return an iterator over the keys-value pairs of the map
//    */
//   public Iterator<Entry<JmhValue, JmhValue>> entryIterator();
// 
//   public static interface Builder extends JmhBuilder {
// 
//     void put(JmhValue key, JmhValue value);
// 
//     void putAll(JmhMap map);
// 
//     void putAll(Map<JmhValue, JmhValue> map);
// 
//     @Override
//     JmhMap done();
// 
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/api/JmhValue.java
// @CompilerControl(Mode.DONT_INLINE)
// public interface JmhValue {
// 
//   /**
//    * Removes the JmhValue delegation object to reveal its internal representation.
//    *
//    * @return internal representation
//    */
//   Object unwrap();
// 
// }


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import com.google.common.collect.ImmutableMap;
import io.usethesource.criterion.api.JmhMap;
import io.usethesource.criterion.api.JmhValue;
  }

  @Override
  public void putAll(JmhMap map) {
    putAll(map.entryIterator());
  }

  @Override
  public void putAll(java.util.Map<JmhValue, JmhValue> map) {
    putAll(map.entrySet().iterator());
  }

  private void putAll(Iterator<Entry<JmhValue, JmhValue>> entryIterator) {
    checkMutation();

    while (entryIterator.hasNext()) {
      final Entry<JmhValue, JmhValue> entry = entryIterator.next();
      final JmhValue key = entry.getKey();
      final JmhValue value = entry.getValue();

      mapContent.put(key, value);
    }
  }

  protected void checkMutation() {
    if (constructedMap != null) {
      throw new UnsupportedOperationException("Mutation of a finalized map is not supported.");
    }
  }

// Path: src/main/java/io/usethesource/criterion/api/JmhMap.java
// public interface JmhMap extends Iterable<JmhValue>, JmhValue {
// 
//   public boolean isEmpty();
// 
//   public int size();
// 
//   public JmhMap put(JmhValue key, JmhValue value);
// 
//   public JmhMap removeKey(JmhValue key);
// 
//   /**
//    * @return the value that is mapped to this key, or null if no such value exists
//    */
//   public JmhValue get(JmhValue key);
// 
//   public boolean containsKey(JmhValue key);
// 
//   public boolean containsValue(JmhValue value);
// 
//   /**
//    * @return an iterator over the keys of the map
//    */
//   @Override
//   public Iterator<JmhValue> iterator();
// 
//   /**
//    * @return an iterator over the values of the map
//    */
//   public Iterator<JmhValue> valueIterator();
// 
//   /**
//    * @return an iterator over the keys-value pairs of the map
//    */
//   public Iterator<Entry<JmhValue, JmhValue>> entryIterator();
// 
//   public static interface Builder extends JmhBuilder {
// 
//     void put(JmhValue key, JmhValue value);
// 
//     void putAll(JmhMap map);
// 
//     void putAll(Map<JmhValue, JmhValue> map);
// 
//     @Override
//     JmhMap done();
// 
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/api/JmhValue.java
// @CompilerControl(Mode.DONT_INLINE)
// public interface JmhValue {
// 
//   /**
//    * Removes the JmhValue delegation object to reveal its internal representation.
//    *
//    * @return internal representation
//    */
//   Object unwrap();
// 
// }


// Path: src/main/java/io/usethesource/criterion/impl/immutable/guava/ImmutableGuavaMapBuilder.java
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import com.google.common.collect.ImmutableMap;
import io.usethesource.criterion.api.JmhMap;
import io.usethesource.criterion.api.JmhValue;

  }

  @Override
  public void putAll(JmhMap map) {
    putAll(map.entryIterator());
  }

  @Override
  public void putAll(java.util.Map<JmhValue, JmhValue> map) {
    putAll(map.entrySet().iterator());
  }

  private void putAll(Iterator<Entry<JmhValue, JmhValue>> entryIterator) {
    checkMutation();

    while (entryIterator.hasNext()) {
      final Entry<JmhValue, JmhValue> entry = entryIterator.next();
      final JmhValue key = entry.getKey();
      final JmhValue value = entry.getValue();

      mapContent.put(key, value);
    }
  }

  protected void checkMutation() {
    if (constructedMap != null) {
      throw new UnsupportedOperationException("Mutation of a finalized map is not supported.");
    }
  }

  @Override