java导入ldif文件
Posted dqcer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java导入ldif文件相关的知识,希望对你有一定的参考价值。
网上导入ldif文件的方式都是基于命令,或者相应工具如LDAP Browser \Editor v2.8.2。
但用java去实现这样的功能好像网上很少,于是我参照相应的开源代码并整理了一下,亲自测试通过,若有疑问欢迎留言!!!
将ldap.jar导入到项目中
LDIFReader.java
package com.cn.ccc.ggg.ldap.core.common; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import com.novell.ldap.LDAPAttribute; import com.novell.ldap.LDAPAttributeSet; import com.novell.ldap.LDAPControl; import com.novell.ldap.LDAPEntry; import com.novell.ldap.LDAPException; import com.novell.ldap.LDAPLocalException; import com.novell.ldap.LDAPMessage; import com.novell.ldap.LDAPModification; import com.novell.ldap.LDAPSearchResult; import com.novell.ldap.LDAPAddRequest; import com.novell.ldap.LDAPDeleteRequest; import com.novell.ldap.LDAPModifyDNRequest; import com.novell.ldap.LDAPModifyRequest; import com.novell.ldap.util.Base64; import com.novell.ldap.util.LDAPReader; /** * 处理inputStream对象以读取LDIF文件的类 * * <p>该calss从LDIF文件读取LDAP条目和LDAP请求</p> * * <p>构造函数使用默认大小值8,192来创建 缓冲字符输入流并假定大小很大足以容纳下一个字段的dn字段和第一行当前正在阅读的LDIF文件中的第一条记录</p> * * <p>构造函数使用‘1‘作为默认的LDIF文件版本</p> */ public class LDIFReader implements LDAPReader { private boolean requestFile=true; // request file=true private String version; // LDIF file version private int reqType; // int rep. of name private int lNumber; // line number private int dnlNumber; // dn line number private int fNumber = 0; // number of fields private byte[] bytes= new byte[0]; // for any byte value private boolean control = false; // is control field private String entryDN; // entry dn private String[] modInfo; // for moddn private ArrayList rFields = new ArrayList(); // record fields private ArrayList cList = new ArrayList(); // control list private BufferedReader bufReader; private LDAPControl[] controls = null; // req controls private LDAPEntry currentEntry = null; private LDAPModification[] mods; private LDAPMessage currentRequest = null; /** * 通过初始化LDIF_VERSION,isRequest构造LDIFReader对象, * InputStreamReader和BufferedReader * * @param in The InputStream object to be processed by LDIFReader */ public LDIFReader( InputStream in ) throws IOException, LDAPLocalException { this( in, 1, 8192 ); return; } /** * 通过初始化LDIF_VERSION,isRequest构造LDIFReader对象, * InputStreamReader和BufferedReader * * @param in The Inputstream object to be processed by LDIFReader * @param version The version currently used in the LDIF file */ public LDIFReader( InputStream in, int version ) throws IOException, LDAPLocalException { this( in, version, 8192 ); return; } /** * 通过初始化LDIF_VERSION,isRequest构造LDIFReader对象, * InputStreamReader和BufferedReader * * @param in The Inputstream object to be processed by LDIFReader * @param version The version currently used in the LDIF file * @param bufSize The size used to create a buffering character-input * stream. The defaule value is 8,192. */ public LDIFReader(InputStream in, int version, int bufSize) throws IOException, LDAPLocalException { super(); String line = null; if ( version != 1 ) { // check LDIF file version throw new RuntimeException("com.novell.ldap.ldif_dsml.LDIFReader:" + "found: " + version + ", Should be: 1"); } setVersion( version ); InputStreamReader isr = new InputStreamReader(in, "US-ASCII"); bufReader = new BufferedReader(isr); //为了确定它是否是LDIF内容文件或LDIF更改 //文件,dn字段的第一行和旁边的有意义的行 // dn字段被读入内存。 //在版本行之前跳过前面的空行和注释行 /* while( (line = bufReader.readLine())!= null && (line.length() == 0 || line.startsWith("#")) ) { this.lNumber++; } //已经到达文件的末尾 if ( line == null ) { throw new LDAPLocalException( "com.novell.ldap.ldif_dsml.LDIFReader:" + " The file contains no LDIF info", LDAPException.LOCAL_ERROR); } //需要增加行号 this.lNumber++; // 1 //第一个有效行(版本行)。 检查版本行 if (line.startsWith("version:")) { this.version = line.substring("version:".length()).trim(); if ( !this.version.equals( "1") ) { throw new LDAPLocalException( "com.novell.ldap.ldif_dsml.LDIFReader: " + "version: found ‘" + version + "‘ (on line " + this.lNumber + " of the file), should be ‘1‘", LDAPException.LOCAL_ERROR); } }else { // 第一行有效行不是版本行 throw new LDAPLocalException("com.novell.ldap.ldif_dsml.LDIFReader:" + " Version line must be the first meaningful line(on line " + this.lNumber + " of the file)", LDAPException.LOCAL_ERROR); } */ // 跳过版本行和之间的空行和注释行 // LDIF的第一个记录中的dn字段的第一行 // 文件,读取第一条记录的dn字段的第一行 do { //标记第一个dn行,所以我们以后可以回到这里 bufReader.mark( bufSize ); line=bufReader.readLine(); if ( line == null) { // end of file throw new LDAPLocalException( "com.novell.ldap.ldif_dsml." + "LDIFReader: the LDIF file only contains version line.", LDAPException.LOCAL_ERROR); } this.lNumber++; } while((line.length()== 0) || line.startsWith("#")); //稍后会检查dn字段; 现在忽略了其余的一行 // dn字段,并在dn字段后面读取有效行 while ( (line = bufReader.readLine()) != null ) { // ! a part of dn field ! a comment line if ( !line.startsWith(" ") && !line.startsWith("#") ) { //到第一个记录的结尾 if ( line.length() == 0 ) { //空行 这个记录只有dn字段 throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: the first record only has dn field(line " + this.lNumber + " of the file)", LDAPException.LOCAL_ERROR); } //刚刚读取的行应该是开头的行 //‘control‘, ‘changetype‘, 属性名 break; } } if ( line == null) { // end of file throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: the first record only has dn field(line " + this.lNumber + " of the file)", LDAPException.LOCAL_ERROR); } if(line.startsWith("changetype")||line.startsWith("control")){ setRequest(true); // LDIF使用LDAP操作请求更改文件 } else { setRequest(false); // 带有LDAP条目的LDIF内容文件 } setRequest(true); //返回到LDIF文件的第一个记录的开头 //稍后读取可以从第一条记录开始 bufReader.reset(); // this.lNumber--; return; } /** * 获取与输入流相关联的LDIF数据的版本 * * @return the version number */ public String getVersion() { return version; } /** * 获取与输入流相关联的LDIF数据的版本 * * @param value the version number */ private void setVersion(int value) { version = String.valueOf(value); return; } /** * 如果请求数据与输入流相关联,则返回true, * 或如果内容数据为false。 * * @return true if input stream contains request data. */ public boolean isRequest() { return requestFile; } /** * 设置正在读取的文件的请求类型,如果请求数据为true * 或如果内容数据为false。 * * @param type sets the type of file to content or request data. */ private void setRequest( boolean type) { requestFile = type; return; } /** * 从LDIF请求(更改)文件或内容文件读取LDAP请求。. * * @return LDAPMessage specified by the record */ public LDAPMessage readMessage() throws IOException, LDAPException { readRecordFields(); // 读取记录字段 if ( this.rFields == null ) { // 文件结尾 return null; } toRecordProperties(); // 设置记录属性 if (!isRequest()) { return new LDAPSearchResult(currentEntry, null); } switch( this.reqType ) { case LDAPMessage.SEARCH_RESPONSE : this.currentRequest = new LDAPAddRequest(currentEntry, controls); break; case LDAPMessage.ADD_REQUEST : this.currentRequest = new LDAPAddRequest(currentEntry, controls); break; case LDAPMessage.DEL_REQUEST : this.currentRequest = new LDAPDeleteRequest(this.entryDN, controls); break; case LDAPMessage.MODIFY_RDN_REQUEST : boolean delOldRdn; if ( Integer.parseInt(this.modInfo[1]) == 1 ) { delOldRdn = true; } else { delOldRdn = false; } if((modInfo[2].length())==0 ) { this.currentRequest = new LDAPModifyDNRequest( this.entryDN, this.modInfo[0], null, delOldRdn, controls); } else { this.currentRequest = new LDAPModifyDNRequest(this.entryDN, this.modInfo[0], modInfo[2], delOldRdn, controls); } break; case LDAPMessage.MODIFY_REQUEST : this.currentRequest = new LDAPModifyRequest(this.entryDN, mods, controls); break; default: } return this.currentRequest; } /** * 读取当前记录中的所有行,将记录行转换为 * 记录字段,并修剪记录字段中的多余空格。 */ private void readRecordFields() throws IOException, LDAPException { String line; StringBuffer bLine = new StringBuffer(80); // clean rFields this.rFields.clear(); //跳过空和注释行并读取第一个dn //行记录 while( (line = bufReader.readLine())!= null && (line.length() == 0 || line.startsWith("#")) ) { this.lNumber++; } this.lNumber++; this.dnlNumber = this.lNumber; if (line == null) { // 文件结尾 this.rFields = null; } else { //检查dn行是否以‘dn:‘开头 if (!line.startsWith("dn:")) { throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReacer: Any record should start with ‘dn:‘(on line " + this.lNumber + " of the file).", LDAPException.LOCAL_ERROR); } //保存第一个dn行 bLine.append(line); //读取除注释行之外的记录的其他行。 //读取停止在用于分隔的空行 //当前记录与下一个 while ((line = bufReader.readLine())!=null && line.length()!=0 ) { if ( !line.startsWith("#") ) { //跳过注释行 if ( line.startsWith(" ") ) { //续行? // trim off leading ‘ ‘ and append it to previous line bLine.append(line.substring(1, line.length())); } else { // 新的一行 // handle pewvious field bLine = trimField(bLine); // trime上一个字段 if(!this.control) { // 如果不是,保存它 this.rFields.add(bLine); // 一个控制字段 } //处理新行 bLine = new StringBuffer(80);// create a new buffer bLine.append(line); // to hold new line } } this.lNumber++; } //修剪并保存最后一个字段 bLine = trimField(bLine); this.rFields.add(bLine); this.lNumber++; // 增加行号 this.fNumber = this.rFields.size(); // 获取字段数 } return; } /** * 设置记录属性。 * <p>对于LDIF内容记录,创建由此记录指定的LDAPEntry</p> * * <p>对于LDIF更改记录,根据请求类型,将创建LDAPEntry,modInfo或LDAPModifiction数组以及与请求相关联的控件</p> */ private void toRecordProperties() throws IOException, LDAPException { int index; String req; // set entry DN StringBuffer dnField = (StringBuffer)this.rFields.get(0); if (dnField.charAt(3) != ‘:‘) { // commom string value this.entryDN = dnField.substring( 3, dnField.length()); } else { // base64 encoded this.bytes = Base64.decode(dnField, 4, dnField.length()); try { this.entryDN = new String(this.bytes, "UTF-8"); } catch( UnsupportedEncodingException ue) { throw new RuntimeException( "UTF-8 String encoding not supported by JVM"); } } if ( !isRequest() ) { // 是一个内容LDIF文件 toLDAPEntry(); } else { // 是一个更改LDIF文件 index = 10; // length of ‘changetype‘ // ctField - changetype field StringBuffer ctField = (StringBuffer)this.rFields.get(1); this.reqType = LDAPMessage.ADD_REQUEST; toLDAPEntry(); /*if(!ctField.substring(0, index).equalsIgnoreCase("changetype")) { throw new LDAPLocalException("com.novell.ldap.ldif_dsml." +"LDIFReader: malformed changetype field in record starting" + " on line " + this.dnlNumber + " of the file).", LDAPException.LOCAL_ERROR); } // 获取类型: ‘add‘, ‘delete‘,‘moddn‘, ‘modrdn‘, or ‘modify‘ req = ctField.substring(index+1); // 设置请求类型 if ( req.equalsIgnoreCase("add") ) { this.reqType = LDAPMessage.ADD_REQUEST; toLDAPEntry(); } else if ( req.equalsIgnoreCase("delete") ) { this.reqType = LDAPMessage.DEL_REQUEST; } else if ( req.equalsIgnoreCase("modrdn") ) { this.reqType = LDAPMessage.MODIFY_RDN_REQUEST; toModInfo(); } else if ( req.equalsIgnoreCase("moddn") ) { this.reqType = LDAPMessage.MODIFY_RDN_REQUEST; toModInfo(); } else if ( req.equalsIgnoreCase("modify") ) { this.reqType = LDAPMessage.MODIFY_REQUEST; toLDAPModifications(); } else { throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: unsupported request type ‘" + req + "‘ specified in changetype filed of the record starting " + "on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); }*/ if (this.cList.size() > 0) { this.controls = new LDAPControl[this.cList.size()]; } } return; } /** * 处理LDIF记录字段以生成LDAPEntry。 */ private void toLDAPEntry() throws LDAPLocalException { int i, index, fieldIndex; String attrName = null; StringBuffer currentField; LDAPAttributeSet attrSet = new LDAPAttributeSet(); if ( !isRequest() ) { // 跳过 dn 字段 fieldIndex = 0; } else { // 跳过dn,control和changetype字段 fieldIndex = 1; } for (i=fieldIndex; i<this.fNumber; i++) { currentField = (StringBuffer)this.rFields.get(i); // ‘:‘ 分离属性名称和属性值 index = IndexOf(currentField, ‘:‘); if (index == -1) { // ‘:‘ not found throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: missing ‘:‘ after attribute name in record " + "starting on line " + this.dnlNumber +" of the file.", LDAPException.LOCAL_ERROR); } // 获取属性名称 attrName = currentField.substring(0,index); // 如果属性名称不存在,则添加 if ( attrSet.getAttribute(attrName) == null ) { // add it to attrSet with no value attrSet.add(new LDAPAttribute(attrName)); } if(currentField.length() > index+1){ // 将属性值添加到属性中 if (currentField.charAt(index+1)==‘:‘) { // base64编码的属性值 attrSet.getAttribute(attrName).addBase64Value(currentField. substring(index+2)); } else if (currentField.charAt(index+1)==‘<‘){ // 文件URL属性值 attrSet.getAttribute(attrName).addBase64Value(currentField. substring(index+2)); } else { // 字符串值 String vals=currentField.substring(index+1).trim(); attrSet.getAttribute(attrName).addValue(vals); // attrSet.getAttribute(attrName).addValue(currentField. // substring(index+1)); } } else if(currentField.length() == index+1){ String vals=new String(""); attrSet.getAttribute(attrName).addValue(vals); } } // 构造currentEntry this.currentEntry = new LDAPEntry(this.entryDN, attrSet); return; } /** * 构建包含moddn信息的String数组对象。 */ private void toModInfo() throws LDAPLocalException { int index = 6; // length of "newrdn" int fieldIndex = 2; // reference newrdn field this.modInfo = new String[3]; StringBuffer currentField = (StringBuffer)this.rFields.get(fieldIndex); if( ! currentField.substring(0, index+1).equalsIgnoreCase("newrdn:")) { throw new LDAPLocalException("com.novell.ldap.ldif_dsml.LDIFReader:" + " malformed newrdn field in record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } // get newrdn if ( currentField.charAt(index+1) != ‘:‘) { // common string value this.modInfo[0] = currentField.substring(index+1); } else { // decode newrdn this.bytes = Base64.decode( currentField, index+2, currentField.length()); try { this.modInfo[0] = new String(this.bytes, "UTF-8"); } catch( UnsupportedEncodingException ue) { throw new RuntimeException( "UTF-8 String encoding not supported by JVM"); } } fieldIndex++; // reference deleteOleRDN field index = 13; // length of "deleteoldrdn" currentField = (StringBuffer)this.rFields.get(fieldIndex); if( ! currentField.substring(0, index).equalsIgnoreCase( "deleteoldrdn:") ) { throw new LDAPLocalException("com.novell.ldap.ldif_dsml.LDIFReader:" + " malformed deleteoldrdn field in record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } char c = currentField.charAt(index); if (c == ‘1‘) { this.modInfo[1] = new String("1"); } else if (c == ‘0‘){ this.modInfo[1] = new String("0"); } else { throw new LDAPLocalException("com.novell.ldap.ldif_dsml.LDIFReader:" + " value for deleteoldrdn field should ‘0‘ or ‘1‘, found ‘" + c + "‘ in the record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } fieldIndex++; // reference newsuperior field if (fieldIndex == this.fNumber) { // no newsuperior spefified this.modInfo[2] = new String(""); } else { // there is a newsuperior currentField = (StringBuffer)this.rFields.get(fieldIndex); index = 12; // length of "newsuperior:" if( ! currentField.substring(0, index).equalsIgnoreCase( "newsuperior:")) { throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: malformed newsuperior field in the record " + "starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } if ( currentField.charAt(index) != ‘:‘) { // commom string value this.modInfo[2] = currentField.substring(index); } else { // base64 encoded value this.bytes = Base64.decode( currentField, index+1, currentField.length()); this.modInfo[2] = new String(this.bytes);; } } return; } /** * 基于LDIF修改记录的内容构建LDAPModification数组。 */ private void toLDAPModifications()throws LDAPLocalException{ int i, index; int fieldIndex = 2; // 跳过 dn, control, and changetype 字段 String attrName, opName; LDAPAttribute attr = null; ArrayList modList = new ArrayList(); if (!(this.rFields.get(this.fNumber-1)).toString(). equalsIgnoreCase("-") ) { throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: modify record not ends with ‘-‘ in the record" + " starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } // 填充LDAPModification数组对象 for (i=fieldIndex; i<this.fNumber; i++) { // 找到":"分开mod操作和attr名称 index = IndexOf((StringBuffer)this.rFields.get(i), ‘:‘); if (index == -1) { // ‘:‘ not found throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: malformed opName:attrName field in the record" + " starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } StringBuffer nextField = (StringBuffer)this.rFields.get(i); opName= nextField.substring(0, index); attrName= nextField.substring(index+1); i++; // 指向attrName:attrValue字段 nextField = (StringBuffer)this.rFields.get(i); // 构建每个LDAPModification对象并将其添加到modList if (nextField.charAt(0)!=‘-‘) { // 至少有一个 属性名称:属性值 字段 for ( ; nextField.charAt(0)!=‘-‘; i++, nextField = (StringBuffer)this.rFields.get(i)) { // 下标分离属性名称和属性值 if ((index=IndexOf(nextField, ‘:‘)) == -1) { throw new LDAPLocalException("com.novell.ldap." + "ldif_dsml.LDIFReader : no ‘:‘ found in attrName:" + "attrValue field in the record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } else { // 比较opName:attrName和 attrName:attrValue字段 String aName = nextField.substring(0, index); if (!aName.equalsIgnoreCase(attrName)) { throw new LDAPLocalException("com.novell.ldap." + "ldif_dsml.LDIFReader : found attribute name ‘" + aName + "‘, should be ‘" + attrName + "‘ in attrName:attrValue field in the record " + "starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } // create attr and add value to it attr = new LDAPAttribute(attrName); if (nextField.charAt(index+1)==‘:‘) { // base64 encoded attribute value attr.addBase64Value(nextField.substring(index+2)); } else if (nextField.charAt(index+1)==‘<‘){ // file URL attribute value attr.addBase64Value(nextField.substring(index+2)); } else { // string value attr.addValue(nextField.substring(index+1)); } if ( opName.equalsIgnoreCase("add") ) { modList.add( new LDAPModification( LDAPModification.ADD, attr)); } else if ( opName.equalsIgnoreCase("delete") ) { modList.add( new LDAPModification( LDAPModification.DELETE, attr)); } else if ( opName.equalsIgnoreCase("replace") ) { modList.add( new LDAPModification( LDAPModification.REPLACE, attr)); } else { throw new LDAPLocalException("com.novell.ldap." + "ldif_dsml.LDIFReader : Not supported modify " + " request (" + opName + ") specified in " + "record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } } } } else { // there is no attribute value specified; this could be // true for ‘delete‘ and ‘replace‘ modify operation attr = new LDAPAttribute(attrName); if ( opName.equalsIgnoreCase("delete") ) { modList.add( new LDAPModification( LDAPModification.DELETE, attr)); } else if ( opName.equalsIgnoreCase("replace") ) { modList.add( new LDAPModification( LDAPModification.REPLACE, attr)); } else { throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: For ‘" + opName + "‘, no value " + "specified for atribute ‘" + attrName + "‘ in the record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } } } this.mods = new LDAPModification[modList.size()]; this.mods = (LDAPModification[])modList.toArray(this.mods); return; } /** * 返回指定字符首次出现的StringBuffer对象内的索引。 * * @param bl The StringBuffer object * @param ch The character to look for in the StringBuffer object * * @return The index of the first occurence of the character in the * StringBuffer object, or -1 if the character does not occur. */ private int IndexOf(StringBuffer bl, int ch) { if (bl != null ) { for (int i=0;i<bl.length(); i++) { if(bl.charAt(i) == ch) { return i; } } } return -1; } /** * <tt>去空字段<tt> 修剪一个字段中的多余空格。 */ private StringBuffer trimField( StringBuffer line) throws LDAPLocalException { int c, lastChar = 0, charIndex = 0; char t; char[] newChars; boolean isEncoded=false, isURL=false, criticality = false; String oid = null; if ((line == null)||((c=IndexOf(line,‘:‘))==-1)) { // not all fields contain ‘:‘ return line; } // elminate any trailing spaces lastChar = line.length() - 1; while( line.charAt(lastChar) == ‘ ‘) { lastChar--; } // create newChars newChars = new char[lastChar+1]; if( (c > 6) && (line.substring(0,c).equals("control"))) { // this is a control field this.control = true; c++; // skip past ‘:‘ // eliminate any spaces after ‘:‘ while( (c <= lastChar) && (line.charAt(c) == ‘ ‘)) { c++; } } else { // not a control field. it‘s ‘dn‘, //‘changetype‘, or ‘attrName‘ field this.control = false; // copy field name and ‘:‘, eg. ‘dn:‘, ‘changetype:‘, or ‘attrName:‘ line.getChars(0, c+1, newChars, 0); // skip over copied chars charIndex += c + 1; // c points to char right after first ‘:‘ c++; } if(!this.control) { // // not a control field. check if ‘::‘ or ‘:<‘ if( c <= lastChar) { t = line.charAt(c); if( t == ‘:‘) { newChars[charIndex++] = ‘:‘; // save the ‘:‘ to c++; // point to value } else if( t == ‘<‘) { newChars[charIndex++] = ‘<‘; // save the ‘<‘ to c++; // point to value } } // for case like attr: <value> boolean nonfile=false; String fredir= line.substring(c); if(fredir.length()>0 && fredir.charAt(0) != ‘<‘){ String cstr=fredir.trim(); if(cstr.length()>0 && cstr.charAt(0) == ‘<‘){ nonfile=true; } } // eliminate any space(s) after ‘:‘ or ‘<‘ while( (c <= lastChar) && (line.charAt(c) == ‘ ‘)) { c++; } // for case like attr: <value> if(nonfile==true){ c--; } if( c <= lastChar) { // thers is a value specified // copy field value line.getChars(c, lastChar+1, newChars, charIndex); charIndex += lastChar - c + 1; // create a new StringBuffer object with capacity of lastChar StringBuffer newBuf = new StringBuffer(lastChar); // copy the filed represented by newChars newBuf.append( newChars, 0, charIndex); // return the trimed field return newBuf; } else if ( line.length() == c){ StringBuffer newBuf= new StringBuffer(); line.getChars(c, lastChar+1, newChars, charIndex); charIndex += lastChar - c + 1; newBuf.append( newChars, 0, charIndex); return newBuf; } else { // there is no value specified throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: a field contains no value after ‘:‘. the " + "field is in the record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } } else { // a control field // process values for control. a control field may looks like // 1. control: 1.2.3.4 true: control value // 2. control: 1.2.3.4: control value // 3. control: 1.2.3.4 // extra spaces are possible between oid, criticality, and value. // oid is a must, while criticalitty and value can be absent. // get control oid int b = c; while(c <= lastChar) { // an oid consists of dots and digits t = line.charAt(c); if( (t == ‘.‘) || (Character.isDigit(t))) { c++; continue; } break; } if( b == c) { // control with no oid throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: Control with no oid in the record " + "starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } else { // control has iod, get local copy of oid char[] chars = new char[c-b]; line.getChars(b, c, chars, 0); oid = new String(chars); } if ( c > lastChar) { // control only has an oid. create LDAPControl object // with oid, ‘false‘ and empty byte array LDAPControl ctrl = new LDAPControl(oid, false, new byte[0]); // add it to cList this.cList.add(ctrl); return null; // return value has no use } // get control criticality t = line.charAt(c); if( t == ‘ ‘) { // see a space, skip over any spaces while( (c <= lastChar) && (line.charAt(c) == ‘ ‘)) { c++; } } // what we see now? ‘true‘, ‘false‘, or ‘:‘ ? if(((c + 3) <= lastChar)&&(line.substring(c,c+4).equals("true"))) { // found ‘true‘ c += 4; criticality = true; } else if(((c+4)<=lastChar)&&(line.substring(c,c+5).equals("false"))){ // found ‘false‘ c += 5; criticality = false; } if (c > lastChar) { // to the end of the control field // create LDAPControl object with oid, // criticality, and empty byte array LDAPControl ctrl=new LDAPControl(oid, criticality, new byte[0]); // add it to cList this.cList.add(ctrl); return null; } if ((t=line.charAt(c)) != ‘:‘) { throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: Unexcepted char ‘" + t + "‘. Expecting " + "to see ‘:‘ in the record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } // get control value c++; // go to enst char after ‘:‘ if (c > lastChar) { throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: No control value after ‘:‘ " + "in the record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } // positioned at the first char right after ‘:‘ // check if ‘::‘ or ‘:<‘ t = line.charAt(c); if( t == ‘:‘) { isEncoded = true; // indicate encoded value c++; // point to value if (c > lastChar) { throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: No control value after ‘::‘ " + "in the record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } } else if( t == ‘<‘) { isURL = true; // indicate file URL value c++; // point to value if (c > lastChar) { throw new LDAPLocalException("com.novell.ldap.ldif_dsml." + "LDIFReader: No control value after ‘:<‘ " + "in the record starting on line " + this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR); } } // eliminate any space(s) after ‘:‘, ‘::‘ or ‘:<‘ while((c <= lastChar) && (line.charAt(c) == ‘ ‘)) { c++; } if(c <= lastChar) { // thers is a value spec specified char[] chars = new char[lastChar+1-c]; line.getChars(c, lastChar+1, chars, 0); if (isEncoded) { this.bytes = Base64.decode(chars); } else if (isURL) { // if isURL, what to do? this.bytes = (new String(chars)).getBytes(); } else { this.bytes = (new String(chars)).getBytes(); } } // create LDAPControl object LDAPControl ctrl = new LDAPControl(oid, criticality, this.bytes); // add it to cList this.cList.add(ctrl); } return null; } }
LdifImport.java 完整代码
package com.cn.ccc.ggg.ldap.core.common; import java.util.Enumeration; import java.util.Iterator; import javax.naming.directory.DirContext; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.directory.server.protocol.shared.store.LdifFileLoader; import com.novell.ldap.LDAPAddRequest; import com.novell.ldap.LDAPAttribute; import com.novell.ldap.LDAPAttributeSet; import com.novell.ldap.LDAPConnection; import com.novell.ldap.LDAPDeleteRequest; import com.novell.ldap.LDAPEntry; import com.novell.ldap.LDAPException; import com.novell.ldap.LDAPMessage; import com.novell.ldap.LDAPMessageQueue; import com.novell.ldap.LDAPModifyDNRequest; import com.novell.ldap.LDAPModifyRequest; import com.novell.ldap.LDAPResponse; import com.novell.ldap.LDAPSearchResult; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; public class LdifImport { protected final Log logger = LogFactory.getLog(getClass()); /** * @param args * @date 2017?年?10?月?12?日17:33:03 */ public boolean importLdif(String [] args){ if (args.length != 4) { usage(); return false; } int version = 1; int ldapPort = LDAPConnection.DEFAULT_PORT; int ldapVersion = LDAPConnection.LDAP_V3; String fileName = args[0]; String ldapHost = args[1]; String loginDN = args[2]; String password = args[3]; LDIFReader reader = null; LDAPEntry entry; LDAPMessage msg, retMsg; LdifImport readerTest = new LdifImport(); LDAPConnection lc = new LDAPConnection(); File file = new File(fileName); if(!file.exists()){ logger.error("要读取的文件不存在"); return false; } try { FileInputStream fis = new FileInputStream(new File(fileName)); reader = new LDIFReader(fis, version); } catch (Exception e) { logger.error("读取 " + fileName +"文件失败"); return false; } try { // 连接LDAP服务 lc.connect( ldapHost, ldapPort ); // 绑定LDAP服务 lc.bind( ldapVersion, loginDN, password.getBytes("UTF8") ); if (!reader.isRequest()) { System.out.println("\nLDIF content file\n"); while ( (msg = reader.readMessage()) != null) { entry = ((LDAPSearchResult)msg).getEntry(); System.out.println("\nEntry DN:" + entry.getDN()); readerTest.showAttributes(entry); } } else { System.out.println("\nLDIF change file\n"); while ( (msg = reader.readMessage()) != null) { if (msg instanceof LDAPAddRequest) { System.out.println("Adding entry..."); } else if (msg instanceof LDAPDeleteRequest) { System.out.println("Deleting entry..."); } else if (msg instanceof LDAPModifyDNRequest) { System.out.println("Modifying entry‘s RDN..."); } else if (msg instanceof LDAPModifyRequest) { System.out.println("Modifying entry‘s attribute(s)..."); } LDAPMessageQueue queue = lc.sendRequest(msg, null, null); if ((retMsg = queue.getResponse()) != null) { LDAPResponse response = (LDAPResponse)retMsg; int status = response.getResultCode(); // the return code is LDAP success if ( status == LDAPException.SUCCESS ) { System.out.println("Directory information has been" + " modified."); } // the reutrn code is referral exception else if ( status == LDAPException.REFERRAL ) { String urls[]=((LDAPResponse)retMsg).getReferrals(); System.out.println("Referrals:"); for ( int i = 0; i < urls.length; i++ ) System.out.println(" " + urls[i]); } // general error else { System.out.println( response.getErrorMessage()); } } System.out.println(); } } } catch( UnsupportedEncodingException e ) { logger.error( "错误信息为:UnsupportedEncodingException"); } catch ( IOException ioe ) { logger.error("错误信息为:IOException"); } catch ( LDAPException le ) { logger.error("错误信息为:LDAPException"+le.getMessage()); } return false; } public void usage() { logger.error("用法: <文件名称> <IP> <登录名> <密码>"); logger.error("例如: demo.ldif 192.168.0.254 \"cn=Manager,c=中华人民共和国\" 123456" ); } public void showAttributes(LDAPEntry entry) { String value; LDAPAttributeSet as = null; LDAPAttribute[] attrs = null; LDAPAttribute attr = null; Iterator allAttrs; Enumeration allAttrValues; as = entry.getAttributeSet(); allAttrs = as.iterator(); System.out.println(" Attributes:"); while(allAttrs.hasNext()) { attr = (LDAPAttribute)allAttrs.next(); System.out.println(" " + attr.getName()); allAttrValues = attr.getStringValues(); if( allAttrValues != null) { while(allAttrValues.hasMoreElements()) { value = (String) allAttrValues.nextElement(); System.out.println(" " + value); } } } } public static void main(String[] args) { LdifImport ldifImport = new LdifImport(); String[] arg = {"C:/Users/Administrator/Desktop/Ldif Datacenter/dq.ldif","192.168.0.254","cn=Manager,c=cn","123456"}; //测试导入ldif文件 ldifImport.importLdif(arg); } }
dq.ldif文件内容为:
dn:: bz3mtbfljZfnnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9Y24= objectClass: organization o:: 5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6F dn:: b3U955S15a2Q5pS/5Yqh5Yqe5YWs5a6kLG895rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs 5Y6FLCBjPWNu ou:: 55S15a2Q5pS/5Yqh5Yqe5YWs5a6k objectClass: organizationalUnit dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf57uT54K56K6k6K+B57O757ufLG91PeeU teWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1j bg== EncryptnotAfter: 20200614115959DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgdgxHjAcBgNVBAY MFeS4reWNjuS6uuawkeWFseWSjOWbvTESMBAGA1UECAwJ5rW35Y2X55yBMScwJQYDVQQKDB7mtbf ljZfnnIHkurrmsJHmlL/lupzlip7lhazljoUxHjAcBgNVBAsMFeeUteWtkOaUv+WKoeWKnuWFrOW upDE2MDQGA1UEAwwt55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf57uT54K56K6k6K+B57O757u fMSEwHwYJKoZIhvcNAQkBDBJsaXhpb25nQGJndC5obi5nb3YwdjAQBgcqhkjOPQIBBgUrgQQAIgN iAARuWaJE4jO7gBZypBzQUYBjqtqGn/JGG7om2H8T7uz9SZcaIfL+h5Lu75pyN5Yqh57O757uf6L qr5Lu96K6k6K+B57O757ufMSIwIAYJKoZIhvcNAQkBDBNsaXV4aW9uZ0BiZ3QuaG4uZ292MHYwEA YHKoZIzj0CAQYFK4EEACIDYgAEU5G7LIzuFQ+8oEws7Nrd8ArCwdNxPbGoiAxjgiE6J8L8+6Y5Ny CxbxQQcHKnWmkqtT8QEm6HRpHyOFTh4O+fWIWuQNWuHeDhuLX9t4fkbqX9cB61RMIOkuSYdyNM1c 9aow8wDTALBgNVHQ8EBAMCA/gwCwYJKoEcgUUBh2gLA2EANefwg7k63w7RlirMG5TPq2hs5yG2hJ 1k4r0v2P/59BpPUwzIEUAxsp8HtSNus/qY4q5jrR0ZvhrNdwFN8pEZyfrW+hPOQ2rnznceid3upU oxOWlyJQx++iTGuJiwKccm objectClass: wstCertificateUser cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf57uT54K56K6k6K+B57O757uf dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ6K6/6Zeu5o6n5Yi2572R5YWz MSxvdT3nlLXlrZDmlL/liqHlip7lhazlrqQsbz3mtbfljZfnnIHkurrmsJHmlL/lupzlip7lhazl joUsIGM9Y24= EncryptCertificate;binary:: MIICrjCCAjqgAwIBAgIDAO/3MAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgdAxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TESMBAGA1UECAwJ5rW35Y2X55yBMRIwEAYDVQQHDAnmtbflj6PluIIxJzAlBgNVBAoMHua1t+WNl +ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhTEeMBwGA1UECwwV55S15a2Q5pS/5Yqh5Yqe5YWs5a6kM T0wOwYDVQQDDDTnnIHmlL/lupzkv6Hku7vmnI3liqHns7vnu5/otYTmupDorr/pl67mjqfliLbnv ZHlhbMxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJdbjSFVH/qJ7mn9OvRfFJcv5meB13NOZft5ck ZzLEFdzCc8ABw8V1v0x+l6tRGrsbhEvlwWDZqLg8G/O8Vs4TKqbNceWb3JjY6xBMeUbx2BDDKMuN 3r43/YbscmFJvXLow8wDTALBgNVHQ8EBAMCA/gwCwYJKoEcgUUBh2gLA2EAbdWEWguIXMhU1bIiJ pPttbL7fjCDIsa32Pu8eKKsEnICQHwowrVkjzq1r/3ml5KTK+3ggglwFMNveMrTGByG9VrjiQ1ot +5mrespR2FLADGdVdKxJ3clmeq27g7pgSRj EncryptnotAfter: 20200614115959 objectClass: wstCertificateUser EncryptserialNumber: EFF7 cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ6K6/6Zeu5o6n5Yi2572R5YWzMQ== dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ6K6/6Zeu5o6n5Yi2572R5YWz MixvdT3nlLXlrZDmlL/liqHlip7lhazlrqQsbz3mtbfljZfnnIHkurrmsJHmlL/lupzlip7lhazl joUsIGM9Y24= EncryptCertificate;binary:: MIICrjCCAjqgAwIBAgIDAO/4MAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgdAxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TESMBAGA1UECAwJ5rW35Y2X55yBMRIwEAYDVQQHDAnmtbflj6PluIIxJzAlBgNVBAoMHua1t+WNl +ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhTEeMBwGA1UECwwV55S15a2Q5pS/5Yqh5Yqe5YWs5a6kM T0wOwYDVQQDDDTnnIHmlL/lupzkv6Hku7vmnI3liqHns7vnu5/otYTmupDorr/pl67mjqfliLbnv ZHlhbMyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFDAcXvDayxxmC8Z1zxeKulVd+jLgw+Ai1UQ2y kHBX8K+qTYQehzIRQiMrfx7BN0MnhtWS3A3x7MGmYcV1f9KAfwabk99eLGMhVPqaMpvvDs8r7PIo hZGD6fy4YTz/YXqow8wDTALBgNVHQ8EBAMCA/gwCwYJKoEcgUUBh2gLA2EAqGtm6vCYADU+sGn73 vvAKt53vPRkQvrummU01afdawwJMBR+GQmNdkuMo+cYI2Jl+5z3K2wgcfKoFzBsxR7+ldFAlfw4v xHRFOwHzgxo6TvkiL6kSHi6WGN0kFuvJ2rS EncryptnotAfter: 20200614115959 objectClass: wstCertificateUser EncryptserialNumber: EFF8 cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ6K6/6Zeu5o6n5Yi2572R5YWzMg== dn:: b3U95bqU5oCl5YqeLG895rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FLCBjPWNu ou:: 5bqU5oCl5Yqe objectClass: organizationalUnit dn:: Y249546L5oyv5a6HLG91PeW6lOaApeWKnixvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWF rOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICcTCCAf2gAwIBAgIDAO/5MAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnlupTmg KXlip4xEjAQBgNVBAMMCeeOi+aMr+WuhzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNzB6M BQGByqGSM49AgEGCSqBHIFFAYdoCANiAAScYxXBQbH0z1lJp7SF2oeAlQKidASCBgPbazQlm7uX5 eDvOpzTcx6pW0na611Ifp6jHVCANE/YP6ljZcyOaVcHxlkqBNlpXysK/kYGJoEcXeJlAoykt55wn b6WT6NM5kqjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQDbnnzwyc+YygA4sYPI4ruXy zi1GL7ArhCxcLGJlCzZB4qOk1tl4MeI2hkDa7HWohVFseGZM6eDawnlhoYgziCXWO3umwIlQWk/I aikJsiEx+cPqRd6YfrR0VKQGELocU0= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPAKMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnlupTmgKXl ip4xEjAQBgNVBAMMCeeOi+aMr+WuhzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNzB6MBQG ByqGSM49AgEGCSqBHIFFAYdoCANiAAR79CLIZHbBRuvwO8gjSnFwkfRzMg3E21uALi39anq1cyrS F9N7o42uEODEjKbGzQSZ6gfKfjAssBT38FOV3k8RJtUUtP0crfaGhIvrE6k87AxyX78cRa2KQOc2 DCOQDtKjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQBVfwdkcKS4J86ntBmCbU2SGGvS FwtrIENOvtHaDdQxGW/vNN7LXd5yqyG+O7NUlPGsOvrMOYnXIDwkzkRulssMhmtTEC1D8bIQHOv+ vZGhZxcNQxtS059fgW8JvjwHbJI= objectClass: wstCertificateUser serialNumber: F00A EncryptserialNumber: EFF9 cn:: 546L5oyv5a6H dn:: b3U956eY5Lmm5aSELG895rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FLCBjPWNu changetype:add ou:: 56eY5Lmm5aSE objectClass: organizationalUnit dn:: Y2495q+b5pet5ZCbLG91PeenmOS5puWkhCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWF rOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICcTCCAf2gAwIBAgIDAO/6MAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnp5jku ablpIQxEjAQBgNVBAMMCeavm+aXreWQmzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNDB6M BQGByqGSM49AgEGCSqBHIFFAYdoCANiAARGHqzYbixoBc2j5YlZ4kli2AcOrclQeOibMlkV0KUZQ umacnp8NHDY6LGkmauR8Ux7g7nfskn/PyF1NImXq/4AtkFFN9i+xtgc/rLC+APiVlFP+6+PfCgtF /dxboIxfrGjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQC2Xmq72mcTduYImECzlxHvK fmibBKuC/UQgcSffId5egTUwerP07aPUnhY1WPtH0ZaZaIZaNJYiSg/Nde4G47KcbIhNYGlLy51l rvqGcv3y2Wkq6DJCgJzAxBFAWjyE8A= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPAGMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnp5jkuabl pIQxEjAQBgNVBAMMCeavm+aXreWQmzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNDB6MBQG ByqGSM49AgEGCSqBHIFFAYdoCANiAAQupbkVlEm0gDMONZwm2TEmjW2yTIGt4E29fIcdCeibIRER KuzdK74ooP/Y9DiyB36GZn99fXQx2edQE1QwTy8k+kpvTxhju5owkeLTgr5AxgSRATmZHeQzqpoN ZaFXIW6jDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQCFgDwc/BUo37U3FW2s/kOmzozC cYyoAazxJlALmwRY+UhgzcBEawASSlCwTonWFpkWO2eTTtUhWPM56n/WXNS0b4wyTA7xGnYyCJHN lLoUzKgjHGTortRlfFu4uXdV7TQ= objectClass: wstCertificateUser serialNumber: F006 EncryptserialNumber: EFFA cn:: 5q+b5pet5ZCb dn:: Y2495YiY6Imz5pilLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuaw keaUv+W6nOWKnuWFrOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICfTCCAgmgAwIBAgIDAO/7MAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxEjAQBgNVBAMMCeWImOiJs+aYpTEcMBoGCgmSJomT8ixkAQEMDDIyM TIxMDAxMDAwMzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAATV4f5bcNKedbU8foAgfiPbCTSY2 keftHKgSoISfWUgt+nIth5onA//lbasZYpqkB7LVBCYRvB6aSWp2Evq7KBV+S8+0Le+QEty6kCkG kRZtQfGZipQnWOXSR0RsIohPvujDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQCXJmMnm /l4RjcFG8kEc2dxHsYgRJKz5Gc7Wxq8ebzwQGdiMgNShAKufMCWmgEksBExvGpM6rGrqPtH9JMMU 1BgS0/GwAW7SAGQQyKLUQ1q9TzgvFMprNZR3zejQB1287Y= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICfTCCAgmgAwIBAgIDAPAEMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlrZDm lL/liqHlip7lhazlrqQxEjAQBgNVBAMMCeWImOiJs+aYpTEcMBoGCgmSJomT8ixkAQEMDDIyMTIx MDAxMDAwMzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASooCVyDiFZbP0mcfqWl0iMZuF3k4Tq TkOjxhjFvmVQ5C6tHER8gk/VTH5K4gio41Xc21vrWG3ZpuAptInDol4l6gax4YpQHVmRiJzwAk9c GXZcS2cengJgY8pMPwNs6eejDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQD33R1htZsQ q9A1lruxb6AlSmPiZGTmVc2ahAgCODqQk8tdLtWszLdXulB0DTFPeDMIxo7l6jzwlEm5WvunvIR7 tmJq7XRGbPfMrhYOEJVsdffhMbHZn61aF0vqdWp6rGY= objectClass: wstCertificateUser serialNumber: F004 EncryptserialNumber: EFFB cn:: 5YiY6Imz5pil dn:: b3U9552j5p+l5a6kLG895rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FLCBjPWNu changetype:add ou:: 552j5p+l5a6k objectClass: organizationalUnit dn:: Y2495byg5LuB57+ULG91Peedo+afpeWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWF rOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICcTCCAf2gAwIBAgIDAO/8MAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnnaPmn 6XlrqQxEjAQBgNVBAMMCeW8oOS7gee/lDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAxMDB6M BQGByqGSM49AgEGCSqBHIFFAYdoCANiAAR7D5EkIgvppfnj1yB6xh/8aji9qo9OKPz8WYeGiUBeF Be+6FHbLYw3s91+dF+yVglPplaxQ+lBIo15lBRgZom7WgqPIngPrOu1plqIAzi7jqW/PJ52IlXUQ aEQiw32CfCjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQCNXYLkG/Oqd0Jj49HxdXM3Z 1ERmJenTrVnHfzlA0pZCV/EOscfIJXyqhkCTKpveQJGCg9ruVLZnbSq+vvHKoExETYilZrXbhz9d 04ludMSny2s/qpnULLdGDmYRx7HaTU= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPAPMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnnaPmn6Xl rqQxEjAQBgNVBAMMCeW8oOS7gee/lDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAxMDB6MBQG ByqGSM49AgEGCSqBHIFFAYdoCANiAASzeF0+mnputFpfuXEpUV8aMGd35FIWuYlJNAXRsEVTg3Fv 38nvrFlz75rkvpfxxLTLRbL1BAmUlW5vWvKIl0QBft7kwKCjpEM/lvXx/fPwOvEb8Bcgwi/t/d8H rI5rBxGjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQBnJP0+gFGtZAQoMo9aEsnWBtrh o3Ul8YYLy6G0wFCvtKv6UVIgslrVRjXGI1PsEQ8l0pY0xKj+QFd/S2wkvfr3Z5iYX3bZ2yf5DH4+ bL4N+lro1+8prXm1VamwWWkgsOI= objectClass: wstCertificateUser serialNumber: F00F EncryptserialNumber: EFFC cn:: 5byg5LuB57+U dn:: Y2496ams5rW35LicLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuaw keaUv+W6nOWKnuWFrOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICfTCCAgmgAwIBAgIDAO/9MAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxEjAQBgNVBAMMCemprOa1t+S4nDEcMBoGCgmSJomT8ixkAQEMDDIyM TIxMDAxMDAwMjB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAREQEWC8lO5LVxQi3rojEpCVgp1I F3IWrU37oQVZcjReBg2KQMtIi/ZIUzzKCVNNztQ5V5bqnQ9VcnhU3iiTUeNRRMr0tSEvcL0OBRmJ T5hqD9YHVx7+2NmQ6vEf7FX66yjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQC+Vb7M6 Wlp4R2ueehitZUsWjhK5F7oiopV5SmiIDUofR1vMfsr/5qzVMXYV9+g349ndh77mM5sj2IjfkEmz uP9g+Q9zCvsH6T+zKoh74eRqbh7wIfIu8QyJloiddB/t/8= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICfTCCAgmgAwIBAgIDAPAMMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlrZDm lL/liqHlip7lhazlrqQxEjAQBgNVBAMMCemprOa1t+S4nDEcMBoGCgmSJomT8ixkAQEMDDIyMTIx MDAxMDAwMjB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAQm66YsAYr2PS3BYGvb5AuLXdMeoP33 BET9UME9pYdKYvLHK1EKdtnEGT3V0B/NLhTtoqZjmYELh82rMM081DU/tPOLbvN8PJzQ7vMC8KCQ j+xXHd7rCAAlGFr9In+BsHCjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQB6vLVLTGRS 9P/dtDnnxDSV9pfWCPVOYRIoQH3XPBezQ+Q56RIdjhCuHOF+dem5/kyAH6UpHZmzw4+9qp9lwr/V rnF3bFYN9NXHb6yPBH2YtS8fH+cmjZda6RBENdEzSLQ= objectClass: wstCertificateUser serialNumber: F00C EncryptserialNumber: EFFD cn:: 6ams5rW35Lic dn:: Y2495L+e5am3LG91PeenmOS5puWkhCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWO hSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICbjCCAfqgAwIBAgIDAO/+MAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgYwxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnp5jku ablpIQxDzANBgNVBAMMBuS/nuWptzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwOTB6MBQGB yqGSM49AgEGCSqBHIFFAYdoCANiAARXOVTTUAN/QFsjNaXxCg84+vYMcIlWD+Y1f97BJk7NB2QGW 7OGmS62Dxdn/9mEUJ5iAq8HepSKry4H1vgzeav0mCOlZE/d4mu2+I3VQ6nqC5CZtoXSBcF+9o1Tp RbgKX6jDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQDEr8d8RcgdWfENywURju23XUEbd TrDMkOylNCTZExhGlwEFuoVBBAKn1bT0SqUWFOZg8uvoUofntW5HCIKl96JPbnKjOiqsOZdJnNbZ Vk3A1jxHZEd9Vk07nELKWGaF0w= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICbjCCAfqgAwIBAgIDAPAIMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgYwxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnp5jkuabl pIQxDzANBgNVBAMMBuS/nuWptzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwOTB6MBQGByqG SM49AgEGCSqBHIFFAYdoCANiAAR7gb4bsSR3HSwoLLMP+ee6pjWp9w6xdOtjtvZxBg0O+kGlP0vu GiCCjWAEHxshsCgBCD07BkhJEvsUhOiP+UH7d9Y+cDDYDocb5DomdRoIcKDB2cirZhbXtYIa2XGH 4LKjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQCMeAl6+zGFXFlan2KROaY/RLVEjXHA H8mt1hZDWlsSniX0DuLlemv6WxCX9LIAJjeb8siu4kz9u8CkkbPv8d37O+UgegpdYEc0xXTztPZe bl5YaqKRnCAhKtQEGmhlE5g= objectClass: wstCertificateUser serialNumber: F008 EncryptserialNumber: EFFE cn:: 5L+e5am3 dn:: Y2495byg5oGS54aZLG91PeW6lOaApeWKnixvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWF rOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICcTCCAf2gAwIBAgIDAO//MAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnlupTmg KXlip4xEjAQBgNVBAMMCeW8oOaBkueGmTEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNTB6M BQGByqGSM49AgEGCSqBHIFFAYdoCANiAASk0YZd+hozUD67UfqGdyDp2ypbquGCgqPkCnkCa8Lpv +qWRIYRyRfLLAubw2iBFDEtaOKX37haCIicMDH+cJwNgWU0x8xri5vMHveSJHSlwVFsCAjiYxpIg 7dt58xHtySjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQCEjzbTkWR6vZUjfe732XGyE yDfnjBpejsx8kHn/kgqnwAguCxxEPiNROByOEzTeC0OL6Jw9fhPDDj/ubw6z68agRVogjToeQepR CNIyfS61l4LMcJLZUBuP2WgaJgHt7E= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPALMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnlupTmgKXl ip4xEjAQBgNVBAMMCeW8oOaBkueGmTEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNTB6MBQG ByqGSM49AgEGCSqBHIFFAYdoCANiAAQsI+c/is/BdtC9qylJc6TnroZWhwV/FYmYHCj29UoSbSrJ KErgaMojLEjReERjax7kq+b3OYTQwbB0QDxfFkTgHH6qRvb743UUiO3jlBqBfigcZT10oyyORs0U zEL70AmjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQB9JRENKJVVtXknenoFtA8TTq2h BU9nKEc1TcBqMzFlv92tilGbCfr8vO5wO8fIcFExvidZORJFqjrZebBGQZHRlsEBMBzKpj3pp8gI /uUQBEJ2c1LJuGMotAKHX7ecbz4= objectClass: wstCertificateUser serialNumber: F00B EncryptserialNumber: EFFF cn:: 5byg5oGS54aZ dn:: b3U95paw6Ze75L+h5oGv5aSELG895rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FLCBj PWNu ou:: 5paw6Ze75L+h5oGv5aSE objectClass: organizationalUnit dn:: Y2496YKT56eL6IuxLG91PeaWsOmXu+S/oeaBr+WkhCxvPea1t+WNl+ecgeS6uuawkeaUv+W6 nOWKnuWFrOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICdzCCAgOgAwIBAgIDAPAAMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZUxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRgwFgYDVQQLDA/mlrDpl 7vkv6Hmga/lpIQxEjAQBgNVBAMMCemCk+eni+iLsTEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxM DAwMTB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASJ3RcGfo8cVUDTfawSKXngNpSoJH36bVjDb EU+QvW4L4pp3SQr+IKXOlGvR1R8IMXhhl3Kidbijkk4xphBGHJlgWVrCB2YsyrKFYTCjjcRXlzsp HM3kqtDpg0Ce2OSwfSjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQC94CmAJ301xBDQw ObclFDJ4dQI3oVxxSNrB7DtI7s2ElthNDEV1MAekOilrcEgbamawm4H2cVw3eKk+q+6kolKoo3Kh qVcFtF1uD8nUanvvfO8wrBhwgzQEy3bBQsfKKg= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICdzCCAgOgAwIBAgIDAPAOMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgZUxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRgwFgYDVQQLDA/mlrDpl7vk v6Hmga/lpIQxEjAQBgNVBAMMCemCk+eni+iLsTEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAw MTB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAT/c/uLk1Qk7AqTCNmpl3mbR6bZG/f73gq6oZLU rize0LClvwNBvEQ8fQNiqklwfZ5noXpG6p4a3vdYb/pNVtMqS+p2rWhaU/4hTHBpMurv9ha0zMPs 7oftu2T3sawXtH2jDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQBVTFutTDZ6cPeKjXAs z7DNQKJgv3trvAHLnHHag9mVG+HG9ypIniuMqGRqkk0jKPDjpa62fWUfFKI09zkvYAsP2Oq4G4Sc OiOQrKr0w4YT4Dw7EFtHh53Y21B0/3CDbHM= objectClass: wstCertificateUser serialNumber: F00E EncryptserialNumber: F000 cn:: 6YKT56eL6Iux dn:: Y2495byg5YWI5piMLG91PeaWsOmXu+S/oeaBr+WkhCxvPea1t+WNl+ecgeS6uuawkeaUv+W6 nOWKnuWFrOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICdzCCAgOgAwIBAgIDAPABMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZUxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRgwFgYDVQQLDA/mlrDpl 7vkv6Hmga/lpIQxEjAQBgNVBAMMCeW8oOWFiOaYjDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxM DAxMTB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAQsUEpbw4WCp1Z/MZEwmXBEpnKHBFoMxR10p g75oJ/bcUdLcf0j0RcZBKRFQZdBkmyfv1Py6xqB+uPmVXD1dkcEQ418wzazWm02fPVQupQtu013f mdOqlm569X8fdKA2yCjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQBJF1dtYTBtQfTOs pjSjj/pGt5do/rI/I9YU88XuFpr5NazWXmfHsLLAE3hqANY4xeQNfrwrPRNDD7rJCRq0ewBI5a/E QZEpGhR54dTf8q2h1Rm5ymIG5pSQIgtexzCIu4= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICdzCCAgOgAwIBAgIDAPANMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgZUxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRgwFgYDVQQLDA/mlrDpl7vk v6Hmga/lpIQxEjAQBgNVBAMMCeW8oOWFiOaYjDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAx MTB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASE54Ac3/GQ5SDO1ZaGyZ+7iADWWm28knQDytjM 0gSkb3URScaRxUpp952SmYbdEKjnYoLx8Mq0dyPoRDa+m9CWy9Ppn8KPpiTU4vxy0VnyXSDt4pmP mAG02ppMeDo9KlmjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQAX3XlXjdXZFgpxkQQE DopiYfECJv5PDVL9ILF5+wljcahb9ES/I1ubKqv2SW9qLiUqeurpCzhw2Icon2Ah8FcAYSCDhCQ/ /Gmc/MjRrBT8rvXPYGdLb5zWRMTRccrV/fU= objectClass: wstCertificateUser serialNumber: F00D EncryptserialNumber: F001 cn:: 5byg5YWI5piM dn:: Y2495LqO6LSk5oiQLG91Peedo+afpeWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWF rOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPACMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnnaPmn 6XlrqQxEjAQBgNVBAMMCeS6jui0pOaIkDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNjB6M BQGByqGSM49AgEGCSqBHIFFAYdoCANiAAT2LsSPTVOm4bWarrKFyBQDF8jKzP9hc1atfiKgcy0JL Q8eDhNIkN7MFZV2Qq1D0B5nuYQ4bCCdO0vgGeGhzThi24Z5iMU6G3SixZInNFsno71iRBUCkufZb tQLM+QU0SGjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQB6qkE3SC65UnG7KbmQ8Dtt4 njk4gTyp9PY6UfFg4pGb1uLFffMKS5jHz9DvKgk+yRBTef4UjP0qRA3hZIReXBhPRCBhbLh2zEnV 3Uctz9ZtVy/xxppF24MNirjPBXQnHs= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPAHMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnnaPmn6Xl rqQxEjAQBgNVBAMMCeS6jui0pOaIkDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNjB6MBQG ByqGSM49AgEGCSqBHIFFAYdoCANiAAQ72jqVYk22FoVWoX/Pk7Zg7bgdnvGzA+kyBK0dGtrxSZ1Y OnlyP75IoIJxqOerXy9KwgZRWtkDuBcS2I62rTU2c//7D2Zfwj1kEcDRwXy0SGMUCK6bZIigRFUU DY4WHeijDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQBHNA3CCF1cpw98PGdJZJEwzxlL /LZpKYFqXHjKyXCm0meKVQLc3DHk26QGrMI0YOYnxBQppeYmHjU5upQQb2FZdxz/bEj0PRWJmiJH EBue5hV+m6LuI7eZ++6KC33Fu8w= objectClass: wstCertificateUser serialNumber: F007 EncryptserialNumber: F002 cn:: 5LqO6LSk5oiQ dn:: Y2496YOR5Zu95piOLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuaw keaUv+W6nOWKnuWFrOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICfTCCAgmgAwIBAgIDAPADMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxEjAQBgNVBAMMCemDkeWbveaYjjEcMBoGCgmSJomT8ixkAQEMDDIyM TIxMDAxMDAwODB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAS3Eg3r2xyMskJap1A2kYJcfnKUP TwZOhKaX5hDga6OwxG7nsPsMqKJxHXLlTKde/mRb7IOt8KaaNHI3nfyuyUxqunOAKCKxxTlvkKgW XVOJDLVZOIpg2qyQMMiGq8OkDejDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQBKZbbUI 1SFUpGaYB335UT4hyHL6nJmjDl5NAeaQwQLEBRAfNZBTIseySF3Kuiff5nCYYkWjEFVCTZA9g4qy IyH1tGXzsPs0a++hfRBHXFzVXxArfOXWq9NZZ0/8CjupPA= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICfTCCAgmgAwIBAgIDAPAQMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlrZDm lL/liqHlip7lhazlrqQxEjAQBgNVBAMMCemDkeWbveaYjjEcMBoGCgmSJomT8ixkAQEMDDIyMTIx MDAxMDAwODB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASJZ8VG7wTFTcp3iN/giqpAafmzoagT svWHilseMZaQrticqx1YfojFvmFxOftOHB+6hJrpOWT1Fa8aj8x5niFkuK0o3/R7STu0y9hzoAWd RVx5TQOjWJQUt++31Ks64VSjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQAPGxgxepGg zKy0hYlLNa9H83czGFrd3XQ7JvgYubIRPSyO9XY1AwQmPfeZnNzQgTQ8kqEXRbzl/GPqa4nJWMY8 MU621vL5dE+U/ummILC6NIFOZWSL0EopaG7d2fasKLw= objectClass: wstCertificateUser serialNumber: F010 EncryptserialNumber: F003 cn:: 6YOR5Zu95piO dn:: Y2495YiY6ZuELG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaU v+W6nOWKnuWFrOWOhSwgYz1jbg== notAfter: 20200614115959 EncryptCertificate;binary:: MIICejCCAgagAwIBAgIDAPAFMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZgxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxDzANBgNVBAMMBuWImOmbhDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxM DAxMDAxMjB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASZpPPLO/EbPfMGhY34+6yVVNZwaq0gz z+gNL6wwj58Swb5avhrQVNOJ199OO5NGu1ESShc/N0QKan/3lM7jJOr1QuA9JlrbPkwUUs/Pk+2e dMnd254IYkJkUiUXVN0O66jDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQCryhp3sqTBZ 8kbXsUrtJilrqs5w5jQFcuZDjke802Q9LldGF9TA+fF1/v8A+SKmNFVdKI9HeO6i4qzRx7JQAE5M 6qVnmcOkr3ujnCioshPhKdiWo/lNovDZVZME+BFbg4= EncryptnotAfter: 20200614115959 userCertificate;binary:: MIICejCCAgagAwIBAgIDAPAJMAsGCSqBHIFFAYdoCzCBpDE2MDQG A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2 MDAwMFoXDTIwMDYxNDE1NTk1OVowgZgxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlrZDm lL/liqHlip7lhazlrqQxDzANBgNVBAMMBuWImOmbhDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAx MDAxMjB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAATWQJCy2ENxXaqv9OpsoyV2IfpRm6EVTQ9i yqfsMTkHBjPC8NQmlOgYU1mudci1wXahVQOKC65fIaAqbwzZPu+5Q9EzazkkCRejsMbVkafp/L2D vvByoQfLlpTZPXnH5oCjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQCXOsoFPbGqf2sR GEEh1FySgTUBbwnr2E+T0d1atTqInX/puRTfuuF+SGdSHzoqzKCFcjfoZRXE1IdmUcpKYLHWZnT3 xw6W7yZKePWg8RME0itmvAVC3jaNWYZEqbf0Aao= objectClass: wstCertificateUser serialNumber: F009 EncryptserialNumber: F005 cn:: 5YiY6ZuE dn:: Y2495rW35Y2X55yB5Lq65rCR5pS/5bqcLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1 t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1jbg== EncryptCertificate;binary:: MIICfzCCAgugAwIBAgIDAPARMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowgZ0xHjAcBgNVBAMMFea1t+WNl+ecgeS6uuawkeaUv+W6n DEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MRIwEAYDVQQIDAnmtbfljZfnnIExJzAlB gNVBAoMHua1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhTEeMBwGA1UECwwV55S15a2Q5pS/5 Yqh5Yqe5YWs5a6kMHowFAYHKoZIzj0CAQYJKoEcgUUBh2gIA2IABDjDxa3JeTB+4Q846SKfQEj7v FMBYXOi6gOyaOdPtXuDWjzPt714OukAeUceWp4fSBxmVGHMVFRj36hdcetkrZFdtKZktY7tm4yVu JOGiScjMq8wb0E1y2L5QbKHtj7OnqMPMA0wCwYDVR0PBAQDAgM4MAsGCSqBHIFFAYdoCwNhALEih LJkSVjCu6suTDg3z7m7tAZAUcuphZbtQhz1WBUBrOTWvvofjEdZQJ2C64KzoqXC8Ikx6FlVjStsn 28ZnLIGo2zvh3ZGJujkKtOaI/pYIryloazRb39Dk/uDcorjAg== EncryptnotAfter: 20200615115959 objectClass: wstCertificateUser EncryptserialNumber: F011 cn:: 5rW35Y2X55yB5Lq65rCR5pS/5bqc dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5Y+R5biD6aqM6K+B 57O757ufLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWK nuWFrOWOhSwgYz1jbg== EncryptCertificate;binary:: MIICjzCCAhugAwIBAgIDAPASMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowga0xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxQjBABgNVBAMMOeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+eUt eWtkOWNsOeroOWPkeW4g+mqjOivgeezu+e7nzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASxl dgx1eB/bGYJMJxcf/fFSfklt1DoLePXB5SNL9iCDkXyOwBfNuZQ/+MJKYm20MZVRtCfLm15FXSaE cubJgxxr9abn0a0mS2lqnKMPPMeIVmRItVB9ebnyS5M7By07l2jDzANMAsGA1UdDwQEAwID+DALB gkqgRyBRQGHaAsDYQCD+93k9XNMsNkzNLl3xgyVtlSmWtdPUclYWiGbPkT7J8V4pi5lMPDzVC2q6 mzAMpJAjwgqlmaND0LnOM1alhDpF4kJr8u2AwpXz5bK7Q2obichggbS6tKwErwGJIXq2jE= EncryptnotAfter: 20200615115959 objectClass: wstCertificateUser EncryptserialNumber: F012 cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5Y+R5biD6aqM6K+B57O7 57uf dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5Zyo57q/5pyN5Yqh 57O757ufLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWK nuWFrOWOhSwgYz1jbg== EncryptCertificate;binary:: MIICjzCCAhugAwIBAgIDAPATMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowga0xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxQjBABgNVBAMMOeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+eUt eWtkOWNsOeroOWcqOe6v+acjeWKoeezu+e7nzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAT3Y 3r7euWmkFJeo6UxvcwWXokankXJhPdwOQAJo0G01Ms8/ku57iF/1v9qnaGUpW1VmxB9M60Hrt6fq +5Xq9fP79aXN0K1ffsm0GurgajT/uTmvODYfDutYaULTiR5bQijDzANMAsGA1UdDwQEAwID+DALB gkqgRyBRQGHaAsDYQBL+Ifd3r8RUPOti/A3+lv2RGhSsn41XzWlsxzYo4JdPfO982MhNjlVQvuBw Wt7nqE6uISJ/aMacuD8W+QPS6ZQM93uDwddh3oGsRJRsM6H3hO2rivgz0I83MtdqMrx2YQ= EncryptnotAfter: 20200615115959 objectClass: wstCertificateUser EncryptserialNumber: F013 cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5Zyo57q/5pyN5Yqh57O7 57uf dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug562+5Y+R566h55CG 6K6+5aSHLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWK nuWFrOWOhSwgYz1jbg== EncryptCertificate;binary:: MIICjzCCAhugAwIBAgIDAPAUMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowga0xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxQjBABgNVBAMMOeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+eUt eWtkOWNsOeroOetvuWPkeeuoeeQhuiuvuWkhzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASGt EDJAiKCQkDeLCCf5ERgSGXrp0HB60pzyvH0aT1E5JuiVYYpBpypHGRPdgOPAv2t7MSZZCktTCuUU GRK0XWwOZtFObMDIJTTFq6y/KOkrYJHvtgocUJYyNmv/HaBftWjDzANMAsGA1UdDwQEAwID+DALB gkqgRyBRQGHaAsDYQDeOAclwZoG9ulDpmi0gZaq8bnExzWbkcFo01+eoseqrCyyk0QUu/V3nJbaP o/1RqkR5dMAZJneCxFZSYNfmGFljS/u1t/C6ECcBW1IFaO7V+MuD55E6CKJQzLXlEQnmdE= EncryptnotAfter: 20200615115959 objectClass: wstCertificateUser EncryptserialNumber: F014 cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug562+5Y+R566h55CG6K6+ 5aSH dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5rOo5YaM566h55CG 6K6+5aSHLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWK nuWFrOWOhSwgYz1jbg== EncryptCertificate;binary:: MIICjzCCAhugAwIBAgIDAPAVMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowga0xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxQjBABgNVBAMMOeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+eUt eWtkOWNsOeroOazqOWGjOeuoeeQhuiuvuWkhzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAATfe 860NwLtJ6+WlxgzJKajw/4yaBdgsnZHH5UOz5KlHKal85vNYWeQ01/PpMRZNUaHHdZXwBeX1GoE0 43H7Ydd8ljZwXNi7HeDSk5OZ0AMttAawy81TQ+2Ow34UHNRpc+jDzANMAsGA1UdDwQEAwID+DALB gkqgRyBRQGHaAsDYQBASlFH/K9QJt1QPS2y8ShLC8Htu1TB3dgO4TzTx8jtGh/gCGHenxcJDfjCz yZf1DmZouz26WhqZ8d/ouk6h/XPMBKD1ijXSls4bFMgmRtIOUPWD9w1lNkHAbhkIEvkR6o= EncryptnotAfter: 20200615115959 objectClass: wstCertificateUser EncryptserialNumber: F015 cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5rOo5YaM566h55CG6K6+ 5aSH dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf5Y+v5L+h5pe26Ze05pyN5YqhLG91PeeU teWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1j bg== EncryptCertificate;binary:: MIICgzCCAg+gAwIBAgIDAPAWMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowgaExHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxNjA0BgNVBAMMLeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+WPr +S/oeaXtumXtOacjeWKoTB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAARjbFCPyopT/n1J510rY fqoWOSZ31RZ6tsi2W9ERas86OyZnOYffHN/nNJIhuP62hG+8x1GQvxRQJTtMQmG8yTf3guqCAKEV JvJ8YqvFjrryPr5comQFq+aCPH5DalFsbGjDzANMAsGA1UdDwQEAwID+DALBgkqgRyBRQGHaAsDY QDGnifEI4VCDIuCzkH4T90m/nBKsP40ERsfbgT6f959SPIOhbvT7lQg9iTru21bXHHDwP2ZLOhdr 1jRNmguSPRHfYk9R+/CtSijvM5h/VbgbxfB8ifT27yXJYP3G+89oKo= EncryptnotAfter: 20200615115959 objectClass: wstCertificateUser EncryptserialNumber: F016 cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf5Y+v5L+h5pe26Ze05pyN5Yqh dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf5o6I5p2D566h55CG6K6+5aSHLG91PeeU teWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1j bg== EncryptCertificate;binary:: MIICgzCCAg+gAwIBAgIDAPAXMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowgaExHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxNjA0BgNVBAMMLeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+aOi Oadg+euoeeQhuiuvuWkhzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAR9DCT3EnxjPUiNyeeLJ eARvaVGbLnqRykTs6g63Pz1sJ8KytUpd8u3TRmE8I6mmg62tj0CrWdRTDWlFCEjDS3nZMmRTr/OF +2TfdQpankZywvalhASLgWZDSw3H2y6bJOjDzANMAsGA1UdDwQEAwID+DALBgkqgRyBRQGHaAsDY QD3AEmWE6YuzItIvRxtqBRbMvGaI4FldYD4eS0qCa9Qpma0izzYOstdam6pBAvLMS93ArmDTlXSs Zvx/OEV3/ryTyZHa5moMRJRroQdEmHM1yz2aX4pTq7RFe6PLKSajwE= EncryptnotAfter: 20200615115959 objectClass: wstCertificateUser EncryptserialNumber: F017 cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf5o6I5p2D566h55CG6K6+5aSH dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LSj5Lu76K6k5a6a6K6+5aSHLG91PeeU teWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1j bg== EncryptCertificate;binary:: MIICgzCCAg+gAwIBAgIDAPAYMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowgaExHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxNjA0BgNVBAMMLeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+i0o +S7u+iupOWumuiuvuWkhzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAATTORploAGr0V5s+yHJH sP8K8tAml8SGyGhajpg6pscwhikkQCDy9uFIMyQJUiEJ8AXod86ZH/KI7XxwK2gfw7+XrjC+YZ+D TE/Ty7babBnOctC1Y/73dqhSoRjMw5q9J2jDzANMAsGA1UdDwQEAwID+DALBgkqgRyBRQGHaAsDY QA6MJjxhAMDKyBNqLhnG2vhsCPDjXcjeQkzP9H54UJKlAkqldGVlxEhCdeKoqOppg8F9CgfYdi+4 FD4ZtKZMvd6SibC+n4Kbd/PbjaIH5gG/lt35AKLgkb79n0x+HDtMu4= EncryptnotAfter: 20200615115959 objectClass: wstCertificateUser EncryptserialNumber: F018 cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LSj5Lu76K6k5a6a6K6+5aSH dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ566h55CG6K6+5aSHLG91PeeU teWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1j bg== EncryptCertificate;binary:: MIICgzCCAg+gAwIBAgIDAPAZMAsGCSqBHIFFAYdoCzCBpDE2M DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowgaExHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr ZDmlL/liqHlip7lhazlrqQxNjA0BgNVBAMMLeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+i1h Oa6kOeuoeeQhuiuvuWkhzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAQoMEkVxLEqNYvIaiQ/3 eICcDMJ9/3TIdpkRP6puuwQ43TQdr/UUqPzrd0lWNtdWe35H0+ENwUNlYisBJraco/GHpw81LNRt zfo4okEgukL9X0tXnxyusd6z6EZJcmCvH+jDzANMAsGA1UdDwQEAwID+DALBgkqgRyBRQGHaAsDY QCuJ+HYlSJXSn6G5g+xF7NCjNixSO72vghDKs+O32dz3lL7jKdZ8foMJ55S7Z2HTVNLBQbwOJDv/ /J03XeXvcuc+Bos7PTYtQHJ5tYn4rSDDrUbY+LQA1oZxoE+BQ3s7yg= EncryptnotAfter: 20200615115959 objectClass: wstCertificateUser EncryptserialNumber: F019 cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ566h55CG6K6+5aSH dn:: bz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9Y24= objectClass: top objectClass: organization o:: 5Zub5bed55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6F dn:: bz3nlLXlrZDmlL/liqHlip7lhazlrqQsbz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazl joUsIGM9Y24= objectClass: top objectClass: organization o:: 55S15a2Q5pS/5Yqh5Yqe5YWs5a6k dn:: bz3kv53lr4blip7lhazlrqQsbz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9 Y24= objectClass: top objectClass: organization o:: 5L+d5a+G5Yqe5YWs5a6k dn:: bz3lrqPkvKDpg6gsbz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9Y24= objectClass: top objectClass: organization o:: 5a6j5Lyg6YOo dn:: bz3mlrDpl7vlip7kuovlpIQsbz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9 Y24= objectClass: top objectClass: organization o:: 5paw6Ze75Yqe5LqL5aSE dn:: bz3nnIHlp5Tnu4Tnu4fpg6gsbz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9 Y24= objectClass: top objectClass: organization o:: 55yB5aeU57uE57uH6YOo dn:: bz3muZbljJfnnIHkurrmsJHmlL/liqHlip7lhazljoUsIGM9Y24= objectClass: top objectClass: organization o:: 5rmW5YyX55yB5Lq65rCR5pS/5Yqh5Yqe5YWs5Y6F dn:: bz3nnIHlp5TlrqPkvKDpg6gsbz3muZbljJfnnIHkurrmsJHmlL/liqHlip7lhazljoUsIGM9 Y24= objectClass: top objectClass: organization o:: 55yB5aeU5a6j5Lyg6YOo dn:: bz3nnIHlp5Tkv53lr4bnnaPmn6Xnu4Qsbz3muZbljJfnnIHkurrmsJHmlL/liqHlip7lhazl joUsIGM9Y24= objectClass: top objectClass: organization o:: 55yB5aeU5L+d5a+G552j5p+l57uE dn:: bz3nnIHlp5TlpJbkuqTpg6gsbz3muZbljJfnnIHkurrmsJHmlL/liqHlip7lhazljoUsIGM9 Y24= objectClass: top objectClass: organization o:: 55yB5aeU5aSW5Lqk6YOo dn:: bz3nlLXlrZDmlL/liqHlip7lhazlrqQsbz3muZbljJfnnIHkurrmsJHmlL/liqHlip7lhazl joUsIGM9Y24= objectClass: top objectClass: organization o:: 55S15a2Q5pS/5Yqh5Yqe5YWs5a6k
最后运行LdifImport.java中的main方法,控制台输出结果为以下就说明成功了
LDIF change file
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
changetype: attribute type undefined
Adding entry...
Adding entry...
Directory information has been modified.
Adding entry...
changetype: attribute type undefined
Adding entry...
Adding entry...
Directory information has been modified.
Adding entry...
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
Adding entry...
Directory information has been modified.
以上是关于java导入ldif文件的主要内容,如果未能解决你的问题,请参考以下文章