返回列表 上一筆 下一筆

目前格式:HTML/XML

🧾 資料內容 (HTML/XML)

<script type="text/javascript" th:inline="javascript" layout:fragment="contentScript"

		th:object="${@sessionAccessor.user}">



		var app = new Vue({

			el: "#app",

			data: {

				// 準增員資料

				userData: {

					isNew: true,

					/* 文件上傳 */

					uploadDefines: [

						/*

						{

							jobType: "A1",

							fileType: "Head2inch",

							fileDesc: "二吋彩色大頭貼",

							fileHead: "二吋彩色大頭貼",

							uploaded: 1,

							alertMark: null,

							notAlertMarked: false,

							alertMarked: false

						}

						*/

					],

					/* 基本資料 */

					// 準增員主檔

					user: {

						// 使用者系統編號 Integer

						sysCode: "",

						// 身分證字號/帳號

						userId: "",

						// 姓名

						userName: "",

						// 羅馬拚音

						romanName: "",

						// 電子郵件

						email: "",

						// 手機號碼

						mobilePhone: "",

						// 出生日期 yyyyMMdd

						birthday: "",

						// 直屬主管登錄證號

						dsRegisterId: "",

						// 直屬主管

						dsAgent: {

							userId: "",

							userName: "",

							agentCode: "",

							registerNo: "",

							lineCode: "",

							agentChannel: "",

							mobilePhone: "",

							email: "",

							branchCode: "",

							branchName: "",

							branchManager: "",

							branchManagerEmail: "",

							branchManagerMobile: "",

							branchAssistant: "",

							centerCode: "",

							centerName: "",

							centerManager: "",

							centerManagerEmail: "",

							centerManagerMobile: "",

							levelCode: "",

							levelTitle: "",

							agentStatusCode: "",

							agentStatus: "",

							leaveDate: "",

							aguiCenter: "",

							aguiManager: "",

							aguiCenterName: "",

							createTime: ""

						},

						// 推薦人登錄證號

						refRegisterId: "",

						// 推薦人

						refAgent: {

							userId: "",

							userName: "",

							agentCode: "",

							registerNo: "",

							lineCode: "",

							agentChannel: "",

							mobilePhone: "",

							email: "",

							branchCode: "",

							branchName: "",

							branchManager: "",

							branchManagerEmail: "",

							branchManagerMobile: "",

							branchAssistant: "",

							centerCode: "",

							centerName: "",

							centerManager: "",

							centerManagerEmail: "",

							centerManagerMobile: "",

							levelCode: "",

							levelTitle: "",

							agentStatusCode: "",

							agentStatus: "",

							leaveDate: "",

							aguiCenter: "",

							aguiManager: "",

							aguiCenterName: "",

							createTime: ""

						},

						// 通訊處代號

						commCode: "",

						// 通訊處

						commUnit: {

							agentChannel: "",

							commCode: "",

							commName: "",

							areaCenter: {

								agentChannel: "",

								centerCode: "",

								centerName: "",

								isDelete: false

							},

							assistant: {

								employeeNo: "",

								employeeName: "",

								enableSendSms: false,

								enableSendEmail: false,

								email: "",

								mobilePhone: "",

								modifyTime: ""

							},

							isDelete: false

						},

						// 職務代碼

						jobId: "",

						// 職務類別

						jobType: "",

						// 新增時間 yyyy-MM-dd'T'HH:mm:ss

						createTime: "",

						// 修改時間 yyyy-MM-dd'T'HH:mm:ss

						modifyTime: "",

						// 狀態

						status: "",

						// 是否結案

						isClose: false,

						// 是否已簽署聲明事項

						agreementSigned: false

					},

					// 準增員詳細資料檔

					userDetail: {

						// 準增員主要key值

						sysCode: "",

						// 新增時間 yyyy-MM-dd'T'HH:mm:ss

						addDate: "",

						// 更新時間 yyyy-MM-dd'T'HH:mm:ss

						updDate: "",

						//

						enName: "",

						// 英文姓名

						eegName: "",

						// 報聘單位/推薦人/增員者

						myReferrer: "",

						// 同業經歷

						mySameExperience: "",

						// 是否有親屬在本公司任職

						isWorkHere: "",

						// Line ID

						lineID: "",

						// 性別

						sex: "",

						// 婚姻

						marry: "",

						// 血型

						blood: "",

						// 子女人數

						brood: "",

						// 住家電話

						tel1: "",

						// 行動電話

						tel2: "",

						// 電子郵件

						mail: "",

						// 原住民姓名

						romanName: "",

						// 緊急聯絡人姓名

						criName: "",

						// 緊急聯絡人關係 0:配偶 1:子女 2:父母 3:兄弟姐妹 4:朋友 5:其他

						criRel: "",

						// 緊急聯絡人電話

						criTel: "",

						// 學歷 0:其他 1:研究所 2:大學 3:專科 4:高中/職 5:國中 6:小學

						degree: "",

						// 最高學歷學校名稱

						school: "",

						// 科系

						major: "",

						// 畢業 0:畢業 1:肄業 2:其他

						grade: "",

						// 學校社團經驗 0:無 1:有

						asso: "",

						// 學校社團擔任幹部名稱

						assoName: "",

						// 公司名稱1

						com1: "",

						// 任職期間年(起)

						fdateY1: "",

						// 任職期間月(起)

						fdateM1: "",

						// 任職期間年(迄)

						tdateY1: "",

						// 任職期間月(迄)

						tdateM1: "",

						// 年資 ex:1.2(年)

						expt1: "",

						// 職稱

						title1: "",

						// 工作屬性 0:業務性 1:非業務性

						property1: "",

						// 年收入 萬元

						income1: "",

						// 行業別 0:保險業 1:金融業 2:醫療業 3:其他行業

						industry1: "",

						// 公司名稱2

						com2: "",

						// 任職期間年(起)

						fdateY2: "",

						// 任職期間月(起)

						fdateM2: "",

						// 任職期間年(迄)

						tdateY2: "",

						// 任職期間月(迄)

						tdateM2: "",

						// 年資 ex:1.2(年)

						expt2: "",

						// 職稱

						title2: "",

						// 工作屬性 0:業務性 1:非業務性

						property2: "",

						// 年收入 萬元

						income2: "",

						// 行業別 0:保險業 1:金融業 2:醫療業 3:其他行業

						industry2: "",

						// 公司名稱3

						com3: "",

						// 任職期間年(起)

						fdateY3: "",

						// 任職期間月(起)

						fdateM3: "",

						// 任職期間年(迄)

						tdateY3: "",

						// 任職期間月(迄)

						tdateM3: "",

						// 年資 ex:1.2(年)

						expt3: "",

						// 職稱

						title3: "",

						// 工作屬性 0:業務性 1:非業務性

						property3: "",

						// 年收入 萬元

						income3: "",

						// 行業別 0:保險業 1:金融業 2:醫療業 3:其他行業

						industry3: "",

						// 配偶職業

						partnerJob: "",

						// 壽險證照

						cert1: "",

						// 產險證照

						cert2: "",

						// 投資型證照

						cert3: "",

						// 配偶其他

						certElse: "",

						// 外幣證照

						cert4: "",

						// 身份證字號

						pid: "",

						// 戶籍地址

						addr1: "",

						// 戶籍地址-郵遞區號

						addr1PostalCode: "",

						// 戶籍地址-縣市

						addr1City: "",

						// 戶籍地址-鄉鎮市區

						addr1Towns: "",

						// 戶籍地址-路/段/道/街/村/里

						addr1Village: "",

						// 戶籍地址-鄰

						addr1RoadStreet: "",

						// 戶籍地址-巷

						addr1Lane: "",

						// 戶籍地址-弄

						addr1Alley: "",

						// 戶籍地址-衖

						addr1Section: "",

						// 戶籍地址-號

						addr1Number: "",

						// 戶籍地址-樓

						addr1Floor: "",

						// 戶籍地址-備註

						addr1Remark: "",

						// 通訊地址

						addr2: "",

						// 通訊地址-郵遞區號

						addr2PostalCode: "",

						// 通訊地址-縣市

						addr2City: "",

						// 通訊地址-鄉鎮市區

						addr2Towns: "",

						// 通訊地址-路/段/道/街/村/里

						addr2Village: "",

						// 通訊地址-鄰

						addr2RoadStreet: "",

						// 通訊地址-巷

						addr2Lane: "",

						// 通訊地址-弄

						addr2Alley: "",

						// 通訊地址-衖

						addr2Section: "",

						// 通訊地址-號

						addr2Number: "",

						// 通訊地址-樓

						addr2Floor: "",

						// 通訊地址-備註

						addr2Remark: "",

						// 兵役調查

						army: "",

						// 中信銀台幣帳務-分行名稱

						ctbcAccountBranch: "",

						// 中信銀台幣帳戶-帳號號碼

						ctbcAccountAccountNumber: "",

						// 是否有其他工作經歷 YN

						workOther: "",

						// 是否擔任過業務人員

						usedtobeAgent: "",

						// 是否曾任職本公司業務員(包含台灣/宏利/大都會人壽)

						usedtobeAgentTW: ""

					},

					/* 學經歷 */

					// 工作經驗

					userWorks: [

						/*

						{

							// 流水號

							seq: Integer,

							// 準增員主要key值

							sysCode: Integer,

							// 公司名稱

							companyName: String,

							// 工作期間-起 YYYY-MM-DD

							workStartDate: String,

							// 工作期間-迄 YYYY-MM-DD

							workEndDate: String,

							// 通訊處名稱-非必填

							branchName: String

						}

						*/

					],

					// 其他工作經歷

					userWorkOthers: [

						/*

						{

							// 流水號

							seq: Integer,

							// 準增員主要key值

							sysCode: Integer,

							// 公司名稱

							companyName: String,

							// 工作期間-起 YYYY-MM-DD

							workStartDate: String,

							// 工作期間-迄 YYYY-MM-DD

							workEndDate: String,

							// 職稱

							title: String,

							// 行業別

							jobkind: String,

							// 工作內容

							jobDesc: String

						}

						*/

					],

					/* 背景聲明 */

					userBackground: {

						// 準增員唯一值

						sysCode: "",

						// 信用報告分數 Integer

						creditRptDegree: "",

						// 信用報告日期 yyyy-MM-dd'T'HH:mm:ss

						creditRptDate: "",

						// 人身保險合格證號

						lifeRegisterId: "",

						// 人身保險登錄狀況 Integer

						lifeRegStatus: "",

						// 金融常識合格證號

						fincRegisterId: "",

						// 財產登錄狀況(TableL SystemCodeDef,CodeType:GenRegStatus)

						genRegStatus: "",

						// 是否有親屬在本公司擔任業務員YN

						parentAgent: "",

						// 親屬姓名

						parentName: "",

						// 親屬關係(TableL SystemCodeDef,CodeType:ParentReal)

						parentRela: "",

						// 業務人員管理規則懲處紀錄(Y: 有 N:無)

						punishHistory: "",

						// 業務人員管理規則懲處紀錄詳細說明

						punishHisDetail: "",

						// 是否有犯罪紀錄(Y: 有 N:無)

						crimeHistory: "",

						// 犯罪紀錄詳細說明

						crimeDetail: "",

						// 公會懲處紀錄 (Y: 有 N:無)

						liaPunishHistory: "",

						// 公會懲處紀錄詳細說明

						liaPunishHisDetail: ""

					}

				},

// 				hasWorkExp: false,

// 				hasWorkOtherExp: false,

				alert: {

					form01: false,

					form02: false,

					form03: false,

					form04: false

				},

				link: {

					// 壽險公會連結

					lifeOrg: "http://public.liaroc.org.tw/lia-public/indexUsr.jsp",

					// 產險公會連結

					generalOrg: "http://salesinfo.nlia.org.tw/index.php"

				}

			},

			beforeMount() {

				// 準增員資料

				var vm = this;

				var userData = /*[[${@requestAccessor.getAttribute(T(com.taiwanlife.recruit.enums.ModelKey).USER_DATA)}]]*/ {};

				// 初始值

				var nestedEmptyValue = function(value) {

					if ($.isArray(value)) {

						for (var val of value) {

							if ("string" === typeof(val)) {

								val = val || "";

							} else {

								nestedEmptyValue(val);

							}

						}

					} else if ($.isPlainObject(value)) {

						for (var key in value) {

							if ("string" === typeof(value[key]) || undefined == value[key] || null == value[key]) {

								value[key] = value[key] || "";

							} else {

								nestedEmptyValue(value[key]);

							}

						}

					}

				};

				nestedEmptyValue(userData);

				this.userData = $.extend(true, {}, this.userData, userData);

// 				if (this.userData.userWorks && this.userData.userWorks.length > 0) {

// 					this.hasWorkExp = true;

// 				}

				if (!this.userData.userDetail.workOther) {

					if (this.userData.userWorkOthers && this.userData.userWorkOthers.length > 0) {

						this.userData.userDetail.workOther = "Y";

					} else {

						this.userData.userDetail.workOther = "N";

					}

				}

// 				this.hasWorkOtherExp = "Y" == this.userData.userDetail.workOther;

			},

			mounted() {

				setTab("tablist");

				this.init();

			},

			methods: {

				init() {

					this.initRule();

					if (false === this.userData.isNew) {

						this.showTabAlert();

					}

				},

				initRule() {

					var errorPlacement = function (error, element) {

						var ename = element.attr("name");

						if (/^uploadFile/.test(ename)) {

							$(element).closest("table").next().append(error);

						} else if (/^addr/.test(ename) || /History/.test(ename) || /^parent[Name|Rela]/.test(ename)) {

							$(element).closest("td").parent().children().last().append(error);

						} else {

							$(element).parent().children().last().after(error);

						}

					};

					var defaultSettings = {

						errorElement: "div",

						errorPlacement: errorPlacement

					}

					var form01Settings = {

						rules: {},

						messages: {}

					};

					for (var index in this.userData.uploadDefines) {

						if (this.userData.uploadDefines[index].mustFlag == "Y") {

							form01Settings.rules[`uploadFile${parseInt(index) + 1}`] = {

									required: {

										depends: function(element) {

											return "0" == $(element).prev().val();

										}

									}

								};

								form01Settings.messages[`uploadFile${parseInt(index) + 1}`] = { required: `請上傳${this.userData.uploadDefines[index].fileHead}${"Head2inch" == this.userData.uploadDefines[index].fileType ? "(上傳格式限 JPG)" : ""}` };



						}

					}

					$("#form01").validate($.extend(true, {}, defaultSettings, form01Settings));

					$("#form02").validate($.extend(true, {}, defaultSettings, {

						rules: {

							userName: {

								required: true,

								maxlength: 200

							},

							romanName: {

								maxlength: 200,

								format: ego.validator.pattern.romanName

							},

							birthday: {

								required: true,

								maxlength: 8

							},

							mobilePhone: {

								maxlength: 20,

								required: true,

								mobilePhone: true

							},

							tel1: {

								maxlength: 20,

								format: ego.validator.pattern.telephone

							},

							email: {

								required: true,

								email: true,

								blockEmail: true,

								maxlength: 50

							},

							army: {

								required: true

							},

							ctbcAccountBranch: {

								required: true

							},

							ctbcAccountAccountNumber: {

								required: true,

								digits: true,

								format: ego.validator.pattern.accountNumber

							}

						}, messages: {

							userName: {

								required: "請輸入姓名",

							},

							romanName: {

								format: "原住民姓名不符合條件,請重新輸入",

							},

							birthday: {

								required: "請選擇出生年月日"

							},

							mobilePhone: {

								required: "請輸入手機號碼",

								mobilePhone: "手機號碼不符合條件,請重新輸入",

							},

							tel1: {

								format: "住家電話不符合條件,請重新輸入"

							},

							email: {

								required: "請輸入電子郵件",

								email: "電子郵件不符合條件,請重新輸入"

							},

							army: {

								required: "請選擇兵役調查",

							},

							ctbcAccountBranch: {

								required: "請輸入中信銀台幣銀行帳戶-分行",

							},

							ctbcAccountAccountNumber: {

								required: "請輸入中信銀台幣銀行帳戶-帳號",

								digits: "中信銀台幣銀行帳戶-帳號不符合條件,請重新輸入",

								format: "中信銀台幣銀行帳戶-帳號不符合條件,請重新輸入"

							}

						}

					}));

					$("#form04").validate($.extend(true, {}, defaultSettings, {

						rules: {

							creditRptDegree: {

								required: true,

								creditRptDegree: true

							},

							creditRptDate: {

								required: true

							},

							lifeRegisterId: {

								required: true,

								format: ego.validator.pattern.lifeRegisterId

							},

							lifeRegStatus: {

								required: true

							},

							genRegStatus: {

								required: true

							},

							parentName: {

								required: {

									depends: function(element) {

										return "Y" == $("input[name=parentAgent]:checked").val();

									}

								}

							},

							parentRela: {

								required: {

									depends: function(element) {

										return "Y" == $("input[name=parentAgent]:checked").val();

									}

								}

							},

							punishHistory: {

								required: true

							},

							punishHisDetail: {

								required: {

									depends: function(element) {

										return "Y" == $("input[name=punishHistory]:checked").val();

									}

								}

							},

							liaPunishHistory: {

								required: true

							},

							liaPunishHisDetail: {

								required: {

									depends: function(element) {

										return "Y" == $("input[name=liaPunishHistory]:checked").val();

									}

								}

							},

							crimeHistory: {

								required: true

							},

							crimeDetail: {

								required: {

									depends: function(element) {

										return "Y" == $("input[name=crimeHistory]:checked").val();

									}

								}

							}

						}, messages: {

							creditRptDegree: {

								required: "請輸入信用報告分數或無法評分",

								creditRptDegree: "請輪入分數或無法評分"

							},

							creditRptDate: {

								required: "請選擇信用報告日期"

							},

							lifeRegisterId: {

								required: "請輸入人身保險合格證號"

							},

							lifeRegStatus: {

								required: "請勾選人身保險登錄狀況"

							},

							genRegStatus: {

								required: "請勾選財產保險登錄狀況"

							},

							parentName: {

								required: "請輸入親屬姓名"

							},

							parentRela: {

								required: "請選擇親屬關係"

							},

							punishHistory: {

								required: "請勾選是否曾違反業務人員管理規則而受懲處紀錄"

							},

							punishHisDetail: {

								required: "請輸入受懲處紀錄詳細說明"

							},

							liaPunishHistory: {

								required: "請勾選是否曾受公會懲處紀錄"

							},

							liaPunishHisDetail: {

								required: "請輸入公會懲處紀錄詳細說明"

							},

							crimeHistory: {

								required: "請勾選是否有刑事犯罪紀錄"

							},

							crimeDetail: {

								required: "請輸入刑事犯罪紀錄詳細說明"

							}

						}

					}));

				},

				showTabAlert() {

					for (var form in this.alert) {

						this.alert[`${form}`] = !$(`#${form}`).valid();

					}

				},

// 				generateKey(key, index) {

// 					if (index || $.isNumeric(index)) {

// 						return `${key}${index + 1}`;

// 					}

// 					return key;

// 				},

				handleCreditRptDegree(event) {

					if (/^0/.test(event.target.value)) {

						this.userData.userBackground.creditRptDegree = event.target.value.substring(1);

					}

				},

				handleDate(target, date) {

					let form = $(target).closest("form").attr("id");

					let element = $(target).attr("id");

					switch (element) {

						case "birthday":

							this.userData.user.birthday = date;

							break;

						case "creditRptDate":

							this.userData.userBackground.creditRptDate = date;

							break;

						default:

							let index = element.substr(-1);

							let work = this.userData[element.split('_')[0]][index];

							if (!work){

								work = {};

								this.userData[element.split('_')[0]][index] = work;

							}

							work[element.split('_')[1]] = date;

							if ($(target).prevAll('input.hasMonthpicker')) {

								$(target).prevAll('input.hasMonthpicker').monthpicker("option", "maxDate", date);

							}

							if ($(target).nextAll('input.hasMonthpicker')) {

								$(target).nextAll('input.hasMonthpicker').monthpicker("option", "minDate", date);

							}

							break;

					}

				},

				handleDependency(event) {

					var form = $(event.target).closest("form").attr("id");

					var elements = Array.prototype.slice.call(arguments, 1)

					elements.forEach(function(item, index) {

						$(`#${form}`).validate().element(`#${item}`);

					});

				},

				handleChange(e) {

					let formId = $(e.target).closest("form").attr("id");

					let el = e.target;

					this.$nextTick(() => {

						if (el) {

					    	$(`#${formId}`).validate().element(el);

					    }

					});

				},

				handleAddress(e){

					let form = $(e.target).closest("form").attr("id");

					let element = $(e.target).attr("id");

					if (/\d/g.test(e.target.value)){

						let tempStr = '';

						for(let i=0;i<e.target.value.toString().length;i++){

							let numCode = e.target.value.toString().charCodeAt(i);

							if (numCode <= 0x007E && numCode >= 0x0021){

								numCode += 0xFEE0;

							}

							tempStr += String.fromCharCode(numCode);

						}

						e.target.value = tempStr;

					}

					this.userData.userDetail[element] = e.target.value;

					this.$nextTick(()=>$(`#${form}`).validate().element(`#${element}`));

				},

				handleWork(event){

					let element = event.target.id;

					let index = element.substr(-1);

					let work = this.userData[element.split('_')[0]][index];

					if (!work){

						work = {};

						this.userData[element.split('_')[0]][index] = work;

					}

					work[element.split('_')[1]] = event.target.value;

				},

				focusoutName(event) {

					let formId = $(event.target).closest("form").attr("id");

					let el = event.target;

					switch (event.target.id) {

						case 'userName':

					    	this.userData.user.userName = event.target.value;

					    	break;

					    case 'romanName':

					    	this.userData.user.romanName = event.target.value;

					    	break;

					    case 'criName':

					    	this.userData.userDetail.criName = event.target.value;

					    	break;

					}

					this.$nextTick(() => {

						if (el) {

					    	$(`#${formId}`).validate().element(el);

					    }

					});

				},

				save(event) {

					// 暫存

					this.showTabAlert();

					if (!ego.ajax.updateUserDataTemp(this.userData)) {

						ego.dialog.error("暫存失敗,請稍候再試", window.location.href);

					} else {

						ego.dialog.alert("暫存成功", window.location.href);

					}

				},

				handleFile(target, status) {

					$(target).closest("form").validate().element(`#${$(target).attr("id")}`);

				},

				apply(event) {

					this.showTabAlert();

					for (var form in this.alert) {

						if (!$(`#${form}`).valid()) {

							ego.dialog.error("請確認報聘資料填寫完整,再行遞交申請。");

							return;

						}

					}

					if (!ego.ajax.updateUserDataTemp(this.userData)) { // 暫存

						ego.dialog.error("遞交申請失敗,請稍候再試", window.location.href);

					} else if (!ego.ajax.applyUserData(this.userData.user.sysCode)) { // 遞交申請

						ego.dialog.error("遞交申請失敗,請稍候再試", window.location.href);

					} else {

						if (this.userData.user.commUnit.agentChannel == "A1") {

							ego.dialog.alert(`恭喜您已完成報聘文件遞交,審核結果將會另行通知。 <br/><br/>以下正本文件請您交給各地區行政助理。<br/>1. 合約書<br/>2. 聯徵個人信用報告<br/>3. 二吋彩色照片1張<br/>4. 信用卡共銷承諾聲明書及試卷<br/>5. 自費參加團體保險申請書<br/>6. 報聘SR須另繳交行銷代表備忘錄、SR商品及法規課程訓練紀錄${"3" == this.userData.userBackground.genRegStatus ? "<br/>7. 人身保險業務員登錄申請書正本" : ""}`, url.user.portal);

						} else {

							if (this.userData.user.jobType == "A2S" ) {

								ego.dialog.alert(`恭喜您已完成報聘文件遞交,審核結果將會另行通知。 <br/><br/>以下正本文件請您交給各地區行政助理。<br/>1. 合約書<br/>2. 聯徵個人信用報告<br/>3. 二吋彩色照片1張<br/>4. 信用卡共銷承諾聲明書及試卷${"3" == this.userData.userBackground.genRegStatus ? "<br/>5. 人身保險業務員登錄申請書正本" : ""}`, url.user.portal);

							}

							else {

								ego.dialog.alert(`恭喜您已完成報聘文件遞交,審核結果將會另行通知。 <br/><br/>以下正本文件請您交給各地區行政助理。<br/>1. 合約書<br/>2. 聯徵個人信用報告<br/>3. 二吋彩色照片1張<br/>4. 信用卡共銷承諾聲明書及試卷<br/>5. 公費團體眷屬加入表(聘僱合約)${"3" == this.userData.userBackground.genRegStatus ? "<br/>6. 人身保險業務員登錄申請書正本" : ""}`, url.user.portal);

							}

						}

					}

				}

			}

		});

	</script>

