react-bootstrap-table-ng-editor 4.19.0 → 4.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see react-bootstrap-table-ng-editor.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgEditor=t(require("react")):e.ReactBootstrapTableNgEditor=t(e.React)}(self,e=>{return t={33(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(564),u=r(511);t.default=(e,t)=>{function r(r){return o.default.createElement(u.Consumer,null,n=>((r,n)=>{const u=r.value,a=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(u)>-1),l={};return t&&n.mode===i.DBCLICK_TO_CELL_EDIT&&(l.DELAY_FOR_DBCLICK=i.DELAY_FOR_DBCLICK),o.default.createElement(e,{...r,...l,editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:a,atstart:n.atstart,clickToEdit:n.mode===i.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===i.DBCLICK_TO_CELL_EDIT})})(r,n))}return r.displayName="WithCellEditingRowConsumer",r}},88(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(556)),i=n(r(442)),u=function(e){var t=e.invalidMessage;return i.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},i.default.createElement("strong",null,t))};u.propTypes={invalidMessage:o.default.string},t.default=u},98(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","autoSelectText","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=h(r(442)),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,a=(t.autoSelectText,t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),l=(0,m.default)(n,"form-control editor edit-text");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){e.text=t},type:"text",className:l},a))}}],n&&a(r.prototype,n),l&&a(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,l}(O.Component);t.default=g},121(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e);let t=e.options??[];e.getOptions&&(t=e.getOptions(this.setOptions.bind(this),{row:e.row,column:e.column})||[]),this.state={options:t}}componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.select.value=e,this.select.focus(),t&&t()}setOptions(e){this.setState({options:e})}getValue(){return this.select.value}render(){const{defaultValue:e="",didMount:t,getOptions:r,className:n="",onUpdate:o,...i}=this.props,u={...i,className:(0,l.default)(n,"form-control editor edit-select")};return c.default.createElement("select",{...u,ref:e=>{this.select=e},defaultValue:e},this.state.options.map(({label:e,value:t})=>c.default.createElement("option",{key:t,value:t},e)))}}t.default=s},137(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","autoSelectText"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=c(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},h=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return h(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=v(r(442)),_=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=s(this,t,[e])).handleKeyDown=r.handleKeyDown.bind(r),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?null:t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"handleKeyDown",value:function(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,i=(t.autoSelectText,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),a=(0,O.default)(n,"form-control editor edit-textarea");return g.default.createElement("textarea",u(u({ref:function(t){e.text=t},className:a},i),{},{onKeyDown:this.handleKeyDown}))}}],n&&l(r.prototype,n),i&&l(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(g.Component);t.default=_},167(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(556)),i=n(r(442)),u=({invalidMessage:e})=>i.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},i.default.createElement("strong",null,e));u.propTypes={invalidMessage:o.default.string},t.default=u},205(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=a(r(556)),s=u(r(442)),f=r(564),d=a(r(937)),p=a(r(868)),b=a(r(121)),y=a(r(167)),h=a(r(871)),v=a(r(462));t.default=(e,t)=>{var r;return(r=class extends s.Component{constructor(e){super(e),this.indicatorTimer=null,this.clearTimer=this.clearTimer.bind(this),this.handleBlur=this.handleBlur.bind(this),this.handleClick=this.handleClick.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.beforeComplete=this.beforeComplete.bind(this),this.asyncbeforeCompete=this.asyncbeforeCompete.bind(this),this.displayErrorMessage=this.displayErrorMessage.bind(this),this.state={invalidMessage:null}}componentWillUnmount(){this.clearTimer()}componentDidUpdate({message:t}){e.isDefined(t)&&(this.createTimer(),this.setState(()=>({invalidMessage:t})))}clearTimer(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}createTimer(){this.clearTimer();const{timeToCloseMessage:t,onErrorMessageDisappear:r}=this.props;this.indicatorTimer=e.sleep(()=>{this.setState(()=>({invalidMessage:null})),e.isFunction(r)&&r()},t)}displayErrorMessage(e){this.setState(()=>({invalidMessage:e})),this.createTimer()}asyncbeforeCompete(e){return(t={valid:!0})=>{const{valid:r,message:n}=t,{onUpdate:o,row:i,column:u}=this.props;r?o(i,u,e):this.displayErrorMessage(n)}}beforeComplete(t){const{onUpdate:r,row:n,column:o}=this.props;if(e.isFunction(o.validator)){const r=o.validator(t,n,o,this.asyncbeforeCompete(t));if(e.isObject(r)){if(r.async)return;if(!r.valid)return void this.displayErrorMessage(r.message)}}r(n,o,t)}handleBlur(){const{onEscape:e,blurToSave:t}=this.props;t?this.beforeComplete(this.editor.getValue()):e()}handleKeyDown(e){const{onEscape:t}=this.props;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}handleClick(e){"TD"!==e.target.tagName&&e.stopPropagation()}render(){let r;const{row:n,column:o,className:i,style:u,rowIndex:a,columnIndex:c,autoSelectText:m}=this.props,{dataField:O}=o,g=e.get(n,O),_=e.isDefined(this.state.invalidMessage);let j=o.editorClasses||"";e.isFunction(o.editorClasses)&&(j=o.editorClasses(g,n,a,c));let E=o.editorStyle||{};e.isFunction(o.editorStyle)&&(E=o.editorStyle(g,n,a,c));let w={ref:e=>this.editor=e,defaultValue:g,style:E,className:(0,l.default)({animated:_,shake:_},j),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:()=>{},onUpdate:e=>{}};t&&(w.didMount=()=>t(n,o,a,c));const P=e.isObject(o.editor);return P?w={...w,...o.editor}:e.isFunction(o.editorRenderer)&&(w={...w,onUpdate:this.beforeComplete}),r=e.isFunction(o.editorRenderer)?o.editorRenderer(w,g,n,o,a,c):P&&o.editor?.type===f.EDITTYPE.SELECT?s.default.createElement(b.default,{...w,row:n,column:o}):P&&o.editor?.type===f.EDITTYPE.TEXTAREA?s.default.createElement(v.default,{...w,autoSelectText:m}):P&&o.editor?.type===f.EDITTYPE.CHECKBOX?s.default.createElement(d.default,{...w}):P&&o.editor?.type===f.EDITTYPE.DATE?s.default.createElement(p.default,{...w}):s.default.createElement(h.default,{...w,autoSelectText:m}),s.default.createElement("td",{className:(0,l.default)("react-bootstrap-table-editing-cell",i),style:u,onClick:this.handleClick},r,_?s.default.createElement(y.default,{invalidMessage:this.state.invalidMessage}):null)}}).propTypes={row:c.default.object.isRequired,rowIndex:c.default.number.isRequired,column:c.default.object.isRequired,columnIndex:c.default.number.isRequired,onUpdate:c.default.func.isRequired,onEscape:c.default.func.isRequired,timeToCloseMessage:c.default.number,autoSelectText:c.default.bool,className:c.default.string,style:c.default.object},r.defaultProps={timeToCloseMessage:f.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}},r}},282(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=v(r(556)),g=h(r(442)),_=r(564),j=v(r(512)),E=v(r(855)),w=v(r(900)),P=v(r(88)),C=v(r(98)),T=v(r(137));t.default=function(e,t){var r;return r=function(r){function n(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(t=c(this,n,[e])).indicatorTimer=null,t.clearTimer=t.clearTimer.bind(t),t.handleBlur=t.handleBlur.bind(t),t.handleClick=t.handleClick.bind(t),t.handleKeyDown=t.handleKeyDown.bind(t),t.beforeComplete=t.beforeComplete.bind(t),t.asyncbeforeCompete=t.asyncbeforeCompete.bind(t),t.displayErrorMessage=t.displayErrorMessage.bind(t),t.state={invalidMessage:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(n,r),o=n,u=[{key:"componentWillUnmount",value:function(){this.clearTimer()}},{key:"componentDidUpdate",value:function(t){var r=t.message;e.isDefined(r)&&(this.createTimer(),this.setState(function(){return{invalidMessage:r}}))}},{key:"clearTimer",value:function(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}},{key:"createTimer",value:function(){var t=this;this.clearTimer();var r=this.props,n=r.timeToCloseMessage,o=r.onErrorMessageDisappear;this.indicatorTimer=e.sleep(function(){t.setState(function(){return{invalidMessage:null}}),e.isFunction(o)&&o()},n)}},{key:"displayErrorMessage",value:function(e){this.setState(function(){return{invalidMessage:e}}),this.createTimer()}},{key:"asyncbeforeCompete",value:function(e){var t=this;return function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{valid:!0},n=r.valid,o=r.message,i=t.props,u=i.onUpdate,a=i.row,l=i.column;n?u(a,l,e):t.displayErrorMessage(o)}}},{key:"beforeComplete",value:function(t){var r=this.props,n=r.onUpdate,o=r.row,i=r.column;if(e.isFunction(i.validator)){var u=i.validator(t,o,i,this.asyncbeforeCompete(t));if(e.isObject(u)){if(u.async)return;if(!u.valid)return void this.displayErrorMessage(u.message)}}n(o,i,t)}},{key:"handleBlur",value:function(){var e=this.props,t=e.onEscape;e.blurToSave?this.beforeComplete(this.editor.getValue()):t()}},{key:"handleKeyDown",value:function(e){var t=this.props.onEscape;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}},{key:"handleClick",value:function(e){"TD"!==e.target.tagName&&e.stopPropagation()}},{key:"render",value:function(){var r,n,o,u,a,l=this,c=this.props,s=c.row,f=c.column,d=c.className,p=c.style,b=c.rowIndex,y=c.columnIndex,h=c.autoSelectText,v=f.dataField,O=e.get(s,v),S=e.isDefined(this.state.invalidMessage),D=f.editorClasses||"";e.isFunction(f.editorClasses)&&(D=f.editorClasses(O,s,b,y));var x=f.editorStyle||{};e.isFunction(f.editorStyle)&&(x=f.editorStyle(O,s,b,y));var M={ref:function(e){return l.editor=e},defaultValue:O,style:x,className:(0,m.default)({animated:S,shake:S},D),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:function(){},onUpdate:function(e){}};t&&(M.didMount=function(){return t(s,f,b,y)});var k=e.isObject(f.editor);return k?M=i(i({},M),f.editor):e.isFunction(f.editorRenderer)&&(M=i(i({},M),{},{onUpdate:this.beforeComplete})),a=e.isFunction(f.editorRenderer)?f.editorRenderer(M,O,s,f,b,y):k&&(null===(r=f.editor)||void 0===r?void 0:r.type)===_.EDITTYPE.SELECT?g.default.createElement(w.default,i(i({},M),{},{row:s,column:f})):k&&(null===(n=f.editor)||void 0===n?void 0:n.type)===_.EDITTYPE.TEXTAREA?g.default.createElement(T.default,i(i({},M),{},{autoSelectText:h})):k&&(null===(o=f.editor)||void 0===o?void 0:o.type)===_.EDITTYPE.CHECKBOX?g.default.createElement(j.default,i({},M)):k&&(null===(u=f.editor)||void 0===u?void 0:u.type)===_.EDITTYPE.DATE?g.default.createElement(E.default,i({},M)):g.default.createElement(C.default,i(i({},M),{},{autoSelectText:h})),g.default.createElement("td",{className:(0,m.default)("react-bootstrap-table-editing-cell",d),style:p,onClick:this.handleClick},a,S?g.default.createElement(P.default,{invalidMessage:this.state.invalidMessage}):null)}}],u&&a(o.prototype,u),l&&a(o,l),Object.defineProperty(o,"prototype",{writable:!1}),o;var o,u,l}(g.Component),r.propTypes={row:O.default.object.isRequired,rowIndex:O.default.number.isRequired,column:O.default.object.isRequired,columnIndex:O.default.number.isRequired,onUpdate:O.default.func.isRequired,onEscape:O.default.func.isRequired,timeToCloseMessage:O.default.number,autoSelectText:O.default.bool,className:O.default.string,style:O.default.object},r.defaultProps={timeToCloseMessage:_.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}},r}},351(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(898),s=a(r(282));t.default=function(e,t){var r=(0,s.default)(e,t);return function(t){return l.default.createElement(c.Consumer,null,function(n){return function(t,n){var o=e.get(t.row,t.column.dataField),u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(o,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(o,t.row,t.rowIndex,t.columnIndex)),l.default.createElement(r,i(i({},t),{},{className:a,style:u},n))}(t,n)})}}},404(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(511),u=n(r(205));t.default=(e,t)=>{const r=(0,u.default)(e,t);return t=>o.default.createElement(i.Consumer,null,n=>((t,n)=>{const i=e.get(t.row,t.column.dataField);let u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(i,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(i,t.row,t.rowIndex,t.columnIndex)),o.default.createElement(r,{...t,className:a,style:u,...n})})(t,n))}},442(t){"use strict";t.exports=e},462(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){const{defaultValue:e=null,didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}handleKeyDown(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-textarea");return c.default.createElement("textarea",{ref:e=>{this.text=e},className:i,...o,onKeyDown:this.handleKeyDown})}}t.default=s},511(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;const o=n(r(556)),i=n(r(442)),u=r(564),a=i.default.createContext(null);t.default=(e,t,r,n)=>{class l extends i.default.Component{constructor(e){super(e),this.doUpdate=this.doUpdate.bind(this),this.startEditing=this.startEditing.bind(this),this.escapeEditing=this.escapeEditing.bind(this),this.completeEditing=this.completeEditing.bind(this),this.handleCellUpdate=this.handleCellUpdate.bind(this),this.state={ridx:null,cidx:null,message:null}}static getDerivedStateFromProps(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:{...n}}handleCellUpdate(r,n,o){const i=t.typeConvert(n.type,o),{cellEdit:u}=this.props,{beforeSaveCell:a}=u.options,l=e.get(r,n.dataField),c=(e=!0)=>{e?this.doUpdate(r,n,i):this.escapeEditing()};if(e.isFunction(a)){const t=a(l,i,r,n,c);if(e.isObject(t)&&t.async)return}this.doUpdate(r,n,i)}doUpdate(o,i,u){const{keyField:a,cellEdit:l,data:c}=this.props,{afterSaveCell:s}=l.options,f=e.get(o,a),d=e.get(o,i.dataField);r()?n(f,i.dataField,u):(t.editCell(c,a,f,i.dataField,u),e.isFunction(s)&&s(d,u,o,i),this.completeEditing())}completeEditing(){this.setState(()=>({ridx:null,cidx:null,message:null}))}startEditing(e,t){const r=()=>{this.setState(()=>({ridx:e,cidx:t}))},{selectRow:n}=this.props;n&&!n.clickToEdit&&n.clickToSelect||r()}escapeEditing(){this.setState(()=>({ridx:null,cidx:null}))}render(){const{cellEdit:{options:{nonEditableRows:t,errorMessage:r,...n},ridx:o,cidx:u,...l}}=this.props,c={...n,...l,ridx:null!==this.state.ridx?this.state.ridx:o??null,cidx:null!==this.state.cidx?this.state.cidx:u??null,message:this.state.message,nonEditableRows:e.isDefined(t)?t():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate};return i.default.createElement(a.Provider,{value:{...c}},this.props.children)}}return l.propTypes={data:o.default.array.isRequired,selectRow:o.default.object,options:o.default.shape({mode:o.default.oneOf([u.CLICK_TO_CELL_EDIT,u.DBCLICK_TO_CELL_EDIT]).isRequired,onErrorMessageDisappear:o.default.func,blurToSave:o.default.bool,beforeSaveCell:o.default.func,afterSaveCell:o.default.func,onStartEdit:o.default.func,nonEditableRows:o.default.func,timeToCloseMessage:o.default.number,errorMessage:o.default.any})},{Provider:l}},t.Consumer=a.Consumer},512(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,u,a=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(a.push(n.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(u=r.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var h,v=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},m=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},O=(h=function(e){return h=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},h(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=h(e),n=0;n<r.length;n++)"default"!==r[n]&&v(t,e,r[n]);return m(t,e),t}),g=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var _=g(r(942)),j=O(r(442)),E=function(e){function t(e){var r,n,o;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(o=d(this,t,[e])).state={checked:(null!==(r=e.defaultValue)&&void 0!==r&&r).toString()===(null!==(n=e.value)&&void 0!==n?n:"on:off").split(":")[0]},o.handleChange=o.handleChange.bind(o),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props.didMount;this.checkbox.focus(),e&&e()}},{key:"getValue",value:function(){var e,t=l((null!==(e=this.props.value)&&void 0!==e?e:"on:off").split(":"),2),r=t[0],n=t[1];return this.checkbox.checked?r:n}},{key:"handleChange",value:function(e){this.props.onChange&&this.props.onChange(e);var t=e.target;this.setState(function(){return{checked:t.checked}})}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,i=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),a=(0,_.default)("editor edit-chseckbox checkbox",n);return j.default.createElement("input",u(u({ref:function(t){e.checkbox=t},type:"checkbox",className:a},i),{},{checked:this.state.checked,onChange:this.handleChange}))}}],n&&s(r.prototype,n),i&&s(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(j.Component);t.default=E},556(e,t,r){e.exports=r(694)()},564(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(898)),i=n(r(351)),u=n(r(810));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},694(e,t,r){"use strict";var n=r(925);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,i,u){if(u!==n){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return r.PropTypes=r,r}},810(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(564),s=r(898);t.default=function(e,t){function r(r){return l.default.createElement(s.Consumer,null,function(n){return function(r,n){var o=r.value,u=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(o)>-1),a={};return t&&n.mode===c.DBCLICK_TO_CELL_EDIT&&(a.DELAY_FOR_DBCLICK=c.DELAY_FOR_DBCLICK),l.default.createElement(e,i(i(i({},r),a),{},{editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:u,atstart:n.atstart,clickToEdit:n.mode===c.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===c.DBCLICK_TO_CELL_EDIT}))}(r,n)})}return r.displayName="WithCellEditingRowConsumer",r}},855(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t,r){return(t=l(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function c(e,t,r){return t=f(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,r||[],f(e).constructor):t.apply(e,r))}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=v(r(942)),O=h(r(442)),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,t,arguments)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.date.valueAsDate=new Date(r),this.date.focus(),n&&n()}},{key:"getValue",value:function(){return this.date.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),n=void 0===r?"":r,a=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),l=(0,m.default)(n,"form-control editor edit-date");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){e.date=t},type:"date",className:l},a))}}],n&&a(r.prototype,n),l&&a(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,l}(O.Component);t.default=g},856(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(511)),i=n(r(404)),u=n(r(33));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},868(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.date.valueAsDate=new Date(e),this.date.focus(),t&&t()}getValue(){return this.date.value}render(){const{defaultValue:e="",didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-date");return c.default.createElement("input",{ref:e=>{this.date=e},type:"date",className:i,...o})}}t.default=s},871(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{componentDidMount(){const{defaultValue:e="",didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,onUpdate:o,...i}=this.props,u=(0,l.default)(r,"form-control editor edit-text");return c.default.createElement("input",{ref:e=>{this.text=e},type:"text",className:u,...i})}}t.default=s},898(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["nonEditableRows","errorMessage"],i=["options","ridx","cidx"];function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?u(Object(r),!0).forEach(function(t){l(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function l(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var h=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;var v=h(r(556)),m=h(r(442)),O=r(564),g=m.default.createContext(null);t.default=function(e,t,r,n){var u=function(u){function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),(t=d(this,l,[e])).doUpdate=t.doUpdate.bind(t),t.startEditing=t.startEditing.bind(t),t.escapeEditing=t.escapeEditing.bind(t),t.completeEditing=t.completeEditing.bind(t),t.handleCellUpdate=t.handleCellUpdate.bind(t),t.state={ridx:null,cidx:null,message:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(l,u),f=l,p=[{key:"handleCellUpdate",value:function(r,n,o){var i=this,u=t.typeConvert(n.type,o),a=this.props.cellEdit.options.beforeSaveCell,l=e.get(r,n.dataField);if(e.isFunction(a)){var c=a(l,u,r,n,function(){arguments.length>0&&void 0!==arguments[0]&&!arguments[0]?i.escapeEditing():i.doUpdate(r,n,u)});if(e.isObject(c)&&c.async)return}this.doUpdate(r,n,u)}},{key:"doUpdate",value:function(o,i,u){var a=this.props,l=a.keyField,c=a.cellEdit,s=a.data,f=c.options.afterSaveCell,d=e.get(o,l),p=e.get(o,i.dataField);r()?n(d,i.dataField,u):(t.editCell(s,l,d,i.dataField,u),e.isFunction(f)&&f(p,u,o,i),this.completeEditing())}},{key:"completeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null,message:null}})}},{key:"startEditing",value:function(e,t){var r=this,n=this.props.selectRow;n&&!n.clickToEdit&&n.clickToSelect||r.setState(function(){return{ridx:e,cidx:t}})}},{key:"escapeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null}})}},{key:"render",value:function(){var t=this.props.cellEdit,r=t.options,n=r.nonEditableRows,u=(r.errorMessage,c(r,o)),l=t.ridx,s=t.cidx,f=c(t,i),d=a(a(a({},u),f),{},{ridx:null!==this.state.ridx?this.state.ridx:null!=l?l:null,cidx:null!==this.state.cidx?this.state.cidx:null!=s?s:null,message:this.state.message,nonEditableRows:e.isDefined(n)?n():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate});return m.default.createElement(g.Provider,{value:a({},d)},this.props.children)}}],b=[{key:"getDerivedStateFromProps",value:function(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:a({},n)}}],p&&s(f.prototype,p),b&&s(f,b),Object.defineProperty(f,"prototype",{writable:!1}),f;var f,p,b}(m.default.Component);return u.propTypes={data:v.default.array.isRequired,selectRow:v.default.object,options:v.default.shape({mode:v.default.oneOf([O.CLICK_TO_CELL_EDIT,O.DBCLICK_TO_CELL_EDIT]).isRequired,onErrorMessageDisappear:v.default.func,blurToSave:v.default.bool,beforeSaveCell:v.default.func,afterSaveCell:v.default.func,onStartEdit:v.default.func,nonEditableRows:v.default.func,timeToCloseMessage:v.default.number,errorMessage:v.default.any})},{Provider:u}},t.Consumer=g.Consumer},900(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["defaultValue","didMount","getOptions","className","onUpdate"];function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t,r){return(t=c(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},h=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return h(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=v(r(442)),_=function(e){function t(e){var r,n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),n=s(this,t,[e]);var o=null!==(r=e.options)&&void 0!==r?r:[];return e.getOptions&&(o=e.getOptions(n.setOptions.bind(n),{row:e.row,column:e.column})||[]),n.state={options:o},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.select.value=r,this.select.focus(),n&&n()}},{key:"setOptions",value:function(e){this.setState({options:e})}},{key:"getValue",value:function(){return this.select.value}},{key:"render",value:function(){var e=this,t=this.props,r=t.defaultValue,n=void 0===r?"":r,i=(t.didMount,t.getOptions,t.className),a=void 0===i?"":i,l=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,o)),c=(0,O.default)(a,"form-control editor edit-select"),s=u(u({},l),{},{className:c});return g.default.createElement("select",u(u({},s),{},{ref:function(t){e.select=t},defaultValue:n}),this.state.options.map(function(e){var t=e.label,r=e.value;return g.default.createElement("option",{key:r,value:r},t)}))}}],n&&l(r.prototype,n),i&&l(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(g.Component);t.default=_},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},937(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{constructor(e){super(e),this.state={checked:(e.defaultValue??!1).toString()===(e.value??"on:off").split(":")[0]},this.handleChange=this.handleChange.bind(this)}componentDidMount(){const{didMount:e}=this.props;this.checkbox.focus(),e&&e()}getValue(){const[e,t]=(this.props.value??"on:off").split(":");return this.checkbox.checked?e:t}handleChange(e){this.props.onChange&&this.props.onChange(e);const{target:t}=e;this.setState(()=>({checked:t.checked}))}render(){const{defaultValue:e=!1,didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)("editor edit-chseckbox checkbox",r);return c.default.createElement("input",{ref:e=>{this.checkbox=e},type:"checkbox",className:i,...o,checked:this.state.checked,onChange:this.handleChange})}}t.default=s},942(e,t){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var r=arguments[t];r&&(e=u(e,i(r)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var r in e)n.call(e,r)&&e[r]&&(t=u(t,r));return t}function u(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()}},r={},function e(n){var o=r[n];if(void 0!==o)return o.exports;var i=r[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(856);var t,r});
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IuanMiLCJtYXBwaW5ncyI6IjtDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxFQUFRRyxRQUFRLFVBQ1IsbUJBQVhDLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxDQUFDLFNBQVVKLEdBQ1EsaUJBQVpDLFFBQ2RBLFFBQXFDLDRCQUFJRCxFQUFRRyxRQUFRLFVBRXpESixFQUFrQyw0QkFBSUMsRUFBUUQsRUFBWSxNQUMzRCxDQVRELENBU0dPLEtBQU9DLElBQ1YsTywrSkNUQSxrQkFDQSxTQUtBLFNBRUEsVUFBZSxDQUFDQyxFQUFnQkMsS0EyQjlCLFNBQVNDLEVBQWFDLEdBQ3BCLE9BQ0Usd0JBQUMsRUFBQUMsU0FBUSxLQUFHQyxHQTVCVyxFQUFDRixFQUFZRSxLQUN0QyxNQUFNQyxFQUFNSCxFQUFNSSxNQUNaQyxJQUNKSCxFQUFTSSxnQkFBZ0JDLE9BQVMsR0FDbENMLEVBQVNJLGdCQUFnQkUsUUFBUUwsSUFBUSxHQUdyQ00sRUFBaUQsQ0FBQyxFQU14RCxPQUpJWCxHQUFvQkksRUFBU1EsT0FBUyxFQUFBQyx1QkFDeENGLEVBQU1HLGtCQUFvQixFQUFBQSxtQkFJMUIsd0JBQUNmLEVBQVMsSUFDSkcsS0FDQVMsRUFDSkksY0FBZVgsRUFBU1ksS0FDeEJDLGNBQWViLEVBQVNjLEtBQ3hCQyxXQUFZWixFQUNaYSxRQUFTaEIsRUFBU2dCLFFBQ2xCQyxZQUFhakIsRUFBU1EsT0FBUyxFQUFBVSxtQkFDL0JDLGNBQWVuQixFQUFTUSxPQUFTLEVBQUFDLHdCQU1WVyxDQUFtQnRCLEVBQU9FLEdBRXZELENBR0EsT0FEQUgsRUFBYXdCLFlBQWMsNkJBQ3BCeEIsRSx5QkN6Q1QsSUFBSXlCLEVBQXdELFNBQVVDLEdBQ3BFLE9BQU9BLEdBQU9BLEVBQUlDLFdBQWFELEVBQU0sQ0FD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azovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL3Jvdy1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2VkaXRvci1pbmRpY2F0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL3RleHQtZWRpdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2Ryb3Bkb3duLWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL3RleHRhcmVhLWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9lZGl0b3ItaW5kaWNhdG9yLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9lZGl0aW5nLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9lZGl0aW5nLWNlbGwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2VkaXRpbmctY2VsbC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9lZGl0aW5nLWNlbGwtY29uc3VtZXIudHN4Iiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy90ZXh0YXJlYS1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9jaGVja2JveC1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9yb3ctY29uc3VtZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2RhdGUtZWRpdG9yLmpzIiwid2VicGFjazovLy9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL3NyYy9kYXRlLWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvdGV4dC1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9jb250ZXh0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9kcm9wZG93bi1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2NoZWNrYm94LWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nRWRpdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ0VkaXRvclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBDTElDS19UT19DRUxMX0VESVQsXG4gIERCQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICBERUxBWV9GT1JfREJDTElDSyxcbn0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBDb25zdW1lciB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgKENvbXBvbmVudDogYW55LCBzZWxlY3RSb3dFbmFibGVkOiBhbnkpID0+IHtcbiAgY29uc3QgcmVuZGVyV2l0aENlbGxFZGl0ID0gKHByb3BzOiBhbnksIGNlbGxFZGl0OiBhbnkpID0+IHtcbiAgICBjb25zdCBrZXkgPSBwcm9wcy52YWx1ZTtcbiAgICBjb25zdCBlZGl0YWJsZVJvdyA9ICEoXG4gICAgICBjZWxsRWRpdC5ub25FZGl0YWJsZVJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmluZGV4T2Yoa2V5KSA+IC0xXG4gICAgKTtcblxuICAgIGNvbnN0IGF0dHJzOiB7IERFTEFZX0ZPUl9EQkNMSUNLPzogbnVtYmVyIHwgc3RyaW5nIH0gPSB7fTtcblxuICAgIGlmIChzZWxlY3RSb3dFbmFibGVkICYmIGNlbGxFZGl0Lm1vZGUgPT09IERCQ0xJQ0tfVE9fQ0VMTF9FRElUKSB7XG4gICAgICBhdHRycy5ERUxBWV9GT1JfREJDTElDSyA9IERFTEFZX0ZPUl9EQkNMSUNLO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgey4uLmF0dHJzfVxuICAgICAgICBlZGl0aW5nUm93SWR4PXtjZWxsRWRpdC5yaWR4fVxuICAgICAgICBlZGl0aW5nQ29sSWR4PXtjZWxsRWRpdC5jaWR4fVxuICAgICAgICBpc0VkaXRhYmxlPXtlZGl0YWJsZVJvd31cbiAgICAgICAgYXRzdGFydD17Y2VsbEVkaXQuYXRzdGFydH1cbiAgICAgICAgY2xpY2tUb0VkaXQ9e2NlbGxFZGl0Lm1vZGUgPT09IENMSUNLX1RPX0NFTExfRURJVH1cbiAgICAgICAgZGJjbGlja1RvRWRpdD17Y2VsbEVkaXQubW9kZSA9PT0gREJDTElDS19UT19DRUxMX0VESVR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG4gIGZ1bmN0aW9uIHdpdGhDb25zdW1lcihwcm9wczogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25zdW1lcj57KGNlbGxFZGl0KSA9PiByZW5kZXJXaXRoQ2VsbEVkaXQocHJvcHMsIGNlbGxFZGl0KX08L0NvbnN1bWVyPlxuICAgICk7XG4gIH1cblxuICB3aXRoQ29uc3VtZXIuZGlzcGxheU5hbWUgPSBcIldpdGhDZWxsRWRpdGluZ1Jvd0NvbnN1bWVyXCI7XG4gIHJldHVybiB3aXRoQ29uc3VtZXI7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgRWRpdG9ySW5kaWNhdG9yID0gZnVuY3Rpb24gRWRpdG9ySW5kaWNhdG9yKF9yZWYpIHtcbiAgdmFyIGludmFsaWRNZXNzYWdlID0gX3JlZi5pbnZhbGlkTWVzc2FnZTtcbiAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJhbGVydCBhbGVydC1kYW5nZXIgaW5cIixcbiAgICByb2xlOiBcImFsZXJ0XCIsXG4gICAgXCJkYXRhLXRlc3RpZFwiOiBcImVkaXRvci1pbmRpY2F0b3JcIlxuICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIG51bGwsIGludmFsaWRNZXNzYWdlKSk7XG59O1xuRWRpdG9ySW5kaWNhdG9yLnByb3BUeXBlcyA9IHtcbiAgaW52YWxpZE1lc3NhZ2U6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uc3RyaW5nXG59O1xuLy8gRWRpdG9ySW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgaW52YWxpZE1lc3NhZ2U6IG51bGwsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBFZGl0b3JJbmRpY2F0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcImF1dG9TZWxlY3RUZXh0XCIsIFwib25VcGRhdGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRleHRFZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBUZXh0RWRpdG9yKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0RWRpdG9yKTtcbiAgICByZXR1cm4gX2NhbGxTdXBlcih0aGlzLCBUZXh0RWRpdG9yLCBhcmd1bWVudHMpO1xuICB9XG4gIF9pbmhlcml0cyhUZXh0RWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRleHRFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzJGF1dG9TZWxlYyA9IF90aGlzJHByb3BzLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzJGF1dG9TZWxlYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyRhdXRvU2VsZWM7XG4gICAgICB0aGlzLnRleHQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICAgIGlmIChhdXRvU2VsZWN0VGV4dCkgdGhpcy50ZXh0LnNlbGVjdCgpO1xuICAgICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRkZWZhdWx0ViA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMiRkZWZhdWx0ViA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRkZWZhdWx0VixcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wczIuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzMiRjbGFzc05hbSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMiRjbGFzc05hbSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRjbGFzc05hbSxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGF1dG9TZWxlID0gX3RoaXMkcHJvcHMyLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzMiRhdXRvU2VsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wczIkYXV0b1NlbGUsXG4gICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHRcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgX3RoaXMudGV4dCA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzXG4gICAgICB9LCByZXN0KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gVGV4dEVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMub2JqZWN0XG4vLyAgIF0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgICAgUHJvcFR5cGVzLm51bWJlclxuLy8gICBdKSxcbi8vICAgYXV0b1NlbGVjdFRleHQ6IFByb3BUeXBlcy5ib29sLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmNcbi8vIH07XG4vLyBUZXh0RWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBudWxsLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWRcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFRleHRFZGl0b3I7IiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgT3B0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbn1cblxuaW50ZXJmYWNlIERyb3BEb3duRWRpdG9yUHJvcHMge1xuICByb3c6IG9iamVjdDtcbiAgY29sdW1uOiBvYmplY3Q7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IG9iamVjdDtcbiAgb3B0aW9ucz86IE9wdGlvbltdO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIGdldE9wdGlvbnM/OiAoXG4gICAgc2V0T3B0aW9uczogKG9wdGlvbnM6IE9wdGlvbltdKSA9PiB2b2lkLFxuICAgIGNvbnRleHQ6IHsgcm93OiBvYmplY3Q7IGNvbHVtbjogb2JqZWN0IH1cbiAgKSA9PiBPcHRpb25bXSB8IHZvaWQ7XG4gIG9uVXBkYXRlPzogYW55O1xufVxuXG5pbnRlcmZhY2UgRHJvcERvd25FZGl0b3JTdGF0ZSB7XG4gIG9wdGlvbnM6IE9wdGlvbltdO1xufVxuXG5jbGFzcyBEcm9wRG93bkVkaXRvciBleHRlbmRzIENvbXBvbmVudDxcbiAgRHJvcERvd25FZGl0b3JQcm9wcyxcbiAgRHJvcERvd25FZGl0b3JTdGF0ZVxuPiB7XG4gIHNlbGVjdDogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGxldCBvcHRpb25zID0gcHJvcHMub3B0aW9ucyA/PyBbXTtcbiAgICBpZiAocHJvcHMuZ2V0T3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9XG4gICAgICAgIHByb3BzLmdldE9wdGlvbnModGhpcy5zZXRPcHRpb25zLmJpbmQodGhpcyksIHtcbiAgICAgICAgICByb3c6IHByb3BzLnJvdyxcbiAgICAgICAgICBjb2x1bW46IHByb3BzLmNvbHVtbixcbiAgICAgICAgfSkgfHwgW107XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSB7IG9wdGlvbnMgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlID0gXCJcIiwgZGlkTW91bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5zZWxlY3QudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgdGhpcy5zZWxlY3QuZm9jdXMoKTtcbiAgICBpZiAoZGlkTW91bnQpIHtcbiAgICAgIGRpZE1vdW50KCk7XG4gICAgfVxuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgb3B0aW9ucyB9KTtcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdC52YWx1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBcIlwiLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBnZXRPcHRpb25zLFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1zZWxlY3RcIik7XG5cbiAgICBjb25zdCBhdHRyID0ge1xuICAgICAgLi4ucmVzdCxcbiAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3MsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8c2VsZWN0XG4gICAgICAgIHsuLi5hdHRyfVxuICAgICAgICByZWY9eyhub2RlKSA9PiB7IHRoaXMuc2VsZWN0ID0gbm9kZTsgfX1cbiAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnN0YXRlLm9wdGlvbnMubWFwKCh7IGxhYmVsLCB2YWx1ZSB9OiBhbnkpID0+IChcbiAgICAgICAgICA8b3B0aW9uIGtleT17dmFsdWV9IHZhbHVlPXt2YWx1ZX0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICkpfVxuICAgICAgPC9zZWxlY3Q+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBEcm9wRG93bkVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIHJvdzogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5udW1iZXJcbi8vICAgXSksXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG9wdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55XG4vLyAgICAgfSkpXG4vLyAgIF0pLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGdldE9wdGlvbnM6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuXG4vLyBEcm9wRG93bkVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogJycsXG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIHN0eWxlOiB7fSxcbi8vICAgb3B0aW9uczogW10sXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyAgIGdldE9wdGlvbnM6IHVuZGVmaW5lZFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgRHJvcERvd25FZGl0b3I7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRWYWx1ZVwiLCBcImRpZE1vdW50XCIsIFwiY2xhc3NOYW1lXCIsIFwiYXV0b1NlbGVjdFRleHRcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRleHRBcmVhRWRpdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gVGV4dEFyZWFFZGl0b3IocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRleHRBcmVhRWRpdG9yKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgVGV4dEFyZWFFZGl0b3IsIFtwcm9wc10pO1xuICAgIF90aGlzLmhhbmRsZUtleURvd24gPSBfdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoVGV4dEFyZWFFZGl0b3IsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoVGV4dEFyZWFFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzJGF1dG9TZWxlYyA9IF90aGlzJHByb3BzLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzJGF1dG9TZWxlYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyRhdXRvU2VsZWM7XG4gICAgICB0aGlzLnRleHQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICAgIGlmIChhdXRvU2VsZWN0VGV4dCkgdGhpcy50ZXh0LnNlbGVjdCgpO1xuICAgICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUtleURvd25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlS2V5RG93bihlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiAhZS5zaGlmdEtleSkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25LZXlEb3duKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25LZXlEb3duKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyJGRlZmF1bHRWID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzMi5kaWRNb3VudCxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGNsYXNzTmFtLFxuICAgICAgICBfdGhpcyRwcm9wczIkYXV0b1NlbGUgPSBfdGhpcyRwcm9wczIuYXV0b1NlbGVjdFRleHQsXG4gICAgICAgIGF1dG9TZWxlY3RUZXh0ID0gX3RoaXMkcHJvcHMyJGF1dG9TZWxlID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzMiRhdXRvU2VsZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0YXJlYVwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzMi50ZXh0ID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gVGV4dEFyZWFFZGl0b3IucHJvcFR5cGVzID0ge1xuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4vLyAgIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcbi8vIFRleHRBcmVhRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbi8vICAgb25LZXlEb3duOiB1bmRlZmluZWQsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBUZXh0QXJlYUVkaXRvcjsiLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBFZGl0b3JJbmRpY2F0b3IgPSAoeyBpbnZhbGlkTWVzc2FnZSB9OiBhbnkpID0+IChcbiAgPGRpdiBjbGFzc05hbWU9XCJhbGVydCBhbGVydC1kYW5nZXIgaW5cIiByb2xlPVwiYWxlcnRcIiBkYXRhLXRlc3RpZD1cImVkaXRvci1pbmRpY2F0b3JcIj5cbiAgICA8c3Ryb25nPntpbnZhbGlkTWVzc2FnZX08L3N0cm9uZz5cbiAgPC9kaXY+XG4pO1xuXG5FZGl0b3JJbmRpY2F0b3IucHJvcFR5cGVzID0ge1xuICBpbnZhbGlkTWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbi8vIEVkaXRvckluZGljYXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGludmFsaWRNZXNzYWdlOiBudWxsLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgRWRpdG9ySW5kaWNhdG9yO1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgY2xhc3MtbWV0aG9kcy11c2UtdGhpczogMCAqL1xuLyogZXNsaW50IGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRURJVFRZUEUsIFRJTUVfVE9fQ0xPU0VfTUVTU0FHRSB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IENoZWNrQm94RWRpdG9yIGZyb20gXCIuL2NoZWNrYm94LWVkaXRvclwiO1xuaW1wb3J0IERhdGVFZGl0b3IgZnJvbSBcIi4vZGF0ZS1lZGl0b3JcIjtcbmltcG9ydCBEcm9wZG93bkVkaXRvciBmcm9tIFwiLi9kcm9wZG93bi1lZGl0b3JcIjtcbmltcG9ydCBFZGl0b3JJbmRpY2F0b3IgZnJvbSBcIi4vZWRpdG9yLWluZGljYXRvclwiO1xuaW1wb3J0IFRleHRFZGl0b3IgZnJvbSBcIi4vdGV4dC1lZGl0b3JcIjtcbmltcG9ydCBUZXh0QXJlYUVkaXRvciBmcm9tIFwiLi90ZXh0YXJlYS1lZGl0b3JcIjtcblxuaW50ZXJmYWNlIEVkaXRpbmdDZWxsUHJvcHMge1xuICByb3c6IG9iamVjdDtcbiAgcm93SW5kZXg6IG51bWJlcjtcbiAgY29sdW1uOiB7XG4gICAgZGF0YUZpZWxkOiBhbnk7XG4gICAgdmFsaWRhdG9yPzogYW55O1xuICAgIGVkaXRvckNsYXNzZXM/OiBhbnk7XG4gICAgZWRpdG9yU3R5bGU/OiBhbnk7XG4gICAgZWRpdG9yPzogeyB0eXBlOiBhbnk7IG9wdGlvbnM/OiBhbnkgfTtcbiAgICBlZGl0b3JSZW5kZXJlcj86IEZ1bmN0aW9uO1xuICAgIHRleHQ6IGFueTtcbiAgfTtcbiAgY29sdW1uSW5kZXg6IG51bWJlcjtcbiAgb25VcGRhdGU6IChyb3c6IG9iamVjdCwgY29sdW1uOiBvYmplY3QsIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gIG9uRXNjYXBlOiAoKSA9PiB2b2lkO1xuICB0aW1lVG9DbG9zZU1lc3NhZ2U/OiBudW1iZXI7XG4gIGF1dG9TZWxlY3RUZXh0PzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IG9iamVjdDtcbiAgb25FcnJvck1lc3NhZ2VEaXNhcHBlYXI/OiBhbnk7XG4gIGJsdXJUb1NhdmU/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRWRpdGluZ0NlbGxTdGF0ZSB7XG4gIGludmFsaWRNZXNzYWdlOiBhbnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChfOiBhbnksIG9uU3RhcnRFZGl0PzogYW55KSA9PlxuICBjbGFzcyBFZGl0aW5nQ2VsbCBleHRlbmRzIENvbXBvbmVudDxFZGl0aW5nQ2VsbFByb3BzLCBFZGl0aW5nQ2VsbFN0YXRlPiB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIHJvdzogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgcm93SW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgY29sdW1uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICAgIG9uVXBkYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgb25Fc2NhcGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBhdXRvU2VsZWN0VGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB9O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIHRpbWVUb0Nsb3NlTWVzc2FnZTogVElNRV9UT19DTE9TRV9NRVNTQUdFLFxuICAgICAgY2xhc3NOYW1lOiBudWxsLFxuICAgICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuICAgICAgc3R5bGU6IHt9LFxuICAgIH07XG5cbiAgICBlZGl0b3I6IGFueTtcbiAgICBpbmRpY2F0b3JUaW1lcjogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5pbmRpY2F0b3JUaW1lciA9IG51bGw7XG4gICAgICB0aGlzLmNsZWFyVGltZXIgPSB0aGlzLmNsZWFyVGltZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlQmx1ciA9IHRoaXMuaGFuZGxlQmx1ci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IHRoaXMuaGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5iZWZvcmVDb21wbGV0ZSA9IHRoaXMuYmVmb3JlQ29tcGxldGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuYXN5bmNiZWZvcmVDb21wZXRlID0gdGhpcy5hc3luY2JlZm9yZUNvbXBldGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZSA9IHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHsgbWVzc2FnZSB9OiBhbnkpIHtcbiAgICAgIGlmIChfLmlzRGVmaW5lZChtZXNzYWdlKSkge1xuICAgICAgICB0aGlzLmNyZWF0ZVRpbWVyKCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyVGltZXIoKSB7XG4gICAgICBpZiAodGhpcy5pbmRpY2F0b3JUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5pbmRpY2F0b3JUaW1lcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlVGltZXIoKSB7XG4gICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICAgIGNvbnN0IHsgdGltZVRvQ2xvc2VNZXNzYWdlLCBvbkVycm9yTWVzc2FnZURpc2FwcGVhciB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHRoaXMuaW5kaWNhdG9yVGltZXIgPSBfLnNsZWVwKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBudWxsLFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24ob25FcnJvck1lc3NhZ2VEaXNhcHBlYXIpKSBvbkVycm9yTWVzc2FnZURpc2FwcGVhcigpO1xuICAgICAgfSwgdGltZVRvQ2xvc2VNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2U6IGFueSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICBpbnZhbGlkTWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICB9XG5cbiAgICBhc3luY2JlZm9yZUNvbXBldGUobmV3VmFsdWU6IGFueSkge1xuICAgICAgcmV0dXJuIChyZXN1bHQgPSB7IHZhbGlkOiB0cnVlIH0pID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCB7IHZhbGlkLCBtZXNzYWdlIH0gPSByZXN1bHQ7XG4gICAgICAgIGNvbnN0IHsgb25VcGRhdGUsIHJvdywgY29sdW1uIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBvblVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBiZWZvcmVDb21wbGV0ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgICBjb25zdCB7IG9uVXBkYXRlLCByb3csIGNvbHVtbiB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLnZhbGlkYXRvcikpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVGb3JtID0gY29sdW1uLnZhbGlkYXRvcihcbiAgICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHRoaXMuYXN5bmNiZWZvcmVDb21wZXRlKG5ld1ZhbHVlKVxuICAgICAgICApO1xuICAgICAgICBpZiAoXy5pc09iamVjdCh2YWxpZGF0ZUZvcm0pKSB7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlRm9ybS5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlKHZhbGlkYXRlRm9ybS5tZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9uVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1cigpIHtcbiAgICAgIGNvbnN0IHsgb25Fc2NhcGUsIGJsdXJUb1NhdmUgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoYmx1clRvU2F2ZSkge1xuICAgICAgICB0aGlzLmJlZm9yZUNvbXBsZXRlKHRoaXMuZWRpdG9yLmdldFZhbHVlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25Fc2NhcGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVLZXlEb3duKGU6IGFueSkge1xuICAgICAgY29uc3QgeyBvbkVzY2FwZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgIC8vIEVTQ1xuICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgIC8vIEVOVEVSXG4gICAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUodGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2xpY2soZTogYW55KSB7XG4gICAgICBpZiAoZS50YXJnZXQudGFnTmFtZSAhPT0gXCJURFwiKSB7XG4gICAgICAgIC8vIFRvIGF2b2lkIHRoZSByb3cgc2VsZWN0aW9uIGV2ZW50IGJlIHRyaWdnZXJlZCxcbiAgICAgICAgLy8gV2hlbiB1c2VyIGRlZmluZSBzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCBhbmQgc2VsZWN0Um93LmNsaWNrVG9FZGl0XG4gICAgICAgIC8vIFdlIHNob3VsZG4ndCB0cmlnZ2VyIHNlbGVjdGlvbiBldmVudCBldmVuIGlmIHVzZXIgY2xpY2sgb24gdGhlIGNlbGwgZWRpdG9yKGlucHV0KVxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGxldCBlZGl0b3I6IGFueTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93LFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHJvd0luZGV4LFxuICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgZGF0YUZpZWxkIH0gPSBjb2x1bW47XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgY29uc3QgaGFzRXJyb3IgPSBfLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmludmFsaWRNZXNzYWdlKTtcblxuICAgICAgbGV0IGN1c3RvbUVkaXRvckNsYXNzID0gY29sdW1uLmVkaXRvckNsYXNzZXMgfHwgXCJcIjtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvckNsYXNzZXMpKSB7XG4gICAgICAgIGN1c3RvbUVkaXRvckNsYXNzID0gY29sdW1uLmVkaXRvckNsYXNzZXMoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGxldCBlZGl0b3JTdHlsZSA9IGNvbHVtbi5lZGl0b3JTdHlsZSB8fCB7fTtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclN0eWxlKSkge1xuICAgICAgICBlZGl0b3JTdHlsZSA9IGNvbHVtbi5lZGl0b3JTdHlsZSh2YWx1ZSwgcm93LCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKFxuICAgICAgICB7XG4gICAgICAgICAgYW5pbWF0ZWQ6IGhhc0Vycm9yLFxuICAgICAgICAgIHNoYWtlOiBoYXNFcnJvcixcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tRWRpdG9yQ2xhc3NcbiAgICAgICk7XG5cbiAgICAgIGxldCBlZGl0b3JQcm9wcyA9IHtcbiAgICAgICAgcmVmOiAobm9kZTogYW55KSA9PiAodGhpcy5lZGl0b3IgPSBub2RlKSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgc3R5bGU6IGVkaXRvclN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzLFxuICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlS2V5RG93bixcbiAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXG4gICAgICAgIGRpZE1vdW50OiAoKSA9PiB7IH0sXG4gICAgICAgIG9uVXBkYXRlOiAobmV3VmFsdWU6IGFueSkgPT4geyB9LFxuICAgICAgfTtcblxuICAgICAgaWYgKG9uU3RhcnRFZGl0KSB7XG4gICAgICAgIGVkaXRvclByb3BzLmRpZE1vdW50ID0gKCkgPT5cbiAgICAgICAgICBvblN0YXJ0RWRpdChyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCA9IF8uaXNPYmplY3QoY29sdW1uLmVkaXRvcik7XG5cbiAgICAgIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkKSB7XG4gICAgICAgIGVkaXRvclByb3BzID0ge1xuICAgICAgICAgIC4uLmVkaXRvclByb3BzLFxuICAgICAgICAgIC4uLmNvbHVtbi5lZGl0b3IsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yUmVuZGVyZXIpKSB7XG4gICAgICAgIGVkaXRvclByb3BzID0ge1xuICAgICAgICAgIC4uLmVkaXRvclByb3BzLFxuICAgICAgICAgIG9uVXBkYXRlOiB0aGlzLmJlZm9yZUNvbXBsZXRlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JSZW5kZXJlcikpIHtcbiAgICAgICAgZWRpdG9yID0gY29sdW1uLmVkaXRvclJlbmRlcmVyIShcbiAgICAgICAgICBlZGl0b3JQcm9wcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgIGNvbHVtbkluZGV4XG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmXG4gICAgICAgIGNvbHVtbi5lZGl0b3I/LnR5cGUgPT09IEVESVRUWVBFLlNFTEVDVFxuICAgICAgKSB7XG4gICAgICAgIGVkaXRvciA9IDxEcm9wZG93bkVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IHJvdz17cm93fSBjb2x1bW49e2NvbHVtbn0gLz47XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmXG4gICAgICAgIGNvbHVtbi5lZGl0b3I/LnR5cGUgPT09IEVESVRUWVBFLlRFWFRBUkVBXG4gICAgICApIHtcbiAgICAgICAgZWRpdG9yID0gKFxuICAgICAgICAgIDxUZXh0QXJlYUVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IGF1dG9TZWxlY3RUZXh0PXthdXRvU2VsZWN0VGV4dH0gLz5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiZcbiAgICAgICAgY29sdW1uLmVkaXRvcj8udHlwZSA9PT0gRURJVFRZUEUuQ0hFQ0tCT1hcbiAgICAgICkge1xuICAgICAgICBlZGl0b3IgPSA8Q2hlY2tCb3hFZGl0b3Igey4uLmVkaXRvclByb3BzfSAvPjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiZcbiAgICAgICAgY29sdW1uLmVkaXRvcj8udHlwZSA9PT0gRURJVFRZUEUuREFURVxuICAgICAgKSB7XG4gICAgICAgIGVkaXRvciA9IDxEYXRlRWRpdG9yIHsuLi5lZGl0b3JQcm9wc30gLz47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IgPSAoXG4gICAgICAgICAgPFRleHRFZGl0b3Igey4uLmVkaXRvclByb3BzfSBhdXRvU2VsZWN0VGV4dD17YXV0b1NlbGVjdFRleHR9IC8+XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDx0ZFxuICAgICAgICAgIGNsYXNzTmFtZT17Y3MoXCJyZWFjdC1ib290c3RyYXAtdGFibGUtZWRpdGluZy1jZWxsXCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICB7ZWRpdG9yfVxuICAgICAgICAgIHtoYXNFcnJvciA/IChcbiAgICAgICAgICAgIDxFZGl0b3JJbmRpY2F0b3IgaW52YWxpZE1lc3NhZ2U9e3RoaXMuc3RhdGUuaW52YWxpZE1lc3NhZ2V9IC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvdGQ+XG4gICAgICApO1xuICAgIH1cbiAgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbi8qIGVzbGludCBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9uczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIGNoZWNrYm94X2VkaXRvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2NoZWNrYm94LWVkaXRvclwiKSk7XG52YXIgZGF0ZV9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9kYXRlLWVkaXRvclwiKSk7XG52YXIgZHJvcGRvd25fZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZHJvcGRvd24tZWRpdG9yXCIpKTtcbnZhciBlZGl0b3JfaW5kaWNhdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZWRpdG9yLWluZGljYXRvclwiKSk7XG52YXIgdGV4dF9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi90ZXh0LWVkaXRvclwiKSk7XG52YXIgdGV4dGFyZWFfZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdGV4dGFyZWEtZWRpdG9yXCIpKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKF8sIG9uU3RhcnRFZGl0KSB7XG4gIHZhciBfYTtcbiAgcmV0dXJuIF9hID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgICBmdW5jdGlvbiBFZGl0aW5nQ2VsbChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEVkaXRpbmdDZWxsKTtcbiAgICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBFZGl0aW5nQ2VsbCwgW3Byb3BzXSk7XG4gICAgICBfdGhpcy5pbmRpY2F0b3JUaW1lciA9IG51bGw7XG4gICAgICBfdGhpcy5jbGVhclRpbWVyID0gX3RoaXMuY2xlYXJUaW1lci5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuaGFuZGxlQ2xpY2sgPSBfdGhpcy5oYW5kbGVDbGljay5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUtleURvd24gPSBfdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuYmVmb3JlQ29tcGxldGUgPSBfdGhpcy5iZWZvcmVDb21wbGV0ZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZSA9IF90aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UgPSBfdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGludmFsaWRNZXNzYWdlOiBudWxsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfaW5oZXJpdHMoRWRpdGluZ0NlbGwsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gICAgcmV0dXJuIF9jcmVhdGVDbGFzcyhFZGl0aW5nQ2VsbCwgW3tcbiAgICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKF9yZWYpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBfcmVmLm1lc3NhZ2U7XG4gICAgICAgIGlmIChfLmlzRGVmaW5lZChtZXNzYWdlKSkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBtZXNzYWdlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNsZWFyVGltZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhclRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5pbmRpY2F0b3JUaW1lcikge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluZGljYXRvclRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjcmVhdGVUaW1lclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZVRpbWVyKCkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdGltZVRvQ2xvc2VNZXNzYWdlID0gX3RoaXMkcHJvcHMudGltZVRvQ2xvc2VNZXNzYWdlLFxuICAgICAgICAgIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyID0gX3RoaXMkcHJvcHMub25FcnJvck1lc3NhZ2VEaXNhcHBlYXI7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yVGltZXIgPSBfLnNsZWVwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihvbkVycm9yTWVzc2FnZURpc2FwcGVhcikpIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyKCk7XG4gICAgICAgIH0sIHRpbWVUb0Nsb3NlTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRpc3BsYXlFcnJvck1lc3NhZ2VcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBtZXNzYWdlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiYXN5bmNiZWZvcmVDb21wZXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gYXN5bmNiZWZvcmVDb21wZXRlKG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHtcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgdmFyIHZhbGlkID0gcmVzdWx0LnZhbGlkLFxuICAgICAgICAgICAgbWVzc2FnZSA9IHJlc3VsdC5tZXNzYWdlO1xuICAgICAgICAgIHZhciBfdGhpczMkcHJvcHMgPSBfdGhpczMucHJvcHMsXG4gICAgICAgICAgICBvblVwZGF0ZSA9IF90aGlzMyRwcm9wcy5vblVwZGF0ZSxcbiAgICAgICAgICAgIHJvdyA9IF90aGlzMyRwcm9wcy5yb3csXG4gICAgICAgICAgICBjb2x1bW4gPSBfdGhpczMkcHJvcHMuY29sdW1uO1xuICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIF90aGlzMy5kaXNwbGF5RXJyb3JNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvblVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJiZWZvcmVDb21wbGV0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGJlZm9yZUNvbXBsZXRlKG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICAgIHJvdyA9IF90aGlzJHByb3BzMi5yb3csXG4gICAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbjtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4udmFsaWRhdG9yKSkge1xuICAgICAgICAgIHZhciB2YWxpZGF0ZUZvcm0gPSBjb2x1bW4udmFsaWRhdG9yKG5ld1ZhbHVlLCByb3csIGNvbHVtbiwgdGhpcy5hc3luY2JlZm9yZUNvbXBldGUobmV3VmFsdWUpKTtcbiAgICAgICAgICBpZiAoXy5pc09iamVjdCh2YWxpZGF0ZUZvcm0pKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGVGb3JtLmFzeW5jKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UodmFsaWRhdGVGb3JtLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImhhbmRsZUJsdXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVCbHVyKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkVzY2FwZSA9IF90aGlzJHByb3BzMy5vbkVzY2FwZSxcbiAgICAgICAgICBibHVyVG9TYXZlID0gX3RoaXMkcHJvcHMzLmJsdXJUb1NhdmU7XG4gICAgICAgIGlmIChibHVyVG9TYXZlKSB7XG4gICAgICAgICAgdGhpcy5iZWZvcmVDb21wbGV0ZSh0aGlzLmVkaXRvci5nZXRWYWx1ZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImhhbmRsZUtleURvd25cIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGUpIHtcbiAgICAgICAgdmFyIG9uRXNjYXBlID0gdGhpcy5wcm9wcy5vbkVzY2FwZTtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICAvLyBFU0NcbiAgICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAvLyBFTlRFUlxuICAgICAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUodGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiaGFuZGxlQ2xpY2tcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDbGljayhlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldC50YWdOYW1lICE9PSBcIlREXCIpIHtcbiAgICAgICAgICAvLyBUbyBhdm9pZCB0aGUgcm93IHNlbGVjdGlvbiBldmVudCBiZSB0cmlnZ2VyZWQsXG4gICAgICAgICAgLy8gV2hlbiB1c2VyIGRlZmluZSBzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCBhbmQgc2VsZWN0Um93LmNsaWNrVG9FZGl0XG4gICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHRyaWdnZXIgc2VsZWN0aW9uIGV2ZW50IGV2ZW4gaWYgdXNlciBjbGljayBvbiB0aGUgY2VsbCBlZGl0b3IoaW5wdXQpXG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHZhciBfdGhpczQgPSB0aGlzLFxuICAgICAgICAgIF9jb2x1bW4kZWRpdG9yLFxuICAgICAgICAgIF9jb2x1bW4kZWRpdG9yMixcbiAgICAgICAgICBfY29sdW1uJGVkaXRvcjMsXG4gICAgICAgICAgX2NvbHVtbiRlZGl0b3I0O1xuICAgICAgICB2YXIgZWRpdG9yO1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICByb3cgPSBfdGhpcyRwcm9wczQucm93LFxuICAgICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzNC5jb2x1bW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0LmNsYXNzTmFtZSxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNC5zdHlsZSxcbiAgICAgICAgICByb3dJbmRleCA9IF90aGlzJHByb3BzNC5yb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleCA9IF90aGlzJHByb3BzNC5jb2x1bW5JbmRleCxcbiAgICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzNC5hdXRvU2VsZWN0VGV4dDtcbiAgICAgICAgdmFyIGRhdGFGaWVsZCA9IGNvbHVtbi5kYXRhRmllbGQ7XG4gICAgICAgIHZhciB2YWx1ZSA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgICAgdmFyIGhhc0Vycm9yID0gXy5pc0RlZmluZWQodGhpcy5zdGF0ZS5pbnZhbGlkTWVzc2FnZSk7XG4gICAgICAgIHZhciBjdXN0b21FZGl0b3JDbGFzcyA9IGNvbHVtbi5lZGl0b3JDbGFzc2VzIHx8IFwiXCI7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvckNsYXNzZXMpKSB7XG4gICAgICAgICAgY3VzdG9tRWRpdG9yQ2xhc3MgPSBjb2x1bW4uZWRpdG9yQ2xhc3Nlcyh2YWx1ZSwgcm93LCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlZGl0b3JTdHlsZSA9IGNvbHVtbi5lZGl0b3JTdHlsZSB8fCB7fTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yU3R5bGUpKSB7XG4gICAgICAgICAgZWRpdG9yU3R5bGUgPSBjb2x1bW4uZWRpdG9yU3R5bGUodmFsdWUsIHJvdywgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoe1xuICAgICAgICAgIGFuaW1hdGVkOiBoYXNFcnJvcixcbiAgICAgICAgICBzaGFrZTogaGFzRXJyb3JcbiAgICAgICAgfSwgY3VzdG9tRWRpdG9yQ2xhc3MpO1xuICAgICAgICB2YXIgZWRpdG9yUHJvcHMgPSB7XG4gICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5lZGl0b3IgPSBub2RlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBzdHlsZTogZWRpdG9yU3R5bGUsXG4gICAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzcyxcbiAgICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlS2V5RG93bixcbiAgICAgICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlQmx1cixcbiAgICAgICAgICBkaWRNb3VudDogZnVuY3Rpb24gZGlkTW91bnQoKSB7fSxcbiAgICAgICAgICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUobmV3VmFsdWUpIHt9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvblN0YXJ0RWRpdCkge1xuICAgICAgICAgIGVkaXRvclByb3BzLmRpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9uU3RhcnRFZGl0KHJvdywgY29sdW1uLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgPSBfLmlzT2JqZWN0KGNvbHVtbi5lZGl0b3IpO1xuICAgICAgICBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCkge1xuICAgICAgICAgIGVkaXRvclByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcyksIGNvbHVtbi5lZGl0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yUmVuZGVyZXIpKSB7XG4gICAgICAgICAgZWRpdG9yUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwge30sIHtcbiAgICAgICAgICAgIG9uVXBkYXRlOiB0aGlzLmJlZm9yZUNvbXBsZXRlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yUmVuZGVyZXIpKSB7XG4gICAgICAgICAgZWRpdG9yID0gY29sdW1uLmVkaXRvclJlbmRlcmVyKGVkaXRvclByb3BzLCB2YWx1ZSwgcm93LCBjb2x1bW4sIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJiAoKF9jb2x1bW4kZWRpdG9yID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb2x1bW4kZWRpdG9yLnR5cGUpID09PSBfXzEuRURJVFRZUEUuU0VMRUNUKSB7XG4gICAgICAgICAgZWRpdG9yID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChkcm9wZG93bl9lZGl0b3JfMVtcImRlZmF1bHRcIl0sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpLCB7fSwge1xuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmICgoX2NvbHVtbiRlZGl0b3IyID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3IyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJGVkaXRvcjIudHlwZSkgPT09IF9fMS5FRElUVFlQRS5URVhUQVJFQSkge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQodGV4dGFyZWFfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwge30sIHtcbiAgICAgICAgICAgIGF1dG9TZWxlY3RUZXh0OiBhdXRvU2VsZWN0VGV4dFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmICgoX2NvbHVtbiRlZGl0b3IzID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3IzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJGVkaXRvcjMudHlwZSkgPT09IF9fMS5FRElUVFlQRS5DSEVDS0JPWCkge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoY2hlY2tib3hfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcykpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiYgKChfY29sdW1uJGVkaXRvcjQgPSBjb2x1bW4uZWRpdG9yKSA9PT0gbnVsbCB8fCBfY29sdW1uJGVkaXRvcjQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb2x1bW4kZWRpdG9yNC50eXBlKSA9PT0gX18xLkVESVRUWVBFLkRBVEUpIHtcbiAgICAgICAgICBlZGl0b3IgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGRhdGVfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQodGV4dF9lZGl0b3JfMVtcImRlZmF1bHRcIl0sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpLCB7fSwge1xuICAgICAgICAgICAgYXV0b1NlbGVjdFRleHQ6IGF1dG9TZWxlY3RUZXh0XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwidGRcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogKDAsIGNsYXNzbmFtZXNfMVtcImRlZmF1bHRcIl0pKFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLWVkaXRpbmctY2VsbFwiLCBjbGFzc05hbWUpLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUNsaWNrXG4gICAgICAgIH0sIGVkaXRvciwgaGFzRXJyb3IgPyByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGVkaXRvcl9pbmRpY2F0b3JfMVtcImRlZmF1bHRcIl0sIHtcbiAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogdGhpcy5zdGF0ZS5pbnZhbGlkTWVzc2FnZVxuICAgICAgICB9KSA6IG51bGwpO1xuICAgICAgfVxuICAgIH1dKTtcbiAgfShyZWFjdF8xLkNvbXBvbmVudCksIF9hLnByb3BUeXBlcyA9IHtcbiAgICByb3c6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgcm93SW5kZXg6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgY29sdW1uOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGNvbHVtbkluZGV4OiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIG9uVXBkYXRlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkVzY2FwZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm51bWJlcixcbiAgICBhdXRvU2VsZWN0VGV4dDogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5ib29sLFxuICAgIGNsYXNzTmFtZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5zdHJpbmcsXG4gICAgc3R5bGU6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub2JqZWN0XG4gIH0sIF9hLmRlZmF1bHRQcm9wcyA9IHtcbiAgICB0aW1lVG9DbG9zZU1lc3NhZ2U6IF9fMS5USU1FX1RPX0NMT1NFX01FU1NBR0UsXG4gICAgY2xhc3NOYW1lOiBudWxsLFxuICAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbiAgICBzdHlsZToge31cbiAgfSwgX2E7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIGNvbnRleHRfMSA9IHJlcXVpcmUoXCIuL2NvbnRleHRcIik7XG52YXIgZWRpdGluZ19jZWxsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZWRpdGluZy1jZWxsXCIpKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKF8sIG9uU3RhcnRFZGl0KSB7XG4gIHZhciBFZGl0aW5nQ2VsbCA9ICgwLCBlZGl0aW5nX2NlbGxfMVtcImRlZmF1bHRcIl0pKF8sIG9uU3RhcnRFZGl0KTtcbiAgdmFyIHJlbmRlcldpdGhFZGl0aW5nQ2VsbCA9IGZ1bmN0aW9uIHJlbmRlcldpdGhFZGl0aW5nQ2VsbChwcm9wcywgY2VsbEVkaXQpIHtcbiAgICB2YXIgY29udGVudCA9IF8uZ2V0KHByb3BzLnJvdywgcHJvcHMuY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgdmFyIGVkaXRDZWxsc3R5bGUgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxTdHlsZSB8fCB7fTtcbiAgICB2YXIgZWRpdENlbGxjbGFzc2VzID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3NlcztcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlKSkge1xuICAgICAgZWRpdENlbGxzdHlsZSA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlKGNvbnRlbnQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgsIHByb3BzLmNvbHVtbkluZGV4KTtcbiAgICB9XG4gICAgaWYgKF8uaXNGdW5jdGlvbihwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzKSkge1xuICAgICAgZWRpdENlbGxjbGFzc2VzID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3Nlcyhjb250ZW50LCBwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4LCBwcm9wcy5jb2x1bW5JbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KEVkaXRpbmdDZWxsLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogZWRpdENlbGxjbGFzc2VzLFxuICAgICAgc3R5bGU6IGVkaXRDZWxsc3R5bGVcbiAgICB9LCBjZWxsRWRpdCkpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoY29udGV4dF8xLkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY2VsbEVkaXQpIHtcbiAgICAgIHJldHVybiByZW5kZXJXaXRoRWRpdGluZ0NlbGwocHJvcHMsIGNlbGxFZGl0KTtcbiAgICB9KTtcbiAgfTtcbn07IiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENvbnN1bWVyIH0gZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IGNyZWF0ZUVkaXRpbmdDZWxsIGZyb20gXCIuL2VkaXRpbmctY2VsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoXzogYW55LCBvblN0YXJ0RWRpdD86IGFueSkgPT4ge1xuICBjb25zdCBFZGl0aW5nQ2VsbCA9IGNyZWF0ZUVkaXRpbmdDZWxsKF8sIG9uU3RhcnRFZGl0KTtcbiAgY29uc3QgcmVuZGVyV2l0aEVkaXRpbmdDZWxsID0gKHByb3BzOiBhbnksIGNlbGxFZGl0OiBhbnkpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocHJvcHMucm93LCBwcm9wcy5jb2x1bW4uZGF0YUZpZWxkKTtcbiAgICBsZXQgZWRpdENlbGxzdHlsZSA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlIHx8IHt9O1xuICAgIGxldCBlZGl0Q2VsbGNsYXNzZXMgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUpKSB7XG4gICAgICBlZGl0Q2VsbHN0eWxlID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHByb3BzLnJvdyxcbiAgICAgICAgcHJvcHMucm93SW5kZXgsXG4gICAgICAgIHByb3BzLmNvbHVtbkluZGV4XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHByb3BzLmNvbHVtbi5lZGl0Q2VsbENsYXNzZXMpKSB7XG4gICAgICBlZGl0Q2VsbGNsYXNzZXMgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBwcm9wcy5yb3csXG4gICAgICAgIHByb3BzLnJvd0luZGV4LFxuICAgICAgICBwcm9wcy5jb2x1bW5JbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEVkaXRpbmdDZWxsXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0Q2VsbGNsYXNzZXN9XG4gICAgICAgIHN0eWxlPXtlZGl0Q2VsbHN0eWxlfVxuICAgICAgICB7Li4uY2VsbEVkaXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChwcm9wczogYW55KSA9PiAoXG4gICAgPENvbnN1bWVyPnsoY2VsbEVkaXQpID0+IHJlbmRlcldpdGhFZGl0aW5nQ2VsbChwcm9wcywgY2VsbEVkaXQpfTwvQ29uc3VtZXI+XG4gICk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBUZXh0RWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbiAgYXV0b1NlbGVjdFRleHQ/OiBib29sZWFuO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uS2V5RG93bjogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFRleHRBcmVhRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PFRleHRFZGl0b3JQcm9wcz4ge1xuICB0ZXh0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUZXh0RWRpdG9yUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVLZXlEb3duID0gdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQodGhpcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBudWxsLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMudGV4dC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICBpZiAoYXV0b1NlbGVjdFRleHQpIHRoaXMudGV4dC5zZWxlY3QoKTtcbiAgICBpZiAoZGlkTW91bnQpIGRpZE1vdW50KCk7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0LnZhbHVlO1xuICB9XG5cbiAgaGFuZGxlS2V5RG93bihlOiBhbnkpIHtcbiAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiAhZS5zaGlmdEtleSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnByb3BzLm9uS2V5RG93bikge1xuICAgICAgdGhpcy5wcm9wcy5vbktleURvd24oZSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFwiXCIsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0YXJlYVwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIHJlZj17KG5vZGUpID0+IHsgdGhpcy50ZXh0ID0gbm9kZTsgfX1cbiAgICAgICAgLy8gdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlEb3dufVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbi8vIFRleHRBcmVhRWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuLy8gICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIFRleHRBcmVhRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4vLyAgIGF1dG9TZWxlY3RUZXh0OiBmYWxzZSxcbi8vICAgb25LZXlEb3duOiB1bmRlZmluZWQsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0QXJlYUVkaXRvcjtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIENMSUNLX1RPX0NFTExfRURJVCxcbiAgQ2VsbEVkaXRQcm92aWRlclByb3BzLFxuICBDZWxsRWRpdFByb3ZpZGVyU3RhdGUsXG4gIERCQ0xJQ0tfVE9fQ0VMTF9FRElULFxufSBmcm9tIFwiLi5cIjtcblxuY29uc3QgQ2VsbEVkaXRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG5leHBvcnQgZGVmYXVsdCAoXG4gIF86IGFueSxcbiAgZGF0YU9wZXJhdG9yPzogYW55LFxuICBpc1JlbW90ZUNlbGxFZGl0PzogYW55LFxuICBoYW5kbGVDZWxsQ2hhbmdlPzogYW55XG4pID0+IHtcbiAgY2xhc3MgQ2VsbEVkaXRQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgICBDZWxsRWRpdFByb3ZpZGVyUHJvcHMsXG4gICAgQ2VsbEVkaXRQcm92aWRlclN0YXRlXG4gID4ge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICAgIHNlbGVjdFJvdzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbQ0xJQ0tfVE9fQ0VMTF9FRElULCBEQkNMSUNLX1RPX0NFTExfRURJVF0pXG4gICAgICAgICAgLmlzUmVxdWlyZWQsXG4gICAgICAgIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgYmx1clRvU2F2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIGJlZm9yZVNhdmVDZWxsOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgYWZ0ZXJTYXZlQ2VsbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIG9uU3RhcnRFZGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgbm9uRWRpdGFibGVSb3dzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IFByb3BUeXBlcy5hbnksXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5kb1VwZGF0ZSA9IHRoaXMuZG9VcGRhdGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuc3RhcnRFZGl0aW5nID0gdGhpcy5zdGFydEVkaXRpbmcuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZXNjYXBlRWRpdGluZyA9IHRoaXMuZXNjYXBlRWRpdGluZy5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5jb21wbGV0ZUVkaXRpbmcgPSB0aGlzLmNvbXBsZXRlRWRpdGluZy5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVDZWxsVXBkYXRlID0gdGhpcy5oYW5kbGVDZWxsVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgICAgaWYgKFxuICAgICAgICBuZXh0UHJvcHMuY2VsbEVkaXQgJiZcbiAgICAgICAgXy5pc0Z1bmN0aW9uKGlzUmVtb3RlQ2VsbEVkaXQpICYmXG4gICAgICAgIGlzUmVtb3RlQ2VsbEVkaXQoKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcHMuY2VsbEVkaXQub3B0aW9ucy5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogbmV4dFByb3BzLmNlbGxFZGl0Lm9wdGlvbnMuZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJpZHg6IHByZXZTdGF0ZS5yaWR4LFxuICAgICAgICAgICAgY2lkeDogcHJldlN0YXRlLmNpZHgsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNlbGxVcGRhdGUocm93OiBhbnksIGNvbHVtbjogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZVdpdGhUeXBlID0gZGF0YU9wZXJhdG9yLnR5cGVDb252ZXJ0KGNvbHVtbi50eXBlLCBuZXdWYWx1ZSk7XG4gICAgICBjb25zdCB7IGNlbGxFZGl0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBiZWZvcmVTYXZlQ2VsbCB9ID0gY2VsbEVkaXQub3B0aW9ucztcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gXy5nZXQocm93LCBjb2x1bW4uZGF0YUZpZWxkKTtcbiAgICAgIGNvbnN0IGJlZm9yZVNhdmVDZWxsRG9uZSA9IChyZXN1bHQgPSB0cnVlKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLmRvVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZVdpdGhUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVzY2FwZUVkaXRpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oYmVmb3JlU2F2ZUNlbGwpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGJlZm9yZVNhdmVDZWxsKFxuICAgICAgICAgIG9sZFZhbHVlLFxuICAgICAgICAgIG5ld1ZhbHVlV2l0aFR5cGUsXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBiZWZvcmVTYXZlQ2VsbERvbmVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSAmJiByZXN1bHQuYXN5bmMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgIH1cblxuICAgIGRvVXBkYXRlKHJvdzogYW55LCBjb2x1bW46IGFueSwgbmV3VmFsdWU6IGFueSkge1xuICAgICAgY29uc3QgeyBrZXlGaWVsZCwgY2VsbEVkaXQsIGRhdGEgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGFmdGVyU2F2ZUNlbGwgfSA9IGNlbGxFZGl0Lm9wdGlvbnM7XG4gICAgICBjb25zdCByb3dJZCA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgaWYgKGlzUmVtb3RlQ2VsbEVkaXQoKSkge1xuICAgICAgICBoYW5kbGVDZWxsQ2hhbmdlKHJvd0lkLCBjb2x1bW4uZGF0YUZpZWxkLCBuZXdWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhT3BlcmF0b3IuZWRpdENlbGwoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICByb3dJZCxcbiAgICAgICAgICBjb2x1bW4uZGF0YUZpZWxkLFxuICAgICAgICAgIG5ld1ZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oYWZ0ZXJTYXZlQ2VsbCkpIHtcbiAgICAgICAgICBhZnRlclNhdmVDZWxsKG9sZFZhbHVlLCBuZXdWYWx1ZSwgcm93LCBjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcGxldGVFZGl0aW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVFZGl0aW5nKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHN0YXJ0RWRpdGluZyhyaWR4OiBhbnksIGNpZHg6IGFueSkge1xuICAgICAgY29uc3QgZWRpdGluZyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICAgIHJpZHgsXG4gICAgICAgICAgY2lkeCxcbiAgICAgICAgfSkpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgeyBzZWxlY3RSb3cgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIXNlbGVjdFJvdyB8fCBzZWxlY3RSb3cuY2xpY2tUb0VkaXQgfHwgIXNlbGVjdFJvdy5jbGlja1RvU2VsZWN0KSB7XG4gICAgICAgIGVkaXRpbmcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlc2NhcGVFZGl0aW5nKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2VsbEVkaXQ6IHtcbiAgICAgICAgICBvcHRpb25zOiB7IG5vbkVkaXRhYmxlUm93cywgZXJyb3JNZXNzYWdlLCAuLi5vcHRpb25zUmVzdCB9LFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICByaWR4OiBwcm9wUmlkeCxcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgY2lkeDogcHJvcENpZHgsXG4gICAgICAgICAgLi4uY2VsbEVkaXRSZXN0XG4gICAgICAgIH0sXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgbmV3Q2VsbEVkaXQgPSB7XG4gICAgICAgIC4uLm9wdGlvbnNSZXN0LFxuICAgICAgICAuLi5jZWxsRWRpdFJlc3QsXG4gICAgICAgIHJpZHg6IHRoaXMuc3RhdGUucmlkeCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUucmlkeCA6IChwcm9wUmlkeCA/PyBudWxsKSxcbiAgICAgICAgY2lkeDogdGhpcy5zdGF0ZS5jaWR4ICE9PSBudWxsID8gdGhpcy5zdGF0ZS5jaWR4IDogKHByb3BDaWR4ID8/IG51bGwpLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLnN0YXRlLm1lc3NhZ2UsXG4gICAgICAgIG5vbkVkaXRhYmxlUm93czogXy5pc0RlZmluZWQobm9uRWRpdGFibGVSb3dzKSA/IG5vbkVkaXRhYmxlUm93cygpIDogW10sXG4gICAgICAgIGF0c3RhcnQ6IHRoaXMuc3RhcnRFZGl0aW5nLFxuICAgICAgICBvbkVzY2FwZTogdGhpcy5lc2NhcGVFZGl0aW5nLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5oYW5kbGVDZWxsVXBkYXRlLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENlbGxFZGl0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyAuLi5uZXdDZWxsRWRpdCB9fT5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9DZWxsRWRpdENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIFByb3ZpZGVyOiBDZWxsRWRpdFByb3ZpZGVyLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IENvbnN1bWVyID0gQ2VsbEVkaXRDb250ZXh0LkNvbnN1bWVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcIm9uVXBkYXRlXCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBDaGVja0JveEVkaXRvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIENoZWNrQm94RWRpdG9yKHByb3BzKSB7XG4gICAgdmFyIF9wcm9wcyRkZWZhdWx0VmFsdWUsIF9wcm9wcyR2YWx1ZTtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENoZWNrQm94RWRpdG9yKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgQ2hlY2tCb3hFZGl0b3IsIFtwcm9wc10pO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY2hlY2tlZDogKChfcHJvcHMkZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlKSAhPT0gbnVsbCAmJiBfcHJvcHMkZGVmYXVsdFZhbHVlICE9PSB2b2lkIDAgPyBfcHJvcHMkZGVmYXVsdFZhbHVlIDogZmFsc2UpLnRvU3RyaW5nKCkgPT09ICgoX3Byb3BzJHZhbHVlID0gcHJvcHMudmFsdWUpICE9PSBudWxsICYmIF9wcm9wcyR2YWx1ZSAhPT0gdm9pZCAwID8gX3Byb3BzJHZhbHVlIDogXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpWzBdXG4gICAgfTtcbiAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhDaGVja0JveEVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhDaGVja0JveEVkaXRvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgZGlkTW91bnQgPSB0aGlzLnByb3BzLmRpZE1vdW50O1xuICAgICAgdGhpcy5jaGVja2JveC5mb2N1cygpO1xuICAgICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyR2YWx1ZTtcbiAgICAgIHZhciBfc3BsaXQgPSAoKF90aGlzJHByb3BzJHZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZSkgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkdmFsdWUgIT09IHZvaWQgMCA/IF90aGlzJHByb3BzJHZhbHVlIDogXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpLFxuICAgICAgICBfc3BsaXQyID0gX3NsaWNlZFRvQXJyYXkoX3NwbGl0LCAyKSxcbiAgICAgICAgcG9zaXRpdmUgPSBfc3BsaXQyWzBdLFxuICAgICAgICBuZWdhdGl2ZSA9IF9zcGxpdDJbMV07XG4gICAgICByZXR1cm4gdGhpcy5jaGVja2JveC5jaGVja2VkID8gcG9zaXRpdmUgOiBuZWdhdGl2ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShlKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkgdGhpcy5wcm9wcy5vbkNoYW5nZShlKTtcbiAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoZWNrZWQ6IHRhcmdldC5jaGVja2VkXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wcyRjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzJGNsYXNzTmFtZSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzJGNsYXNzTmFtZSxcbiAgICAgICAgb25VcGRhdGUgPSBfdGhpcyRwcm9wcy5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShcImVkaXRvciBlZGl0LWNoc2Vja2JveCBjaGVja2JveFwiLCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgX3RoaXMyLmNoZWNrYm94ID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzXG4gICAgICB9LCByZXN0KSwge30sIHtcbiAgICAgICAgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2VcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBDaGVja0JveEVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLFxuLy8gICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuLy8gICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG4vLyBDaGVja0JveEVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgdmFsdWU6IFwib246b2ZmXCIsXG4vLyAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4vLyAgIG9uQ2hhbmdlOiB1bmRlZmluZWQsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDaGVja0JveEVkaXRvcjsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5UeXBlID0gZXhwb3J0cy5FRElUVFlQRSA9IGV4cG9ydHMuREJDTElDS19UT19DRUxMX0VESVQgPSBleHBvcnRzLkNMSUNLX1RPX0NFTExfRURJVCA9IGV4cG9ydHMuREVMQVlfRk9SX0RCQ0xJQ0sgPSBleHBvcnRzLlRJTUVfVE9fQ0xPU0VfTUVTU0FHRSA9IHZvaWQgMDtcbnZhciBjb250ZXh0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL2NvbnRleHRcIikpO1xudmFyIGVkaXRpbmdfY2VsbF9jb25zdW1lcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9lZGl0aW5nLWNlbGwtY29uc3VtZXJcIikpO1xudmFyIHJvd19jb25zdW1lcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9yb3ctY29uc3VtZXJcIikpO1xuZXhwb3J0cy5USU1FX1RPX0NMT1NFX01FU1NBR0UgPSAzMDAwO1xuZXhwb3J0cy5ERUxBWV9GT1JfREJDTElDSyA9IDIwMDtcbmV4cG9ydHMuQ0xJQ0tfVE9fQ0VMTF9FRElUID0gXCJjbGlja1wiO1xuZXhwb3J0cy5EQkNMSUNLX1RPX0NFTExfRURJVCA9IFwiZGJjbGlja1wiO1xuZXhwb3J0cy5FRElUVFlQRSA9IHtcbiAgVEVYVDogXCJ0ZXh0XCIsXG4gIFNFTEVDVDogXCJzZWxlY3RcIixcbiAgVEVYVEFSRUE6IFwidGV4dGFyZWFcIixcbiAgQ0hFQ0tCT1g6IFwiY2hlY2tib3hcIixcbiAgREFURTogXCJkYXRlXCJcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZUNvbnRleHQ6IGNvbnRleHRfMVtcImRlZmF1bHRcIl0sXG4gICAgY3JlYXRlRWRpdGluZ0NlbGw6IGVkaXRpbmdfY2VsbF9jb25zdW1lcl8xW1wiZGVmYXVsdFwiXSxcbiAgICB3aXRoUm93TGV2ZWxDZWxsRWRpdDogcm93X2NvbnN1bWVyXzFbXCJkZWZhdWx0XCJdLFxuICAgIERCQ0xJQ0tfVE9fQ0VMTF9FRElUOiBleHBvcnRzLkRCQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICAgIERFTEFZX0ZPUl9EQkNMSUNLOiBleHBvcnRzLkRFTEFZX0ZPUl9EQkNMSUNLLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfTtcbn07XG5leHBvcnRzLlR5cGUgPSBleHBvcnRzLkVESVRUWVBFOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLlwiKTtcbnZhciBjb250ZXh0XzEgPSByZXF1aXJlKFwiLi9jb250ZXh0XCIpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoQ29tcG9uZW50LCBzZWxlY3RSb3dFbmFibGVkKSB7XG4gIHZhciByZW5kZXJXaXRoQ2VsbEVkaXQgPSBmdW5jdGlvbiByZW5kZXJXaXRoQ2VsbEVkaXQocHJvcHMsIGNlbGxFZGl0KSB7XG4gICAgdmFyIGtleSA9IHByb3BzLnZhbHVlO1xuICAgIHZhciBlZGl0YWJsZVJvdyA9ICEoY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmxlbmd0aCA+IDAgJiYgY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmluZGV4T2Yoa2V5KSA+IC0xKTtcbiAgICB2YXIgYXR0cnMgPSB7fTtcbiAgICBpZiAoc2VsZWN0Um93RW5hYmxlZCAmJiBjZWxsRWRpdC5tb2RlID09PSBfXzEuREJDTElDS19UT19DRUxMX0VESVQpIHtcbiAgICAgIGF0dHJzLkRFTEFZX0ZPUl9EQkNMSUNLID0gX18xLkRFTEFZX0ZPUl9EQkNMSUNLO1xuICAgIH1cbiAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIGF0dHJzKSwge30sIHtcbiAgICAgIGVkaXRpbmdSb3dJZHg6IGNlbGxFZGl0LnJpZHgsXG4gICAgICBlZGl0aW5nQ29sSWR4OiBjZWxsRWRpdC5jaWR4LFxuICAgICAgaXNFZGl0YWJsZTogZWRpdGFibGVSb3csXG4gICAgICBhdHN0YXJ0OiBjZWxsRWRpdC5hdHN0YXJ0LFxuICAgICAgY2xpY2tUb0VkaXQ6IGNlbGxFZGl0Lm1vZGUgPT09IF9fMS5DTElDS19UT19DRUxMX0VESVQsXG4gICAgICBkYmNsaWNrVG9FZGl0OiBjZWxsRWRpdC5tb2RlID09PSBfXzEuREJDTElDS19UT19DRUxMX0VESVRcbiAgICB9KSk7XG4gIH07XG4gIGZ1bmN0aW9uIHdpdGhDb25zdW1lcihwcm9wcykge1xuICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGNvbnRleHRfMS5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGNlbGxFZGl0KSB7XG4gICAgICByZXR1cm4gcmVuZGVyV2l0aENlbGxFZGl0KHByb3BzLCBjZWxsRWRpdCk7XG4gICAgfSk7XG4gIH1cbiAgd2l0aENvbnN1bWVyLmRpc3BsYXlOYW1lID0gXCJXaXRoQ2VsbEVkaXRpbmdSb3dDb25zdW1lclwiO1xuICByZXR1cm4gd2l0aENvbnN1bWVyO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRWYWx1ZVwiLCBcImRpZE1vdW50XCIsIFwiY2xhc3NOYW1lXCIsIFwib25VcGRhdGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIERhdGVFZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBEYXRlRWRpdG9yKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEYXRlRWRpdG9yKTtcbiAgICByZXR1cm4gX2NhbGxTdXBlcih0aGlzLCBEYXRlRWRpdG9yLCBhcmd1bWVudHMpO1xuICB9XG4gIF9pbmhlcml0cyhEYXRlRWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKERhdGVFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQ7XG4gICAgICB0aGlzLmRhdGUudmFsdWVBc0RhdGUgPSBuZXcgRGF0ZShkZWZhdWx0VmFsdWUpO1xuICAgICAgdGhpcy5kYXRlLmZvY3VzKCk7XG4gICAgICBpZiAoZGlkTW91bnQpIHtcbiAgICAgICAgZGlkTW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMyLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkY2xhc3NOYW0sXG4gICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LWRhdGVcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgX3RoaXMuZGF0ZSA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzXG4gICAgICB9LCByZXN0KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gRGF0ZUVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMub2JqZWN0XG4vLyAgIF0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIERhdGVFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBEYXRlRWRpdG9yOyIsbnVsbCwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgRGF0ZUVkaXRvclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG4gIGRpZE1vdW50PzogKCkgPT4gdm9pZDtcbiAgb25VcGRhdGU/OiBhbnk7XG59XG5cbmNsYXNzIERhdGVFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQ8RGF0ZUVkaXRvclByb3BzPiB7XG4gIGRhdGU6IGFueTtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBkZWZhdWx0VmFsdWUgPSBcIlwiLCBkaWRNb3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLmRhdGUudmFsdWVBc0RhdGUgPSBuZXcgRGF0ZShkZWZhdWx0VmFsdWUpO1xuICAgIHRoaXMuZGF0ZS5mb2N1cygpO1xuICAgIGlmIChkaWRNb3VudCkge1xuICAgICAgZGlkTW91bnQoKTtcbiAgICB9XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlLnZhbHVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFwiXCIsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtZGF0ZVwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIHJlZj17KG5vZGUpID0+IHsgdGhpcy5kYXRlID0gbm9kZTsgfX1cbiAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICBjbGFzc05hbWU9e2VkaXRvckNsYXNzfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBEYXRlRWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5vYmplY3Rcbi8vICAgXSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuLy8gRGF0ZUVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogJycsXG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIGRpZE1vdW50OiB1bmRlZmluZWRcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVFZGl0b3I7XG4iLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBUZXh0RWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbiAgYXV0b1NlbGVjdFRleHQ/OiBib29sZWFuO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uVXBkYXRlOiAocm93OiBvYmplY3QsIGNvbHVtbjogb2JqZWN0LCB2YWx1ZTogYW55KSA9PiB2b2lkO1xufVxuXG5jbGFzcyBUZXh0RWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PFRleHRFZGl0b3JQcm9wcz4ge1xuICB0ZXh0OiBhbnk7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlID0gXCJcIiwgZGlkTW91bnQsIGF1dG9TZWxlY3RUZXh0ID0gZmFsc2UgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy50ZXh0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMudGV4dC5mb2N1cygpO1xuICAgIGlmIChhdXRvU2VsZWN0VGV4dCkgdGhpcy50ZXh0LnNlbGVjdCgpO1xuICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQudmFsdWU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gXCJcIixcbiAgICAgIGRpZE1vdW50LFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIGF1dG9TZWxlY3RUZXh0ID0gZmFsc2UsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dFwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIHJlZj17KG5vZGUpID0+IHsgdGhpcy50ZXh0ID0gbm9kZTsgfX1cbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzc05hbWU9e2VkaXRvckNsYXNzfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBUZXh0RWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5vYmplY3Rcbi8vICAgXSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICBQcm9wVHlwZXMubnVtYmVyXG4vLyAgIF0pLFxuLy8gICBhdXRvU2VsZWN0VGV4dDogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRpZE1vdW50OiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcblxuLy8gVGV4dEVkaXRvci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNsYXNzTmFtZTogbnVsbCxcbi8vICAgZGVmYXVsdFZhbHVlOiAnJyxcbi8vICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0RWRpdG9yO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJub25FZGl0YWJsZVJvd3NcIiwgXCJlcnJvck1lc3NhZ2VcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJvcHRpb25zXCIsIFwicmlkeFwiLCBcImNpZHhcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Db25zdW1lciA9IHZvaWQgMDtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbnZhciBwcm9wX3R5cGVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfXzEgPSByZXF1aXJlKFwiLi5cIik7XG52YXIgQ2VsbEVkaXRDb250ZXh0ID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlQ29udGV4dChudWxsKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKF8sIGRhdGFPcGVyYXRvciwgaXNSZW1vdGVDZWxsRWRpdCwgaGFuZGxlQ2VsbENoYW5nZSkge1xuICB2YXIgQ2VsbEVkaXRQcm92aWRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkZGVmYXVsdCRDb21wKSB7XG4gICAgZnVuY3Rpb24gQ2VsbEVkaXRQcm92aWRlcihwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENlbGxFZGl0UHJvdmlkZXIpO1xuICAgICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIENlbGxFZGl0UHJvdmlkZXIsIFtwcm9wc10pO1xuICAgICAgX3RoaXMuZG9VcGRhdGUgPSBfdGhpcy5kb1VwZGF0ZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLnN0YXJ0RWRpdGluZyA9IF90aGlzLnN0YXJ0RWRpdGluZy5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmVzY2FwZUVkaXRpbmcgPSBfdGhpcy5lc2NhcGVFZGl0aW5nLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuY29tcGxldGVFZGl0aW5nID0gX3RoaXMuY29tcGxldGVFZGl0aW5nLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuaGFuZGxlQ2VsbFVwZGF0ZSA9IF90aGlzLmhhbmRsZUNlbGxVcGRhdGUuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgcmlkeDogbnVsbCxcbiAgICAgICAgY2lkeDogbnVsbCxcbiAgICAgICAgbWVzc2FnZTogbnVsbFxuICAgICAgfTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2luaGVyaXRzKENlbGxFZGl0UHJvdmlkZXIsIF9yZWFjdF8xJGRlZmF1bHQkQ29tcCk7XG4gICAgcmV0dXJuIF9jcmVhdGVDbGFzcyhDZWxsRWRpdFByb3ZpZGVyLCBbe1xuICAgICAga2V5OiBcImhhbmRsZUNlbGxVcGRhdGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDZWxsVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgdmFyIG5ld1ZhbHVlV2l0aFR5cGUgPSBkYXRhT3BlcmF0b3IudHlwZUNvbnZlcnQoY29sdW1uLnR5cGUsIG5ld1ZhbHVlKTtcbiAgICAgICAgdmFyIGNlbGxFZGl0ID0gdGhpcy5wcm9wcy5jZWxsRWRpdDtcbiAgICAgICAgdmFyIGJlZm9yZVNhdmVDZWxsID0gY2VsbEVkaXQub3B0aW9ucy5iZWZvcmVTYXZlQ2VsbDtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gXy5nZXQocm93LCBjb2x1bW4uZGF0YUZpZWxkKTtcbiAgICAgICAgdmFyIGJlZm9yZVNhdmVDZWxsRG9uZSA9IGZ1bmN0aW9uIGJlZm9yZVNhdmVDZWxsRG9uZSgpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIF90aGlzMi5kb1VwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWVXaXRoVHlwZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzMi5lc2NhcGVFZGl0aW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGJlZm9yZVNhdmVDZWxsKSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBiZWZvcmVTYXZlQ2VsbChvbGRWYWx1ZSwgbmV3VmFsdWVXaXRoVHlwZSwgcm93LCBjb2x1bW4sIGJlZm9yZVNhdmVDZWxsRG9uZSk7XG4gICAgICAgICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSAmJiByZXN1bHQuYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb1VwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWVXaXRoVHlwZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRvVXBkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAga2V5RmllbGQgPSBfdGhpcyRwcm9wcy5rZXlGaWVsZCxcbiAgICAgICAgICBjZWxsRWRpdCA9IF90aGlzJHByb3BzLmNlbGxFZGl0LFxuICAgICAgICAgIGRhdGEgPSBfdGhpcyRwcm9wcy5kYXRhO1xuICAgICAgICB2YXIgYWZ0ZXJTYXZlQ2VsbCA9IGNlbGxFZGl0Lm9wdGlvbnMuYWZ0ZXJTYXZlQ2VsbDtcbiAgICAgICAgdmFyIHJvd0lkID0gXy5nZXQocm93LCBrZXlGaWVsZCk7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICAgIGlmIChpc1JlbW90ZUNlbGxFZGl0KCkpIHtcbiAgICAgICAgICBoYW5kbGVDZWxsQ2hhbmdlKHJvd0lkLCBjb2x1bW4uZGF0YUZpZWxkLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YU9wZXJhdG9yLmVkaXRDZWxsKGRhdGEsIGtleUZpZWxkLCByb3dJZCwgY29sdW1uLmRhdGFGaWVsZCwgbmV3VmFsdWUpO1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24oYWZ0ZXJTYXZlQ2VsbCkpIHtcbiAgICAgICAgICAgIGFmdGVyU2F2ZUNlbGwob2xkVmFsdWUsIG5ld1ZhbHVlLCByb3csIGNvbHVtbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY29tcGxldGVFZGl0aW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY29tcGxldGVFZGl0aW5nXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcGxldGVFZGl0aW5nKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmlkeDogbnVsbCxcbiAgICAgICAgICAgIGNpZHg6IG51bGwsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInN0YXJ0RWRpdGluZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0RWRpdGluZyhyaWR4LCBjaWR4KSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgICB2YXIgZWRpdGluZyA9IGZ1bmN0aW9uIGVkaXRpbmcoKSB7XG4gICAgICAgICAgX3RoaXMzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJpZHg6IHJpZHgsXG4gICAgICAgICAgICAgIGNpZHg6IGNpZHhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzZWxlY3RSb3cgPSB0aGlzLnByb3BzLnNlbGVjdFJvdztcbiAgICAgICAgaWYgKCFzZWxlY3RSb3cgfHwgc2VsZWN0Um93LmNsaWNrVG9FZGl0IHx8ICFzZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCkge1xuICAgICAgICAgIGVkaXRpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJlc2NhcGVFZGl0aW5nXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZXNjYXBlRWRpdGluZygpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgICAgICBjaWR4OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJGNlbGxFZGl0ID0gdGhpcy5wcm9wcy5jZWxsRWRpdCxcbiAgICAgICAgICBfdGhpcyRwcm9wcyRjZWxsRWRpdCQgPSBfdGhpcyRwcm9wcyRjZWxsRWRpdC5vcHRpb25zLFxuICAgICAgICAgIG5vbkVkaXRhYmxlUm93cyA9IF90aGlzJHByb3BzJGNlbGxFZGl0JC5ub25FZGl0YWJsZVJvd3MsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQkLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICBvcHRpb25zUmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcyRjZWxsRWRpdCQsIF9leGNsdWRlZCksXG4gICAgICAgICAgcHJvcFJpZHggPSBfdGhpcyRwcm9wcyRjZWxsRWRpdC5yaWR4LFxuICAgICAgICAgIHByb3BDaWR4ID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQuY2lkeCxcbiAgICAgICAgICBjZWxsRWRpdFJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMkY2VsbEVkaXQsIF9leGNsdWRlZDIpO1xuICAgICAgICB2YXIgbmV3Q2VsbEVkaXQgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uc1Jlc3QpLCBjZWxsRWRpdFJlc3QpLCB7fSwge1xuICAgICAgICAgIHJpZHg6IHRoaXMuc3RhdGUucmlkeCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUucmlkeCA6IHByb3BSaWR4ICE9PSBudWxsICYmIHByb3BSaWR4ICE9PSB2b2lkIDAgPyBwcm9wUmlkeCA6IG51bGwsXG4gICAgICAgICAgY2lkeDogdGhpcy5zdGF0ZS5jaWR4ICE9PSBudWxsID8gdGhpcy5zdGF0ZS5jaWR4IDogcHJvcENpZHggIT09IG51bGwgJiYgcHJvcENpZHggIT09IHZvaWQgMCA/IHByb3BDaWR4IDogbnVsbCxcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0YXRlLm1lc3NhZ2UsXG4gICAgICAgICAgbm9uRWRpdGFibGVSb3dzOiBfLmlzRGVmaW5lZChub25FZGl0YWJsZVJvd3MpID8gbm9uRWRpdGFibGVSb3dzKCkgOiBbXSxcbiAgICAgICAgICBhdHN0YXJ0OiB0aGlzLnN0YXJ0RWRpdGluZyxcbiAgICAgICAgICBvbkVzY2FwZTogdGhpcy5lc2NhcGVFZGl0aW5nLFxuICAgICAgICAgIG9uVXBkYXRlOiB0aGlzLmhhbmRsZUNlbGxVcGRhdGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KENlbGxFZGl0Q29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgIHZhbHVlOiBfb2JqZWN0U3ByZWFkKHt9LCBuZXdDZWxsRWRpdClcbiAgICAgICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfV0sIFt7XG4gICAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcHMuY2VsbEVkaXQgJiYgXy5pc0Z1bmN0aW9uKGlzUmVtb3RlQ2VsbEVkaXQpICYmIGlzUmVtb3RlQ2VsbEVkaXQoKSkge1xuICAgICAgICAgIGlmIChuZXh0UHJvcHMuY2VsbEVkaXQub3B0aW9ucy5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG5leHRQcm9wcy5jZWxsRWRpdC5vcHRpb25zLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcmlkeDogcHJldlN0YXRlLnJpZHgsXG4gICAgICAgICAgICAgIGNpZHg6IHByZXZTdGF0ZS5jaWR4LFxuICAgICAgICAgICAgICBtZXNzYWdlOiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7fSwgcHJldlN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1dKTtcbiAgfShyZWFjdF8xW1wiZGVmYXVsdFwiXS5Db21wb25lbnQpO1xuICBDZWxsRWRpdFByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgICBkYXRhOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgc2VsZWN0Um93OiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLm9iamVjdCxcbiAgICBvcHRpb25zOiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLnNoYXBlKHtcbiAgICAgIG1vZGU6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub25lT2YoW19fMS5DTElDS19UT19DRUxMX0VESVQsIF9fMS5EQkNMSUNLX1RPX0NFTExfRURJVF0pLmlzUmVxdWlyZWQsXG4gICAgICBvbkVycm9yTWVzc2FnZURpc2FwcGVhcjogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5mdW5jLFxuICAgICAgYmx1clRvU2F2ZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5ib29sLFxuICAgICAgYmVmb3JlU2F2ZUNlbGw6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYyxcbiAgICAgIGFmdGVyU2F2ZUNlbGw6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYyxcbiAgICAgIG9uU3RhcnRFZGl0OiBwcm9wX3R5cGVzXzFbXCJkZWZhdWx0XCJdLmZ1bmMsXG4gICAgICBub25FZGl0YWJsZVJvd3M6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uZnVuYyxcbiAgICAgIHRpbWVUb0Nsb3NlTWVzc2FnZTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5udW1iZXIsXG4gICAgICBlcnJvck1lc3NhZ2U6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uYW55XG4gICAgfSlcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogQ2VsbEVkaXRQcm92aWRlclxuICB9O1xufTtcbmV4cG9ydHMuQ29uc3VtZXIgPSBDZWxsRWRpdENvbnRleHQuQ29uc3VtZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImdldE9wdGlvbnNcIiwgXCJjbGFzc05hbWVcIiwgXCJvblVwZGF0ZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgY2xhc3NuYW1lc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgRHJvcERvd25FZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBEcm9wRG93bkVkaXRvcihwcm9wcykge1xuICAgIHZhciBfcHJvcHMkb3B0aW9ucztcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERyb3BEb3duRWRpdG9yKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRHJvcERvd25FZGl0b3IsIFtwcm9wc10pO1xuICAgIHZhciBvcHRpb25zID0gKF9wcm9wcyRvcHRpb25zID0gcHJvcHMub3B0aW9ucykgIT09IG51bGwgJiYgX3Byb3BzJG9wdGlvbnMgIT09IHZvaWQgMCA/IF9wcm9wcyRvcHRpb25zIDogW107XG4gICAgaWYgKHByb3BzLmdldE9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBwcm9wcy5nZXRPcHRpb25zKF90aGlzLnNldE9wdGlvbnMuYmluZChfdGhpcyksIHtcbiAgICAgICAgcm93OiBwcm9wcy5yb3csXG4gICAgICAgIGNvbHVtbjogcHJvcHMuY29sdW1uXG4gICAgICB9KSB8fCBbXTtcbiAgICB9XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKERyb3BEb3duRWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKERyb3BEb3duRWRpdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGRlZmF1bHRWYSA9IF90aGlzJHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMkZGVmYXVsdFZhID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMkZGVmYXVsdFZhLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzLmRpZE1vdW50O1xuICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB0aGlzLnNlbGVjdC5mb2N1cygpO1xuICAgICAgaWYgKGRpZE1vdW50KSB7XG4gICAgICAgIGRpZE1vdW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldE9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyJGRlZmF1bHRWID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzMi5kaWRNb3VudCxcbiAgICAgICAgZ2V0T3B0aW9ucyA9IF90aGlzJHByb3BzMi5nZXRPcHRpb25zLFxuICAgICAgICBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkY2xhc3NOYW0sXG4gICAgICAgIG9uVXBkYXRlID0gX3RoaXMkcHJvcHMyLm9uVXBkYXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlZGl0b3JDbGFzcyA9ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShjbGFzc05hbWUsIFwiZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXNlbGVjdFwiKTtcbiAgICAgIHZhciBhdHRyID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0KSwge30sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGF0dHIpLCB7fSwge1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgX3RoaXMyLnNlbGVjdCA9IG5vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlXG4gICAgICB9KSwgdGhpcy5zdGF0ZS5vcHRpb25zLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgICAgICAgIHZhbHVlID0gX3JlZi52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogdmFsdWUsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0sIGxhYmVsKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBEcm9wRG93bkVkaXRvci5wcm9wVHlwZXMgPSB7XG4vLyAgIHJvdzogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbi8vICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICAgIFByb3BUeXBlcy5udW1iZXJcbi8vICAgXSksXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG9wdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuLy8gICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55XG4vLyAgICAgfSkpXG4vLyAgIF0pLFxuLy8gICBkaWRNb3VudDogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGdldE9wdGlvbnM6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuLy8gRHJvcERvd25FZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBzdHlsZToge30sXG4vLyAgIG9wdGlvbnM6IFtdLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gICBnZXRPcHRpb25zOiB1bmRlZmluZWRcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IERyb3BEb3duRWRpdG9yOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50LCBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIENoZWNrQm94RWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBkZWZhdWx0VmFsdWU/OiBhbnk7XG4gIG9uQ2hhbmdlPzogKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uVXBkYXRlPzogYW55O1xufVxuXG5pbnRlcmZhY2UgQ2hlY2tCb3hFZGl0b3JTdGF0ZSB7XG4gIGNoZWNrZWQ6IGJvb2xlYW47XG59XG5cbmNsYXNzIENoZWNrQm94RWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PFxuICBDaGVja0JveEVkaXRvclByb3BzLFxuICBDaGVja0JveEVkaXRvclN0YXRlXG4+IHtcbiAgY2hlY2tib3g6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2hlY2tCb3hFZGl0b3JQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY2hlY2tlZDpcbiAgICAgICAgKHByb3BzLmRlZmF1bHRWYWx1ZSA/PyBmYWxzZSkudG9TdHJpbmcoKSA9PT1cbiAgICAgICAgKHByb3BzLnZhbHVlID8/IFwib246b2ZmXCIpLnNwbGl0KFwiOlwiKVswXSxcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZGlkTW91bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5jaGVja2JveC5mb2N1cygpO1xuICAgIGlmIChkaWRNb3VudCkgZGlkTW91bnQoKTtcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIGNvbnN0IFtwb3NpdGl2ZSwgbmVnYXRpdmVdID0gKHRoaXMucHJvcHMudmFsdWUgPz8gXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpO1xuICAgIHJldHVybiB0aGlzLmNoZWNrYm94LmNoZWNrZWQgPyBwb3NpdGl2ZSA6IG5lZ2F0aXZlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlKGU6IGFueSkge1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKGUpO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBlO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgY2hlY2tlZDogdGFyZ2V0LmNoZWNrZWQgfSkpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IGZhbHNlLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgb25VcGRhdGUsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjcyhcImVkaXRvciBlZGl0LWNoc2Vja2JveCBjaGVja2JveFwiLCBjbGFzc05hbWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgcmVmPXsobm9kZSkgPT4geyB0aGlzLmNoZWNrYm94ID0gbm9kZTsgfX1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGNoZWNrZWQ9e3RoaXMuc3RhdGUuY2hlY2tlZH1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbi8vIENoZWNrQm94RWRpdG9yLnByb3BUeXBlcyA9IHtcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSksXG4vLyAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4vLyAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbi8vICAgZGlkTW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcblxuLy8gQ2hlY2tCb3hFZGl0b3IuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIHZhbHVlOiBcIm9uOm9mZlwiLFxuLy8gICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuLy8gICBvbkNoYW5nZTogdW5kZWZpbmVkLFxuLy8gICBkaWRNb3VudDogdW5kZWZpbmVkLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tCb3hFZGl0b3I7XG4iLCIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1Nik7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwicmVxdWlyZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXyIsIkNvbXBvbmVudCIsInNlbGVjdFJvd0VuYWJsZWQiLCJ3aXRoQ29uc3VtZXIiLCJwcm9wcyIsIkNvbnN1bWVyIiwiY2VsbEVkaXQiLCJrZXkiLCJ2YWx1ZSIsImVkaXRhYmxlUm93Iiwibm9uRWRpdGFibGVSb3dzIiwibGVuZ3RoIiwiaW5kZXhPZiIsImF0dHJzIiwibW9kZSIsIkRCQ0xJQ0tfVE9fQ0VMTF9FRElUIiwiREVMQVlfRk9SX0RCQ0xJQ0siLCJlZGl0aW5nUm93SWR4IiwicmlkeCIsImVkaXRpbmdDb2xJZHgiLCJjaWR4IiwiaXNFZGl0YWJsZSIsImF0c3RhcnQiLCJjbGlja1RvRWRpdCIsIkNMSUNLX1RPX0NFTExfRURJVCIsImRiY2xpY2tUb0VkaXQiLCJyZW5kZXJXaXRoQ2VsbEVkaXQiLCJkaXNwbGF5TmFtZSIsIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsIl9fZXNNb2R1bGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3BfdHlwZXNfMSIsInJlYWN0XzEiLCJFZGl0b3JJbmRpY2F0b3IiLCJfcmVmIiwiaW52YWxpZE1lc3NhZ2UiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicm9sZSIsInByb3BUeXBlcyIsInN0cmluZyIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9leGNsdWRlZCIsIm93bktleXMiLCJlIiwiciIsInQiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfZGVmaW5lUHJvcGVydGllcyIsImkiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfdG9QcmltaXRpdmUiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiUmVmZXJlbmNlRXJyb3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsImJpbmQiLCJfX3Byb3RvX18iLCJfc2V0UHJvdG90eXBlT2YiLCJfb3duS2V5cyIsIl9fY3JlYXRlQmluZGluZyIsImNyZWF0ZSIsIm0iLCJrIiwiazIiLCJ1bmRlZmluZWQiLCJkZXNjIiwiZ2V0IiwiX19zZXRNb2R1bGVEZWZhdWx0IiwidiIsIl9faW1wb3J0U3RhciIsImdldE93blByb3BlcnR5TmFtZXMiLCJhciIsImhhc093blByb3BlcnR5IiwicmVzdWx0IiwiY2xhc3NuYW1lc18xIiwiVGV4dEVkaXRvciIsIl9yZWFjdF8xJENvbXBvbmVudCIsImEiLCJuIiwiX2NsYXNzQ2FsbENoZWNrIiwidGhpcyIsImFyZ3VtZW50cyIsIl9pbmhlcml0cyIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMkZGVmYXVsdFZhIiwiZGVmYXVsdFZhbHVlIiwiZGlkTW91bnQiLCJfdGhpcyRwcm9wcyRhdXRvU2VsZWMiLCJhdXRvU2VsZWN0VGV4dCIsInRleHQiLCJmb2N1cyIsInNlbGVjdCIsIl90aGlzIiwiX3RoaXMkcHJvcHMyIiwiX3RoaXMkcHJvcHMyJGNsYXNzTmFtIiwicmVzdCIsIm9uVXBkYXRlIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImVkaXRvckNsYXNzIiwiZm9yRWFjaCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX29iamVjdFNwcmVhZCIsInJlZiIsIm5vZGUiLCJ0eXBlIiwiRHJvcERvd25FZGl0b3IiLCJzdXBlciIsIm9wdGlvbnMiLCJnZXRPcHRpb25zIiwic2V0T3B0aW9ucyIsInJvdyIsImNvbHVtbiIsInN0YXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJzZXRTdGF0ZSIsImdldFZhbHVlIiwicmVuZGVyIiwiYXR0ciIsIm1hcCIsImxhYmVsIiwiVGV4dEFyZWFFZGl0b3IiLCJoYW5kbGVLZXlEb3duIiwia2V5Q29kZSIsInNoaWZ0S2V5Iiwib25LZXlEb3duIiwiX3RoaXMyIiwiXyIsIm9uU3RhcnRFZGl0IiwiaW5kaWNhdG9yVGltZXIiLCJjbGVhclRpbWVyIiwiaGFuZGxlQmx1ciIsImhhbmRsZUNsaWNrIiwiYmVmb3JlQ29tcGxldGUiLCJhc3luY2JlZm9yZUNvbXBldGUiLCJkaXNwbGF5RXJyb3JNZXNzYWdlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJtZXNzYWdlIiwiaXNEZWZpbmVkIiwiY3JlYXRlVGltZXIiLCJjbGVhclRpbWVvdXQiLCJ0aW1lVG9DbG9zZU1lc3NhZ2UiLCJvbkVycm9yTWVzc2FnZURpc2FwcGVhciIsInNsZWVwIiwiaXNGdW5jdGlvbiIsIm5ld1ZhbHVlIiwidmFsaWQiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZUZvcm0iLCJpc09iamVjdCIsImFzeW5jIiwib25Fc2NhcGUiLCJibHVyVG9TYXZlIiwiZWRpdG9yIiwidGFyZ2V0IiwidGFnTmFtZSIsInN0b3BQcm9wYWdhdGlvbiIsInN0eWxlIiwicm93SW5kZXgiLCJjb2x1bW5JbmRleCIsImRhdGFGaWVsZCIsImhhc0Vycm9yIiwiY3VzdG9tRWRpdG9yQ2xhc3MiLCJlZGl0b3JDbGFzc2VzIiwiZWRpdG9yU3R5bGUiLCJlZGl0b3JQcm9wcyIsImFuaW1hdGVkIiwic2hha2UiLCJvbkJsdXIiLCJpc0RlZmF1bHRFZGl0b3JEZWZpbmVkIiwiZWRpdG9yUmVuZGVyZXIiLCJFRElUVFlQRSIsIlNFTEVDVCIsIlRFWFRBUkVBIiwiQ0hFQ0tCT1giLCJEQVRFIiwib25DbGljayIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJudW1iZXIiLCJmdW5jIiwiYm9vbCIsImRlZmF1bHRQcm9wcyIsIlRJTUVfVE9fQ0xPU0VfTUVTU0FHRSIsIl9fMSIsImNoZWNrYm94X2VkaXRvcl8xIiwiZGF0ZV9lZGl0b3JfMSIsImRyb3Bkb3duX2VkaXRvcl8xIiwiZWRpdG9yX2luZGljYXRvcl8xIiwidGV4dF9lZGl0b3JfMSIsInRleHRhcmVhX2VkaXRvcl8xIiwiX2EiLCJFZGl0aW5nQ2VsbCIsIl90aGlzMyIsIl90aGlzMyRwcm9wcyIsIl90aGlzJHByb3BzMyIsIl9jb2x1bW4kZWRpdG9yIiwiX2NvbHVtbiRlZGl0b3IyIiwiX2NvbHVtbiRlZGl0b3IzIiwiX2NvbHVtbiRlZGl0b3I0IiwiX3RoaXM0IiwiX3RoaXMkcHJvcHM0IiwiY29udGV4dF8xIiwiZWRpdGluZ19jZWxsXzEiLCJjb250ZW50IiwiZWRpdENlbGxzdHlsZSIsImVkaXRDZWxsU3R5bGUiLCJlZGl0Q2VsbGNsYXNzZXMiLCJlZGl0Q2VsbENsYXNzZXMiLCJyZW5kZXJXaXRoRWRpdGluZ0NlbGwiLCJDZWxsRWRpdENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZGF0YU9wZXJhdG9yIiwiaXNSZW1vdGVDZWxsRWRpdCIsImhhbmRsZUNlbGxDaGFuZ2UiLCJDZWxsRWRpdFByb3ZpZGVyIiwiZG9VcGRhdGUiLCJzdGFydEVkaXRpbmciLCJlc2NhcGVFZGl0aW5nIiwiY29tcGxldGVFZGl0aW5nIiwiaGFuZGxlQ2VsbFVwZGF0ZSIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIm5leHRQcm9wcyIsInByZXZTdGF0ZSIsImVycm9yTWVzc2FnZSIsIm5ld1ZhbHVlV2l0aFR5cGUiLCJ0eXBlQ29udmVydCIsImJlZm9yZVNhdmVDZWxsIiwib2xkVmFsdWUiLCJiZWZvcmVTYXZlQ2VsbERvbmUiLCJrZXlGaWVsZCIsImRhdGEiLCJhZnRlclNhdmVDZWxsIiwicm93SWQiLCJlZGl0Q2VsbCIsImVkaXRpbmciLCJzZWxlY3RSb3ciLCJjbGlja1RvU2VsZWN0Iiwib3B0aW9uc1Jlc3QiLCJwcm9wUmlkeCIsInByb3BDaWR4IiwiY2VsbEVkaXRSZXN0IiwibmV3Q2VsbEVkaXQiLCJQcm92aWRlciIsImNoaWxkcmVuIiwiYXJyYXkiLCJzaGFwZSIsIm9uZU9mIiwiYW55IiwiX3NsaWNlZFRvQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJsIiwidSIsImYiLCJuZXh0IiwiZG9uZSIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJDaGVja0JveEVkaXRvciIsIl9wcm9wcyRkZWZhdWx0VmFsdWUiLCJfcHJvcHMkdmFsdWUiLCJjaGVja2VkIiwic3BsaXQiLCJoYW5kbGVDaGFuZ2UiLCJjaGVja2JveCIsIl90aGlzJHByb3BzJHZhbHVlIiwiX3NwbGl0MiIsInBvc2l0aXZlIiwibmVnYXRpdmUiLCJvbkNoYW5nZSIsIl90aGlzJHByb3BzJGNsYXNzTmFtZSIsIlR5cGUiLCJlZGl0aW5nX2NlbGxfY29uc3VtZXJfMSIsInJvd19jb25zdW1lcl8xIiwiVEVYVCIsImNyZWF0ZUVkaXRpbmdDZWxsIiwid2l0aFJvd0xldmVsQ2VsbEVkaXQiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJlcnIiLCJFcnJvciIsImdldFNoaW0iLCJSZWFjdFByb3BUeXBlcyIsImJpZ2ludCIsInN5bWJvbCIsImFycmF5T2YiLCJlbGVtZW50IiwiZWxlbWVudFR5cGUiLCJpbnN0YW5jZU9mIiwib2JqZWN0T2YiLCJvbmVPZlR5cGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiRGF0ZUVkaXRvciIsImRhdGUiLCJ2YWx1ZUFzRGF0ZSIsIkRhdGUiLCJfZXhjbHVkZWQyIiwiX3JlYWN0XzEkZGVmYXVsdCRDb21wIiwiX3RoaXMkcHJvcHMkY2VsbEVkaXQiLCJfdGhpcyRwcm9wcyRjZWxsRWRpdCQiLCJfcHJvcHMkb3B0aW9ucyIsIl90aGlzJHByb3BzMiRkZWZhdWx0ViIsImhhc093biIsImNsYXNzTmFtZXMiLCJjbGFzc2VzIiwiYXJnIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwiaW5jbHVkZXMiLCJuZXdDbGFzcyIsImRlZmF1bHQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgEditor=t(require("react")):e.ReactBootstrapTableNgEditor=t(e.React)}(self,e=>{return t={33(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(564),u=r(511);t.default=(e,t)=>{function r(r){return o.default.createElement(u.Consumer,null,n=>((r,n)=>{const u=r.value,a=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(u)>-1),l={};return t&&n.mode===i.DBCLICK_TO_CELL_EDIT&&(l.DELAY_FOR_DBCLICK=i.DELAY_FOR_DBCLICK),o.default.createElement(e,{...r,...l,editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:a,atstart:n.atstart,clickToEdit:n.mode===i.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===i.DBCLICK_TO_CELL_EDIT})})(r,n))}return r.displayName="WithCellEditingRowConsumer",r}},88(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(442)),i=function(e){var t=e.invalidMessage;return o.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},o.default.createElement("strong",null,t))};i.defaultProps={invalidMessage:null},t.default=i},98(e,t,r){"use strict";var n=["defaultValue","didMount","className","autoSelectText","onUpdate"];function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,d(n.key),n)}}function a(e,t,r){return t=c(t),function(e,t){if(t&&("object"==o(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,l()?Reflect.construct(t,r||[],c(e).constructor):t.apply(e,r))}function l(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(l=function(){return!!e})()}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function s(e,t){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},s(e,t)}function f(e,t,r){return(t=d(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function d(e){var t=function(e,t){if("object"!=o(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==o(t)?t:t+""}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),h=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=h(r(942)),O=v(r(442)),g=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return f(e=a(this,t,[].concat(n)),"text",void 0),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}(t,e),r=t,o=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),o=void 0===r?"":r,u=(t.autoSelectText,t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,n)),a=(0,m.default)(o,"form-control editor edit-text");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){f(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){e.text=t},type:"text",className:a},u))}}],o&&u(r.prototype,o),l&&u(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,l}(O.Component);f(g,"defaultProps",{className:null,defaultValue:"",autoSelectText:!1,didMount:void 0}),t.default=g},121(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{select;constructor(e){super(e);let t=e.options??[];e.getOptions&&(t=e.getOptions(this.setOptions.bind(this),{row:e.row,column:e.column})||[]),this.state={options:t}}componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.select.value=e,this.select.focus(),t&&t()}setOptions(e){this.setState({options:e})}getValue(){return this.select.value}render(){const{defaultValue:e="",didMount:t,getOptions:r,className:n="",onUpdate:o,...i}=this.props,u={...i,className:(0,l.default)(n,"form-control editor edit-select")};return c.default.createElement("select",{...u,ref:e=>{this.select=e},defaultValue:e},this.state.options.map(({label:e,value:t})=>c.default.createElement("option",{key:t,value:t},e)))}static defaultProps={className:"",defaultValue:"",style:{},options:[],didMount:void 0,getOptions:void 0}}t.default=s},137(e,t,r){"use strict";var n=["defaultValue","didMount","className","autoSelectText"];function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){d(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,p(n.key),n)}}function l(e,t,r){return t=s(t),function(e,t){if(t&&("object"==o(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,c()?Reflect.construct(t,r||[],s(e).constructor):t.apply(e,r))}function c(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(c=function(){return!!e})()}function s(e){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},s(e)}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function d(e,t,r){return(t=p(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e){var t=function(e,t){if("object"!=o(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==o(t)?t:t+""}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},v=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return v(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=h(r(442)),_=function(e){function t(e){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),d(r=l(this,t,[e]),"text",void 0),r.handleKeyDown=r.handleKeyDown.bind(r),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f(e,t)}(t,e),r=t,o=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?null:t,n=e.didMount,o=e.autoSelectText,i=void 0!==o&&o;this.text.value=r,this.text.focus(),i&&this.text.select(),n&&n()}},{key:"getValue",value:function(){return this.text.value}},{key:"handleKeyDown",value:function(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),o=void 0===r?"":r,i=(t.autoSelectText,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,n)),a=(0,O.default)(o,"form-control editor edit-textarea");return g.default.createElement("textarea",u(u({ref:function(t){e.text=t},className:a},i),{},{onKeyDown:this.handleKeyDown}))}}],o&&a(r.prototype,o),i&&a(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,i}(g.Component);d(_,"defaultProps",{className:"",defaultValue:"",autoSelectText:!1,onKeyDown:void 0,didMount:void 0}),t.default=_},167(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=({invalidMessage:e})=>o.default.createElement("div",{className:"alert alert-danger in",role:"alert","data-testid":"editor-indicator"},o.default.createElement("strong",null,e));i.defaultProps={invalidMessage:null},t.default=i},205(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442)),s=r(564),f=a(r(937)),d=a(r(868)),p=a(r(121)),b=a(r(167)),y=a(r(871)),v=a(r(462));t.default=(e,t)=>class extends c.Component{static defaultProps={timeToCloseMessage:s.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}};editor;indicatorTimer;constructor(e){super(e),this.indicatorTimer=null,this.clearTimer=this.clearTimer.bind(this),this.handleBlur=this.handleBlur.bind(this),this.handleClick=this.handleClick.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.beforeComplete=this.beforeComplete.bind(this),this.asyncbeforeCompete=this.asyncbeforeCompete.bind(this),this.displayErrorMessage=this.displayErrorMessage.bind(this),this.state={invalidMessage:null}}componentWillUnmount(){this.clearTimer()}componentDidUpdate({message:t}){e.isDefined(t)&&(this.createTimer(),this.setState(()=>({invalidMessage:t})))}clearTimer(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}createTimer(){this.clearTimer();const{timeToCloseMessage:t,onErrorMessageDisappear:r}=this.props;this.indicatorTimer=e.sleep(()=>{this.setState(()=>({invalidMessage:null})),e.isFunction(r)&&r()},t)}displayErrorMessage(e){this.setState(()=>({invalidMessage:e})),this.createTimer()}asyncbeforeCompete(e){return(t={valid:!0})=>{const{valid:r,message:n}=t,{onUpdate:o,row:i,column:u}=this.props;r?o(i,u,e):this.displayErrorMessage(n)}}beforeComplete(t){const{onUpdate:r,row:n,column:o}=this.props;if(e.isFunction(o.validator)){const r=o.validator(t,n,o,this.asyncbeforeCompete(t));if(e.isObject(r)){if(r.async)return;if(!r.valid)return void this.displayErrorMessage(r.message)}}r(n,o,t)}handleBlur(){const{onEscape:e,blurToSave:t}=this.props;t?this.beforeComplete(this.editor.getValue()):e()}handleKeyDown(e){const{onEscape:t}=this.props;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}handleClick(e){"TD"!==e.target.tagName&&e.stopPropagation()}render(){let r;const{row:n,column:o,className:i,style:u,rowIndex:a,columnIndex:h,autoSelectText:m}=this.props,{dataField:O}=o,g=e.get(n,O),_=e.isDefined(this.state.invalidMessage);let j=o.editorClasses||"";e.isFunction(o.editorClasses)&&(j=o.editorClasses(g,n,a,h));let E=o.editorStyle||{};e.isFunction(o.editorStyle)&&(E=o.editorStyle(g,n,a,h));let w={ref:e=>this.editor=e,defaultValue:g,style:E,className:(0,l.default)({animated:_,shake:_},j),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:()=>{},onUpdate:e=>{}};t&&(w.didMount=()=>t(n,o,a,h));const P=e.isObject(o.editor);return P?w={...w,...o.editor}:e.isFunction(o.editorRenderer)&&(w={...w,onUpdate:this.beforeComplete}),r=e.isFunction(o.editorRenderer)?o.editorRenderer(w,g,n,o,a,h):P&&o.editor?.type===s.EDITTYPE.SELECT?c.default.createElement(p.default,{...w,row:n,column:o}):P&&o.editor?.type===s.EDITTYPE.TEXTAREA?c.default.createElement(v.default,{...w,autoSelectText:m}):P&&o.editor?.type===s.EDITTYPE.CHECKBOX?c.default.createElement(f.default,{...w}):P&&o.editor?.type===s.EDITTYPE.DATE?c.default.createElement(d.default,{...w}):c.default.createElement(y.default,{...w,autoSelectText:m}),c.default.createElement("td",{className:(0,l.default)("react-bootstrap-table-editing-cell",i),style:u,onClick:this.handleClick},r,_?c.default.createElement(b.default,{invalidMessage:this.state.invalidMessage}):null)}}},282(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){f(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,d(n.key),n)}}function a(e,t,r){return t=c(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,l()?Reflect.construct(t,r||[],c(e).constructor):t.apply(e,r))}function l(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(l=function(){return!!e})()}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function s(e,t){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},s(e,t)}function f(e,t,r){return(t=d(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function d(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),h=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=h(r(942)),O=v(r(442)),g=r(564),_=h(r(512)),j=h(r(855)),E=h(r(900)),w=h(r(88)),P=h(r(98)),C=h(r(137));t.default=function(e,t){var r;return r=function(r){function n(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),f(t=a(this,n,[e]),"editor",void 0),f(t,"indicatorTimer",void 0),t.indicatorTimer=null,t.clearTimer=t.clearTimer.bind(t),t.handleBlur=t.handleBlur.bind(t),t.handleClick=t.handleClick.bind(t),t.handleKeyDown=t.handleKeyDown.bind(t),t.beforeComplete=t.beforeComplete.bind(t),t.asyncbeforeCompete=t.asyncbeforeCompete.bind(t),t.displayErrorMessage=t.displayErrorMessage.bind(t),t.state={invalidMessage:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}(n,r),o=n,l=[{key:"componentWillUnmount",value:function(){this.clearTimer()}},{key:"componentDidUpdate",value:function(t){var r=t.message;e.isDefined(r)&&(this.createTimer(),this.setState(function(){return{invalidMessage:r}}))}},{key:"clearTimer",value:function(){this.indicatorTimer&&clearTimeout(this.indicatorTimer)}},{key:"createTimer",value:function(){var t=this;this.clearTimer();var r=this.props,n=r.timeToCloseMessage,o=r.onErrorMessageDisappear;this.indicatorTimer=e.sleep(function(){t.setState(function(){return{invalidMessage:null}}),e.isFunction(o)&&o()},n)}},{key:"displayErrorMessage",value:function(e){this.setState(function(){return{invalidMessage:e}}),this.createTimer()}},{key:"asyncbeforeCompete",value:function(e){var t=this;return function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{valid:!0},n=r.valid,o=r.message,i=t.props,u=i.onUpdate,a=i.row,l=i.column;n?u(a,l,e):t.displayErrorMessage(o)}}},{key:"beforeComplete",value:function(t){var r=this.props,n=r.onUpdate,o=r.row,i=r.column;if(e.isFunction(i.validator)){var u=i.validator(t,o,i,this.asyncbeforeCompete(t));if(e.isObject(u)){if(u.async)return;if(!u.valid)return void this.displayErrorMessage(u.message)}}n(o,i,t)}},{key:"handleBlur",value:function(){var e=this.props,t=e.onEscape;e.blurToSave?this.beforeComplete(this.editor.getValue()):t()}},{key:"handleKeyDown",value:function(e){var t=this.props.onEscape;27===e.keyCode?t():13===e.keyCode&&this.beforeComplete(this.editor.getValue())}},{key:"handleClick",value:function(e){"TD"!==e.target.tagName&&e.stopPropagation()}},{key:"render",value:function(){var r,n,o,u,a,l=this,c=this.props,s=c.row,f=c.column,d=c.className,p=c.style,b=c.rowIndex,y=c.columnIndex,v=c.autoSelectText,h=f.dataField,S=e.get(s,h),T=e.isDefined(this.state.invalidMessage),D=f.editorClasses||"";e.isFunction(f.editorClasses)&&(D=f.editorClasses(S,s,b,y));var x=f.editorStyle||{};e.isFunction(f.editorStyle)&&(x=f.editorStyle(S,s,b,y));var M={ref:function(e){return l.editor=e},defaultValue:S,style:x,className:(0,m.default)({animated:T,shake:T},D),onKeyDown:this.handleKeyDown,onBlur:this.handleBlur,didMount:function(){},onUpdate:function(e){}};t&&(M.didMount=function(){return t(s,f,b,y)});var k=e.isObject(f.editor);return k?M=i(i({},M),f.editor):e.isFunction(f.editorRenderer)&&(M=i(i({},M),{},{onUpdate:this.beforeComplete})),a=e.isFunction(f.editorRenderer)?f.editorRenderer(M,S,s,f,b,y):k&&(null===(r=f.editor)||void 0===r?void 0:r.type)===g.EDITTYPE.SELECT?O.default.createElement(E.default,i(i({},M),{},{row:s,column:f})):k&&(null===(n=f.editor)||void 0===n?void 0:n.type)===g.EDITTYPE.TEXTAREA?O.default.createElement(C.default,i(i({},M),{},{autoSelectText:v})):k&&(null===(o=f.editor)||void 0===o?void 0:o.type)===g.EDITTYPE.CHECKBOX?O.default.createElement(_.default,i({},M)):k&&(null===(u=f.editor)||void 0===u?void 0:u.type)===g.EDITTYPE.DATE?O.default.createElement(j.default,i({},M)):O.default.createElement(P.default,i(i({},M),{},{autoSelectText:v})),O.default.createElement("td",{className:(0,m.default)("react-bootstrap-table-editing-cell",d),style:p,onClick:this.handleClick},a,T?O.default.createElement(w.default,{invalidMessage:this.state.invalidMessage}):null)}}],l&&u(o.prototype,l),c&&u(o,c),Object.defineProperty(o,"prototype",{writable:!1}),o;var o,l,c}(O.Component),f(r,"defaultProps",{timeToCloseMessage:g.TIME_TO_CLOSE_MESSAGE,className:null,autoSelectText:!1,style:{}}),r}},351(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(898),s=a(r(282));t.default=function(e,t){var r=(0,s.default)(e,t);return function(t){return l.default.createElement(c.Consumer,null,function(n){return function(t,n){var o=e.get(t.row,t.column.dataField),u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(o,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(o,t.row,t.rowIndex,t.columnIndex)),l.default.createElement(r,i(i({},t),{},{className:a,style:u},n))}(t,n)})}}},404(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(442)),i=r(511),u=n(r(205));t.default=(e,t)=>{const r=(0,u.default)(e,t);return t=>o.default.createElement(i.Consumer,null,n=>((t,n)=>{const i=e.get(t.row,t.column.dataField);let u=t.column.editCellStyle||{},a=t.column.editCellClasses;return e.isFunction(t.column.editCellStyle)&&(u=t.column.editCellStyle(i,t.row,t.rowIndex,t.columnIndex)),e.isFunction(t.column.editCellClasses)&&(a=t.column.editCellClasses(i,t.row,t.rowIndex,t.columnIndex)),o.default.createElement(r,{...t,className:a,style:u,...n})})(t,n))}},442(t){"use strict";t.exports=e},462(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{text;constructor(e){super(e),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){const{defaultValue:e=null,didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}handleKeyDown(e){(13!==e.keyCode||e.shiftKey)&&this.props.onKeyDown&&this.props.onKeyDown(e)}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-textarea");return c.default.createElement("textarea",{ref:e=>{this.text=e},className:i,...o,onKeyDown:this.handleKeyDown})}static defaultProps={className:"",defaultValue:"",autoSelectText:!1,onKeyDown:void 0,didMount:void 0}}t.default=s},511(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;const o=n(r(442)),i=o.default.createContext(null);t.default=(e,t,r,n)=>{class u extends o.default.Component{constructor(e){super(e),this.doUpdate=this.doUpdate.bind(this),this.startEditing=this.startEditing.bind(this),this.escapeEditing=this.escapeEditing.bind(this),this.completeEditing=this.completeEditing.bind(this),this.handleCellUpdate=this.handleCellUpdate.bind(this),this.state={ridx:null,cidx:null,message:null}}static getDerivedStateFromProps(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:{...n}}handleCellUpdate(r,n,o){const i=t.typeConvert(n.type,o),{cellEdit:u}=this.props,{beforeSaveCell:a}=u.options,l=e.get(r,n.dataField),c=(e=!0)=>{e?this.doUpdate(r,n,i):this.escapeEditing()};if(e.isFunction(a)){const t=a(l,i,r,n,c);if(e.isObject(t)&&t.async)return}this.doUpdate(r,n,i)}doUpdate(o,i,u){const{keyField:a,cellEdit:l,data:c}=this.props,{afterSaveCell:s}=l.options,f=e.get(o,a),d=e.get(o,i.dataField);r()?n(f,i.dataField,u):(t.editCell(c,a,f,i.dataField,u),e.isFunction(s)&&s(d,u,o,i),this.completeEditing())}completeEditing(){this.setState(()=>({ridx:null,cidx:null,message:null}))}startEditing(e,t){const r=()=>{this.setState(()=>({ridx:e,cidx:t}))},{selectRow:n}=this.props;n&&!n.clickToEdit&&n.clickToSelect||r()}escapeEditing(){this.setState(()=>({ridx:null,cidx:null}))}render(){const{cellEdit:{options:{nonEditableRows:t,errorMessage:r,...n},ridx:u,cidx:a,...l}}=this.props,c={...n,...l,ridx:null!==this.state.ridx?this.state.ridx:u??null,cidx:null!==this.state.cidx?this.state.cidx:a??null,message:this.state.message,nonEditableRows:e.isDefined(t)?t():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate};return o.default.createElement(i.Provider,{value:{...c}},this.props.children)}}return{Provider:u}},t.Consumer=i.Consumer},512(e,t,r){"use strict";var n=["defaultValue","didMount","className","onUpdate"];function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){b(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,u,a=[],l=!0,c=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(a.push(n.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=r.return&&(u=r.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function c(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,y(n.key),n)}}function s(e,t,r){return t=d(t),function(e,t){if(t&&("object"==o(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],d(e).constructor):t.apply(e,r))}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function d(e){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},d(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}function b(e,t,r){return(t=y(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function y(e){var t=function(e,t){if("object"!=o(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==o(t)?t:t+""}var v,h=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},m=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},O=(v=function(e){return v=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},v(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=v(e),n=0;n<r.length;n++)"default"!==r[n]&&h(t,e,r[n]);return m(t,e),t}),g=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var _=g(r(942)),j=O(r(442)),E=function(e){function t(e){var r,n,o;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),b(o=s(this,t,[e]),"checkbox",void 0),o.state={checked:(null!==(r=e.defaultValue)&&void 0!==r&&r).toString()===(null!==(n=e.value)&&void 0!==n?n:"on:off").split(":")[0]},o.handleChange=o.handleChange.bind(o),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(t,e),r=t,o=[{key:"componentDidMount",value:function(){var e=this.props.didMount;this.checkbox.focus(),e&&e()}},{key:"getValue",value:function(){var e,t=a((null!==(e=this.props.value)&&void 0!==e?e:"on:off").split(":"),2),r=t[0],n=t[1];return this.checkbox.checked?r:n}},{key:"handleChange",value:function(e){this.props.onChange&&this.props.onChange(e);var t=e.target;this.setState(function(){return{checked:t.checked}})}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),o=void 0===r?"":r,i=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,n)),a=(0,_.default)("editor edit-chseckbox checkbox",o);return j.default.createElement("input",u(u({ref:function(t){e.checkbox=t},type:"checkbox",className:a},i),{},{checked:this.state.checked,onChange:this.handleChange}))}}],o&&c(r.prototype,o),i&&c(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,i}(j.Component);b(E,"defaultProps",{className:"",value:"on:off",defaultValue:!1,onChange:void 0,didMount:void 0}),t.default=E},564(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(898)),i=n(r(351)),u=n(r(810));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},810(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach(function(t){u(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(r(442)),c=r(564),s=r(898);t.default=function(e,t){function r(r){return l.default.createElement(s.Consumer,null,function(n){return function(r,n){var o=r.value,u=!(n.nonEditableRows.length>0&&n.nonEditableRows.indexOf(o)>-1),a={};return t&&n.mode===c.DBCLICK_TO_CELL_EDIT&&(a.DELAY_FOR_DBCLICK=c.DELAY_FOR_DBCLICK),l.default.createElement(e,i(i(i({},r),a),{},{editingRowIdx:n.ridx,editingColIdx:n.cidx,isEditable:u,atstart:n.atstart,clickToEdit:n.mode===c.CLICK_TO_CELL_EDIT,dbclickToEdit:n.mode===c.DBCLICK_TO_CELL_EDIT}))}(r,n)})}return r.displayName="WithCellEditingRowConsumer",r}},855(e,t,r){"use strict";var n=["defaultValue","didMount","className","onUpdate"];function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,d(n.key),n)}}function a(e,t,r){return t=c(t),function(e,t){if(t&&("object"==o(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,l()?Reflect.construct(t,r||[],c(e).constructor):t.apply(e,r))}function l(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(l=function(){return!!e})()}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function s(e,t){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},s(e,t)}function f(e,t,r){return(t=d(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function d(e){var t=function(e,t){if("object"!=o(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==o(t)?t:t+""}var p,b=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},y=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},v=(p=function(e){return p=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},p(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=p(e),n=0;n<r.length;n++)"default"!==r[n]&&b(t,e,r[n]);return y(t,e),t}),h=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var m=h(r(942)),O=v(r(442)),g=function(e){function t(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return f(e=a(this,t,[].concat(n)),"date",void 0),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}(t,e),r=t,o=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.date.valueAsDate=new Date(r),this.date.focus(),n&&n()}},{key:"getValue",value:function(){return this.date.value}},{key:"render",value:function(){var e=this,t=this.props,r=(t.defaultValue,t.didMount,t.className),o=void 0===r?"":r,u=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,n)),a=(0,m.default)(o,"form-control editor edit-date");return O.default.createElement("input",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){f(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({ref:function(t){e.date=t},type:"date",className:a},u))}}],o&&u(r.prototype,o),l&&u(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,l}(O.Component);f(g,"defaultProps",{className:"",defaultValue:"",didMount:void 0}),t.default=g},856(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.EDITTYPE=t.DBCLICK_TO_CELL_EDIT=t.CLICK_TO_CELL_EDIT=t.DELAY_FOR_DBCLICK=t.TIME_TO_CLOSE_MESSAGE=void 0;var o=n(r(511)),i=n(r(404)),u=n(r(33));t.TIME_TO_CLOSE_MESSAGE=3e3,t.DELAY_FOR_DBCLICK=200,t.CLICK_TO_CELL_EDIT="click",t.DBCLICK_TO_CELL_EDIT="dbclick",t.EDITTYPE={TEXT:"text",SELECT:"select",TEXTAREA:"textarea",CHECKBOX:"checkbox",DATE:"date"},t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:o.default,createEditingCell:i.default,withRowLevelCellEdit:u.default,DBCLICK_TO_CELL_EDIT:t.DBCLICK_TO_CELL_EDIT,DELAY_FOR_DBCLICK:t.DELAY_FOR_DBCLICK,options:e}},t.Type=t.EDITTYPE},868(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{date;componentDidMount(){const{defaultValue:e="",didMount:t}=this.props;this.date.valueAsDate=new Date(e),this.date.focus(),t&&t()}getValue(){return this.date.value}render(){const{defaultValue:e="",didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)(r,"form-control editor edit-date");return c.default.createElement("input",{ref:e=>{this.date=e},type:"date",className:i,...o})}static defaultProps={className:"",defaultValue:"",didMount:void 0}}t.default=s},871(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{text;componentDidMount(){const{defaultValue:e="",didMount:t,autoSelectText:r=!1}=this.props;this.text.value=e,this.text.focus(),r&&this.text.select(),t&&t()}getValue(){return this.text.value}render(){const{defaultValue:e="",didMount:t,className:r="",autoSelectText:n=!1,onUpdate:o,...i}=this.props,u=(0,l.default)(r,"form-control editor edit-text");return c.default.createElement("input",{ref:e=>{this.text=e},type:"text",className:u,...i})}static defaultProps={className:null,defaultValue:"",autoSelectText:!1,didMount:void 0}}t.default=s},898(e,t,r){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var o=["nonEditableRows","errorMessage"],i=["options","ridx","cidx"];function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?u(Object(r),!0).forEach(function(t){l(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function l(e,t,r){return(t=f(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,f(n.key),n)}}function f(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function d(e,t,r){return t=b(t),function(e,t){if(t&&("object"==n(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,p()?Reflect.construct(t,r||[],b(e).constructor):t.apply(e,r))}function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(p=function(){return!!e})()}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var v=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=void 0;var h=v(r(442)),m=h.default.createContext(null);t.default=function(e,t,r,n){var u=function(u){function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),(t=d(this,l,[e])).doUpdate=t.doUpdate.bind(t),t.startEditing=t.startEditing.bind(t),t.escapeEditing=t.escapeEditing.bind(t),t.completeEditing=t.completeEditing.bind(t),t.handleCellUpdate=t.handleCellUpdate.bind(t),t.state={ridx:null,cidx:null,message:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(l,u),f=l,p=[{key:"handleCellUpdate",value:function(r,n,o){var i=this,u=t.typeConvert(n.type,o),a=this.props.cellEdit.options.beforeSaveCell,l=e.get(r,n.dataField);if(e.isFunction(a)){var c=a(l,u,r,n,function(){arguments.length>0&&void 0!==arguments[0]&&!arguments[0]?i.escapeEditing():i.doUpdate(r,n,u)});if(e.isObject(c)&&c.async)return}this.doUpdate(r,n,u)}},{key:"doUpdate",value:function(o,i,u){var a=this.props,l=a.keyField,c=a.cellEdit,s=a.data,f=c.options.afterSaveCell,d=e.get(o,l),p=e.get(o,i.dataField);r()?n(d,i.dataField,u):(t.editCell(s,l,d,i.dataField,u),e.isFunction(f)&&f(p,u,o,i),this.completeEditing())}},{key:"completeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null,message:null}})}},{key:"startEditing",value:function(e,t){var r=this,n=this.props.selectRow;n&&!n.clickToEdit&&n.clickToSelect||r.setState(function(){return{ridx:e,cidx:t}})}},{key:"escapeEditing",value:function(){this.setState(function(){return{ridx:null,cidx:null}})}},{key:"render",value:function(){var t=this.props.cellEdit,r=t.options,n=r.nonEditableRows,u=(r.errorMessage,c(r,o)),l=t.ridx,s=t.cidx,f=c(t,i),d=a(a(a({},u),f),{},{ridx:null!==this.state.ridx?this.state.ridx:null!=l?l:null,cidx:null!==this.state.cidx?this.state.cidx:null!=s?s:null,message:this.state.message,nonEditableRows:e.isDefined(n)?n():[],atstart:this.startEditing,onEscape:this.escapeEditing,onUpdate:this.handleCellUpdate});return h.default.createElement(m.Provider,{value:a({},d)},this.props.children)}}],b=[{key:"getDerivedStateFromProps",value:function(t,n){return t.cellEdit&&e.isFunction(r)&&r()?t.cellEdit.options.errorMessage?{message:t.cellEdit.options.errorMessage}:{ridx:n.ridx,cidx:n.cidx,message:null}:a({},n)}}],p&&s(f.prototype,p),b&&s(f,b),Object.defineProperty(f,"prototype",{writable:!1}),f;var f,p,b}(h.default.Component);return{Provider:u}},t.Consumer=m.Consumer},900(e,t,r){"use strict";var n=["defaultValue","didMount","getOptions","className","onUpdate"];function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){d(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,p(n.key),n)}}function l(e,t,r){return t=s(t),function(e,t){if(t&&("object"==o(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,c()?Reflect.construct(t,r||[],s(e).constructor):t.apply(e,r))}function c(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(c=function(){return!!e})()}function s(e){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},s(e)}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function d(e,t,r){return(t=p(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e){var t=function(e,t){if("object"!=o(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==o(t)?t:t+""}var b,y=Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},v=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},h=(b=function(e){return b=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},b(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=b(e),n=0;n<r.length;n++)"default"!==r[n]&&y(t,e,r[n]);return v(t,e),t}),m=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var O=m(r(942)),g=h(r(442)),_=function(e){function t(e){var r,n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),d(n=l(this,t,[e]),"select",void 0);var o=null!==(r=e.options)&&void 0!==r?r:[];return e.getOptions&&(o=e.getOptions(n.setOptions.bind(n),{row:e.row,column:e.column})||[]),n.state={options:o},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f(e,t)}(t,e),r=t,o=[{key:"componentDidMount",value:function(){var e=this.props,t=e.defaultValue,r=void 0===t?"":t,n=e.didMount;this.select.value=r,this.select.focus(),n&&n()}},{key:"setOptions",value:function(e){this.setState({options:e})}},{key:"getValue",value:function(){return this.select.value}},{key:"render",value:function(){var e=this,t=this.props,r=t.defaultValue,o=void 0===r?"":r,i=(t.didMount,t.getOptions,t.className),a=void 0===i?"":i,l=(t.onUpdate,function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(t,n)),c=(0,O.default)(a,"form-control editor edit-select"),s=u(u({},l),{},{className:c});return g.default.createElement("select",u(u({},s),{},{ref:function(t){e.select=t},defaultValue:o}),this.state.options.map(function(e){var t=e.label,r=e.value;return g.default.createElement("option",{key:r,value:r},t)}))}}],o&&a(r.prototype,o),i&&a(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,i}(g.Component);d(_,"defaultProps",{className:"",defaultValue:"",style:{},options:[],didMount:void 0,getOptions:void 0}),t.default=_},937(e,t,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),u=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),u=0;u<r.length;u++)"default"!==r[u]&&o(t,e,r[u]);return i(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(r(942)),c=u(r(442));class s extends c.Component{checkbox;constructor(e){super(e),this.state={checked:(e.defaultValue??!1).toString()===(e.value??"on:off").split(":")[0]},this.handleChange=this.handleChange.bind(this)}componentDidMount(){const{didMount:e}=this.props;this.checkbox.focus(),e&&e()}getValue(){const[e,t]=(this.props.value??"on:off").split(":");return this.checkbox.checked?e:t}handleChange(e){this.props.onChange&&this.props.onChange(e);const{target:t}=e;this.setState(()=>({checked:t.checked}))}render(){const{defaultValue:e=!1,didMount:t,className:r="",onUpdate:n,...o}=this.props,i=(0,l.default)("editor edit-chseckbox checkbox",r);return c.default.createElement("input",{ref:e=>{this.checkbox=e},type:"checkbox",className:i,...o,checked:this.state.checked,onChange:this.handleChange})}static defaultProps={className:"",value:"on:off",defaultValue:!1,onChange:void 0,didMount:void 0}}t.default=s},942(e,t){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var r=arguments[t];r&&(e=u(e,i(r)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var r in e)n.call(e,r)&&e[r]&&(t=u(t,r));return t}function u(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()}},r={},function e(n){var o=r[n];if(void 0!==o)return o.exports;var i=r[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(856);var t,r});
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IuanMiLCJtYXBwaW5ncyI6IjtDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxFQUFRRyxRQUFRLFVBQ1IsbUJBQVhDLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxDQUFDLFNBQVVKLEdBQ1EsaUJBQVpDLFFBQ2RBLFFBQXFDLDRCQUFJRCxFQUFRRyxRQUFRLFVBRXpESixFQUFrQyw0QkFBSUMsRUFBUUQsRUFBWSxNQUMzRCxDQVRELENBU0dPLEtBQU9DLElBQ1YsTywrSkNUQSxrQkFDQSxTQUtBLFNBRUEsVUFBZSxDQUFDQyxFQUFnQkMsS0EyQjlCLFNBQVNDLEVBQWFDLEdBQ3BCLE9BQ0Usd0JBQUMsRUFBQUMsU0FBUSxLQUFHQyxHQTVCVyxFQUFDRixFQUFZRSxLQUN0QyxNQUFNQyxFQUFNSCxFQUFNSSxNQUNaQyxJQUNKSCxFQUFTSSxnQkFBZ0JDLE9BQVMsR0FDbENMLEVBQVNJLGdCQUFnQkUsUUFBUUwsSUFBUSxHQUdyQ00sRUFBaUQsQ0FBQyxFQU14RCxPQUpJWCxHQUFvQkksRUFBU1EsT0FBUyxFQUFBQyx1QkFDeENGLEVBQU1HLGtCQUFvQixFQUFBQSxtQkFJMUIsd0JBQUNmLEVBQVMsSUFDSkcsS0FDQVMsRUFDSkksY0FBZVgsRUFBU1ksS0FDeEJDLGNBQWViLEVBQVNjLEtBQ3hCQyxXQUFZWixFQUNaYSxRQUFTaEIsRUFBU2dCLFFBQ2xCQyxZQUFhakIsRUFBU1EsT0FBUyxFQUFBVSxtQkFDL0JDLGNBQWVuQixFQUFTUSxPQUFTLEVBQUFDLHdCQU1WVyxDQUFtQnRCLEVBQU9FLEdBRXZELENBR0EsT0FEQUgsRUFBYXdCLFlBQWMsNkJBQ3BCeEIsRSx5QkN6Q1QsSUFBSXlCLEVBQXdELFNBQVVDLEdBQ3BFLE9BQU9BLEdBQU9BLEVBQUlDLFdBQWFELEVBQU0sQ0FD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RjFDRCIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvcm93LWNvbnN1bWVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvZWRpdG9yLWluZGljYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvdGV4dC1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvZHJvcGRvd24tZWRpdG9yLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvdGV4dGFyZWEtZWRpdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2VkaXRvci1pbmRpY2F0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2VkaXRpbmctY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2VkaXRpbmctY2VsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvZWRpdGluZy1jZWxsLWNvbnN1bWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2VkaXRpbmctY2VsbC1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL3RleHRhcmVhLWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9saWIvc3JjL2NoZWNrYm94LWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvcm93LWNvbnN1bWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3IvbGliL3NyYy9kYXRlLWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWVkaXRvci9zcmMvZGF0ZS1lZGl0b3IudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL3RleHQtZWRpdG9yLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZWRpdG9yL2xpYi9zcmMvZHJvcGRvd24tZWRpdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1lZGl0b3Ivc3JjL2NoZWNrYm94LWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nRWRpdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ0VkaXRvclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBDTElDS19UT19DRUxMX0VESVQsXG4gIERCQ0xJQ0tfVE9fQ0VMTF9FRElULFxuICBERUxBWV9GT1JfREJDTElDSyxcbn0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBDb25zdW1lciB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgKENvbXBvbmVudDogYW55LCBzZWxlY3RSb3dFbmFibGVkOiBhbnkpID0+IHtcbiAgY29uc3QgcmVuZGVyV2l0aENlbGxFZGl0ID0gKHByb3BzOiBhbnksIGNlbGxFZGl0OiBhbnkpID0+IHtcbiAgICBjb25zdCBrZXkgPSBwcm9wcy52YWx1ZTtcbiAgICBjb25zdCBlZGl0YWJsZVJvdyA9ICEoXG4gICAgICBjZWxsRWRpdC5ub25FZGl0YWJsZVJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgY2VsbEVkaXQubm9uRWRpdGFibGVSb3dzLmluZGV4T2Yoa2V5KSA+IC0xXG4gICAgKTtcblxuICAgIGNvbnN0IGF0dHJzOiB7IERFTEFZX0ZPUl9EQkNMSUNLPzogbnVtYmVyIHwgc3RyaW5nIH0gPSB7fTtcblxuICAgIGlmIChzZWxlY3RSb3dFbmFibGVkICYmIGNlbGxFZGl0Lm1vZGUgPT09IERCQ0xJQ0tfVE9fQ0VMTF9FRElUKSB7XG4gICAgICBhdHRycy5ERUxBWV9GT1JfREJDTElDSyA9IERFTEFZX0ZPUl9EQkNMSUNLO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgey4uLmF0dHJzfVxuICAgICAgICBlZGl0aW5nUm93SWR4PXtjZWxsRWRpdC5yaWR4fVxuICAgICAgICBlZGl0aW5nQ29sSWR4PXtjZWxsRWRpdC5jaWR4fVxuICAgICAgICBpc0VkaXRhYmxlPXtlZGl0YWJsZVJvd31cbiAgICAgICAgYXRzdGFydD17Y2VsbEVkaXQuYXRzdGFydH1cbiAgICAgICAgY2xpY2tUb0VkaXQ9e2NlbGxFZGl0Lm1vZGUgPT09IENMSUNLX1RPX0NFTExfRURJVH1cbiAgICAgICAgZGJjbGlja1RvRWRpdD17Y2VsbEVkaXQubW9kZSA9PT0gREJDTElDS19UT19DRUxMX0VESVR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG4gIGZ1bmN0aW9uIHdpdGhDb25zdW1lcihwcm9wczogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25zdW1lcj57KGNlbGxFZGl0KSA9PiByZW5kZXJXaXRoQ2VsbEVkaXQocHJvcHMsIGNlbGxFZGl0KX08L0NvbnN1bWVyPlxuICAgICk7XG4gIH1cblxuICB3aXRoQ29uc3VtZXIuZGlzcGxheU5hbWUgPSBcIldpdGhDZWxsRWRpdGluZ1Jvd0NvbnN1bWVyXCI7XG4gIHJldHVybiB3aXRoQ29uc3VtZXI7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgRWRpdG9ySW5kaWNhdG9yID0gZnVuY3Rpb24gRWRpdG9ySW5kaWNhdG9yKF9yZWYpIHtcbiAgdmFyIGludmFsaWRNZXNzYWdlID0gX3JlZi5pbnZhbGlkTWVzc2FnZTtcbiAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJhbGVydCBhbGVydC1kYW5nZXIgaW5cIixcbiAgICByb2xlOiBcImFsZXJ0XCIsXG4gICAgXCJkYXRhLXRlc3RpZFwiOiBcImVkaXRvci1pbmRpY2F0b3JcIlxuICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIG51bGwsIGludmFsaWRNZXNzYWdlKSk7XG59O1xuRWRpdG9ySW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW52YWxpZE1lc3NhZ2U6IG51bGxcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEVkaXRvckluZGljYXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRWYWx1ZVwiLCBcImRpZE1vdW50XCIsIFwiY2xhc3NOYW1lXCIsIFwiYXV0b1NlbGVjdFRleHRcIiwgXCJvblVwZGF0ZVwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgY2xhc3NuYW1lc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgVGV4dEVkaXRvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIFRleHRFZGl0b3IoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0RWRpdG9yKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBUZXh0RWRpdG9yLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0ZXh0XCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhUZXh0RWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRleHRFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzJGF1dG9TZWxlYyA9IF90aGlzJHByb3BzLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzJGF1dG9TZWxlYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyRhdXRvU2VsZWM7XG4gICAgICB0aGlzLnRleHQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICAgIGlmIChhdXRvU2VsZWN0VGV4dCkgdGhpcy50ZXh0LnNlbGVjdCgpO1xuICAgICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMyLmRpZE1vdW50LFxuICAgICAgICBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkY2xhc3NOYW0sXG4gICAgICAgIF90aGlzJHByb3BzMiRhdXRvU2VsZSA9IF90aGlzJHByb3BzMi5hdXRvU2VsZWN0VGV4dCxcbiAgICAgICAgYXV0b1NlbGVjdFRleHQgPSBfdGhpcyRwcm9wczIkYXV0b1NlbGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMyJGF1dG9TZWxlLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0XCIpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzMi50ZXh0ID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3NcbiAgICAgIH0sIHJlc3QpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KFRleHRFZGl0b3IsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2xhc3NOYW1lOiBudWxsLFxuICBkZWZhdWx0VmFsdWU6ICcnLFxuICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4gIGRpZE1vdW50OiB1bmRlZmluZWRcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBUZXh0RWRpdG9yOyIsIi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIE9wdGlvbiB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59XG5cbmludGVyZmFjZSBEcm9wRG93bkVkaXRvclByb3BzIHtcbiAgcm93OiBvYmplY3Q7XG4gIGNvbHVtbjogb2JqZWN0O1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBvYmplY3Q7XG4gIG9wdGlvbnM/OiBPcHRpb25bXTtcbiAgZGlkTW91bnQ/OiAoKSA9PiB2b2lkO1xuICBnZXRPcHRpb25zPzogKFxuICAgIHNldE9wdGlvbnM6IChvcHRpb25zOiBPcHRpb25bXSkgPT4gdm9pZCxcbiAgICBjb250ZXh0OiB7IHJvdzogb2JqZWN0OyBjb2x1bW46IG9iamVjdCB9XG4gICkgPT4gT3B0aW9uW10gfCB2b2lkO1xuICBvblVwZGF0ZT86IGFueTtcbn1cblxuaW50ZXJmYWNlIERyb3BEb3duRWRpdG9yU3RhdGUge1xuICBvcHRpb25zOiBPcHRpb25bXTtcbn1cblxuY2xhc3MgRHJvcERvd25FZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQ8XG4gIERyb3BEb3duRWRpdG9yUHJvcHMsXG4gIERyb3BEb3duRWRpdG9yU3RhdGVcbj4ge1xuICBzZWxlY3Q6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBsZXQgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMgPz8gW107XG4gICAgaWYgKHByb3BzLmdldE9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPVxuICAgICAgICBwcm9wcy5nZXRPcHRpb25zKHRoaXMuc2V0T3B0aW9ucy5iaW5kKHRoaXMpLCB7XG4gICAgICAgICAgcm93OiBwcm9wcy5yb3csXG4gICAgICAgICAgY29sdW1uOiBwcm9wcy5jb2x1bW4sXG4gICAgICAgIH0pIHx8IFtdO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0geyBvcHRpb25zIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGRlZmF1bHRWYWx1ZSA9IFwiXCIsIGRpZE1vdW50IH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMuc2VsZWN0LmZvY3VzKCk7XG4gICAgaWYgKGRpZE1vdW50KSB7XG4gICAgICBkaWRNb3VudCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IG9wdGlvbnMgfSk7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QudmFsdWU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gXCJcIixcbiAgICAgIGRpZE1vdW50LFxuICAgICAgZ2V0T3B0aW9ucyxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKGNsYXNzTmFtZSwgXCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtc2VsZWN0XCIpO1xuXG4gICAgY29uc3QgYXR0ciA9IHtcbiAgICAgIC4uLnJlc3QsXG4gICAgICBjbGFzc05hbWU6IGVkaXRvckNsYXNzLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNlbGVjdFxuICAgICAgICB7Li4uYXR0cn1cbiAgICAgICAgcmVmPXsobm9kZSkgPT4geyB0aGlzLnNlbGVjdCA9IG5vZGU7IH19XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5zdGF0ZS5vcHRpb25zLm1hcCgoeyBsYWJlbCwgdmFsdWUgfTogYW55KSA9PiAoXG4gICAgICAgICAgPG9wdGlvbiBrZXk9e3ZhbHVlfSB2YWx1ZT17dmFsdWV9PlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICApKX1cbiAgICAgIDwvc2VsZWN0PlxuICAgICk7XG4gIH1cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGRlZmF1bHRWYWx1ZTogJycsXG4gICAgc3R5bGU6IHt9LFxuICAgIG9wdGlvbnM6IFtdLFxuICAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4gICAgZ2V0T3B0aW9uczogdW5kZWZpbmVkXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyb3BEb3duRWRpdG9yO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImNsYXNzTmFtZVwiLCBcImF1dG9TZWxlY3RUZXh0XCJdO1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciBjbGFzc25hbWVzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsYXNzbmFtZXNcIikpO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBUZXh0QXJlYUVkaXRvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIFRleHRBcmVhRWRpdG9yKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0QXJlYUVkaXRvcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIFRleHRBcmVhRWRpdG9yLCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidGV4dFwiLCB2b2lkIDApO1xuICAgIF90aGlzLmhhbmRsZUtleURvd24gPSBfdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoVGV4dEFyZWFFZGl0b3IsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoVGV4dEFyZWFFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzJGF1dG9TZWxlYyA9IF90aGlzJHByb3BzLmF1dG9TZWxlY3RUZXh0LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCA9IF90aGlzJHByb3BzJGF1dG9TZWxlYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyRhdXRvU2VsZWM7XG4gICAgICB0aGlzLnRleHQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICAgIGlmIChhdXRvU2VsZWN0VGV4dCkgdGhpcy50ZXh0LnNlbGVjdCgpO1xuICAgICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUtleURvd25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlS2V5RG93bihlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiAhZS5zaGlmdEtleSkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25LZXlEb3duKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25LZXlEb3duKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyJGRlZmF1bHRWID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzMi5kaWRNb3VudCxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGNsYXNzTmFtLFxuICAgICAgICBfdGhpcyRwcm9wczIkYXV0b1NlbGUgPSBfdGhpcyRwcm9wczIuYXV0b1NlbGVjdFRleHQsXG4gICAgICAgIGF1dG9TZWxlY3RUZXh0ID0gX3RoaXMkcHJvcHMyJGF1dG9TZWxlID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzMiRhdXRvU2VsZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0YXJlYVwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzMi50ZXh0ID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgY2xhc3NOYW1lOiBlZGl0b3JDbGFzc1xuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShUZXh0QXJlYUVkaXRvciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBjbGFzc05hbWU6IFwiXCIsXG4gIGRlZmF1bHRWYWx1ZTogXCJcIixcbiAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuICBvbktleURvd246IHVuZGVmaW5lZCxcbiAgZGlkTW91bnQ6IHVuZGVmaW5lZFxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFRleHRBcmVhRWRpdG9yOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIEVkaXRvckluZGljYXRvclByb3BzIHtcbiAgaW52YWxpZE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmNvbnN0IEVkaXRvckluZGljYXRvciA9ICh7IGludmFsaWRNZXNzYWdlIH06IEVkaXRvckluZGljYXRvclByb3BzKSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGluXCIgcm9sZT1cImFsZXJ0XCIgZGF0YS10ZXN0aWQ9XCJlZGl0b3ItaW5kaWNhdG9yXCI+XG4gICAgPHN0cm9uZz57aW52YWxpZE1lc3NhZ2V9PC9zdHJvbmc+XG4gIDwvZGl2PlxuKTtcblxuRWRpdG9ySW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW52YWxpZE1lc3NhZ2U6IG51bGwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3JJbmRpY2F0b3I7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBjbGFzcy1tZXRob2RzLXVzZS10aGlzOiAwICovXG4vKiBlc2xpbnQganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEVESVRUWVBFLCBUSU1FX1RPX0NMT1NFX01FU1NBR0UgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCBDaGVja0JveEVkaXRvciBmcm9tIFwiLi9jaGVja2JveC1lZGl0b3JcIjtcbmltcG9ydCBEYXRlRWRpdG9yIGZyb20gXCIuL2RhdGUtZWRpdG9yXCI7XG5pbXBvcnQgRHJvcGRvd25FZGl0b3IgZnJvbSBcIi4vZHJvcGRvd24tZWRpdG9yXCI7XG5pbXBvcnQgRWRpdG9ySW5kaWNhdG9yIGZyb20gXCIuL2VkaXRvci1pbmRpY2F0b3JcIjtcbmltcG9ydCBUZXh0RWRpdG9yIGZyb20gXCIuL3RleHQtZWRpdG9yXCI7XG5pbXBvcnQgVGV4dEFyZWFFZGl0b3IgZnJvbSBcIi4vdGV4dGFyZWEtZWRpdG9yXCI7XG5cbmludGVyZmFjZSBFZGl0aW5nQ2VsbFByb3BzIHtcbiAgcm93OiBvYmplY3Q7XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIGNvbHVtbjoge1xuICAgIGRhdGFGaWVsZDogYW55O1xuICAgIHZhbGlkYXRvcj86IGFueTtcbiAgICBlZGl0b3JDbGFzc2VzPzogYW55O1xuICAgIGVkaXRvclN0eWxlPzogYW55O1xuICAgIGVkaXRvcj86IHsgdHlwZTogYW55OyBvcHRpb25zPzogYW55IH07XG4gICAgZWRpdG9yUmVuZGVyZXI/OiBGdW5jdGlvbjtcbiAgICB0ZXh0OiBhbnk7XG4gIH07XG4gIGNvbHVtbkluZGV4OiBudW1iZXI7XG4gIG9uVXBkYXRlOiAocm93OiBvYmplY3QsIGNvbHVtbjogb2JqZWN0LCB2YWx1ZTogYW55KSA9PiB2b2lkO1xuICBvbkVzY2FwZTogKCkgPT4gdm9pZDtcbiAgdGltZVRvQ2xvc2VNZXNzYWdlPzogbnVtYmVyO1xuICBhdXRvU2VsZWN0VGV4dD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBvYmplY3Q7XG4gIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyPzogYW55O1xuICBibHVyVG9TYXZlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEVkaXRpbmdDZWxsU3RhdGUge1xuICBpbnZhbGlkTWVzc2FnZTogYW55O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoXzogYW55LCBvblN0YXJ0RWRpdD86IGFueSkgPT5cbiAgY2xhc3MgRWRpdGluZ0NlbGwgZXh0ZW5kcyBDb21wb25lbnQ8RWRpdGluZ0NlbGxQcm9wcywgRWRpdGluZ0NlbGxTdGF0ZT4ge1xuXG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBUSU1FX1RPX0NMT1NFX01FU1NBR0UsXG4gICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4gICAgICBzdHlsZToge30sXG4gICAgfTtcblxuICAgIGVkaXRvcjogYW55O1xuICAgIGluZGljYXRvclRpbWVyOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmluZGljYXRvclRpbWVyID0gbnVsbDtcbiAgICAgIHRoaXMuY2xlYXJUaW1lciA9IHRoaXMuY2xlYXJUaW1lci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVCbHVyID0gdGhpcy5oYW5kbGVCbHVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVLZXlEb3duID0gdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmJlZm9yZUNvbXBsZXRlID0gdGhpcy5iZWZvcmVDb21wbGV0ZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5hc3luY2JlZm9yZUNvbXBldGUgPSB0aGlzLmFzeW5jYmVmb3JlQ29tcGV0ZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlID0gdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnZhbGlkTWVzc2FnZTogbnVsbCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoeyBtZXNzYWdlIH06IGFueSkge1xuICAgICAgaWYgKF8uaXNEZWZpbmVkKG1lc3NhZ2UpKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlVGltZXIoKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoe1xuICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lcigpIHtcbiAgICAgIGlmICh0aGlzLmluZGljYXRvclRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluZGljYXRvclRpbWVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVUaW1lcigpIHtcbiAgICAgIHRoaXMuY2xlYXJUaW1lcigpO1xuICAgICAgY29uc3QgeyB0aW1lVG9DbG9zZU1lc3NhZ2UsIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyIH0gPSB0aGlzLnByb3BzO1xuICAgICAgdGhpcy5pbmRpY2F0b3JUaW1lciA9IF8uc2xlZXAoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgICAgaW52YWxpZE1lc3NhZ2U6IG51bGwsXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihvbkVycm9yTWVzc2FnZURpc2FwcGVhcikpIG9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyKCk7XG4gICAgICB9LCB0aW1lVG9DbG9zZU1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGRpc3BsYXlFcnJvck1lc3NhZ2UobWVzc2FnZTogYW55KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIGludmFsaWRNZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5jcmVhdGVUaW1lcigpO1xuICAgIH1cblxuICAgIGFzeW5jYmVmb3JlQ29tcGV0ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgICByZXR1cm4gKHJlc3VsdCA9IHsgdmFsaWQ6IHRydWUgfSkgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIG1lc3NhZ2UgfSA9IHJlc3VsdDtcbiAgICAgICAgY29uc3QgeyBvblVwZGF0ZSwgcm93LCBjb2x1bW4gfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG9uVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGJlZm9yZUNvbXBsZXRlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgb25VcGRhdGUsIHJvdywgY29sdW1uIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4udmFsaWRhdG9yKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZUZvcm0gPSBjb2x1bW4udmFsaWRhdG9yKFxuICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgdGhpcy5hc3luY2JlZm9yZUNvbXBldGUobmV3VmFsdWUpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KHZhbGlkYXRlRm9ybSkpIHtcbiAgICAgICAgICBpZiAodmFsaWRhdGVGb3JtLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIGlmICghdmFsaWRhdGVGb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2UodmFsaWRhdGVGb3JtLm1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb25VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICBoYW5kbGVCbHVyKCkge1xuICAgICAgY29uc3QgeyBvbkVzY2FwZSwgYmx1clRvU2F2ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChibHVyVG9TYXZlKSB7XG4gICAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUodGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkVzY2FwZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUtleURvd24oZTogYW55KSB7XG4gICAgICBjb25zdCB7IG9uRXNjYXBlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgLy8gRVNDXG4gICAgICAgIG9uRXNjYXBlKCk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgLy8gRU5URVJcbiAgICAgICAgdGhpcy5iZWZvcmVDb21wbGV0ZSh0aGlzLmVkaXRvci5nZXRWYWx1ZSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayhlOiBhbnkpIHtcbiAgICAgIGlmIChlLnRhcmdldC50YWdOYW1lICE9PSBcIlREXCIpIHtcbiAgICAgICAgLy8gVG8gYXZvaWQgdGhlIHJvdyBzZWxlY3Rpb24gZXZlbnQgYmUgdHJpZ2dlcmVkLFxuICAgICAgICAvLyBXaGVuIHVzZXIgZGVmaW5lIHNlbGVjdFJvdy5jbGlja1RvU2VsZWN0IGFuZCBzZWxlY3RSb3cuY2xpY2tUb0VkaXRcbiAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHRyaWdnZXIgc2VsZWN0aW9uIGV2ZW50IGV2ZW4gaWYgdXNlciBjbGljayBvbiB0aGUgY2VsbCBlZGl0b3IoaW5wdXQpXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgbGV0IGVkaXRvcjogYW55O1xuICAgICAgY29uc3Qge1xuICAgICAgICByb3csXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgcm93SW5kZXgsXG4gICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICBhdXRvU2VsZWN0VGV4dCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBkYXRhRmllbGQgfSA9IGNvbHVtbjtcblxuICAgICAgY29uc3QgdmFsdWUgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICBjb25zdCBoYXNFcnJvciA9IF8uaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW52YWxpZE1lc3NhZ2UpO1xuXG4gICAgICBsZXQgY3VzdG9tRWRpdG9yQ2xhc3MgPSBjb2x1bW4uZWRpdG9yQ2xhc3NlcyB8fCBcIlwiO1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yQ2xhc3NlcykpIHtcbiAgICAgICAgY3VzdG9tRWRpdG9yQ2xhc3MgPSBjb2x1bW4uZWRpdG9yQ2xhc3NlcyhcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXhcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGVkaXRvclN0eWxlID0gY29sdW1uLmVkaXRvclN0eWxlIHx8IHt9O1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdG9yU3R5bGUpKSB7XG4gICAgICAgIGVkaXRvclN0eWxlID0gY29sdW1uLmVkaXRvclN0eWxlKHZhbHVlLCByb3csIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoXG4gICAgICAgIHtcbiAgICAgICAgICBhbmltYXRlZDogaGFzRXJyb3IsXG4gICAgICAgICAgc2hha2U6IGhhc0Vycm9yLFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21FZGl0b3JDbGFzc1xuICAgICAgKTtcblxuICAgICAgbGV0IGVkaXRvclByb3BzID0ge1xuICAgICAgICByZWY6IChub2RlOiBhbnkpID0+ICh0aGlzLmVkaXRvciA9IG5vZGUpLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHZhbHVlLFxuICAgICAgICBzdHlsZTogZWRpdG9yU3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3MsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duLFxuICAgICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlQmx1cixcbiAgICAgICAgZGlkTW91bnQ6ICgpID0+IHsgfSxcbiAgICAgICAgb25VcGRhdGU6IChuZXdWYWx1ZTogYW55KSA9PiB7IH0sXG4gICAgICB9O1xuXG4gICAgICBpZiAob25TdGFydEVkaXQpIHtcbiAgICAgICAgZWRpdG9yUHJvcHMuZGlkTW91bnQgPSAoKSA9PlxuICAgICAgICAgIG9uU3RhcnRFZGl0KHJvdywgY29sdW1uLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkID0gXy5pc09iamVjdChjb2x1bW4uZWRpdG9yKTtcblxuICAgICAgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQpIHtcbiAgICAgICAgZWRpdG9yUHJvcHMgPSB7XG4gICAgICAgICAgLi4uZWRpdG9yUHJvcHMsXG4gICAgICAgICAgLi4uY29sdW1uLmVkaXRvcixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JSZW5kZXJlcikpIHtcbiAgICAgICAgZWRpdG9yUHJvcHMgPSB7XG4gICAgICAgICAgLi4uZWRpdG9yUHJvcHMsXG4gICAgICAgICAgb25VcGRhdGU6IHRoaXMuYmVmb3JlQ29tcGxldGUsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclJlbmRlcmVyKSkge1xuICAgICAgICBlZGl0b3IgPSBjb2x1bW4uZWRpdG9yUmVuZGVyZXIhKFxuICAgICAgICAgIGVkaXRvclByb3BzLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXhcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiZcbiAgICAgICAgY29sdW1uLmVkaXRvcj8udHlwZSA9PT0gRURJVFRZUEUuU0VMRUNUXG4gICAgICApIHtcbiAgICAgICAgZWRpdG9yID0gPERyb3Bkb3duRWRpdG9yIHsuLi5lZGl0b3JQcm9wc30gcm93PXtyb3d9IGNvbHVtbj17Y29sdW1ufSAvPjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiZcbiAgICAgICAgY29sdW1uLmVkaXRvcj8udHlwZSA9PT0gRURJVFRZUEUuVEVYVEFSRUFcbiAgICAgICkge1xuICAgICAgICBlZGl0b3IgPSAoXG4gICAgICAgICAgPFRleHRBcmVhRWRpdG9yIHsuLi5lZGl0b3JQcm9wc30gYXV0b1NlbGVjdFRleHQ9e2F1dG9TZWxlY3RUZXh0fSAvPlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJlxuICAgICAgICBjb2x1bW4uZWRpdG9yPy50eXBlID09PSBFRElUVFlQRS5DSEVDS0JPWFxuICAgICAgKSB7XG4gICAgICAgIGVkaXRvciA9IDxDaGVja0JveEVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IC8+O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJlxuICAgICAgICBjb2x1bW4uZWRpdG9yPy50eXBlID09PSBFRElUVFlQRS5EQVRFXG4gICAgICApIHtcbiAgICAgICAgZWRpdG9yID0gPERhdGVFZGl0b3Igey4uLmVkaXRvclByb3BzfSAvPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvciA9IChcbiAgICAgICAgICA8VGV4dEVkaXRvciB7Li4uZWRpdG9yUHJvcHN9IGF1dG9TZWxlY3RUZXh0PXthdXRvU2VsZWN0VGV4dH0gLz5cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3NOYW1lPXtjcyhcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1lZGl0aW5nLWNlbGxcIiwgY2xhc3NOYW1lKX1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja31cbiAgICAgICAgPlxuICAgICAgICAgIHtlZGl0b3J9XG4gICAgICAgICAge2hhc0Vycm9yID8gKFxuICAgICAgICAgICAgPEVkaXRvckluZGljYXRvciBpbnZhbGlkTWVzc2FnZT17dGhpcy5zdGF0ZS5pbnZhbGlkTWVzc2FnZX0gLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC90ZD5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgY2xhc3MtbWV0aG9kcy11c2UtdGhpczogMCAqL1xuLyogZXNsaW50IGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG52YXIgY2xhc3NuYW1lc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIGNoZWNrYm94X2VkaXRvcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2NoZWNrYm94LWVkaXRvclwiKSk7XG52YXIgZGF0ZV9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9kYXRlLWVkaXRvclwiKSk7XG52YXIgZHJvcGRvd25fZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZHJvcGRvd24tZWRpdG9yXCIpKTtcbnZhciBlZGl0b3JfaW5kaWNhdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZWRpdG9yLWluZGljYXRvclwiKSk7XG52YXIgdGV4dF9lZGl0b3JfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi90ZXh0LWVkaXRvclwiKSk7XG52YXIgdGV4dGFyZWFfZWRpdG9yXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vdGV4dGFyZWEtZWRpdG9yXCIpKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKF8sIG9uU3RhcnRFZGl0KSB7XG4gIHZhciBfRWRpdGluZ0NlbGw7XG4gIHJldHVybiBfRWRpdGluZ0NlbGwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICAgIGZ1bmN0aW9uIEVkaXRpbmdDZWxsKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRWRpdGluZ0NlbGwpO1xuICAgICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEVkaXRpbmdDZWxsLCBbcHJvcHNdKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJlZGl0b3JcIiwgdm9pZCAwKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbmRpY2F0b3JUaW1lclwiLCB2b2lkIDApO1xuICAgICAgX3RoaXMuaW5kaWNhdG9yVGltZXIgPSBudWxsO1xuICAgICAgX3RoaXMuY2xlYXJUaW1lciA9IF90aGlzLmNsZWFyVGltZXIuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUNsaWNrID0gX3RoaXMuaGFuZGxlQ2xpY2suYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5oYW5kbGVLZXlEb3duID0gX3RoaXMuaGFuZGxlS2V5RG93bi5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmJlZm9yZUNvbXBsZXRlID0gX3RoaXMuYmVmb3JlQ29tcGxldGUuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5hc3luY2JlZm9yZUNvbXBldGUgPSBfdGhpcy5hc3luY2JlZm9yZUNvbXBldGUuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlID0gX3RoaXMuZGlzcGxheUVycm9yTWVzc2FnZS5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnZhbGlkTWVzc2FnZTogbnVsbFxuICAgICAgfTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2luaGVyaXRzKEVkaXRpbmdDZWxsLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICAgIHJldHVybiBfY3JlYXRlQ2xhc3MoRWRpdGluZ0NlbGwsIFt7XG4gICAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShfcmVmKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gX3JlZi5tZXNzYWdlO1xuICAgICAgICBpZiAoXy5pc0RlZmluZWQobWVzc2FnZSkpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVRpbWVyKCk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogbWVzc2FnZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjbGVhclRpbWVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kaWNhdG9yVGltZXIpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5pbmRpY2F0b3JUaW1lcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY3JlYXRlVGltZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGVUaW1lcigpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lcigpO1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHRpbWVUb0Nsb3NlTWVzc2FnZSA9IF90aGlzJHByb3BzLnRpbWVUb0Nsb3NlTWVzc2FnZSxcbiAgICAgICAgICBvbkVycm9yTWVzc2FnZURpc2FwcGVhciA9IF90aGlzJHByb3BzLm9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyO1xuICAgICAgICB0aGlzLmluZGljYXRvclRpbWVyID0gXy5zbGVlcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGludmFsaWRNZXNzYWdlOiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ob25FcnJvck1lc3NhZ2VEaXNhcHBlYXIpKSBvbkVycm9yTWVzc2FnZURpc2FwcGVhcigpO1xuICAgICAgICB9LCB0aW1lVG9DbG9zZU1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkaXNwbGF5RXJyb3JNZXNzYWdlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZGlzcGxheUVycm9yTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbnZhbGlkTWVzc2FnZTogbWVzc2FnZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNyZWF0ZVRpbWVyKCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImFzeW5jYmVmb3JlQ29tcGV0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzeW5jYmVmb3JlQ29tcGV0ZShuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7XG4gICAgICAgICAgICB2YWxpZDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHZhciB2YWxpZCA9IHJlc3VsdC52YWxpZCxcbiAgICAgICAgICAgIG1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZTtcbiAgICAgICAgICB2YXIgX3RoaXMzJHByb3BzID0gX3RoaXMzLnByb3BzLFxuICAgICAgICAgICAgb25VcGRhdGUgPSBfdGhpczMkcHJvcHMub25VcGRhdGUsXG4gICAgICAgICAgICByb3cgPSBfdGhpczMkcHJvcHMucm93LFxuICAgICAgICAgICAgY29sdW1uID0gX3RoaXMzJHByb3BzLmNvbHVtbjtcbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICBfdGhpczMuZGlzcGxheUVycm9yTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgb25VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiYmVmb3JlQ29tcGxldGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBiZWZvcmVDb21wbGV0ZShuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgICByb3cgPSBfdGhpcyRwcm9wczIucm93LFxuICAgICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzMi5jb2x1bW47XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLnZhbGlkYXRvcikpIHtcbiAgICAgICAgICB2YXIgdmFsaWRhdGVGb3JtID0gY29sdW1uLnZhbGlkYXRvcihuZXdWYWx1ZSwgcm93LCBjb2x1bW4sIHRoaXMuYXN5bmNiZWZvcmVDb21wZXRlKG5ld1ZhbHVlKSk7XG4gICAgICAgICAgaWYgKF8uaXNPYmplY3QodmFsaWRhdGVGb3JtKSkge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlRm9ybS5hc3luYykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZGF0ZUZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlKHZhbGlkYXRlRm9ybS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJoYW5kbGVCbHVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cigpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgb25Fc2NhcGUgPSBfdGhpcyRwcm9wczMub25Fc2NhcGUsXG4gICAgICAgICAgYmx1clRvU2F2ZSA9IF90aGlzJHByb3BzMy5ibHVyVG9TYXZlO1xuICAgICAgICBpZiAoYmx1clRvU2F2ZSkge1xuICAgICAgICAgIHRoaXMuYmVmb3JlQ29tcGxldGUodGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25Fc2NhcGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJoYW5kbGVLZXlEb3duXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlS2V5RG93bihlKSB7XG4gICAgICAgIHZhciBvbkVzY2FwZSA9IHRoaXMucHJvcHMub25Fc2NhcGU7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgLy8gRVNDXG4gICAgICAgICAgb25Fc2NhcGUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgLy8gRU5URVJcbiAgICAgICAgICB0aGlzLmJlZm9yZUNvbXBsZXRlKHRoaXMuZWRpdG9yLmdldFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImhhbmRsZUNsaWNrXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZSkge1xuICAgICAgICBpZiAoZS50YXJnZXQudGFnTmFtZSAhPT0gXCJURFwiKSB7XG4gICAgICAgICAgLy8gVG8gYXZvaWQgdGhlIHJvdyBzZWxlY3Rpb24gZXZlbnQgYmUgdHJpZ2dlcmVkLFxuICAgICAgICAgIC8vIFdoZW4gdXNlciBkZWZpbmUgc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgYW5kIHNlbGVjdFJvdy5jbGlja1RvRWRpdFxuICAgICAgICAgIC8vIFdlIHNob3VsZG4ndCB0cmlnZ2VyIHNlbGVjdGlvbiBldmVudCBldmVuIGlmIHVzZXIgY2xpY2sgb24gdGhlIGNlbGwgZWRpdG9yKGlucHV0KVxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcyxcbiAgICAgICAgICBfY29sdW1uJGVkaXRvcixcbiAgICAgICAgICBfY29sdW1uJGVkaXRvcjIsXG4gICAgICAgICAgX2NvbHVtbiRlZGl0b3IzLFxuICAgICAgICAgIF9jb2x1bW4kZWRpdG9yNDtcbiAgICAgICAgdmFyIGVkaXRvcjtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgcm93ID0gX3RoaXMkcHJvcHM0LnJvdyxcbiAgICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczQuY29sdW1uLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNC5jbGFzc05hbWUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczQuc3R5bGUsXG4gICAgICAgICAgcm93SW5kZXggPSBfdGhpcyRwcm9wczQucm93SW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXggPSBfdGhpcyRwcm9wczQuY29sdW1uSW5kZXgsXG4gICAgICAgICAgYXV0b1NlbGVjdFRleHQgPSBfdGhpcyRwcm9wczQuYXV0b1NlbGVjdFRleHQ7XG4gICAgICAgIHZhciBkYXRhRmllbGQgPSBjb2x1bW4uZGF0YUZpZWxkO1xuICAgICAgICB2YXIgdmFsdWUgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICAgIHZhciBoYXNFcnJvciA9IF8uaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW52YWxpZE1lc3NhZ2UpO1xuICAgICAgICB2YXIgY3VzdG9tRWRpdG9yQ2xhc3MgPSBjb2x1bW4uZWRpdG9yQ2xhc3NlcyB8fCBcIlwiO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGNvbHVtbi5lZGl0b3JDbGFzc2VzKSkge1xuICAgICAgICAgIGN1c3RvbUVkaXRvckNsYXNzID0gY29sdW1uLmVkaXRvckNsYXNzZXModmFsdWUsIHJvdywgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWRpdG9yU3R5bGUgPSBjb2x1bW4uZWRpdG9yU3R5bGUgfHwge307XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclN0eWxlKSkge1xuICAgICAgICAgIGVkaXRvclN0eWxlID0gY29sdW1uLmVkaXRvclN0eWxlKHZhbHVlLCByb3csIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVkaXRvckNsYXNzID0gKDAsIGNsYXNzbmFtZXNfMVtcImRlZmF1bHRcIl0pKHtcbiAgICAgICAgICBhbmltYXRlZDogaGFzRXJyb3IsXG4gICAgICAgICAgc2hha2U6IGhhc0Vycm9yXG4gICAgICAgIH0sIGN1c3RvbUVkaXRvckNsYXNzKTtcbiAgICAgICAgdmFyIGVkaXRvclByb3BzID0ge1xuICAgICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuZWRpdG9yID0gbm9kZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgc3R5bGU6IGVkaXRvclN0eWxlLFxuICAgICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3MsXG4gICAgICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZUtleURvd24sXG4gICAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXG4gICAgICAgICAgZGlkTW91bnQ6IGZ1bmN0aW9uIGRpZE1vdW50KCkge30sXG4gICAgICAgICAgb25VcGRhdGU6IGZ1bmN0aW9uIG9uVXBkYXRlKG5ld1ZhbHVlKSB7fVxuICAgICAgICB9O1xuICAgICAgICBpZiAob25TdGFydEVkaXQpIHtcbiAgICAgICAgICBlZGl0b3JQcm9wcy5kaWRNb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBvblN0YXJ0RWRpdChyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc0RlZmF1bHRFZGl0b3JEZWZpbmVkID0gXy5pc09iamVjdChjb2x1bW4uZWRpdG9yKTtcbiAgICAgICAgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQpIHtcbiAgICAgICAgICBlZGl0b3JQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpLCBjb2x1bW4uZWRpdG9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclJlbmRlcmVyKSkge1xuICAgICAgICAgIGVkaXRvclByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcyksIHt9LCB7XG4gICAgICAgICAgICBvblVwZGF0ZTogdGhpcy5iZWZvcmVDb21wbGV0ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29sdW1uLmVkaXRvclJlbmRlcmVyKSkge1xuICAgICAgICAgIGVkaXRvciA9IGNvbHVtbi5lZGl0b3JSZW5kZXJlcihlZGl0b3JQcm9wcywgdmFsdWUsIHJvdywgY29sdW1uLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmYXVsdEVkaXRvckRlZmluZWQgJiYgKChfY29sdW1uJGVkaXRvciA9IGNvbHVtbi5lZGl0b3IpID09PSBudWxsIHx8IF9jb2x1bW4kZWRpdG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJGVkaXRvci50eXBlKSA9PT0gX18xLkVESVRUWVBFLlNFTEVDVCkge1xuICAgICAgICAgIGVkaXRvciA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoZHJvcGRvd25fZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwge30sIHtcbiAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgY29sdW1uOiBjb2x1bW5cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJiAoKF9jb2x1bW4kZWRpdG9yMiA9IGNvbHVtbi5lZGl0b3IpID09PSBudWxsIHx8IF9jb2x1bW4kZWRpdG9yMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NvbHVtbiRlZGl0b3IyLnR5cGUpID09PSBfXzEuRURJVFRZUEUuVEVYVEFSRUEpIHtcbiAgICAgICAgICBlZGl0b3IgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KHRleHRhcmVhX2VkaXRvcl8xW1wiZGVmYXVsdFwiXSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlZGl0b3JQcm9wcyksIHt9LCB7XG4gICAgICAgICAgICBhdXRvU2VsZWN0VGV4dDogYXV0b1NlbGVjdFRleHRcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWZhdWx0RWRpdG9yRGVmaW5lZCAmJiAoKF9jb2x1bW4kZWRpdG9yMyA9IGNvbHVtbi5lZGl0b3IpID09PSBudWxsIHx8IF9jb2x1bW4kZWRpdG9yMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NvbHVtbiRlZGl0b3IzLnR5cGUpID09PSBfXzEuRURJVFRZUEUuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICBlZGl0b3IgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KGNoZWNrYm94X2VkaXRvcl8xW1wiZGVmYXVsdFwiXSwgX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZmF1bHRFZGl0b3JEZWZpbmVkICYmICgoX2NvbHVtbiRlZGl0b3I0ID0gY29sdW1uLmVkaXRvcikgPT09IG51bGwgfHwgX2NvbHVtbiRlZGl0b3I0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJGVkaXRvcjQudHlwZSkgPT09IF9fMS5FRElUVFlQRS5EQVRFKSB7XG4gICAgICAgICAgZWRpdG9yID0gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChkYXRlX2VkaXRvcl8xW1wiZGVmYXVsdFwiXSwgX29iamVjdFNwcmVhZCh7fSwgZWRpdG9yUHJvcHMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlZGl0b3IgPSByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KHRleHRfZWRpdG9yXzFbXCJkZWZhdWx0XCJdLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVkaXRvclByb3BzKSwge30sIHtcbiAgICAgICAgICAgIGF1dG9TZWxlY3RUZXh0OiBhdXRvU2VsZWN0VGV4dFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInRkXCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICgwLCBjbGFzc25hbWVzXzFbXCJkZWZhdWx0XCJdKShcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1lZGl0aW5nLWNlbGxcIiwgY2xhc3NOYW1lKSxcbiAgICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDbGlja1xuICAgICAgICB9LCBlZGl0b3IsIGhhc0Vycm9yID8gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChlZGl0b3JfaW5kaWNhdG9yXzFbXCJkZWZhdWx0XCJdLCB7XG4gICAgICAgICAgaW52YWxpZE1lc3NhZ2U6IHRoaXMuc3RhdGUuaW52YWxpZE1lc3NhZ2VcbiAgICAgICAgfSkgOiBudWxsKTtcbiAgICAgIH1cbiAgICB9XSk7XG4gIH0ocmVhY3RfMS5Db21wb25lbnQpLCBfZGVmaW5lUHJvcGVydHkoX0VkaXRpbmdDZWxsLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gICAgdGltZVRvQ2xvc2VNZXNzYWdlOiBfXzEuVElNRV9UT19DTE9TRV9NRVNTQUdFLFxuICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4gICAgc3R5bGU6IHt9XG4gIH0pLCBfRWRpdGluZ0NlbGw7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIGNvbnRleHRfMSA9IHJlcXVpcmUoXCIuL2NvbnRleHRcIik7XG52YXIgZWRpdGluZ19jZWxsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZWRpdGluZy1jZWxsXCIpKTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKF8sIG9uU3RhcnRFZGl0KSB7XG4gIHZhciBFZGl0aW5nQ2VsbCA9ICgwLCBlZGl0aW5nX2NlbGxfMVtcImRlZmF1bHRcIl0pKF8sIG9uU3RhcnRFZGl0KTtcbiAgdmFyIHJlbmRlcldpdGhFZGl0aW5nQ2VsbCA9IGZ1bmN0aW9uIHJlbmRlcldpdGhFZGl0aW5nQ2VsbChwcm9wcywgY2VsbEVkaXQpIHtcbiAgICB2YXIgY29udGVudCA9IF8uZ2V0KHByb3BzLnJvdywgcHJvcHMuY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgdmFyIGVkaXRDZWxsc3R5bGUgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxTdHlsZSB8fCB7fTtcbiAgICB2YXIgZWRpdENlbGxjbGFzc2VzID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3NlcztcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlKSkge1xuICAgICAgZWRpdENlbGxzdHlsZSA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlKGNvbnRlbnQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgsIHByb3BzLmNvbHVtbkluZGV4KTtcbiAgICB9XG4gICAgaWYgKF8uaXNGdW5jdGlvbihwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzKSkge1xuICAgICAgZWRpdENlbGxjbGFzc2VzID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsQ2xhc3Nlcyhjb250ZW50LCBwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4LCBwcm9wcy5jb2x1bW5JbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KEVkaXRpbmdDZWxsLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogZWRpdENlbGxjbGFzc2VzLFxuICAgICAgc3R5bGU6IGVkaXRDZWxsc3R5bGVcbiAgICB9LCBjZWxsRWRpdCkpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoY29udGV4dF8xLkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY2VsbEVkaXQpIHtcbiAgICAgIHJldHVybiByZW5kZXJXaXRoRWRpdGluZ0NlbGwocHJvcHMsIGNlbGxFZGl0KTtcbiAgICB9KTtcbiAgfTtcbn07IiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENvbnN1bWVyIH0gZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IGNyZWF0ZUVkaXRpbmdDZWxsIGZyb20gXCIuL2VkaXRpbmctY2VsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoXzogYW55LCBvblN0YXJ0RWRpdD86IGFueSkgPT4ge1xuICBjb25zdCBFZGl0aW5nQ2VsbCA9IGNyZWF0ZUVkaXRpbmdDZWxsKF8sIG9uU3RhcnRFZGl0KTtcbiAgY29uc3QgcmVuZGVyV2l0aEVkaXRpbmdDZWxsID0gKHByb3BzOiBhbnksIGNlbGxFZGl0OiBhbnkpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocHJvcHMucm93LCBwcm9wcy5jb2x1bW4uZGF0YUZpZWxkKTtcbiAgICBsZXQgZWRpdENlbGxzdHlsZSA9IHByb3BzLmNvbHVtbi5lZGl0Q2VsbFN0eWxlIHx8IHt9O1xuICAgIGxldCBlZGl0Q2VsbGNsYXNzZXMgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzO1xuICAgIGlmIChfLmlzRnVuY3Rpb24ocHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUpKSB7XG4gICAgICBlZGl0Q2VsbHN0eWxlID0gcHJvcHMuY29sdW1uLmVkaXRDZWxsU3R5bGUoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHByb3BzLnJvdyxcbiAgICAgICAgcHJvcHMucm93SW5kZXgsXG4gICAgICAgIHByb3BzLmNvbHVtbkluZGV4XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHByb3BzLmNvbHVtbi5lZGl0Q2VsbENsYXNzZXMpKSB7XG4gICAgICBlZGl0Q2VsbGNsYXNzZXMgPSBwcm9wcy5jb2x1bW4uZWRpdENlbGxDbGFzc2VzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBwcm9wcy5yb3csXG4gICAgICAgIHByb3BzLnJvd0luZGV4LFxuICAgICAgICBwcm9wcy5jb2x1bW5JbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEVkaXRpbmdDZWxsXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0Q2VsbGNsYXNzZXN9XG4gICAgICAgIHN0eWxlPXtlZGl0Q2VsbHN0eWxlfVxuICAgICAgICB7Li4uY2VsbEVkaXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChwcm9wczogYW55KSA9PiAoXG4gICAgPENvbnN1bWVyPnsoY2VsbEVkaXQpID0+IHJlbmRlcldpdGhFZGl0aW5nQ2VsbChwcm9wcywgY2VsbEVkaXQpfTwvQ29uc3VtZXI+XG4gICk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBUZXh0RWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbiAgYXV0b1NlbGVjdFRleHQ/OiBib29sZWFuO1xuICBkaWRNb3VudD86ICgpID0+IHZvaWQ7XG4gIG9uS2V5RG93bjogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFRleHRBcmVhRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50PFRleHRFZGl0b3JQcm9wcz4ge1xuICB0ZXh0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUZXh0RWRpdG9yUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVLZXlEb3duID0gdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQodGhpcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBudWxsLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMudGV4dC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLnRleHQuZm9jdXMoKTtcbiAgICBpZiAoYXV0b1NlbGVjdFRleHQpIHRoaXMudGV4dC5zZWxlY3QoKTtcbiAgICBpZiAoZGlkTW91bnQpIGRpZE1vdW50KCk7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0LnZhbHVlO1xuICB9XG5cbiAgaGFuZGxlS2V5RG93bihlOiBhbnkpIHtcbiAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiAhZS5zaGlmdEtleSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnByb3BzLm9uS2V5RG93bikge1xuICAgICAgdGhpcy5wcm9wcy5vbktleURvd24oZSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFwiXCIsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBhdXRvU2VsZWN0VGV4dCA9IGZhbHNlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0YXJlYVwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIHJlZj17KG5vZGUpID0+IHsgdGhpcy50ZXh0ID0gbm9kZTsgfX1cbiAgICAgICAgLy8gdHlwZT1cInRleHRhcmVhXCJcbiAgICAgICAgY2xhc3NOYW1lPXtlZGl0b3JDbGFzc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlEb3dufVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIlwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcbiAgICBhdXRvU2VsZWN0VGV4dDogZmFsc2UsXG4gICAgb25LZXlEb3duOiB1bmRlZmluZWQsXG4gICAgZGlkTW91bnQ6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dEFyZWFFZGl0b3I7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuLyogZXNsaW50IHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzOiAwICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIENMSUNLX1RPX0NFTExfRURJVCxcbiAgQ2VsbEVkaXRQcm92aWRlclByb3BzLFxuICBDZWxsRWRpdFByb3ZpZGVyU3RhdGUsXG4gIERCQ0xJQ0tfVE9fQ0VMTF9FRElULFxufSBmcm9tIFwiLi5cIjtcblxuY29uc3QgQ2VsbEVkaXRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG5leHBvcnQgZGVmYXVsdCAoXG4gIF86IGFueSxcbiAgZGF0YU9wZXJhdG9yPzogYW55LFxuICBpc1JlbW90ZUNlbGxFZGl0PzogYW55LFxuICBoYW5kbGVDZWxsQ2hhbmdlPzogYW55XG4pID0+IHtcbiAgY2xhc3MgQ2VsbEVkaXRQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgICBDZWxsRWRpdFByb3ZpZGVyUHJvcHMsXG4gICAgQ2VsbEVkaXRQcm92aWRlclN0YXRlXG4gID4ge1xuXG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmRvVXBkYXRlID0gdGhpcy5kb1VwZGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5zdGFydEVkaXRpbmcgPSB0aGlzLnN0YXJ0RWRpdGluZy5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5lc2NhcGVFZGl0aW5nID0gdGhpcy5lc2NhcGVFZGl0aW5nLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmNvbXBsZXRlRWRpdGluZyA9IHRoaXMuY29tcGxldGVFZGl0aW5nLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmhhbmRsZUNlbGxVcGRhdGUgPSB0aGlzLmhhbmRsZUNlbGxVcGRhdGUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgIGNpZHg6IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgICBpZiAoXG4gICAgICAgIG5leHRQcm9wcy5jZWxsRWRpdCAmJlxuICAgICAgICBfLmlzRnVuY3Rpb24oaXNSZW1vdGVDZWxsRWRpdCkgJiZcbiAgICAgICAgaXNSZW1vdGVDZWxsRWRpdCgpXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5leHRQcm9wcy5jZWxsRWRpdC5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBuZXh0UHJvcHMuY2VsbEVkaXQub3B0aW9ucy5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmlkeDogcHJldlN0YXRlLnJpZHgsXG4gICAgICAgICAgICBjaWR4OiBwcmV2U3RhdGUuY2lkeCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2VsbFVwZGF0ZShyb3c6IGFueSwgY29sdW1uOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlV2l0aFR5cGUgPSBkYXRhT3BlcmF0b3IudHlwZUNvbnZlcnQoY29sdW1uLnR5cGUsIG5ld1ZhbHVlKTtcbiAgICAgIGNvbnN0IHsgY2VsbEVkaXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGJlZm9yZVNhdmVDZWxsIH0gPSBjZWxsRWRpdC5vcHRpb25zO1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgY29uc3QgYmVmb3JlU2F2ZUNlbGxEb25lID0gKHJlc3VsdCA9IHRydWUpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHRoaXMuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXNjYXBlRWRpdGluZygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihiZWZvcmVTYXZlQ2VsbCkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYmVmb3JlU2F2ZUNlbGwoXG4gICAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgICAgbmV3VmFsdWVXaXRoVHlwZSxcbiAgICAgICAgICByb3csXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIGJlZm9yZVNhdmVDZWxsRG9uZVxuICAgICAgICApO1xuICAgICAgICBpZiAoXy5pc09iamVjdChyZXN1bHQpICYmIHJlc3VsdC5hc3luYykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5kb1VwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWVXaXRoVHlwZSk7XG4gICAgfVxuXG4gICAgZG9VcGRhdGUocm93OiBhbnksIGNvbHVtbjogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgICBjb25zdCB7IGtleUZpZWxkLCBjZWxsRWRpdCwgZGF0YSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgYWZ0ZXJTYXZlQ2VsbCB9ID0gY2VsbEVkaXQub3B0aW9ucztcbiAgICAgIGNvbnN0IHJvd0lkID0gXy5nZXQocm93LCBrZXlGaWVsZCk7XG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICBpZiAoaXNSZW1vdGVDZWxsRWRpdCgpKSB7XG4gICAgICAgIGhhbmRsZUNlbGxDaGFuZ2Uocm93SWQsIGNvbHVtbi5kYXRhRmllbGQsIG5ld1ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGFPcGVyYXRvci5lZGl0Q2VsbChcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgIHJvd0lkLFxuICAgICAgICAgIGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgICAgbmV3VmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihhZnRlclNhdmVDZWxsKSkge1xuICAgICAgICAgIGFmdGVyU2F2ZUNlbGwob2xkVmFsdWUsIG5ld1ZhbHVlLCByb3csIGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wbGV0ZUVkaXRpbmcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wbGV0ZUVkaXRpbmcoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgIGNpZHg6IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgc3RhcnRFZGl0aW5nKHJpZHg6IGFueSwgY2lkeDogYW55KSB7XG4gICAgICBjb25zdCBlZGl0aW5nID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgICAgcmlkeCxcbiAgICAgICAgICBjaWR4LFxuICAgICAgICB9KSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7IHNlbGVjdFJvdyB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICghc2VsZWN0Um93IHx8IHNlbGVjdFJvdy5jbGlja1RvRWRpdCB8fCAhc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QpIHtcbiAgICAgICAgZWRpdGluZygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVzY2FwZUVkaXRpbmcoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7XG4gICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgIGNpZHg6IG51bGwsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjZWxsRWRpdDoge1xuICAgICAgICAgIG9wdGlvbnM6IHsgbm9uRWRpdGFibGVSb3dzLCBlcnJvck1lc3NhZ2UsIC4uLm9wdGlvbnNSZXN0IH0sXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHJpZHg6IHByb3BSaWR4LFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBjaWR4OiBwcm9wQ2lkeCxcbiAgICAgICAgICAuLi5jZWxsRWRpdFJlc3RcbiAgICAgICAgfSxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBuZXdDZWxsRWRpdCA9IHtcbiAgICAgICAgLi4ub3B0aW9uc1Jlc3QsXG4gICAgICAgIC4uLmNlbGxFZGl0UmVzdCxcbiAgICAgICAgcmlkeDogdGhpcy5zdGF0ZS5yaWR4ICE9PSBudWxsID8gdGhpcy5zdGF0ZS5yaWR4IDogKHByb3BSaWR4ID8/IG51bGwpLFxuICAgICAgICBjaWR4OiB0aGlzLnN0YXRlLmNpZHggIT09IG51bGwgPyB0aGlzLnN0YXRlLmNpZHggOiAocHJvcENpZHggPz8gbnVsbCksXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RhdGUubWVzc2FnZSxcbiAgICAgICAgbm9uRWRpdGFibGVSb3dzOiBfLmlzRGVmaW5lZChub25FZGl0YWJsZVJvd3MpID8gbm9uRWRpdGFibGVSb3dzKCkgOiBbXSxcbiAgICAgICAgYXRzdGFydDogdGhpcy5zdGFydEVkaXRpbmcsXG4gICAgICAgIG9uRXNjYXBlOiB0aGlzLmVzY2FwZUVkaXRpbmcsXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLmhhbmRsZUNlbGxVcGRhdGUsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q2VsbEVkaXRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IC4uLm5ld0NlbGxFZGl0IH19PlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8L0NlbGxFZGl0Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgUHJvdmlkZXI6IENlbGxFZGl0UHJvdmlkZXIsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgQ29uc3VtZXIgPSBDZWxsRWRpdENvbnRleHQuQ29uc3VtZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRWYWx1ZVwiLCBcImRpZE1vdW50XCIsIFwiY2xhc3NOYW1lXCIsIFwib25VcGRhdGVcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7IGlmIChyKSB7IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkociwgYSk7IHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7IHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwOyB9IH1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHsgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpOyBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTsgcmV0dXJuIG47IH1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7IHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07IGlmIChudWxsICE9IHQpIHsgdmFyIGUsIG4sIGksIHUsIGEgPSBbXSwgZiA9ICEwLCBvID0gITE7IHRyeSB7IGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHsgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOyBmID0gITE7IH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsgfSBjYXRjaCAocikgeyBvID0gITAsIG4gPSByOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47IH0gZmluYWxseSB7IGlmIChvKSB0aHJvdyBuOyB9IH0gcmV0dXJuIGE7IH0gfVxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHsgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xudmFyIGNsYXNzbmFtZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xhc3NuYW1lc1wiKSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIENoZWNrQm94RWRpdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gQ2hlY2tCb3hFZGl0b3IocHJvcHMpIHtcbiAgICB2YXIgX3Byb3BzJGRlZmF1bHRWYWx1ZSwgX3Byb3BzJHZhbHVlO1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2hlY2tCb3hFZGl0b3IpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBDaGVja0JveEVkaXRvciwgW3Byb3BzXSk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNoZWNrYm94XCIsIHZvaWQgMCk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjaGVja2VkOiAoKF9wcm9wcyRkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF9wcm9wcyRkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IF9wcm9wcyRkZWZhdWx0VmFsdWUgOiBmYWxzZSkudG9TdHJpbmcoKSA9PT0gKChfcHJvcHMkdmFsdWUgPSBwcm9wcy52YWx1ZSkgIT09IG51bGwgJiYgX3Byb3BzJHZhbHVlICE9PSB2b2lkIDAgPyBfcHJvcHMkdmFsdWUgOiBcIm9uOm9mZlwiKS5zcGxpdChcIjpcIilbMF1cbiAgICB9O1xuICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IF90aGlzLmhhbmRsZUNoYW5nZS5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKENoZWNrQm94RWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKENoZWNrQm94RWRpdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBkaWRNb3VudCA9IHRoaXMucHJvcHMuZGlkTW91bnQ7XG4gICAgICB0aGlzLmNoZWNrYm94LmZvY3VzKCk7XG4gICAgICBpZiAoZGlkTW91bnQpIGRpZE1vdW50KCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJHZhbHVlO1xuICAgICAgdmFyIF9zcGxpdCA9ICgoX3RoaXMkcHJvcHMkdmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlKSAhPT0gbnVsbCAmJiBfdGhpcyRwcm9wcyR2YWx1ZSAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkdmFsdWUgOiBcIm9uOm9mZlwiKS5zcGxpdChcIjpcIiksXG4gICAgICAgIF9zcGxpdDIgPSBfc2xpY2VkVG9BcnJheShfc3BsaXQsIDIpLFxuICAgICAgICBwb3NpdGl2ZSA9IF9zcGxpdDJbMF0sXG4gICAgICAgIG5lZ2F0aXZlID0gX3NwbGl0MlsxXTtcbiAgICAgIHJldHVybiB0aGlzLmNoZWNrYm94LmNoZWNrZWQgPyBwb3NpdGl2ZSA6IG5lZ2F0aXZlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVDaGFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGUpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKGUpO1xuICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hlY2tlZDogdGFyZ2V0LmNoZWNrZWRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQsXG4gICAgICAgIF90aGlzJHByb3BzJGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMkY2xhc3NOYW1lID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMkY2xhc3NOYW1lLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzLm9uVXBkYXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIGVkaXRvckNsYXNzID0gKDAsIGNsYXNzbmFtZXNfMVtcImRlZmF1bHRcIl0pKFwiZWRpdG9yIGVkaXQtY2hzZWNrYm94IGNoZWNrYm94XCIsIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICBfdGhpczIuY2hlY2tib3ggPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3NcbiAgICAgIH0sIHJlc3QpLCB7fSwge1xuICAgICAgICBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWQsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoQ2hlY2tCb3hFZGl0b3IsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICB2YWx1ZTogXCJvbjpvZmZcIixcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgb25DaGFuZ2U6IHVuZGVmaW5lZCxcbiAgZGlkTW91bnQ6IHVuZGVmaW5lZFxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENoZWNrQm94RWRpdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlR5cGUgPSBleHBvcnRzLkVESVRUWVBFID0gZXhwb3J0cy5EQkNMSUNLX1RPX0NFTExfRURJVCA9IGV4cG9ydHMuQ0xJQ0tfVE9fQ0VMTF9FRElUID0gZXhwb3J0cy5ERUxBWV9GT1JfREJDTElDSyA9IGV4cG9ydHMuVElNRV9UT19DTE9TRV9NRVNTQUdFID0gdm9pZCAwO1xudmFyIGNvbnRleHRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29udGV4dFwiKSk7XG52YXIgZWRpdGluZ19jZWxsX2NvbnN1bWVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL2VkaXRpbmctY2VsbC1jb25zdW1lclwiKSk7XG52YXIgcm93X2NvbnN1bWVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL3Jvdy1jb25zdW1lclwiKSk7XG5leHBvcnRzLlRJTUVfVE9fQ0xPU0VfTUVTU0FHRSA9IDMwMDA7XG5leHBvcnRzLkRFTEFZX0ZPUl9EQkNMSUNLID0gMjAwO1xuZXhwb3J0cy5DTElDS19UT19DRUxMX0VESVQgPSBcImNsaWNrXCI7XG5leHBvcnRzLkRCQ0xJQ0tfVE9fQ0VMTF9FRElUID0gXCJkYmNsaWNrXCI7XG5leHBvcnRzLkVESVRUWVBFID0ge1xuICBURVhUOiBcInRleHRcIixcbiAgU0VMRUNUOiBcInNlbGVjdFwiLFxuICBURVhUQVJFQTogXCJ0ZXh0YXJlYVwiLFxuICBDSEVDS0JPWDogXCJjaGVja2JveFwiLFxuICBEQVRFOiBcImRhdGVcIlxufTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgY3JlYXRlQ29udGV4dDogY29udGV4dF8xW1wiZGVmYXVsdFwiXSxcbiAgICBjcmVhdGVFZGl0aW5nQ2VsbDogZWRpdGluZ19jZWxsX2NvbnN1bWVyXzFbXCJkZWZhdWx0XCJdLFxuICAgIHdpdGhSb3dMZXZlbENlbGxFZGl0OiByb3dfY29uc3VtZXJfMVtcImRlZmF1bHRcIl0sXG4gICAgREJDTElDS19UT19DRUxMX0VESVQ6IGV4cG9ydHMuREJDTElDS19UT19DRUxMX0VESVQsXG4gICAgREVMQVlfRk9SX0RCQ0xJQ0s6IGV4cG9ydHMuREVMQVlfRk9SX0RCQ0xJQ0ssXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9O1xufTtcbmV4cG9ydHMuVHlwZSA9IGV4cG9ydHMuRURJVFRZUEU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxudmFyIF9faW1wb3J0RGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydERlZmF1bHQgfHwgZnVuY3Rpb24gKG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIFwiZGVmYXVsdFwiOiBtb2RcbiAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIGNvbnRleHRfMSA9IHJlcXVpcmUoXCIuL2NvbnRleHRcIik7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChDb21wb25lbnQsIHNlbGVjdFJvd0VuYWJsZWQpIHtcbiAgdmFyIHJlbmRlcldpdGhDZWxsRWRpdCA9IGZ1bmN0aW9uIHJlbmRlcldpdGhDZWxsRWRpdChwcm9wcywgY2VsbEVkaXQpIHtcbiAgICB2YXIga2V5ID0gcHJvcHMudmFsdWU7XG4gICAgdmFyIGVkaXRhYmxlUm93ID0gIShjZWxsRWRpdC5ub25FZGl0YWJsZVJvd3MubGVuZ3RoID4gMCAmJiBjZWxsRWRpdC5ub25FZGl0YWJsZVJvd3MuaW5kZXhPZihrZXkpID4gLTEpO1xuICAgIHZhciBhdHRycyA9IHt9O1xuICAgIGlmIChzZWxlY3RSb3dFbmFibGVkICYmIGNlbGxFZGl0Lm1vZGUgPT09IF9fMS5EQkNMSUNLX1RPX0NFTExfRURJVCkge1xuICAgICAgYXR0cnMuREVMQVlfRk9SX0RCQ0xJQ0sgPSBfXzEuREVMQVlfRk9SX0RCQ0xJQ0s7XG4gICAgfVxuICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwgYXR0cnMpLCB7fSwge1xuICAgICAgZWRpdGluZ1Jvd0lkeDogY2VsbEVkaXQucmlkeCxcbiAgICAgIGVkaXRpbmdDb2xJZHg6IGNlbGxFZGl0LmNpZHgsXG4gICAgICBpc0VkaXRhYmxlOiBlZGl0YWJsZVJvdyxcbiAgICAgIGF0c3RhcnQ6IGNlbGxFZGl0LmF0c3RhcnQsXG4gICAgICBjbGlja1RvRWRpdDogY2VsbEVkaXQubW9kZSA9PT0gX18xLkNMSUNLX1RPX0NFTExfRURJVCxcbiAgICAgIGRiY2xpY2tUb0VkaXQ6IGNlbGxFZGl0Lm1vZGUgPT09IF9fMS5EQkNMSUNLX1RPX0NFTExfRURJVFxuICAgIH0pKTtcbiAgfTtcbiAgZnVuY3Rpb24gd2l0aENvbnN1bWVyKHByb3BzKSB7XG4gICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoY29udGV4dF8xLkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY2VsbEVkaXQpIHtcbiAgICAgIHJldHVybiByZW5kZXJXaXRoQ2VsbEVkaXQocHJvcHMsIGNlbGxFZGl0KTtcbiAgICB9KTtcbiAgfVxuICB3aXRoQ29uc3VtZXIuZGlzcGxheU5hbWUgPSBcIldpdGhDZWxsRWRpdGluZ1Jvd0NvbnN1bWVyXCI7XG4gIHJldHVybiB3aXRoQ29uc3VtZXI7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2V4Y2x1ZGVkID0gW1wiZGVmYXVsdFZhbHVlXCIsIFwiZGlkTW91bnRcIiwgXCJjbGFzc05hbWVcIiwgXCJvblVwZGF0ZVwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgY2xhc3NuYW1lc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgRGF0ZUVkaXRvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIERhdGVFZGl0b3IoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEYXRlRWRpdG9yKTtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBEYXRlRWRpdG9yLCBbXS5jb25jYXQoYXJncykpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJkYXRlXCIsIHZvaWQgMCk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhEYXRlRWRpdG9yLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKERhdGVFZGl0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gX3RoaXMkcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIGRpZE1vdW50ID0gX3RoaXMkcHJvcHMuZGlkTW91bnQ7XG4gICAgICB0aGlzLmRhdGUudmFsdWVBc0RhdGUgPSBuZXcgRGF0ZShkZWZhdWx0VmFsdWUpO1xuICAgICAgdGhpcy5kYXRlLmZvY3VzKCk7XG4gICAgICBpZiAoZGlkTW91bnQpIHtcbiAgICAgICAgZGlkTW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMyJGRlZmF1bHRWID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBkaWRNb3VudCA9IF90aGlzJHByb3BzMi5kaWRNb3VudCxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGNsYXNzTmFtLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1kYXRlXCIpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzMi5kYXRlID0gbm9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3NcbiAgICAgIH0sIHJlc3QpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KERhdGVFZGl0b3IsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2xhc3NOYW1lOiAnJyxcbiAgZGVmYXVsdFZhbHVlOiAnJyxcbiAgZGlkTW91bnQ6IHVuZGVmaW5lZFxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IERhdGVFZGl0b3I7IixudWxsLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBEYXRlRWRpdG9yUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcbiAgZGlkTW91bnQ/OiAoKSA9PiB2b2lkO1xuICBvblVwZGF0ZT86IGFueTtcbn1cblxuY2xhc3MgRGF0ZUVkaXRvciBleHRlbmRzIENvbXBvbmVudDxEYXRlRWRpdG9yUHJvcHM+IHtcbiAgZGF0ZTogYW55O1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGRlZmF1bHRWYWx1ZSA9IFwiXCIsIGRpZE1vdW50IH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuZGF0ZS52YWx1ZUFzRGF0ZSA9IG5ldyBEYXRlKGRlZmF1bHRWYWx1ZSk7XG4gICAgdGhpcy5kYXRlLmZvY3VzKCk7XG4gICAgaWYgKGRpZE1vdW50KSB7XG4gICAgICBkaWRNb3VudCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGUudmFsdWU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gXCJcIixcbiAgICAgIGRpZE1vdW50LFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1kYXRlXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgcmVmPXsobm9kZSkgPT4geyB0aGlzLmRhdGUgPSBub2RlOyB9fVxuICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgIGNsYXNzTmFtZT17ZWRpdG9yQ2xhc3N9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnLFxuICAgIGRpZE1vdW50OiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGF0ZUVkaXRvcjtcbiIsIi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFRleHRFZGl0b3JQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICBhdXRvU2VsZWN0VGV4dD86IGJvb2xlYW47XG4gIGRpZE1vdW50PzogKCkgPT4gdm9pZDtcbiAgb25VcGRhdGU6IChyb3c6IG9iamVjdCwgY29sdW1uOiBvYmplY3QsIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFRleHRFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQ8VGV4dEVkaXRvclByb3BzPiB7XG4gIHRleHQ6IGFueTtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBkZWZhdWx0VmFsdWUgPSBcIlwiLCBkaWRNb3VudCwgYXV0b1NlbGVjdFRleHQgPSBmYWxzZSB9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLnRleHQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgdGhpcy50ZXh0LmZvY3VzKCk7XG4gICAgaWYgKGF1dG9TZWxlY3RUZXh0KSB0aGlzLnRleHQuc2VsZWN0KCk7XG4gICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICB9XG5cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dC52YWx1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSBcIlwiLFxuICAgICAgZGlkTW91bnQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgYXV0b1NlbGVjdFRleHQgPSBmYWxzZSxcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVkaXRvckNsYXNzID0gY3MoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0XCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgcmVmPXsobm9kZSkgPT4geyB0aGlzLnRleHQgPSBub2RlOyB9fVxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzTmFtZT17ZWRpdG9yQ2xhc3N9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY2xhc3NOYW1lOiBudWxsLFxuICAgIGRlZmF1bHRWYWx1ZTogJycsXG4gICAgYXV0b1NlbGVjdFRleHQ6IGZhbHNlLFxuICAgIGRpZE1vdW50OiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVkaXRvcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuLyogZXNsaW50IHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzOiAwICovXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wibm9uRWRpdGFibGVSb3dzXCIsIFwiZXJyb3JNZXNzYWdlXCJdLFxuICBfZXhjbHVkZWQyID0gW1wib3B0aW9uc1wiLCBcInJpZHhcIiwgXCJjaWR4XCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29uc3VtZXIgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIENlbGxFZGl0Q29udGV4dCA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUNvbnRleHQobnVsbCk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChfLCBkYXRhT3BlcmF0b3IsIGlzUmVtb3RlQ2VsbEVkaXQsIGhhbmRsZUNlbGxDaGFuZ2UpIHtcbiAgdmFyIENlbGxFZGl0UHJvdmlkZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJGRlZmF1bHQkQ29tcCkge1xuICAgIGZ1bmN0aW9uIENlbGxFZGl0UHJvdmlkZXIocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDZWxsRWRpdFByb3ZpZGVyKTtcbiAgICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBDZWxsRWRpdFByb3ZpZGVyLCBbcHJvcHNdKTtcbiAgICAgIF90aGlzLmRvVXBkYXRlID0gX3RoaXMuZG9VcGRhdGUuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5zdGFydEVkaXRpbmcgPSBfdGhpcy5zdGFydEVkaXRpbmcuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5lc2NhcGVFZGl0aW5nID0gX3RoaXMuZXNjYXBlRWRpdGluZy5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmNvbXBsZXRlRWRpdGluZyA9IF90aGlzLmNvbXBsZXRlRWRpdGluZy5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLmhhbmRsZUNlbGxVcGRhdGUgPSBfdGhpcy5oYW5kbGVDZWxsVXBkYXRlLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgIGNpZHg6IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9pbmhlcml0cyhDZWxsRWRpdFByb3ZpZGVyLCBfcmVhY3RfMSRkZWZhdWx0JENvbXApO1xuICAgIHJldHVybiBfY3JlYXRlQ2xhc3MoQ2VsbEVkaXRQcm92aWRlciwgW3tcbiAgICAgIGtleTogXCJoYW5kbGVDZWxsVXBkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2VsbFVwZGF0ZShyb3csIGNvbHVtbiwgbmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgIHZhciBuZXdWYWx1ZVdpdGhUeXBlID0gZGF0YU9wZXJhdG9yLnR5cGVDb252ZXJ0KGNvbHVtbi50eXBlLCBuZXdWYWx1ZSk7XG4gICAgICAgIHZhciBjZWxsRWRpdCA9IHRoaXMucHJvcHMuY2VsbEVkaXQ7XG4gICAgICAgIHZhciBiZWZvcmVTYXZlQ2VsbCA9IGNlbGxFZGl0Lm9wdGlvbnMuYmVmb3JlU2F2ZUNlbGw7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICAgIHZhciBiZWZvcmVTYXZlQ2VsbERvbmUgPSBmdW5jdGlvbiBiZWZvcmVTYXZlQ2VsbERvbmUoKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBfdGhpczIuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczIuZXNjYXBlRWRpdGluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihiZWZvcmVTYXZlQ2VsbCkpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gYmVmb3JlU2F2ZUNlbGwob2xkVmFsdWUsIG5ld1ZhbHVlV2l0aFR5cGUsIHJvdywgY29sdW1uLCBiZWZvcmVTYXZlQ2VsbERvbmUpO1xuICAgICAgICAgIGlmIChfLmlzT2JqZWN0KHJlc3VsdCkgJiYgcmVzdWx0LmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9VcGRhdGUocm93LCBjb2x1bW4sIG5ld1ZhbHVlV2l0aFR5cGUpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkb1VwZGF0ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRvVXBkYXRlKHJvdywgY29sdW1uLCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGtleUZpZWxkID0gX3RoaXMkcHJvcHMua2V5RmllbGQsXG4gICAgICAgICAgY2VsbEVkaXQgPSBfdGhpcyRwcm9wcy5jZWxsRWRpdCxcbiAgICAgICAgICBkYXRhID0gX3RoaXMkcHJvcHMuZGF0YTtcbiAgICAgICAgdmFyIGFmdGVyU2F2ZUNlbGwgPSBjZWxsRWRpdC5vcHRpb25zLmFmdGVyU2F2ZUNlbGw7XG4gICAgICAgIHZhciByb3dJZCA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgICBpZiAoaXNSZW1vdGVDZWxsRWRpdCgpKSB7XG4gICAgICAgICAgaGFuZGxlQ2VsbENoYW5nZShyb3dJZCwgY29sdW1uLmRhdGFGaWVsZCwgbmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGFPcGVyYXRvci5lZGl0Q2VsbChkYXRhLCBrZXlGaWVsZCwgcm93SWQsIGNvbHVtbi5kYXRhRmllbGQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGFmdGVyU2F2ZUNlbGwpKSB7XG4gICAgICAgICAgICBhZnRlclNhdmVDZWxsKG9sZFZhbHVlLCBuZXdWYWx1ZSwgcm93LCBjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNvbXBsZXRlRWRpdGluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNvbXBsZXRlRWRpdGluZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBsZXRlRWRpdGluZygpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJpZHg6IG51bGwsXG4gICAgICAgICAgICBjaWR4OiBudWxsLFxuICAgICAgICAgICAgbWVzc2FnZTogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzdGFydEVkaXRpbmdcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydEVkaXRpbmcocmlkeCwgY2lkeCkge1xuICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgICAgdmFyIGVkaXRpbmcgPSBmdW5jdGlvbiBlZGl0aW5nKCkge1xuICAgICAgICAgIF90aGlzMy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByaWR4OiByaWR4LFxuICAgICAgICAgICAgICBjaWR4OiBjaWR4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc2VsZWN0Um93ID0gdGhpcy5wcm9wcy5zZWxlY3RSb3c7XG4gICAgICAgIGlmICghc2VsZWN0Um93IHx8IHNlbGVjdFJvdy5jbGlja1RvRWRpdCB8fCAhc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QpIHtcbiAgICAgICAgICBlZGl0aW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZXNjYXBlRWRpdGluZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVzY2FwZUVkaXRpbmcoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByaWR4OiBudWxsLFxuICAgICAgICAgICAgY2lkeDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRjZWxsRWRpdCA9IHRoaXMucHJvcHMuY2VsbEVkaXQsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkY2VsbEVkaXQkID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQub3B0aW9ucyxcbiAgICAgICAgICBub25FZGl0YWJsZVJvd3MgPSBfdGhpcyRwcm9wcyRjZWxsRWRpdCQubm9uRWRpdGFibGVSb3dzLFxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IF90aGlzJHByb3BzJGNlbGxFZGl0JC5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgb3B0aW9uc1Jlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMkY2VsbEVkaXQkLCBfZXhjbHVkZWQpLFxuICAgICAgICAgIHByb3BSaWR4ID0gX3RoaXMkcHJvcHMkY2VsbEVkaXQucmlkeCxcbiAgICAgICAgICBwcm9wQ2lkeCA9IF90aGlzJHByb3BzJGNlbGxFZGl0LmNpZHgsXG4gICAgICAgICAgY2VsbEVkaXRSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzJGNlbGxFZGl0LCBfZXhjbHVkZWQyKTtcbiAgICAgICAgdmFyIG5ld0NlbGxFZGl0ID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnNSZXN0KSwgY2VsbEVkaXRSZXN0KSwge30sIHtcbiAgICAgICAgICByaWR4OiB0aGlzLnN0YXRlLnJpZHggIT09IG51bGwgPyB0aGlzLnN0YXRlLnJpZHggOiBwcm9wUmlkeCAhPT0gbnVsbCAmJiBwcm9wUmlkeCAhPT0gdm9pZCAwID8gcHJvcFJpZHggOiBudWxsLFxuICAgICAgICAgIGNpZHg6IHRoaXMuc3RhdGUuY2lkeCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUuY2lkeCA6IHByb3BDaWR4ICE9PSBudWxsICYmIHByb3BDaWR4ICE9PSB2b2lkIDAgPyBwcm9wQ2lkeCA6IG51bGwsXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5zdGF0ZS5tZXNzYWdlLFxuICAgICAgICAgIG5vbkVkaXRhYmxlUm93czogXy5pc0RlZmluZWQobm9uRWRpdGFibGVSb3dzKSA/IG5vbkVkaXRhYmxlUm93cygpIDogW10sXG4gICAgICAgICAgYXRzdGFydDogdGhpcy5zdGFydEVkaXRpbmcsXG4gICAgICAgICAgb25Fc2NhcGU6IHRoaXMuZXNjYXBlRWRpdGluZyxcbiAgICAgICAgICBvblVwZGF0ZTogdGhpcy5oYW5kbGVDZWxsVXBkYXRlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChDZWxsRWRpdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogX29iamVjdFNwcmVhZCh7fSwgbmV3Q2VsbEVkaXQpXG4gICAgICAgIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1dLCBbe1xuICAgICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0ICYmIF8uaXNGdW5jdGlvbihpc1JlbW90ZUNlbGxFZGl0KSAmJiBpc1JlbW90ZUNlbGxFZGl0KCkpIHtcbiAgICAgICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0Lm9wdGlvbnMuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBtZXNzYWdlOiBuZXh0UHJvcHMuY2VsbEVkaXQub3B0aW9ucy5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJpZHg6IHByZXZTdGF0ZS5yaWR4LFxuICAgICAgICAgICAgICBjaWR4OiBwcmV2U3RhdGUuY2lkeCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe30sIHByZXZTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XSk7XG4gIH0ocmVhY3RfMVtcImRlZmF1bHRcIl0uQ29tcG9uZW50KTtcbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogQ2VsbEVkaXRQcm92aWRlclxuICB9O1xufTtcbmV4cG9ydHMuQ29uc3VtZXIgPSBDZWxsRWRpdENvbnRleHQuQ29uc3VtZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJkZWZhdWx0VmFsdWVcIiwgXCJkaWRNb3VudFwiLCBcImdldE9wdGlvbnNcIiwgXCJjbGFzc05hbWVcIiwgXCJvblVwZGF0ZVwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgY2xhc3NuYW1lc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgRHJvcERvd25FZGl0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBEcm9wRG93bkVkaXRvcihwcm9wcykge1xuICAgIHZhciBfcHJvcHMkb3B0aW9ucztcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERyb3BEb3duRWRpdG9yKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgRHJvcERvd25FZGl0b3IsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZWxlY3RcIiwgdm9pZCAwKTtcbiAgICB2YXIgb3B0aW9ucyA9IChfcHJvcHMkb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMpICE9PSBudWxsICYmIF9wcm9wcyRvcHRpb25zICE9PSB2b2lkIDAgPyBfcHJvcHMkb3B0aW9ucyA6IFtdO1xuICAgIGlmIChwcm9wcy5nZXRPcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gcHJvcHMuZ2V0T3B0aW9ucyhfdGhpcy5zZXRPcHRpb25zLmJpbmQoX3RoaXMpLCB7XG4gICAgICAgIHJvdzogcHJvcHMucm93LFxuICAgICAgICBjb2x1bW46IHByb3BzLmNvbHVtblxuICAgICAgfSkgfHwgW107XG4gICAgfVxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhEcm9wRG93bkVkaXRvciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhEcm9wRG93bkVkaXRvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzJGRlZmF1bHRWYSxcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wcy5kaWRNb3VudDtcbiAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgdGhpcy5zZWxlY3QuZm9jdXMoKTtcbiAgICAgIGlmIChkaWRNb3VudCkge1xuICAgICAgICBkaWRNb3VudCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdC52YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRkZWZhdWx0ViA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMiRkZWZhdWx0ViA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMiRkZWZhdWx0VixcbiAgICAgICAgZGlkTW91bnQgPSBfdGhpcyRwcm9wczIuZGlkTW91bnQsXG4gICAgICAgIGdldE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuZ2V0T3B0aW9ucyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMyJGNsYXNzTmFtLFxuICAgICAgICBvblVwZGF0ZSA9IF90aGlzJHByb3BzMi5vblVwZGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgZWRpdG9yQ2xhc3MgPSAoMCwgY2xhc3NuYW1lc18xW1wiZGVmYXVsdFwiXSkoY2xhc3NOYW1lLCBcImZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1zZWxlY3RcIik7XG4gICAgICB2YXIgYXR0ciA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgIGNsYXNzTmFtZTogZWRpdG9yQ2xhc3NcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhdHRyKSwge30sIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgIF90aGlzMi5zZWxlY3QgPSBub2RlO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZVxuICAgICAgfSksIHRoaXMuc3RhdGUub3B0aW9ucy5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgICAgICB2YWx1ZSA9IF9yZWYudmFsdWU7XG4gICAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IHZhbHVlLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9LCBsYWJlbCk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShEcm9wRG93bkVkaXRvciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBjbGFzc05hbWU6ICcnLFxuICBkZWZhdWx0VmFsdWU6ICcnLFxuICBzdHlsZToge30sXG4gIG9wdGlvbnM6IFtdLFxuICBkaWRNb3VudDogdW5kZWZpbmVkLFxuICBnZXRPcHRpb25zOiB1bmRlZmluZWRcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBEcm9wRG93bkVkaXRvcjsiLCIvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQsIENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgQ2hlY2tCb3hFZGl0b3JQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgb25DaGFuZ2U/OiAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIGRpZE1vdW50PzogKCkgPT4gdm9pZDtcbiAgb25VcGRhdGU/OiBhbnk7XG59XG5cbmludGVyZmFjZSBDaGVja0JveEVkaXRvclN0YXRlIHtcbiAgY2hlY2tlZDogYm9vbGVhbjtcbn1cblxuY2xhc3MgQ2hlY2tCb3hFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQ8XG4gIENoZWNrQm94RWRpdG9yUHJvcHMsXG4gIENoZWNrQm94RWRpdG9yU3RhdGVcbj4ge1xuICBjaGVja2JveDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDaGVja0JveEVkaXRvclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjaGVja2VkOlxuICAgICAgICAocHJvcHMuZGVmYXVsdFZhbHVlID8/IGZhbHNlKS50b1N0cmluZygpID09PVxuICAgICAgICAocHJvcHMudmFsdWUgPz8gXCJvbjpvZmZcIikuc3BsaXQoXCI6XCIpWzBdLFxuICAgIH07XG4gICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBkaWRNb3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLmNoZWNrYm94LmZvY3VzKCk7XG4gICAgaWYgKGRpZE1vdW50KSBkaWRNb3VudCgpO1xuICB9XG5cbiAgZ2V0VmFsdWUoKSB7XG4gICAgY29uc3QgW3Bvc2l0aXZlLCBuZWdhdGl2ZV0gPSAodGhpcy5wcm9wcy52YWx1ZSA/PyBcIm9uOm9mZlwiKS5zcGxpdChcIjpcIik7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tib3guY2hlY2tlZCA/IHBvc2l0aXZlIDogbmVnYXRpdmU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UoZTogYW55KSB7XG4gICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHRoaXMucHJvcHMub25DaGFuZ2UoZSk7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGU7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBjaGVja2VkOiB0YXJnZXQuY2hlY2tlZCB9KSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0gZmFsc2UsXG4gICAgICBkaWRNb3VudCxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNzKFwiZWRpdG9yIGVkaXQtY2hzZWNrYm94IGNoZWNrYm94XCIsIGNsYXNzTmFtZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICByZWY9eyhub2RlKSA9PiB7IHRoaXMuY2hlY2tib3ggPSBub2RlOyB9fVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzc05hbWU9e2VkaXRvckNsYXNzfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgY2hlY2tlZD17dGhpcy5zdGF0ZS5jaGVja2VkfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiXCIsXG4gICAgdmFsdWU6IFwib246b2ZmXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBvbkNoYW5nZTogdW5kZWZpbmVkLFxuICAgIGRpZE1vdW50OiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrQm94RWRpdG9yO1xuIiwiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NTYpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJDb21wb25lbnQiLCJzZWxlY3RSb3dFbmFibGVkIiwid2l0aENvbnN1bWVyIiwicHJvcHMiLCJDb25zdW1lciIsImNlbGxFZGl0Iiwia2V5IiwidmFsdWUiLCJlZGl0YWJsZVJvdyIsIm5vbkVkaXRhYmxlUm93cyIsImxlbmd0aCIsImluZGV4T2YiLCJhdHRycyIsIm1vZGUiLCJEQkNMSUNLX1RPX0NFTExfRURJVCIsIkRFTEFZX0ZPUl9EQkNMSUNLIiwiZWRpdGluZ1Jvd0lkeCIsInJpZHgiLCJlZGl0aW5nQ29sSWR4IiwiY2lkeCIsImlzRWRpdGFibGUiLCJhdHN0YXJ0IiwiY2xpY2tUb0VkaXQiLCJDTElDS19UT19DRUxMX0VESVQiLCJkYmNsaWNrVG9FZGl0IiwicmVuZGVyV2l0aENlbGxFZGl0IiwiZGlzcGxheU5hbWUiLCJfX2ltcG9ydERlZmF1bHQiLCJtb2QiLCJfX2VzTW9kdWxlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJyZWFjdF8xIiwiRWRpdG9ySW5kaWNhdG9yIiwiX3JlZiIsImludmFsaWRNZXNzYWdlIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInJvbGUiLCJkZWZhdWx0UHJvcHMiLCJfZXhjbHVkZWQiLCJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJvd25LZXlzIiwiZSIsInIiLCJ0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfZGVmaW5lUHJvcGVydGllcyIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJvcGVydHlLZXkiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiVHlwZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiY2FsbCIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiX3NldFByb3RvdHlwZU9mIiwiX2RlZmluZVByb3BlcnR5IiwiaSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3RvUHJpbWl0aXZlIiwiX293bktleXMiLCJfX2NyZWF0ZUJpbmRpbmciLCJjcmVhdGUiLCJtIiwiayIsImsyIiwidW5kZWZpbmVkIiwiZGVzYyIsImdldCIsIl9fc2V0TW9kdWxlRGVmYXVsdCIsInYiLCJfX2ltcG9ydFN0YXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiYXIiLCJoYXNPd25Qcm9wZXJ0eSIsInJlc3VsdCIsImNsYXNzbmFtZXNfMSIsIlRleHRFZGl0b3IiLCJfcmVhY3RfMSRDb21wb25lbnQiLCJfdGhpcyIsImEiLCJuIiwiX2NsYXNzQ2FsbENoZWNrIiwidGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uY2F0IiwiX2luaGVyaXRzIiwiX3RoaXMkcHJvcHMiLCJfdGhpcyRwcm9wcyRkZWZhdWx0VmEiLCJkZWZhdWx0VmFsdWUiLCJkaWRNb3VudCIsIl90aGlzJHByb3BzJGF1dG9TZWxlYyIsImF1dG9TZWxlY3RUZXh0IiwidGV4dCIsImZvY3VzIiwic2VsZWN0IiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMyIiwiX3RoaXMkcHJvcHMyJGNsYXNzTmFtIiwicmVzdCIsIm9uVXBkYXRlIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImVkaXRvckNsYXNzIiwiZm9yRWFjaCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX29iamVjdFNwcmVhZCIsInJlZiIsIm5vZGUiLCJ0eXBlIiwiRHJvcERvd25FZGl0b3IiLCJzdXBlciIsIm9wdGlvbnMiLCJnZXRPcHRpb25zIiwic2V0T3B0aW9ucyIsInJvdyIsImNvbHVtbiIsInN0YXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJzZXRTdGF0ZSIsImdldFZhbHVlIiwicmVuZGVyIiwiYXR0ciIsIm1hcCIsImxhYmVsIiwic3RhdGljIiwic3R5bGUiLCJUZXh0QXJlYUVkaXRvciIsImhhbmRsZUtleURvd24iLCJrZXlDb2RlIiwic2hpZnRLZXkiLCJvbktleURvd24iLCJfIiwib25TdGFydEVkaXQiLCJ0aW1lVG9DbG9zZU1lc3NhZ2UiLCJUSU1FX1RPX0NMT1NFX01FU1NBR0UiLCJlZGl0b3IiLCJpbmRpY2F0b3JUaW1lciIsImNsZWFyVGltZXIiLCJoYW5kbGVCbHVyIiwiaGFuZGxlQ2xpY2siLCJiZWZvcmVDb21wbGV0ZSIsImFzeW5jYmVmb3JlQ29tcGV0ZSIsImRpc3BsYXlFcnJvck1lc3NhZ2UiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm1lc3NhZ2UiLCJpc0RlZmluZWQiLCJjcmVhdGVUaW1lciIsImNsZWFyVGltZW91dCIsIm9uRXJyb3JNZXNzYWdlRGlzYXBwZWFyIiwic2xlZXAiLCJpc0Z1bmN0aW9uIiwibmV3VmFsdWUiLCJ2YWxpZCIsInZhbGlkYXRvciIsInZhbGlkYXRlRm9ybSIsImlzT2JqZWN0IiwiYXN5bmMiLCJvbkVzY2FwZSIsImJsdXJUb1NhdmUiLCJ0YXJnZXQiLCJ0YWdOYW1lIiwic3RvcFByb3BhZ2F0aW9uIiwicm93SW5kZXgiLCJjb2x1bW5JbmRleCIsImRhdGFGaWVsZCIsImhhc0Vycm9yIiwiY3VzdG9tRWRpdG9yQ2xhc3MiLCJlZGl0b3JDbGFzc2VzIiwiZWRpdG9yU3R5bGUiLCJlZGl0b3JQcm9wcyIsImFuaW1hdGVkIiwic2hha2UiLCJvbkJsdXIiLCJpc0RlZmF1bHRFZGl0b3JEZWZpbmVkIiwiZWRpdG9yUmVuZGVyZXIiLCJFRElUVFlQRSIsIlNFTEVDVCIsIlRFWFRBUkVBIiwiQ0hFQ0tCT1giLCJEQVRFIiwib25DbGljayIsIl9fMSIsImNoZWNrYm94X2VkaXRvcl8xIiwiZGF0ZV9lZGl0b3JfMSIsImRyb3Bkb3duX2VkaXRvcl8xIiwiZWRpdG9yX2luZGljYXRvcl8xIiwidGV4dF9lZGl0b3JfMSIsInRleHRhcmVhX2VkaXRvcl8xIiwiX0VkaXRpbmdDZWxsIiwiRWRpdGluZ0NlbGwiLCJfdGhpczMiLCJfdGhpczMkcHJvcHMiLCJfdGhpcyRwcm9wczMiLCJfY29sdW1uJGVkaXRvciIsIl9jb2x1bW4kZWRpdG9yMiIsIl9jb2x1bW4kZWRpdG9yMyIsIl9jb2x1bW4kZWRpdG9yNCIsIl90aGlzNCIsIl90aGlzJHByb3BzNCIsImNvbnRleHRfMSIsImVkaXRpbmdfY2VsbF8xIiwiY29udGVudCIsImVkaXRDZWxsc3R5bGUiLCJlZGl0Q2VsbFN0eWxlIiwiZWRpdENlbGxjbGFzc2VzIiwiZWRpdENlbGxDbGFzc2VzIiwicmVuZGVyV2l0aEVkaXRpbmdDZWxsIiwiQ2VsbEVkaXRDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsImRhdGFPcGVyYXRvciIsImlzUmVtb3RlQ2VsbEVkaXQiLCJoYW5kbGVDZWxsQ2hhbmdlIiwiQ2VsbEVkaXRQcm92aWRlciIsImRvVXBkYXRlIiwic3RhcnRFZGl0aW5nIiwiZXNjYXBlRWRpdGluZyIsImNvbXBsZXRlRWRpdGluZyIsImhhbmRsZUNlbGxVcGRhdGUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJuZXh0UHJvcHMiLCJwcmV2U3RhdGUiLCJlcnJvck1lc3NhZ2UiLCJuZXdWYWx1ZVdpdGhUeXBlIiwidHlwZUNvbnZlcnQiLCJiZWZvcmVTYXZlQ2VsbCIsIm9sZFZhbHVlIiwiYmVmb3JlU2F2ZUNlbGxEb25lIiwia2V5RmllbGQiLCJkYXRhIiwiYWZ0ZXJTYXZlQ2VsbCIsInJvd0lkIiwiZWRpdENlbGwiLCJlZGl0aW5nIiwic2VsZWN0Um93IiwiY2xpY2tUb1NlbGVjdCIsIm9wdGlvbnNSZXN0IiwicHJvcFJpZHgiLCJwcm9wQ2lkeCIsImNlbGxFZGl0UmVzdCIsIm5ld0NlbGxFZGl0IiwiUHJvdmlkZXIiLCJjaGlsZHJlbiIsIl9zbGljZWRUb0FycmF5IiwiaXNBcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsImwiLCJ1IiwiZiIsIm5leHQiLCJkb25lIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIkNoZWNrQm94RWRpdG9yIiwiX3Byb3BzJGRlZmF1bHRWYWx1ZSIsIl9wcm9wcyR2YWx1ZSIsImNoZWNrZWQiLCJzcGxpdCIsImhhbmRsZUNoYW5nZSIsImNoZWNrYm94IiwiX3RoaXMkcHJvcHMkdmFsdWUiLCJfc3BsaXQyIiwicG9zaXRpdmUiLCJuZWdhdGl2ZSIsIm9uQ2hhbmdlIiwiX3RoaXMkcHJvcHMkY2xhc3NOYW1lIiwiVHlwZSIsImVkaXRpbmdfY2VsbF9jb25zdW1lcl8xIiwicm93X2NvbnN1bWVyXzEiLCJURVhUIiwiY3JlYXRlRWRpdGluZ0NlbGwiLCJ3aXRoUm93TGV2ZWxDZWxsRWRpdCIsIkRhdGVFZGl0b3IiLCJkYXRlIiwidmFsdWVBc0RhdGUiLCJEYXRlIiwiX2V4Y2x1ZGVkMiIsIl9yZWFjdF8xJGRlZmF1bHQkQ29tcCIsIl90aGlzJHByb3BzJGNlbGxFZGl0IiwiX3RoaXMkcHJvcHMkY2VsbEVkaXQkIiwiX3Byb3BzJG9wdGlvbnMiLCJfdGhpcyRwcm9wczIkZGVmYXVsdFYiLCJoYXNPd24iLCJjbGFzc05hbWVzIiwiY2xhc3NlcyIsImFyZyIsImFwcGVuZENsYXNzIiwicGFyc2VWYWx1ZSIsImluY2x1ZGVzIiwibmV3Q2xhc3MiLCJkZWZhdWx0IiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9