@foxone/finance-ui
Version:
The Financial UI Component Library Based on @foxone/uikit and vuetify
324 lines (281 loc) • 46.7 kB
JavaScript
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
import _inherits from "@babel/runtime/helpers/esm/inherits";
import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
import _typeof from "@babel/runtime/helpers/esm/typeof";
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var __decorate = this && this.__decorate || function (decorators, target, key, desc) {
var c = arguments.length,
r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
d;
if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
}
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { Component, Vue, Prop, Watch, Model } from 'vue-property-decorator';
import classnames from '../utils/classnames';
import { VDialog, VCard, VCardText, VCardActions, VCardTitle } from 'vuetify/lib';
import { FButton } from '@foxone/uikit/src/components/FButton';
var RiskInfo = /*#__PURE__*/function (_Vue) {
_inherits(RiskInfo, _Vue);
var _super = _createSuper(RiskInfo);
function RiskInfo() {
var _this;
_classCallCheck(this, RiskInfo);
_this = _super.apply(this, arguments);
_this.isContinue = false;
_this.isShow = false;
_this.timer = null;
return _this;
}
_createClass(RiskInfo, [{
key: "hasAssets",
get: function get() {
var res = false;
try {
res = this.assetLeft && JSON.stringify(this.assetLeft) !== '{}' && this.assetRight && JSON.stringify(this.assetRight) !== '{}';
} catch (error) {
res = false;
}
return res;
}
}, {
key: "onCountDown",
value: function onCountDown() {
var _this2 = this;
if (this.count === void 0) this.count = this.countdown;
if (this.count <= 0) {
this.timer = null;
return;
}
this.timer = setTimeout(function () {
_this2.count--;
_this2.$nextTick(function () {
return _this2.$forceUpdate();
});
_this2.onCountDown();
}, 1000);
}
}, {
key: "resetTimer",
value: function resetTimer() {
var _this3 = this;
setTimeout(function () {
if (_this3.timer) {
clearTimeout(_this3.timer);
_this3.timer = null;
}
_this3.count = void 0;
}, 300);
}
}, {
key: "handleValueChange",
value: function handleValueChange(val) {
this.isShow = val;
if (val && this.timer === null) this.onCountDown();
}
}, {
key: "created",
value: function created() {
this.isShow = this.value;
}
}, {
key: "beforeDestroy",
value: function beforeDestroy() {
if (this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
}
}, {
key: "render",
value: function render(h) {
var _this4 = this;
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
var _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 : {};
var classes = classnames('risk-info');
return h(VDialog, {
scopedSlots: {
activator: function activator(_ref) {
var on = _ref.on,
attrs = _ref.attrs;
return _activator && _activator({
on: on,
attrs: attrs
}) || null;
}
},
props: {
value: this.isShow,
'content-class': classes(void 0, this.className)
},
on: {
input: function input(val) {
if (val && _this4.timer === null) _this4.onCountDown();
_this4.isShow = val;
_this4.$emit('change', val);
}
}
}, [h(VCard, {
staticClass: classes('card')
}, [h(VCardTitle, {
staticClass: classes('card-title', 'justify-center')
}, [h('div', {
staticClass: classes('title', 'f-greyscale-1 f-title-1')
}, [this.isContinue ? customConfirmText.title || 'Warning' : customContinueText.title || 'Confirm transaction'])]), h(VCardText, {
staticClass: 'pa-0 px-8'
}, [this.isContinue ? h('div', {
staticClass: 'd-flex justify-center'
}, [h('div', {
staticClass: 'text-center f-body-1'
}, [customConfirmText.content || 'Once the transaction is executed, it is irrevocable, please pay after confirmation carefully.'])]) : h('div', {
staticClass: 'd-flex flex-column align-center'
}, [h('div', {
staticClass: classes('highlight', 'pa-4')
}, [h('h3', {
staticClass: 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', {
staticClass: classes('highlight-impact')
}, this.impact || '%'), h('h4', {
staticClass: 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', {
staticClass: classes('assets', 'd-flex justify-space-between mt-6')
}, [h('div', {
staticClass: classes('assets-left', 'd-inline-flex flex-column justify-left')
}, [h('span', {
staticClass: classes('assets-left-symbol', 'f-greyscale-1 f-body-2')
}, [(_j = this.assetLeft) === null || _j === void 0 ? void 0 : _j.symbol]), h('span', {
staticClass: classes('assets-left-amount', 'f-greyscale-3 f-caption text-truncate')
}, [(_k = this.assetLeft) === null || _k === void 0 ? void 0 : _k.amount])]), h('div', {
staticClass: classes('assets-right', 'd-inline-flex flex-column justify-center')
}, [h('span', {
staticClass: classes('assets-right-symbol', 'f-greyscale-1 f-body-2')
}, [(_l = this.assetRight) === null || _l === void 0 ? void 0 : _l.symbol]), h('span', {
staticClass: 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, {
staticClass: 'mt-6 pa-0 align-center justify-center'
}, [this.isContinue ? h('div', {
staticClass: 'd-flex align-center'
}, [h(FButton, {
staticClass: classes('action-confirm-btn-cancel', 'pt-6 pb-8'),
props: {
type: 'text',
color: (customConfirmColor === null || customConfirmColor === void 0 ? void 0 : customConfirmColor.btn_cancel) || 'f-greyscale-6'
},
on: {
click: function click() {
_this4.isShow = false;
_this4.$emit('change', false);
_this4.$emit('cancel:confirm');
setTimeout(function () {
return _this4.isContinue = false;
}, 300);
}
}
}, (customConfirmText === null || customConfirmText === void 0 ? void 0 : customConfirmText.btn_cancel) || 'Cancel'), h(FButton, {
staticClass: classes('action-confirm-btn-confirm', 'pt-6 pb-8'),
props: {
type: 'text',
color: (customConfirmColor === null || customConfirmColor === void 0 ? void 0 : customConfirmColor.btn_confirm) || 'error'
},
on: {
click: function click() {
_this4.isShow = false;
_this4.$emit('change', false);
_this4.$emit('confirm');
setTimeout(function () {
return _this4.isContinue = false;
}, 300);
}
}
}, (customConfirmText === null || customConfirmText === void 0 ? void 0 : customConfirmText.btn_confirm) || 'Confirm')]) : h('div', {
staticClass: 'd-flex flex-column align-center justify-center'
}, [h(FButton, {
staticClass: classes('action-continue-btn-cancel', 'f-greyscale-6'),
props: {
color: (customContinueColor === null || customContinueColor === void 0 ? void 0 : customContinueColor.btn_cancel) || 'pink'
},
on: {
click: function click() {
_this4.isShow = false;
_this4.$emit('change', false);
_this4.$emit('cancel:continue');
}
}
}, (customContinueText === null || customContinueText === void 0 ? void 0 : customContinueText.btn_cancel) || 'Cancel'), h(FButton, {
staticClass: classes('action-continue-btn-continue', 'py-8'),
attrs: {
disabled: this.count > 0
},
props: {
type: 'text',
color: (customContinueColor === null || customContinueColor === void 0 ? void 0 : customContinueColor.btn_continue) || 'f-greyscale-1'
},
on: {
click: function click() {
_this4.isContinue = true;
_this4.$emit('continue');
}
}
}, "".concat((customContinueText === null || customContinueText === void 0 ? void 0 : customContinueText.btn_continue) || 'Continue').concat(this.count > 0 ? "(".concat(this.count, "s)") : '').trim())])])])]);
}
}]);
return RiskInfo;
}(Vue);
__decorate([Model('change', {
"default": false
})], RiskInfo.prototype, "value", void 0);
__decorate([Prop({
type: String,
"default": ''
})], RiskInfo.prototype, "className", void 0);
__decorate([Prop({
type: String,
"default": '?%'
})], RiskInfo.prototype, "impact", void 0);
__decorate([Prop({
type: Object,
"default": function _default() {
return {};
}
})], RiskInfo.prototype, "assetLeft", void 0);
__decorate([Prop({
type: Object,
"default": function _default() {
return {};
}
})], RiskInfo.prototype, "assetRight", void 0);
__decorate([Prop({
type: Number,
"default": 0
})], RiskInfo.prototype, "countdown", void 0);
__decorate([Prop({
type: Object,
"default": function _default() {
return {
"continue": {},
confirm: {}
};
}
})], RiskInfo.prototype, "customText", void 0);
__decorate([Prop({
type: Object,
"default": function _default() {
return {
"continue": {},
confirm: {}
};
}
})], RiskInfo.prototype, "customColor", void 0);
__decorate([Watch('value')], RiskInfo.prototype, "handleValueChange", null);
RiskInfo = __decorate([Component], RiskInfo);
export { RiskInfo };
export default RiskInfo;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJpc2tJbmZvL19kZXByZWNhdGUuanMiLCJzcmMvUmlza0luZm8vX2RlcHJlY2F0ZS50cyJdLCJuYW1lcyI6WyJfX2RlY29yYXRlIiwiZGVjb3JhdG9ycyIsInRhcmdldCIsImtleSIsImRlc2MiLCJjIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImQiLCJSZWZsZWN0IiwiZGVjb3JhdGUiLCJpIiwiZGVmaW5lUHJvcGVydHkiLCJDb21wb25lbnQiLCJWdWUiLCJQcm9wIiwiV2F0Y2giLCJNb2RlbCIsImNsYXNzbmFtZXMiLCJWRGlhbG9nIiwiVkNhcmQiLCJWQ2FyZFRleHQiLCJWQ2FyZEFjdGlvbnMiLCJWQ2FyZFRpdGxlIiwiRkJ1dHRvbiIsIlJpc2tJbmZvIiwiaXNDb250aW51ZSIsImlzU2hvdyIsInRpbWVyIiwicmVzIiwiYXNzZXRMZWZ0IiwiSlNPTiIsInN0cmluZ2lmeSIsImFzc2V0UmlnaHQiLCJlcnJvciIsImNvdW50IiwiY291bnRkb3duIiwic2V0VGltZW91dCIsIiRuZXh0VGljayIsIiRmb3JjZVVwZGF0ZSIsIm9uQ291bnREb3duIiwiY2xlYXJUaW1lb3V0IiwidmFsIiwidmFsdWUiLCJoIiwiX2EiLCJfYiIsIl9jIiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJfaCIsIl9qIiwiX2siLCJfbCIsIl9tIiwiYWN0aXZhdG9yIiwiJHNjb3BlZFNsb3RzIiwiY3VzdG9tQ29udGludWVUZXh0IiwiY3VzdG9tVGV4dCIsImN1c3RvbUNvbmZpcm1UZXh0IiwiY29uZmlybSIsImN1c3RvbUNvbnRpbnVlQ29sb3IiLCJjdXN0b21Db2xvciIsImN1c3RvbUNvbmZpcm1Db2xvciIsImNsYXNzZXMiLCJzY29wZWRTbG90cyIsIm9uIiwiYXR0cnMiLCJwcm9wcyIsImNsYXNzTmFtZSIsImlucHV0IiwiJGVtaXQiLCJzdGF0aWNDbGFzcyIsInRpdGxlIiwiY29udGVudCIsImhpZ2hsaWdodHMiLCJpbXBhY3QiLCJoYXNBc3NldHMiLCJzeW1ib2wiLCJhbW91bnQiLCJ0eXBlIiwiY29sb3IiLCJidG5fY2FuY2VsIiwiY2xpY2siLCJidG5fY29uZmlybSIsImRpc2FibGVkIiwiYnRuX2NvbnRpbnVlIiwidHJpbSIsInByb3RvdHlwZSIsIlN0cmluZyIsIk51bWJlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxJQUFJQSxVQUFVLEdBQUksUUFBUSxLQUFLQSxVQUFkLElBQTZCLFVBQVVDLFVBQVYsRUFBc0JDLE1BQXRCLEVBQThCQyxHQUE5QixFQUFtQ0MsSUFBbkMsRUFBeUM7QUFDbkYsTUFBSUMsQ0FBQyxHQUFHQyxTQUFTLENBQUNDLE1BQWxCO0FBQUEsTUFBMEJDLENBQUMsR0FBR0gsQ0FBQyxHQUFHLENBQUosR0FBUUgsTUFBUixHQUFpQkUsSUFBSSxLQUFLLElBQVQsR0FBZ0JBLElBQUksR0FBR0ssTUFBTSxDQUFDQyx3QkFBUCxDQUFnQ1IsTUFBaEMsRUFBd0NDLEdBQXhDLENBQXZCLEdBQXNFQyxJQUFySDtBQUFBLE1BQTJITyxDQUEzSDtBQUNBLE1BQUksUUFBT0MsT0FBUCx5Q0FBT0EsT0FBUCxPQUFtQixRQUFuQixJQUErQixPQUFPQSxPQUFPLENBQUNDLFFBQWYsS0FBNEIsVUFBL0QsRUFBMkVMLENBQUMsR0FBR0ksT0FBTyxDQUFDQyxRQUFSLENBQWlCWixVQUFqQixFQUE2QkMsTUFBN0IsRUFBcUNDLEdBQXJDLEVBQTBDQyxJQUExQyxDQUFKLENBQTNFLEtBQ0ssS0FBSyxJQUFJVSxDQUFDLEdBQUdiLFVBQVUsQ0FBQ00sTUFBWCxHQUFvQixDQUFqQyxFQUFvQ08sQ0FBQyxJQUFJLENBQXpDLEVBQTRDQSxDQUFDLEVBQTdDO0FBQWlELFFBQUlILENBQUMsR0FBR1YsVUFBVSxDQUFDYSxDQUFELENBQWxCLEVBQXVCTixDQUFDLEdBQUcsQ0FBQ0gsQ0FBQyxHQUFHLENBQUosR0FBUU0sQ0FBQyxDQUFDSCxDQUFELENBQVQsR0FBZUgsQ0FBQyxHQUFHLENBQUosR0FBUU0s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QztBQUFFbUUsRUFBQUEsSUFBSSxFQUFFVSxNQUFSO0FBQWdCLGFBQVM7QUFBekIsQ0FBRCxDQUErQixDQUFBLEVEcU1uQ25FLFFBQVEsQ0FBQ2lFLFNDck0wQixFRHFNZixXQ3JNZSxFRHFNRixLQUFLLENDck1ILENBQUE7O0FBQ29DN0YsVUFBQSxDQUFBLENBQXZFa0IsSUFBSSxDQUFDO0FBQUVtRSxFQUFBQSxJQUFJLEVBQUU1RSxNQUFSO0FBQWdCLGFBQVM7QUFBQSxXQUFPO0FBQUUsa0JBQVUsRUFBWjtBQUFnQndELE1BQUFBLE9BQU8sRUFBRTtBQUF6QixLQUFQO0FBQUE7QUFBekIsQ0FBRCxDQUFtRSxDQUFBLEVEdU12RXJDLFFBQVEsQ0FBQ2lFLFNDdk04RCxFRHVNbkQsWUN2TW1ELEVEdU1yQyxLQUFLLENDdk1nQyxDQUFBOztBQUNBN0YsVUFBQSxDQUFBLENBQXZFa0IsSUFBSSxDQUFDO0FBQUVtRSxFQUFBQSxJQUFJLEVBQUU1RSxNQUFSO0FBQWdCLGFBQVM7QUFBQSxXQUFPO0FBQUUsa0JBQVUsRUFBWjtBQUFnQndELE1BQUFBLE9BQU8sRUFBRTtBQUF6QixLQUFQO0FBQUE7QUFBekIsQ0FBRCxDQUFtRSxDQUFBLEVEeU12RXJDLFFBQVEsQ0FBQ2lFLFNDek04RCxFRHlNbkQsYUN6TW1ELEVEeU1wQyxLQUFLLENDek0rQixDQUFBOztBQXlDeEU3RixVQUFBLENBQUEsQ0FEQ21CLEtBQUssQ0FBQyxPQUFELENBQ04sQ0FBQSxFRG1LQ1MsUUFBUSxDQUFDaUUsU0NuS1YsRURtS3FCLG1CQ25LckIsRURtSzBDLElDbksxQyxDQUFBOztBQWpEV2pFLFFBQVEsR0FBQTVCLFVBQUEsQ0FBQSxDQURwQmdCLFNBQ29CLENBQUEsRUFBUlksUUFBUSxDQUFSO0FEd05iLFNDeE5hQSxRRHdOYjtBQzJIQSxlQUFlQSxRQUFmIiwiZmlsZSI6IlJpc2tJbmZvL19kZXByZWNhdGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5pbXBvcnQgeyBDb21wb25lbnQsIFZ1ZSwgUHJvcCwgV2F0Y2gsIE1vZGVsIH0gZnJvbSAndnVlLXByb3BlcnR5LWRlY29yYXRvcic7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICcuLi91dGlscy9jbGFzc25hbWVzJztcbmltcG9ydCB7IFZEaWFsb2csIFZDYXJkLCBWQ2FyZFRleHQsIFZDYXJkQWN0aW9ucywgVkNhcmRUaXRsZSB9IGZyb20gJ3Z1ZXRpZnkvbGliJztcbmltcG9ydCB7IEZCdXR0b24gfSBmcm9tICdAZm94b25lL3Vpa2l0L3NyYy9jb21wb25lbnRzL0ZCdXR0b24nO1xubGV0IFJpc2tJbmZvID0gY2xhc3MgUmlza0luZm8gZXh0ZW5kcyBWdWUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmlzQ29udGludWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGdldCBoYXNBc3NldHMoKSB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuYXNzZXRMZWZ0ICYmIEpTT04uc3RyaW5naWZ5KHRoaXMuYXNzZXRMZWZ0KSAhPT0gJ3t9JyAmJiB0aGlzLmFzc2V0UmlnaHQgJiYgSlNPTi5zdHJpbmdpZnkodGhpcy5hc3NldFJpZ2h0KSAhPT0gJ3t9JztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIG9uQ291bnREb3duKCkge1xuICAgICAgICBpZiAodGhpcy5jb3VudCA9PT0gdm9pZCAwKVxuICAgICAgICAgICAgdGhpcy5jb3VudCA9IHRoaXMuY291bnRkb3duO1xuICAgICAgICBpZiAodGhpcy5jb3VudCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvdW50LS07XG4gICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLiRmb3JjZVVwZGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMub25Db3VudERvd24oKTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgfVxuICAgIHJlc2V0VGltZXIoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvdW50ID0gdm9pZCAwO1xuICAgICAgICB9LCAzMDApO1xuICAgIH1cbiAgICBoYW5kbGVWYWx1ZUNoYW5nZSh2YWwpIHtcbiAgICAgICAgdGhpcy5pc1Nob3cgPSB2YWw7XG4gICAgICAgIGlmICh2YWwgJiYgdGhpcy50aW1lciA9PT0gbnVsbClcbiAgICAgICAgICAgIHRoaXMub25Db3VudERvd24oKTtcbiAgICB9XG4gICAgY3JlYXRlZCgpIHtcbiAgICAgICAgdGhpcy5pc1Nob3cgPSB0aGlzLnZhbHVlO1xuICAgIH1cbiAgICBiZWZvcmVEZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyKGgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbCwgX207XG4gICAgICAgIGNvbnN0IGFjdGl2YXRvciA9IHRoaXMuJHNjb3BlZFNsb3RzLmFjdGl2YXRvcjtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29udGludWVUZXh0ID0gKF9hID0gdGhpcy5jdXN0b21UZXh0LmNvbnRpbnVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29uZmlybVRleHQgPSAoX2IgPSB0aGlzLmN1c3RvbVRleHQuY29uZmlybSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge307XG4gICAgICAgIGNvbnN0IGN1c3RvbUNvbnRpbnVlQ29sb3IgPSAoX2MgPSB0aGlzLmN1c3RvbUNvbG9yLmNvbnRpbnVlKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiB7fTtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29uZmlybUNvbG9yID0gKF9kID0gdGhpcy5jdXN0b21Db2xvci5jb25maXJtKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiB7fTtcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMoJ3Jpc2staW5mbycpO1xuICAgICAgICByZXR1cm4gaChWRGlhbG9nLCB7XG4gICAgICAgICAgICBzY29wZWRTbG90czoge1xuICAgICAgICAgICAgICAgIGFjdGl2YXRvcjogKHsgb24sIGF0dHJzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhY3RpdmF0b3IgJiYgYWN0aXZhdG9yKHsgb24sIGF0dHJzIH0pKSB8fCBudWxsO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5pc1Nob3csXG4gICAgICAgICAgICAgICAgJ2NvbnRlbnQtY2xhc3MnOiBjbGFzc2VzKHZvaWQgMCwgdGhpcy5jbGFzc05hbWUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBpbnB1dDogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsICYmIHRoaXMudGltZXIgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ291bnREb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93ID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBbXG4gICAgICAgICAgICBoKFZDYXJkLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2NhcmQnKSxcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICBoKFZDYXJkVGl0bGUsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2NhcmQtdGl0bGUnLCAnanVzdGlmeS1jZW50ZXInKSxcbiAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgIGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCd0aXRsZScsICdmLWdyZXlzY2FsZS0xIGYtdGl0bGUtMScpXG4gICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb250aW51ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY3VzdG9tQ29uZmlybVRleHQudGl0bGUgfHwgJ1dhcm5pbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXN0b21Db250aW51ZVRleHQudGl0bGUgfHwgJ0NvbmZpcm0gdHJhbnNhY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgaChWQ2FyZFRleHQsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICdwYS0wIHB4LTgnXG4gICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGludWVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaCgnZGl2Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAnZC1mbGV4IGp1c3RpZnktY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICd0ZXh0LWNlbnRlciBmLWJvZHktMSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbY3VzdG9tQ29uZmlybVRleHQuY29udGVudCB8fCAnT25jZSB0aGUgdHJhbnNhY3Rpb24gaXMgZXhlY3V0ZWQsIGl0IGlzIGlycmV2b2NhYmxlLCBwbGVhc2UgcGF5IGFmdGVyIGNvbmZpcm1hdGlvbiBjYXJlZnVsbHkuJ10pXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBoKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICdkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24tY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2hpZ2hsaWdodCcsICdwYS00JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2gzJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2hpZ2hsaWdodC10ZXh0JywgJ2YtdGl0bGUtMycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIChfZiA9IChfZSA9IGN1c3RvbUNvbnRpbnVlVGV4dC5oaWdobGlnaHRzKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2VbMF0pICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6ICdQcmljZSBpbXBhY3QgcmVhY2hlZCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdoMycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdoaWdobGlnaHQtaW1wYWN0JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5pbXBhY3QgfHwgJyUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnaDQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygnaGlnaGxpZ2h0LXRleHQnLCAnZi10aXRsZS0zJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgKF9oID0gKF9nID0gY3VzdG9tQ29udGludWVUZXh0LmhpZ2hsaWdodHMpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZ1sxXSkgIT09IG51bGwgJiYgX2ggIT09IHZvaWQgMCA/IF9oIDogJ0l0IG1heSBjYXVzZSBhIHNlcmlvdXMgcmVzdWx0LicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNBc3NldHMgPyBoKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdhc3NldHMnLCAnZC1mbGV4IGp1c3RpZnktc3BhY2UtYmV0d2VlbiBtdC02JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdhc3NldHMtbGVmdCcsICdkLWlubGluZS1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktbGVmdCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ3NwYW4nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2Fzc2V0cy1sZWZ0LXN5bWJvbCcsICdmLWdyZXlzY2FsZS0xIGYtYm9keS0yJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFsoX2ogPSB0aGlzLmFzc2V0TGVmdCkgPT09IG51bGwgfHwgX2ogPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9qLnN5bWJvbF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnc3BhbicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygnYXNzZXRzLWxlZnQtYW1vdW50JywgJ2YtZ3JleXNjYWxlLTMgZi1jYXB0aW9uIHRleHQtdHJ1bmNhdGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgWyhfayA9IHRoaXMuYXNzZXRMZWZ0KSA9PT0gbnVsbCB8fCBfayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2suYW1vdW50XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdhc3NldHMtcmlnaHQnLCAnZC1pbmxpbmUtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNlbnRlcicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ3NwYW4nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2Fzc2V0cy1yaWdodC1zeW1ib2wnLCAnZi1ncmV5c2NhbGUtMSBmLWJvZHktMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbKF9sID0gdGhpcy5hc3NldFJpZ2h0KSA9PT0gbnVsbCB8fCBfbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2wuc3ltYm9sXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdzcGFuJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdhc3NldHMtcmlnaHQtYW1vdW50JywgJ2YtZ3JleXNjYWxlLTMgZi1jYXB0aW9uIHRleHQtdHJ1bmNhdGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgWyhfbSA9IHRoaXMuYXNzZXRSaWdodCkgPT09IG51bGwgfHwgX20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tLmFtb3VudF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIGgoVkNhcmRBY3Rpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAnbXQtNiBwYS0wIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNlbnRlcidcbiAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb250aW51ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBoKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICdkLWZsZXggYWxpZ24tY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoRkJ1dHRvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygnYWN0aW9uLWNvbmZpcm0tYnRuLWNhbmNlbCcsICdwdC02IHBiLTgnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAoY3VzdG9tQ29uZmlybUNvbG9yID09PSBudWxsIHx8IGN1c3RvbUNvbmZpcm1Db2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29uZmlybUNvbG9yLmJ0bl9jYW5jZWwpIHx8ICdmLWdyZXlzY2FsZS02J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjYW5jZWw6Y29uZmlybScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuaXNDb250aW51ZSA9IGZhbHNlKSwgMzAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIChjdXN0b21Db25maXJtVGV4dCA9PT0gbnVsbCB8fCBjdXN0b21Db25maXJtVGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29uZmlybVRleHQuYnRuX2NhbmNlbCkgfHwgJ0NhbmNlbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoRkJ1dHRvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygnYWN0aW9uLWNvbmZpcm0tYnRuLWNvbmZpcm0nLCAncHQtNiBwYi04JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogKGN1c3RvbUNvbmZpcm1Db2xvciA9PT0gbnVsbCB8fCBjdXN0b21Db25maXJtQ29sb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUNvbmZpcm1Db2xvci5idG5fY29uZmlybSkgfHwgJ2Vycm9yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjb25maXJtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5pc0NvbnRpbnVlID0gZmFsc2UpLCAzMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgKGN1c3RvbUNvbmZpcm1UZXh0ID09PSBudWxsIHx8IGN1c3RvbUNvbmZpcm1UZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db25maXJtVGV4dC5idG5fY29uZmlybSkgfHwgJ0NvbmZpcm0nKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaCgnZGl2Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAnZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNlbnRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKEZCdXR0b24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2FjdGlvbi1jb250aW51ZS1idG4tY2FuY2VsJywgJ2YtZ3JleXNjYWxlLTYnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAoY3VzdG9tQ29udGludWVDb2xvciA9PT0gbnVsbCB8fCBjdXN0b21Db250aW51ZUNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db250aW51ZUNvbG9yLmJ0bl9jYW5jZWwpIHx8ICdwaW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjYW5jZWw6Y29udGludWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIChjdXN0b21Db250aW51ZVRleHQgPT09IG51bGwgfHwgY3VzdG9tQ29udGludWVUZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db250aW51ZVRleHQuYnRuX2NhbmNlbCkgfHwgJ0NhbmNlbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoRkJ1dHRvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygnYWN0aW9uLWNvbnRpbnVlLWJ0bi1jb250aW51ZScsICdweS04JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5jb3VudCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAoY3VzdG9tQ29udGludWVDb2xvciA9PT0gbnVsbCB8fCBjdXN0b21Db250aW51ZUNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db250aW51ZUNvbG9yLmJ0bl9jb250aW51ZSkgfHwgJ2YtZ3JleXNjYWxlLTEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb250aW51ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnY29udGludWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGAkeyhjdXN0b21Db250aW51ZVRleHQgPT09IG51bGwgfHwgY3VzdG9tQ29udGludWVUZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db250aW51ZVRleHQuYnRuX2NvbnRpbnVlKSB8fCAnQ29udGludWUnfSR7dGhpcy5jb3VudCA+IDAgPyBgKCR7dGhpcy5jb3VudH1zKWAgOiAnJ31gLnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBNb2RlbCgnY2hhbmdlJywgeyBkZWZhdWx0OiBmYWxzZSB9KVxuXSwgUmlza0luZm8ucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9KVxuXSwgUmlza0luZm8ucHJvdG90eXBlLCBcImNsYXNzTmFtZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgUHJvcCh7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJz8lJyB9KVxuXSwgUmlza0luZm8ucHJvdG90eXBlLCBcImltcGFjdFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgUHJvcCh7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9KVxuXSwgUmlza0luZm8ucHJvdG90eXBlLCBcImFzc2V0TGVmdFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgUHJvcCh7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9KVxuXSwgUmlza0luZm8ucHJvdG90eXBlLCBcImFzc2V0UmlnaHRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSlcbl0sIFJpc2tJbmZvLnByb3RvdHlwZSwgXCJjb3VudGRvd25cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7IGNvbnRpbnVlOiB7fSwgY29uZmlybToge30gfSkgfSlcbl0sIFJpc2tJbmZvLnByb3RvdHlwZSwgXCJjdXN0b21UZXh0XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoeyBjb250aW51ZToge30sIGNvbmZpcm06IHt9IH0pIH0pXG5dLCBSaXNrSW5mby5wcm90b3R5cGUsIFwiY3VzdG9tQ29sb3JcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFdhdGNoKCd2YWx1ZScpXG5dLCBSaXNrSW5mby5wcm90b3R5cGUsIFwiaGFuZGxlVmFsdWVDaGFuZ2VcIiwgbnVsbCk7XG5SaXNrSW5mbyA9IF9fZGVjb3JhdGUoW1xuICAgIENvbXBvbmVudFxuXSwgUmlza0luZm8pO1xuZXhwb3J0IHsgUmlza0luZm8gfTtcbmV4cG9ydCBkZWZhdWx0IFJpc2tJbmZvOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==