JAVA 文件转换为Base64字符串(互转)

序言:

最近在做项目时,遇到的文件,将图片文件存储在数据库,通过Base64做中间转换。

文件上传到---->数据库:先将文件上传的文件通过Base64转换为字符串,然后将对应Base64字符串存储到数据库。

数据库获取---->到页面:从数据库获取对应Base64字符串,通过Base64转换为图片文件,输出到页面。

实现:

文件和Base64之间的相互转化工具类如下:

package weaver.mobile.core.test;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

//需要的jar包名commons-codec-1.6.jar
import org.apache.commons.codec.binary.Base64;
/**
 * 文件和Base64之间的相互转化工具类
 * @author rmk
 */
public class FileUtil {

	/**
	 * 
	 * @param path  文件全路径(加文件名)
	 * @return String
	 * @description 将文件转base64字符串
	 * @date 2019年11月24日
	 * @author rmk
	 */
	public static String fileToBase64(String path) {
		String base64 = null;
		InputStream in = null;
		try {
			File file = new File(path);
			in = new FileInputStream(file);
			byte[] bytes = new byte[(int) file.length()];
			in.read(bytes);
			base64 = new String(Base64.encodeBase64(bytes),"UTF-8");
			System.out.println("将文件["+path+"]转base64字符串:"+base64);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return base64;
	}
 
	/**
	 * @param outFilePath  输出文件路径,  base64   base64文件编码字符串,  outFileName  输出文件名 
	 * @return String
	 * @description BASE64解码成File文件
	 * @date 2019年11月24日
	 * @author rmk
	 */
	public static void base64ToFile(String outFilePath,String base64, String outFileName) {
		System.out.println("BASE64:["+base64+"]解码成File文件["+outFilePath+"\\"+outFileName+"]");
	        File file = null;
	        //创建文件目录
	        String filePath=outFilePath;
	        File  dir=new File(filePath);
	        if (!dir.exists() && !dir.isDirectory()) {
	            dir.mkdirs();
	        }
	        BufferedOutputStream bos = null;
	        java.io.FileOutputStream fos = null;
	        try {
	        	byte[] bytes = Base64.decodeBase64(base64);
	            file=new File(filePath+"/"+outFileName);
	            fos = new java.io.FileOutputStream(file);
	            bos = new BufferedOutputStream(fos);
	            bos.write(bytes);
	        } catch (Exception e) {
	            e.printStackTrace();
	        } finally {
	            if (bos != null) {
	                try {
	                    bos.close();
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	            if (fos != null) {
	                try {
	                    fos.close();
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	        }
	}

	/**
	 * 单元测试
	 */
	public static void main(String[] args) {
		
		//定义文件路径
		String filePath = "E:\\FileTest\\logs\\log4jtest.log";
		//将文件转base64字符串
		String base64 = fileToBase64(filePath);
		
		System.out.println();
		//定义输出文件的路径outFilePath和输出文件名outoutFileName
		String outFilePath = "E:\\FileTest\\logs";
		String outFileName = "test.log";
		//将BASE64解码成File文件
		base64ToFile(outFilePath, base64, outFileName);
		
	}
}

结果如下:

将文件[E:\FileTest\logs\log4jtest.log]转base64字符串:MjAxOS0wNC0yMyAxNDoxOTowMSBbRVJST1JdIC0gb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyIC1Db250ZXh0TG9hZGVyLmphdmEoMzUzKSAtQ29udGV4dCBpbml0aWFsaXphdGlvbiBmYWlsZWQNCiAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuQmVhbkNyZWF0aW9uRXhjZXB0aW9uOiBFcnJvciBjcmVhdGluZyBiZWFuIHdpdGggbmFtZSAnc3FsU2Vzc2lvbkZhY3RvcnknIGRlZmluZWQgaW4gVVJMIFtmaWxlOi9EOi9Qcm9ncmFtJTIwRmlsZXMlMjAoeDg2KS9Ub21jYXQ3L3dlYmFwcHMvSU1PT0MvV0VCLUlORi9jbGFzc2VzL3NwcmluZy9hcHBsaWNhdGlvbkNvbnRleHQueG1sXTogSW52b2NhdGlvbiBvZiBpbml0IG1ldGhvZCBmYWlsZWQ7IG5lc3RlZCBleGNlcHRpb24gaXMgamF2YS5sYW5nLk5vQ2xhc3NEZWZGb3VuZEVycm9yOiBTZXJpYWxpemFibGUNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmluaXRpYWxpemVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNTc4KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuZG9DcmVhdGVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YTo1NDUpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5jcmVhdGVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YTo0ODIpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeSQxLmdldE9iamVjdChBYnN0cmFjdEJlYW5GYWN0b3J5LmphdmE6MzA2KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkRlZmF1bHRTaW5nbGV0b25CZWFuUmVnaXN0cnkuZ2V0U2luZ2xldG9uKERlZmF1bHRTaW5nbGV0b25CZWFuUmVnaXN0cnkuamF2YToyMzApDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeS5kb0dldEJlYW4oQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjMwMikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEJlYW5GYWN0b3J5LmdldEJlYW4oQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjE5NykNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5EZWZhdWx0TGlzdGFibGVCZWFuRmFjdG9yeS5wcmVJbnN0YW50aWF0ZVNpbmdsZXRvbnMoRGVmYXVsdExpc3RhYmxlQmVhbkZhY3RvcnkuamF2YTo3NTMpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuZmluaXNoQmVhbkZhY3RvcnlJbml0aWFsaXphdGlvbihBYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhOjgzOSkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5BYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5yZWZyZXNoKEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmphdmE6NTM4KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlci5jb25maWd1cmVBbmRSZWZyZXNoV2ViQXBwbGljYXRpb25Db250ZXh0KENvbnRleHRMb2FkZXIuamF2YTo0NDYpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyLmluaXRXZWJBcHBsaWNhdGlvbkNvbnRleHQoQ29udGV4dExvYWRlci5qYXZhOjMyOCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXJMaXN0ZW5lci5jb250ZXh0SW5pdGlhbGl6ZWQoQ29udGV4dExvYWRlckxpc3RlbmVyLmphdmE6MTA3KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZENvbnRleHQubGlzdGVuZXJTdGFydChTdGFuZGFyZENvbnRleHQuamF2YTo1MTU3KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZENvbnRleHQuc3RhcnRJbnRlcm5hbChTdGFuZGFyZENvbnRleHQuamF2YTo1NjgwKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEudXRpbC5MaWZlY3ljbGVCYXNlLnN0YXJ0KExpZmVjeWNsZUJhc2UuamF2YToxNDUpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLkNvbnRhaW5lckJhc2UuYWRkQ2hpbGRJbnRlcm5hbChDb250YWluZXJCYXNlLmphdmE6MTAxOCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuQ29udGFpbmVyQmFzZS5hZGRDaGlsZChDb250YWluZXJCYXNlLmphdmE6OTk0KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZEhvc3QuYWRkQ2hpbGQoU3RhbmRhcmRIb3N0LmphdmE6NjUyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuc3RhcnR1cC5Ib3N0Q29uZmlnLmRlcGxveURpcmVjdG9yeShIb3N0Q29uZmlnLmphdmE6MTI5NikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnN0YXJ0dXAuSG9zdENvbmZpZyREZXBsb3lEaXJlY3RvcnkucnVuKEhvc3RDb25maWcuamF2YToyMDM5KQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo0NzEpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2MikNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDUpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjE1KQ0KCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0NSkNCkNhdXNlZCBieTogamF2YS5sYW5nLk5vQ2xhc3NEZWZGb3VuZEVycm9yOiBTZXJpYWxpemFibGUNCglhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIuZGVmaW5lQ2xhc3MxKE5hdGl2ZSBNZXRob2QpDQoJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmRlZmluZUNsYXNzKENsYXNzTG9hZGVyLmphdmE6ODAwKQ0KCWF0IGphdmEuc2VjdXJpdHkuU2VjdXJlQ2xhc3NMb2FkZXIuZGVmaW5lQ2xhc3MoU2VjdXJlQ2xhc3NMb2FkZXIuamF2YToxNDIpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmZpbmRDbGFzc0ludGVybmFsKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjMyMjIpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmZpbmRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNDA5KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTg5NykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE3NzEpDQoJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpDQoJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNzQpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uQ2xhc3NMb2FkZXJXcmFwcGVyLmNsYXNzRm9yTmFtZShDbGFzc0xvYWRlcldyYXBwZXIuamF2YToxNzgpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uQ2xhc3NMb2FkZXJXcmFwcGVyLmNsYXNzRm9yTmFtZShDbGFzc0xvYWRlcldyYXBwZXIuamF2YTo4OSkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5pby5SZXNvdXJjZXMuY2xhc3NGb3JOYW1lKFJlc291cmNlcy5qYXZhOjI1NikNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnR5cGVBbGlhc2VzRWxlbWVudChYTUxDb25maWdCdWlsZGVyLmphdmE6MTIzKQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmJ1aWxkZXIueG1sLlhNTENvbmZpZ0J1aWxkZXIucGFyc2VDb25maWd1cmF0aW9uKFhNTENvbmZpZ0J1aWxkZXIuamF2YTo5OSkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnBhcnNlKFhNTENvbmZpZ0J1aWxkZXIuamF2YTo5MikNCglhdCBvcmcubXliYXRpcy5zcHJpbmcuU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmJ1aWxkU3FsU2Vzc2lvbkZhY3RvcnkoU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmphdmE6NDI4KQ0KCWF0IG9yZy5teWJhdGlzLnNwcmluZy5TcWxTZXNzaW9uRmFjdG9yeUJlYW4uYWZ0ZXJQcm9wZXJ0aWVzU2V0KFNxbFNlc3Npb25GYWN0b3J5QmVhbi5qYXZhOjM0MCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5Lmludm9rZUluaXRNZXRob2RzKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNjM3KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuaW5pdGlhbGl6ZUJlYW4oQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjE1NzQpDQoJLi4uIDI1IG1vcmUNCkNhdXNlZCBieTogamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IFNlcmlhbGl6YWJsZQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTkyOCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE3NzEpDQoJLi4uIDQ0IG1vcmUNCjIwMTktMDQtMjMgMTQ6MjA6MzggW0VSUk9SXSAtIG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlciAtQ29udGV4dExvYWRlci5qYXZhKDM1MykgLUNvbnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbGVkDQogICAgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LkJlYW5DcmVhdGlvbkV4Y2VwdGlvbjogRXJyb3IgY3JlYXRpbmcgYmVhbiB3aXRoIG5hbWUgJ3NxbFNlc3Npb25GYWN0b3J5JyBkZWZpbmVkIGluIFVSTCBbZmlsZTovRDovUHJvZ3JhbSUyMEZpbGVzJTIwKHg4NikvVG9tY2F0Ny93ZWJhcHBzL0lNT09DL1dFQi1JTkYvY2xhc3Nlcy9zcHJpbmcvYXBwbGljYXRpb25Db250ZXh0LnhtbF06IEludm9jYXRpb24gb2YgaW5pdCBtZXRob2QgZmFpbGVkOyBuZXN0ZWQgZXhjZXB0aW9uIGlzIGphdmEubGFuZy5Ob0NsYXNzRGVmRm91bmRFcnJvcjogU2VyaWFsaXphYmxlDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5pbml0aWFsaXplQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6MTU3OCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmRvQ3JlYXRlQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6NTQ1KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuY3JlYXRlQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6NDgyKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QmVhbkZhY3RvcnkkMS5nZXRPYmplY3QoQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjMwNikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5EZWZhdWx0U2luZ2xldG9uQmVhblJlZ2lzdHJ5LmdldFNpbmdsZXRvbihEZWZhdWx0U2luZ2xldG9uQmVhblJlZ2lzdHJ5LmphdmE6MjMwKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QmVhbkZhY3RvcnkuZG9HZXRCZWFuKEFic3RyYWN0QmVhbkZhY3RvcnkuamF2YTozMDIpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeS5nZXRCZWFuKEFic3RyYWN0QmVhbkZhY3RvcnkuamF2YToxOTcpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuRGVmYXVsdExpc3RhYmxlQmVhbkZhY3RvcnkucHJlSW5zdGFudGlhdGVTaW5nbGV0b25zKERlZmF1bHRMaXN0YWJsZUJlYW5GYWN0b3J5LmphdmE6NzUzKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmZpbmlzaEJlYW5GYWN0b3J5SW5pdGlhbGl6YXRpb24oQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuamF2YTo4MzkpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQucmVmcmVzaChBYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhOjUzOCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXIuY29uZmlndXJlQW5kUmVmcmVzaFdlYkFwcGxpY2F0aW9uQ29udGV4dChDb250ZXh0TG9hZGVyLmphdmE6NDQ2KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlci5pbml0V2ViQXBwbGljYXRpb25Db250ZXh0KENvbnRleHRMb2FkZXIuamF2YTozMjgpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyTGlzdGVuZXIuY29udGV4dEluaXRpYWxpemVkKENvbnRleHRMb2FkZXJMaXN0ZW5lci5qYXZhOjEwNykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRDb250ZXh0Lmxpc3RlbmVyU3RhcnQoU3RhbmRhcmRDb250ZXh0LmphdmE6NTE1NykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRDb250ZXh0LnN0YXJ0SW50ZXJuYWwoU3RhbmRhcmRDb250ZXh0LmphdmE6NTY4MCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnV0aWwuTGlmZWN5Y2xlQmFzZS5zdGFydChMaWZlY3ljbGVCYXNlLmphdmE6MTQ1KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5Db250YWluZXJCYXNlLmFkZENoaWxkSW50ZXJuYWwoQ29udGFpbmVyQmFzZS5qYXZhOjEwMTgpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLkNvbnRhaW5lckJhc2UuYWRkQ2hpbGQoQ29udGFpbmVyQmFzZS5qYXZhOjk5NCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRIb3N0LmFkZENoaWxkKFN0YW5kYXJkSG9zdC5qYXZhOjY1MikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnN0YXJ0dXAuSG9zdENvbmZpZy5kZXBsb3lEaXJlY3RvcnkoSG9zdENvbmZpZy5qYXZhOjEyOTYpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5zdGFydHVwLkhvc3RDb25maWckRGVwbG95RGlyZWN0b3J5LnJ1bihIb3N0Q29uZmlnLmphdmE6MjAzOSkNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NDcxKQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjIpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ1KQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYxNSkNCglhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDUpDQpDYXVzZWQgYnk6IGphdmEubGFuZy5Ob0NsYXNzRGVmRm91bmRFcnJvcjogU2VyaWFsaXphYmxlDQoJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmRlZmluZUNsYXNzMShOYXRpdmUgTWV0aG9kKQ0KCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5kZWZpbmVDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjgwMCkNCglhdCBqYXZhLnNlY3VyaXR5LlNlY3VyZUNsYXNzTG9hZGVyLmRlZmluZUNsYXNzKFNlY3VyZUNsYXNzTG9hZGVyLmphdmE6MTQyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5maW5kQ2xhc3NJbnRlcm5hbChXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YTozMjIyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5maW5kQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTQwOSkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE4OTcpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNzcxKQ0KCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQ0KCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6Mjc0KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmlvLkNsYXNzTG9hZGVyV3JhcHBlci5jbGFzc0Zvck5hbWUoQ2xhc3NMb2FkZXJXcmFwcGVyLmphdmE6MTc4KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmlvLkNsYXNzTG9hZGVyV3JhcHBlci5jbGFzc0Zvck5hbWUoQ2xhc3NMb2FkZXJXcmFwcGVyLmphdmE6ODkpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uUmVzb3VyY2VzLmNsYXNzRm9yTmFtZShSZXNvdXJjZXMuamF2YToyNTYpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuYnVpbGRlci54bWwuWE1MQ29uZmlnQnVpbGRlci50eXBlQWxpYXNlc0VsZW1lbnQoWE1MQ29uZmlnQnVpbGRlci5qYXZhOjEyMykNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnBhcnNlQ29uZmlndXJhdGlvbihYTUxDb25maWdCdWlsZGVyLmphdmE6OTkpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuYnVpbGRlci54bWwuWE1MQ29uZmlnQnVpbGRlci5wYXJzZShYTUxDb25maWdCdWlsZGVyLmphdmE6OTIpDQoJYXQgb3JnLm15YmF0aXMuc3ByaW5nLlNxbFNlc3Npb25GYWN0b3J5QmVhbi5idWlsZFNxbFNlc3Npb25GYWN0b3J5KFNxbFNlc3Npb25GYWN0b3J5QmVhbi5qYXZhOjQyOCkNCglhdCBvcmcubXliYXRpcy5zcHJpbmcuU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmFmdGVyUHJvcGVydGllc1NldChTcWxTZXNzaW9uRmFjdG9yeUJlYW4uamF2YTozNDApDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5pbnZva2VJbml0TWV0aG9kcyhBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6MTYzNykNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmluaXRpYWxpemVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNTc0KQ0KCS4uLiAyNSBtb3JlDQpDYXVzZWQgYnk6IGphdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBTZXJpYWxpemFibGUNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE5MjgpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNzcxKQ0KCS4uLiA0NCBtb3JlDQoyMDE5LTA0LTIzIDE0OjIyOjQzIFtFUlJPUl0gLSBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXIgLUNvbnRleHRMb2FkZXIuamF2YSgzNTMpIC1Db250ZXh0IGluaXRpYWxpemF0aW9uIGZhaWxlZA0KICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5CZWFuQ3JlYXRpb25FeGNlcHRpb246IEVycm9yIGNyZWF0aW5nIGJlYW4gd2l0aCBuYW1lICdzcWxTZXNzaW9uRmFjdG9yeScgZGVmaW5lZCBpbiBVUkwgW2ZpbGU6L0Q6L1Byb2dyYW0lMjBGaWxlcyUyMCh4ODYpL1RvbWNhdDcvd2ViYXBwcy9JTU9PQy9XRUItSU5GL2NsYXNzZXMvc3ByaW5nL2FwcGxpY2F0aW9uQ29udGV4dC54bWxdOiBJbnZvY2F0aW9uIG9mIGluaXQgbWV0aG9kIGZhaWxlZDsgbmVzdGVkIGV4Y2VwdGlvbiBpcyBqYXZhLmxhbmcuTm9DbGFzc0RlZkZvdW5kRXJyb3I6IFNlcmlhbGl6YWJsZQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuaW5pdGlhbGl6ZUJlYW4oQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjE1NzgpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5kb0NyZWF0ZUJlYW4oQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjU0NSkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmNyZWF0ZUJlYW4oQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjQ4MikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEJlYW5GYWN0b3J5JDEuZ2V0T2JqZWN0KEFic3RyYWN0QmVhbkZhY3RvcnkuamF2YTozMDYpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuRGVmYXVsdFNpbmdsZXRvbkJlYW5SZWdpc3RyeS5nZXRTaW5nbGV0b24oRGVmYXVsdFNpbmdsZXRvbkJlYW5SZWdpc3RyeS5qYXZhOjIzMCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEJlYW5GYWN0b3J5LmRvR2V0QmVhbihBYnN0cmFjdEJlYW5GYWN0b3J5LmphdmE6MzAyKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QmVhbkZhY3RvcnkuZ2V0QmVhbihBYnN0cmFjdEJlYW5GYWN0b3J5LmphdmE6MTk3KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkRlZmF1bHRMaXN0YWJsZUJlYW5GYWN0b3J5LnByZUluc3RhbnRpYXRlU2luZ2xldG9ucyhEZWZhdWx0TGlzdGFibGVCZWFuRmFjdG9yeS5qYXZhOjc1MykNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5BYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5maW5pc2hCZWFuRmFjdG9yeUluaXRpYWxpemF0aW9uKEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmphdmE6ODM5KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LnJlZnJlc2goQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuamF2YTo1MzgpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyLmNvbmZpZ3VyZUFuZFJlZnJlc2hXZWJBcHBsaWNhdGlvbkNvbnRleHQoQ29udGV4dExvYWRlci5qYXZhOjQ0NikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXIuaW5pdFdlYkFwcGxpY2F0aW9uQ29udGV4dChDb250ZXh0TG9hZGVyLmphdmE6MzI4KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlckxpc3RlbmVyLmNvbnRleHRJbml0aWFsaXplZChDb250ZXh0TG9hZGVyTGlzdGVuZXIuamF2YToxMDcpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLlN0YW5kYXJkQ29udGV4dC5saXN0ZW5lclN0YXJ0KFN0YW5kYXJkQ29udGV4dC5qYXZhOjUxNTcpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLlN0YW5kYXJkQ29udGV4dC5zdGFydEludGVybmFsKFN0YW5kYXJkQ29udGV4dC5qYXZhOjU2ODApDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS51dGlsLkxpZmVjeWNsZUJhc2Uuc3RhcnQoTGlmZWN5Y2xlQmFzZS5qYXZhOjE0NSkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuQ29udGFpbmVyQmFzZS5hZGRDaGlsZEludGVybmFsKENvbnRhaW5lckJhc2UuamF2YToxMDE4KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5Db250YWluZXJCYXNlLmFkZENoaWxkKENvbnRhaW5lckJhc2UuamF2YTo5OTQpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLlN0YW5kYXJkSG9zdC5hZGRDaGlsZChTdGFuZGFyZEhvc3QuamF2YTo2NTIpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5zdGFydHVwLkhvc3RDb25maWcuZGVwbG95RGlyZWN0b3J5KEhvc3RDb25maWcuamF2YToxMjk2KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuc3RhcnR1cC5Ib3N0Q29uZmlnJERlcGxveURpcmVjdG9yeS5ydW4oSG9zdENvbmZpZy5qYXZhOjIwMzkpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjQ3MSkNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjYyKQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0NSkNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MTUpDQoJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ1KQ0KQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuTm9DbGFzc0RlZkZvdW5kRXJyb3I6IFNlcmlhbGl6YWJsZQ0KCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5kZWZpbmVDbGFzczEoTmF0aXZlIE1ldGhvZCkNCglhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIuZGVmaW5lQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTo4MDApDQoJYXQgamF2YS5zZWN1cml0eS5TZWN1cmVDbGFzc0xvYWRlci5kZWZpbmVDbGFzcyhTZWN1cmVDbGFzc0xvYWRlci5qYXZhOjE0MikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UuZmluZENsYXNzSW50ZXJuYWwoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MzIyMikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UuZmluZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE0MDkpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxODk3KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTc3MSkNCglhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkNCglhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI3NCkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5pby5DbGFzc0xvYWRlcldyYXBwZXIuY2xhc3NGb3JOYW1lKENsYXNzTG9hZGVyV3JhcHBlci5qYXZhOjE3OCkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5pby5DbGFzc0xvYWRlcldyYXBwZXIuY2xhc3NGb3JOYW1lKENsYXNzTG9hZGVyV3JhcHBlci5qYXZhOjg5KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmlvLlJlc291cmNlcy5jbGFzc0Zvck5hbWUoUmVzb3VyY2VzLmphdmE6MjU2KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmJ1aWxkZXIueG1sLlhNTENvbmZpZ0J1aWxkZXIudHlwZUFsaWFzZXNFbGVtZW50KFhNTENvbmZpZ0J1aWxkZXIuamF2YToxMjMpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuYnVpbGRlci54bWwuWE1MQ29uZmlnQnVpbGRlci5wYXJzZUNvbmZpZ3VyYXRpb24oWE1MQ29uZmlnQnVpbGRlci5qYXZhOjk5KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmJ1aWxkZXIueG1sLlhNTENvbmZpZ0J1aWxkZXIucGFyc2UoWE1MQ29uZmlnQnVpbGRlci5qYXZhOjkyKQ0KCWF0IG9yZy5teWJhdGlzLnNwcmluZy5TcWxTZXNzaW9uRmFjdG9yeUJlYW4uYnVpbGRTcWxTZXNzaW9uRmFjdG9yeShTcWxTZXNzaW9uRmFjdG9yeUJlYW4uamF2YTo0MjgpDQoJYXQgb3JnLm15YmF0aXMuc3ByaW5nLlNxbFNlc3Npb25GYWN0b3J5QmVhbi5hZnRlclByb3BlcnRpZXNTZXQoU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmphdmE6MzQwKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuaW52b2tlSW5pdE1ldGhvZHMoQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjE2MzcpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5pbml0aWFsaXplQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6MTU3NCkNCgkuLi4gMjUgbW9yZQ0KQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogU2VyaWFsaXphYmxlDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxOTI4KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTc3MSkNCgkuLi4gNDQgbW9yZQ0KMjAxOS0wNC0yMyAxNDoyNDozNyBbRVJST1JdIC0gb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyIC1Db250ZXh0TG9hZGVyLmphdmEoMzUzKSAtQ29udGV4dCBpbml0aWFsaXphdGlvbiBmYWlsZWQNCiAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuQmVhbkNyZWF0aW9uRXhjZXB0aW9uOiBFcnJvciBjcmVhdGluZyBiZWFuIHdpdGggbmFtZSAnc3FsU2Vzc2lvbkZhY3RvcnknIGRlZmluZWQgaW4gVVJMIFtmaWxlOi9EOi9Qcm9ncmFtJTIwRmlsZXMlMjAoeDg2KS9Ub21jYXQ3L3dlYmFwcHMvSU1PT0MvV0VCLUlORi9jbGFzc2VzL3NwcmluZy9hcHBsaWNhdGlvbkNvbnRleHQueG1sXTogSW52b2NhdGlvbiBvZiBpbml0IG1ldGhvZCBmYWlsZWQ7IG5lc3RlZCBleGNlcHRpb24gaXMgamF2YS5sYW5nLk5vQ2xhc3NEZWZGb3VuZEVycm9yOiBTZXJpYWxpemFibGUNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmluaXRpYWxpemVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNTc4KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuZG9DcmVhdGVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YTo1NDUpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5jcmVhdGVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YTo0ODIpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeSQxLmdldE9iamVjdChBYnN0cmFjdEJlYW5GYWN0b3J5LmphdmE6MzA2KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkRlZmF1bHRTaW5nbGV0b25CZWFuUmVnaXN0cnkuZ2V0U2luZ2xldG9uKERlZmF1bHRTaW5nbGV0b25CZWFuUmVnaXN0cnkuamF2YToyMzApDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeS5kb0dldEJlYW4oQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjMwMikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEJlYW5GYWN0b3J5LmdldEJlYW4oQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjE5NykNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5EZWZhdWx0TGlzdGFibGVCZWFuRmFjdG9yeS5wcmVJbnN0YW50aWF0ZVNpbmdsZXRvbnMoRGVmYXVsdExpc3RhYmxlQmVhbkZhY3RvcnkuamF2YTo3NTMpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuZmluaXNoQmVhbkZhY3RvcnlJbml0aWFsaXphdGlvbihBYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhOjgzOSkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5BYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5yZWZyZXNoKEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmphdmE6NTM4KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlci5jb25maWd1cmVBbmRSZWZyZXNoV2ViQXBwbGljYXRpb25Db250ZXh0KENvbnRleHRMb2FkZXIuamF2YTo0NDYpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyLmluaXRXZWJBcHBsaWNhdGlvbkNvbnRleHQoQ29udGV4dExvYWRlci5qYXZhOjMyOCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXJMaXN0ZW5lci5jb250ZXh0SW5pdGlhbGl6ZWQoQ29udGV4dExvYWRlckxpc3RlbmVyLmphdmE6MTA3KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZENvbnRleHQubGlzdGVuZXJTdGFydChTdGFuZGFyZENvbnRleHQuamF2YTo1MTU3KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZENvbnRleHQuc3RhcnRJbnRlcm5hbChTdGFuZGFyZENvbnRleHQuamF2YTo1NjgwKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEudXRpbC5MaWZlY3ljbGVCYXNlLnN0YXJ0KExpZmVjeWNsZUJhc2UuamF2YToxNDUpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLkNvbnRhaW5lckJhc2UuYWRkQ2hpbGRJbnRlcm5hbChDb250YWluZXJCYXNlLmphdmE6MTAxOCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuQ29udGFpbmVyQmFzZS5hZGRDaGlsZChDb250YWluZXJCYXNlLmphdmE6OTk0KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZEhvc3QuYWRkQ2hpbGQoU3RhbmRhcmRIb3N0LmphdmE6NjUyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuc3RhcnR1cC5Ib3N0Q29uZmlnLmRlcGxveURpcmVjdG9yeShIb3N0Q29uZmlnLmphdmE6MTI5NikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnN0YXJ0dXAuSG9zdENvbmZpZyREZXBsb3lEaXJlY3RvcnkucnVuKEhvc3RDb25maWcuamF2YToyMDM5KQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo0NzEpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2MikNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDUpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjE1KQ0KCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0NSkNCkNhdXNlZCBieTogamF2YS5sYW5nLk5vQ2xhc3NEZWZGb3VuZEVycm9yOiBTZXJpYWxpemFibGUNCglhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIuZGVmaW5lQ2xhc3MxKE5hdGl2ZSBNZXRob2QpDQoJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmRlZmluZUNsYXNzKENsYXNzTG9hZGVyLmphdmE6ODAwKQ0KCWF0IGphdmEuc2VjdXJpdHkuU2VjdXJlQ2xhc3NMb2FkZXIuZGVmaW5lQ2xhc3MoU2VjdXJlQ2xhc3NMb2FkZXIuamF2YToxNDIpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmZpbmRDbGFzc0ludGVybmFsKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjMyMjIpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmZpbmRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNDA5KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTg5NykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE3NzEpDQoJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpDQoJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNzQpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uQ2xhc3NMb2FkZXJXcmFwcGVyLmNsYXNzRm9yTmFtZShDbGFzc0xvYWRlcldyYXBwZXIuamF2YToxNzgpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uQ2xhc3NMb2FkZXJXcmFwcGVyLmNsYXNzRm9yTmFtZShDbGFzc0xvYWRlcldyYXBwZXIuamF2YTo4OSkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5pby5SZXNvdXJjZXMuY2xhc3NGb3JOYW1lKFJlc291cmNlcy5qYXZhOjI1NikNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnR5cGVBbGlhc2VzRWxlbWVudChYTUxDb25maWdCdWlsZGVyLmphdmE6MTIzKQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmJ1aWxkZXIueG1sLlhNTENvbmZpZ0J1aWxkZXIucGFyc2VDb25maWd1cmF0aW9uKFhNTENvbmZpZ0J1aWxkZXIuamF2YTo5OSkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnBhcnNlKFhNTENvbmZpZ0J1aWxkZXIuamF2YTo5MikNCglhdCBvcmcubXliYXRpcy5zcHJpbmcuU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmJ1aWxkU3FsU2Vzc2lvbkZhY3RvcnkoU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmphdmE6NDI4KQ0KCWF0IG9yZy5teWJhdGlzLnNwcmluZy5TcWxTZXNzaW9uRmFjdG9yeUJlYW4uYWZ0ZXJQcm9wZXJ0aWVzU2V0KFNxbFNlc3Npb25GYWN0b3J5QmVhbi5qYXZhOjM0MCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5Lmludm9rZUluaXRNZXRob2RzKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNjM3KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuaW5pdGlhbGl6ZUJlYW4oQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjE1NzQpDQoJLi4uIDI1IG1vcmUNCkNhdXNlZCBieTogamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IFNlcmlhbGl6YWJsZQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTkyOCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE3NzEpDQoJLi4uIDQ0IG1vcmUNCjIwMTktMDQtMjMgMTQ6Mjk6MDkgW0VSUk9SXSAtIG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlciAtQ29udGV4dExvYWRlci5qYXZhKDM1MykgLUNvbnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbGVkDQogICAgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LkJlYW5DcmVhdGlvbkV4Y2VwdGlvbjogRXJyb3IgY3JlYXRpbmcgYmVhbiB3aXRoIG5hbWUgJ3NxbFNlc3Npb25GYWN0b3J5JyBkZWZpbmVkIGluIFVSTCBbZmlsZTovRDovUHJvZ3JhbSUyMEZpbGVzJTIwKHg4NikvVG9tY2F0Ny93ZWJhcHBzL0lNT09DL1dFQi1JTkYvY2xhc3Nlcy9zcHJpbmcvYXBwbGljYXRpb25Db250ZXh0LnhtbF06IEludm9jYXRpb24gb2YgaW5pdCBtZXRob2QgZmFpbGVkOyBuZXN0ZWQgZXhjZXB0aW9uIGlzIGphdmEubGFuZy5Ob0NsYXNzRGVmRm91bmRFcnJvcjogU2VyaWFsaXphYmxlDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5pbml0aWFsaXplQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6MTU3OCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmRvQ3JlYXRlQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6NTQ1KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuY3JlYXRlQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6NDgyKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QmVhbkZhY3RvcnkkMS5nZXRPYmplY3QoQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjMwNikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5EZWZhdWx0U2luZ2xldG9uQmVhblJlZ2lzdHJ5LmdldFNpbmdsZXRvbihEZWZhdWx0U2luZ2xldG9uQmVhblJlZ2lzdHJ5LmphdmE6MjMwKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QmVhbkZhY3RvcnkuZG9HZXRCZWFuKEFic3RyYWN0QmVhbkZhY3RvcnkuamF2YTozMDIpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeS5nZXRCZWFuKEFic3RyYWN0QmVhbkZhY3RvcnkuamF2YToxOTcpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuRGVmYXVsdExpc3RhYmxlQmVhbkZhY3RvcnkucHJlSW5zdGFudGlhdGVTaW5nbGV0b25zKERlZmF1bHRMaXN0YWJsZUJlYW5GYWN0b3J5LmphdmE6NzUzKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmZpbmlzaEJlYW5GYWN0b3J5SW5pdGlhbGl6YXRpb24oQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuamF2YTo4MzkpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQucmVmcmVzaChBYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhOjUzOCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXIuY29uZmlndXJlQW5kUmVmcmVzaFdlYkFwcGxpY2F0aW9uQ29udGV4dChDb250ZXh0TG9hZGVyLmphdmE6NDQ2KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlci5pbml0V2ViQXBwbGljYXRpb25Db250ZXh0KENvbnRleHRMb2FkZXIuamF2YTozMjgpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyTGlzdGVuZXIuY29udGV4dEluaXRpYWxpemVkKENvbnRleHRMb2FkZXJMaXN0ZW5lci5qYXZhOjEwNykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRDb250ZXh0Lmxpc3RlbmVyU3RhcnQoU3RhbmRhcmRDb250ZXh0LmphdmE6NTE1NykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRDb250ZXh0LnN0YXJ0SW50ZXJuYWwoU3RhbmRhcmRDb250ZXh0LmphdmE6NTY4MCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnV0aWwuTGlmZWN5Y2xlQmFzZS5zdGFydChMaWZlY3ljbGVCYXNlLmphdmE6MTQ1KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5Db250YWluZXJCYXNlLmFkZENoaWxkSW50ZXJuYWwoQ29udGFpbmVyQmFzZS5qYXZhOjEwMTgpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLkNvbnRhaW5lckJhc2UuYWRkQ2hpbGQoQ29udGFpbmVyQmFzZS5qYXZhOjk5NCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRIb3N0LmFkZENoaWxkKFN0YW5kYXJkSG9zdC5qYXZhOjY1MikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnN0YXJ0dXAuSG9zdENvbmZpZy5kZXBsb3lEaXJlY3RvcnkoSG9zdENvbmZpZy5qYXZhOjEyOTYpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5zdGFydHVwLkhvc3RDb25maWckRGVwbG95RGlyZWN0b3J5LnJ1bihIb3N0Q29uZmlnLmphdmE6MjAzOSkNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NDcxKQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjIpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ1KQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYxNSkNCglhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDUpDQpDYXVzZWQgYnk6IGphdmEubGFuZy5Ob0NsYXNzRGVmRm91bmRFcnJvcjogU2VyaWFsaXphYmxlDQoJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmRlZmluZUNsYXNzMShOYXRpdmUgTWV0aG9kKQ0KCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5kZWZpbmVDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjgwMCkNCglhdCBqYXZhLnNlY3VyaXR5LlNlY3VyZUNsYXNzTG9hZGVyLmRlZmluZUNsYXNzKFNlY3VyZUNsYXNzTG9hZGVyLmphdmE6MTQyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5maW5kQ2xhc3NJbnRlcm5hbChXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YTozMjIyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5maW5kQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTQwOSkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE4OTcpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNzcxKQ0KCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQ0KCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6Mjc0KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmlvLkNsYXNzTG9hZGVyV3JhcHBlci5jbGFzc0Zvck5hbWUoQ2xhc3NMb2FkZXJXcmFwcGVyLmphdmE6MTc4KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmlvLkNsYXNzTG9hZGVyV3JhcHBlci5jbGFzc0Zvck5hbWUoQ2xhc3NMb2FkZXJXcmFwcGVyLmphdmE6ODkpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uUmVzb3VyY2VzLmNsYXNzRm9yTmFtZShSZXNvdXJjZXMuamF2YToyNTYpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuYnVpbGRlci54bWwuWE1MQ29uZmlnQnVpbGRlci50eXBlQWxpYXNlc0VsZW1lbnQoWE1MQ29uZmlnQnVpbGRlci5qYXZhOjEyMykNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnBhcnNlQ29uZmlndXJhdGlvbihYTUxDb25maWdCdWlsZGVyLmphdmE6OTkpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuYnVpbGRlci54bWwuWE1MQ29uZmlnQnVpbGRlci5wYXJzZShYTUxDb25maWdCdWlsZGVyLmphdmE6OTIpDQoJYXQgb3JnLm15YmF0aXMuc3ByaW5nLlNxbFNlc3Npb25GYWN0b3J5QmVhbi5idWlsZFNxbFNlc3Npb25GYWN0b3J5KFNxbFNlc3Npb25GYWN0b3J5QmVhbi5qYXZhOjQyOCkNCglhdCBvcmcubXliYXRpcy5zcHJpbmcuU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmFmdGVyUHJvcGVydGllc1NldChTcWxTZXNzaW9uRmFjdG9yeUJlYW4uamF2YTozNDApDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5pbnZva2VJbml0TWV0aG9kcyhBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6MTYzNykNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmluaXRpYWxpemVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNTc0KQ0KCS4uLiAyNSBtb3JlDQpDYXVzZWQgYnk6IGphdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBTZXJpYWxpemFibGUNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE5MjgpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNzcxKQ0KCS4uLiA0NCBtb3JlDQo=

BASE64:[MjAxOS0wNC0yMyAxNDoxOTowMSBbRVJST1JdIC0gb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyIC1Db250ZXh0TG9hZGVyLmphdmEoMzUzKSAtQ29udGV4dCBpbml0aWFsaXphdGlvbiBmYWlsZWQNCiAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuQmVhbkNyZWF0aW9uRXhjZXB0aW9uOiBFcnJvciBjcmVhdGluZyBiZWFuIHdpdGggbmFtZSAnc3FsU2Vzc2lvbkZhY3RvcnknIGRlZmluZWQgaW4gVVJMIFtmaWxlOi9EOi9Qcm9ncmFtJTIwRmlsZXMlMjAoeDg2KS9Ub21jYXQ3L3dlYmFwcHMvSU1PT0MvV0VCLUlORi9jbGFzc2VzL3NwcmluZy9hcHBsaWNhdGlvbkNvbnRleHQueG1sXTogSW52b2NhdGlvbiBvZiBpbml0IG1ldGhvZCBmYWlsZWQ7IG5lc3RlZCBleGNlcHRpb24gaXMgamF2YS5sYW5nLk5vQ2xhc3NEZWZGb3VuZEVycm9yOiBTZXJpYWxpemFibGUNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmluaXRpYWxpemVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNTc4KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuZG9DcmVhdGVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YTo1NDUpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5jcmVhdGVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YTo0ODIpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeSQxLmdldE9iamVjdChBYnN0cmFjdEJlYW5GYWN0b3J5LmphdmE6MzA2KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkRlZmF1bHRTaW5nbGV0b25CZWFuUmVnaXN0cnkuZ2V0U2luZ2xldG9uKERlZmF1bHRTaW5nbGV0b25CZWFuUmVnaXN0cnkuamF2YToyMzApDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeS5kb0dldEJlYW4oQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjMwMikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEJlYW5GYWN0b3J5LmdldEJlYW4oQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjE5NykNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5EZWZhdWx0TGlzdGFibGVCZWFuRmFjdG9yeS5wcmVJbnN0YW50aWF0ZVNpbmdsZXRvbnMoRGVmYXVsdExpc3RhYmxlQmVhbkZhY3RvcnkuamF2YTo3NTMpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuZmluaXNoQmVhbkZhY3RvcnlJbml0aWFsaXphdGlvbihBYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhOjgzOSkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5BYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5yZWZyZXNoKEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmphdmE6NTM4KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlci5jb25maWd1cmVBbmRSZWZyZXNoV2ViQXBwbGljYXRpb25Db250ZXh0KENvbnRleHRMb2FkZXIuamF2YTo0NDYpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyLmluaXRXZWJBcHBsaWNhdGlvbkNvbnRleHQoQ29udGV4dExvYWRlci5qYXZhOjMyOCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXJMaXN0ZW5lci5jb250ZXh0SW5pdGlhbGl6ZWQoQ29udGV4dExvYWRlckxpc3RlbmVyLmphdmE6MTA3KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZENvbnRleHQubGlzdGVuZXJTdGFydChTdGFuZGFyZENvbnRleHQuamF2YTo1MTU3KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZENvbnRleHQuc3RhcnRJbnRlcm5hbChTdGFuZGFyZENvbnRleHQuamF2YTo1NjgwKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEudXRpbC5MaWZlY3ljbGVCYXNlLnN0YXJ0KExpZmVjeWNsZUJhc2UuamF2YToxNDUpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLkNvbnRhaW5lckJhc2UuYWRkQ2hpbGRJbnRlcm5hbChDb250YWluZXJCYXNlLmphdmE6MTAxOCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuQ29udGFpbmVyQmFzZS5hZGRDaGlsZChDb250YWluZXJCYXNlLmphdmE6OTk0KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZEhvc3QuYWRkQ2hpbGQoU3RhbmRhcmRIb3N0LmphdmE6NjUyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuc3RhcnR1cC5Ib3N0Q29uZmlnLmRlcGxveURpcmVjdG9yeShIb3N0Q29uZmlnLmphdmE6MTI5NikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnN0YXJ0dXAuSG9zdENvbmZpZyREZXBsb3lEaXJlY3RvcnkucnVuKEhvc3RDb25maWcuamF2YToyMDM5KQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo0NzEpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2MikNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDUpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjE1KQ0KCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0NSkNCkNhdXNlZCBieTogamF2YS5sYW5nLk5vQ2xhc3NEZWZGb3VuZEVycm9yOiBTZXJpYWxpemFibGUNCglhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIuZGVmaW5lQ2xhc3MxKE5hdGl2ZSBNZXRob2QpDQoJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmRlZmluZUNsYXNzKENsYXNzTG9hZGVyLmphdmE6ODAwKQ0KCWF0IGphdmEuc2VjdXJpdHkuU2VjdXJlQ2xhc3NMb2FkZXIuZGVmaW5lQ2xhc3MoU2VjdXJlQ2xhc3NMb2FkZXIuamF2YToxNDIpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmZpbmRDbGFzc0ludGVybmFsKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjMyMjIpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmZpbmRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNDA5KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTg5NykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE3NzEpDQoJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpDQoJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNzQpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uQ2xhc3NMb2FkZXJXcmFwcGVyLmNsYXNzRm9yTmFtZShDbGFzc0xvYWRlcldyYXBwZXIuamF2YToxNzgpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uQ2xhc3NMb2FkZXJXcmFwcGVyLmNsYXNzRm9yTmFtZShDbGFzc0xvYWRlcldyYXBwZXIuamF2YTo4OSkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5pby5SZXNvdXJjZXMuY2xhc3NGb3JOYW1lKFJlc291cmNlcy5qYXZhOjI1NikNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnR5cGVBbGlhc2VzRWxlbWVudChYTUxDb25maWdCdWlsZGVyLmphdmE6MTIzKQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmJ1aWxkZXIueG1sLlhNTENvbmZpZ0J1aWxkZXIucGFyc2VDb25maWd1cmF0aW9uKFhNTENvbmZpZ0J1aWxkZXIuamF2YTo5OSkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnBhcnNlKFhNTENvbmZpZ0J1aWxkZXIuamF2YTo5MikNCglhdCBvcmcubXliYXRpcy5zcHJpbmcuU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmJ1aWxkU3FsU2Vzc2lvbkZhY3RvcnkoU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmphdmE6NDI4KQ0KCWF0IG9yZy5teWJhdGlzLnNwcmluZy5TcWxTZXNzaW9uRmFjdG9yeUJlYW4uYWZ0ZXJQcm9wZXJ0aWVzU2V0KFNxbFNlc3Npb25GYWN0b3J5QmVhbi5qYXZhOjM0MCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5Lmludm9rZUluaXRNZXRob2RzKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNjM3KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuaW5pdGlhbGl6ZUJlYW4oQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjE1NzQpDQoJLi4uIDI1IG1vcmUNCkNhdXNlZCBieTogamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IFNlcmlhbGl6YWJsZQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTkyOCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE3NzEpDQoJLi4uIDQ0IG1vcmUNCjIwMTktMDQtMjMgMTQ6MjA6MzggW0VSUk9SXSAtIG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlciAtQ29udGV4dExvYWRlci5qYXZhKDM1MykgLUNvbnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbGVkDQogICAgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LkJlYW5DcmVhdGlvbkV4Y2VwdGlvbjogRXJyb3IgY3JlYXRpbmcgYmVhbiB3aXRoIG5hbWUgJ3NxbFNlc3Npb25GYWN0b3J5JyBkZWZpbmVkIGluIFVSTCBbZmlsZTovRDovUHJvZ3JhbSUyMEZpbGVzJTIwKHg4NikvVG9tY2F0Ny93ZWJhcHBzL0lNT09DL1dFQi1JTkYvY2xhc3Nlcy9zcHJpbmcvYXBwbGljYXRpb25Db250ZXh0LnhtbF06IEludm9jYXRpb24gb2YgaW5pdCBtZXRob2QgZmFpbGVkOyBuZXN0ZWQgZXhjZXB0aW9uIGlzIGphdmEubGFuZy5Ob0NsYXNzRGVmRm91bmRFcnJvcjogU2VyaWFsaXphYmxlDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5pbml0aWFsaXplQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6MTU3OCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmRvQ3JlYXRlQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6NTQ1KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuY3JlYXRlQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6NDgyKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QmVhbkZhY3RvcnkkMS5nZXRPYmplY3QoQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjMwNikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5EZWZhdWx0U2luZ2xldG9uQmVhblJlZ2lzdHJ5LmdldFNpbmdsZXRvbihEZWZhdWx0U2luZ2xldG9uQmVhblJlZ2lzdHJ5LmphdmE6MjMwKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QmVhbkZhY3RvcnkuZG9HZXRCZWFuKEFic3RyYWN0QmVhbkZhY3RvcnkuamF2YTozMDIpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeS5nZXRCZWFuKEFic3RyYWN0QmVhbkZhY3RvcnkuamF2YToxOTcpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuRGVmYXVsdExpc3RhYmxlQmVhbkZhY3RvcnkucHJlSW5zdGFudGlhdGVTaW5nbGV0b25zKERlZmF1bHRMaXN0YWJsZUJlYW5GYWN0b3J5LmphdmE6NzUzKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmZpbmlzaEJlYW5GYWN0b3J5SW5pdGlhbGl6YXRpb24oQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuamF2YTo4MzkpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQucmVmcmVzaChBYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhOjUzOCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXIuY29uZmlndXJlQW5kUmVmcmVzaFdlYkFwcGxpY2F0aW9uQ29udGV4dChDb250ZXh0TG9hZGVyLmphdmE6NDQ2KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlci5pbml0V2ViQXBwbGljYXRpb25Db250ZXh0KENvbnRleHRMb2FkZXIuamF2YTozMjgpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyTGlzdGVuZXIuY29udGV4dEluaXRpYWxpemVkKENvbnRleHRMb2FkZXJMaXN0ZW5lci5qYXZhOjEwNykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRDb250ZXh0Lmxpc3RlbmVyU3RhcnQoU3RhbmRhcmRDb250ZXh0LmphdmE6NTE1NykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRDb250ZXh0LnN0YXJ0SW50ZXJuYWwoU3RhbmRhcmRDb250ZXh0LmphdmE6NTY4MCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnV0aWwuTGlmZWN5Y2xlQmFzZS5zdGFydChMaWZlY3ljbGVCYXNlLmphdmE6MTQ1KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5Db250YWluZXJCYXNlLmFkZENoaWxkSW50ZXJuYWwoQ29udGFpbmVyQmFzZS5qYXZhOjEwMTgpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLkNvbnRhaW5lckJhc2UuYWRkQ2hpbGQoQ29udGFpbmVyQmFzZS5qYXZhOjk5NCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRIb3N0LmFkZENoaWxkKFN0YW5kYXJkSG9zdC5qYXZhOjY1MikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnN0YXJ0dXAuSG9zdENvbmZpZy5kZXBsb3lEaXJlY3RvcnkoSG9zdENvbmZpZy5qYXZhOjEyOTYpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5zdGFydHVwLkhvc3RDb25maWckRGVwbG95RGlyZWN0b3J5LnJ1bihIb3N0Q29uZmlnLmphdmE6MjAzOSkNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NDcxKQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjIpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ1KQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYxNSkNCglhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDUpDQpDYXVzZWQgYnk6IGphdmEubGFuZy5Ob0NsYXNzRGVmRm91bmRFcnJvcjogU2VyaWFsaXphYmxlDQoJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmRlZmluZUNsYXNzMShOYXRpdmUgTWV0aG9kKQ0KCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5kZWZpbmVDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjgwMCkNCglhdCBqYXZhLnNlY3VyaXR5LlNlY3VyZUNsYXNzTG9hZGVyLmRlZmluZUNsYXNzKFNlY3VyZUNsYXNzTG9hZGVyLmphdmE6MTQyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5maW5kQ2xhc3NJbnRlcm5hbChXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YTozMjIyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5maW5kQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTQwOSkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE4OTcpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNzcxKQ0KCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQ0KCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6Mjc0KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmlvLkNsYXNzTG9hZGVyV3JhcHBlci5jbGFzc0Zvck5hbWUoQ2xhc3NMb2FkZXJXcmFwcGVyLmphdmE6MTc4KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmlvLkNsYXNzTG9hZGVyV3JhcHBlci5jbGFzc0Zvck5hbWUoQ2xhc3NMb2FkZXJXcmFwcGVyLmphdmE6ODkpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uUmVzb3VyY2VzLmNsYXNzRm9yTmFtZShSZXNvdXJjZXMuamF2YToyNTYpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuYnVpbGRlci54bWwuWE1MQ29uZmlnQnVpbGRlci50eXBlQWxpYXNlc0VsZW1lbnQoWE1MQ29uZmlnQnVpbGRlci5qYXZhOjEyMykNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnBhcnNlQ29uZmlndXJhdGlvbihYTUxDb25maWdCdWlsZGVyLmphdmE6OTkpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuYnVpbGRlci54bWwuWE1MQ29uZmlnQnVpbGRlci5wYXJzZShYTUxDb25maWdCdWlsZGVyLmphdmE6OTIpDQoJYXQgb3JnLm15YmF0aXMuc3ByaW5nLlNxbFNlc3Npb25GYWN0b3J5QmVhbi5idWlsZFNxbFNlc3Npb25GYWN0b3J5KFNxbFNlc3Npb25GYWN0b3J5QmVhbi5qYXZhOjQyOCkNCglhdCBvcmcubXliYXRpcy5zcHJpbmcuU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmFmdGVyUHJvcGVydGllc1NldChTcWxTZXNzaW9uRmFjdG9yeUJlYW4uamF2YTozNDApDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5pbnZva2VJbml0TWV0aG9kcyhBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6MTYzNykNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmluaXRpYWxpemVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNTc0KQ0KCS4uLiAyNSBtb3JlDQpDYXVzZWQgYnk6IGphdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBTZXJpYWxpemFibGUNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE5MjgpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNzcxKQ0KCS4uLiA0NCBtb3JlDQoyMDE5LTA0LTIzIDE0OjIyOjQzIFtFUlJPUl0gLSBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXIgLUNvbnRleHRMb2FkZXIuamF2YSgzNTMpIC1Db250ZXh0IGluaXRpYWxpemF0aW9uIGZhaWxlZA0KICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5CZWFuQ3JlYXRpb25FeGNlcHRpb246IEVycm9yIGNyZWF0aW5nIGJlYW4gd2l0aCBuYW1lICdzcWxTZXNzaW9uRmFjdG9yeScgZGVmaW5lZCBpbiBVUkwgW2ZpbGU6L0Q6L1Byb2dyYW0lMjBGaWxlcyUyMCh4ODYpL1RvbWNhdDcvd2ViYXBwcy9JTU9PQy9XRUItSU5GL2NsYXNzZXMvc3ByaW5nL2FwcGxpY2F0aW9uQ29udGV4dC54bWxdOiBJbnZvY2F0aW9uIG9mIGluaXQgbWV0aG9kIGZhaWxlZDsgbmVzdGVkIGV4Y2VwdGlvbiBpcyBqYXZhLmxhbmcuTm9DbGFzc0RlZkZvdW5kRXJyb3I6IFNlcmlhbGl6YWJsZQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuaW5pdGlhbGl6ZUJlYW4oQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjE1NzgpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5kb0NyZWF0ZUJlYW4oQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjU0NSkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmNyZWF0ZUJlYW4oQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjQ4MikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEJlYW5GYWN0b3J5JDEuZ2V0T2JqZWN0KEFic3RyYWN0QmVhbkZhY3RvcnkuamF2YTozMDYpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuRGVmYXVsdFNpbmdsZXRvbkJlYW5SZWdpc3RyeS5nZXRTaW5nbGV0b24oRGVmYXVsdFNpbmdsZXRvbkJlYW5SZWdpc3RyeS5qYXZhOjIzMCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEJlYW5GYWN0b3J5LmRvR2V0QmVhbihBYnN0cmFjdEJlYW5GYWN0b3J5LmphdmE6MzAyKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QmVhbkZhY3RvcnkuZ2V0QmVhbihBYnN0cmFjdEJlYW5GYWN0b3J5LmphdmE6MTk3KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkRlZmF1bHRMaXN0YWJsZUJlYW5GYWN0b3J5LnByZUluc3RhbnRpYXRlU2luZ2xldG9ucyhEZWZhdWx0TGlzdGFibGVCZWFuRmFjdG9yeS5qYXZhOjc1MykNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5BYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5maW5pc2hCZWFuRmFjdG9yeUluaXRpYWxpemF0aW9uKEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmphdmE6ODM5KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LnJlZnJlc2goQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuamF2YTo1MzgpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyLmNvbmZpZ3VyZUFuZFJlZnJlc2hXZWJBcHBsaWNhdGlvbkNvbnRleHQoQ29udGV4dExvYWRlci5qYXZhOjQ0NikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXIuaW5pdFdlYkFwcGxpY2F0aW9uQ29udGV4dChDb250ZXh0TG9hZGVyLmphdmE6MzI4KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlckxpc3RlbmVyLmNvbnRleHRJbml0aWFsaXplZChDb250ZXh0TG9hZGVyTGlzdGVuZXIuamF2YToxMDcpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLlN0YW5kYXJkQ29udGV4dC5saXN0ZW5lclN0YXJ0KFN0YW5kYXJkQ29udGV4dC5qYXZhOjUxNTcpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLlN0YW5kYXJkQ29udGV4dC5zdGFydEludGVybmFsKFN0YW5kYXJkQ29udGV4dC5qYXZhOjU2ODApDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS51dGlsLkxpZmVjeWNsZUJhc2Uuc3RhcnQoTGlmZWN5Y2xlQmFzZS5qYXZhOjE0NSkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuQ29udGFpbmVyQmFzZS5hZGRDaGlsZEludGVybmFsKENvbnRhaW5lckJhc2UuamF2YToxMDE4KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5Db250YWluZXJCYXNlLmFkZENoaWxkKENvbnRhaW5lckJhc2UuamF2YTo5OTQpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLlN0YW5kYXJkSG9zdC5hZGRDaGlsZChTdGFuZGFyZEhvc3QuamF2YTo2NTIpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5zdGFydHVwLkhvc3RDb25maWcuZGVwbG95RGlyZWN0b3J5KEhvc3RDb25maWcuamF2YToxMjk2KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuc3RhcnR1cC5Ib3N0Q29uZmlnJERlcGxveURpcmVjdG9yeS5ydW4oSG9zdENvbmZpZy5qYXZhOjIwMzkpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzJFJ1bm5hYmxlQWRhcHRlci5jYWxsKEV4ZWN1dG9ycy5qYXZhOjQ3MSkNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrLnJ1bihGdXR1cmVUYXNrLmphdmE6MjYyKQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvci5ydW5Xb3JrZXIoVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6MTE0NSkNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IkV29ya2VyLnJ1bihUaHJlYWRQb29sRXhlY3V0b3IuamF2YTo2MTUpDQoJYXQgamF2YS5sYW5nLlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NzQ1KQ0KQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuTm9DbGFzc0RlZkZvdW5kRXJyb3I6IFNlcmlhbGl6YWJsZQ0KCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5kZWZpbmVDbGFzczEoTmF0aXZlIE1ldGhvZCkNCglhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIuZGVmaW5lQ2xhc3MoQ2xhc3NMb2FkZXIuamF2YTo4MDApDQoJYXQgamF2YS5zZWN1cml0eS5TZWN1cmVDbGFzc0xvYWRlci5kZWZpbmVDbGFzcyhTZWN1cmVDbGFzc0xvYWRlci5qYXZhOjE0MikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UuZmluZENsYXNzSW50ZXJuYWwoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MzIyMikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UuZmluZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE0MDkpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxODk3KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTc3MSkNCglhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZCkNCglhdCBqYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZShDbGFzcy5qYXZhOjI3NCkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5pby5DbGFzc0xvYWRlcldyYXBwZXIuY2xhc3NGb3JOYW1lKENsYXNzTG9hZGVyV3JhcHBlci5qYXZhOjE3OCkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5pby5DbGFzc0xvYWRlcldyYXBwZXIuY2xhc3NGb3JOYW1lKENsYXNzTG9hZGVyV3JhcHBlci5qYXZhOjg5KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmlvLlJlc291cmNlcy5jbGFzc0Zvck5hbWUoUmVzb3VyY2VzLmphdmE6MjU2KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmJ1aWxkZXIueG1sLlhNTENvbmZpZ0J1aWxkZXIudHlwZUFsaWFzZXNFbGVtZW50KFhNTENvbmZpZ0J1aWxkZXIuamF2YToxMjMpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuYnVpbGRlci54bWwuWE1MQ29uZmlnQnVpbGRlci5wYXJzZUNvbmZpZ3VyYXRpb24oWE1MQ29uZmlnQnVpbGRlci5qYXZhOjk5KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmJ1aWxkZXIueG1sLlhNTENvbmZpZ0J1aWxkZXIucGFyc2UoWE1MQ29uZmlnQnVpbGRlci5qYXZhOjkyKQ0KCWF0IG9yZy5teWJhdGlzLnNwcmluZy5TcWxTZXNzaW9uRmFjdG9yeUJlYW4uYnVpbGRTcWxTZXNzaW9uRmFjdG9yeShTcWxTZXNzaW9uRmFjdG9yeUJlYW4uamF2YTo0MjgpDQoJYXQgb3JnLm15YmF0aXMuc3ByaW5nLlNxbFNlc3Npb25GYWN0b3J5QmVhbi5hZnRlclByb3BlcnRpZXNTZXQoU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmphdmE6MzQwKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuaW52b2tlSW5pdE1ldGhvZHMoQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjE2MzcpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5pbml0aWFsaXplQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6MTU3NCkNCgkuLi4gMjUgbW9yZQ0KQ2F1c2VkIGJ5OiBqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbjogU2VyaWFsaXphYmxlDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxOTI4KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTc3MSkNCgkuLi4gNDQgbW9yZQ0KMjAxOS0wNC0yMyAxNDoyNDozNyBbRVJST1JdIC0gb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyIC1Db250ZXh0TG9hZGVyLmphdmEoMzUzKSAtQ29udGV4dCBpbml0aWFsaXphdGlvbiBmYWlsZWQNCiAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuQmVhbkNyZWF0aW9uRXhjZXB0aW9uOiBFcnJvciBjcmVhdGluZyBiZWFuIHdpdGggbmFtZSAnc3FsU2Vzc2lvbkZhY3RvcnknIGRlZmluZWQgaW4gVVJMIFtmaWxlOi9EOi9Qcm9ncmFtJTIwRmlsZXMlMjAoeDg2KS9Ub21jYXQ3L3dlYmFwcHMvSU1PT0MvV0VCLUlORi9jbGFzc2VzL3NwcmluZy9hcHBsaWNhdGlvbkNvbnRleHQueG1sXTogSW52b2NhdGlvbiBvZiBpbml0IG1ldGhvZCBmYWlsZWQ7IG5lc3RlZCBleGNlcHRpb24gaXMgamF2YS5sYW5nLk5vQ2xhc3NEZWZGb3VuZEVycm9yOiBTZXJpYWxpemFibGUNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmluaXRpYWxpemVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNTc4KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuZG9DcmVhdGVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YTo1NDUpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5jcmVhdGVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YTo0ODIpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeSQxLmdldE9iamVjdChBYnN0cmFjdEJlYW5GYWN0b3J5LmphdmE6MzA2KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkRlZmF1bHRTaW5nbGV0b25CZWFuUmVnaXN0cnkuZ2V0U2luZ2xldG9uKERlZmF1bHRTaW5nbGV0b25CZWFuUmVnaXN0cnkuamF2YToyMzApDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeS5kb0dldEJlYW4oQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjMwMikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEJlYW5GYWN0b3J5LmdldEJlYW4oQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjE5NykNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5EZWZhdWx0TGlzdGFibGVCZWFuRmFjdG9yeS5wcmVJbnN0YW50aWF0ZVNpbmdsZXRvbnMoRGVmYXVsdExpc3RhYmxlQmVhbkZhY3RvcnkuamF2YTo3NTMpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuZmluaXNoQmVhbkZhY3RvcnlJbml0aWFsaXphdGlvbihBYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhOjgzOSkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5BYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5yZWZyZXNoKEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmphdmE6NTM4KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlci5jb25maWd1cmVBbmRSZWZyZXNoV2ViQXBwbGljYXRpb25Db250ZXh0KENvbnRleHRMb2FkZXIuamF2YTo0NDYpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyLmluaXRXZWJBcHBsaWNhdGlvbkNvbnRleHQoQ29udGV4dExvYWRlci5qYXZhOjMyOCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXJMaXN0ZW5lci5jb250ZXh0SW5pdGlhbGl6ZWQoQ29udGV4dExvYWRlckxpc3RlbmVyLmphdmE6MTA3KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZENvbnRleHQubGlzdGVuZXJTdGFydChTdGFuZGFyZENvbnRleHQuamF2YTo1MTU3KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZENvbnRleHQuc3RhcnRJbnRlcm5hbChTdGFuZGFyZENvbnRleHQuamF2YTo1NjgwKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEudXRpbC5MaWZlY3ljbGVCYXNlLnN0YXJ0KExpZmVjeWNsZUJhc2UuamF2YToxNDUpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLkNvbnRhaW5lckJhc2UuYWRkQ2hpbGRJbnRlcm5hbChDb250YWluZXJCYXNlLmphdmE6MTAxOCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuQ29udGFpbmVyQmFzZS5hZGRDaGlsZChDb250YWluZXJCYXNlLmphdmE6OTk0KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5TdGFuZGFyZEhvc3QuYWRkQ2hpbGQoU3RhbmRhcmRIb3N0LmphdmE6NjUyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuc3RhcnR1cC5Ib3N0Q29uZmlnLmRlcGxveURpcmVjdG9yeShIb3N0Q29uZmlnLmphdmE6MTI5NikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnN0YXJ0dXAuSG9zdENvbmZpZyREZXBsb3lEaXJlY3RvcnkucnVuKEhvc3RDb25maWcuamF2YToyMDM5KQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9ycyRSdW5uYWJsZUFkYXB0ZXIuY2FsbChFeGVjdXRvcnMuamF2YTo0NzEpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzay5ydW4oRnV0dXJlVGFzay5qYXZhOjI2MikNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3IucnVuV29ya2VyKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjExNDUpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yJFdvcmtlci5ydW4oVGhyZWFkUG9vbEV4ZWN1dG9yLmphdmE6NjE1KQ0KCWF0IGphdmEubGFuZy5UaHJlYWQucnVuKFRocmVhZC5qYXZhOjc0NSkNCkNhdXNlZCBieTogamF2YS5sYW5nLk5vQ2xhc3NEZWZGb3VuZEVycm9yOiBTZXJpYWxpemFibGUNCglhdCBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIuZGVmaW5lQ2xhc3MxKE5hdGl2ZSBNZXRob2QpDQoJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmRlZmluZUNsYXNzKENsYXNzTG9hZGVyLmphdmE6ODAwKQ0KCWF0IGphdmEuc2VjdXJpdHkuU2VjdXJlQ2xhc3NMb2FkZXIuZGVmaW5lQ2xhc3MoU2VjdXJlQ2xhc3NMb2FkZXIuamF2YToxNDIpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmZpbmRDbGFzc0ludGVybmFsKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjMyMjIpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmZpbmRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNDA5KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTg5NykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE3NzEpDQoJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpDQoJYXQgamF2YS5sYW5nLkNsYXNzLmZvck5hbWUoQ2xhc3MuamF2YToyNzQpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uQ2xhc3NMb2FkZXJXcmFwcGVyLmNsYXNzRm9yTmFtZShDbGFzc0xvYWRlcldyYXBwZXIuamF2YToxNzgpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uQ2xhc3NMb2FkZXJXcmFwcGVyLmNsYXNzRm9yTmFtZShDbGFzc0xvYWRlcldyYXBwZXIuamF2YTo4OSkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5pby5SZXNvdXJjZXMuY2xhc3NGb3JOYW1lKFJlc291cmNlcy5qYXZhOjI1NikNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnR5cGVBbGlhc2VzRWxlbWVudChYTUxDb25maWdCdWlsZGVyLmphdmE6MTIzKQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmJ1aWxkZXIueG1sLlhNTENvbmZpZ0J1aWxkZXIucGFyc2VDb25maWd1cmF0aW9uKFhNTENvbmZpZ0J1aWxkZXIuamF2YTo5OSkNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnBhcnNlKFhNTENvbmZpZ0J1aWxkZXIuamF2YTo5MikNCglhdCBvcmcubXliYXRpcy5zcHJpbmcuU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmJ1aWxkU3FsU2Vzc2lvbkZhY3RvcnkoU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmphdmE6NDI4KQ0KCWF0IG9yZy5teWJhdGlzLnNwcmluZy5TcWxTZXNzaW9uRmFjdG9yeUJlYW4uYWZ0ZXJQcm9wZXJ0aWVzU2V0KFNxbFNlc3Npb25GYWN0b3J5QmVhbi5qYXZhOjM0MCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5Lmludm9rZUluaXRNZXRob2RzKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNjM3KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuaW5pdGlhbGl6ZUJlYW4oQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5qYXZhOjE1NzQpDQoJLi4uIDI1IG1vcmUNCkNhdXNlZCBieTogamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb246IFNlcmlhbGl6YWJsZQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5sb2FkQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTkyOCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE3NzEpDQoJLi4uIDQ0IG1vcmUNCjIwMTktMDQtMjMgMTQ6Mjk6MDkgW0VSUk9SXSAtIG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlciAtQ29udGV4dExvYWRlci5qYXZhKDM1MykgLUNvbnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbGVkDQogICAgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LkJlYW5DcmVhdGlvbkV4Y2VwdGlvbjogRXJyb3IgY3JlYXRpbmcgYmVhbiB3aXRoIG5hbWUgJ3NxbFNlc3Npb25GYWN0b3J5JyBkZWZpbmVkIGluIFVSTCBbZmlsZTovRDovUHJvZ3JhbSUyMEZpbGVzJTIwKHg4NikvVG9tY2F0Ny93ZWJhcHBzL0lNT09DL1dFQi1JTkYvY2xhc3Nlcy9zcHJpbmcvYXBwbGljYXRpb25Db250ZXh0LnhtbF06IEludm9jYXRpb24gb2YgaW5pdCBtZXRob2QgZmFpbGVkOyBuZXN0ZWQgZXhjZXB0aW9uIGlzIGphdmEubGFuZy5Ob0NsYXNzRGVmRm91bmRFcnJvcjogU2VyaWFsaXphYmxlDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5pbml0aWFsaXplQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6MTU3OCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmRvQ3JlYXRlQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6NTQ1KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuY3JlYXRlQmVhbihBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6NDgyKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QmVhbkZhY3RvcnkkMS5nZXRPYmplY3QoQWJzdHJhY3RCZWFuRmFjdG9yeS5qYXZhOjMwNikNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5EZWZhdWx0U2luZ2xldG9uQmVhblJlZ2lzdHJ5LmdldFNpbmdsZXRvbihEZWZhdWx0U2luZ2xldG9uQmVhblJlZ2lzdHJ5LmphdmE6MjMwKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkFic3RyYWN0QmVhbkZhY3RvcnkuZG9HZXRCZWFuKEFic3RyYWN0QmVhbkZhY3RvcnkuamF2YTozMDIpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RCZWFuRmFjdG9yeS5nZXRCZWFuKEFic3RyYWN0QmVhbkZhY3RvcnkuamF2YToxOTcpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuRGVmYXVsdExpc3RhYmxlQmVhbkZhY3RvcnkucHJlSW5zdGFudGlhdGVTaW5nbGV0b25zKERlZmF1bHRMaXN0YWJsZUJlYW5GYWN0b3J5LmphdmE6NzUzKQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0LmZpbmlzaEJlYW5GYWN0b3J5SW5pdGlhbGl6YXRpb24oQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQuamF2YTo4MzkpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQucmVmcmVzaChBYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhOjUzOCkNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5jb250ZXh0LkNvbnRleHRMb2FkZXIuY29uZmlndXJlQW5kUmVmcmVzaFdlYkFwcGxpY2F0aW9uQ29udGV4dChDb250ZXh0TG9hZGVyLmphdmE6NDQ2KQ0KCWF0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlci5pbml0V2ViQXBwbGljYXRpb25Db250ZXh0KENvbnRleHRMb2FkZXIuamF2YTozMjgpDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyTGlzdGVuZXIuY29udGV4dEluaXRpYWxpemVkKENvbnRleHRMb2FkZXJMaXN0ZW5lci5qYXZhOjEwNykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRDb250ZXh0Lmxpc3RlbmVyU3RhcnQoU3RhbmRhcmRDb250ZXh0LmphdmE6NTE1NykNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRDb250ZXh0LnN0YXJ0SW50ZXJuYWwoU3RhbmRhcmRDb250ZXh0LmphdmE6NTY4MCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnV0aWwuTGlmZWN5Y2xlQmFzZS5zdGFydChMaWZlY3ljbGVCYXNlLmphdmE6MTQ1KQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEuY29yZS5Db250YWluZXJCYXNlLmFkZENoaWxkSW50ZXJuYWwoQ29udGFpbmVyQmFzZS5qYXZhOjEwMTgpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5jb3JlLkNvbnRhaW5lckJhc2UuYWRkQ2hpbGQoQ29udGFpbmVyQmFzZS5qYXZhOjk5NCkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuU3RhbmRhcmRIb3N0LmFkZENoaWxkKFN0YW5kYXJkSG9zdC5qYXZhOjY1MikNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLnN0YXJ0dXAuSG9zdENvbmZpZy5kZXBsb3lEaXJlY3RvcnkoSG9zdENvbmZpZy5qYXZhOjEyOTYpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5zdGFydHVwLkhvc3RDb25maWckRGVwbG95RGlyZWN0b3J5LnJ1bihIb3N0Q29uZmlnLmphdmE6MjAzOSkNCglhdCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnMkUnVubmFibGVBZGFwdGVyLmNhbGwoRXhlY3V0b3JzLmphdmE6NDcxKQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2sucnVuKEZ1dHVyZVRhc2suamF2YToyNjIpDQoJYXQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkUG9vbEV4ZWN1dG9yLnJ1bldvcmtlcihUaHJlYWRQb29sRXhlY3V0b3IuamF2YToxMTQ1KQ0KCWF0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZFBvb2xFeGVjdXRvciRXb3JrZXIucnVuKFRocmVhZFBvb2xFeGVjdXRvci5qYXZhOjYxNSkNCglhdCBqYXZhLmxhbmcuVGhyZWFkLnJ1bihUaHJlYWQuamF2YTo3NDUpDQpDYXVzZWQgYnk6IGphdmEubGFuZy5Ob0NsYXNzRGVmRm91bmRFcnJvcjogU2VyaWFsaXphYmxlDQoJYXQgamF2YS5sYW5nLkNsYXNzTG9hZGVyLmRlZmluZUNsYXNzMShOYXRpdmUgTWV0aG9kKQ0KCWF0IGphdmEubGFuZy5DbGFzc0xvYWRlci5kZWZpbmVDbGFzcyhDbGFzc0xvYWRlci5qYXZhOjgwMCkNCglhdCBqYXZhLnNlY3VyaXR5LlNlY3VyZUNsYXNzTG9hZGVyLmRlZmluZUNsYXNzKFNlY3VyZUNsYXNzTG9hZGVyLmphdmE6MTQyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5maW5kQ2xhc3NJbnRlcm5hbChXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YTozMjIyKQ0KCWF0IG9yZy5hcGFjaGUuY2F0YWxpbmEubG9hZGVyLldlYmFwcENsYXNzTG9hZGVyQmFzZS5maW5kQ2xhc3MoV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmphdmE6MTQwOSkNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE4OTcpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNzcxKQ0KCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lMChOYXRpdmUgTWV0aG9kKQ0KCWF0IGphdmEubGFuZy5DbGFzcy5mb3JOYW1lKENsYXNzLmphdmE6Mjc0KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmlvLkNsYXNzTG9hZGVyV3JhcHBlci5jbGFzc0Zvck5hbWUoQ2xhc3NMb2FkZXJXcmFwcGVyLmphdmE6MTc4KQ0KCWF0IG9yZy5hcGFjaGUuaWJhdGlzLmlvLkNsYXNzTG9hZGVyV3JhcHBlci5jbGFzc0Zvck5hbWUoQ2xhc3NMb2FkZXJXcmFwcGVyLmphdmE6ODkpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuaW8uUmVzb3VyY2VzLmNsYXNzRm9yTmFtZShSZXNvdXJjZXMuamF2YToyNTYpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuYnVpbGRlci54bWwuWE1MQ29uZmlnQnVpbGRlci50eXBlQWxpYXNlc0VsZW1lbnQoWE1MQ29uZmlnQnVpbGRlci5qYXZhOjEyMykNCglhdCBvcmcuYXBhY2hlLmliYXRpcy5idWlsZGVyLnhtbC5YTUxDb25maWdCdWlsZGVyLnBhcnNlQ29uZmlndXJhdGlvbihYTUxDb25maWdCdWlsZGVyLmphdmE6OTkpDQoJYXQgb3JnLmFwYWNoZS5pYmF0aXMuYnVpbGRlci54bWwuWE1MQ29uZmlnQnVpbGRlci5wYXJzZShYTUxDb25maWdCdWlsZGVyLmphdmE6OTIpDQoJYXQgb3JnLm15YmF0aXMuc3ByaW5nLlNxbFNlc3Npb25GYWN0b3J5QmVhbi5idWlsZFNxbFNlc3Npb25GYWN0b3J5KFNxbFNlc3Npb25GYWN0b3J5QmVhbi5qYXZhOjQyOCkNCglhdCBvcmcubXliYXRpcy5zcHJpbmcuU3FsU2Vzc2lvbkZhY3RvcnlCZWFuLmFmdGVyUHJvcGVydGllc1NldChTcWxTZXNzaW9uRmFjdG9yeUJlYW4uamF2YTozNDApDQoJYXQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQWJzdHJhY3RBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeS5pbnZva2VJbml0TWV0aG9kcyhBYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmphdmE6MTYzNykNCglhdCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5BYnN0cmFjdEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5LmluaXRpYWxpemVCZWFuKEFic3RyYWN0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkuamF2YToxNTc0KQ0KCS4uLiAyNSBtb3JlDQpDYXVzZWQgYnk6IGphdmEubGFuZy5DbGFzc05vdEZvdW5kRXhjZXB0aW9uOiBTZXJpYWxpemFibGUNCglhdCBvcmcuYXBhY2hlLmNhdGFsaW5hLmxvYWRlci5XZWJhcHBDbGFzc0xvYWRlckJhc2UubG9hZENsYXNzKFdlYmFwcENsYXNzTG9hZGVyQmFzZS5qYXZhOjE5MjgpDQoJYXQgb3JnLmFwYWNoZS5jYXRhbGluYS5sb2FkZXIuV2ViYXBwQ2xhc3NMb2FkZXJCYXNlLmxvYWRDbGFzcyhXZWJhcHBDbGFzc0xvYWRlckJhc2UuamF2YToxNzcxKQ0KCS4uLiA0NCBtb3JlDQo=]解码成File文件[E:\FileTest\logs\test.log]

 

 

 

最后,大家觉得我写的不错的,可以关注下哦^v^,你的支持是对我最大的鼓励~

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值