// Path: src/main/java/com/github/davidmoten/logan/config/Group.java
// public class Group {
// 
//     @XmlAttribute(required = false)
//     public boolean enabled = true;
// 
//     @XmlElement(required = false)
//     public Parser parser;
// 
//     @XmlElement(required = false)
//     public List<Log> log = Lists.newArrayList();
// 
//     /**
//      * Constructor.
//      * 
//      * @param log
//      *            log
//      * @param parser
//      *            parser
//      */
//     public Group(List<Log> log, Parser parser) {
//         super();
//         this.log = log;
//         this.parser = parser;
//     }
// 
//     /**
//      * Constructor.
//      * 
//      * @param log
//      *            log
//      */
//     public Group(List<Log> log) {
//         this(log, null);
//     }
// 
//     /**
//      * Constructor.
//      */
//     public Group() {
//         // no-args constructor required by jaxb
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder builder = new StringBuilder();
//         builder.append("Group [log=");
//         builder.append(log);
//         builder.append(", parser=");
//         builder.append(parser);
//         builder.append("]");
//         return builder.toString();
//     }
// 
// }
// 
// Path: src/main/java/com/github/davidmoten/logan/config/Parser.java
// public class Parser {
// 
//     @XmlElement(required = false)
//     public String sourcePattern;
//     @XmlElement(required = true)
//     public String pattern;
//     @XmlElement(required = true)
//     public String patternGroups;
//     @XmlElement(defaultValue = MessageSplitter.MESSAGE_PATTERN_DEFAULT)
//     public String messagePattern = MessageSplitter.MESSAGE_PATTERN_DEFAULT;
//     @XmlElement(required = true)
//     public List<String> timestampFormat;
//     @XmlElement(defaultValue = "UTC")
//     public String timezone = "UTC";
//     @XmlElement(required = false, defaultValue = "false")
//     public boolean multiline;
// 
//     public Parser(String pattern, String patternGroups, String messagePattern,
//             List<String> timestampFormat, String timezone, boolean multiline,
//             String sourcePattern) {
//         super();
//         this.pattern = pattern;
//         this.patternGroups = patternGroups;
//         this.messagePattern = messagePattern;
//         this.timestampFormat = timestampFormat;
//         this.timezone = timezone;
//         this.multiline = multiline;
//         this.sourcePattern = sourcePattern;
//     }
// 
//     /**
//      * Constructor.
//      */
//     public Parser() {
//         // required for jaxb
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder builder = new StringBuilder();
//         builder.append("Parser [pattern=");
//         builder.append(pattern);
//         builder.append(", patternGroups=");
//         builder.append(patternGroups);
//         builder.append(", messagePattern=");
//         builder.append(messagePattern);
//         builder.append(", timestampFormat=");
//         builder.append(timestampFormat);
//         builder.append(", timezone=");
//         builder.append(timezone);
//         builder.append(", multiline=");
//         builder.append(multiline);
//         builder.append("]");
//         return builder.toString();
//     }
// 
// }


import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Properties;
import java.util.regex.Pattern;
import com.github.davidmoten.logan.config.Group;
import com.github.davidmoten.logan.config.Parser;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Lists;
    }

    /**
     * Returns true if and only if the logs are split over lines like for
     * instance default java.util.logging logs.
     * 
     * @return multiline
     */
    public boolean isMultiline() {
        return multiline;
    }

    /**
     * Returns the message regex {@link Pattern} used to extract keys and values
     * from the log line message.
     * 
     * @return message pattern
     */
    public Pattern getMessagePattern() {
        return messagePattern;
    }

    private static BiMap<String, Integer> createGroupMap(String list) {
        BiMap<String, Integer> map = HashBiMap.create(5);
        String[] items = list.split(",");
        for (int i = 0; i < items.length; i++)
            map.put(items[i], i + 1);
        return map;
    }