🔐 Base64 編碼內容

PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHRoOmlubGluZT0iamF2YXNjcmlwdCIgbGF5b3V0OmZyYWdtZW50PSJjb250ZW50U2NyaXB0IgoKCQl0aDpvYmplY3Q9IiR7QHNlc3Npb25BY2Nlc3Nvci51c2VyfSI+CgoKCgkJdmFyIGFwcCA9IG5ldyBWdWUoewoKCQkJZWw6ICIjYXBwIiwKCgkJCWRhdGE6IHsKCgkJCQkvLyDmupblop7lk6Hos4fmlpkKCgkJCQl1c2VyRGF0YTogewoKCQkJCQlpc05ldzogdHJ1ZSwKCgkJCQkJLyog5paH5Lu25LiK5YKzICovCgoJCQkJCXVwbG9hZERlZmluZXM6IFsKCgkJCQkJCS8qCgoJCQkJCQl7CgoJCQkJCQkJam9iVHlwZTogIkExIiwKCgkJCQkJCQlmaWxlVHlwZTogIkhlYWQyaW5jaCIsCgoJCQkJCQkJZmlsZURlc2M6ICLkuozlkIvlvanoibLlpKfpoK3osrwiLAoKCQkJCQkJCWZpbGVIZWFkOiAi5LqM5ZCL5b2p6Imy5aSn6aCt6LK8IiwKCgkJCQkJCQl1cGxvYWRlZDogMSwKCgkJCQkJCQlhbGVydE1hcms6IG51bGwsCgoJCQkJCQkJbm90QWxlcnRNYXJrZWQ6IGZhbHNlLAoKCQkJCQkJCWFsZXJ0TWFya2VkOiBmYWxzZQoKCQkJCQkJfQoKCQkJCQkJKi8KCgkJCQkJXSwKCgkJCQkJLyog5Z+65pys6LOH5paZICovCgoJCQkJCS8vIOa6luWinuWToeS4u+aqlAoKCQkJCQl1c2VyOiB7CgoJCQkJCQkvLyDkvb/nlKjogIXns7vntbHnt6jomZ8gSW50ZWdlcgoKCQkJCQkJc3lzQ29kZTogIiIsCgoJCQkJCQkvLyDouqvliIborYnlrZfomZ8v5biz6JmfCgoJCQkJCQl1c2VySWQ6ICIiLAoKCQkJCQkJLy8g5aeT5ZCNCgoJCQkJCQl1c2VyTmFtZTogIiIsCgoJCQkJCQkvLyDnvoXppqzmi5rpn7MKCgkJCQkJCXJvbWFuTmFtZTogIiIsCgoJCQkJCQkvLyDpm7vlrZDpg7Xku7YKCgkJCQkJCWVtYWlsOiAiIiwKCgkJCQkJCS8vIOaJi+apn+iZn+eivAoKCQkJCQkJbW9iaWxlUGhvbmU6ICIiLAoKCQkJCQkJLy8g5Ye655Sf5pel5pyfIHl5eXlNTWRkCgoJCQkJCQliaXJ0aGRheTogIiIsCgoJCQkJCQkvLyDnm7TlsazkuLvnrqHnmbvpjITorYnomZ8KCgkJCQkJCWRzUmVnaXN0ZXJJZDogIiIsCgoJCQkJCQkvLyDnm7TlsazkuLvnrqEKCgkJCQkJCWRzQWdlbnQ6IHsKCgkJCQkJCQl1c2VySWQ6ICIiLAoKCQkJCQkJCXVzZXJOYW1lOiAiIiwKCgkJCQkJCQlhZ2VudENvZGU6ICIiLAoKCQkJCQkJCXJlZ2lzdGVyTm86ICIiLAoKCQkJCQkJCWxpbmVDb2RlOiAiIiwKCgkJCQkJCQlhZ2VudENoYW5uZWw6ICIiLAoKCQkJCQkJCW1vYmlsZVBob25lOiAiIiwKCgkJCQkJCQllbWFpbDogIiIsCgoJCQkJCQkJYnJhbmNoQ29kZTogIiIsCgoJCQkJCQkJYnJhbmNoTmFtZTogIiIsCgoJCQkJCQkJYnJhbmNoTWFuYWdlcjogIiIsCgoJCQkJCQkJYnJhbmNoTWFuYWdlckVtYWlsOiAiIiwKCgkJCQkJCQlicmFuY2hNYW5hZ2VyTW9iaWxlOiAiIiwKCgkJCQkJCQlicmFuY2hBc3Npc3RhbnQ6ICIiLAoKCQkJCQkJCWNlbnRlckNvZGU6ICIiLAoKCQkJCQkJCWNlbnRlck5hbWU6ICIiLAoKCQkJCQkJCWNlbnRlck1hbmFnZXI6ICIiLAoKCQkJCQkJCWNlbnRlck1hbmFnZXJFbWFpbDogIiIsCgoJCQkJCQkJY2VudGVyTWFuYWdlck1vYmlsZTogIiIsCgoJCQkJCQkJbGV2ZWxDb2RlOiAiIiwKCgkJCQkJCQlsZXZlbFRpdGxlOiAiIiwKCgkJCQkJCQlhZ2VudFN0YXR1c0NvZGU6ICIiLAoKCQkJCQkJCWFnZW50U3RhdHVzOiAiIiwKCgkJCQkJCQlsZWF2ZURhdGU6ICIiLAoKCQkJCQkJCWFndWlDZW50ZXI6ICIiLAoKCQkJCQkJCWFndWlNYW5hZ2VyOiAiIiwKCgkJCQkJCQlhZ3VpQ2VudGVyTmFtZTogIiIsCgoJCQkJCQkJY3JlYXRlVGltZTogIiIKCgkJCQkJCX0sCgoJCQkJCQkvLyDmjqjolqbkurrnmbvpjITorYnomZ8KCgkJCQkJCXJlZlJlZ2lzdGVySWQ6ICIiLAoKCQkJCQkJLy8g5o6o6Jam5Lq6CgoJCQkJCQlyZWZBZ2VudDogewoKCQkJCQkJCXVzZXJJZDogIiIsCgoJCQkJCQkJdXNlck5hbWU6ICIiLAoKCQkJCQkJCWFnZW50Q29kZTogIiIsCgoJCQkJCQkJcmVnaXN0ZXJObzogIiIsCgoJCQkJCQkJbGluZUNvZGU6ICIiLAoKCQkJCQkJCWFnZW50Q2hhbm5lbDogIiIsCgoJCQkJCQkJbW9iaWxlUGhvbmU6ICIiLAoKCQkJCQkJCWVtYWlsOiAiIiwKCgkJCQkJCQlicmFuY2hDb2RlOiAiIiwKCgkJCQkJCQlicmFuY2hOYW1lOiAiIiwKCgkJCQkJCQlicmFuY2hNYW5hZ2VyOiAiIiwKCgkJCQkJCQlicmFuY2hNYW5hZ2VyRW1haWw6ICIiLAoKCQkJCQkJCWJyYW5jaE1hbmFnZXJNb2JpbGU6ICIiLAoKCQkJCQkJCWJyYW5jaEFzc2lzdGFudDogIiIsCgoJCQkJCQkJY2VudGVyQ29kZTogIiIsCgoJCQkJCQkJY2VudGVyTmFtZTogIiIsCgoJCQkJCQkJY2VudGVyTWFuYWdlcjogIiIsCgoJCQkJCQkJY2VudGVyTWFuYWdlckVtYWlsOiAiIiwKCgkJCQkJCQljZW50ZXJNYW5hZ2VyTW9iaWxlOiAiIiwKCgkJCQkJCQlsZXZlbENvZGU6ICIiLAoKCQkJCQkJCWxldmVsVGl0bGU6ICIiLAoKCQkJCQkJCWFnZW50U3RhdHVzQ29kZTogIiIsCgoJCQkJCQkJYWdlbnRTdGF0dXM6ICIiLAoKCQkJCQkJCWxlYXZlRGF0ZTogIiIsCgoJCQkJCQkJYWd1aUNlbnRlcjogIiIsCgoJCQkJCQkJYWd1aU1hbmFnZXI6ICIiLAoKCQkJCQkJCWFndWlDZW50ZXJOYW1lOiAiIiwKCgkJCQkJCQljcmVhdGVUaW1lOiAiIgoKCQkJCQkJfSwKCgkJCQkJCS8vIOmAmuioiuiZleS7o+iZnwoKCQkJCQkJY29tbUNvZGU6ICIiLAoKCQkJCQkJLy8g6YCa6KiK6JmVCgoJCQkJCQljb21tVW5pdDogewoKCQkJCQkJCWFnZW50Q2hhbm5lbDogIiIsCgoJCQkJCQkJY29tbUNvZGU6ICIiLAoKCQkJCQkJCWNvbW1OYW1lOiAiIiwKCgkJCQkJCQlhcmVhQ2VudGVyOiB7CgoJCQkJCQkJCWFnZW50Q2hhbm5lbDogIiIsCgoJCQkJCQkJCWNlbnRlckNvZGU6ICIiLAoKCQkJCQkJCQljZW50ZXJOYW1lOiAiIiwKCgkJCQkJCQkJaXNEZWxldGU6IGZhbHNlCgoJCQkJCQkJfSwKCgkJCQkJCQlhc3Npc3RhbnQ6IHsKCgkJCQkJCQkJZW1wbG95ZWVObzogIiIsCgoJCQkJCQkJCWVtcGxveWVlTmFtZTogIiIsCgoJCQkJCQkJCWVuYWJsZVNlbmRTbXM6IGZhbHNlLAoKCQkJCQkJCQllbmFibGVTZW5kRW1haWw6IGZhbHNlLAoKCQkJCQkJCQllbWFpbDogIiIsCgoJCQkJCQkJCW1vYmlsZVBob25lOiAiIiwKCgkJCQkJCQkJbW9kaWZ5VGltZTogIiIKCgkJCQkJCQl9LAoKCQkJCQkJCWlzRGVsZXRlOiBmYWxzZQoKCQkJCQkJfSwKCgkJCQkJCS8vIOiBt+WLmeS7o+eivAoKCQkJCQkJam9iSWQ6ICIiLAoKCQkJCQkJLy8g6IG35YuZ6aGe5YilCgoJCQkJCQlqb2JUeXBlOiAiIiwKCgkJCQkJCS8vIOaWsOWinuaZgumWkyB5eXl5LU1NLWRkJ1QnSEg6bW06c3MKCgkJCQkJCWNyZWF0ZVRpbWU6ICIiLAoKCQkJCQkJLy8g5L+u5pS55pmC6ZaTIHl5eXktTU0tZGQnVCdISDptbTpzcwoKCQkJCQkJbW9kaWZ5VGltZTogIiIsCgoJCQkJCQkvLyDni4DmhYsKCgkJCQkJCXN0YXR1czogIiIsCgoJCQkJCQkvLyDmmK/lkKbntZDmoYgKCgkJCQkJCWlzQ2xvc2U6IGZhbHNlLAoKCQkJCQkJLy8g5piv5ZCm5bey57C9572y6IGy5piO5LqL6aCFCgoJCQkJCQlhZ3JlZW1lbnRTaWduZWQ6IGZhbHNlCgoJCQkJCX0sCgoJCQkJCS8vIOa6luWinuWToeips+e0sOizh+aWmeaqlAoKCQkJCQl1c2VyRGV0YWlsOiB7CgoJCQkJCQkvLyDmupblop7lk6HkuLvopoFrZXnlgLwKCgkJCQkJCXN5c0NvZGU6ICIiLAoKCQkJCQkJLy8g5paw5aKe5pmC6ZaTIHl5eXktTU0tZGQnVCdISDptbTpzcwoKCQkJCQkJYWRkRGF0ZTogIiIsCgoJCQkJCQkvLyDmm7TmlrDmmYLplpMgeXl5eS1NTS1kZCdUJ0hIOm1tOnNzCgoJCQkJCQl1cGREYXRlOiAiIiwKCgkJCQkJCS8vIAoKCQkJCQkJZW5OYW1lOiAiIiwKCgkJCQkJCS8vIOiLseaWh+Wnk+WQjQoKCQkJCQkJZWVnTmFtZTogIiIsCgoJCQkJCQkvLyDloLHogZjllq7kvY0v5o6o6Jam5Lq6L+WinuWToeiAhQoKCQkJCQkJbXlSZWZlcnJlcjogIiIsCgoJCQkJCQkvLyDlkIzmpa3ntpPmrbcKCgkJCQkJCW15U2FtZUV4cGVyaWVuY2U6ICIiLAoKCQkJCQkJLy8g5piv5ZCm5pyJ6Kaq5bGs5Zyo5pys5YWs5Y+45Lu76IG3CgoJCQkJCQlpc1dvcmtIZXJlOiAiIiwKCgkJCQkJCS8vIExpbmUgSUQKCgkJCQkJCWxpbmVJRDogIiIsCgoJCQkJCQkvLyDmgKfliKUKCgkJCQkJCXNleDogIiIsCgoJCQkJCQkvLyDlqZrlp7sKCgkJCQkJCW1hcnJ5OiAiIiwKCgkJCQkJCS8vIOihgOWeiwoKCQkJCQkJYmxvb2Q6ICIiLAoKCQkJCQkJLy8g5a2Q5aWz5Lq65pW4CgoJCQkJCQlicm9vZDogIiIsCgoJCQkJCQkvLyDkvY/lrrbpm7voqbEKCgkJCQkJCXRlbDE6ICIiLAoKCQkJCQkJLy8g6KGM5YuV6Zu76KmxCgoJCQkJCQl0ZWwyOiAiIiwKCgkJCQkJCS8vIOmbu+WtkOmDteS7tgoKCQkJCQkJbWFpbDogIiIsCgoJCQkJCQkvLyDljp/kvY/msJHlp5PlkI0KCgkJCQkJCXJvbWFuTmFtZTogIiIsCgoJCQkJCQkvLyDnt4rmgKXoga/ntaHkurrlp5PlkI0KCgkJCQkJCWNyaU5hbWU6ICIiLAoKCQkJCQkJLy8g57eK5oCl6IGv57Wh5Lq66Zec5L+CIDA66YWN5YG2IDE65a2Q5aWzIDI654i25q+NIDM65YWE5byf5aeQ5aa5IDQ65pyL5Y+LIDU65YW25LuWCgoJCQkJCQljcmlSZWw6ICIiLAoKCQkJCQkJLy8g57eK5oCl6IGv57Wh5Lq66Zu76KmxCgoJCQkJCQljcmlUZWw6ICIiLAoKCQkJCQkJLy8g5a245q23IDA65YW25LuWIDE656CU56m25omAIDI65aSn5a24IDM65bCI56eRIDQ66auY5LitL+iBtyA1OuWci+S4rSA2OuWwj+WtuAoKCQkJCQkJZGVncmVlOiAiIiwKCgkJCQkJCS8vIOacgOmrmOWtuOatt+WtuOagoeWQjeeosQoKCQkJCQkJc2Nob29sOiAiIiwKCgkJCQkJCS8vIOenkeezuwoKCQkJCQkJbWFqb3I6ICIiLAoKCQkJCQkJLy8g55Wi5qWtIDA655Wi5qWtIDE66IKE5qWtIDI65YW25LuWCgoJCQkJCQlncmFkZTogIiIsCgoJCQkJCQkvLyDlrbjmoKHnpL7lnJjntpPpqZcgMDrnhKEgMTrmnIkKCgkJCQkJCWFzc286ICIiLAoKCQkJCQkJLy8g5a245qCh56S+5ZyY5pOU5Lu75bm56YOo5ZCN56ixCgoJCQkJCQlhc3NvTmFtZTogIiIsCgoJCQkJCQkvLyDlhazlj7jlkI3nqLExCgoJCQkJCQljb20xOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjotbcpCgoJCQkJCQlmZGF0ZVkxOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjotbcpCgoJCQkJCQlmZGF0ZU0xOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjov4QpCgoJCQkJCQl0ZGF0ZVkxOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjov4QpCgoJCQkJCQl0ZGF0ZU0xOiAiIiwKCgkJCQkJCS8vIOW5tOizhyBleDoxLjIo5bm0KQoKCQkJCQkJZXhwdDE6ICIiLAoKCQkJCQkJLy8g6IG356ixCgoJCQkJCQl0aXRsZTE6ICIiLAoKCQkJCQkJLy8g5bel5L2c5bGs5oCnIDA65qWt5YuZ5oCnIDE66Z2e5qWt5YuZ5oCnCgoJCQkJCQlwcm9wZXJ0eTE6ICIiLAoKCQkJCQkJLy8g5bm05pS25YWlIOiQrOWFgwoKCQkJCQkJaW5jb21lMTogIiIsCgoJCQkJCQkvLyDooYzmpa3liKUgMDrkv53pmqrmpa0gMTrph5Hono3mpa0gMjrphqvnmYLmpa0gMzrlhbbku5booYzmpa0KCgkJCQkJCWluZHVzdHJ5MTogIiIsCgoJCQkJCQkvLyDlhazlj7jlkI3nqLEyCgoJCQkJCQljb20yOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjotbcpCgoJCQkJCQlmZGF0ZVkyOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjotbcpCgoJCQkJCQlmZGF0ZU0yOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjov4QpCgoJCQkJCQl0ZGF0ZVkyOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjov4QpCgoJCQkJCQl0ZGF0ZU0yOiAiIiwKCgkJCQkJCS8vIOW5tOizhyBleDoxLjIo5bm0KQoKCQkJCQkJZXhwdDI6ICIiLAoKCQkJCQkJLy8g6IG356ixCgoJCQkJCQl0aXRsZTI6ICIiLAoKCQkJCQkJLy8g5bel5L2c5bGs5oCnIDA65qWt5YuZ5oCnIDE66Z2e5qWt5YuZ5oCnCgoJCQkJCQlwcm9wZXJ0eTI6ICIiLAoKCQkJCQkJLy8g5bm05pS25YWlIOiQrOWFgwoKCQkJCQkJaW5jb21lMjogIiIsCgoJCQkJCQkvLyDooYzmpa3liKUgMDrkv53pmqrmpa0gMTrph5Hono3mpa0gMjrphqvnmYLmpa0gMzrlhbbku5booYzmpa0KCgkJCQkJCWluZHVzdHJ5MjogIiIsCgoJCQkJCQkvLyDlhazlj7jlkI3nqLEzCgoJCQkJCQljb20zOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjotbcpCgoJCQkJCQlmZGF0ZVkzOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjotbcpCgoJCQkJCQlmZGF0ZU0zOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjov4QpCgoJCQkJCQl0ZGF0ZVkzOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjov4QpCgoJCQkJCQl0ZGF0ZU0zOiAiIiwKCgkJCQkJCS8vIOW5tOizhyBleDoxLjIo5bm0KQoKCQkJCQkJZXhwdDM6ICIiLAoKCQkJCQkJLy8g6IG356ixCgoJCQkJCQl0aXRsZTM6ICIiLAoKCQkJCQkJLy8g5bel5L2c5bGs5oCnIDA65qWt5YuZ5oCnIDE66Z2e5qWt5YuZ5oCnCgoJCQkJCQlwcm9wZXJ0eTM6ICIiLAoKCQkJCQkJLy8g5bm05pS25YWlIOiQrOWFgwoKCQkJCQkJaW5jb21lMzogIiIsCgoJCQkJCQkvLyDooYzmpa3liKUgMDrkv53pmqrmpa0gMTrph5Hono3mpa0gMjrphqvnmYLmpa0gMzrlhbbku5booYzmpa0KCgkJCQkJCWluZHVzdHJ5MzogIiIsCgoJCQkJCQkvLyDphY3lgbbogbfmpa0KCgkJCQkJCXBhcnRuZXJKb2I6ICIiLAoKCQkJCQkJLy8g5aO96Zqq6K2J54WnCgoJCQkJCQljZXJ0MTogIiIsCgoJCQkJCQkvLyDnlKLpmqrorYnnhacKCgkJCQkJCWNlcnQyOiAiIiwKCgkJCQkJCS8vIOaKleizh+Wei+itieeFpwoKCQkJCQkJY2VydDM6ICIiLAoKCQkJCQkJLy8g6YWN5YG25YW25LuWCgoJCQkJCQljZXJ0RWxzZTogIiIsCgoJCQkJCQkvLyDlpJbluaPorYnnhacKCgkJCQkJCWNlcnQ0OiAiIiwKCgkJCQkJCS8vIOi6q+S7veitieWtl+iZnwoKCQkJCQkJcGlkOiAiIiwKCgkJCQkJCS8vIOaItuexjeWcsOWdgAoKCQkJCQkJYWRkcjE6ICIiLAoKCQkJCQkJLy8g5oi257GN5Zyw5Z2ALemDtemBnuWNgOiZnwoKCQkJCQkJYWRkcjFQb3N0YWxDb2RlOiAiIiwKCgkJCQkJCS8vIOaItuexjeWcsOWdgC3nuKPluIIKCgkJCQkJCWFkZHIxQ2l0eTogIiIsCgoJCQkJCQkvLyDmiLbnsY3lnLDlnYAt6YSJ6Y6u5biC5Y2ACgoJCQkJCQlhZGRyMVRvd25zOiAiIiwKCgkJCQkJCS8vIOaItuexjeWcsOWdgC3ot68v5q61L+mBky/ooZcv5p2RL+mHjAoKCQkJCQkJYWRkcjFWaWxsYWdlOiAiIiwKCgkJCQkJCS8vIOaItuexjeWcsOWdgC3phLAKCgkJCQkJCWFkZHIxUm9hZFN0cmVldDogIiIsCgoJCQkJCQkvLyDmiLbnsY3lnLDlnYAt5be3CgoJCQkJCQlhZGRyMUxhbmU6ICIiLAoKCQkJCQkJLy8g5oi257GN5Zyw5Z2ALeW8hAoKCQkJCQkJYWRkcjFBbGxleTogIiIsCgoJCQkJCQkvLyDmiLbnsY3lnLDlnYAt6KGWCgoJCQkJCQlhZGRyMVNlY3Rpb246ICIiLAoKCQkJCQkJLy8g5oi257GN5Zyw5Z2ALeiZnwoKCQkJCQkJYWRkcjFOdW1iZXI6ICIiLAoKCQkJCQkJLy8g5oi257GN5Zyw5Z2ALeaokwoKCQkJCQkJYWRkcjFGbG9vcjogIiIsCgoJCQkJCQkvLyDmiLbnsY3lnLDlnYAt5YKZ6Ki7CgoJCQkJCQlhZGRyMVJlbWFyazogIiIsCgoJCQkJCQkvLyDpgJroqIrlnLDlnYAKCgkJCQkJCWFkZHIyOiAiIiwKCgkJCQkJCS8vIOmAmuioiuWcsOWdgC3pg7XpgZ7ljYDomZ8KCgkJCQkJCWFkZHIyUG9zdGFsQ29kZTogIiIsCgoJCQkJCQkvLyDpgJroqIrlnLDlnYAt57ij5biCCgoJCQkJCQlhZGRyMkNpdHk6ICIiLAoKCQkJCQkJLy8g6YCa6KiK5Zyw5Z2ALemEiemOruW4guWNgAoKCQkJCQkJYWRkcjJUb3duczogIiIsCgoJCQkJCQkvLyDpgJroqIrlnLDlnYAt6LevL+autS/pgZMv6KGXL+adkS/ph4wKCgkJCQkJCWFkZHIyVmlsbGFnZTogIiIsCgoJCQkJCQkvLyDpgJroqIrlnLDlnYAt6YSwCgoJCQkJCQlhZGRyMlJvYWRTdHJlZXQ6ICIiLAoKCQkJCQkJLy8g6YCa6KiK5Zyw5Z2ALeW3twoKCQkJCQkJYWRkcjJMYW5lOiAiIiwKCgkJCQkJCS8vIOmAmuioiuWcsOWdgC3lvIQKCgkJCQkJCWFkZHIyQWxsZXk6ICIiLAoKCQkJCQkJLy8g6YCa6KiK5Zyw5Z2ALeihlgoKCQkJCQkJYWRkcjJTZWN0aW9uOiAiIiwKCgkJCQkJCS8vIOmAmuioiuWcsOWdgC3omZ8KCgkJCQkJCWFkZHIyTnVtYmVyOiAiIiwKCgkJCQkJCS8vIOmAmuioiuWcsOWdgC3mqJMKCgkJCQkJCWFkZHIyRmxvb3I6ICIiLAoKCQkJCQkJLy8g6YCa6KiK5Zyw5Z2ALeWCmeiouwoKCQkJCQkJYWRkcjJSZW1hcms6ICIiLAoKCQkJCQkJLy8g5YW15b256Kq/5p+lCgoJCQkJCQlhcm15OiAiIiwKCgkJCQkJCS8vIOS4reS/oemKgOWPsOW5o+W4s+WLmS3liIbooYzlkI3nqLEKCgkJCQkJCWN0YmNBY2NvdW50QnJhbmNoOiAiIiwKCgkJCQkJCS8vIOS4reS/oemKgOWPsOW5o+W4s+aIti3luLPomZ/omZ/norwKCgkJCQkJCWN0YmNBY2NvdW50QWNjb3VudE51bWJlcjogIiIsCgoJCQkJCQkvLyDmmK/lkKbmnInlhbbku5blt6XkvZzntpPmrbcgWU4KCgkJCQkJCXdvcmtPdGhlcjogIiIsCgoJCQkJCQkvLyDmmK/lkKbmk5Tku7vpgY7mpa3li5nkurrlk6EKCgkJCQkJCXVzZWR0b2JlQWdlbnQ6ICIiLAoKCQkJCQkJLy8g5piv5ZCm5pu+5Lu76IG35pys5YWs5Y+45qWt5YuZ5ZOhKOWMheWQq+WPsOeBoy/lro/liKkv5aSn6YO95pyD5Lq65aO9KQoKCQkJCQkJdXNlZHRvYmVBZ2VudFRXOiAiIgoKCQkJCQl9LAoKCQkJCQkvKiDlrbjntpPmrbcgKi8KCgkJCQkJLy8g5bel5L2c57aT6amXCgoJCQkJCXVzZXJXb3JrczogWwoKCQkJCQkJLyoKCgkJCQkJCXsKCgkJCQkJCQkvLyDmtYHmsLTomZ8KCgkJCQkJCQlzZXE6IEludGVnZXIsCgoJCQkJCQkJLy8g5rqW5aKe5ZOh5Li76KaBa2V55YC8CgoJCQkJCQkJc3lzQ29kZTogSW50ZWdlciwKCgkJCQkJCQkvLyDlhazlj7jlkI3nqLEKCgkJCQkJCQljb21wYW55TmFtZTogU3RyaW5nLAoKCQkJCQkJCS8vIOW3peS9nOacn+mWky3otbcgWVlZWS1NTS1ERAoKCQkJCQkJCXdvcmtTdGFydERhdGU6IFN0cmluZywKCgkJCQkJCQkvLyDlt6XkvZzmnJ/plpMt6L+EIFlZWVktTU0tREQKCgkJCQkJCQl3b3JrRW5kRGF0ZTogU3RyaW5nLAoKCQkJCQkJCS8vIOmAmuioiuiZleWQjeeosS3pnZ7lv4XloasKCgkJCQkJCQlicmFuY2hOYW1lOiBTdHJpbmcKCgkJCQkJCX0KCgkJCQkJCSovCgoJCQkJCV0sCgoJCQkJCS8vIOWFtuS7luW3peS9nOe2k+attwoKCQkJCQl1c2VyV29ya090aGVyczogWwoKCQkJCQkJLyoKCgkJCQkJCXsKCgkJCQkJCQkvLyDmtYHmsLTomZ8KCgkJCQkJCQlzZXE6IEludGVnZXIsCgoJCQkJCQkJLy8g5rqW5aKe5ZOh5Li76KaBa2V55YC8CgoJCQkJCQkJc3lzQ29kZTogSW50ZWdlciwKCgkJCQkJCQkvLyDlhazlj7jlkI3nqLEKCgkJCQkJCQljb21wYW55TmFtZTogU3RyaW5nLAoKCQkJCQkJCS8vIOW3peS9nOacn+mWky3otbcgWVlZWS1NTS1ERAoKCQkJCQkJCXdvcmtTdGFydERhdGU6IFN0cmluZywKCgkJCQkJCQkvLyDlt6XkvZzmnJ/plpMt6L+EIFlZWVktTU0tREQKCgkJCQkJCQl3b3JrRW5kRGF0ZTogU3RyaW5nLAoKCQkJCQkJCS8vIOiBt+eosQoKCQkJCQkJCXRpdGxlOiBTdHJpbmcsCgoJCQkJCQkJLy8g6KGM5qWt5YilCgoJCQkJCQkJam9ia2luZDogU3RyaW5nLAoKCQkJCQkJCS8vIOW3peS9nOWFp+WuuQoKCQkJCQkJCWpvYkRlc2M6IFN0cmluZwoKCQkJCQkJfQoKCQkJCQkJKi8KCgkJCQkJXSwKCgkJCQkJLyog6IOM5pmv6IGy5piOICovCgoJCQkJCXVzZXJCYWNrZ3JvdW5kOiB7CgoJCQkJCQkvLyDmupblop7lk6HllK/kuIDlgLwKCgkJCQkJCXN5c0NvZGU6ICIiLAoKCQkJCQkJLy8g5L+h55So5aCx5ZGK5YiG5pW4IEludGVnZXIKCgkJCQkJCWNyZWRpdFJwdERlZ3JlZTogIiIsCgoJCQkJCQkvLyDkv6HnlKjloLHlkYrml6XmnJ8geXl5eS1NTS1kZCdUJ0hIOm1tOnNzCgoJCQkJCQljcmVkaXRScHREYXRlOiAiIiwKCgkJCQkJCS8vIOS6uui6q+S/nemaquWQiOagvOitieiZnwoKCQkJCQkJbGlmZVJlZ2lzdGVySWQ6ICIiLAoKCQkJCQkJLy8g5Lq66Lqr5L+d6Zqq55m76YyE54uA5rOBIEludGVnZXIKCgkJCQkJCWxpZmVSZWdTdGF0dXM6ICIiLAoKCQkJCQkJLy8g6YeR6J6N5bi46K2Y5ZCI5qC86K2J6JmfCgoJCQkJCQlmaW5jUmVnaXN0ZXJJZDogIiIsCgoJCQkJCQkvLyDosqHnlKLnmbvpjITni4Dms4EoVGFibGVMIFN5c3RlbUNvZGVEZWYsQ29kZVR5cGU6R2VuUmVnU3RhdHVzKQoKCQkJCQkJZ2VuUmVnU3RhdHVzOiAiIiwKCgkJCQkJCS8vIOaYr+WQpuacieimquWxrOWcqOacrOWFrOWPuOaTlOS7u+alreWLmeWToVlOCgoJCQkJCQlwYXJlbnRBZ2VudDogIiIsCgoJCQkJCQkvLyDopqrlsazlp5PlkI0KCgkJCQkJCXBhcmVudE5hbWU6ICIiLAoKCQkJCQkJLy8g6Kaq5bGs6Zec5L+CKFRhYmxlTCBTeXN0ZW1Db2RlRGVmLENvZGVUeXBlOlBhcmVudFJlYWwpCgoJCQkJCQlwYXJlbnRSZWxhOiAiIiwKCgkJCQkJCS8vIOalreWLmeS6uuWToeeuoeeQhuimj+WJh+aHsuiZlee0gOmMhChZOiDmnIkgTjrnhKEpCgoJCQkJCQlwdW5pc2hIaXN0b3J5OiAiIiwKCgkJCQkJCS8vIOalreWLmeS6uuWToeeuoeeQhuimj+WJh+aHsuiZlee0gOmMhOips+e0sOiqquaYjgoKCQkJCQkJcHVuaXNoSGlzRGV0YWlsOiAiIiwKCgkJCQkJCS8vIOaYr+WQpuacieeKr+e9que0gOmMhChZOiDmnIkgTjrnhKEpCgoJCQkJCQljcmltZUhpc3Rvcnk6ICIiLAoKCQkJCQkJLy8g54qv572q57SA6YyE6Kmz57Sw6Kqq5piOCgoJCQkJCQljcmltZURldGFpbDogIiIsCgoJCQkJCQkvLyDlhazmnIPmh7LomZXntIDpjIQgKFk6IOaciSBOOueEoSkKCgkJCQkJCWxpYVB1bmlzaEhpc3Rvcnk6ICIiLAoKCQkJCQkJLy8g5YWs5pyD5oey6JmV57SA6YyE6Kmz57Sw6Kqq5piOCgoJCQkJCQlsaWFQdW5pc2hIaXNEZXRhaWw6ICIiCgoJCQkJCX0KCgkJCQl9LAoKLy8gCQkJCWhhc1dvcmtFeHA6IGZhbHNlLAoKLy8gCQkJCWhhc1dvcmtPdGhlckV4cDogZmFsc2UsCgoJCQkJYWxlcnQ6IHsKCgkJCQkJZm9ybTAxOiBmYWxzZSwKCgkJCQkJZm9ybTAyOiBmYWxzZSwKCgkJCQkJZm9ybTAzOiBmYWxzZSwKCgkJCQkJZm9ybTA0OiBmYWxzZQoKCQkJCX0sCgoJCQkJbGluazogewoKCQkJCQkvLyDlo73pmqrlhazmnIPpgKPntZAKCgkJCQkJbGlmZU9yZzogImh0dHA6Ly9wdWJsaWMubGlhcm9jLm9yZy50dy9saWEtcHVibGljL2luZGV4VXNyLmpzcCIsCgoJCQkJCS8vIOeUoumaquWFrOacg+mAo+e1kAoKCQkJCQlnZW5lcmFsT3JnOiAiaHR0cDovL3NhbGVzaW5mby5ubGlhLm9yZy50dy9pbmRleC5waHAiCgoJCQkJfQoKCQkJfSwKCgkJCWJlZm9yZU1vdW50KCkgewoKCQkJCS8vIOa6luWinuWToeizh+aWmQoKCQkJCXZhciB2bSA9IHRoaXM7CgoJCQkJdmFyIHVzZXJEYXRhID0gLypbWyR7QHJlcXVlc3RBY2Nlc3Nvci5nZXRBdHRyaWJ1dGUoVChjb20udGFpd2FubGlmZS5yZWNydWl0LmVudW1zLk1vZGVsS2V5KS5VU0VSX0RBVEEpfV1dKi8ge307CgoJCQkJLy8g5Yid5aeL5YC8CgoJCQkJdmFyIG5lc3RlZEVtcHR5VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewoKCQkJCQlpZiAoJC5pc0FycmF5KHZhbHVlKSkgewoKCQkJCQkJZm9yICh2YXIgdmFsIG9mIHZhbHVlKSB7CgoJCQkJCQkJaWYgKCJzdHJpbmciID09PSB0eXBlb2YodmFsKSkgewoKCQkJCQkJCQl2YWwgPSB2YWwgfHwgIiI7CgoJCQkJCQkJfSBlbHNlIHsKCgkJCQkJCQkJbmVzdGVkRW1wdHlWYWx1ZSh2YWwpOwoKCQkJCQkJCX0KCgkJCQkJCX0KCgkJCQkJfSBlbHNlIGlmICgkLmlzUGxhaW5PYmplY3QodmFsdWUpKSB7CgoJCQkJCQlmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHsKCgkJCQkJCQlpZiAoInN0cmluZyIgPT09IHR5cGVvZih2YWx1ZVtrZXldKSB8fCB1bmRlZmluZWQgPT0gdmFsdWVba2V5XSB8fCBudWxsID09IHZhbHVlW2tleV0pIHsKCgkJCQkJCQkJdmFsdWVba2V5XSA9IHZhbHVlW2tleV0gfHwgIiI7CgoJCQkJCQkJfSBlbHNlIHsKCgkJCQkJCQkJbmVzdGVkRW1wdHlWYWx1ZSh2YWx1ZVtrZXldKTsKCgkJCQkJCQl9CgoJCQkJCQl9CgoJCQkJCX0KCgkJCQl9OwoKCQkJCW5lc3RlZEVtcHR5VmFsdWUodXNlckRhdGEpOwoKCQkJCXRoaXMudXNlckRhdGEgPSAkLmV4dGVuZCh0cnVlLCB7fSwgdGhpcy51c2VyRGF0YSwgdXNlckRhdGEpOwoKLy8gCQkJCWlmICh0aGlzLnVzZXJEYXRhLnVzZXJXb3JrcyAmJiB0aGlzLnVzZXJEYXRhLnVzZXJXb3Jrcy5sZW5ndGggPiAwKSB7CgovLyAJCQkJCXRoaXMuaGFzV29ya0V4cCA9IHRydWU7CgovLyAJCQkJfQoKCQkJCWlmICghdGhpcy51c2VyRGF0YS51c2VyRGV0YWlsLndvcmtPdGhlcikgewoKCQkJCQlpZiAodGhpcy51c2VyRGF0YS51c2VyV29ya090aGVycyAmJiB0aGlzLnVzZXJEYXRhLnVzZXJXb3JrT3RoZXJzLmxlbmd0aCA+IDApIHsKCgkJCQkJCXRoaXMudXNlckRhdGEudXNlckRldGFpbC53b3JrT3RoZXIgPSAiWSI7CgoJCQkJCX0gZWxzZSB7CgoJCQkJCQl0aGlzLnVzZXJEYXRhLnVzZXJEZXRhaWwud29ya090aGVyID0gIk4iOwoKCQkJCQl9CgoJCQkJfQoKLy8gCQkJCXRoaXMuaGFzV29ya090aGVyRXhwID0gIlkiID09IHRoaXMudXNlckRhdGEudXNlckRldGFpbC53b3JrT3RoZXI7CgoJCQl9LAoKCQkJbW91bnRlZCgpIHsKCgkJCQlzZXRUYWIoInRhYmxpc3QiKTsKCgkJCQl0aGlzLmluaXQoKTsKCgkJCX0sCgoJCQltZXRob2RzOiB7CgoJCQkJaW5pdCgpIHsKCgkJCQkJdGhpcy5pbml0UnVsZSgpOwoKCQkJCQlpZiAoZmFsc2UgPT09IHRoaXMudXNlckRhdGEuaXNOZXcpIHsKCgkJCQkJCXRoaXMuc2hvd1RhYkFsZXJ0KCk7CgoJCQkJCX0KCgkJCQl9LAoKCQkJCWluaXRSdWxlKCkgewoKCQkJCQl2YXIgZXJyb3JQbGFjZW1lbnQgPSBmdW5jdGlvbiAoZXJyb3IsIGVsZW1lbnQpIHsKCgkJCQkJCXZhciBlbmFtZSA9IGVsZW1lbnQuYXR0cigibmFtZSIpOwoKCQkJCQkJaWYgKC9edXBsb2FkRmlsZS8udGVzdChlbmFtZSkpIHsKCgkJCQkJCQkkKGVsZW1lbnQpLmNsb3Nlc3QoInRhYmxlIikubmV4dCgpLmFwcGVuZChlcnJvcik7CgoJCQkJCQl9IGVsc2UgaWYgKC9eYWRkci8udGVzdChlbmFtZSkgfHwgL0hpc3RvcnkvLnRlc3QoZW5hbWUpIHx8IC9ecGFyZW50W05hbWV8UmVsYV0vLnRlc3QoZW5hbWUpKSB7CgoJCQkJCQkJJChlbGVtZW50KS5jbG9zZXN0KCJ0ZCIpLnBhcmVudCgpLmNoaWxkcmVuKCkubGFzdCgpLmFwcGVuZChlcnJvcik7CgoJCQkJCQl9IGVsc2UgewoKCQkJCQkJCSQoZWxlbWVudCkucGFyZW50KCkuY2hpbGRyZW4oKS5sYXN0KCkuYWZ0ZXIoZXJyb3IpOwoKCQkJCQkJfQoKCQkJCQl9OwoKCQkJCQl2YXIgZGVmYXVsdFNldHRpbmdzID0gewoKCQkJCQkJZXJyb3JFbGVtZW50OiAiZGl2IiwKCgkJCQkJCWVycm9yUGxhY2VtZW50OiBlcnJvclBsYWNlbWVudAoKCQkJCQl9CgoJCQkJCXZhciBmb3JtMDFTZXR0aW5ncyA9IHsKCgkJCQkJCXJ1bGVzOiB7fSwKCgkJCQkJCW1lc3NhZ2VzOiB7fQoKCQkJCQl9OwoKCQkJCQlmb3IgKHZhciBpbmRleCBpbiB0aGlzLnVzZXJEYXRhLnVwbG9hZERlZmluZXMpIHsKCgkJCQkJCWlmICh0aGlzLnVzZXJEYXRhLnVwbG9hZERlZmluZXNbaW5kZXhdLm11c3RGbGFnID09ICJZIikgewoKCQkJCQkJCWZvcm0wMVNldHRpbmdzLnJ1bGVzW2B1cGxvYWRGaWxlJHtwYXJzZUludChpbmRleCkgKyAxfWBdID0gewoKCQkJCQkJCQkJcmVxdWlyZWQ6IHsKCgkJCQkJCQkJCQlkZXBlbmRzOiBmdW5jdGlvbihlbGVtZW50KSB7CgoJCQkJCQkJCQkJCXJldHVybiAiMCIgPT0gJChlbGVtZW50KS5wcmV2KCkudmFsKCk7CgoJCQkJCQkJCQkJfQoKCQkJCQkJCQkJfQoKCQkJCQkJCQl9OwoKCQkJCQkJCQlmb3JtMDFTZXR0aW5ncy5tZXNzYWdlc1tgdXBsb2FkRmlsZSR7cGFyc2VJbnQoaW5kZXgpICsgMX1gXSA9IHsgcmVxdWlyZWQ6IGDoq4vkuIrlgrMke3RoaXMudXNlckRhdGEudXBsb2FkRGVmaW5lc1tpbmRleF0uZmlsZUhlYWR9JHsiSGVhZDJpbmNoIiA9PSB0aGlzLnVzZXJEYXRhLnVwbG9hZERlZmluZXNbaW5kZXhdLmZpbGVUeXBlID8gIijkuIrlgrPmoLzlvI/pmZAgSlBHKSIgOiAiIn1gIH07CgoJCQkJCQkJCgoJCQkJCQl9CgoJCQkJCX0KCgkJCQkJJCgiI2Zvcm0wMSIpLnZhbGlkYXRlKCQuZXh0ZW5kKHRydWUsIHt9LCBkZWZhdWx0U2V0dGluZ3MsIGZvcm0wMVNldHRpbmdzKSk7CgoJCQkJCSQoIiNmb3JtMDIiKS52YWxpZGF0ZSgkLmV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdFNldHRpbmdzLCB7CgoJCQkJCQlydWxlczogewoKCQkJCQkJCXVzZXJOYW1lOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiB0cnVlLAoKCQkJCQkJCQltYXhsZW5ndGg6IDIwMAoKCQkJCQkJCX0sCgoJCQkJCQkJcm9tYW5OYW1lOiB7CgoJCQkJCQkJCW1heGxlbmd0aDogMjAwLAoKCQkJCQkJCQlmb3JtYXQ6IGVnby52YWxpZGF0b3IucGF0dGVybi5yb21hbk5hbWUKCgkJCQkJCQl9LAoKCQkJCQkJCWJpcnRoZGF5OiB7CgoJCQkJCQkJCXJlcXVpcmVkOiB0cnVlLAoKCQkJCQkJCQltYXhsZW5ndGg6IDgKCgkJCQkJCQl9LAoKCQkJCQkJCW1vYmlsZVBob25lOiB7CgoJCQkJCQkJCW1heGxlbmd0aDogMjAsCgoJCQkJCQkJCXJlcXVpcmVkOiB0cnVlLAoKCQkJCQkJCQltb2JpbGVQaG9uZTogdHJ1ZQoKCQkJCQkJCX0sCgoJCQkJCQkJdGVsMTogewoKCQkJCQkJCQltYXhsZW5ndGg6IDIwLAoKCQkJCQkJCQlmb3JtYXQ6IGVnby52YWxpZGF0b3IucGF0dGVybi50ZWxlcGhvbmUKCgkJCQkJCQl9LAoKCQkJCQkJCWVtYWlsOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiB0cnVlLAoKCQkJCQkJCQllbWFpbDogdHJ1ZSwKCgkJCQkJCQkJYmxvY2tFbWFpbDogdHJ1ZSwKCgkJCQkJCQkJbWF4bGVuZ3RoOiA1MAoKCQkJCQkJCX0sCgoJCQkJCQkJYXJteTogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZQoKCQkJCQkJCX0sCgoJCQkJCQkJY3RiY0FjY291bnRCcmFuY2g6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6IHRydWUKCgkJCQkJCQl9LAoKCQkJCQkJCWN0YmNBY2NvdW50QWNjb3VudE51bWJlcjogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZSwKCgkJCQkJCQkJZGlnaXRzOiB0cnVlLAoKCQkJCQkJCQlmb3JtYXQ6IGVnby52YWxpZGF0b3IucGF0dGVybi5hY2NvdW50TnVtYmVyCgoJCQkJCQkJfQoKCQkJCQkJfSwgbWVzc2FnZXM6IHsKCgkJCQkJCQl1c2VyTmFtZTogewoKCQkJCQkJCQlyZXF1aXJlZDogIuiri+i8uOWFpeWnk+WQjSIsCgoJCQkJCQkJfSwKCgkJCQkJCQlyb21hbk5hbWU6IHsKCgkJCQkJCQkJZm9ybWF0OiAi5Y6f5L2P5rCR5aeT5ZCN5LiN56ym5ZCI5qKd5Lu277yM6KuL6YeN5paw6Ly45YWlIiwKCgkJCQkJCQl9LAoKCQkJCQkJCWJpcnRoZGF5OiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6YG45pOH5Ye655Sf5bm05pyI5pelIgoKCQkJCQkJCX0sCgoJCQkJCQkJbW9iaWxlUGhvbmU6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vovLjlhaXmiYvmqZ/omZ/norwiLAoKCQkJCQkJCQltb2JpbGVQaG9uZTogIuaJi+apn+iZn+eivOS4jeespuWQiOaineS7tu+8jOiri+mHjeaWsOi8uOWFpSIsCgoJCQkJCQkJfSwKCgkJCQkJCQl0ZWwxOiB7CgoJCQkJCQkJCWZvcm1hdDogIuS9j+Wutumbu+ipseS4jeespuWQiOaineS7tu+8jOiri+mHjeaWsOi8uOWFpSIKCgkJCQkJCQl9LAoKCQkJCQkJCWVtYWlsOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6Ly45YWl6Zu75a2Q6YO15Lu2IiwKCgkJCQkJCQkJZW1haWw6ICLpm7vlrZDpg7Xku7bkuI3nrKblkIjmop3ku7bvvIzoq4vph43mlrDovLjlhaUiCgoJCQkJCQkJfSwKCgkJCQkJCQlhcm15OiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6YG45pOH5YW15b256Kq/5p+lIiwKCgkJCQkJCQl9LAoKCQkJCQkJCWN0YmNBY2NvdW50QnJhbmNoOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6Ly45YWl5Lit5L+h6YqA5Y+w5bmj6YqA6KGM5biz5oi2LeWIhuihjCIsCgoJCQkJCQkJfSwKCgkJCQkJCQljdGJjQWNjb3VudEFjY291bnROdW1iZXI6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vovLjlhaXkuK3kv6HpioDlj7DluaPpioDooYzluLPmiLYt5biz6JmfIiwKCgkJCQkJCQkJZGlnaXRzOiAi5Lit5L+h6YqA5Y+w5bmj6YqA6KGM5biz5oi2LeW4s+iZn+S4jeespuWQiOaineS7tu+8jOiri+mHjeaWsOi8uOWFpSIsCgoJCQkJCQkJCWZvcm1hdDogIuS4reS/oemKgOWPsOW5o+mKgOihjOW4s+aIti3luLPomZ/kuI3nrKblkIjmop3ku7bvvIzoq4vph43mlrDovLjlhaUiCgoJCQkJCQkJfQoKCQkJCQkJfQoKCQkJCQl9KSk7CgoJCQkJCSQoIiNmb3JtMDQiKS52YWxpZGF0ZSgkLmV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdFNldHRpbmdzLCB7CgoJCQkJCQlydWxlczogewoKCQkJCQkJCWNyZWRpdFJwdERlZ3JlZTogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZSwKCgkJCQkJCQkJY3JlZGl0UnB0RGVncmVlOiB0cnVlCgoJCQkJCQkJfSwKCgkJCQkJCQljcmVkaXRScHREYXRlOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiB0cnVlCgoJCQkJCQkJfSwKCgkJCQkJCQlsaWZlUmVnaXN0ZXJJZDogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZSwKCgkJCQkJCQkJZm9ybWF0OiBlZ28udmFsaWRhdG9yLnBhdHRlcm4ubGlmZVJlZ2lzdGVySWQKCgkJCQkJCQl9LAoKCQkJCQkJCWxpZmVSZWdTdGF0dXM6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6IHRydWUKCgkJCQkJCQl9LAoKCQkJCQkJCWdlblJlZ1N0YXR1czogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZQoKCQkJCQkJCX0sCgoJCQkJCQkJcGFyZW50TmFtZTogewoKCQkJCQkJCQlyZXF1aXJlZDogewoKCQkJCQkJCQkJZGVwZW5kczogZnVuY3Rpb24oZWxlbWVudCkgewoKCQkJCQkJCQkJCXJldHVybiAiWSIgPT0gJCgiaW5wdXRbbmFtZT1wYXJlbnRBZ2VudF06Y2hlY2tlZCIpLnZhbCgpOwoKCQkJCQkJCQkJfQoKCQkJCQkJCQl9CgoJCQkJCQkJfSwKCgkJCQkJCQlwYXJlbnRSZWxhOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiB7CgoJCQkJCQkJCQlkZXBlbmRzOiBmdW5jdGlvbihlbGVtZW50KSB7CgoJCQkJCQkJCQkJcmV0dXJuICJZIiA9PSAkKCJpbnB1dFtuYW1lPXBhcmVudEFnZW50XTpjaGVja2VkIikudmFsKCk7CgoJCQkJCQkJCQl9CgoJCQkJCQkJCX0KCgkJCQkJCQl9LAoKCQkJCQkJCXB1bmlzaEhpc3Rvcnk6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6IHRydWUKCgkJCQkJCQl9LAoKCQkJCQkJCXB1bmlzaEhpc0RldGFpbDogewoKCQkJCQkJCQlyZXF1aXJlZDogewoKCQkJCQkJCQkJZGVwZW5kczogZnVuY3Rpb24oZWxlbWVudCkgewoKCQkJCQkJCQkJCXJldHVybiAiWSIgPT0gJCgiaW5wdXRbbmFtZT1wdW5pc2hIaXN0b3J5XTpjaGVja2VkIikudmFsKCk7CgoJCQkJCQkJCQl9CgoJCQkJCQkJCX0KCgkJCQkJCQl9LAoKCQkJCQkJCWxpYVB1bmlzaEhpc3Rvcnk6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6IHRydWUKCgkJCQkJCQl9LAoKCQkJCQkJCWxpYVB1bmlzaEhpc0RldGFpbDogewoKCQkJCQkJCQlyZXF1aXJlZDogewoKCQkJCQkJCQkJZGVwZW5kczogZnVuY3Rpb24oZWxlbWVudCkgewoKCQkJCQkJCQkJCXJldHVybiAiWSIgPT0gJCgiaW5wdXRbbmFtZT1saWFQdW5pc2hIaXN0b3J5XTpjaGVja2VkIikudmFsKCk7CgoJCQkJCQkJCQl9CgoJCQkJCQkJCX0KCgkJCQkJCQl9LAoKCQkJCQkJCWNyaW1lSGlzdG9yeTogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZQoKCQkJCQkJCX0sCgoJCQkJCQkJY3JpbWVEZXRhaWw6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6IHsKCgkJCQkJCQkJCWRlcGVuZHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKCgkJCQkJCQkJCQlyZXR1cm4gIlkiID09ICQoImlucHV0W25hbWU9Y3JpbWVIaXN0b3J5XTpjaGVja2VkIikudmFsKCk7CgoJCQkJCQkJCQl9CgoJCQkJCQkJCX0KCgkJCQkJCQl9CgoJCQkJCQl9LCBtZXNzYWdlczogewoKCQkJCQkJCWNyZWRpdFJwdERlZ3JlZTogewoKCQkJCQkJCQlyZXF1aXJlZDogIuiri+i8uOWFpeS/oeeUqOWgseWRiuWIhuaVuOaIlueEoeazleipleWIhiIsCgoJCQkJCQkJCWNyZWRpdFJwdERlZ3JlZTogIuiri+i8quWFpeWIhuaVuOaIlueEoeazleipleWIhiIKCgkJCQkJCQl9LAoKCQkJCQkJCWNyZWRpdFJwdERhdGU6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vpgbjmk4fkv6HnlKjloLHlkYrml6XmnJ8iCgoJCQkJCQkJfSwKCgkJCQkJCQlsaWZlUmVnaXN0ZXJJZDogewoKCQkJCQkJCQlyZXF1aXJlZDogIuiri+i8uOWFpeS6uui6q+S/nemaquWQiOagvOitieiZnyIKCgkJCQkJCQl9LAoKCQkJCQkJCWxpZmVSZWdTdGF0dXM6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vli77pgbjkurrouqvkv53pmqrnmbvpjITni4Dms4EiCgoJCQkJCQkJfSwKCgkJCQkJCQlnZW5SZWdTdGF0dXM6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vli77pgbjosqHnlKLkv53pmqrnmbvpjITni4Dms4EiCgoJCQkJCQkJfSwKCgkJCQkJCQlwYXJlbnROYW1lOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6Ly45YWl6Kaq5bGs5aeT5ZCNIgoKCQkJCQkJCX0sCgoJCQkJCQkJcGFyZW50UmVsYTogewoKCQkJCQkJCQlyZXF1aXJlZDogIuiri+mBuOaTh+imquWxrOmXnOS/giIKCgkJCQkJCQl9LAoKCQkJCQkJCXB1bmlzaEhpc3Rvcnk6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vli77pgbjmmK/lkKbmm77pgZXlj43mpa3li5nkurrlk6HnrqHnkIbopo/liYfogIzlj5fmh7LomZXntIDpjIQiCgoJCQkJCQkJfSwKCgkJCQkJCQlwdW5pc2hIaXNEZXRhaWw6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vovLjlhaXlj5fmh7LomZXntIDpjIToqbPntLDoqqrmmI4iCgoJCQkJCQkJfSwKCgkJCQkJCQlsaWFQdW5pc2hIaXN0b3J5OiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL5Yu+6YG45piv5ZCm5pu+5Y+X5YWs5pyD5oey6JmV57SA6YyEIgoKCQkJCQkJCX0sCgoJCQkJCQkJbGlhUHVuaXNoSGlzRGV0YWlsOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6Ly45YWl5YWs5pyD5oey6JmV57SA6YyE6Kmz57Sw6Kqq5piOIgoKCQkJCQkJCX0sCgoJCQkJCQkJY3JpbWVIaXN0b3J5OiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL5Yu+6YG45piv5ZCm5pyJ5YiR5LqL54qv572q57SA6YyEIgoKCQkJCQkJCX0sCgoJCQkJCQkJY3JpbWVEZXRhaWw6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vovLjlhaXliJHkuovniq/nvarntIDpjIToqbPntLDoqqrmmI4iCgoJCQkJCQkJfQoKCQkJCQkJfQoKCQkJCQl9KSk7CgoJCQkJfSwKCgkJCQlzaG93VGFiQWxlcnQoKSB7CgoJCQkJCWZvciAodmFyIGZvcm0gaW4gdGhpcy5hbGVydCkgewoKCQkJCQkJdGhpcy5hbGVydFtgJHtmb3JtfWBdID0gISQoYCMke2Zvcm19YCkudmFsaWQoKTsKCgkJCQkJfQoKCQkJCX0sCgovLyAJCQkJZ2VuZXJhdGVLZXkoa2V5LCBpbmRleCkgewoKLy8gCQkJCQlpZiAoaW5kZXggfHwgJC5pc051bWVyaWMoaW5kZXgpKSB7CgovLyAJCQkJCQlyZXR1cm4gYCR7a2V5fSR7aW5kZXggKyAxfWA7CgovLyAJCQkJCX0KCi8vIAkJCQkJcmV0dXJuIGtleTsKCi8vIAkJCQl9LAoKCQkJCWhhbmRsZUNyZWRpdFJwdERlZ3JlZShldmVudCkgewoKCQkJCQlpZiAoL14wLy50ZXN0KGV2ZW50LnRhcmdldC52YWx1ZSkpIHsKCgkJCQkJCXRoaXMudXNlckRhdGEudXNlckJhY2tncm91bmQuY3JlZGl0UnB0RGVncmVlID0gZXZlbnQudGFyZ2V0LnZhbHVlLnN1YnN0cmluZygxKTsKCgkJCQkJfQoKCQkJCX0sCgoJCQkJaGFuZGxlRGF0ZSh0YXJnZXQsIGRhdGUpIHsKCgkJCQkJbGV0IGZvcm0gPSAkKHRhcmdldCkuY2xvc2VzdCgiZm9ybSIpLmF0dHIoImlkIik7CgoJCQkJCWxldCBlbGVtZW50ID0gJCh0YXJnZXQpLmF0dHIoImlkIik7CgoJCQkJCXN3aXRjaCAoZWxlbWVudCkgewoKCQkJCQkJY2FzZSAiYmlydGhkYXkiOgoKCQkJCQkJCXRoaXMudXNlckRhdGEudXNlci5iaXJ0aGRheSA9IGRhdGU7CgoJCQkJCQkJYnJlYWs7CgoJCQkJCQljYXNlICJjcmVkaXRScHREYXRlIjoKCgkJCQkJCQl0aGlzLnVzZXJEYXRhLnVzZXJCYWNrZ3JvdW5kLmNyZWRpdFJwdERhdGUgPSBkYXRlOwoKCQkJCQkJCWJyZWFrOwoKCQkJCQkJZGVmYXVsdDoKCgkJCQkJCQlsZXQgaW5kZXggPSBlbGVtZW50LnN1YnN0cigtMSk7CgoJCQkJCQkJbGV0IHdvcmsgPSB0aGlzLnVzZXJEYXRhW2VsZW1lbnQuc3BsaXQoJ18nKVswXV1baW5kZXhdOwoKCQkJCQkJCWlmICghd29yayl7CgoJCQkJCQkJCXdvcmsgPSB7fTsKCgkJCQkJCQkJdGhpcy51c2VyRGF0YVtlbGVtZW50LnNwbGl0KCdfJylbMF1dW2luZGV4XSA9IHdvcms7CgoJCQkJCQkJfQoKCQkJCQkJCXdvcmtbZWxlbWVudC5zcGxpdCgnXycpWzFdXSA9IGRhdGU7CgoJCQkJCQkJaWYgKCQodGFyZ2V0KS5wcmV2QWxsKCdpbnB1dC5oYXNNb250aHBpY2tlcicpKSB7CgoJCQkJCQkJCSQodGFyZ2V0KS5wcmV2QWxsKCdpbnB1dC5oYXNNb250aHBpY2tlcicpLm1vbnRocGlja2VyKCJvcHRpb24iLCAibWF4RGF0ZSIsIGRhdGUpOwoKCQkJCQkJCX0KCgkJCQkJCQlpZiAoJCh0YXJnZXQpLm5leHRBbGwoJ2lucHV0Lmhhc01vbnRocGlja2VyJykpIHsKCgkJCQkJCQkJJCh0YXJnZXQpLm5leHRBbGwoJ2lucHV0Lmhhc01vbnRocGlja2VyJykubW9udGhwaWNrZXIoIm9wdGlvbiIsICJtaW5EYXRlIiwgZGF0ZSk7CgoJCQkJCQkJfQoKCQkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJfSwKCgkJCQloYW5kbGVEZXBlbmRlbmN5KGV2ZW50KSB7CgoJCQkJCXZhciBmb3JtID0gJChldmVudC50YXJnZXQpLmNsb3Nlc3QoImZvcm0iKS5hdHRyKCJpZCIpOwoKCQkJCQl2YXIgZWxlbWVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpCgoJCQkJCWVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHsKCgkJCQkJCSQoYCMke2Zvcm19YCkudmFsaWRhdGUoKS5lbGVtZW50KGAjJHtpdGVtfWApOwoKCQkJCQl9KTsKCgkJCQl9LAoKCQkJCWhhbmRsZUNoYW5nZShlKSB7CgoJCQkJCWxldCBmb3JtSWQgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCJmb3JtIikuYXR0cigiaWQiKTsKCgkJCQkJbGV0IGVsID0gZS50YXJnZXQ7CgoJCQkJCXRoaXMuJG5leHRUaWNrKCgpID0+IHsKCgkJCQkJCWlmIChlbCkgewoKCQkJCQkgICAgCSQoYCMke2Zvcm1JZH1gKS52YWxpZGF0ZSgpLmVsZW1lbnQoZWwpOwoKCQkJCQkgICAgfQoKCQkJCQl9KTsKCgkJCQl9LAoKCQkJCWhhbmRsZUFkZHJlc3MoZSl7CgoJCQkJCWxldCBmb3JtID0gJChlLnRhcmdldCkuY2xvc2VzdCgiZm9ybSIpLmF0dHIoImlkIik7CgoJCQkJCWxldCBlbGVtZW50ID0gJChlLnRhcmdldCkuYXR0cigiaWQiKTsKCgkJCQkJaWYgKC9cZC9nLnRlc3QoZS50YXJnZXQudmFsdWUpKXsKCgkJCQkJCWxldCB0ZW1wU3RyID0gJyc7CgoJCQkJCQlmb3IobGV0IGk9MDtpPGUudGFyZ2V0LnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoO2krKyl7CgoJCQkJCQkJbGV0IG51bUNvZGUgPSBlLnRhcmdldC52YWx1ZS50b1N0cmluZygpLmNoYXJDb2RlQXQoaSk7CgoJCQkJCQkJaWYgKG51bUNvZGUgPD0gMHgwMDdFICYmIG51bUNvZGUgPj0gMHgwMDIxKXsKCgkJCQkJCQkJbnVtQ29kZSArPSAweEZFRTA7CgoJCQkJCQkJfQoKCQkJCQkJCXRlbXBTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShudW1Db2RlKTsKCgkJCQkJCX0KCgkJCQkJCWUudGFyZ2V0LnZhbHVlID0gdGVtcFN0cjsKCgkJCQkJfQoKCQkJCQl0aGlzLnVzZXJEYXRhLnVzZXJEZXRhaWxbZWxlbWVudF0gPSBlLnRhcmdldC52YWx1ZTsKCgkJCQkJdGhpcy4kbmV4dFRpY2soKCk9PiQoYCMke2Zvcm19YCkudmFsaWRhdGUoKS5lbGVtZW50KGAjJHtlbGVtZW50fWApKTsKCgkJCQl9LAoKCQkJCWhhbmRsZVdvcmsoZXZlbnQpewoKCQkJCQlsZXQgZWxlbWVudCA9IGV2ZW50LnRhcmdldC5pZDsKCgkJCQkJbGV0IGluZGV4ID0gZWxlbWVudC5zdWJzdHIoLTEpOwoKCQkJCQlsZXQgd29yayA9IHRoaXMudXNlckRhdGFbZWxlbWVudC5zcGxpdCgnXycpWzBdXVtpbmRleF07CgoJCQkJCWlmICghd29yayl7CgoJCQkJCQl3b3JrID0ge307CgoJCQkJCQl0aGlzLnVzZXJEYXRhW2VsZW1lbnQuc3BsaXQoJ18nKVswXV1baW5kZXhdID0gd29yazsKCgkJCQkJfQoKCQkJCQl3b3JrW2VsZW1lbnQuc3BsaXQoJ18nKVsxXV0gPSBldmVudC50YXJnZXQudmFsdWU7CgoJCQkJfSwKCgkJCQlmb2N1c291dE5hbWUoZXZlbnQpIHsKCgkJCQkJbGV0IGZvcm1JZCA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCJmb3JtIikuYXR0cigiaWQiKTsKCgkJCQkJbGV0IGVsID0gZXZlbnQudGFyZ2V0OwoKCQkJCQlzd2l0Y2ggKGV2ZW50LnRhcmdldC5pZCkgewoKCQkJCQkJY2FzZSAndXNlck5hbWUnOgoKCQkJCQkgICAgCXRoaXMudXNlckRhdGEudXNlci51c2VyTmFtZSA9IGV2ZW50LnRhcmdldC52YWx1ZTsKCgkJCQkJICAgIAlicmVhazsKCgkJCQkJICAgIGNhc2UgJ3JvbWFuTmFtZSc6CgoJCQkJCSAgICAJdGhpcy51c2VyRGF0YS51c2VyLnJvbWFuTmFtZSA9IGV2ZW50LnRhcmdldC52YWx1ZTsKCgkJCQkJICAgIAlicmVhazsKCgkJCQkJICAgIGNhc2UgJ2NyaU5hbWUnOgoKCQkJCQkgICAgCXRoaXMudXNlckRhdGEudXNlckRldGFpbC5jcmlOYW1lID0gZXZlbnQudGFyZ2V0LnZhbHVlOwoKCQkJCQkgICAgCWJyZWFrOwoKCQkJCQl9CgoJCQkJCXRoaXMuJG5leHRUaWNrKCgpID0+IHsKCgkJCQkJCWlmIChlbCkgewoKCQkJCQkgICAgCSQoYCMke2Zvcm1JZH1gKS52YWxpZGF0ZSgpLmVsZW1lbnQoZWwpOwoKCQkJCQkgICAgfQoKCQkJCQl9KTsKCgkJCQl9LAoKCQkJCXNhdmUoZXZlbnQpIHsKCgkJCQkJLy8g5pqr5a2YCgoJCQkJCXRoaXMuc2hvd1RhYkFsZXJ0KCk7CgoJCQkJCWlmICghZWdvLmFqYXgudXBkYXRlVXNlckRhdGFUZW1wKHRoaXMudXNlckRhdGEpKSB7CgoJCQkJCQllZ28uZGlhbG9nLmVycm9yKCLmmqvlrZjlpLHmlZfvvIzoq4vnqI3lgJnlho3oqaYiLCB3aW5kb3cubG9jYXRpb24uaHJlZik7CgoJCQkJCX0gZWxzZSB7CgoJCQkJCQllZ28uZGlhbG9nLmFsZXJ0KCLmmqvlrZjmiJDlip8iLCB3aW5kb3cubG9jYXRpb24uaHJlZik7CgoJCQkJCX0KCgkJCQl9LAoKCQkJCWhhbmRsZUZpbGUodGFyZ2V0LCBzdGF0dXMpIHsKCgkJCQkJJCh0YXJnZXQpLmNsb3Nlc3QoImZvcm0iKS52YWxpZGF0ZSgpLmVsZW1lbnQoYCMkeyQodGFyZ2V0KS5hdHRyKCJpZCIpfWApOwoKCQkJCX0sCgoJCQkJYXBwbHkoZXZlbnQpIHsKCgkJCQkJdGhpcy5zaG93VGFiQWxlcnQoKTsKCgkJCQkJZm9yICh2YXIgZm9ybSBpbiB0aGlzLmFsZXJ0KSB7CgoJCQkJCQlpZiAoISQoYCMke2Zvcm19YCkudmFsaWQoKSkgewoKCQkJCQkJCWVnby5kaWFsb2cuZXJyb3IoIuiri+eiuuiqjeWgseiBmOizh+aWmeWhq+Wvq+WujOaVtO+8jOWGjeihjOmBnuS6pOeUs+iri+OAgiIpOwoKCQkJCQkJCXJldHVybjsKCgkJCQkJCX0KCgkJCQkJfQoKCQkJCQlpZiAoIWVnby5hamF4LnVwZGF0ZVVzZXJEYXRhVGVtcCh0aGlzLnVzZXJEYXRhKSkgeyAvLyDmmqvlrZgKCgkJCQkJCWVnby5kaWFsb2cuZXJyb3IoIumBnuS6pOeUs+iri+WkseaVl++8jOiri+eojeWAmeWGjeippiIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKCgkJCQkJfSBlbHNlIGlmICghZWdvLmFqYXguYXBwbHlVc2VyRGF0YSh0aGlzLnVzZXJEYXRhLnVzZXIuc3lzQ29kZSkpIHsgLy8g6YGe5Lqk55Sz6KuLCgoJCQkJCQllZ28uZGlhbG9nLmVycm9yKCLpgZ7kuqTnlLPoq4vlpLHmlZfvvIzoq4vnqI3lgJnlho3oqaYiLCB3aW5kb3cubG9jYXRpb24uaHJlZik7CgoJCQkJCX0gZWxzZSB7CgoJCQkJCQlpZiAodGhpcy51c2VyRGF0YS51c2VyLmNvbW1Vbml0LmFnZW50Q2hhbm5lbCA9PSAiQTEiKSB7CgoJCQkJCQkJZWdvLmRpYWxvZy5hbGVydChg5oGt5Zac5oKo5bey5a6M5oiQ5aCx6IGY5paH5Lu26YGe5Lqk77yM5a+p5qC457WQ5p6c5bCH5pyD5Y+m6KGM6YCa55+l44CCIDxici8+PGJyLz7ku6XkuIvmraPmnKzmlofku7boq4vmgqjkuqTntablkITlnLDljYDooYzmlL/liqnnkIbjgII8YnIvPjEuIOWQiOe0hOabuDxici8+Mi4g6IGv5b615YCL5Lq65L+h55So5aCx5ZGKPGJyLz4zLiDkuozlkIvlvanoibLnhafniYcx5by1PGJyLz40LiDkv6HnlKjljaHlhbHpirfmib/oq77ogbLmmI7mm7jlj4roqabljbc8YnIvPjUuIOiHquiyu+WPg+WKoOWcmOmrlOS/nemaqueUs+iri+abuDxici8+Ni4g5aCx6IGYU1LpoIjlj6bnubPkuqTooYzpirfku6Pooajlgpnlv5jpjITjgIFTUuWVhuWTgeWPiuazleimj+iqsueoi+iok+e3tOe0gOmMhCR7IjMiID09IHRoaXMudXNlckRhdGEudXNlckJhY2tncm91bmQuZ2VuUmVnU3RhdHVzID8gIjxici8+Ny4g5Lq66Lqr5L+d6Zqq5qWt5YuZ5ZOh55m76YyE55Sz6KuL5pu45q2j5pysIiA6ICIifWAsIHVybC51c2VyLnBvcnRhbCk7CQkJCQkJCQoKCQkJCQkJfSBlbHNlIHsKCgkJCQkJCQlpZiAodGhpcy51c2VyRGF0YS51c2VyLmpvYlR5cGUgPT0gIkEyUyIgKSB7CgoJCQkJCQkJCWVnby5kaWFsb2cuYWxlcnQoYOaBreWWnOaCqOW3suWujOaIkOWgseiBmOaWh+S7tumBnuS6pO+8jOWvqeaguOe1kOaenOWwh+acg+WPpuihjOmAmuefpeOAgiA8YnIvPjxici8+5Lul5LiL5q2j5pys5paH5Lu26KuL5oKo5Lqk57Wm5ZCE5Zyw5Y2A6KGM5pS/5Yqp55CG44CCPGJyLz4xLiDlkIjntITmm7g8YnIvPjIuIOiBr+W+teWAi+S6uuS/oeeUqOWgseWRijxici8+My4g5LqM5ZCL5b2p6Imy54Wn54mHMeW8tTxici8+NC4g5L+h55So5Y2h5YWx6Yq35om/6Ku+6IGy5piO5pu45Y+K6Kmm5Y23JHsiMyIgPT0gdGhpcy51c2VyRGF0YS51c2VyQmFja2dyb3VuZC5nZW5SZWdTdGF0dXMgPyAiPGJyLz41LiDkurrouqvkv53pmqrmpa3li5nlk6HnmbvpjITnlLPoq4vmm7jmraPmnKwiIDogIiJ9YCwgdXJsLnVzZXIucG9ydGFsKTsKCgkJCQkJCQl9CgoJCQkJCQkJZWxzZSB7CgoJCQkJCQkJCWVnby5kaWFsb2cuYWxlcnQoYOaBreWWnOaCqOW3suWujOaIkOWgseiBmOaWh+S7tumBnuS6pO+8jOWvqeaguOe1kOaenOWwh+acg+WPpuihjOmAmuefpeOAgiA8YnIvPjxici8+5Lul5LiL5q2j5pys5paH5Lu26KuL5oKo5Lqk57Wm5ZCE5Zyw5Y2A6KGM5pS/5Yqp55CG44CCPGJyLz4xLiDlkIjntITmm7g8YnIvPjIuIOiBr+W+teWAi+S6uuS/oeeUqOWgseWRijxici8+My4g5LqM5ZCL5b2p6Imy54Wn54mHMeW8tTxici8+NC4g5L+h55So5Y2h5YWx6Yq35om/6Ku+6IGy5piO5pu45Y+K6Kmm5Y23PGJyLz41LiDlhazosrvlnJjpq5TnnLflsazliqDlhaXooago6IGY5YOx5ZCI57SEKSR7IjMiID09IHRoaXMudXNlckRhdGEudXNlckJhY2tncm91bmQuZ2VuUmVnU3RhdHVzID8gIjxici8+Ni4g5Lq66Lqr5L+d6Zqq5qWt5YuZ5ZOh55m76YyE55Sz6KuL5pu45q2j5pysIiA6ICIifWAsIHVybC51c2VyLnBvcnRhbCk7CQoKCQkJCQkJCX0KCgkJCQkJCX0KCgkJCQkJfQoKCQkJCX0KCgkJCX0KCgkJfSk7CgoJPC9zY3JpcHQ+Cg==
返回列表 上一筆 下一筆