榆山
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

678 lines
69 KiB

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var clerkOnline_1 = require("../../../../api/clerkOnline");
Page({
data: {
detailObj: {},
remarkObj: {
statementNum: 0,
commentsList: []
},
pageIndex: 1,
pageSize: 10,
remarkType: 'new',
topicId: '',
topList: [],
manageFlag: '',
TopFlag: '',
topType: '',
selfPublishFlag: '',
attitude: '',
userLike: '',
userDislike: '',
likesTotal: '',
opposeLTotal: '',
orderType: '0',
commentList: [],
commentUserLike: '',
commentUserDislike: "",
commentUlikesTotal: '',
commentUopposeLTotal: '',
commentAttitude: '',
commentId: '',
commentIndex: 0,
loadVisible: false,
loadType: 'more',
isShowDetailContent: false,
isShowDetailRemark: false,
commentListLength: 0,
isShow: false,
iscommentStatement: false,
remarkTypeLoading: false,
isBackOpenTopic: true,
},
onShow: function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.setData({
isBackOpenTopic: wx.getStorageSync('isBackOpenTopic')
});
if (!this.data.isBackOpenTopic) {
return [2];
}
this.setData({
isShowDetailContent: false,
isShowDetailRemark: false,
topicId: wx.getStorageSync('topicId'),
isShow: false,
loadVisible: true,
loadType: 'more',
remarkTypeLoading: true
});
return [4, this.getTopicDetail()];
case 1:
_a.sent();
return [4, this.getCommentList()];
case 2:
_a.sent();
this.setData({
isShowDetailContent: true,
isShowDetailRemark: true,
remarkTypeLoading: false
});
return [2];
}
});
});
},
onHide: function () {
console.log('hide');
},
onLoad: function (options) {
wx.setStorageSync('topicId', options.id);
console.log('onLoad');
},
supportIssueOrProject: function () {
return __awaiter(this, void 0, void 0, function () {
var obj, res;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(this.data.userLike == '0' && this.data.userDislike == '0')) return [3, 2];
this.setData({
attitude: "0",
});
obj = {
topicId: this.data.topicId,
attitude: this.data.attitude
};
if (this.data.userLike == '0') {
this.setData({
'topList.likesTotal': this.data.likesTotal += 1,
'topList.userLike': '1',
userLike: '1'
});
}
return [4, clerkOnline_1.topicStatement(obj)];
case 1:
res = _a.sent();
console.log('赞', res);
return [3, 3];
case 2:
if (this.data.userLike == '1' || this.data.userDislike == '1') {
wx.showModal({
title: '',
content: '已表达过态度,不可以更改哦!',
showCancel: false,
confirmText: '确定',
confirmColor: '#3CC51F',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
}
}
});
}
_a.label = 3;
case 3: return [2];
}
});
});
},
dispportIssueOrProject: function () {
return __awaiter(this, void 0, void 0, function () {
var obj, res;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(this.data.userLike == '0' && this.data.userDislike == '0')) return [3, 2];
this.setData({
attitude: "1",
});
obj = {
topicId: this.data.topicId,
attitude: this.data.attitude
};
if (this.data.userDislike == '0') {
this.setData({
'topList.opposeLTotal': this.data.opposeLTotal += 1,
'topList.userDislike': '1',
userDislike: '1'
});
}
return [4, clerkOnline_1.topicStatement(obj)];
case 1:
res = _a.sent();
console.log('赞', res);
return [3, 3];
case 2:
if (this.data.userLike == '1' || this.data.userDislike == '1') {
wx.showModal({
title: '',
content: '已表达过态度,不可以更改哦!',
showCancel: false,
confirmText: '确定',
confirmColor: '#3CC51F',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
}
}
});
}
_a.label = 3;
case 3: return [2];
}
});
});
},
debounceSupportRemark: function (e) {
var _a;
var _this = this;
this.setData({
commentId: e.detail.commentId
});
this.data.commentList.forEach(function (element, index) {
if (e.detail.commentId == element.commentId) {
_this.setData({
commentUserLike: element.userLike,
commentUserDislike: element.userDislike,
commentUlikesTotal: parseInt(element.approveNum),
commentUopposeLTotal: element.opposeNum,
commentIndex: index
});
}
});
if (this.data.commentUserLike == '0' && this.data.commentUserDislike == '0') {
if (this.data.commentUserLike == '0') {
this.setData({
commentAttitude: '0',
});
console.log('commentAttitude', this.data.commentAttitude);
this.setData((_a = {},
_a["commentList[" + this.data.commentIndex + "].approveNum"] = this.data.commentUlikesTotal += 1,
_a["commentList[" + this.data.commentIndex + "].userLike"] = '1',
_a.commentUserLike = '1',
_a));
}
this.commentStatement();
}
else if (this.data.commentUserLike == '1' || this.data.commentUserDislike == '1') {
wx.showModal({
title: '',
content: '已表达过态度,不可以更改哦!',
showCancel: false,
confirmText: '确定',
confirmColor: '#3CC51F',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
}
}
});
}
},
debounceDispportRemark: function (e) {
var _a;
var _this = this;
this.setData({
commentId: e.detail.commentId
});
this.data.commentList.forEach(function (element, index) {
if (e.detail.commentId == element.commentId) {
_this.setData({
commentUserLike: element.userLike,
commentUserDislike: element.userDislike,
commentUlikesTotal: parseInt(element.approveNum),
commentUopposeLTotal: parseInt(element.opposeNum),
commentIndex: index
});
}
});
if (this.data.commentUserLike == '0' && this.data.commentUserDislike == '0') {
this.setData({
commentAttitude: "1",
});
if (this.data.commentUserDislike == '0') {
this.setData((_a = {},
_a["commentList[" + this.data.commentIndex + "].opposeNum"] = this.data.commentUopposeLTotal += 1,
_a["commentList[" + this.data.commentIndex + "].userDislike"] = '1',
_a.commentUserDislike = '1',
_a));
}
this.commentStatement();
}
else if (this.data.commentUserLike == '1' || this.data.commentUserDislike == '1') {
wx.showModal({
title: '',
content: '已表达过态度,不可以更改哦!',
showCancel: false,
confirmText: '确定',
confirmColor: '#3CC51F',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
}
}
});
}
},
changeRemarkType: function (e) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this.data.iscommentStatement) {
return [2, wx.showModal({
title: '',
content: '表态正在生成,请稍等切换',
showCancel: false,
confirmText: '确定',
confirmColor: '#3CC51F',
})];
}
this.setData({
remarkType: e.detail.type,
isShow: false,
loadVisible: true,
loadType: 'more',
remarkTypeLoading: true,
});
if (!(e.detail.type == "hot")) return [3, 2];
this.setData({
commentList: [],
pageIndex: 1,
orderType: '1',
});
return [4, this.getCommentList()];
case 1:
_a.sent();
this.setData({
remarkTypeLoading: false
});
return [3, 4];
case 2:
if (!(e.detail.type == "new")) return [3, 4];
this.setData({
commentList: [],
pageIndex: 1,
orderType: '0',
});
return [4, this.getCommentList()];
case 3:
_a.sent();
this.setData({
remarkTypeLoading: false
});
_a.label = 4;
case 4: return [2];
}
});
});
},
closeContent: function () {
var _this = this;
wx.showModal({
title: '确认要将本条内容关闭吗?',
content: '关闭后,在群内不显示话题内容,管理后台保留数据,可以查看',
showCancel: true,
cancelText: '取消',
cancelColor: '#000000',
confirmText: '确定',
confirmColor: '#04BCA0',
success: function (res) {
if (res.confirm) {
_this.closeTopic();
wx.showToast({
title: '关闭话题成功',
icon: 'success',
duration: 2000,
mask: true,
success: function (res) { }
});
wx.setStorageSync('isBackOpen', false);
wx.navigateTo({ url: '/subpages/clerkOnline/pages/myGroup/myGroup' });
}
else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
fixedTop: function () {
var _this = this;
if (this.data.TopFlag == '1') {
this.setData({
topType: '2'
});
wx.showModal({
title: '确认要将本条内容取消置顶吗?',
content: '取消置顶后,话题会按照发布时间排序需要在群内滑动查找内容',
showCancel: true,
cancelText: '取消',
cancelColor: '#000000',
confirmText: '确定',
confirmColor: '#04BCA0',
success: function (res) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!res.confirm) return [3, 2];
return [4, this.SetTopTopic()];
case 1:
_a.sent();
wx.showToast({
title: '取消置顶成功',
icon: 'success',
duration: 2000,
mask: true,
success: function (res) { }
});
this.setData({
TopFlag: '0'
});
wx.setStorageSync('isBackOpen', false);
return [3, 3];
case 2:
if (res.cancel) {
}
_a.label = 3;
case 3: return [2];
}
});
}); }
});
}
else if (this.data.TopFlag == '0') {
this.setData({
topType: '1'
});
wx.showModal({
title: '确认要将本条内容置顶吗?',
content: '置顶后,话题会被群成员优先看到查看内容',
showCancel: true,
cancelText: '取消',
cancelColor: '#000000',
confirmText: '确定',
confirmColor: '#04BCA0',
success: function (res) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!res.confirm) return [3, 2];
return [4, this.SetTopTopic()];
case 1:
_a.sent();
wx.showToast({
title: '置顶成功',
icon: 'success',
duration: 2000,
mask: true,
success: function (res) { }
});
this.setData({
TopFlag: '1'
});
wx.setStorageSync('isBackOpen', false);
return [3, 3];
case 2:
if (res.cancel) {
}
_a.label = 3;
case 3: return [2];
}
});
}); }
});
}
},
SetTopTopic: function () {
return __awaiter(this, void 0, void 0, function () {
var obj, res;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
obj = {
topicId: this.data.topicId,
topType: this.data.topType
};
return [4, clerkOnline_1.SetTopTopic(obj)];
case 1:
res = _a.sent();
return [2];
}
});
});
},
closeTopic: function () {
return __awaiter(this, void 0, void 0, function () {
var res, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 2, , 3]);
return [4, clerkOnline_1.closeTopic(this.data.topicId)];
case 1:
res = _b.sent();
console.log('关闭', res);
return [3, 3];
case 2:
_a = _b.sent();
return [3, 3];
case 3: return [2];
}
});
});
},
replyRemark: function (e) {
wx.setStorageSync('isBackOpenTopic', false);
wx.navigateTo({
url: "/subpages/clerkOnline/pages/remarkOrReply/remarkOrReply?type=" + e.detail.type + "&topicId=" + e.detail.topicId + "&faCommentId=" + e.detail.commentId
});
},
commentsIndex: function (e) {
wx.setStorageSync('isBackOpenTopic', false);
console.log('e.currentTarget.dataset.topicid', e.currentTarget.dataset);
wx.navigateTo({
url: "/subpages/clerkOnline/pages/remarkOrReply/remarkOrReply?type=" + e.currentTarget.dataset.type + "&topicId=" + e.currentTarget.dataset.topicid
});
},
getTopicDetail: function () {
return __awaiter(this, void 0, void 0, function () {
var res, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 2, , 3]);
return [4, clerkOnline_1.getTopicDetail(this.data.topicId)];
case 1:
res = _b.sent();
this.setData({
topList: res.data,
manageFlag: res.data.manageFlag,
selfPublishFlag: res.data.selfPublishFlag,
TopFlag: res.data.topFlag,
userLike: res.data.userLike,
userDislike: res.data.userDislike,
likesTotal: res.data.likesTotal - 0,
opposeLTotal: res.data.opposeLTotal - 0
});
console.log('res话题详情', res);
return [3, 3];
case 2:
_a = _b.sent();
return [3, 3];
case 3: return [2];
}
});
});
},
getCommentList: function () {
return __awaiter(this, void 0, void 0, function () {
var obj, res, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
this.setData({
loadVisible: true,
loadType: 'more',
isShow: false,
});
obj = {
pageIndex: this.data.pageIndex,
pageSize: this.data.pageSize,
topicId: this.data.topicId,
orderType: this.data.orderType
};
_b.label = 1;
case 1:
_b.trys.push([1, 3, , 4]);
return [4, clerkOnline_1.getCommentList(obj)];
case 2:
res = _b.sent();
if (this.data.pageIndex == 1) {
this.setData({
commentList: res.data,
commentListLength: res.data.length,
loadVisible: false,
});
}
else {
this.setData({
commentList: this.data.commentList.concat(res.data),
commentListLength: res.data.length,
loadVisible: false,
});
}
if (this.data.commentListLength < this.data.pageSize) {
console.log('6666666666666666666');
this.setData({
loadVisible: true,
loadType: 'none'
});
}
if (this.data.pageIndex == 1 && this.data.commentListLength == 0) {
this.setData({
isShow: true,
loadVisible: false,
});
}
return [3, 4];
case 3:
_a = _b.sent();
this.setData({
loadVisible: false
});
return [3, 4];
case 4: return [2];
}
});
});
},
commentStatement: function () {
return __awaiter(this, void 0, void 0, function () {
var obj, res, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
this.setData({
iscommentStatement: true
});
obj = {
attitude: this.data.commentAttitude,
topicId: this.data.topicId,
commentId: this.data.commentId
};
_b.label = 1;
case 1:
_b.trys.push([1, 3, , 4]);
return [4, clerkOnline_1.commentStatement(obj)];
case 2:
res = _b.sent();
this.setData({
iscommentStatement: false
});
return [3, 4];
case 3:
_a = _b.sent();
this.setData({
iscommentStatement: false
});
return [3, 4];
case 4: return [2];
}
});
});
},
onReachBottom: function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this.data.remarkTypeLoading) {
return [2];
}
if (this.data.commentListLength < this.data.pageSize) {
return [2];
}
this.setData({
pageIndex: ++this.data.pageIndex,
});
return [4, this.getCommentList()];
case 1:
_a.sent();
return [2];
}
});
});
},
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWNEZXRhaWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b3BpY0RldGFpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJEQUF1STtBQUN2SSxJQUFJLENBQUM7SUFDSCxJQUFJLEVBQUU7UUFDSixTQUFTLEVBQUUsRUFBRTtRQUNiLFNBQVMsRUFBRTtZQUNULFlBQVksRUFBRSxDQUFDO1lBQ2YsWUFBWSxFQUFFLEVBQUU7U0FDakI7UUFDRCxTQUFTLEVBQUUsQ0FBQztRQUNaLFFBQVEsRUFBRSxFQUFFO1FBQ1osVUFBVSxFQUFFLEtBQUs7UUFDakIsT0FBTyxFQUFFLEVBQUU7UUFDWCxPQUFPLEVBQUUsRUFBRTtRQUNYLFVBQVUsRUFBRSxFQUFFO1FBQ2QsT0FBTyxFQUFFLEVBQUU7UUFDWCxPQUFPLEVBQUUsRUFBRTtRQUNYLGVBQWUsRUFBRSxFQUFFO1FBQ25CLFFBQVEsRUFBRSxFQUFFO1FBQ1osUUFBUSxFQUFFLEVBQUU7UUFDWixXQUFXLEVBQUUsRUFBRTtRQUNmLFVBQVUsRUFBRSxFQUFFO1FBQ2QsWUFBWSxFQUFFLEVBQUU7UUFDaEIsU0FBUyxFQUFFLEdBQUc7UUFDZCxXQUFXLEVBQUUsRUFBRTtRQUNmLGVBQWUsRUFBRSxFQUFFO1FBQ25CLGtCQUFrQixFQUFFLEVBQUU7UUFDdEIsa0JBQWtCLEVBQUUsRUFBRTtRQUN0QixvQkFBb0IsRUFBRSxFQUFFO1FBQ3hCLGVBQWUsRUFBRSxFQUFFO1FBQ25CLFNBQVMsRUFBRSxFQUFFO1FBQ2IsWUFBWSxFQUFFLENBQUM7UUFDZixXQUFXLEVBQUUsS0FBSztRQUNsQixRQUFRLEVBQUUsTUFBTTtRQUNoQixtQkFBbUIsRUFBRSxLQUFLO1FBQzFCLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsaUJBQWlCLEVBQUUsQ0FBQztRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLGtCQUFrQixFQUFFLEtBQUs7UUFDekIs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NEJBQ25DLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87NEJBQzFCLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7eUJBQy9CLENBQUE7Ozs7d0JBRWdCLFdBQU0sOEJBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUE7O3dCQUF0QyxHQUFHLEdBQVEsU0FBMkI7d0JBQzFDLElBQUksQ0FBQyxPQUFPLENBQUM7NEJBQ1gsa0JBQWtCLEVBQUUsS0FBSzt5QkFDMUIsQ0FBQyxDQUFBOzs7O3dCQUVGLElBQUksQ0FBQyxPQUFPLENBQUM7NEJBQ1gsa0JBQWtCLEVBQUUsS0FBSzt5QkFDMUIsQ0FBQyxDQUFBOzs7Ozs7S0FFTDtJQUNLLGFBQWE7Ozs7O3dCQUNqQixJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUM7NEJBQUMsV0FBTTt5QkFBRTt3QkFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFOzRCQUNwRCxXQUFNO3lCQUNQO3dCQUNELElBQUksQ0FBQyxPQUFPLENBQUM7NEJBQ1gsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO3lCQUNqQyxDQUFDLENBQUE7d0JBQ0YsV0FBTSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUE7O3dCQUEzQixTQUEyQixDQUFBOzs7OztLQUM1QjtDQUNGLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFRvcGljRGV0YWlsLCBTZXRUb3BUb3BpYywgY2xvc2VUb3BpYywgdG9waWNTdGF0ZW1lbnQsIGdldENvbW1lbnRMaXN0LCBjb21tZW50U3RhdGVtZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpL2NsZXJrT25saW5lJ1xyXG5QYWdlKHtcclxuICBkYXRhOiB7XHJcbiAgICBkZXRhaWxPYmo6IHt9LFxyXG4gICAgcmVtYXJrT2JqOiB7IC8vIOivhOiuuuWIl+ihqFxyXG4gICAgICBzdGF0ZW1lbnROdW06IDAsXHJcbiAgICAgIGNvbW1lbnRzTGlzdDogW11cclxuICAgIH0sXHJcbiAgICBwYWdlSW5kZXg6IDEsXHJcbiAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICByZW1hcmtUeXBlOiAnbmV3JywgLy8g6K+E6K66IOacgOaWsOacgOeDreexu+Wei1xyXG4gICAgdG9waWNJZDogJycsXHJcbiAgICB0b3BMaXN0OiBbXSxcclxuICAgIG1hbmFnZUZsYWc6ICcnLC8v566h55CG5ZGY5qCH6K+G77yaMOWQpu+8jDHmmK9cclxuICAgIFRvcEZsYWc6ICcnLC8v572u6aG25qCH6K+G77yaMOWQpu+8jDHmmK8g5Y+q5pyJ566h55CG5ZGY5pyJ572u6aG255qE5p2D6ZmQXHJcbiAgICB0b3BUeXBlOiAnJywvL+aTjeS9nOexu+Wei++8mjHvvIznva7pobbvvIwy5Y+W5raIXHJcbiAgICBzZWxmUHVibGlzaEZsYWc6ICcnLC8v5Y+R5biD6ICF5qCH6K+G77yaMOWQpu+8jDHmmK9cclxuICAgIGF0dGl0dWRlOiAnJywvL+ihqOaAgSAw6LWe77ybMei4qVxyXG4gICAgdXNlckxpa2U6ICcnLC8v55So5oi35piv5ZCm6LWe6L+H77yaMOWQpu+8jDHmmK9cclxuICAgIHVzZXJEaXNsaWtlOiAnJywvL+eUqOaIt+aYr+WQpui4qei/h++8mjDlkKbvvIwx5pivXHJcbiAgICBsaWtlc1RvdGFsOiAnJyxcclxuICAgIG9wcG9zZUxUb3RhbDogJycsXHJcbiAgICBvcmRlclR5cGU6ICcwJywgICAvL+aOkuW6j+aWueW8jyAwOiDojrflj5bmnIDmlrDliJfooajvvIwxOiDojrflj5bmnIDng63liJfooahcclxuICAgIGNvbW1lbnRMaXN0OiBbXSwvL+ivhOiuuuWIl+ihqFxyXG4gICAgY29tbWVudFVzZXJMaWtlOiAnJyxcclxuICAgIGNvbW1lbnRVc2VyRGlzbGlrZTogXCJcIixcclxuICAgIGNvbW1lbnRVbGlrZXNUb3RhbDogJycsXHJcbiAgICBjb21tZW50VW9wcG9zZUxUb3RhbDogJycsXHJcbiAgICBjb21tZW50QXR0aXR1ZGU6ICcnLFxyXG4gICAgY29tbWVudElkOiAnJyxcclxuICAgIGNvbW1lbnRJbmRleDogMCxcclxuICAgIGxvYWRWaXNpYmxlOiBmYWxzZSxcclxuICAgIGxvYWRUeXBlOiAnbW9yZScsXHJcbiAgICBpc1Nob3dEZXRhaWxDb250ZW50OiBmYWxzZSxcclxuICAgIGlzU2hvd0RldGFpbFJlbWFyazogZmFsc2UsXHJcbiAgICBjb21tZW50TGlzdExlbmd0aDogMCxcclxuICAgIGlzU2hvdzogZmFsc2UsXHJcbiAgICBpc2NvbW1lbnRTdGF0ZW1lbnQ6IGZhbHNlLFxyXG4gICAgcmVtYXJrVHlwZUxvYWRpbmc6ZmFsc2UsXHJcbiAgICBpc0JhY2tPcGVuVG9waWM6dHJ1ZSwvL3RydWXliLfmlrAgZmFsc2XkuI3liLfmlrBcclxuICB9LFxyXG4gIGFzeW5jIG9uU2hvdygpe1xyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgaXNCYWNrT3BlblRvcGljOnd4LmdldFN0b3JhZ2VTeW5jKCdpc0JhY2tPcGVuVG9waWMnKVxyXG4gICAgfSlcclxuICAgIGlmKCF0aGlzLmRhdGEuaXNCYWNrT3BlblRvcGljKXtyZXR1cm59XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAvLyBsb2FkVmlzaWJsZTogZmFsc2UsXHJcbiAgICAgIGlzU2hvd0RldGFpbENvbnRlbnQ6IGZhbHNlLFxyXG4gICAgICBpc1Nob3dEZXRhaWxSZW1hcms6IGZhbHNlLFxyXG4gICAgICB0b3BpY0lkOiB3eC5nZXRTdG9yYWdlU3luYygndG9waWNJZCcpLFxyXG4gICAgICBpc1Nob3c6ZmFsc2UsXHJcbiAgICAgIGxvYWRWaXNpYmxlOiB0cnVlLFxyXG4gICAgICBsb2FkVHlwZTonbW9yZScsXHJcbiAgICAgIHJlbWFya1R5cGVMb2FkaW5nOnRydWVcclxuICAgIH0pXHJcbiAgICBhd2FpdCB0aGlzLmdldFRvcGljRGV0YWlsKClcclxuICAgIGF3YWl0IHRoaXMuZ2V0Q29tbWVudExpc3QoKVxyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgLy8gbG9hZFZpc2libGU6IGZhbHNlLFxyXG4gICAgICBpc1Nob3dEZXRhaWxDb250ZW50OiB0cnVlLFxyXG4gICAgICBpc1Nob3dEZXRhaWxSZW1hcms6IHRydWUsXHJcbiAgICAgIHJlbWFya1R5cGVMb2FkaW5nOmZhbHNlXHJcbiAgICB9KVxyXG4gIH0sXHJcbiAgb25IaWRlKCl7XHJcbiAgICBjb25zb2xlLmxvZygnaGlkZScpXHJcbiAgfSxcclxuICBvbkxvYWQob3B0aW9ucykge1xyXG4gICAgd3guc2V0U3RvcmFnZVN5bmMoJ3RvcGljSWQnLG9wdGlvbnMuaWQpXHJcbiAgICBjb25zb2xlLmxvZygnb25Mb2FkJylcclxuICB9LFxyXG4gIC8qKioqKioqKioqKioqKioqKioq54K56LWe6Lipc3RhcnQqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgYXN5bmMgc3VwcG9ydElzc3VlT3JQcm9qZWN0KCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS51c2VyTGlrZSA9PSAnMCcgJiYgdGhpcy5kYXRhLnVzZXJEaXNsaWtlID09ICcwJykge1xyXG4gICAgICAvLyDnlKjmiLfmnKrotZ7ov4fmnKrouKnov4dcclxuICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICBhdHRpdHVkZTogXCIwXCIsXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgdG9waWNJZDogdGhpcy5kYXRhLnRvcGljSWQsXHJcbiAgICAgICAgYXR0aXR1ZGU6IHRoaXMuZGF0YS5hdHRpdHVkZVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGEudXNlckxpa2UgPT0gJzAnKSB7XHJcbiAgICAgICAgLy8g54K56LWeXHJcbiAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgICd0b3BMaXN0Lmxpa2VzVG90YWwnOiB0aGlzLmRhdGEubGlrZXNUb3RhbCArPSAxLFxyXG4gICAgICAgICAgJ3RvcExpc3QudXNlckxpa2UnOiAnMScsXHJcbiAgICAgICAgICB1c2VyTGlrZTogJzEnXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCB0b3BpY1N0YXRlbWVudChvYmopXHJcbiAgICAgIGNvbnNvbGUubG9nKCfotZ4nLCByZXMpXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS51c2VyTGlrZSA9PSAnMScgfHwgdGhpcy5kYXRhLnVzZXJEaXNsaWtlID09ICcxJykge1xyXG4gICAgICB3eC5zaG93TW9kYWwoe1xyXG4gICAgICAgIHRpdGxlOiAnJywgLy/mj5DnpLrnmoTmoIfpopgsXHJcbiAgICAgICAgY29udGVudDogJ+W3suihqOi+vui/h+aAgeW6pu+8jOS4jeWPr+S7peabtOaUueWTpu+8gScsIC8v5o+Q56S655qE5YaF5a65LFxyXG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlLCAvL+aYr+WQpuaYvuekuuWPlua2iOaMiemSrixcclxuICAgICAgICBjb25maXJtVGV4dDogJ+ehruWumicsIC8v56Gu5a6a5oyJ6ZKu55qE5paH5a2X77yM6buY6K6k5Li65Y+W5raI77yM5pyA5aSaIDQg5Liq5a2X56ymLFxyXG4gICAgICAgIGNvbmZpcm1Db2xvcjogJyMzQ0M1MUYnLCAvL+ehruWumuaMiemSrueahOaWh+Wtl+minOiJsixcclxuICAgICAgICBzdWNjZXNzOiByZXMgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5jb25maXJtKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vnoa7lrponKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH0sXHJcbiAgYXN5bmMgZGlzcHBvcnRJc3N1ZU9yUHJvamVjdCgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEudXNlckxpa2UgPT0gJzAnICYmIHRoaXMuZGF0YS51c2VyRGlzbGlrZSA9PSAnMCcpIHtcclxuICAgICAgLy8g55So5oi35pyq6LWe6L+H5pyq6Lip6L+HXHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgYXR0aXR1ZGU6IFwiMVwiLFxyXG4gICAgICB9KVxyXG4gICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgIHRvcGljSWQ6IHRoaXMuZGF0YS50b3BpY0lkLFxyXG4gICAgICAgIGF0dGl0dWRlOiB0aGlzLmRhdGEuYXR0aXR1ZGVcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhLnVzZXJEaXNsaWtlID09ICcwJykge1xyXG4gICAgICAgIC8vIOeCuei1nlxyXG4gICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAndG9wTGlzdC5vcHBvc2VMVG90YWwnOiB0aGlzLmRhdGEub3Bwb3NlTFRvdGFsICs9IDEsXHJcbiAgICAgICAgICAndG9wTGlzdC51c2VyRGlzbGlrZSc6ICcxJyxcclxuICAgICAgICAgIHVzZXJEaXNsaWtlOiAnMSdcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIGxldCByZXM6IGFueSA9IGF3YWl0IHRvcGljU3RhdGVtZW50KG9iailcclxuICAgICAgY29uc29sZS5sb2coJ+i1nicsIHJlcylcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLnVzZXJMaWtlID09ICcxJyB8fCB0aGlzLmRhdGEudXNlckRpc2xpa2UgPT0gJzEnKSB7XHJcbiAgICAgIHd4LnNob3dNb2RhbCh7XHJcbiAgICAgICAgdGl0bGU6ICcnLCAvL+aPkOekuueahOagh+mimCxcclxuICAgICAgICBjb250ZW50OiAn5bey6KGo6L6+6L+H5oCB5bqm77yM5LiN5Y+v5Lul5pu05pS55ZOm77yBJywgLy/mj5DnpLrnmoTlhoXlrrksXHJcbiAgICAgICAgc2hvd0NhbmNlbDogZmFsc2UsIC8v5piv5ZCm5pi+56S65Y+W5raI5oyJ6ZKuLFxyXG4gICAgICAgIGNvbmZpcm1UZXh0OiAn56Gu5a6aJywgLy/noa7lrprmjInpkq7nmoTmloflrZfvvIzpu5jorqTkuLrlj5bmtojvvIzmnIDlpJogNCDkuKrlrZfnrKYsXHJcbiAgICAgICAgY29uZmlybUNvbG9yOiAnIzNDQzUxRicsIC8v56Gu5a6a5oyJ6ZKu55qE5paH5a2X6aKc6ImyLFxyXG4gICAgICAgIHN1Y2Nlc3M6IHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLmNvbmZpcm0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ+eUqOaIt+eCueWHu+ehruWumicpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9LFxyXG4gIGRlYm91bmNlU3VwcG9ydFJlbWFyayhlOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIGNvbW1lbnRJZDogZS5kZXRhaWwuY29tbWVudElkXHJcbiAgICB9KVxyXG4gICAgdGhpcy5kYXRhLmNvbW1lbnRMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoZS5kZXRhaWwuY29tbWVudElkID09IGVsZW1lbnQuY29tbWVudElkKSB7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgIGNvbW1lbnRVc2VyTGlrZTogZWxlbWVudC51c2VyTGlrZSxcclxuICAgICAgICAgIGNvbW1lbnRVc2VyRGlzbGlrZTogZWxlbWVudC51c2VyRGlzbGlrZSxcclxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgIGNvbW1lbnRVbGlrZXNUb3RhbDogcGFyc2VJbnQoZWxlbWVudC5hcHByb3ZlTnVtKSxcclxuICAgICAgICAgIGNvbW1lbnRVb3Bwb3NlTFRvdGFsOiBlbGVtZW50Lm9wcG9zZU51bSxcclxuICAgICAgICAgIGNvbW1lbnRJbmRleDogaW5kZXhcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLy8g54K55Ye755qE5pe25YCZXHJcbiAgICBpZiAodGhpcy5kYXRhLmNvbW1lbnRVc2VyTGlrZSA9PSAnMCcgJiYgdGhpcy5kYXRhLmNvbW1lbnRVc2VyRGlzbGlrZSA9PSAnMCcpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YS5jb21tZW50VXNlckxpa2UgPT0gJzAnKSB7XHJcbiAgICAgICAgLy8g55So5oi35pyq6LWe6L+H5pyq6Lip6L+HXHJcbiAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgIGNvbW1lbnRBdHRpdHVkZTogJzAnLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc29sZS5sb2coJ2NvbW1lbnRBdHRpdHVkZScsIHRoaXMuZGF0YS5jb21tZW50QXR0aXR1ZGUpXHJcbiAgICAgICAgLy8g54K56LWeXHJcbiAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgIFtgY29tbWVudExpc3RbJHt0aGlzLmRhdGEuY29tbWVudEluZGV4fV0uYXBwcm92ZU51bWBdOiB0aGlzLmRhdGEuY29tbWVudFVsaWtlc1RvdGFsICs9IDEsXHJcbiAgICAgICAgICBbYGNvbW1lbnRMaXN0WyR7dGhpcy5kYXRhLmNvbW1lbnRJbmRleH1dLnVzZXJMaWtlYF06ICcxJyxcclxuICAgICAgICAgIGNvbW1lbnRVc2VyTGlrZTogJzEnXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbW1lbnRTdGF0ZW1lbnQoKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEuY29tbWVudFVzZXJMaWtlID09ICcxJyB8fCB0aGlzLmRhdGEuY29tbWVudFVzZXJEaXNsaWtlID09ICcxJykge1xyXG4gICAgICB3eC5zaG93TW9kYWwoe1xyXG4gICAgICAgIHRpdGxlOiAnJywgLy/mj5DnpLrnmoTmoIfpopgsXHJcbiAgICAgICAgY29udGVudDogJ+W3suihqOi+vui/h+aAgeW6pu+8jOS4jeWPr+S7peabtOaUueWTpu+8gScsIC8v5o+Q56S655qE5YaF5a65LFxyXG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlLCAvL+aYr+WQpuaYvuekuuWPlua2iOaMiemSrixcclxuICAgICAgICBjb25maXJtVGV4dDogJ+ehruWumicsIC8v56Gu5a6a5oyJ6ZKu55qE5paH5a2X77yM6buY6K6k5Li65Y+W5raI77yM5pyA5aSaIDQg5Liq5a2X56ymLFxyXG4gICAgICAgIGNvbmZpcm1Db2xvcjogJyMzQ0M1MUYnLCAvL+ehruWumuaMiemSrueahOaWh+Wtl+minOiJsixcclxuICAgICAgICBzdWNjZXNzOiByZXMgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5jb25maXJtKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vnoa7lrponKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSxcclxuICBkZWJvdW5jZURpc3Bwb3J0UmVtYXJrKGU6IGFueSkge1xyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgY29tbWVudElkOiBlLmRldGFpbC5jb21tZW50SWRcclxuICAgIH0pXHJcbiAgICB0aGlzLmRhdGEuY29tbWVudExpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChlLmRldGFpbC5jb21tZW50SWQgPT0gZWxlbWVudC5jb21tZW50SWQpIHtcclxuICAgICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgY29tbWVudFVzZXJMaWtlOiBlbGVtZW50LnVzZXJMaWtlLFxyXG4gICAgICAgICAgY29tbWVudFVzZXJEaXNsaWtlOiBlbGVtZW50LnVzZXJEaXNsaWtlLFxyXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgY29tbWVudFVsaWtlc1RvdGFsOiBwYXJzZUludChlbGVtZW50LmFwcHJvdmVOdW0pLFxyXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgY29tbWVudFVvcHBvc2VMVG90YWw6IHBhcnNlSW50KGVsZW1lbnQub3Bwb3NlTnVtKSxcclxuICAgICAgICAgIGNvbW1lbnRJbmRleDogaW5kZXhcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLy8g54K55Ye755qE5pe25YCZXHJcbiAgICBpZiAodGhpcy5kYXRhLmNvbW1lbnRVc2VyTGlrZSA9PSAnMCcgJiYgdGhpcy5kYXRhLmNvbW1lbnRVc2VyRGlzbGlrZSA9PSAnMCcpIHtcclxuICAgICAgLy8g55So5oi35pyq6LWe6L+H5pyq6Lip6L+HXHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgY29tbWVudEF0dGl0dWRlOiBcIjFcIixcclxuICAgICAgfSlcclxuICAgICAgaWYgKHRoaXMuZGF0YS5jb21tZW50VXNlckRpc2xpa2UgPT0gJzAnKSB7XHJcbiAgICAgICAgLy8g54K56LipXHJcbiAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgIFtgY29tbWVudExpc3RbJHt0aGlzLmRhdGEuY29tbWVudEluZGV4fV0ub3Bwb3NlTnVtYF06IHRoaXMuZGF0YS5jb21tZW50VW9wcG9zZUxUb3RhbCArPSAxLFxyXG4gICAgICAgICAgW2Bjb21tZW50TGlzdFske3RoaXMuZGF0YS5jb21tZW50SW5kZXh9XS51c2VyRGlzbGlrZWBdOiAnMScsXHJcbiAgICAgICAgICBjb21tZW50VXNlckRpc2xpa2U6ICcxJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21tZW50U3RhdGVtZW50KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLmNvbW1lbnRVc2VyTGlrZSA9PSAnMScgfHwgdGhpcy5kYXRhLmNvbW1lbnRVc2VyRGlzbGlrZSA9PSAnMScpIHtcclxuICAgICAgd3guc2hvd01vZGFsKHtcclxuICAgICAgICB0aXRsZTogJycsIC8v5o+Q56S655qE5qCH6aKYLFxyXG4gICAgICAgIGNvbnRlbnQ6ICflt7Looajovr7ov4fmgIHluqbvvIzkuI3lj6/ku6Xmm7TmlLnlk6bvvIEnLCAvL+aPkOekuueahOWGheWuuSxcclxuICAgICAgICBzaG93Q2FuY2VsOiBmYWxzZSwgLy/mmK/lkKbmmL7npLrlj5bmtojmjInpkq4sXHJcbiAgICAgICAgY29uZmlybVRleHQ6ICfnoa7lrponLCAvL+ehruWumuaMiemSrueahOaWh+Wtl++8jOm7mOiupOS4uuWPlua2iO+8jOacgOWkmiA0IOS4quWtl+espixcclxuICAgICAgICBjb25maXJtQ29sb3I6ICcjM0NDNTFGJywgLy/noa7lrprmjInpkq7nmoTmloflrZfpopzoibIsXHJcbiAgICAgICAgc3VjY2VzczogcmVzID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuY29uZmlybSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye756Gu5a6aJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgLyoqKioqKioqKioqKioqKioqKirngrnotZ7ouKllbmQqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgLy8g5pyA5paw5pyA54OtIOivhOiuuuWIl+ihqOWIh+aNolxyXG4gIGFzeW5jIGNoYW5nZVJlbWFya1R5cGUoZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLmlzY29tbWVudFN0YXRlbWVudCkge1xyXG4gICAgICByZXR1cm4gd3guc2hvd01vZGFsKHtcclxuICAgICAgICB0aXRsZTogJycsIC8v5o+Q56S655qE5qCH6aKYLFxyXG4gICAgICAgIGNvbnRlbnQ6ICfooajmgIHmraPlnKjnlJ/miJAs6K+356iN562J5YiH5o2iJywgLy/mj5DnpLrnmoTlhoXlrrksXHJcbiAgICAgICAgc2hvd0NhbmNlbDogZmFsc2UsIC8v5piv5ZCm5pi+56S65Y+W5raI5oyJ6ZKuLFxyXG4gICAgICAgIGNvbmZpcm1UZXh0OiAn56Gu5a6aJywgLy/noa7lrprmjInpkq7nmoTmloflrZfvvIzpu5jorqTkuLrlj5bmtojvvIzmnIDlpJogNCDkuKrlrZfnrKYsXHJcbiAgICAgICAgY29uZmlybUNvbG9yOiAnIzNDQzUxRicsIC8v56Gu5a6a5oyJ6ZKu55qE5paH5a2X6aKc6ImyLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAvLyAgIHJlbWFya1R5cGU6IGUuZGV0YWlsLnR5cGUsXHJcbiAgICAvLyB9KVxyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgcmVtYXJrVHlwZTogZS5kZXRhaWwudHlwZSxcclxuICAgICAgaXNTaG93OiBmYWxzZSxcclxuICAgICAgbG9hZFZpc2libGU6IHRydWUsXHJcbiAgICAgIGxvYWRUeXBlOiAnbW9yZScsXHJcbiAgICAgIHJlbWFya1R5cGVMb2FkaW5nOnRydWUsXHJcbiAgICB9KVxyXG4gICAgaWYgKGUuZGV0YWlsLnR5cGUgPT0gXCJob3RcIikge1xyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIGNvbW1lbnRMaXN0OiBbXSxcclxuICAgICAgICBwYWdlSW5kZXg6IDEsXHJcbiAgICAgICAgb3JkZXJUeXBlOiAnMScsXHJcbiAgICAgIH0pXHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q29tbWVudExpc3QoKVxyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIHJlbWFya1R5cGVMb2FkaW5nOmZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2UgaWYgKGUuZGV0YWlsLnR5cGUgPT0gXCJuZXdcIikge1xyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIGNvbW1lbnRMaXN0OiBbXSxcclxuICAgICAgICBwYWdlSW5kZXg6IDEsXHJcbiAgICAgICAgb3JkZXJUeXBlOiAnMCcsXHJcbiAgICAgIH0pXHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q29tbWVudExpc3QoKVxyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIHJlbWFya1R5cGVMb2FkaW5nOmZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICB9LFxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKuWFs+mXrSznva7pobYgKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgY2xvc2VDb250ZW50KCkge1xyXG4gICAgd3guc2hvd01vZGFsKHtcclxuICAgICAgdGl0bGU6ICfnoa7orqTopoHlsIbmnKzmnaHlhoXlrrnlhbPpl63lkJfvvJ8nLCAvL+aPkOekuueahOagh+mimCxcclxuICAgICAgY29udGVudDogJ+WFs+mXreWQju+8jOWcqOe+pOWGheS4jeaYvuekuuivnemimOWGheWuuSznrqHnkIblkI7lj7Dkv53nlZnmlbDmja7vvIzlj6/ku6Xmn6XnnIsnLCAvL+aPkOekuueahOWGheWuuSxcclxuICAgICAgc2hvd0NhbmNlbDogdHJ1ZSwgLy/mmK/lkKbmmL7npLrlj5bmtojmjInpkq4sXHJcbiAgICAgIGNhbmNlbFRleHQ6ICflj5bmtognLCAvL+WPlua2iOaMiemSrueahOaWh+Wtl++8jOm7mOiupOS4uuWPlua2iO+8jOacgOWkmiA0IOS4quWtl+espixcclxuICAgICAgY2FuY2VsQ29sb3I6ICcjMDAwMDAwJywgLy/lj5bmtojmjInpkq7nmoTmloflrZfpopzoibIsXHJcbiAgICAgIGNvbmZpcm1UZXh0OiAn56Gu5a6aJywgLy/noa7lrprmjInpkq7nmoTmloflrZfvvIzpu5jorqTkuLrlj5bmtojvvIzmnIDlpJogNCDkuKrlrZfnrKYsXHJcbiAgICAgIGNvbmZpcm1Db2xvcjogJyMwNEJDQTAnLCAvL+ehruWumuaMiemSrueahOaWh+Wtl+minOiJsixcclxuICAgICAgc3VjY2VzczogcmVzID0+IHtcclxuICAgICAgICBpZiAocmVzLmNvbmZpcm0pIHtcclxuICAgICAgICAgIHRoaXMuY2xvc2VUb3BpYygpXHJcbiAgICAgICAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgICB0aXRsZTogJ+WFs+mXreivnemimOaIkOWKnycsIC8v5o+Q56S655qE5YaF5a65LFxyXG4gICAgICAgICAgICBpY29uOiAnc3VjY2VzcycsIC8v5Zu+5qCHLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwMCwgLy/lu7bov5/ml7bpl7QsXHJcbiAgICAgICAgICAgIG1hc2s6IHRydWUsIC8v5pi+56S66YCP5piO6JKZ5bGC77yM6Ziy5q2i6Kem5pG456m/6YCPLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiByZXMgPT4geyB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHd4LnNldFN0b3JhZ2VTeW5jKCdpc0JhY2tPcGVuJywgZmFsc2UpXHJcbiAgICAgICAgICB3eC5uYXZpZ2F0ZVRvKHsgdXJsOiAnL3N1YnBhZ2VzL2NsZXJrT25saW5lL3BhZ2VzL215R3JvdXAvbXlHcm91cCcgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0sXHJcbiAgZml4ZWRUb3AoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlRvcEZsYWcgPT0gJzEnKSB7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgdG9wVHlwZTogJzInXHJcbiAgICAgIH0pXHJcbiAgICAgIHd4LnNob3dNb2RhbCh7XHJcbiAgICAgICAgdGl0bGU6ICfnoa7orqTopoHlsIbmnKzmnaHlhoXlrrnlj5bmtojnva7pobblkJfvvJ8nLCAvL+aPkOekuueahOagh+mimCxcclxuICAgICAgICBjb250ZW50OiAn5Y+W5raI572u6aG25ZCO77yM6K+d6aKY5Lya5oyJ54Wn5Y+R5biD5pe26Ze05o6S5bqP6ZyA6KaB5Zyo576k5YaF5ruR5Yqo5p+l5om+5YaF5a65JywgLy/mj5DnpLrnmoTlhoXlrrlcclxuICAgICAgICBzaG93Q2FuY2VsOiB0cnVlLCAvL+aYr+WQpuaYvuekuuWPlua2iOaMiemSrixcclxuICAgICAgICBjYW5jZWxUZXh0OiAn5Y+W5raIJywgLy/lj5bmtojmjInpkq7nmoTmloflrZfvvIzpu5jorqTkuLrlj5bmtojvvIzmnIDlpJogNCDkuKrlrZfnrKYsXHJcbiAgICAgICAgY2FuY2VsQ29sb3I6ICcjMDAwMDAwJywgLy/lj5bmtojmjInpkq7nmoTmloflrZfpopzoibIsXHJcbiAgICAgICAgY29uZmlybVRleHQ6ICfnoa7lrponLCAvL+ehruWumuaMiemSrueahOaWh+Wtl++8jOm7mOiupOS4uuWPlua2iO+8jOacgOWkmiA0IOS4quWtl+espixcclxuICAgICAgICBjb25maXJtQ29sb3I6ICcjMDRCQ0EwJywgLy/noa7lrprmjInpkq7nmoTmloflrZfpopzoibIsXHJcbiAgICAgICAgc3VjY2VzczogYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuY29uZmlybSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLlNldFRvcFRvcGljKClcclxuICAgICAgICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICB0aXRsZTogJ+WPlua2iOe9rumhtuaIkOWKnycsIC8v5o+Q56S655qE5YaF5a65LFxyXG4gICAgICAgICAgICAgIGljb246ICdzdWNjZXNzJywgLy/lm77moIcsXHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDIwMDAsIC8v5bu26L+f5pe26Ze0LFxyXG4gICAgICAgICAgICAgIG1hc2s6IHRydWUsIC8v5pi+56S66YCP5piO6JKZ5bGC77yM6Ziy5q2i6Kem5pG456m/6YCPLFxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IHJlcyA9PiB7IH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgVG9wRmxhZzogJzAnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHd4LnNldFN0b3JhZ2VTeW5jKCdpc0JhY2tPcGVuJywgZmFsc2UpXHJcbiAgICAgICAgICAgIC8vIHd4Lm5hdmlnYXRlVG8oeyB1cmw6ICcvc3VicGFnZXMvY2xlcmtPbmxpbmUvcGFnZXMvbXlHcm91cC9teUdyb3VwJyB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS5Ub3BGbGFnID09ICcwJykge1xyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIHRvcFR5cGU6ICcxJ1xyXG4gICAgICB9KVxyXG4gICAgICB3eC5zaG93TW9kYWwoe1xyXG4gICAgICAgIHRpdGxlOiAn56Gu6K6k6KaB5bCG5pys5p2h5YaF5a65572u6aG25ZCX77yfJywgLy/mj5DnpLrnmoTmoIfpopgsXHJcbiAgICAgICAgY29udGVudDogJ+e9rumhtuWQju+8jOivnemimOS8muiiq+e+pOaIkOWRmOS8mOWFiOeci+WIsOafpeeci+WGheWuuScsIC8v5o+Q56S655qE5YaF5a65XHJcbiAgICAgICAgc2hvd0NhbmNlbDogdHJ1ZSwgLy/mmK/lkKbmmL7npLrlj5bmtojmjInpkq4sXHJcbiAgICAgICAgY2FuY2VsVGV4dDogJ+WPlua2iCcsIC8v5Y+W5raI5oyJ6ZKu55qE5paH5a2X77yM6buY6K6k5Li65Y+W5raI77yM5pyA5aSaIDQg5Liq5a2X56ymLFxyXG4gICAgICAgIGNhbmNlbENvbG9yOiAnIzAwMDAwMCcsIC8v5Y+W5raI5oyJ6ZKu55qE5paH5a2X6aKc6ImyLFxyXG4gICAgICAgIGNvbmZpcm1UZXh0OiAn56Gu5a6aJywgLy/noa7lrprmjInpkq7nmoTmloflrZfvvIzpu5jorqTkuLrlj5bmtojvvIzmnIDlpJogNCDkuKrlrZfnrKYsXHJcbiAgICAgICAgY29uZmlybUNvbG9yOiAnIzA0QkNBMCcsIC8v56Gu5a6a5oyJ6ZKu55qE5paH5a2X6aKc6ImyLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXMpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuY29uZmlybSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLlNldFRvcFRvcGljKClcclxuICAgICAgICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICAgICAgICB0aXRsZTogJ+e9rumhtuaIkOWKnycsIC8v5o+Q56S655qE5YaF5a65LFxyXG4gICAgICAgICAgICAgIGljb246ICdzdWNjZXNzJywgLy/lm77moIcsXHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDIwMDAsIC8v5bu26L+f5pe26Ze0LFxyXG4gICAgICAgICAgICAgIG1hc2s6IHRydWUsIC8v5pi+56S66YCP5piO6JKZ5bGC77yM6Ziy5q2i6Kem5pG456m/6YCPLFxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IHJlcyA9PiB7IH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgVG9wRmxhZzogJzEnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHd4LnNldFN0b3JhZ2VTeW5jKCdpc0JhY2tPcGVuJywgZmFsc2UpXHJcbiAgICAgICAgICAgIC8vIHd4Lm5hdmlnYXRlVG8oeyB1cmw6ICcvc3VicGFnZXMvY2xlcmtPbmxpbmUvcGFnZXMvbXlHcm91cC9teUdyb3VwJyB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH0sXHJcbiAgLy8g572u6aG255qE6K+35rGCXHJcbiAgYXN5bmMgU2V0VG9wVG9waWMoKSB7XHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICB0b3BpY0lkOiB0aGlzLmRhdGEudG9waWNJZCxcclxuICAgICAgdG9wVHlwZTogdGhpcy5kYXRhLnRvcFR5cGVcclxuICAgIH1cclxuICAgIGxldCByZXM6IGFueSA9IGF3YWl0IFNldFRvcFRvcGljKG9iailcclxuXHJcbiAgfSxcclxuICAvLyDlhbPpl63or53pophcclxuICBhc3luYyBjbG9zZVRvcGljKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHJlczogYW55ID0gYXdhaXQgY2xvc2VUb3BpYyh0aGlzLmRhdGEudG9waWNJZClcclxuICAgICAgY29uc29sZS5sb2coJ+WFs+mXrScsIHJlcylcclxuICAgIH0gY2F0Y2h7XHJcblxyXG4gICAgfVxyXG4gIH0sXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioq5Y675Zue5aSN6aG1ICoqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gIHJlcGx5UmVtYXJrKGU6IGFueSkge1xyXG4gICAgd3guc2V0U3RvcmFnZVN5bmMoJ2lzQmFja09wZW5Ub3BpYycsZmFsc2UpXHJcbiAgICB3eC5uYXZpZ2F0ZVRvKHtcclxuICAgICAgdXJsOiBgL3N1YnBhZ2VzL2NsZXJrT25saW5lL3BhZ2VzL3JlbWFya09yUmVwbHkvcmVtYXJrT3JSZXBseT90eXBlPSR7ZS5kZXRhaWwudHlwZX0mdG9waWNJZD0ke2UuZGV0YWlsLnRvcGljSWR9JmZhQ29tbWVudElkPSR7ZS5kZXRhaWwuY29tbWVudElkfWBcclxuICAgIH0pXHJcbiAgfSxcclxuICAvKioqKioqKioqKioqKioqKioqKioqKirljrvor4TorrrpobUgKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgY29tbWVudHNJbmRleChlOiBhbnkpIHtcclxuICAgIHd4LnNldFN0b3JhZ2VTeW5jKCdpc0JhY2tPcGVuVG9waWMnLGZhbHNlKVxyXG4gICAgY29uc29sZS5sb2coJ2UuY3VycmVudFRhcmdldC5kYXRhc2V0LnRvcGljaWQnLCBlLmN1cnJlbnRUYXJnZXQuZGF0YXNldClcclxuICAgIHd4Lm5hdmlnYXRlVG8oe1xyXG4gICAgICB1cmw6IGAvc3VicGFnZXMvY2xlcmtPbmxpbmUvcGFnZXMvcmVtYXJrT3JSZXBseS9yZW1hcmtPclJlcGx5P3R5cGU9JHtlLmN1cnJlbnRUYXJnZXQuZGF0YXNldC50eXBlfSZ0b3BpY0lkPSR7ZS5jdXJyZW50VGFyZ2V0LmRhdGFzZXQudG9waWNpZH1gXHJcbiAgICB9KVxyXG4gIH0sXHJcblxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKuiOt+WPluivnemimOivpuaDheWGheWuuSAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBhc3luYyBnZXRUb3BpY0RldGFpbCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCByZXM6IGFueSA9IGF3YWl0IGdldFRvcGljRGV0YWlsKHRoaXMuZGF0YS50b3BpY0lkKVxyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIHRvcExpc3Q6IHJlcy5kYXRhLFxyXG4gICAgICAgIG1hbmFnZUZsYWc6IHJlcy5kYXRhLm1hbmFnZUZsYWcsXHJcbiAgICAgICAgc2VsZlB1Ymxpc2hGbGFnOiByZXMuZGF0YS5zZWxmUHVibGlzaEZsYWcsXHJcbiAgICAgICAgVG9wRmxhZzogcmVzLmRhdGEudG9wRmxhZyxcclxuICAgICAgICB1c2VyTGlrZTogcmVzLmRhdGEudXNlckxpa2UsXHJcbiAgICAgICAgdXNlckRpc2xpa2U6IHJlcy5kYXRhLnVzZXJEaXNsaWtlLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgIGxpa2VzVG90YWw6IHJlcy5kYXRhLmxpa2VzVG90YWwgLSAwLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgIG9wcG9zZUxUb3RhbDogcmVzLmRhdGEub3Bwb3NlTFRvdGFsIC0gMFxyXG4gICAgICB9KVxyXG4gICAgICBjb25zb2xlLmxvZygncmVz6K+d6aKY6K+m5oOFJywgcmVzKVxyXG4gICAgfSBjYXRjaHtcclxuXHJcbiAgICB9XHJcblxyXG4gIH0sXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioq6I635Y+W6K+d6aKY6K+m5oOF6K+E6K665YiX6KGoICoqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gIGFzeW5jIGdldENvbW1lbnRMaXN0KCkge1xyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgbG9hZFZpc2libGU6IHRydWUsXHJcbiAgICAgIGxvYWRUeXBlOiAnbW9yZScsXHJcbiAgICAgIGlzU2hvdzogZmFsc2UsXHJcbiAgICAgIC8vIGNvbW1lbnRMaXN0OltdXHJcbiAgICB9KVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgcGFnZUluZGV4OiB0aGlzLmRhdGEucGFnZUluZGV4LFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5kYXRhLnBhZ2VTaXplLFxyXG4gICAgICB0b3BpY0lkOiB0aGlzLmRhdGEudG9waWNJZCxcclxuICAgICAgb3JkZXJUeXBlOiB0aGlzLmRhdGEub3JkZXJUeXBlXHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCBnZXRDb21tZW50TGlzdChvYmopXHJcbiAgICAgIGlmKHRoaXMuZGF0YS5wYWdlSW5kZXg9PTEpe1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICBjb21tZW50TGlzdDogcmVzLmRhdGEsXHJcbiAgICAgICAgICBjb21tZW50TGlzdExlbmd0aDogcmVzLmRhdGEubGVuZ3RoLFxyXG4gICAgICAgICAgbG9hZFZpc2libGU6IGZhbHNlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgY29tbWVudExpc3Q6IHRoaXMuZGF0YS5jb21tZW50TGlzdC5jb25jYXQocmVzLmRhdGEpLFxyXG4gICAgICAgICAgY29tbWVudExpc3RMZW5ndGg6IHJlcy5kYXRhLmxlbmd0aCxcclxuICAgICAgICAgIGxvYWRWaXNpYmxlOiBmYWxzZSxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YS5jb21tZW50TGlzdExlbmd0aCA8IHRoaXMuZGF0YS5wYWdlU2l6ZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCc2NjY2NjY2NjY2NjY2NjY2NjY2JylcclxuICAgICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgbG9hZFZpc2libGU6IHRydWUsXHJcbiAgICAgICAgICBsb2FkVHlwZTogJ25vbmUnXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhLnBhZ2VJbmRleD09MSAmJiB0aGlzLmRhdGEuY29tbWVudExpc3RMZW5ndGggPT0gMCkge1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICBpc1Nob3c6IHRydWUsXHJcbiAgICAgICAgICBsb2FkVmlzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaHtcclxuICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICBsb2FkVmlzaWJsZTogZmFsc2VcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9LFxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiror4TorrrngrnotZ4gKioqKioqL1xyXG4gIGFzeW5jIGNvbW1lbnRTdGF0ZW1lbnQoKSB7XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICBpc2NvbW1lbnRTdGF0ZW1lbnQ6IHRydWVcclxuICAgIH0pXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBhdHRpdHVkZTogdGhpcy5kYXRhLmNvbW1lbnRBdHRpdHVkZSxcclxuICAgICAgdG9waWNJZDogdGhpcy5kYXRhLnRvcGljSWQsXHJcbiAgICAgIGNvbW1lbnRJZDogdGhpcy5kYXRhLmNvbW1lbnRJZFxyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHJlczogYW55ID0gYXdhaXQgY29tbWVudFN0YXRlbWVudChvYmopXHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgaXNjb21tZW50U3RhdGVtZW50OiBmYWxzZVxyXG4gICAgICB9KVxyXG4gICAgfSBjYXRjaHtcclxuICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICBpc2NvbW1lbnRTdGF0ZW1lbnQ6IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfSxcclxuICBhc3luYyBvblJlYWNoQm90dG9tKCkge1xyXG4gICAgaWYodGhpcy5kYXRhLnJlbWFya1R5cGVMb2FkaW5nKXtyZXR1cm4gfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5jb21tZW50TGlzdExlbmd0aCA8IHRoaXMuZGF0YS5wYWdlU2l6ZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIHBhZ2VJbmRleDogKyt0aGlzLmRhdGEucGFnZUluZGV4LFxyXG4gICAgfSlcclxuICAgIGF3YWl0IHRoaXMuZ2V0Q29tbWVudExpc3QoKVxyXG4gIH0sXHJcbn0pIl19