// Path: src/main/java/com/github/davidmoten/logan/config/Group.java
// public class Group {
// 
//     @XmlAttribute(required = false)
//     public boolean enabled = true;
// 
//     @XmlElement(required = false)
//     public Parser parser;
// 
//     @XmlElement(required = false)
//     public List<Log> log = Lists.newArrayList();
// 
//     /**
//      * Constructor.
//      * 
//      * @param log
//      *            log
//      * @param parser
//      *            parser
//      */
//     public Group(List<Log> log, Parser parser) {
//         super();
//         this.log = log;
//         this.parser = parser;
//     }
// 
//     /**
//      * Constructor.
//      * 
//      * @param log
//      *            log
//      */
//     public Group(List<Log> log) {
//         this(log, null);
//     }
// 
//     /**
//      * Constructor.
//      */
//     public Group() {
//         // no-args constructor required by jaxb
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder builder = new StringBuilder();
//         builder.append("Group [log=");
//         builder.append(log);
//         builder.append(", parser=");
//         builder.append(parser);
//         builder.append("]");
//         return builder.toString();
//     }
// 
// }
// 
// Path: src/main/java/com/github/davidmoten/logan/config/Parser.java
// public class Parser {
// 
//     @XmlElement(required = false)
//     public String sourcePattern;
//     @XmlElement(required = true)
//     public String pattern;
//     @XmlElement(required = true)
//     public String patternGroups;
//     @XmlElement(defaultValue = MessageSplitter.MESSAGE_PATTERN_DEFAULT)
//     public String messagePattern = MessageSplitter.MESSAGE_PATTERN_DEFAULT;
//     @XmlElement(required = true)
//     public List<String> timestampFormat;
//     @XmlElement(defaultValue = "UTC")
//     public String timezone = "UTC";
//     @XmlElement(required = false, defaultValue = "false")
//     public boolean multiline;
// 
//     public Parser(String pattern, String patternGroups, String messagePattern,
//             List<String> timestampFormat, String timezone, boolean multiline,
//             String sourcePattern) {
//         super();
//         this.pattern = pattern;
//         this.patternGroups = patternGroups;
//         this.messagePattern = messagePattern;
//         this.timestampFormat = timestampFormat;
//         this.timezone = timezone;
//         this.multiline = multiline;
//         this.sourcePattern = sourcePattern;
//     }
// 
//     /**
//      * Constructor.
//      */
//     public Parser() {
//         // required for jaxb
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder builder = new StringBuilder();
//         builder.append("Parser [pattern=");
//         builder.append(pattern);
//         builder.append(", patternGroups=");
//         builder.append(patternGroups);
//         builder.append(", messagePattern=");
//         builder.append(messagePattern);
//         builder.append(", timestampFormat=");
//         builder.append(timestampFormat);
//         builder.append(", timezone=");
//         builder.append(timezone);
//         builder.append(", multiline=");
//         builder.append(multiline);
//         builder.append("]");
//         return builder.toString();
//     }
// 
// }


// Path: src/main/java/com/github/davidmoten/logan/LogParserOptions.java
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Properties;
import java.util.regex.Pattern;
import com.github.davidmoten.logan.config.Group;
import com.github.davidmoten.logan.config.Parser;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Lists;

    }

    /**
     * Returns true if and only if the logs are split over lines like for
     * instance default java.util.logging logs.
     * 
     * @return multiline
     */
    public boolean isMultiline() {
        return multiline;
    }

    /**
     * Returns the message regex {@link Pattern} used to extract keys and values
     * from the log line message.
     * 
     * @return message pattern
     */
    public Pattern getMessagePattern() {
        return messagePattern;
    }

    private static BiMap<String, Integer> createGroupMap(String list) {
        BiMap<String, Integer> map = HashBiMap.create(5);
        String[] items = list.split(",");
        for (int i = 0; i < items.length; i++)
            map.put(items[i], i + 1);
        return map;
    }

    public static LogParserOptions load(Parser defaultParser, Group group) {