@foxone/finance-ui
Version:
The Financial UI Component Library Based on @foxone/uikit and vuetify
327 lines (304 loc) • 39.3 kB
JavaScript
import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
import { defineComponent, onMounted, h } from '@vue/composition-api';
import { VDialog, VCard, VCardText, VCardActions, VCardTitle } from 'vuetify/lib';
import { FButton } from '@foxone/uikit/src/components/FButton';
import classnames from '../utils/classnames';
export default defineComponent({
name: 'RiskInfo',
model: {
prop: 'value',
event: 'change'
},
props: {
value: {
type: Boolean,
"default": false
},
prefixCls: {
type: String,
"default": 'risk-info'
},
impact: {
type: String,
"default": '?%'
},
assetLeft: {
type: Object,
"default": function _default() {
return {};
}
},
assetRight: {
type: Object,
"default": function _default() {
return {};
}
},
countdown: {
type: Number,
"default": 0
},
customText: {
type: Object,
"default": function _default() {
return {
"continue": {},
confirm: {}
};
}
},
customColor: {
type: Object,
"default": function _default() {
return {
"continue": {},
confirm: {}
};
}
}
},
setup: function setup(props) {
var classes = classnames(props.prefixCls);
var isContinue = false;
var isShow = false;
var timer = null;
var count = void 0;
onMounted(function () {
console.info('RiskInfo mounted!');
});
return {
classes: classes,
isContinue: isContinue,
isShow: isShow,
timer: timer,
count: count
};
},
computed: {
hasAssets: function hasAssets() {
var res = false;
try {
res = this.assetLeft && JSON.stringify(this.assetLeft) !== '{}' && this.assetRight && JSON.stringify(this.assetRight) !== '{}';
} catch (error) {
res = false;
}
return res;
}
},
watch: {
value: function value(val) {
this.isShow = val;
if (val && this.timer === null) this.onCountDown();
}
},
created: function created() {
this.isShow = this.value;
},
beforeDestroy: function beforeDestroy() {
if (this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
},
methods: {
onCountDown: function onCountDown() {
var _this = this;
if (this.count === void 0) {
this.count = this.countdown;
this.$emit('countdown:init', this.count);
}
if (this.count <= 0) {
this.timer = null;
return;
}
this.timer = setTimeout(function () {
if (_this.count === void 0) return;
_this.count--;
_this.$emit('countdown:update', _this.count);
_this.$nextTick(function () {
return _this.$forceUpdate();
});
_this.onCountDown();
}, 1000);
},
resetTimer: function resetTimer() {
var _this2 = this;
setTimeout(function () {
if (_this2.timer) {
clearTimeout(_this2.timer);
_this2.timer = null;
}
_this2.count = void 0;
}, 300);
},
handleInput: function handleInput(val) {
if (val && this.timer === null) this.onCountDown();
this.isShow = val;
this.$emit('change', val);
},
handleContinueClick: function handleContinueClick(evt) {
if (evt === 'continue') {
this.isContinue = true;
} else {
this.isShow = false;
this.$emit('change', false);
}
this.$emit(evt);
},
handleConfirmClick: function handleConfirmClick(evt) {
var _this3 = this;
this.isShow = false;
this.$emit('change', false);
this.$emit(evt);
setTimeout(function () {
return _this3.isContinue = false;
}, 300);
}
},
render: function render(h) {
var _this4 = this;
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
var scopedSlots = {
activator: this.$scopedSlots.activator
};
var customContinueText = (_a = this.customText["continue"]) !== null && _a !== void 0 ? _a : {};
var customConfirmText = (_b = this.customText.confirm) !== null && _b !== void 0 ? _b : {};
var customContinueColor = (_c = this.customColor["continue"]) !== null && _c !== void 0 ? _c : {};
var customConfirmColor = (_d = this.customColor.confirm) !== null && _d !== void 0 ? _d : {};
return h(VDialog, {
"attrs": {
"contentClass": this.classes(),
"overlayOpacity": 0.9
},
"scopedSlots": scopedSlots,
"model": {
value: _this4.isShow,
callback: function callback($$v) {
_this4.isShow = $$v;
}
},
"on": _objectSpread({}, {
"input": function input($event) {
for (var _len = arguments.length, attrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
attrs[_key - 1] = arguments[_key];
}
_this4.handleInput.apply(_this4, [$event].concat(attrs));
}
})
}, [h(VCard, {
"class": this.classes('card')
}, [h(VCardTitle, {
"class": this.classes('card-title', 'justify-center')
}, [h("div", {
"class": this.classes('title', 'f-greyscale-1 f-title-1')
}, [this.isContinue ? customConfirmText.title || 'Warning' : customContinueText.title || 'Confirm transaction'])]), h(VCardText, {
"class": 'pa-0 px-8'
}, [this.isContinue ? h("div", {
"class": 'd-flex justify-center'
}, [h("div", {
"class": 'text-center f-body-1'
}, [customConfirmText.content || 'Once the transaction is executed, it is irrevocable, please pay after confirmation carefully.'])]) : h("div", {
"class": 'd-flex flex-column align-center'
}, [h("div", {
"class": this.classes('highlight', 'pa-4')
}, [h("h3", {
"class": this.classes('highlight-text', 'f-title-3')
}, [(_f = (_e = customContinueText.highlights) === null || _e === void 0 ? void 0 : _e[0]) !== null && _f !== void 0 ? _f : 'Price impact reached']), h("h3", {
"class": this.classes('highlight-impact')
}, [this.impact || '%']), h("h4", {
"class": this.classes('highlight-text', 'f-title-3')
}, [(_h = (_g = customContinueText.highlights) === null || _g === void 0 ? void 0 : _g[1]) !== null && _h !== void 0 ? _h : 'It may cause a serious result.'])]), this.hasAssets ? h("div", {
"class": this.classes('assets', 'd-flex justify-space-between mt-6')
}, [h("div", {
"class": this.classes('assets-left', 'd-inline-flex flex-column justify-left')
}, [h("span", {
"class": this.classes('assets-left-symbol', 'f-greyscale-1 f-body-2')
}, [(_j = this.assetLeft) === null || _j === void 0 ? void 0 : _j.symbol]), h("span", {
"class": this.classes('assets-left-amount', 'f-greyscale-3 f-caption text-truncate')
}, [(_k = this.assetLeft) === null || _k === void 0 ? void 0 : _k.amount])]), h("div", {
"class": this.classes('assets-right', 'd-inline-flex flex-column justify-center')
}, [h("span", {
"class": this.classes('assets-right-symbol', 'f-greyscale-1 f-body-2')
}, [(_l = this.assetRight) === null || _l === void 0 ? void 0 : _l.symbol]), h("span", {
"class": this.classes('assets-right-amount', 'f-greyscale-3 f-caption text-truncate')
}, [(_m = this.assetRight) === null || _m === void 0 ? void 0 : _m.amount])])]) : null])]), h(VCardActions, {
"class": 'mt-6 pa-0 align-center justify-center'
}, [this.isContinue ? h("div", {
"class": 'd-flex align-center'
}, [h(FButton, {
"class": this.classes('action-confirm-btn-cancel', 'pt-6 pb-8'),
"attrs": {
"type": 'text',
"color": (customConfirmColor === null || customConfirmColor === void 0 ? void 0 : customConfirmColor.btn_cancel) || 'f-greyscale-6'
},
"on": _objectSpread({}, {
"click": function click($event) {
for (var _len2 = arguments.length, attrs = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
attrs[_key2 - 1] = arguments[_key2];
}
(function () {
return _this4.handleConfirmClick('cancel:confirm');
}).apply(void 0, [$event].concat(attrs));
}
})
}, [(customConfirmText === null || customConfirmText === void 0 ? void 0 : customConfirmText.btn_cancel) || 'Cancel']), h(FButton, {
"class": this.classes('action-confirm-btn-confirm', 'pt-6 pb-8'),
"attrs": {
"type": 'text',
"color": (customConfirmColor === null || customConfirmColor === void 0 ? void 0 : customConfirmColor.btn_confirm) || 'error'
},
"on": _objectSpread({}, {
"click": function click($event) {
for (var _len3 = arguments.length, attrs = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
attrs[_key3 - 1] = arguments[_key3];
}
(function () {
return _this4.handleConfirmClick('confirm');
}).apply(void 0, [$event].concat(attrs));
}
})
}, [(customConfirmText === null || customConfirmText === void 0 ? void 0 : customConfirmText.btn_confirm) || 'Confirm'])]) : h("div", {
"class": 'd-flex flex-column align-center justify-center'
}, [h(FButton, {
"class": this.classes('action-continue-btn-cancel', (customContinueColor === null || customContinueColor === void 0 ? void 0 : customContinueColor.btn_cancel) ? 'f-greyscale-6' : 'white--text'),
"attrs": {
"color": (customContinueColor === null || customContinueColor === void 0 ? void 0 : customContinueColor.btn_cancel) || 'pink'
},
"on": _objectSpread({}, {
"click": function click($event) {
for (var _len4 = arguments.length, attrs = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
attrs[_key4 - 1] = arguments[_key4];
}
(function () {
return _this4.handleContinueClick('cancel:continue');
}).apply(void 0, [$event].concat(attrs));
}
})
}, [(customContinueText === null || customContinueText === void 0 ? void 0 : customContinueText.btn_cancel) || 'Cancel']), h(FButton, _mergeJSXProps([{
"class": this.classes('action-continue-btn-continue', 'py-8')
}, {
"attrs": {
disabled: this.count !== void 0 && this.count > 0
}
}, {
"attrs": {
"type": 'text',
"color": (customContinueColor === null || customContinueColor === void 0 ? void 0 : customContinueColor.btn_continue) || 'f-greyscale-1'
},
"on": _objectSpread({}, {
"click": function click($event) {
for (var _len5 = arguments.length, attrs = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
attrs[_key5 - 1] = arguments[_key5];
}
(function () {
return _this4.handleContinueClick('continue');
}).apply(void 0, [$event].concat(attrs));
}
})
}]), ["".concat((customContinueText === null || customContinueText === void 0 ? void 0 : customContinueText.btn_continue) || 'Continue').concat(this.count !== void 0 && this.count > 0 ? "(".concat(this.count, "s)") : '').trim()])])])])]);
}
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SaXNrSW5mby9SaXNrSW5mby50c3giLCJSaXNrSW5mby9SaXNrSW5mby5qc3giXSwibmFtZXMiOlsiZGVmaW5lQ29tcG9uZW50Iiwib25Nb3VudGVkIiwiVkRpYWxvZyIsIlZDYXJkIiwiVkNhcmRUZXh0IiwiVkNhcmRBY3Rpb25zIiwiVkNhcmRUaXRsZSIsIkZCdXR0b24iLCJjbGFzc25hbWVzIiwibmFtZSIsIm1vZGVsIiwicHJvcCIsImV2ZW50IiwicHJvcHMiLCJ2YWx1ZSIsInR5cGUiLCJCb29sZWFuIiwicHJlZml4Q2xzIiwiU3RyaW5nIiwiaW1wYWN0IiwiYXNzZXRMZWZ0IiwiT2JqZWN0IiwiYXNzZXRSaWdodCIsImNvdW50ZG93biIsIk51bWJlciIsImN1c3RvbVRleHQiLCJjb25maXJtIiwiY3VzdG9tQ29sb3IiLCJzZXR1cCIsImNsYXNzZXMiLCJpc0NvbnRpbnVlIiwiaXNTaG93IiwidGltZXIiLCJjb3VudCIsImNvbnNvbGUiLCJpbmZvIiwiY29tcHV0ZWQiLCJoYXNBc3NldHMiLCJyZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJ3YXRjaCIsInZhbCIsIm9uQ291bnREb3duIiwiY3JlYXRlZCIsImJlZm9yZURlc3Ryb3kiLCJjbGVhclRpbWVvdXQiLCJtZXRob2RzIiwiJGVtaXQiLCJzZXRUaW1lb3V0IiwiJG5leHRUaWNrIiwiJGZvcmNlVXBkYXRlIiwicmVzZXRUaW1lciIsImhhbmRsZUlucHV0IiwiaGFuZGxlQ29udGludWVDbGljayIsImV2dCIsImhhbmRsZUNvbmZpcm1DbGljayIsInJlbmRlciIsImgiLCJfYSIsIl9iIiwiX2MiLCJfZCIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiX2oiLCJfayIsIl9sIiwiX20iLCJzY29wZWRTbG90cyIsImFjdGl2YXRvciIsIiRzY29wZWRTbG90cyIsImN1c3RvbUNvbnRpbnVlVGV4dCIsImN1c3RvbUNvbmZpcm1UZXh0IiwiY3VzdG9tQ29udGludWVDb2xvciIsImN1c3RvbUNvbmZpcm1Db2xvciIsInRpdGxlIiwiY29udGVudCIsImhpZ2hsaWdodHMiLCJzeW1ib2wiLCJhbW91bnQiLCJidG5fY2FuY2VsIiwiYnRuX2NvbmZpcm0iLCJkaXNhYmxlZCIsImJ0bl9jb250aW51ZSIsInRyaW0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxTQUNFQSxlQURGLEVBR0VDLFNBSEYsV0FJTyxzQkFKUDtBQUtBLFNBQVNDLE9BQVQsRUFBa0JDLEtBQWxCLEVBQXlCQyxTQUF6QixFQUFvQ0MsWUFBcEMsRUFBa0RDLFVBQWxELFFBQW9FLGFBQXBFO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixzQ0FBeEI7QUFDQSxPQUFPQyxVQUFQLE1BQXVCLHFCQUF2QjtBQXFDQSxlQUFlUixlQUFlLENBQUM7QUFDN0JTLEVBQUFBLElBQUksRUFBRSxVQUR1QjtBQUU3QkMsRUFBQUEsS0FBSyxFQUFFO0FBQ0xDLElBQUFBLElBQUksRUFBRSxPQUREO0FBRUxDLElBQUFBLEtBQUssRUFBRTtBQUZGLEdBRnNCO0FBTTdCQyxFQUFBQSxLQUFLLEVBQUU7QUFDTEMsSUFBQUEsS0FBSyxFQUFFO0FBQ0xDLE1BQUFBLElBQUksRUFBRUMsT0FERDtBQUVMLGlCQUFTO0FBRkosS0FERjtBQUtMQyxJQUFBQSxTQUFTLEVBQUU7QUFDVEYsTUFBQUEsSUFBSSxFQUFFRyxNQURHO0FBRVQsaUJBQVM7QUFGQSxLQUxOO0FBU0xDLElBQUFBLE1BQU0sRUFBRTtBQUNOSixNQUFBQSxJQUFJLEVBQUVHLE1BREE7QUFFTixpQkFBUztBQUZILEtBVEg7QUFhTEUsSUFBQUEsU0FBUyxFQUFFO0FBQ1RMLE1BQUFBLElBQUksRUFBRU0sTUFERztBQUVULGlCQUFTO0FBQUEsZUFBTyxFQUFQO0FBQUE7QUFGQSxLQWJOO0FBaUJMQyxJQUFBQSxVQUFVLEVBQUU7QUFDVlAsTUFBQUEsSUFBSSxFQUFFTSxNQURJO0FBRVYsaUJBQVM7QUFBQSxlQUFPLEVBQVA7QUFBQTtBQUZDLEtBakJQO0FBcUJMRSxJQUFBQSxTQUFTLEVBQUU7QUFDVFIs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S0FBQSxDQUFsQixHQUFrQixLQUFBLENBQWxCLEdBQUFBLGtCQUFrQixDQUFFUyxVQUFwQixLQUFrQyxRQXpCMUM7QUFBQSxlQTRCYSxLQUFLdkQsT0FBTCxDQUFhLDhCQUFiLEVBQTZDLE1BQTdDO0FBNUJiO0FBQUEsZUE2QmE7QUFBRXlELFFBQUFBLFFBQVEsRUFBRSxLQUFLckQsS0FBTCxLQUFlLEtBQUssQ0FBcEIsSUFBeUIsS0FBS0EsS0FBTCxHQUFhO0FBQWxEO0FBN0JiO0FBQUE7QUFBQSxnQkE4QlcsTUE5Qlg7QUFBQSxpQkErQmEsQ0FBQTRDLG1CQUFtQixLQUFBLElBQW5CLElBQUFBLG1CQUFtQixLQUFBLEtBQUEsQ0FBbkIsR0FBbUIsS0FBQSxDQUFuQixHQUFBQSxtQkFBbUIsQ0FBRVUsWUFBckIsS0FBcUM7QUEvQmxEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxXQWdDaUI7QUFBQSxtQkFBTSxNQUFJLENBQUNoQyxtQkFBTCxDQUF5QixVQUF6QixDQUFOO0FBQUEsV0FoQ2pCO0FBQUE7QUFBQTtBQUFBLFVBa0NRLFVBQUcsQ0FBQW9CLGtCQUFrQixLQUFBLElBQWxCLElBQUFBLGtCQUFrQixLQUFBLEtBQUEsQ0FBbEIsR0FBa0IsS0FBQSxDQUFsQixHQUFBQSxrQkFBa0IsQ0FBRVksWUFBcEIsS0FBb0MsVUFBdkMsU0FBb0QsS0FBS3RELEtBQUwsS0FBZSxLQUFLLENBQXBCLElBQXlCLEtBQUtBLEtBQUwsR0FBYSxDQUF0QyxjQUE4QyxLQUFLQSxLQUFuRCxVQUErRCxFQUFuSCxFQUF3SHVELElBQXhILEVBbENSLElBaEVWO0FBMEdEO0FBeFA0QixDQUFELENBQTlCIiwiZmlsZSI6IlJpc2tJbmZvL1Jpc2tJbmZvLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIG9uTW91bnRlZCB9IGZyb20gJ0B2dWUvY29tcG9zaXRpb24tYXBpJztcbmltcG9ydCB7IFZEaWFsb2csIFZDYXJkLCBWQ2FyZFRleHQsIFZDYXJkQWN0aW9ucywgVkNhcmRUaXRsZSB9IGZyb20gJ3Z1ZXRpZnkvbGliJztcbmltcG9ydCB7IEZCdXR0b24gfSBmcm9tICdAZm94b25lL3Vpa2l0L3NyYy9jb21wb25lbnRzL0ZCdXR0b24nO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb21wb25lbnQoe1xuICAgIG5hbWU6ICdSaXNrSW5mbycsXG4gICAgbW9kZWw6IHtcbiAgICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgICAgZXZlbnQ6ICdjaGFuZ2UnXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHByZWZpeENsczoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgZGVmYXVsdDogJ3Jpc2staW5mbydcbiAgICAgICAgfSxcbiAgICAgICAgaW1wYWN0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICBkZWZhdWx0OiAnPyUnXG4gICAgICAgIH0sXG4gICAgICAgIGFzc2V0TGVmdDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KVxuICAgICAgICB9LFxuICAgICAgICBhc3NldFJpZ2h0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZG93bjoge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgZGVmYXVsdDogMFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21UZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiAoeyBjb250aW51ZToge30sIGNvbmZpcm06IHt9IH0pXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbUNvbG9yOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiAoeyBjb250aW51ZToge30sIGNvbmZpcm06IHt9IH0pXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldHVwKHByb3BzKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKHByb3BzLnByZWZpeENscyk7XG4gICAgICAgIGNvbnN0IGlzQ29udGludWUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaXNTaG93ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gbnVsbDtcbiAgICAgICAgY29uc3QgY291bnQgPSB2b2lkIDA7XG4gICAgICAgIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oJ1Jpc2tJbmZvIG1vdW50ZWQhJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgIGlzQ29udGludWUsXG4gICAgICAgICAgICBpc1Nob3csXG4gICAgICAgICAgICB0aW1lcixcbiAgICAgICAgICAgIGNvdW50XG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgICBoYXNBc3NldHMoKSB7XG4gICAgICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcyA9IHRoaXMuYXNzZXRMZWZ0ICYmIEpTT04uc3RyaW5naWZ5KHRoaXMuYXNzZXRMZWZ0KSAhPT0gJ3t9JyAmJiB0aGlzLmFzc2V0UmlnaHQgJiYgSlNPTi5zdHJpbmdpZnkodGhpcy5hc3NldFJpZ2h0KSAhPT0gJ3t9JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlcyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgd2F0Y2g6IHtcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93ID0gdmFsO1xuICAgICAgICAgICAgaWYgKHZhbCAmJiB0aGlzLnRpbWVyID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHRoaXMub25Db3VudERvd24oKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlZCgpIHtcbiAgICAgICAgdGhpcy5pc1Nob3cgPSB0aGlzLnZhbHVlO1xuICAgIH0sXG4gICAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIG9uQ291bnREb3duKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY291bnQgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmNvdW50ZG93bjtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjb3VudGRvd246aW5pdCcsIHRoaXMuY291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY291bnQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudCA9PT0gdm9pZCAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudC0tO1xuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NvdW50ZG93bjp1cGRhdGUnLCB0aGlzLmNvdW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLiRmb3JjZVVwZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ291bnREb3duKCk7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzZXRUaW1lcigpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSB2b2lkIDA7XG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVJbnB1dCh2YWwpIHtcbiAgICAgICAgICAgIGlmICh2YWwgJiYgdGhpcy50aW1lciA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ291bnREb3duKCk7XG4gICAgICAgICAgICB0aGlzLmlzU2hvdyA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZUNvbnRpbnVlQ2xpY2soZXZ0KSB7XG4gICAgICAgICAgICBpZiAoZXZ0ID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvbnRpbnVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4kZW1pdChldnQpO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVDb25maXJtQ2xpY2soZXZ0KSB7XG4gICAgICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy4kZW1pdChldnQpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5pc0NvbnRpbnVlID0gZmFsc2UpLCAzMDApO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAgcmVuZGVyKGgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbCwgX207XG4gICAgICAgIGNvbnN0IHNjb3BlZFNsb3RzID0ge1xuICAgICAgICAgICAgYWN0aXZhdG9yOiB0aGlzLiRzY29wZWRTbG90cy5hY3RpdmF0b3JcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29udGludWVUZXh0ID0gKF9hID0gdGhpcy5jdXN0b21UZXh0LmNvbnRpbnVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29uZmlybVRleHQgPSAoX2IgPSB0aGlzLmN1c3RvbVRleHQuY29uZmlybSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge307XG4gICAgICAgIGNvbnN0IGN1c3RvbUNvbnRpbnVlQ29sb3IgPSAoX2MgPSB0aGlzLmN1c3RvbUNvbG9yLmNvbnRpbnVlKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiB7fTtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29uZmlybUNvbG9yID0gKF9kID0gdGhpcy5jdXN0b21Db2xvci5jb25maXJtKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiB7fTtcbiAgICAgICAgcmV0dXJuICg8VkRpYWxvZyBjb250ZW50Q2xhc3M9e3RoaXMuY2xhc3NlcygpfSBzY29wZWRTbG90cz17c2NvcGVkU2xvdHN9IHZNb2RlbD17dGhpcy5pc1Nob3d9IG92ZXJsYXlPcGFjaXR5PXswLjl9IHZPbjppbnB1dD17dGhpcy5oYW5kbGVJbnB1dH0+XG4gICAgICAgIDxWQ2FyZCBjbGFzcz17dGhpcy5jbGFzc2VzKCdjYXJkJyl9PlxuICAgICAgICAgIDxWQ2FyZFRpdGxlIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2NhcmQtdGl0bGUnLCAnanVzdGlmeS1jZW50ZXInKX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPXt0aGlzLmNsYXNzZXMoJ3RpdGxlJywgJ2YtZ3JleXNjYWxlLTEgZi10aXRsZS0xJyl9PlxuICAgICAgICAgICAgICB7dGhpcy5pc0NvbnRpbnVlXG4gICAgICAgICAgICAgICAgPyBjdXN0b21Db25maXJtVGV4dC50aXRsZSB8fCAnV2FybmluZydcbiAgICAgICAgICAgICAgICA6IGN1c3RvbUNvbnRpbnVlVGV4dC50aXRsZSB8fCAnQ29uZmlybSB0cmFuc2FjdGlvbid9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1ZDYXJkVGl0bGU+XG4gICAgICAgICAgPFZDYXJkVGV4dCBjbGFzcz0ncGEtMCBweC04Jz5cbiAgICAgICAgICAgIHt0aGlzLmlzQ29udGludWVcbiAgICAgICAgICAgICAgICA/IDxkaXYgY2xhc3M9J2QtZmxleCBqdXN0aWZ5LWNlbnRlcic+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSd0ZXh0LWNlbnRlciBmLWJvZHktMSc+XG4gICAgICAgICAgICAgICAgICAgIHtjdXN0b21Db25maXJtVGV4dC5jb250ZW50IHx8ICdPbmNlIHRoZSB0cmFuc2FjdGlvbiBpcyBleGVjdXRlZCwgaXQgaXMgaXJyZXZvY2FibGUsIHBsZWFzZSBwYXkgYWZ0ZXIgY29uZmlybWF0aW9uIGNhcmVmdWxseS4nfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgOiA8ZGl2IGNsYXNzPSdkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24tY2VudGVyJz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3RoaXMuY2xhc3NlcygnaGlnaGxpZ2h0JywgJ3BhLTQnKX0+XG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz17dGhpcy5jbGFzc2VzKCdoaWdobGlnaHQtdGV4dCcsICdmLXRpdGxlLTMnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgeyhfZiA9IChfZSA9IGN1c3RvbUNvbnRpbnVlVGV4dC5oaWdobGlnaHRzKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2VbMF0pICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6ICdQcmljZSBpbXBhY3QgcmVhY2hlZCd9XG4gICAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz17dGhpcy5jbGFzc2VzKCdoaWdobGlnaHQtaW1wYWN0Jyl9PlxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmltcGFjdCB8fCAnJSd9XG4gICAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz17dGhpcy5jbGFzc2VzKCdoaWdobGlnaHQtdGV4dCcsICdmLXRpdGxlLTMnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgeyhfaCA9IChfZyA9IGN1c3RvbUNvbnRpbnVlVGV4dC5oaWdobGlnaHRzKSA9PT0gbnVsbCB8fCBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2dbMV0pICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6ICdJdCBtYXkgY2F1c2UgYSBzZXJpb3VzIHJlc3VsdC4nfVxuICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5oYXNBc3NldHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gPGRpdiBjbGFzcz17dGhpcy5jbGFzc2VzKCdhc3NldHMnLCAnZC1mbGV4IGp1c3RpZnktc3BhY2UtYmV0d2VlbiBtdC02Jyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17dGhpcy5jbGFzc2VzKCdhc3NldHMtbGVmdCcsICdkLWlubGluZS1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktbGVmdCcpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e3RoaXMuY2xhc3NlcygnYXNzZXRzLWxlZnQtc3ltYm9sJywgJ2YtZ3JleXNjYWxlLTEgZi1ib2R5LTInKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhfaiA9IHRoaXMuYXNzZXRMZWZ0KSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ouc3ltYm9sfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2Fzc2V0cy1sZWZ0LWFtb3VudCcsICdmLWdyZXlzY2FsZS0zIGYtY2FwdGlvbiB0ZXh0LXRydW5jYXRlJyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoX2sgPSB0aGlzLmFzc2V0TGVmdCkgPT09IG51bGwgfHwgX2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9rLmFtb3VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2Fzc2V0cy1yaWdodCcsICdkLWlubGluZS1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY2VudGVyJyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17dGhpcy5jbGFzc2VzKCdhc3NldHMtcmlnaHQtc3ltYm9sJywgJ2YtZ3JleXNjYWxlLTEgZi1ib2R5LTInKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhfbCA9IHRoaXMuYXNzZXRSaWdodCkgPT09IG51bGwgfHwgX2wgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9sLnN5bWJvbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17dGhpcy5jbGFzc2VzKCdhc3NldHMtcmlnaHQtYW1vdW50JywgJ2YtZ3JleXNjYWxlLTMgZi1jYXB0aW9uIHRleHQtdHJ1bmNhdGUnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhfbSA9IHRoaXMuYXNzZXRSaWdodCkgPT09IG51bGwgfHwgX20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tLmFtb3VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9kaXY+fVxuICAgICAgICAgIDwvVkNhcmRUZXh0PlxuICAgICAgICAgIDxWQ2FyZEFjdGlvbnMgY2xhc3M9J210LTYgcGEtMCBhbGlnbi1jZW50ZXIganVzdGlmeS1jZW50ZXInPlxuICAgICAgICAgICAge3RoaXMuaXNDb250aW51ZVxuICAgICAgICAgICAgICAgID8gPGRpdiBjbGFzcz0nZC1mbGV4IGFsaWduLWNlbnRlcic+XG4gICAgICAgICAgICAgICAgICA8RkJ1dHRvbiBjbGFzcz17dGhpcy5jbGFzc2VzKCdhY3Rpb24tY29uZmlybS1idG4tY2FuY2VsJywgJ3B0LTYgcGItOCcpfSB0eXBlPSd0ZXh0JyBjb2xvcj17KGN1c3RvbUNvbmZpcm1Db2xvciA9PT0gbnVsbCB8fCBjdXN0b21Db25maXJtQ29sb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUNvbmZpcm1Db2xvci5idG5fY2FuY2VsKSB8fCAnZi1ncmV5c2NhbGUtNid9IHZPbjpjbGljaz17KCkgPT4gdGhpcy5oYW5kbGVDb25maXJtQ2xpY2soJ2NhbmNlbDpjb25maXJtJyl9PlxuICAgICAgICAgICAgICAgICAgICB7KGN1c3RvbUNvbmZpcm1UZXh0ID09PSBudWxsIHx8IGN1c3RvbUNvbmZpcm1UZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db25maXJtVGV4dC5idG5fY2FuY2VsKSB8fCAnQ2FuY2VsJ31cbiAgICAgICAgICAgICAgICAgIDwvRkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxGQnV0dG9uIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2FjdGlvbi1jb25maXJtLWJ0bi1jb25maXJtJywgJ3B0LTYgcGItOCcpfSB0eXBlPSd0ZXh0JyBjb2xvcj17KGN1c3RvbUNvbmZpcm1Db2xvciA9PT0gbnVsbCB8fCBjdXN0b21Db25maXJtQ29sb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUNvbmZpcm1Db2xvci5idG5fY29uZmlybSkgfHwgJ2Vycm9yJ30gdk9uOmNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNvbmZpcm1DbGljaygnY29uZmlybScpfT5cbiAgICAgICAgICAgICAgICAgICAgeyhjdXN0b21Db25maXJtVGV4dCA9PT0gbnVsbCB8fCBjdXN0b21Db25maXJtVGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29uZmlybVRleHQuYnRuX2NvbmZpcm0pIHx8ICdDb25maXJtJ31cbiAgICAgICAgICAgICAgICAgIDwvRkJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA6IDxkaXYgY2xhc3M9J2QtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1jZW50ZXIganVzdGlmeS1jZW50ZXInPlxuICAgICAgICAgICAgICAgICAgPEZCdXR0b24gY2xhc3M9e3RoaXMuY2xhc3NlcygnYWN0aW9uLWNvbnRpbnVlLWJ0bi1jYW5jZWwnLCAoY3VzdG9tQ29udGludWVDb2xvciA9PT0gbnVsbCB8fCBjdXN0b21Db250aW51ZUNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db250aW51ZUNvbG9yLmJ0bl9jYW5jZWwpID8gJ2YtZ3JleXNjYWxlLTYnIDogJ3doaXRlLS10ZXh0Jyl9IGNvbG9yPXsoY3VzdG9tQ29udGludWVDb2xvciA9PT0gbnVsbCB8fCBjdXN0b21Db250aW51ZUNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db250aW51ZUNvbG9yLmJ0bl9jYW5jZWwpIHx8ICdwaW5rJ30gdk9uOmNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNvbnRpbnVlQ2xpY2soJ2NhbmNlbDpjb250aW51ZScpfT5cbiAgICAgICAgICAgICAgICAgICAgeyhjdXN0b21Db250aW51ZVRleHQgPT09IG51bGwgfHwgY3VzdG9tQ29udGludWVUZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db250aW51ZVRleHQuYnRuX2NhbmNlbCkgfHwgJ0NhbmNlbCd9XG4gICAgICAgICAgICAgICAgICA8L0ZCdXR0b24+XG4gICAgICAgICAgICAgICAgICA8RkJ1dHRvbiBjbGFzcz17dGhpcy5jbGFzc2VzKCdhY3Rpb24tY29udGludWUtYnRuLWNvbnRpbnVlJywgJ3B5LTgnKX0gYXR0cnM9e3sgZGlzYWJsZWQ6IHRoaXMuY291bnQgIT09IHZvaWQgMCAmJiB0aGlzLmNvdW50ID4gMCB9fSB0eXBlPSd0ZXh0JyBjb2xvcj17KGN1c3RvbUNvbnRpbnVlQ29sb3IgPT09IG51bGwgfHwgY3VzdG9tQ29udGludWVDb2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29udGludWVDb2xvci5idG5fY29udGludWUpIHx8ICdmLWdyZXlzY2FsZS0xJ30gdk9uOmNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNvbnRpbnVlQ2xpY2soJ2NvbnRpbnVlJyl9PlxuICAgICAgICAgICAgICAgICAgICB7YCR7KGN1c3RvbUNvbnRpbnVlVGV4dCA9PT0gbnVsbCB8fCBjdXN0b21Db250aW51ZVRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUNvbnRpbnVlVGV4dC5idG5fY29udGludWUpIHx8ICdDb250aW51ZSd9JHt0aGlzLmNvdW50ICE9PSB2b2lkIDAgJiYgdGhpcy5jb3VudCA+IDAgPyBgKCR7dGhpcy5jb3VudH1zKWAgOiAnJ31gLnRyaW0oKX1cbiAgICAgICAgICAgICAgICAgIDwvRkJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj59XG4gICAgICAgICAgPC9WQ2FyZEFjdGlvbnM+XG4gICAgICAgIDwvVkNhcmQ+XG4gICAgICA8L1ZEaWFsb2c+KTtcbiAgICB9XG59KTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9