react-bootstrap-table-ng-filter 4.19.1 → 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,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react")):"function"==typeof define&&define.amd?define(["react"],e):"object"==typeof exports?exports.ReactBootstrapTableNgFilter=e(require("react")):t.ReactBootstrapTableNgFilter=e(t.React)}(self,t=>{return e={37(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function i(t,e,r){return e=u(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,l()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(l=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}var s=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var f=s(r(556)),p=s(r(442)),d=r(355),m=r(206);e.default=function(t,e,r){var n=p.default.createContext({}),l=function(l){function u(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,u),(e=i(this,u,[t])).currFilters={},e.clearFilters={},e.onFilter=e.onFilter.bind(e),e.doFilter=e.doFilter.bind(e),e.onExternalFilter=e.onExternalFilter.bind(e),e.data=t.data,e.isEmitDataChange=!1,e}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}(u,l),s=u,f=[{key:"componentDidMount",value:function(){e()&&Object.keys(this.currFilters).length>0&&r(this.currFilters)}},{key:"onFilter",value:function(n,o){var i=this,l=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return function(u){var c=Object.assign({},i.currFilters);i.clearFilters={};var s,f,p,m=n.dataField,h=n.filter;if(t.isDefined(u)&&""!==u&&0!==u.length){var y=h.props,b=y.comparator,v=void 0===b?o===d.FILTER_TYPES.SELECT?d.EQ:d.LIKE:b,E=y.caseSensitive,g=void 0!==E&&E;c[m]={filterVal:u,filterType:o,comparator:v,caseSensitive:g}}else delete c[m],i.clearFilters=(s={},p={clear:!0,filterVal:u},(f=a(f=m))in s?Object.defineProperty(s,f,{value:p,enumerable:!0,configurable:!0,writable:!0}):s[f]=p,s);if(i.currFilters=c,e()){if(l||r(i.currFilters),void 0===h.props||void 0===h.props.forceUpdate||0==h.props.forceUpdate)return;i.forceUpdate()}i.doFilter(i.props)}}},{key:"onExternalFilter",value:function(t,e){var r=this;return function(n){r.onFilter(t,e)(n)}}},{key:"getFiltered",value:function(){return this.data}},{key:"shouldComponentUpdate",value:function(r,n,o){return e()||t.isEqual(r.data,this.data)?this.data=r.data:this.doFilter(r,this.isEmitDataChange),!0}},{key:"doFilter",value:function(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.dataChangeListener,o=e.data,a=e.columns,i=e.filter,l=(0,m.filters)(o,a,t)(this.currFilters,this.clearFilters);i.afterFilter&&i.afterFilter(l,this.currFilters),this.data=l,n&&!r?(this.isEmitDataChange=!0,n.emit("filterChanged",l.length)):(this.isEmitDataChange=!1,this.forceUpdate())}},{key:"render",value:function(){return p.default.createElement(n.Provider,{value:{data:this.data,onFilter:this.onFilter,onExternalFilter:this.onExternalFilter,currFilters:this.currFilters}},this.props.children)}}],f&&o(s.prototype,f),h&&o(s,h),Object.defineProperty(s,"prototype",{writable:!1}),s;var s,f,h}(p.default.Component);return l.propTypes={data:f.default.array.isRequired,columns:f.default.array.isRequired,dataChangeListener:f.default.object},{Provider:l,Consumer:n.Consumer}}},63(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=["id","style","className","defaultValue","onFilter","column","options","comparator","withoutEmptyOption","caseSensitive","getFilter","filterState"];function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){l(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e,r){return(e=c(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function u(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function s(t,e,r){return e=p(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(e,r||[],p(t).constructor):e.apply(t,r))}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}function d(t,e){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},d(t,e)}var m,h=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),n=0;n<r.length;n++)"default"!==r[n]&&h(e,t,r[n]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355),g=function(t){function e(t){var r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=s(this,e,[t])).filter=r.filter.bind(r),r.options=r.getOptions(t);var n,o,a=void 0!==(n=r.options,o=r.getDefaultValue(),Array.isArray(n)?n.filter(function(t){return t.label===o}).map(function(t){return t.value})[0]:n[o]);return r.state={isSelected:a},r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&d(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.column,n=e.onFilter,o=e.getFilter,a=this.selectInput.value;a&&""!==a&&n(r,E.FILTER_TYPES.SELECT,!0)(a),o&&o(function(e){t.setState(function(){return{isSelected:""!==e}}),t.selectInput.value=e,n(r,E.FILTER_TYPES.SELECT)(e)})}},{key:"componentDidUpdate",value:function(t){var e=!1,r=this.props,n=r.column,o=r.onFilter,a=r.defaultValue,i=this.getOptions(this.props);if(a!==t.defaultValue?(this.selectInput.value=a,e=!0):function(t,e){if(Array.isArray(t)){if(t.length===e.length){for(var r=0;r<t.length;r+=1)if(t[r].value!==e[r].value||t[r].label!==e[r].label)return!1;return!0}return!1}for(var n=Object.keys(t),o=0;o<n.length;o+=1)if(t[n[o]]!==e[n[o]])return!1;return Object.keys(t).length===Object.keys(e).length}(i,this.options)||(this.options=i,e=!0),e){var l=this.selectInput.value;l&&o(n,E.FILTER_TYPES.SELECT)(l)}}},{key:"getOptions",value:function(t){return"function"==typeof t.options?t.options(t.column):t.options}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.filterState,r=t.defaultValue;return e&&void 0!==e.filterVal?e.filterVal:r}},{key:"cleanFiltered",value:function(){var t=void 0!==this.props.defaultValue?this.props.defaultValue:"";this.setState(function(){return{isSelected:""!==t}}),this.selectInput.value=t,this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(t)}},{key:"applyFilter",value:function(t){this.selectInput.value=t,this.setState(function(){return{isSelected:""!==t}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(t)}},{key:"filter",value:function(t){var e=t.target.value;this.setState(function(){return{isSelected:""!==e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(e)}},{key:"renderOptions",value:function(){var t=[],e=this.options,r=this.props,n=r.placeholder,o=r.column,a=r.withoutEmptyOption,i=r.defaultValue;return a||void 0!==i&&""!==i||t.push(v.default.createElement("option",{key:"-1",value:"","data-testid":"select-filter-placeholder"},n||"Select ".concat(o.text,"..."))),Array.isArray(e)?e.forEach(function(e){var r=e.value,n=e.label;return t.push(v.default.createElement("option",{key:r,value:r},n))}):Object.keys(e).forEach(function(r){return t.push(v.default.createElement("option",{key:r,value:r},e[r]))}),t}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=e.style,a=e.className,l=(e.defaultValue,e.onFilter,e.column),u=(e.options,e.comparator,e.withoutEmptyOption,e.caseSensitive,e.getFilter,e.filterState,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n<a.length;n++)r=a[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,o)),c="filter select-filter form-control ".concat(a," ").concat(this.state.isSelected?"":"placeholder-selected"),s="select-filter-column-".concat(l.dataField).concat(r?"-".concat(r):"");return v.default.createElement("label",{className:"filter-label",htmlFor:s},v.default.createElement("span",{className:"sr-only"},"Filter by ",l.text),v.default.createElement("select",i(i({},u),{},{ref:function(e){t.selectInput=e},id:s,style:n,className:c,onChange:this.filter,onClick:function(t){return t.stopPropagation()},defaultValue:this.getDefaultValue()||"","data-testid":"select-filter"}),this.renderOptions()))}}],n&&u(r.prototype,n),a&&u(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);e.default=g},206(t,e,r){"use strict";function n(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function o(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?n(Object(r),!0).forEach(function(e){a(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function a(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=i(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==i(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.filterFactory=e.filterByArray=e.filterByDate=e.filterByNumber=e.filterByText=void 0;var l=r(355);e.filterByText=function(t){return function(e,r,n,o){var a=n.filterVal,i=void 0===a?"":a,u=n.comparator,c=void 0===u?l.LIKE:u,s=n.caseSensitive,f=i.toString();return e.filter(function(e){var n=t.get(e,r);o&&(n=o(n,e));var a=t.isDefined(n)?n.toString():"";return c===l.EQ?a===f:s?a.includes(f):-1!==a.toLocaleUpperCase().indexOf(f.toLocaleUpperCase())})}},e.filterByNumber=function(t){return function(e,r,n,o){var a=n.filterVal,i=a.comparator,u=a.number;return e.filter(function(e){if(""===u||!i)return!0;var n=t.get(e,r);switch(o&&(n=o(n,e)),i){case l.EQ:return n==u;case l.GT:return n>u;case l.GE:return n>=u;case l.LT:return n<u;case l.LE:return n<=u;case l.NE:return n!=u;default:return console.error("Number comparator provided is not supported"),!0}})}},e.filterByDate=function(t){return function(e,r,n,o){var a=n.filterVal,u=a.comparator,c=a.date;if(!c||!u)return e;var s=c.getUTCDate(),f=c.getUTCMonth(),p=c.getUTCFullYear();return e.filter(function(e){var n=!0,a=t.get(e,r);o&&(a=o(a,e)),"object"!==i(a)&&(a=new Date(a));var d=a.getUTCDate(),m=a.getUTCMonth(),h=a.getUTCFullYear();switch(u){case l.EQ:s===d&&f===m&&p===h||(n=!1);break;case l.GT:a<=c&&(n=!1);break;case l.GE:(h<p||h===p&&m<f||h===p&&m===f&&d<s)&&(n=!1);break;case l.LT:a>=c&&(n=!1);break;case l.LE:(h>p||h===p&&m>f||h===p&&m===f&&d>s)&&(n=!1);break;case l.NE:s===d&&f===m&&p===h&&(n=!1);break;default:console.error("Date comparator provided is not supported")}return n})}},e.filterByArray=function(t){return function(e,r,n){var o=n.filterVal,a=n.comparator;if(0===o.length)return e;var i=o.filter(function(e){return t.isDefined(e)}).map(function(t){return t.toString()});return e.filter(function(e){var n=t.get(e,r),o=t.isDefined(n)?n.toString():"";return a===l.EQ?-1!==i.indexOf(o):(o=o.toLocaleUpperCase(),i.some(function(t){return-1!==o.indexOf(t.toLocaleUpperCase())}))})}},e.filterFactory=function(t){return function(r){switch(r){case l.FILTER_TYPES.MULTISELECT:return(0,e.filterByArray)(t);case l.FILTER_TYPES.NUMBER:return(0,e.filterByNumber)(t);case l.FILTER_TYPES.DATE:return(0,e.filterByDate)(t);case l.FILTER_TYPES.TEXT:case l.FILTER_TYPES.SELECT:default:return(0,e.filterByText)(t)}}},e.filters=function(t,r,n){return function(a){var i,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=(0,e.filterFactory)(n),c=o(o({},l),a),s=t;return Object.keys(c).forEach(function(t){var e,n,o;r=null!=r?r:[];for(var a=0;a<r.length;a+=1)if(r[a].dataField===t){n=r[a].filterValue,r[a].filter&&(o=r[a].filter.props.onFilter);break}if(l[t]&&o)void 0!==(e=o(l[t].filterVal,s))&&(s=e);else{var f=c[t];i=u(f.filterType),o&&(e=o(f.filterVal,s)),s=void 0===e?i(s,t,f,n):e}}),s}}},321(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=t=>{if(t&&t.selectedOptions)return Array.from(t.selectedOptions).map(t=>t.value);if(t&&Array.isArray(t.value))return t.value;const e=[],r=t&&t.options?t.options.length:0;for(let n=0;n<r;n+=1){const r=t.options[n];r&&r.selected&&e.push(r.value)}return e};class s extends l.Component{constructor(t){super(t),this.filter=this.filter.bind(this),this.applyFilter=this.applyFilter.bind(this);const e=(t.defaultValue??[]).map(e=>t.options[e]).length>0;this.state={isSelected:e}}componentDidMount(){const{getFilter:t}=this.props,e=c(this.selectInput);e&&e.length>0&&this.applyFilter(e),t&&t(t=>{this.selectInput.value=t,this.applyFilter(t)})}componentDidUpdate(t){let e=!1;this.props.defaultValue!==t.defaultValue?e=!0:function(t,e){const r=Object.keys(t);for(let n=0;n<r.length;n+=1)if(t[r[n]]!==e[r[n]])return!1;return Object.keys(t).length===Object.keys(e).length}(this.props.options,t.options)||(e=!0),e&&this.applyFilter(c(this.selectInput))}getDefaultValue(){const{filterState:t={},defaultValue:e=[]}=this.props;return t&&void 0!==t.filterVal?t.filterVal:e}getOptions(){const t=[],{options:e,placeholder:r,column:n,withoutEmptyOption:o=!1,defaultValue:a=[]}=this.props,i=a&&a.length>0;return o||i||t.push(l.default.createElement("option",{key:"-1",value:"","data-testid":"multiselect-placeholder"},r||`Select ${n.text}...`)),Object.keys(e).forEach(r=>t.push(l.default.createElement("option",{key:r,value:r},e[r]))),t}cleanFiltered(){const t=void 0!==this.props.defaultValue?this.props.defaultValue:[];this.selectInput.value=t,this.applyFilter(t)}applyFilter(t){1===t.length&&""===t[0]&&(t=[]),this.setState(()=>({isSelected:t.length>0})),this.props.onFilter(this.props.column,u.FILTER_TYPES.MULTISELECT)(t)}filter(t){const e=c(t.target);this.applyFilter(e)}render(){const{id:t=null,style:e,className:r="",filterState:n={},defaultValue:o=[],onFilter:a,column:i,options:c,comparator:s=u.EQ,withoutEmptyOption:f=!1,caseSensitive:p=!0,getFilter:d,...m}=this.props,h=`filter select-filter form-control ${r} ${this.state.isSelected?"":"placeholder-selected"}`,y=`multiselect-filter-column-${i.dataField}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:y},l.default.createElement("span",{className:"sr-only"},"Filter by ",i.text),l.default.createElement("select",{...m,ref:t=>{this.selectInput=t},id:y,style:e,multiple:!0,className:h,onChange:this.filter,onClick:t=>t.stopPropagation(),defaultValue:this.getDefaultValue(),"data-testid":"multiselect-filter"},this.getOptions()))}}e.default=s},355(t,e,r){"use strict";var n=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.customFilter=e.dateFilter=e.numberFilter=e.multiSelectFilter=e.selectFilter=e.textFilter=e.ComparatorNumber=e.LE=e.LT=e.GE=e.GT=e.NE=e.EQ=e.LIKE=e.FILTER_DELAY=e.FILTER_TYPES=void 0;var o,a=n(r(659)),i=n(r(558)),l=n(r(834)),u=n(r(63)),c=n(r(652)),s=n(r(37));!function(t){t.TEXT="TEXT",t.SELECT="SELECT",t.MULTISELECT="MULTISELECT",t.NUMBER="NUMBER",t.DATE="DATE"}(o||(e.FILTER_TYPES=o={})),e.FILTER_DELAY=500,e.LIKE="LIKE",e.EQ="=",e.NE="!=",e.GT=">",e.GE=">=",e.LT="<",e.LE="<=",e.ComparatorNumber=7,e.textFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:c.default,props:t}},e.selectFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:u.default,props:t}},e.multiSelectFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:i.default,props:t}},e.numberFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:l.default,props:t}},e.dateFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:a.default,props:t}},e.customFilter=function(){return{Filter:function(){},props:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}},e.default=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:s.default,options:t}}},388(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355);class c extends l.Component{constructor(t){super(t),this.filter=this.filter.bind(this),this.options=this.getOptions(t);const e=void 0!==(r=this.options,n=this.getDefaultValue(),Array.isArray(r)?r.filter(({label:t})=>t===n).map(({value:t})=>t)[0]:r[n]);var r,n;this.state={isSelected:e}}componentDidMount(){const{column:t,onFilter:e,getFilter:r}=this.props,n=this.selectInput.value;n&&""!==n&&e(t,u.FILTER_TYPES.SELECT,!0)(n),r&&r(r=>{this.setState(()=>({isSelected:""!==r})),this.selectInput.value=r,e(t,u.FILTER_TYPES.SELECT)(r)})}componentDidUpdate(t){let e=!1;const{column:r,onFilter:n,defaultValue:o}=this.props,a=this.getOptions(this.props);if(o!==t.defaultValue?(this.selectInput.value=o,e=!0):function(t,e){if(Array.isArray(t)){if(t.length===e.length){for(let r=0;r<t.length;r+=1)if(t[r].value!==e[r].value||t[r].label!==e[r].label)return!1;return!0}return!1}const r=Object.keys(t);for(let n=0;n<r.length;n+=1)if(t[r[n]]!==e[r[n]])return!1;return Object.keys(t).length===Object.keys(e).length}(a,this.options)||(this.options=a,e=!0),e){const t=this.selectInput.value;t&&n(r,u.FILTER_TYPES.SELECT)(t)}}getOptions(t){return"function"==typeof t.options?t.options(t.column):t.options}getDefaultValue(){const{filterState:t,defaultValue:e}=this.props;return t&&void 0!==t.filterVal?t.filterVal:e}cleanFiltered(){const t=void 0!==this.props.defaultValue?this.props.defaultValue:"";this.setState(()=>({isSelected:""!==t})),this.selectInput.value=t,this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(t)}applyFilter(t){this.selectInput.value=t,this.setState(()=>({isSelected:""!==t})),this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(t)}filter(t){const{value:e}=t.target;this.setState(()=>({isSelected:""!==e})),this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(e)}renderOptions(){const t=[],{options:e}=this,{placeholder:r,column:n,withoutEmptyOption:o,defaultValue:a}=this.props;return o||void 0!==a&&""!==a||t.push(l.default.createElement("option",{key:"-1",value:"","data-testid":"select-filter-placeholder"},r||`Select ${n.text}...`)),Array.isArray(e)?e.forEach(({value:e,label:r})=>t.push(l.default.createElement("option",{key:e,value:e},r))):Object.keys(e).forEach(r=>t.push(l.default.createElement("option",{key:r,value:r},e[r]))),t}render(){const{id:t,style:e,className:r,defaultValue:n,onFilter:o,column:a,options:i,comparator:u,withoutEmptyOption:c,caseSensitive:s,getFilter:f,filterState:p,...d}=this.props,m=`filter select-filter form-control ${r} ${this.state.isSelected?"":"placeholder-selected"}`,h=`select-filter-column-${a.dataField}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:h},l.default.createElement("span",{className:"sr-only"},"Filter by ",a.text),l.default.createElement("select",{...d,ref:t=>{this.selectInput=t},id:h,style:e,className:m,onChange:this.filter,onClick:t=>t.stopPropagation(),defaultValue:this.getDefaultValue()||"","data-testid":"select-filter"},this.renderOptions()))}}e.default=c},442(e){"use strict";e.exports=t},461(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355);class c extends l.Component{constructor(t){super(t),this.filter=this.filter.bind(this),this.handleClick=this.handleClick.bind(this),this.timeout=null,this.input={},this.state={value:t.filterState&&void 0!==t.filterState.filterVal?t.filterState.filterVal:t.defaultValue??""}}componentDidMount(){const{onFilter:t,getFilter:e,column:r}=this.props,n=this.input.value;n&&t(this.props.column,u.FILTER_TYPES.TEXT,!0)(n),e&&e(e=>{this.setState(()=>({value:e})),t(r,u.FILTER_TYPES.TEXT)(e)})}componentWillUnmount(){this.cleanTimer()}componentDidUpdate(t){if(t.defaultValue!==this.props.defaultValue){const t=this.props.defaultValue??"";this.setState({value:t},()=>{this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(t)})}}filter(t){t.stopPropagation(),this.cleanTimer();const e=t.target.value;this.setState(()=>({value:e})),this.timeout=setTimeout(()=>{this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(e)},this.props.delay)}cleanTimer(){this.timeout&&clearTimeout(this.timeout)}cleanFiltered(){const t=this.props.defaultValue??"";this.setState(()=>({value:t})),this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(t)}applyFilter(t){const e=t??"";this.setState(()=>({value:e})),this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(e)}handleClick(t){t.stopPropagation(),this.props.onClick&&this.props.onClick(t)}render(){const{id:t=null,placeholder:e,column:{dataField:r,text:n},style:o,className:a,onFilter:i,caseSensitive:u=!1,defaultValue:c="",getFilter:s,filterState:f={},...p}=this.props,d=`text-filter-column-${r}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:d},l.default.createElement("span",{className:"sr-only"},"Filter by ",n),l.default.createElement("input",{...p,ref:t=>{this.input=t},type:"text",id:d,className:`filter text-filter form-control ${a}`,style:o,onChange:this.filter,onClick:this.handleClick,placeholder:e||`Enter ${n}...`,value:this.state.value,"data-testid":"text-filter"}))}}e.default=c},556(t,e,r){t.exports=r(694)()},558(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=["id","style","className","filterState","defaultValue","onFilter","column","options","comparator","withoutEmptyOption","caseSensitive","getFilter"];function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){l(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e,r){return(e=c(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function u(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function s(t,e,r){return e=p(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(e,r||[],p(t).constructor):e.apply(t,r))}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}function d(t,e){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},d(t,e)}var m,h=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),n=0;n<r.length;n++)"default"!==r[n]&&h(e,t,r[n]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355),g=function(t){if(t&&t.selectedOptions)return Array.from(t.selectedOptions).map(function(t){return t.value});if(t&&Array.isArray(t.value))return t.value;for(var e=[],r=t&&t.options?t.options.length:0,n=0;n<r;n+=1){var o=t.options[n];o&&o.selected&&e.push(o.value)}return e},O=function(t){function e(t){var r,n;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(n=s(this,e,[t])).filter=n.filter.bind(n),n.applyFilter=n.applyFilter.bind(n);var o=(null!==(r=t.defaultValue)&&void 0!==r?r:[]).map(function(e){return t.options[e]}).length>0;return n.state={isSelected:o},n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&d(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props.getFilter,r=g(this.selectInput);r&&r.length>0&&this.applyFilter(r),e&&e(function(e){t.selectInput.value=e,t.applyFilter(e)})}},{key:"componentDidUpdate",value:function(t){var e=!1;this.props.defaultValue!==t.defaultValue?e=!0:function(t,e){for(var r=Object.keys(t),n=0;n<r.length;n+=1)if(t[r[n]]!==e[r[n]])return!1;return Object.keys(t).length===Object.keys(e).length}(this.props.options,t.options)||(e=!0),e&&this.applyFilter(g(this.selectInput))}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.filterState,r=void 0===e?{}:e,n=t.defaultValue,o=void 0===n?[]:n;return r&&void 0!==r.filterVal?r.filterVal:o}},{key:"getOptions",value:function(){var t=[],e=this.props,r=e.options,n=e.placeholder,o=e.column,a=e.withoutEmptyOption,i=void 0!==a&&a,l=e.defaultValue,u=void 0===l?[]:l,c=u&&u.length>0;return i||c||t.push(v.default.createElement("option",{key:"-1",value:"","data-testid":"multiselect-placeholder"},n||"Select ".concat(o.text,"..."))),Object.keys(r).forEach(function(e){return t.push(v.default.createElement("option",{key:e,value:e},r[e]))}),t}},{key:"cleanFiltered",value:function(){var t=void 0!==this.props.defaultValue?this.props.defaultValue:[];this.selectInput.value=t,this.applyFilter(t)}},{key:"applyFilter",value:function(t){1===t.length&&""===t[0]&&(t=[]),this.setState(function(){return{isSelected:t.length>0}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.MULTISELECT)(t)}},{key:"filter",value:function(t){var e=g(t.target);this.applyFilter(e)}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,a=e.style,l=e.className,u=void 0===l?"":l,c=(e.filterState,e.defaultValue,e.onFilter,e.column),s=(e.options,e.comparator),f=(void 0===s&&E.EQ,e.withoutEmptyOption,e.caseSensitive,e.getFilter,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n<a.length;n++)r=a[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,o)),p="filter select-filter form-control ".concat(u," ").concat(this.state.isSelected?"":"placeholder-selected"),d="multiselect-filter-column-".concat(c.dataField).concat(n?"-".concat(n):"");return v.default.createElement("label",{className:"filter-label",htmlFor:d},v.default.createElement("span",{className:"sr-only"},"Filter by ",c.text),v.default.createElement("select",i(i({},f),{},{ref:function(e){t.selectInput=e},id:d,style:a,multiple:!0,className:p,onChange:this.filter,onClick:function(t){return t.stopPropagation()},defaultValue:this.getDefaultValue(),"data-testid":"multiselect-filter"}),this.getOptions()))}}],n&&u(r.prototype,n),a&&u(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);e.default=O},599(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.filterFactory=e.filterByArray=e.filterByDate=e.filterByNumber=e.filterByText=void 0;const n=r(355);e.filterByText=t=>(e,r,{filterVal:o="",comparator:a=n.LIKE,caseSensitive:i},l)=>{const u=o.toString();return e.filter(e=>{let o=t.get(e,r);l&&(o=l(o,e));const c=t.isDefined(o)?o.toString():"";return a===n.EQ?c===u:i?c.includes(u):-1!==c.toLocaleUpperCase().indexOf(u.toLocaleUpperCase())})},e.filterByNumber=t=>(e,r,{filterVal:{comparator:o,number:a}},i)=>e.filter(e=>{if(""===a||!o)return!0;let l=t.get(e,r);switch(i&&(l=i(l,e)),o){case n.EQ:return l==a;case n.GT:return l>a;case n.GE:return l>=a;case n.LT:return l<a;case n.LE:return l<=a;case n.NE:return l!=a;default:return console.error("Number comparator provided is not supported"),!0}}),e.filterByDate=t=>(e,r,{filterVal:{comparator:o,date:a}},i)=>{if(!a||!o)return e;const l=a.getUTCDate(),u=a.getUTCMonth(),c=a.getUTCFullYear();return e.filter(e=>{let s=!0,f=t.get(e,r);i&&(f=i(f,e)),"object"!=typeof f&&(f=new Date(f));const p=f.getUTCDate(),d=f.getUTCMonth(),m=f.getUTCFullYear();switch(o){case n.EQ:l===p&&u===d&&c===m||(s=!1);break;case n.GT:f<=a&&(s=!1);break;case n.GE:(m<c||m===c&&d<u||m===c&&d===u&&p<l)&&(s=!1);break;case n.LT:f>=a&&(s=!1);break;case n.LE:(m>c||m===c&&d>u||m===c&&d===u&&p>l)&&(s=!1);break;case n.NE:l===p&&u===d&&c===m&&(s=!1);break;default:console.error("Date comparator provided is not supported")}return s})},e.filterByArray=t=>(e,r,{filterVal:o,comparator:a})=>{if(0===o.length)return e;const i=o.filter(e=>t.isDefined(e)).map(t=>t.toString());return e.filter(e=>{const o=t.get(e,r);let l=t.isDefined(o)?o.toString():"";return a===n.EQ?-1!==i.indexOf(l):(l=l.toLocaleUpperCase(),i.some(t=>-1!==l.indexOf(t.toLocaleUpperCase())))})},e.filterFactory=t=>r=>{switch(r){case n.FILTER_TYPES.MULTISELECT:return(0,e.filterByArray)(t);case n.FILTER_TYPES.NUMBER:return(0,e.filterByNumber)(t);case n.FILTER_TYPES.DATE:return(0,e.filterByDate)(t);case n.FILTER_TYPES.TEXT:case n.FILTER_TYPES.SELECT:default:return(0,e.filterByText)(t)}},e.filters=(t,r,n)=>(o,a={})=>{const i=(0,e.filterFactory)(n),l={...a,...o};let u,c=t;return Object.keys(l).forEach(t=>{let e,n,o;r=r??[];for(let e=0;e<r.length;e+=1)if(r[e].dataField===t){n=r[e].filterValue,r[e].filter&&(o=r[e].filter.props.onFilter);break}if(a[t]&&o)e=o(a[t].filterVal,c),void 0!==e&&(c=e);else{const r=l[t];u=i(r.filterType),o&&(e=o(r.filterVal,c)),c=void 0===e?u(c,t,r,n):e}}),c}},610(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const o=n(r(556)),a=n(r(442)),i=r(355),l=r(599);e.default=(t,e,r)=>{const n=a.default.createContext({});class u extends a.default.Component{constructor(t){super(t),this.currFilters={},this.clearFilters={},this.onFilter=this.onFilter.bind(this),this.doFilter=this.doFilter.bind(this),this.onExternalFilter=this.onExternalFilter.bind(this),this.data=t.data,this.isEmitDataChange=!1}componentDidMount(){e()&&Object.keys(this.currFilters).length>0&&r(this.currFilters)}onFilter(n,o,a=!1){return l=>{const u=Object.assign({},this.currFilters);this.clearFilters={};const{dataField:c,filter:s}=n;if(t.isDefined(l)&&""!==l&&0!==l.length){const{comparator:t=(o===i.FILTER_TYPES.SELECT?i.EQ:i.LIKE),caseSensitive:e=!1}=s.props;u[c]={filterVal:l,filterType:o,comparator:t,caseSensitive:e}}else delete u[c],this.clearFilters={[c]:{clear:!0,filterVal:l}};if(this.currFilters=u,e()){if(a||r(this.currFilters),void 0===s.props||void 0===s.props.forceUpdate||0==s.props.forceUpdate)return;this.forceUpdate()}this.doFilter(this.props)}}onExternalFilter(t,e){return r=>{this.onFilter(t,e)(r)}}getFiltered(){return this.data}shouldComponentUpdate(r,n,o){return e()||t.isEqual(r.data,this.data)?this.data=r.data:this.doFilter(r,this.isEmitDataChange),!0}doFilter(e,r=!1){const{dataChangeListener:n,data:o,columns:a,filter:i}=e,u=(0,l.filters)(o,a,t)(this.currFilters,this.clearFilters);i.afterFilter&&i.afterFilter(u,this.currFilters),this.data=u,n&&!r?(this.isEmitDataChange=!0,n.emit("filterChanged",u.length)):(this.isEmitDataChange=!1,this.forceUpdate())}render(){return a.default.createElement(n.Provider,{value:{data:this.data,onFilter:this.onFilter,onExternalFilter:this.onExternalFilter,currFilters:this.currFilters}},this.props.children)}}return u.propTypes={data:o.default.array.isRequired,columns:o.default.array.isRequired,dataChangeListener:o.default.object},{Provider:u,Consumer:n.Consumer}}},652(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=["id","placeholder","column","style","className","onFilter","caseSensitive","defaultValue","getFilter","filterState"];function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){l(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e,r){return(e=c(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function u(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function s(t,e,r){return e=p(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(e,r||[],p(t).constructor):e.apply(t,r))}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}function d(t,e){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},d(t,e)}var m,h=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),n=0;n<r.length;n++)"default"!==r[n]&&h(e,t,r[n]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355),g=function(t){function e(t){var r,n;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=s(this,e,[t])).filter=r.filter.bind(r),r.handleClick=r.handleClick.bind(r),r.timeout=null,r.input={},r.state={value:t.filterState&&void 0!==t.filterState.filterVal?t.filterState.filterVal:null!==(n=t.defaultValue)&&void 0!==n?n:""},r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&d(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.onFilter,n=e.getFilter,o=e.column,a=this.input.value;a&&r(this.props.column,E.FILTER_TYPES.TEXT,!0)(a),n&&n(function(e){t.setState(function(){return{value:e}}),r(o,E.FILTER_TYPES.TEXT)(e)})}},{key:"componentWillUnmount",value:function(){this.cleanTimer()}},{key:"componentDidUpdate",value:function(t){var e=this;if(t.defaultValue!==this.props.defaultValue){var r,n=null!==(r=this.props.defaultValue)&&void 0!==r?r:"";this.setState({value:n},function(){e.props.onFilter(e.props.column,E.FILTER_TYPES.TEXT)(n)})}}},{key:"filter",value:function(t){var e=this;t.stopPropagation(),this.cleanTimer();var r=t.target.value;this.setState(function(){return{value:r}}),this.timeout=setTimeout(function(){e.props.onFilter(e.props.column,E.FILTER_TYPES.TEXT)(r)},this.props.delay)}},{key:"cleanTimer",value:function(){this.timeout&&clearTimeout(this.timeout)}},{key:"cleanFiltered",value:function(){var t,e=null!==(t=this.props.defaultValue)&&void 0!==t?t:"";this.setState(function(){return{value:e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.TEXT)(e)}},{key:"applyFilter",value:function(t){var e=null!=t?t:"";this.setState(function(){return{value:e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.TEXT)(e)}},{key:"handleClick",value:function(t){t.stopPropagation(),this.props.onClick&&this.props.onClick(t)}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,a=e.placeholder,l=e.column,u=l.dataField,c=l.text,s=e.style,f=e.className,p=(e.onFilter,e.caseSensitive,e.defaultValue,e.getFilter,e.filterState,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==e.indexOf(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n<a.length;n++)r=a[n],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,o)),d="text-filter-column-".concat(u).concat(n?"-".concat(n):"");return v.default.createElement("label",{className:"filter-label",htmlFor:d},v.default.createElement("span",{className:"sr-only"},"Filter by ",c),v.default.createElement("input",i(i({},p),{},{ref:function(e){t.input=e},type:"text",id:d,className:"filter text-filter form-control ".concat(f),style:s,onChange:this.filter,onClick:this.handleClick,placeholder:a||"Enter ".concat(c,"..."),value:this.state.value,"data-testid":"text-filter"})))}}],n&&u(r.prototype,n),a&&u(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);e.default=g},659(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function i(t,e,r){return e=u(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,l()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(l=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}var s,f=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},p=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},d=(s=function(t){return s=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},s(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=s(t),n=0;n<r.length;n++)"default"!==r[n]&&f(e,t,r[n]);return p(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var m=d(r(442)),h=r(355),y=["=","!=",">",">=","<","<="];function b(t){return"".concat(t.getUTCFullYear(),"-").concat(("0"+(t.getUTCMonth()+1)).slice(-2),"-").concat(("0"+t.getUTCDate()).slice(-2))}var v=function(t){function e(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=i(this,e,[t])).timeout=null,r.comparators=t.comparators||y,r.applyFilter=r.applyFilter.bind(r),r.onChangeDate=r.onChangeDate.bind(r),r.onChangeComparator=r.onChangeComparator.bind(r),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props.getFilter,r=this.dateFilterComparator.value,n=this.inputDate.value;r&&n&&this.applyFilter(n,r,!0),e&&e(function(e){var r=e||{date:null,comparator:null};t.dateFilterComparator.value=r.comparator,t.inputDate.value=r.date?b(r.date):null,t.applyFilter(r.date,r.comparator)})}},{key:"componentWillUnmount",value:function(){this.timeout&&clearTimeout(this.timeout)}},{key:"onChangeDate",value:function(t){var e=this.dateFilterComparator.value,r=t.target.value;this.applyFilter(r,e)}},{key:"onChangeComparator",value:function(t){var e=this.inputDate.value,r=t.target.value;this.applyFilter(e,r)}},{key:"getComparatorOptions",value:function(){var t=[],e=this.props.withoutEmptyComparatorOption;void 0!==e&&e||t.push(m.default.createElement("option",{key:"-1"}));for(var r=0;r<this.comparators.length;r+=1)t.push(m.default.createElement("option",{key:r,value:this.comparators[r]},this.comparators[r]));return t}},{key:"getDefaultComparator",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{date:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal?o.filterVal.comparator:r&&r.comparator?r.comparator:""}},{key:"getDefaultDate",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{date:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal&&o.filterVal.date?b(o.filterVal.date):r&&r.date?b(new Date(r.date)):""}},{key:"applyFilter",value:function(t,e,r){var n=this.props,o=n.column,a=n.onFilter,i=n.delay,l=void 0===i?0:i,u=function(){var n=""===t?null:new Date(t);a(o,h.FILTER_TYPES.DATE,r)({date:n,comparator:e})};l?this.timeout=setTimeout(function(){u()},l):u()}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,o=e.placeholder,a=e.column,i=a.dataField,l=a.text,u=e.style,c=e.comparatorStyle,s=e.dateStyle,f=e.className,p=void 0===f?"":f,d=e.comparatorClassName,h=void 0===d?"":d,y=e.dateClassName,b=void 0===y?"":y,v="date-filter-comparator-".concat(i).concat(n?"-".concat(n):""),E="date-filter-column-".concat(i).concat(n?"-".concat(n):"");return m.default.createElement("div",{onClick:function(t){return t.stopPropagation()},className:"filter date-filter ".concat(p),style:u,"data-testid":"date-filter"},m.default.createElement("label",{className:"filter-label",htmlFor:v},m.default.createElement("span",{className:"sr-only"},"Filter comparator"),m.default.createElement("select",{ref:function(e){t.dateFilterComparator=e},id:v,style:c,className:"date-filter-comparator form-control ".concat(h),onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"date-filter-comparator"},this.getComparatorOptions())),m.default.createElement("label",{htmlFor:E},m.default.createElement("span",{className:"sr-only"},"Enter $",l),m.default.createElement("input",{ref:function(e){t.inputDate=e},id:E,className:"filter date-filter-input form-control ".concat(b),style:s,type:"date",onChange:this.onChangeDate,placeholder:o||"Enter ".concat(l,"..."),defaultValue:this.getDefaultDate(),"data-testid":"date-filter-input"})))}}],n&&o(r.prototype,n),a&&o(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(m.Component);e.default=v},684(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.customFilter=e.dateFilter=e.numberFilter=e.multiSelectFilter=e.selectFilter=e.textFilter=e.ComparatorNumber=e.LE=e.LT=e.GE=e.GT=e.NE=e.EQ=e.LIKE=e.FILTER_DELAY=e.FILTER_TYPES=void 0;const o=n(r(696)),a=n(r(321)),i=n(r(851)),l=n(r(388)),u=n(r(461)),c=n(r(610));var s;!function(t){t.TEXT="TEXT",t.SELECT="SELECT",t.MULTISELECT="MULTISELECT",t.NUMBER="NUMBER",t.DATE="DATE"}(s||(e.FILTER_TYPES=s={})),e.FILTER_DELAY=500,e.LIKE="LIKE",e.EQ="=",e.NE="!=",e.GT=">",e.GE=">=",e.LT="<",e.LE="<=",e.ComparatorNumber=7,e.textFilter=(t={})=>({Filter:u.default,props:t}),e.selectFilter=(t={})=>({Filter:l.default,props:t}),e.multiSelectFilter=(t={})=>({Filter:a.default,props:t}),e.numberFilter=(t={})=>({Filter:i.default,props:t}),e.dateFilter=(t={})=>({Filter:o.default,props:t}),e.customFilter=(t={})=>({Filter:()=>{},props:t}),e.default=(t={})=>({createContext:c.default,options:t})},694(t,e,r){"use strict";var n=r(925);function o(){}function a(){}a.resetWarningCache=o,t.exports=function(){function t(t,e,r,o,a,i){if(i!==n){var l=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 l.name="Invariant Violation",l}}function e(){return t}t.isRequired=t;var r={array:t,bigint:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:a,resetWarningCache:o};return r.PropTypes=r,r}},696(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=["=","!=",">",">=","<","<="];function s(t){return`${t.getUTCFullYear()}-${("0"+(t.getUTCMonth()+1)).slice(-2)}-${("0"+t.getUTCDate()).slice(-2)}`}class f extends l.Component{constructor(t){super(t),this.timeout=null,this.comparators=t.comparators||c,this.applyFilter=this.applyFilter.bind(this),this.onChangeDate=this.onChangeDate.bind(this),this.onChangeComparator=this.onChangeComparator.bind(this)}componentDidMount(){const{getFilter:t}=this.props,e=this.dateFilterComparator.value,r=this.inputDate.value;e&&r&&this.applyFilter(r,e,!0),t&&t(t=>{const e=t||{date:null,comparator:null};this.dateFilterComparator.value=e.comparator,this.inputDate.value=e.date?s(e.date):null,this.applyFilter(e.date,e.comparator)})}componentWillUnmount(){this.timeout&&clearTimeout(this.timeout)}onChangeDate(t){const e=this.dateFilterComparator.value,r=t.target.value;this.applyFilter(r,e)}onChangeComparator(t){const e=this.inputDate.value,r=t.target.value;this.applyFilter(e,r)}getComparatorOptions(){const t=[],{withoutEmptyComparatorOption:e=!1}=this.props;e||t.push(l.default.createElement("option",{key:"-1"}));for(let e=0;e<this.comparators.length;e+=1)t.push(l.default.createElement("option",{key:e,value:this.comparators[e]},this.comparators[e]));return t}getDefaultComparator(){const{defaultValue:t={date:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.comparator:t&&t.comparator?t.comparator:""}getDefaultDate(){const{defaultValue:t={date:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal&&e.filterVal.date?s(e.filterVal.date):t&&t.date?s(new Date(t.date)):""}applyFilter(t,e,r){const{column:n,onFilter:o,delay:a=0}=this.props,i=()=>{const a=""===t?null:new Date(t);o(n,u.FILTER_TYPES.DATE,r)({date:a,comparator:e})};a?this.timeout=setTimeout(()=>{i()},a):i()}render(){const{id:t=null,placeholder:e,column:{dataField:r,text:n},style:o,comparatorStyle:a,dateStyle:i,className:u="",comparatorClassName:c="",dateClassName:s=""}=this.props,f=`date-filter-comparator-${r}${t?`-${t}`:""}`,p=`date-filter-column-${r}${t?`-${t}`:""}`;return l.default.createElement("div",{onClick:t=>t.stopPropagation(),className:`filter date-filter ${u}`,style:o,"data-testid":"date-filter"},l.default.createElement("label",{className:"filter-label",htmlFor:f},l.default.createElement("span",{className:"sr-only"},"Filter comparator"),l.default.createElement("select",{ref:t=>{this.dateFilterComparator=t},id:f,style:a,className:`date-filter-comparator form-control ${c}`,onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"date-filter-comparator"},this.getComparatorOptions())),l.default.createElement("label",{htmlFor:p},l.default.createElement("span",{className:"sr-only"},"Enter $",n),l.default.createElement("input",{ref:t=>{this.inputDate=t},id:p,className:`filter date-filter-input form-control ${s}`,style:i,type:"date",onChange:this.onChangeDate,placeholder:e||`Enter ${n}...`,defaultValue:this.getDefaultDate(),"data-testid":"date-filter-input"})))}}e.default=f},834(t,e,r){"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}function i(t,e,r){return e=u(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,l()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(l=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}var s,f=Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]},p=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},d=(s=function(t){return s=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},s(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=s(t),n=0;n<r.length;n++)"default"!==r[n]&&f(e,t,r[n]);return p(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var m=d(r(442)),h=r(355),y=["=","!=",">",">=","<","<="],b=function(t){function e(t){var r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),(r=i(this,e,[t])).comparators=t.comparators||y,r.timeout=null;var n=void 0!==t.defaultValue&&void 0!==t.defaultValue.number;return t.options&&n&&(n=t.options.indexOf(t.defaultValue.number)>-1),r.state={isSelected:n},r.onChangeNumber=r.onChangeNumber.bind(r),r.onChangeNumberSet=r.onChangeNumberSet.bind(r),r.onChangeComparator=r.onChangeComparator.bind(r),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.column,n=e.onFilter,o=e.getFilter,a=""===this.numberFilterComparator.value?"=":this.numberFilterComparator.value,i=this.numberFilter.value;a&&i&&n(r,h.FILTER_TYPES.NUMBER,!0)({number:i,comparator:a}),o&&o(function(e){t.setState(function(){return{isSelected:""!==e}}),t.numberFilterComparator.value=e.comparator,t.numberFilter.value=e.number;var o=e.number,a=e.comparator;n(r,h.FILTER_TYPES.NUMBER)({number:o,comparator:a})})}},{key:"componentWillUnmount",value:function(){clearTimeout(this.timeout)}},{key:"onChangeNumber",value:function(t){var e=this.props,r=e.delay,n=void 0===r?h.FILTER_DELAY:r,o=e.column,a=e.onFilter,i=this.numberFilterComparator.value;if(""!==i){this.timeout&&clearTimeout(this.timeout);var l=t.target.value;this.timeout=setTimeout(function(){a(o,h.FILTER_TYPES.NUMBER)({number:l,comparator:i})},n)}}},{key:"onChangeNumberSet",value:function(t){var e=this.props,r=e.column,n=e.onFilter,o=this.numberFilterComparator.value,a=t.target.value;this.setState(function(){return{isSelected:""!==a}}),n(r,h.FILTER_TYPES.NUMBER)({number:a,comparator:o})}},{key:"onChangeComparator",value:function(t){var e=this.props,r=e.column,n=e.onFilter,o=this.numberFilter.value,a=t.target.value;n(r,h.FILTER_TYPES.NUMBER)({number:o,comparator:a})}},{key:"getDefaultComparator",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{number:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal?o.filterVal.comparator:r&&r.comparator?r.comparator:""}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{number:void 0,comparator:""}:e,n=t.filterState,o=void 0===n?{}:n;return o&&o.filterVal?o.filterVal.number:r&&r.number?r.number:""}},{key:"getComparatorOptions",value:function(){var t=[],e=this.props.withoutEmptyComparatorOption;void 0!==e&&e||t.push(m.default.createElement("option",{key:"-1"}));for(var r=0;r<this.comparators.length;r+=1)t.push(m.default.createElement("option",{key:r,value:this.comparators[r]},this.comparators[r]));return t}},{key:"getNumberOptions",value:function(){var t=[],e=this.props,r=e.options,n=e.column,o=e.withoutEmptyNumberOption;void 0!==o&&o||t.push(m.default.createElement("option",{key:"-1",value:""},this.props.placeholder||"Select ".concat(n.text,"...")));for(var a=0;a<r.length;a+=1)t.push(m.default.createElement("option",{key:a,value:r[a]},r[a]));return t}},{key:"applyFilter",value:function(t){var e=this.props,r=e.column,n=e.onFilter,o=t.number,a=t.comparator;this.setState(function(){return{isSelected:""!==o}}),this.numberFilterComparator.value=a,this.numberFilter.value=o,n(r,h.FILTER_TYPES.NUMBER)({number:o,comparator:a})}},{key:"cleanFiltered",value:function(){var t=this.props,e=t.column,r=t.onFilter,n=t.defaultValue,o=void 0===n?{number:void 0,comparator:""}:n,a=o?o.number:"",i=o?o.comparator:"";this.setState(function(){return{isSelected:""!==a}}),this.numberFilterComparator.value=i,this.numberFilter.value=a,r(e,h.FILTER_TYPES.NUMBER)({number:a,comparator:i})}},{key:"render",value:function(){var t=this,e=this.state.isSelected,r=this.props,n=r.id,o=void 0===n?null:n,a=r.column,i=r.options,l=r.style,u=r.className,c=void 0===u?"":u,s=r.numberStyle,f=r.numberClassName,p=void 0===f?"":f,d=r.comparatorStyle,h=r.comparatorClassName,y=void 0===h?"":h,b=r.placeholder,v="\n select-filter\n number-filter-input\n form-control\n ".concat(p,"\n ").concat(e?"":"placeholder-selected","\n "),E="number-filter-comparator-".concat(a.dataField).concat(o?"-".concat(o):""),g="number-filter-column-".concat(a.dataField).concat(o?"-".concat(o):"");return m.default.createElement("div",{onClick:function(t){return t.stopPropagation()},className:"filter number-filter ".concat(c),style:l,"data-testid":"number-filter"},m.default.createElement("label",{className:"filter-label",htmlFor:E},m.default.createElement("span",{className:"sr-only"},"Filter comparator"),m.default.createElement("select",{ref:function(e){t.numberFilterComparator=e},style:d,id:E,className:"number-filter-comparator form-control ".concat(y),onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"number-filter-comparator"},this.getComparatorOptions())),i?m.default.createElement("label",{className:"filter-label",htmlFor:g},m.default.createElement("span",{className:"sr-only"},"Select ".concat(a.text)),m.default.createElement("select",{ref:function(e){t.numberFilter=e},id:g,style:s,className:v,onChange:this.onChangeNumberSet,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-select"},this.getNumberOptions())):m.default.createElement("label",{htmlFor:g},m.default.createElement("span",{className:"sr-only"},"Enter ".concat(a.text)),m.default.createElement("input",{ref:function(e){t.numberFilter=e},id:g,type:"number",style:s,className:"number-filter-input form-control ".concat(p),placeholder:b||"Enter ".concat(a.text,"..."),onChange:this.onChangeNumber,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-input"})))}}],n&&o(r.prototype,n),a&&o(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(m.Component);e.default=b},851(t,e,r){"use strict";var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(n=function(t){return n=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},n(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=n(t),i=0;i<r.length;i++)"default"!==r[i]&&o(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=["=","!=",">",">=","<","<="];class s extends l.Component{constructor(t){super(t),this.comparators=t.comparators||c,this.timeout=null;let e=void 0!==t.defaultValue&&void 0!==t.defaultValue.number;t.options&&e&&(e=t.options.indexOf(t.defaultValue.number)>-1),this.state={isSelected:e},this.onChangeNumber=this.onChangeNumber.bind(this),this.onChangeNumberSet=this.onChangeNumberSet.bind(this),this.onChangeComparator=this.onChangeComparator.bind(this)}componentDidMount(){const{column:t,onFilter:e,getFilter:r}=this.props,n=""===this.numberFilterComparator.value?"=":this.numberFilterComparator.value,o=this.numberFilter.value;n&&o&&e(t,u.FILTER_TYPES.NUMBER,!0)({number:o,comparator:n}),r&&r(r=>{this.setState(()=>({isSelected:""!==r})),this.numberFilterComparator.value=r.comparator,this.numberFilter.value=r.number;const n=r.number,o=r.comparator;e(t,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})})}componentWillUnmount(){clearTimeout(this.timeout)}onChangeNumber(t){const{delay:e=u.FILTER_DELAY,column:r,onFilter:n}=this.props,o=this.numberFilterComparator.value;if(""===o)return;this.timeout&&clearTimeout(this.timeout);const a=t.target.value;this.timeout=setTimeout(()=>{n(r,u.FILTER_TYPES.NUMBER)({number:a,comparator:o})},e)}onChangeNumberSet(t){const{column:e,onFilter:r}=this.props,n=this.numberFilterComparator.value,{value:o}=t.target;this.setState(()=>({isSelected:""!==o})),r(e,u.FILTER_TYPES.NUMBER)({number:o,comparator:n})}onChangeComparator(t){const{column:e,onFilter:r}=this.props,n=this.numberFilter.value,o=t.target.value;r(e,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})}getDefaultComparator(){const{defaultValue:t={number:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.comparator:t&&t.comparator?t.comparator:""}getDefaultValue(){const{defaultValue:t={number:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.number:t&&t.number?t.number:""}getComparatorOptions(){const t=[],{withoutEmptyComparatorOption:e=!1}=this.props;e||t.push(l.default.createElement("option",{key:"-1"}));for(let e=0;e<this.comparators.length;e+=1)t.push(l.default.createElement("option",{key:e,value:this.comparators[e]},this.comparators[e]));return t}getNumberOptions(){const t=[],{options:e,column:r,withoutEmptyNumberOption:n=!1}=this.props;n||t.push(l.default.createElement("option",{key:"-1",value:""},this.props.placeholder||`Select ${r.text}...`));for(let r=0;r<e.length;r+=1)t.push(l.default.createElement("option",{key:r,value:e[r]},e[r]));return t}applyFilter(t){const{column:e,onFilter:r}=this.props,{number:n,comparator:o}=t;this.setState(()=>({isSelected:""!==n})),this.numberFilterComparator.value=o,this.numberFilter.value=n,r(e,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})}cleanFiltered(){const{column:t,onFilter:e,defaultValue:r={number:void 0,comparator:""}}=this.props,n=r?r.number:"",o=r?r.comparator:"";this.setState(()=>({isSelected:""!==n})),this.numberFilterComparator.value=o,this.numberFilter.value=n,e(t,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})}render(){const{isSelected:t}=this.state,{id:e=null,column:r,options:n,style:o,className:a="",numberStyle:i,numberClassName:u="",comparatorStyle:c,comparatorClassName:s="",placeholder:f}=this.props,p=`\n select-filter\n number-filter-input\n form-control\n ${u}\n ${t?"":"placeholder-selected"}\n `,d=`number-filter-comparator-${r.dataField}${e?`-${e}`:""}`,m=`number-filter-column-${r.dataField}${e?`-${e}`:""}`;return l.default.createElement("div",{onClick:t=>t.stopPropagation(),className:`filter number-filter ${a}`,style:o,"data-testid":"number-filter"},l.default.createElement("label",{className:"filter-label",htmlFor:d},l.default.createElement("span",{className:"sr-only"},"Filter comparator"),l.default.createElement("select",{ref:t=>{this.numberFilterComparator=t},style:c,id:d,className:`number-filter-comparator form-control ${s}`,onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"number-filter-comparator"},this.getComparatorOptions())),n?l.default.createElement("label",{className:"filter-label",htmlFor:m},l.default.createElement("span",{className:"sr-only"},`Select ${r.text}`),l.default.createElement("select",{ref:t=>{this.numberFilter=t},id:m,style:i,className:p,onChange:this.onChangeNumberSet,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-select"},this.getNumberOptions())):l.default.createElement("label",{htmlFor:m},l.default.createElement("span",{className:"sr-only"},`Enter ${r.text}`),l.default.createElement("input",{ref:t=>{this.numberFilter=t},id:m,type:"number",style:i,className:`number-filter-input form-control ${u}`,placeholder:f||`Enter ${r.text}...`,onChange:this.onChangeNumber,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-input"})))}}e.default=s},925(t){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"}},r={},function t(n){var o=r[n];if(void 0!==o)return o.exports;var a=r[n]={exports:{}};return e[n].call(a.exports,a,a.exports,t),a.exports}(684);var e,r});
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIuanMiLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsVUFDUixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsU0FBVUosR0FDUSxpQkFBWkMsUUFDZEEsUUFBcUMsNEJBQUlELEVBQVFHLFFBQVEsVUFFekRKLEVBQWtDLDRCQUFJQyxFQUFRRCxFQUFZLE1BQzNELENBVEQsQ0FTR08sS0FBT0MsSUFDVixPLDBCQ1JBLFNBQVNDLEVBQVFDLEdBQWdDLE9BQU9ELEVBQVUsbUJBQXFCRSxRQUFVLGlCQUFtQkEsT0FBT0MsU0FBVyxTQUFVRixHQUFLLGNBQWNBLENBQUcsRUFBSSxTQUFVQSxHQUFLLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQUcsRUFBR0QsRUFBUUMsRUFBSSxDQUc3VCxTQUFTSyxFQUFrQkMsRUFBR0MsR0FBSyxJQUFLLElBQUlDLEVBQUksRUFBR0EsRUFBSUQsRUFBRUUsT0FBUUQsSUFBSyxDQUFFLElBQUlSLEVBQUlPLEVBQUVDLEdBQUlSLEVBQUVVLFdBQWFWLEVBQUVVLGFBQWMsRUFBSVYsRUFBRVcsY0FBZSxFQUFJLFVBQVdYLElBQU1BLEVBQUVZLFVBQVcsR0FBS0MsT0FBT0MsZUFBZVIsRUFBR1MsRUFBZWYsRUFBRWdCLEtBQU1oQixFQUFJLENBQUUsQ0FFdk8sU0FBU2UsRUFBZVAsR0FBSyxJQUFJUyxFQUNqQyxTQUFzQlQsRUFBR0QsR0FBSyxHQUFJLFVBQVlSLEVBQVFTLEtBQU9BLEVBQUcsT0FBT0EsRUFBRyxJQUFJRixFQUFJRSxFQUFFUCxPQUFPaUIsYUFBYyxRQUFTLElBQU1aLEVBQUcsQ0FBRSxJQUFJ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Qix5QkFNeEIsRUFxRUYsVUFBZTROLEMsc0JDMVZmalgsRUFBT0QsUUFGb0IsOEMsR0NSdkI0WSxFQUEyQixDQUFDLEVBR2hDLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSCxFQUF5QkUsR0FDNUMsUUFBcUIxVCxJQUFqQjJULEVBQ0gsT0FBT0EsRUFBYS9ZLFFBR3JCLElBQUlDLEVBQVMyWSxFQUF5QkUsR0FBWSxDQUdqRDlZLFFBQVMsQ0FBQyxHQU9YLE9BSEFnWixFQUFvQkYsR0FBVW5YLEtBQUsxQixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTNlksR0FHcEU1WSxFQUFPRCxPQUNmLENDbkIwQjZZLENBQW9CLEssTURGMUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2xpYi9zcmMvY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2xpYi9zcmMvY29tcG9uZW50cy9zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvc3JjL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL211bHRpc2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL3NlbGVjdC50c3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvc3JjL2NvbXBvbmVudHMvdGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvc3JjL2NvbXBvbmVudHMvbXVsdGlzZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9zcmMvZmlsdGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvc3JjL2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL3NyYy9jb21wb25lbnRzL3RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvc3JjL2NvbXBvbmVudHMvZGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2luZGV4LnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL2RhdGUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL3NyYy9jb21wb25lbnRzL251bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL251bWJlci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ0ZpbHRlclwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdGaWx0ZXJcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18pID0+IHtcbnJldHVybiAiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG52YXIgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vZmlsdGVyXCIpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoXywgaXNSZW1vdGVGaWx0ZXJpbmcsIGhhbmRsZUZpbHRlckNoYW5nZSkge1xuICB2YXIgRmlsdGVyQ29udGV4dCA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUNvbnRleHQoe30pO1xuICB2YXIgRmlsdGVyUHJvdmlkZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJGRlZmF1bHQkQ29tcCkge1xuICAgIGZ1bmN0aW9uIEZpbHRlclByb3ZpZGVyKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmlsdGVyUHJvdmlkZXIpO1xuICAgICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEZpbHRlclByb3ZpZGVyLCBbcHJvcHNdKTtcbiAgICAgIF90aGlzLmN1cnJGaWx0ZXJzID0ge307XG4gICAgICBfdGhpcy5jbGVhckZpbHRlcnMgPSB7fTtcbiAgICAgIF90aGlzLm9uRmlsdGVyID0gX3RoaXMub25GaWx0ZXIuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5kb0ZpbHRlciA9IF90aGlzLmRvRmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMub25FeHRlcm5hbEZpbHRlciA9IF90aGlzLm9uRXh0ZXJuYWxGaWx0ZXIuYmluZChfdGhpcyk7XG4gICAgICBfdGhpcy5kYXRhID0gcHJvcHMuZGF0YTtcbiAgICAgIF90aGlzLmlzRW1pdERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2luaGVyaXRzKEZpbHRlclByb3ZpZGVyLCBfcmVhY3RfMSRkZWZhdWx0JENvbXApO1xuICAgIHJldHVybiBfY3JlYXRlQ2xhc3MoRmlsdGVyUHJvdmlkZXIsIFt7XG4gICAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgaWYgKGlzUmVtb3RlRmlsdGVyaW5nKCkgJiYgT2JqZWN0LmtleXModGhpcy5jdXJyRmlsdGVycykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGhhbmRsZUZpbHRlckNoYW5nZSh0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvbkZpbHRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRmlsdGVyKGNvbHVtbiwgZmlsdGVyVHlwZSkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgdmFyIGluaXRpYWxpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZpbHRlclZhbCkge1xuICAgICAgICAgIC8vIHdhdGNoIG91dCBoZXJlIGlmIG1pZ3JhdGlvbiB0byBjb250ZXh0IEFQSSwgIzMzNFxuICAgICAgICAgIHZhciBjdXJyRmlsdGVycyA9IE9iamVjdC5hc3NpZ24oe30sIF90aGlzMi5jdXJyRmlsdGVycyk7XG4gICAgICAgICAgX3RoaXMyLmNsZWFyRmlsdGVycyA9IHt9O1xuICAgICAgICAgIHZhciBkYXRhRmllbGQgPSBjb2x1bW4uZGF0YUZpZWxkLFxuICAgICAgICAgICAgZmlsdGVyID0gY29sdW1uLmZpbHRlcjtcbiAgICAgICAgICB2YXIgbmVlZENsZWFyRmlsdGVycyA9ICFfLmlzRGVmaW5lZChmaWx0ZXJWYWwpIHx8IGZpbHRlclZhbCA9PT0gXCJcIiB8fCBmaWx0ZXJWYWwubGVuZ3RoID09PSAwO1xuICAgICAgICAgIGlmIChuZWVkQ2xlYXJGaWx0ZXJzKSB7XG4gICAgICAgICAgICBkZWxldGUgY3VyckZpbHRlcnNbZGF0YUZpZWxkXTtcbiAgICAgICAgICAgIF90aGlzMi5jbGVhckZpbHRlcnMgPSBfZGVmaW5lUHJvcGVydHkoe30sIGRhdGFGaWVsZCwge1xuICAgICAgICAgICAgICBjbGVhcjogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsdGVyVmFsOiBmaWx0ZXJWYWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzZWxlY3QgZGVmYXVsdCBjb21wYXJhdG9yIGlzIEVRLCBvdGhlcnMgYXJlIExJS0VcbiAgICAgICAgICAgIHZhciBfZmlsdGVyJHByb3BzID0gZmlsdGVyLnByb3BzLFxuICAgICAgICAgICAgICBfZmlsdGVyJHByb3BzJGNvbXBhcmEgPSBfZmlsdGVyJHByb3BzLmNvbXBhcmF0b3IsXG4gICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSBfZmlsdGVyJHByb3BzJGNvbXBhcmEgPT09IHZvaWQgMCA/IGZpbHRlclR5cGUgPT09IF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUID8gX18xLkVRIDogX18xLkxJS0UgOiBfZmlsdGVyJHByb3BzJGNvbXBhcmEsXG4gICAgICAgICAgICAgIF9maWx0ZXIkcHJvcHMkY2FzZVNlbiA9IF9maWx0ZXIkcHJvcHMuY2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IF9maWx0ZXIkcHJvcHMkY2FzZVNlbiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZmlsdGVyJHByb3BzJGNhc2VTZW47XG4gICAgICAgICAgICBjdXJyRmlsdGVyc1tkYXRhRmllbGRdID0ge1xuICAgICAgICAgICAgICBmaWx0ZXJWYWw6IGZpbHRlclZhbCxcbiAgICAgICAgICAgICAgZmlsdGVyVHlwZTogZmlsdGVyVHlwZSxcbiAgICAgICAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvcixcbiAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3RoaXMyLmN1cnJGaWx0ZXJzID0gY3VyckZpbHRlcnM7XG4gICAgICAgICAgaWYgKGlzUmVtb3RlRmlsdGVyaW5nKCkpIHtcbiAgICAgICAgICAgIGlmICghaW5pdGlhbGl6ZSkge1xuICAgICAgICAgICAgICBoYW5kbGVGaWx0ZXJDaGFuZ2UoX3RoaXMyLmN1cnJGaWx0ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRPRE86IFdoeSB3ZSBuZWVkIHRvIGZvcmNlVXBkYXRlIGhlcmU/IFxuICAgICAgICAgICAgLy8gSXQgc2VlbXMgdGhlIGZpbHRlciBjb21wb25lbnQgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQvUHJvdmlkZXJcbiAgICAgICAgICAgIC8vIEludHJvZHVjZSB0YWRkaXRpb25hbCBwcm9wZXJ0eSBmb3JjZVVwZGF0ZSAoZGVmYXVsdCB0byBmYWxzZSkgdG8gYXZvaWQgaW5maW5pdGUgbG9vcCBvZiB0aGlzLmZvcmNlVXBkYXRlKCksIHdpbGwgbmVlZCB0byByZWZhY3RvciB0aGUgZmlsdGVyIGNvbXBvbmVudCB0byBiZSBjb250cm9sbGVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50L1Byb3ZpZGVyXG4gICAgICAgICAgICBpZiAoZmlsdGVyLnByb3BzID09PSB1bmRlZmluZWQgfHwgZmlsdGVyLnByb3BzLmZvcmNlVXBkYXRlID09PSB1bmRlZmluZWQgfHwgZmlsdGVyLnByb3BzLmZvcmNlVXBkYXRlID09IGZhbHNlKSByZXR1cm47XG4gICAgICAgICAgICBfdGhpczIuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3RoaXMyLmRvRmlsdGVyKF90aGlzMi5wcm9wcyk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIm9uRXh0ZXJuYWxGaWx0ZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbkV4dGVybmFsRmlsdGVyKGNvbHVtbiwgZmlsdGVyVHlwZSkge1xuICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIF90aGlzMy5vbkZpbHRlcihjb2x1bW4sIGZpbHRlclR5cGUpKHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0RmlsdGVyZWRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWx0ZXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic2hvdWxkQ29tcG9uZW50VXBkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCkge1xuICAgICAgICBpZiAoIWlzUmVtb3RlRmlsdGVyaW5nKCkgJiYgIV8uaXNFcXVhbChuZXh0UHJvcHMuZGF0YSwgdGhpcy5kYXRhKSkge1xuICAgICAgICAgIHRoaXMuZG9GaWx0ZXIobmV4dFByb3BzLCB0aGlzLmlzRW1pdERhdGFDaGFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YSA9IG5leHRQcm9wcy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkb0ZpbHRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRvRmlsdGVyKHByb3BzKSB7XG4gICAgICAgIHZhciBpZ25vcmVFbWl0RGF0YUNoYW5nZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICAgIHZhciBkYXRhQ2hhbmdlTGlzdGVuZXIgPSBwcm9wcy5kYXRhQ2hhbmdlTGlzdGVuZXIsXG4gICAgICAgICAgZGF0YSA9IHByb3BzLmRhdGEsXG4gICAgICAgICAgY29sdW1ucyA9IHByb3BzLmNvbHVtbnMsXG4gICAgICAgICAgZmlsdGVyID0gcHJvcHMuZmlsdGVyO1xuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGZpbHRlcl8xLmZpbHRlcnMpKGRhdGEsIGNvbHVtbnMsIF8pKHRoaXMuY3VyckZpbHRlcnMsIHRoaXMuY2xlYXJGaWx0ZXJzKTtcbiAgICAgICAgaWYgKGZpbHRlci5hZnRlckZpbHRlcikge1xuICAgICAgICAgIGZpbHRlci5hZnRlckZpbHRlcihyZXN1bHQsIHRoaXMuY3VyckZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdDtcbiAgICAgICAgaWYgKGRhdGFDaGFuZ2VMaXN0ZW5lciAmJiAhaWdub3JlRW1pdERhdGFDaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLmlzRW1pdERhdGFDaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lci5lbWl0KFwiZmlsdGVyQ2hhbmdlZFwiLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlzRW1pdERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChGaWx0ZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIG9uRmlsdGVyOiB0aGlzLm9uRmlsdGVyLFxuICAgICAgICAgICAgb25FeHRlcm5hbEZpbHRlcjogdGhpcy5vbkV4dGVybmFsRmlsdGVyLFxuICAgICAgICAgICAgY3VyckZpbHRlcnM6IHRoaXMuY3VyckZpbHRlcnNcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1dKTtcbiAgfShyZWFjdF8xW1wiZGVmYXVsdFwiXS5Db21wb25lbnQpO1xuICBGaWx0ZXJQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gICAgZGF0YTogcHJvcF90eXBlc18xW1wiZGVmYXVsdFwiXS5hcnJheS5pc1JlcXVpcmVkLFxuICAgIGNvbHVtbnM6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0uYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBkYXRhQ2hhbmdlTGlzdGVuZXI6IHByb3BfdHlwZXNfMVtcImRlZmF1bHRcIl0ub2JqZWN0XG4gIH07XG4gIHJldHVybiB7XG4gICAgUHJvdmlkZXI6IEZpbHRlclByb3ZpZGVyLFxuICAgIENvbnN1bWVyOiBGaWx0ZXJDb250ZXh0LkNvbnN1bWVyXG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiaWRcIiwgXCJzdHlsZVwiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcIm9uRmlsdGVyXCIsIFwiY29sdW1uXCIsIFwib3B0aW9uc1wiLCBcImNvbXBhcmF0b3JcIiwgXCJ3aXRob3V0RW1wdHlPcHRpb25cIiwgXCJjYXNlU2Vuc2l0aXZlXCIsIFwiZ2V0RmlsdGVyXCIsIFwiZmlsdGVyU3RhdGVcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uLy4uXCIpO1xuZnVuY3Rpb24gb3B0aW9uc0VxdWFscyhjdXJyT3B0cywgcHJldk9wdHMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY3Vyck9wdHMpKSB7XG4gICAgaWYgKGN1cnJPcHRzLmxlbmd0aCA9PT0gcHJldk9wdHMubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnJPcHRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChjdXJyT3B0c1tpXS52YWx1ZSAhPT0gcHJldk9wdHNbaV0udmFsdWUgfHwgY3Vyck9wdHNbaV0ubGFiZWwgIT09IHByZXZPcHRzW2ldLmxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY3Vyck9wdHMpO1xuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwga2V5cy5sZW5ndGg7IF9pICs9IDEpIHtcbiAgICBpZiAoY3Vyck9wdHNba2V5c1tfaV1dICE9PSBwcmV2T3B0c1trZXlzW19pXV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGN1cnJPcHRzKS5sZW5ndGggPT09IE9iamVjdC5rZXlzKHByZXZPcHRzKS5sZW5ndGg7XG59XG5mdW5jdGlvbiBnZXRPcHRpb25WYWx1ZShvcHRpb25zLCBrZXkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICB2YXIgcmVzdWx0ID0gb3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBsYWJlbCA9IF9yZWYubGFiZWw7XG4gICAgICByZXR1cm4gbGFiZWwgPT09IGtleTtcbiAgICB9KS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgdmFsdWUgPSBfcmVmMi52YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0WzBdO1xuICB9XG4gIHJldHVybiBvcHRpb25zW2tleV07XG59XG52YXIgU2VsZWN0RmlsdGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gU2VsZWN0RmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZWxlY3RGaWx0ZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBTZWxlY3RGaWx0ZXIsIFtwcm9wc10pO1xuICAgIF90aGlzLmZpbHRlciA9IF90aGlzLmZpbHRlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vcHRpb25zID0gX3RoaXMuZ2V0T3B0aW9ucyhwcm9wcyk7XG4gICAgdmFyIGlzU2VsZWN0ZWQgPSBnZXRPcHRpb25WYWx1ZShfdGhpcy5vcHRpb25zLCBfdGhpcy5nZXREZWZhdWx0VmFsdWUoKSkgIT09IHVuZGVmaW5lZDtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWRcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoU2VsZWN0RmlsdGVyLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFNlbGVjdEZpbHRlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzLmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wcy5vbkZpbHRlcixcbiAgICAgICAgZ2V0RmlsdGVyID0gX3RoaXMkcHJvcHMuZ2V0RmlsdGVyO1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5zZWxlY3RJbnB1dC52YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gXCJcIikge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLlNFTEVDVCwgdHJ1ZSkodmFsdWUpO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgICBnZXRGaWx0ZXIoZnVuY3Rpb24gKGZpbHRlclZhbCkge1xuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBmaWx0ZXJWYWwgIT09IFwiXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX3RoaXMyLnNlbGVjdElucHV0LnZhbHVlID0gZmlsdGVyVmFsO1xuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLlNFTEVDVCkoZmlsdGVyVmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgbmVlZEZpbHRlciA9IGZhbHNlO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzMi5jb2x1bW4sXG4gICAgICAgIG9uRmlsdGVyID0gX3RoaXMkcHJvcHMyLm9uRmlsdGVyLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlO1xuICAgICAgdmFyIG5leHRPcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKHRoaXMucHJvcHMpO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gcHJldlByb3BzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICBuZWVkRmlsdGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnNFcXVhbHMobmV4dE9wdGlvbnMsIHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gbmV4dE9wdGlvbnM7XG4gICAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRGaWx0ZXIpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5zZWxlY3RJbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUKSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0T3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPcHRpb25zKHByb3BzKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHByb3BzLm9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIiA/IHByb3BzLm9wdGlvbnMocHJvcHMuY29sdW1uKSA6IHByb3BzLm9wdGlvbnM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgZmlsdGVyU3RhdGUgPSBfdGhpcyRwcm9wczMuZmlsdGVyU3RhdGUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMy5kZWZhdWx0VmFsdWU7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgdHlwZW9mIGZpbHRlclN0YXRlLmZpbHRlclZhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZmlsdGVyU3RhdGUuZmlsdGVyVmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xlYW5GaWx0ZXJlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhbkZpbHRlcmVkKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlIDogXCJcIjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5RmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RmlsdGVyKHZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIlxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaWx0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmlsdGVyKGUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyT3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJPcHRpb25zKCkge1xuICAgICAgdmFyIG9wdGlvblRhZ3MgPSBbXTtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHM0LnBsYWNlaG9sZGVyLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczQuY29sdW1uLFxuICAgICAgICB3aXRob3V0RW1wdHlPcHRpb24gPSBfdGhpcyRwcm9wczQud2l0aG91dEVtcHR5T3B0aW9uLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczQuZGVmYXVsdFZhbHVlO1xuICAgICAgdmFyIGlzU2VsZWN0ZWQgPSBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0VmFsdWUgIT09IFwiXCI7XG4gICAgICBpZiAoIXdpdGhvdXRFbXB0eU9wdGlvbiAmJiAhaXNTZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBcIi0xXCIsXG4gICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcInNlbGVjdC1maWx0ZXItcGxhY2Vob2xkZXJcIlxuICAgICAgICB9LCBwbGFjZWhvbGRlciB8fCBcIlNlbGVjdCBcIi5jb25jYXQoY29sdW1uLnRleHQsIFwiLi4uXCIpKSk7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gX3JlZjMudmFsdWUsXG4gICAgICAgICAgICBsYWJlbCA9IF9yZWYzLmxhYmVsO1xuICAgICAgICAgIHJldHVybiBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAgICBrZXk6IHZhbHVlLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSwgbGFiZWwpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZToga2V5XG4gICAgICAgICAgfSwgb3B0aW9uc1trZXldKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzNS5pZCxcbiAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczUuc3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNS5jbGFzc05hbWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzNS5kZWZhdWx0VmFsdWUsXG4gICAgICAgIG9uRmlsdGVyID0gX3RoaXMkcHJvcHM1Lm9uRmlsdGVyLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczUuY29sdW1uLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM1Lm9wdGlvbnMsXG4gICAgICAgIGNvbXBhcmF0b3IgPSBfdGhpcyRwcm9wczUuY29tcGFyYXRvcixcbiAgICAgICAgd2l0aG91dEVtcHR5T3B0aW9uID0gX3RoaXMkcHJvcHM1LndpdGhvdXRFbXB0eU9wdGlvbixcbiAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IF90aGlzJHByb3BzNS5jYXNlU2Vuc2l0aXZlLFxuICAgICAgICBnZXRGaWx0ZXIgPSBfdGhpcyRwcm9wczUuZ2V0RmlsdGVyLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzNS5maWx0ZXJTdGF0ZSxcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczUsIF9leGNsdWRlZCk7XG4gICAgICB2YXIgc2VsZWN0Q2xhc3MgPSBcImZpbHRlciBzZWxlY3QtZmlsdGVyIGZvcm0tY29udHJvbCBcIi5jb25jYXQoY2xhc3NOYW1lLCBcIiBcIikuY29uY2F0KHRoaXMuc3RhdGUuaXNTZWxlY3RlZCA/IFwiXCIgOiBcInBsYWNlaG9sZGVyLXNlbGVjdGVkXCIpO1xuICAgICAgdmFyIGVsbUlkID0gXCJzZWxlY3QtZmlsdGVyLWNvbHVtbi1cIi5jb25jYXQoY29sdW1uLmRhdGFGaWVsZCkuY29uY2F0KGlkID8gXCItXCIuY29uY2F0KGlkKSA6IFwiXCIpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJmaWx0ZXItbGFiZWxcIixcbiAgICAgICAgaHRtbEZvcjogZWxtSWRcbiAgICAgIH0sIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInNyLW9ubHlcIlxuICAgICAgfSwgXCJGaWx0ZXIgYnkgXCIsIGNvbHVtbi50ZXh0KSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3QpLCB7fSwge1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihuKSB7XG4gICAgICAgICAgX3RoaXMzLnNlbGVjdElucHV0ID0gbjtcbiAgICAgICAgfSxcbiAgICAgICAgaWQ6IGVsbUlkLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZTogc2VsZWN0Q2xhc3MsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLmZpbHRlcixcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0VmFsdWUoKSB8fCBcIlwiLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwic2VsZWN0LWZpbHRlclwiXG4gICAgICB9KSwgdGhpcy5yZW5kZXJPcHRpb25zKCkpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBTZWxlY3RGaWx0ZXIucHJvcFR5cGVzID0ge1xuLy8gICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBmaWx0ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgb3B0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmFycmF5XSkuaXNSZXF1aXJlZCxcbi8vICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFtMSUtFLCBFUV0pLFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgd2l0aG91dEVtcHR5T3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIFNlbGVjdEZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlZmF1bHRWYWx1ZTogJycsXG4vLyAgIGZpbHRlclN0YXRlOiB7fSxcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgd2l0aG91dEVtcHR5T3B0aW9uOiBmYWxzZSxcbi8vICAgY29tcGFyYXRvcjogRVEsXG4vLyAgIGNhc2VTZW5zaXRpdmU6IHRydWUsXG4vLyAgIGlkOiBudWxsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBTZWxlY3RGaWx0ZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlsdGVycyA9IGV4cG9ydHMuZmlsdGVyRmFjdG9yeSA9IGV4cG9ydHMuZmlsdGVyQnlBcnJheSA9IGV4cG9ydHMuZmlsdGVyQnlEYXRlID0gZXhwb3J0cy5maWx0ZXJCeU51bWJlciA9IGV4cG9ydHMuZmlsdGVyQnlUZXh0ID0gdm9pZCAwO1xuLyogZXNsaW50IGVxZXFlcTogMCAqL1xuLyogZXNsaW50IG5vLWNvbnNvbGU6IDAgKi9cbnZhciBfXzEgPSByZXF1aXJlKFwiLi5cIik7XG52YXIgZmlsdGVyQnlUZXh0ID0gZnVuY3Rpb24gZmlsdGVyQnlUZXh0KF8pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCBkYXRhRmllbGQsIF9yZWYsIGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgdmFyIF9yZWYkZmlsdGVyVmFsID0gX3JlZi5maWx0ZXJWYWwsXG4gICAgICB1c2VySW5wdXQgPSBfcmVmJGZpbHRlclZhbCA9PT0gdm9pZCAwID8gXCJcIiA6IF9yZWYkZmlsdGVyVmFsLFxuICAgICAgX3JlZiRjb21wYXJhdG9yID0gX3JlZi5jb21wYXJhdG9yLFxuICAgICAgY29tcGFyYXRvciA9IF9yZWYkY29tcGFyYXRvciA9PT0gdm9pZCAwID8gX18xLkxJS0UgOiBfcmVmJGNvbXBhcmF0b3IsXG4gICAgICBjYXNlU2Vuc2l0aXZlID0gX3JlZi5jYXNlU2Vuc2l0aXZlO1xuICAgIC8vIG1ha2Ugc3VyZSBmaWx0ZXIgdmFsdWUgdG8gYmUgYSBzdHJpbmdcbiAgICB2YXIgZmlsdGVyVmFsID0gdXNlcklucHV0LnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgIHZhciBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuICAgICAgdmFyIGNlbGxTdHIgPSBfLmlzRGVmaW5lZChjZWxsKSA/IGNlbGwudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICBpZiAoY29tcGFyYXRvciA9PT0gX18xLkVRKSB7XG4gICAgICAgIHJldHVybiBjZWxsU3RyID09PSBmaWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICBpZiAoY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICByZXR1cm4gY2VsbFN0ci5pbmNsdWRlcyhmaWx0ZXJWYWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNlbGxTdHIudG9Mb2NhbGVVcHBlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbC50b0xvY2FsZVVwcGVyQ2FzZSgpKSAhPT0gLTE7XG4gICAgfSk7XG4gIH07XG59O1xuZXhwb3J0cy5maWx0ZXJCeVRleHQgPSBmaWx0ZXJCeVRleHQ7XG52YXIgZmlsdGVyQnlOdW1iZXIgPSBmdW5jdGlvbiBmaWx0ZXJCeU51bWJlcihfKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGF0YSwgZGF0YUZpZWxkLCBfcmVmMiwgY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICB2YXIgX3JlZjIkZmlsdGVyVmFsID0gX3JlZjIuZmlsdGVyVmFsLFxuICAgICAgY29tcGFyYXRvciA9IF9yZWYyJGZpbHRlclZhbC5jb21wYXJhdG9yLFxuICAgICAgbnVtYmVyID0gX3JlZjIkZmlsdGVyVmFsLm51bWJlcjtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHJvdykge1xuICAgICAgaWYgKG51bWJlciA9PT0gXCJcIiB8fCAhY29tcGFyYXRvcikgcmV0dXJuIHRydWU7XG4gICAgICB2YXIgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChjdXN0b21GaWx0ZXJWYWx1ZSkge1xuICAgICAgICBjZWxsID0gY3VzdG9tRmlsdGVyVmFsdWUoY2VsbCwgcm93KTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoY29tcGFyYXRvcikge1xuICAgICAgICBjYXNlIF9fMS5FUTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbCA9PSBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5HVDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbCA+IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkdFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsID49IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkxUOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsIDwgbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuTEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGwgPD0gbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuTkU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGwgIT0gbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTnVtYmVyIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn07XG5leHBvcnRzLmZpbHRlckJ5TnVtYmVyID0gZmlsdGVyQnlOdW1iZXI7XG52YXIgZmlsdGVyQnlEYXRlID0gZnVuY3Rpb24gZmlsdGVyQnlEYXRlKF8pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCBkYXRhRmllbGQsIF9yZWYzLCBjdXN0b21GaWx0ZXJWYWx1ZSkge1xuICAgIHZhciBfcmVmMyRmaWx0ZXJWYWwgPSBfcmVmMy5maWx0ZXJWYWwsXG4gICAgICBjb21wYXJhdG9yID0gX3JlZjMkZmlsdGVyVmFsLmNvbXBhcmF0b3IsXG4gICAgICBkYXRlID0gX3JlZjMkZmlsdGVyVmFsLmRhdGU7XG4gICAgaWYgKCFkYXRlIHx8ICFjb21wYXJhdG9yKSByZXR1cm4gZGF0YTtcbiAgICB2YXIgZmlsdGVyRGF0ZSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgIHZhciBmaWx0ZXJNb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICB2YXIgZmlsdGVyWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHJvdykge1xuICAgICAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgICAgIHZhciBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuICAgICAgaWYgKF90eXBlb2YoY2VsbCkgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY2VsbCA9IG5ldyBEYXRlKGNlbGwpO1xuICAgICAgfVxuICAgICAgdmFyIHRhcmdldERhdGUgPSBjZWxsLmdldFVUQ0RhdGUoKTtcbiAgICAgIHZhciB0YXJnZXRNb250aCA9IGNlbGwuZ2V0VVRDTW9udGgoKTtcbiAgICAgIHZhciB0YXJnZXRZZWFyID0gY2VsbC5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgc3dpdGNoIChjb21wYXJhdG9yKSB7XG4gICAgICAgIGNhc2UgX18xLkVROlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJEYXRlICE9PSB0YXJnZXREYXRlIHx8IGZpbHRlck1vbnRoICE9PSB0YXJnZXRNb250aCB8fCBmaWx0ZXJZZWFyICE9PSB0YXJnZXRZZWFyKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkdUOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChjZWxsIDw9IGRhdGUpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuR0U6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRhcmdldFllYXIgPCBmaWx0ZXJZZWFyKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiYgdGFyZ2V0TW9udGggPCBmaWx0ZXJNb250aCkge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRZZWFyID09PSBmaWx0ZXJZZWFyICYmIHRhcmdldE1vbnRoID09PSBmaWx0ZXJNb250aCAmJiB0YXJnZXREYXRlIDwgZmlsdGVyRGF0ZSkge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5MVDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoY2VsbCA+PSBkYXRlKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkxFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRZZWFyID4gZmlsdGVyWWVhcikge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRZZWFyID09PSBmaWx0ZXJZZWFyICYmIHRhcmdldE1vbnRoID4gZmlsdGVyTW9udGgpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJiB0YXJnZXRNb250aCA9PT0gZmlsdGVyTW9udGggJiYgdGFyZ2V0RGF0ZSA+IGZpbHRlckRhdGUpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuTkU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGZpbHRlckRhdGUgPT09IHRhcmdldERhdGUgJiYgZmlsdGVyTW9udGggPT09IHRhcmdldE1vbnRoICYmIGZpbHRlclllYXIgPT09IHRhcmdldFllYXIpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRGF0ZSBjb21wYXJhdG9yIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfSk7XG4gIH07XG59O1xuZXhwb3J0cy5maWx0ZXJCeURhdGUgPSBmaWx0ZXJCeURhdGU7XG52YXIgZmlsdGVyQnlBcnJheSA9IGZ1bmN0aW9uIGZpbHRlckJ5QXJyYXkoXykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRhdGEsIGRhdGFGaWVsZCwgX3JlZjQpIHtcbiAgICB2YXIgZmlsdGVyVmFsID0gX3JlZjQuZmlsdGVyVmFsLFxuICAgICAgY29tcGFyYXRvciA9IF9yZWY0LmNvbXBhcmF0b3I7XG4gICAgaWYgKGZpbHRlclZhbC5sZW5ndGggPT09IDApIHJldHVybiBkYXRhO1xuICAgIHZhciByZWZpbmVkRmlsdGVyVmFsID0gZmlsdGVyVmFsLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIF8uaXNEZWZpbmVkKHgpO1xuICAgIH0pLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHgudG9TdHJpbmcoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHJvdykge1xuICAgICAgdmFyIGNlbGwgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICB2YXIgY2VsbFN0ciA9IF8uaXNEZWZpbmVkKGNlbGwpID8gY2VsbC50b1N0cmluZygpIDogXCJcIjtcbiAgICAgIGlmIChjb21wYXJhdG9yID09PSBfXzEuRVEpIHtcbiAgICAgICAgcmV0dXJuIHJlZmluZWRGaWx0ZXJWYWwuaW5kZXhPZihjZWxsU3RyKSAhPT0gLTE7XG4gICAgICB9XG4gICAgICBjZWxsU3RyID0gY2VsbFN0ci50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHJlZmluZWRGaWx0ZXJWYWwuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gY2VsbFN0ci5pbmRleE9mKGl0ZW0udG9Mb2NhbGVVcHBlckNhc2UoKSkgIT09IC0xO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59O1xuZXhwb3J0cy5maWx0ZXJCeUFycmF5ID0gZmlsdGVyQnlBcnJheTtcbnZhciBmaWx0ZXJGYWN0b3J5ID0gZnVuY3Rpb24gZmlsdGVyRmFjdG9yeShfKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZmlsdGVyVHlwZSkge1xuICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkge1xuICAgICAgY2FzZSBfXzEuRklMVEVSX1RZUEVTLk1VTFRJU0VMRUNUOlxuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuZmlsdGVyQnlBcnJheSkoXyk7XG4gICAgICBjYXNlIF9fMS5GSUxURVJfVFlQRVMuTlVNQkVSOlxuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuZmlsdGVyQnlOdW1iZXIpKF8pO1xuICAgICAgY2FzZSBfXzEuRklMVEVSX1RZUEVTLkRBVEU6XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5maWx0ZXJCeURhdGUpKF8pO1xuICAgICAgY2FzZSBfXzEuRklMVEVSX1RZUEVTLlRFWFQ6XG4gICAgICBjYXNlIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gVXNlIGB0ZXh0YCBmaWx0ZXIgYXMgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmZpbHRlckJ5VGV4dCkoXyk7XG4gICAgfVxuICB9O1xufTtcbmV4cG9ydHMuZmlsdGVyRmFjdG9yeSA9IGZpbHRlckZhY3Rvcnk7XG52YXIgZmlsdGVycyA9IGZ1bmN0aW9uIGZpbHRlcnMoZGF0YSwgY29sdW1ucywgXykge1xuICByZXR1cm4gZnVuY3Rpb24gKGN1cnJGaWx0ZXJzKSB7XG4gICAgdmFyIGNsZWFyRmlsdGVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIGZhY3RvcnkgPSAoMCwgZXhwb3J0cy5maWx0ZXJGYWN0b3J5KShfKTtcbiAgICB2YXIgZmlsdGVyU3RhdGUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNsZWFyRmlsdGVycyksIGN1cnJGaWx0ZXJzKTtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YTtcbiAgICB2YXIgZmlsdGVyRm47XG4gICAgT2JqZWN0LmtleXMoZmlsdGVyU3RhdGUpLmZvckVhY2goZnVuY3Rpb24gKGRhdGFGaWVsZCkge1xuICAgICAgdmFyIGN1cnJlbnRSZXN1bHQ7XG4gICAgICB2YXIgZmlsdGVyVmFsdWU7XG4gICAgICB2YXIgY3VzdG9tRmlsdGVyO1xuICAgICAgY29sdW1ucyA9IGNvbHVtbnMgIT09IG51bGwgJiYgY29sdW1ucyAhPT0gdm9pZCAwID8gY29sdW1ucyA6IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChjb2x1bW5zW2ldLmRhdGFGaWVsZCA9PT0gZGF0YUZpZWxkKSB7XG4gICAgICAgICAgZmlsdGVyVmFsdWUgPSBjb2x1bW5zW2ldLmZpbHRlclZhbHVlO1xuICAgICAgICAgIGlmIChjb2x1bW5zW2ldLmZpbHRlcikge1xuICAgICAgICAgICAgY3VzdG9tRmlsdGVyID0gY29sdW1uc1tpXS5maWx0ZXIucHJvcHMub25GaWx0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2xlYXJGaWx0ZXJzW2RhdGFGaWVsZF0gJiYgY3VzdG9tRmlsdGVyKSB7XG4gICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXN0b21GaWx0ZXIoY2xlYXJGaWx0ZXJzW2RhdGFGaWVsZF0uZmlsdGVyVmFsLCByZXN1bHQpO1xuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXN1bHQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICByZXN1bHQgPSBjdXJyZW50UmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZmlsdGVyT2JqID0gZmlsdGVyU3RhdGVbZGF0YUZpZWxkXTtcbiAgICAgICAgZmlsdGVyRm4gPSBmYWN0b3J5KGZpbHRlck9iai5maWx0ZXJUeXBlKTtcbiAgICAgICAgaWYgKGN1c3RvbUZpbHRlcikge1xuICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXN0b21GaWx0ZXIoZmlsdGVyT2JqLmZpbHRlclZhbCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICByZXN1bHQgPSBmaWx0ZXJGbihyZXN1bHQsIGRhdGFGaWVsZCwgZmlsdGVyT2JqLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gY3VycmVudFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuZXhwb3J0cy5maWx0ZXJzID0gZmlsdGVyczsiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEVRLFxuICBGSUxURVJfVFlQRVMsXG4gIE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucyxcbiAgTXVsdGlTZWxlY3RGaWx0ZXJQcm9wcyxcbn0gZnJvbSBcIi4uLy4uXCI7XG5cbmZ1bmN0aW9uIG9wdGlvbnNFcXVhbHMoY3Vyck9wdHM6IGFueSwgcHJldk9wdHM6IGFueSkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3Vyck9wdHMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoY3Vyck9wdHNba2V5c1tpXV0gIT09IHByZXZPcHRzW2tleXNbaV1dKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhjdXJyT3B0cykubGVuZ3RoID09PSBPYmplY3Qua2V5cyhwcmV2T3B0cykubGVuZ3RoO1xufVxuXG5jb25zdCBnZXRTZWxlY3Rpb25zID0gKGNvbnRhaW5lcjogYW55KSA9PiB7XG4gIGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLnNlbGVjdGVkT3B0aW9ucykge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5zZWxlY3RlZE9wdGlvbnMpLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLnZhbHVlKTtcbiAgfVxuICBpZiAoY29udGFpbmVyICYmIEFycmF5LmlzQXJyYXkoY29udGFpbmVyLnZhbHVlKSkge1xuICAgIHJldHVybiBjb250YWluZXIudmFsdWU7XG4gIH1cbiAgY29uc3Qgc2VsZWN0aW9ucyA9IFtdO1xuICBjb25zdCB0b3RhbExlbiA9IGNvbnRhaW5lciAmJiBjb250YWluZXIub3B0aW9ucyA/IGNvbnRhaW5lci5vcHRpb25zLmxlbmd0aCA6IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxMZW47IGkgKz0gMSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNvbnRhaW5lci5vcHRpb25zW2ldO1xuICAgIGlmIChvcHRpb24gJiYgb3B0aW9uLnNlbGVjdGVkKSBzZWxlY3Rpb25zLnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0aW9ucztcbn07XG5cbmludGVyZmFjZSBNdWx0aVNlbGVjdEZpbHRlclN0YXRlIHtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbn1cbmNsYXNzIE11bHRpU2VsZWN0RmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50PFxuICBNdWx0aVNlbGVjdEZpbHRlclByb3BzLFxuICBNdWx0aVNlbGVjdEZpbHRlclN0YXRlXG4+IHtcbiAgc2VsZWN0SW5wdXQ6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogTXVsdGlTZWxlY3RGaWx0ZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5hcHBseUZpbHRlciA9IHRoaXMuYXBwbHlGaWx0ZXIuYmluZCh0aGlzKTtcbiAgICBjb25zdCBpc1NlbGVjdGVkID1cbiAgICAgIChwcm9wcy5kZWZhdWx0VmFsdWUgPz8gW10pLm1hcChcbiAgICAgICAgKGl0ZW06IHN0cmluZykgPT4gKHByb3BzLm9wdGlvbnMgYXMgTXVsdGlTZWxlY3RGaWx0ZXJPcHRpb25zKVtpdGVtXVxuICAgICAgKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuc3RhdGUgPSB7IGlzU2VsZWN0ZWQgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZ2V0RmlsdGVyIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgdmFsdWUgPSBnZXRTZWxlY3Rpb25zKHRoaXMuc2VsZWN0SW5wdXQpO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBleHBvcnQgb25GaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzXG4gICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgZ2V0RmlsdGVyKChmaWx0ZXJWYWw6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gZmlsdGVyVmFsO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGZpbHRlclZhbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnkpIHtcbiAgICBsZXQgbmVlZEZpbHRlciA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gcHJldlByb3BzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghb3B0aW9uc0VxdWFscyh0aGlzLnByb3BzLm9wdGlvbnMsIHByZXZQcm9wcy5vcHRpb25zKSkge1xuICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgfVxuICAgIGlmIChuZWVkRmlsdGVyKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKGdldFNlbGVjdGlvbnModGhpcy5zZWxlY3RJbnB1dCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBjb25zdCB7IGZpbHRlclN0YXRlID0ge30sIGRlZmF1bHRWYWx1ZSA9IFtdIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiB0eXBlb2YgZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gZmlsdGVyU3RhdGUuZmlsdGVyVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3Qge1xuICAgICAgb3B0aW9ucyxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgY29sdW1uLFxuICAgICAgd2l0aG91dEVtcHR5T3B0aW9uID0gZmFsc2UsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBbXSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5sZW5ndGggPiAwO1xuICAgIGlmICghd2l0aG91dEVtcHR5T3B0aW9uICYmICFpc1NlbGVjdGVkKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgIDxvcHRpb24ga2V5PVwiLTFcIiB2YWx1ZT1cIlwiIGRhdGEtdGVzdGlkPVwibXVsdGlzZWxlY3QtcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7cGxhY2Vob2xkZXIgfHwgYFNlbGVjdCAke2NvbHVtbi50ZXh0fS4uLmB9XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PlxuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT17a2V5fSB2YWx1ZT17a2V5fT5cbiAgICAgICAgICB7KG9wdGlvbnMgYXMgTXVsdGlTZWxlY3RGaWx0ZXJPcHRpb25zKVtrZXldfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9XG4gICAgICB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgOiBbXTtcbiAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZVswXSA9PT0gXCJcIikge1xuICAgICAgdmFsdWUgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiB2YWx1ZS5sZW5ndGggPiAwIH0pKTtcbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5NVUxUSVNFTEVDVCkodmFsdWUpO1xuICB9XG5cbiAgZmlsdGVyKGU6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0U2VsZWN0aW9ucyhlLnRhcmdldCk7XG4gICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgaWQgPSBudWxsLFxuICAgICAgc3R5bGUsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgZmlsdGVyU3RhdGUgPSB7fSxcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFtdLFxuICAgICAgb25GaWx0ZXIsXG4gICAgICBjb2x1bW4sXG4gICAgICBvcHRpb25zLFxuICAgICAgY29tcGFyYXRvciA9IEVRLFxuICAgICAgd2l0aG91dEVtcHR5T3B0aW9uID0gZmFsc2UsXG4gICAgICBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSxcbiAgICAgIGdldEZpbHRlcixcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gYGZpbHRlciBzZWxlY3QtZmlsdGVyIGZvcm0tY29udHJvbCAke2NsYXNzTmFtZX0gJHt0aGlzLnN0YXRlLmlzU2VsZWN0ZWQgPyBcIlwiIDogXCJwbGFjZWhvbGRlci1zZWxlY3RlZFwiXG4gICAgICB9YDtcbiAgICBjb25zdCBlbG1JZCA9IGBtdWx0aXNlbGVjdC1maWx0ZXItY29sdW1uLSR7Y29sdW1uLmRhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwiXG4gICAgICB9YDtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmlsdGVyLWxhYmVsXCIgaHRtbEZvcj17ZWxtSWR9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+RmlsdGVyIGJ5IHtjb2x1bW4udGV4dH08L3NwYW4+XG4gICAgICAgIDxzZWxlY3RcbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMuc2VsZWN0SW5wdXQgPSBuOyB9fVxuICAgICAgICAgIGlkPXtlbG1JZH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBjbGFzc05hbWU9e3NlbGVjdENsYXNzfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmZpbHRlcn1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdFZhbHVlKCl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtdWx0aXNlbGVjdC1maWx0ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMuZ2V0T3B0aW9ucygpfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBNdWx0aVNlbGVjdEZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbTElLRSwgRVFdKSxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFycmF5LFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIE11bHRpU2VsZWN0RmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgZGVmYXVsdFZhbHVlOiBbXSxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogZmFsc2UsXG4vLyAgIGNvbXBhcmF0b3I6IEVRLFxuLy8gICBjYXNlU2Vuc2l0aXZlOiB0cnVlLFxuLy8gICBpZDogbnVsbCxcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IE11bHRpU2VsZWN0RmlsdGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3VzdG9tRmlsdGVyID0gZXhwb3J0cy5kYXRlRmlsdGVyID0gZXhwb3J0cy5udW1iZXJGaWx0ZXIgPSBleHBvcnRzLm11bHRpU2VsZWN0RmlsdGVyID0gZXhwb3J0cy5zZWxlY3RGaWx0ZXIgPSBleHBvcnRzLnRleHRGaWx0ZXIgPSBleHBvcnRzLkNvbXBhcmF0b3JOdW1iZXIgPSBleHBvcnRzLkxFID0gZXhwb3J0cy5MVCA9IGV4cG9ydHMuR0UgPSBleHBvcnRzLkdUID0gZXhwb3J0cy5ORSA9IGV4cG9ydHMuRVEgPSBleHBvcnRzLkxJS0UgPSBleHBvcnRzLkZJTFRFUl9ERUxBWSA9IGV4cG9ydHMuRklMVEVSX1RZUEVTID0gdm9pZCAwO1xudmFyIGRhdGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29tcG9uZW50cy9kYXRlXCIpKTtcbnZhciBtdWx0aXNlbGVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9jb21wb25lbnRzL211bHRpc2VsZWN0XCIpKTtcbnZhciBudW1iZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29tcG9uZW50cy9udW1iZXJcIikpO1xudmFyIHNlbGVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9jb21wb25lbnRzL3NlbGVjdFwiKSk7XG52YXIgdGV4dF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3NyYy9jb21wb25lbnRzL3RleHRcIikpO1xudmFyIGNvbnRleHRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29udGV4dFwiKSk7XG52YXIgRklMVEVSX1RZUEVTO1xuKGZ1bmN0aW9uIChGSUxURVJfVFlQRVMpIHtcbiAgRklMVEVSX1RZUEVTW1wiVEVYVFwiXSA9IFwiVEVYVFwiO1xuICBGSUxURVJfVFlQRVNbXCJTRUxFQ1RcIl0gPSBcIlNFTEVDVFwiO1xuICBGSUxURVJfVFlQRVNbXCJNVUxUSVNFTEVDVFwiXSA9IFwiTVVMVElTRUxFQ1RcIjtcbiAgRklMVEVSX1RZUEVTW1wiTlVNQkVSXCJdID0gXCJOVU1CRVJcIjtcbiAgRklMVEVSX1RZUEVTW1wiREFURVwiXSA9IFwiREFURVwiO1xufSkoRklMVEVSX1RZUEVTIHx8IChleHBvcnRzLkZJTFRFUl9UWVBFUyA9IEZJTFRFUl9UWVBFUyA9IHt9KSk7XG5leHBvcnRzLkZJTFRFUl9ERUxBWSA9IDUwMDtcbi8qKlxuICogRmlsdGVyIGNvbXBhcmF0b3JzIHVzZWQgZm9yIHRhYmxlIGZpbHRlcnNcbiAqL1xuZXhwb3J0cy5MSUtFID0gXCJMSUtFXCI7XG5leHBvcnRzLkVRID0gXCI9XCI7XG5leHBvcnRzLk5FID0gXCIhPVwiO1xuZXhwb3J0cy5HVCA9IFwiPlwiO1xuZXhwb3J0cy5HRSA9IFwiPj1cIjtcbmV4cG9ydHMuTFQgPSBcIjxcIjtcbmV4cG9ydHMuTEUgPSBcIjw9XCI7XG5leHBvcnRzLkNvbXBhcmF0b3JOdW1iZXIgPSA3O1xudmFyIHRleHRGaWx0ZXIgPSBmdW5jdGlvbiB0ZXh0RmlsdGVyKCkge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICByZXR1cm4ge1xuICAgIEZpbHRlcjogdGV4dF8xW1wiZGVmYXVsdFwiXSxcbiAgICBwcm9wczogcHJvcHNcbiAgfTtcbn07XG5leHBvcnRzLnRleHRGaWx0ZXIgPSB0ZXh0RmlsdGVyO1xudmFyIHNlbGVjdEZpbHRlciA9IGZ1bmN0aW9uIHNlbGVjdEZpbHRlcigpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBGaWx0ZXI6IHNlbGVjdF8xW1wiZGVmYXVsdFwiXSxcbiAgICBwcm9wczogcHJvcHNcbiAgfTtcbn07XG5leHBvcnRzLnNlbGVjdEZpbHRlciA9IHNlbGVjdEZpbHRlcjtcbnZhciBtdWx0aVNlbGVjdEZpbHRlciA9IGZ1bmN0aW9uIG11bHRpU2VsZWN0RmlsdGVyKCkge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICByZXR1cm4ge1xuICAgIEZpbHRlcjogbXVsdGlzZWxlY3RfMVtcImRlZmF1bHRcIl0sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy5tdWx0aVNlbGVjdEZpbHRlciA9IG11bHRpU2VsZWN0RmlsdGVyO1xudmFyIG51bWJlckZpbHRlciA9IGZ1bmN0aW9uIG51bWJlckZpbHRlcigpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBGaWx0ZXI6IG51bWJlcl8xW1wiZGVmYXVsdFwiXSxcbiAgICBwcm9wczogcHJvcHNcbiAgfTtcbn07XG5leHBvcnRzLm51bWJlckZpbHRlciA9IG51bWJlckZpbHRlcjtcbnZhciBkYXRlRmlsdGVyID0gZnVuY3Rpb24gZGF0ZUZpbHRlcigpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBGaWx0ZXI6IGRhdGVfMVtcImRlZmF1bHRcIl0sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy5kYXRlRmlsdGVyID0gZGF0ZUZpbHRlcjtcbnZhciBjdXN0b21GaWx0ZXIgPSBmdW5jdGlvbiBjdXN0b21GaWx0ZXIoKSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgRmlsdGVyOiBmdW5jdGlvbiBGaWx0ZXIoKSB7fSxcbiAgICBwcm9wczogcHJvcHNcbiAgfTtcbn07XG5leHBvcnRzLmN1c3RvbUZpbHRlciA9IGN1c3RvbUZpbHRlcjtcbi8vIGRlY2xhcmUgZnVuY3Rpb24gZmlsdGVyRmFjdG9yeShwcm9wcz86IEZpbHRlckZhY3RvcnlQcm9wcyk6IHVua25vd247XG4vLyBleHBvcnQgZGVmYXVsdCBmaWx0ZXJGYWN0b3J5O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVDb250ZXh0OiBjb250ZXh0XzFbXCJkZWZhdWx0XCJdLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfTtcbn07IiwiLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZJTFRFUl9UWVBFUywgU2VsZWN0RmlsdGVyUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuZnVuY3Rpb24gb3B0aW9uc0VxdWFscyhjdXJyT3B0czogYW55LCBwcmV2T3B0czogYW55KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGN1cnJPcHRzKSkge1xuICAgIGlmIChjdXJyT3B0cy5sZW5ndGggPT09IHByZXZPcHRzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyT3B0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3Vyck9wdHNbaV0udmFsdWUgIT09IHByZXZPcHRzW2ldLnZhbHVlIHx8XG4gICAgICAgICAgY3Vyck9wdHNbaV0ubGFiZWwgIT09IHByZXZPcHRzW2ldLmxhYmVsXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3Vyck9wdHMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoY3Vyck9wdHNba2V5c1tpXV0gIT09IHByZXZPcHRzW2tleXNbaV1dKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhjdXJyT3B0cykubGVuZ3RoID09PSBPYmplY3Qua2V5cyhwcmV2T3B0cykubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBnZXRPcHRpb25WYWx1ZShvcHRpb25zOiBhbnksIGtleTogYW55KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uc1xuICAgICAgLmZpbHRlcigoeyBsYWJlbCB9KSA9PiBsYWJlbCA9PT0ga2V5KVxuICAgICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gICAgcmV0dXJuIHJlc3VsdFswXTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1trZXldO1xufVxuXG5pbnRlcmZhY2UgU2VsZWN0RmlsdGVyU3RhdGUge1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xufVxuXG5jbGFzcyBTZWxlY3RGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQ8U2VsZWN0RmlsdGVyUHJvcHMsIFNlbGVjdEZpbHRlclN0YXRlPiB7XG4gIG9wdGlvbnM6IGFueTtcbiAgc2VsZWN0SW5wdXQ6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKHByb3BzKTtcbiAgICBjb25zdCBpc1NlbGVjdGVkID1cbiAgICAgIGdldE9wdGlvblZhbHVlKHRoaXMub3B0aW9ucywgdGhpcy5nZXREZWZhdWx0VmFsdWUoKSkgIT09IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0YXRlID0geyBpc1NlbGVjdGVkIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgb25GaWx0ZXIsIGdldEZpbHRlciB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RJbnB1dC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLlNFTEVDVCwgdHJ1ZSkodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICBpZiAoZ2V0RmlsdGVyKSB7XG4gICAgICBnZXRGaWx0ZXIoKGZpbHRlclZhbDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogZmlsdGVyVmFsICE9PSBcIlwiIH0pKTtcbiAgICAgICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IGZpbHRlclZhbDtcblxuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuU0VMRUNUKShmaWx0ZXJWYWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogU2VsZWN0RmlsdGVyUHJvcHMpIHtcbiAgICBsZXQgbmVlZEZpbHRlciA9IGZhbHNlO1xuICAgIGNvbnN0IHsgY29sdW1uLCBvbkZpbHRlciwgZGVmYXVsdFZhbHVlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG5leHRPcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKHRoaXMucHJvcHMpO1xuICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHByZXZQcm9wcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICBuZWVkRmlsdGVyID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zRXF1YWxzKG5leHRPcHRpb25zLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBuZXh0T3B0aW9ucztcbiAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAobmVlZEZpbHRlcikge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdElucHV0LnZhbHVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRPcHRpb25zKHByb3BzOiBTZWxlY3RGaWx0ZXJQcm9wcykge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcHMub3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHByb3BzLm9wdGlvbnMocHJvcHMuY29sdW1uKVxuICAgICAgOiBwcm9wcy5vcHRpb25zO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGNvbnN0IHsgZmlsdGVyU3RhdGUsIGRlZmF1bHRWYWx1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmlsdGVyU3RhdGUgJiYgdHlwZW9mIGZpbHRlclN0YXRlLmZpbHRlclZhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIGNsZWFuRmlsdGVyZWQoKSB7XG4gICAgY29uc3QgdmFsdWUgPVxuICAgICAgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlIDogXCJcIjtcbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiIH0pKTtcbiAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuU0VMRUNUKSh2YWx1ZSk7XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCIgfSkpO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICB9XG5cbiAgZmlsdGVyKGU6IGFueSkge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGUudGFyZ2V0O1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCIgfSkpO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICB9XG5cbiAgcmVuZGVyT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIGNvbHVtbiwgd2l0aG91dEVtcHR5T3B0aW9uLCBkZWZhdWx0VmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gXCJcIjtcbiAgICBpZiAoIXdpdGhvdXRFbXB0eU9wdGlvbiAmJiAhaXNTZWxlY3RlZCkge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT1cIi0xXCIgdmFsdWU9XCJcIiBkYXRhLXRlc3RpZD1cInNlbGVjdC1maWx0ZXItcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7cGxhY2Vob2xkZXIgfHwgYFNlbGVjdCAke2NvbHVtbi50ZXh0fS4uLmB9XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIG9wdGlvbnMuZm9yRWFjaCgoeyB2YWx1ZSwgbGFiZWwgfSkgPT5cbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICAgIDxvcHRpb24ga2V5PXt2YWx1ZX0gdmFsdWU9e3ZhbHVlfT5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PlxuICAgICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgICAgPG9wdGlvbiBrZXk9e2tleX0gdmFsdWU9e2tleX0+XG4gICAgICAgICAgICB7b3B0aW9uc1trZXldfVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZCxcbiAgICAgIHN0eWxlLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgb25GaWx0ZXIsXG4gICAgICBjb2x1bW4sXG4gICAgICBvcHRpb25zLFxuICAgICAgY29tcGFyYXRvcixcbiAgICAgIHdpdGhvdXRFbXB0eU9wdGlvbixcbiAgICAgIGNhc2VTZW5zaXRpdmUsXG4gICAgICBnZXRGaWx0ZXIsXG4gICAgICBmaWx0ZXJTdGF0ZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gYGZpbHRlciBzZWxlY3QtZmlsdGVyIGZvcm0tY29udHJvbCAke2NsYXNzTmFtZX0gJHt0aGlzLnN0YXRlLmlzU2VsZWN0ZWQgPyBcIlwiIDogXCJwbGFjZWhvbGRlci1zZWxlY3RlZFwiXG4gICAgICB9YDtcbiAgICBjb25zdCBlbG1JZCA9IGBzZWxlY3QtZmlsdGVyLWNvbHVtbi0ke2NvbHVtbi5kYXRhRmllbGR9JHtpZCA/IGAtJHtpZH1gIDogXCJcIlxuICAgICAgfWA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZpbHRlci1sYWJlbFwiIGh0bWxGb3I9e2VsbUlkfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkZpbHRlciBieSB7Y29sdW1uLnRleHR9PC9zcGFuPlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLnNlbGVjdElucHV0ID0gbjsgfX1cbiAgICAgICAgICBpZD17ZWxtSWR9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgIGNsYXNzTmFtZT17c2VsZWN0Q2xhc3N9XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMuZmlsdGVyfVxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5nZXREZWZhdWx0VmFsdWUoKSB8fCBcIlwifVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwic2VsZWN0LWZpbHRlclwiXG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJPcHRpb25zKCl9XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG59XG5cbi8vIFNlbGVjdEZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGZpbHRlclN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYXJyYXldKS5pc1JlcXVpcmVkLFxuLy8gICBjb21wYXJhdG9yOiBQcm9wVHlwZXMub25lT2YoW0xJS0UsIEVRXSksXG4vLyAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICB3aXRob3V0RW1wdHlPcHRpb246IFByb3BUeXBlcy5ib29sLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4vLyAgIGNhc2VTZW5zaXRpdmU6IFByb3BUeXBlcy5ib29sLFxuLy8gICBnZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuXG4vLyBTZWxlY3RGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBkZWZhdWx0VmFsdWU6ICcnLFxuLy8gICBmaWx0ZXJTdGF0ZToge30sXG4vLyAgIGNsYXNzTmFtZTogJycsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogZmFsc2UsXG4vLyAgIGNvbXBhcmF0b3I6IEVRLFxuLy8gICBjYXNlU2Vuc2l0aXZlOiB0cnVlLFxuLy8gICBpZDogbnVsbFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0RmlsdGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRklMVEVSX1RZUEVTLCBUZXh0RmlsdGVyUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuaW50ZXJmYWNlIFRleHRGaWx0ZXJTdGF0ZSB7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmNsYXNzIFRleHRGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQ8VGV4dEZpbHRlclByb3BzLCBUZXh0RmlsdGVyU3RhdGU+IHtcbiAgaW5wdXQ6IHsgdmFsdWU6IGFueSB9IHwgYW55O1xuICB0aW1lb3V0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUZXh0RmlsdGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmlucHV0ID0ge307XG4gICAgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgICAgaWYgKFxuICAgICAgICBwcm9wcy5maWx0ZXJTdGF0ZSAmJlxuICAgICAgICB0eXBlb2YgcHJvcHMuZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHByb3BzLmZpbHRlclN0YXRlLmZpbHRlclZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wcy5kZWZhdWx0VmFsdWUgPz8gXCJcIjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBnZXREZWZhdWx0VmFsdWUoKSxcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBvbkZpbHRlciwgZ2V0RmlsdGVyLCBjb2x1bW4gfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5pbnB1dC52YWx1ZTtcblxuICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuVEVYVCwgdHJ1ZSkoZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBleHBvcnQgb25GaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzXG4gICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgZ2V0RmlsdGVyKChmaWx0ZXJWYWw6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IHZhbHVlOiBmaWx0ZXJWYWwgfSkpO1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuVEVYVCkoZmlsdGVyVmFsKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2xlYW5UaW1lcigpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55KSB7XG4gICAgaWYgKHByZXZQcm9wcy5kZWZhdWx0VmFsdWUgIT09IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICBjb25zdCBuZXh0VmFsdWUgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA/PyBcIlwiO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBuZXh0VmFsdWUgfSwgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlRFWFQpKG5leHRWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXIoZTogYW55KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgdmFsdWU6IGZpbHRlclZhbHVlIH0pKTtcbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5URVhUKShmaWx0ZXJWYWx1ZSk7XG4gICAgfSwgdGhpcy5wcm9wcy5kZWxheSk7XG4gIH1cblxuICBjbGVhblRpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFuRmlsdGVyZWQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA/PyBcIlwiO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgdmFsdWUgfSkpO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlRFWFQpKHZhbHVlKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKGZpbHRlclRleHQ6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyVGV4dCA/PyBcIlwiO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgdmFsdWUgfSkpO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlRFWFQpKHZhbHVlKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKGU6IGFueSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xuICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKGUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZCA9IG51bGwsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIGNvbHVtbjogeyBkYXRhRmllbGQsIHRleHQgfSxcbiAgICAgIHN0eWxlLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgb25GaWx0ZXIsXG4gICAgICBjYXNlU2Vuc2l0aXZlID0gZmFsc2UsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBcIlwiLFxuICAgICAgZ2V0RmlsdGVyLFxuICAgICAgZmlsdGVyU3RhdGUgPSB7fSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGVsbUlkID0gYHRleHQtZmlsdGVyLWNvbHVtbi0ke2RhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwifWA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZpbHRlci1sYWJlbFwiIGh0bWxGb3I9e2VsbUlkfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkZpbHRlciBieSB7dGV4dH08L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgIHJlZj17KG4pID0+IHsgdGhpcy5pbnB1dCA9IG47IH19XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGlkPXtlbG1JZH1cbiAgICAgICAgICBjbGFzc05hbWU9e2BmaWx0ZXIgdGV4dC1maWx0ZXIgZm9ybS1jb250cm9sICR7Y2xhc3NOYW1lfWB9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmZpbHRlcn1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlciB8fCBgRW50ZXIgJHt0ZXh0fS4uLmB9XG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0ZXh0LWZpbHRlclwiXG4gICAgICAgIC8+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbn1cblxuLy8gVGV4dEZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGZpbHRlclN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjb21wYXJhdG9yOiBQcm9wVHlwZXMub25lT2YoW0xJS0UsIEVRXSksXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4vLyAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIFRleHRGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBkZWxheTogRklMVEVSX0RFTEFZLFxuLy8gICBmaWx0ZXJTdGF0ZToge30sXG4vLyAgIGRlZmF1bHRWYWx1ZTogXCJcIixcbi8vICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4vLyAgIGlkOiBudWxsLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEZpbHRlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG52YXIgX2V4Y2x1ZGVkID0gW1wiaWRcIiwgXCJzdHlsZVwiLCBcImNsYXNzTmFtZVwiLCBcImZpbHRlclN0YXRlXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwib25GaWx0ZXJcIiwgXCJjb2x1bW5cIiwgXCJvcHRpb25zXCIsIFwiY29tcGFyYXRvclwiLCBcIndpdGhvdXRFbXB0eU9wdGlvblwiLCBcImNhc2VTZW5zaXRpdmVcIiwgXCJnZXRGaWx0ZXJcIl07XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogMCAqL1xuLyogZXNsaW50IHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLi8uLlwiKTtcbmZ1bmN0aW9uIG9wdGlvbnNFcXVhbHMoY3Vyck9wdHMsIHByZXZPcHRzKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY3Vyck9wdHMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoY3Vyck9wdHNba2V5c1tpXV0gIT09IHByZXZPcHRzW2tleXNbaV1dKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhjdXJyT3B0cykubGVuZ3RoID09PSBPYmplY3Qua2V5cyhwcmV2T3B0cykubGVuZ3RoO1xufVxudmFyIGdldFNlbGVjdGlvbnMgPSBmdW5jdGlvbiBnZXRTZWxlY3Rpb25zKGNvbnRhaW5lcikge1xuICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5lci5zZWxlY3RlZE9wdGlvbnMpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShjb250YWluZXIuc2VsZWN0ZWRPcHRpb25zKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgIH0pO1xuICB9XG4gIGlmIChjb250YWluZXIgJiYgQXJyYXkuaXNBcnJheShjb250YWluZXIudmFsdWUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci52YWx1ZTtcbiAgfVxuICB2YXIgc2VsZWN0aW9ucyA9IFtdO1xuICB2YXIgdG90YWxMZW4gPSBjb250YWluZXIgJiYgY29udGFpbmVyLm9wdGlvbnMgPyBjb250YWluZXIub3B0aW9ucy5sZW5ndGggOiAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsTGVuOyBpICs9IDEpIHtcbiAgICB2YXIgb3B0aW9uID0gY29udGFpbmVyLm9wdGlvbnNbaV07XG4gICAgaWYgKG9wdGlvbiAmJiBvcHRpb24uc2VsZWN0ZWQpIHNlbGVjdGlvbnMucHVzaChvcHRpb24udmFsdWUpO1xuICB9XG4gIHJldHVybiBzZWxlY3Rpb25zO1xufTtcbnZhciBNdWx0aVNlbGVjdEZpbHRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIE11bHRpU2VsZWN0RmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF9wcm9wcyRkZWZhdWx0VmFsdWU7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNdWx0aVNlbGVjdEZpbHRlcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIE11bHRpU2VsZWN0RmlsdGVyLCBbcHJvcHNdKTtcbiAgICBfdGhpcy5maWx0ZXIgPSBfdGhpcy5maWx0ZXIuYmluZChfdGhpcyk7XG4gICAgX3RoaXMuYXBwbHlGaWx0ZXIgPSBfdGhpcy5hcHBseUZpbHRlci5iaW5kKF90aGlzKTtcbiAgICB2YXIgaXNTZWxlY3RlZCA9ICgoX3Byb3BzJGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSkgIT09IG51bGwgJiYgX3Byb3BzJGRlZmF1bHRWYWx1ZSAhPT0gdm9pZCAwID8gX3Byb3BzJGRlZmF1bHRWYWx1ZSA6IFtdKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBwcm9wcy5vcHRpb25zW2l0ZW1dO1xuICAgIH0pLmxlbmd0aCA+IDA7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKE11bHRpU2VsZWN0RmlsdGVyLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKE11bHRpU2VsZWN0RmlsdGVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIGdldEZpbHRlciA9IHRoaXMucHJvcHMuZ2V0RmlsdGVyO1xuICAgICAgdmFyIHZhbHVlID0gZ2V0U2VsZWN0aW9ucyh0aGlzLnNlbGVjdElucHV0KTtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgICBnZXRGaWx0ZXIoZnVuY3Rpb24gKGZpbHRlclZhbCkge1xuICAgICAgICAgIF90aGlzMi5zZWxlY3RJbnB1dC52YWx1ZSA9IGZpbHRlclZhbDtcbiAgICAgICAgICBfdGhpczIuYXBwbHlGaWx0ZXIoZmlsdGVyVmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgbmVlZEZpbHRlciA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9PSBwcmV2UHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICghb3B0aW9uc0VxdWFscyh0aGlzLnByb3BzLm9wdGlvbnMsIHByZXZQcm9wcy5vcHRpb25zKSkge1xuICAgICAgICBuZWVkRmlsdGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkRmlsdGVyKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZ2V0U2VsZWN0aW9ucyh0aGlzLnNlbGVjdElucHV0KSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRmaWx0ZXJTdGEgPSBfdGhpcyRwcm9wcy5maWx0ZXJTdGF0ZSxcbiAgICAgICAgZmlsdGVyU3RhdGUgPSBfdGhpcyRwcm9wcyRmaWx0ZXJTdGEgPT09IHZvaWQgMCA/IHt9IDogX3RoaXMkcHJvcHMkZmlsdGVyU3RhLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8gW10gOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmE7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgdHlwZW9mIGZpbHRlclN0YXRlLmZpbHRlclZhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gZmlsdGVyU3RhdGUuZmlsdGVyVmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0T3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPcHRpb25zKCkge1xuICAgICAgdmFyIG9wdGlvblRhZ3MgPSBbXTtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMyLm9wdGlvbnMsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczIuY29sdW1uLFxuICAgICAgICBfdGhpcyRwcm9wczIkd2l0aG91dEUgPSBfdGhpcyRwcm9wczIud2l0aG91dEVtcHR5T3B0aW9uLFxuICAgICAgICB3aXRob3V0RW1wdHlPcHRpb24gPSBfdGhpcyRwcm9wczIkd2l0aG91dEUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMyJHdpdGhvdXRFLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFtdIDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWO1xuICAgICAgdmFyIGlzU2VsZWN0ZWQgPSBkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoIXdpdGhvdXRFbXB0eU9wdGlvbiAmJiAhaXNTZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBcIi0xXCIsXG4gICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcIm11bHRpc2VsZWN0LXBsYWNlaG9sZGVyXCJcbiAgICAgICAgfSwgcGxhY2Vob2xkZXIgfHwgXCJTZWxlY3QgXCIuY29uY2F0KGNvbHVtbi50ZXh0LCBcIi4uLlwiKSkpO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IGtleVxuICAgICAgICB9LCBvcHRpb25zW2tleV0pKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA6IFtdO1xuICAgICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5RmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RmlsdGVyKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxICYmIHZhbHVlWzBdID09PSBcIlwiKSB7XG4gICAgICAgIHZhbHVlID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuTVVMVElTRUxFQ1QpKHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbHRlcihlKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXRTZWxlY3Rpb25zKGUudGFyZ2V0KTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMzJGlkID0gX3RoaXMkcHJvcHMzLmlkLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzMyRpZCA9PT0gdm9pZCAwID8gbnVsbCA6IF90aGlzJHByb3BzMyRpZCxcbiAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczMuc3R5bGUsXG4gICAgICAgIF90aGlzJHByb3BzMyRjbGFzc05hbSA9IF90aGlzJHByb3BzMy5jbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMyRjbGFzc05hbSA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMyRjbGFzc05hbSxcbiAgICAgICAgX3RoaXMkcHJvcHMzJGZpbHRlclN0ID0gX3RoaXMkcHJvcHMzLmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzMyRmaWx0ZXJTdCA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczMkZmlsdGVyU3QsXG4gICAgICAgIF90aGlzJHByb3BzMyRkZWZhdWx0ViA9IF90aGlzJHByb3BzMy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMyRkZWZhdWx0ViA9PT0gdm9pZCAwID8gW10gOiBfdGhpcyRwcm9wczMkZGVmYXVsdFYsXG4gICAgICAgIG9uRmlsdGVyID0gX3RoaXMkcHJvcHMzLm9uRmlsdGVyLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczMuY29sdW1uLFxuICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMzLm9wdGlvbnMsXG4gICAgICAgIF90aGlzJHByb3BzMyRjb21wYXJhdCA9IF90aGlzJHByb3BzMy5jb21wYXJhdG9yLFxuICAgICAgICBjb21wYXJhdG9yID0gX3RoaXMkcHJvcHMzJGNvbXBhcmF0ID09PSB2b2lkIDAgPyBfXzEuRVEgOiBfdGhpcyRwcm9wczMkY29tcGFyYXQsXG4gICAgICAgIF90aGlzJHByb3BzMyR3aXRob3V0RSA9IF90aGlzJHByb3BzMy53aXRob3V0RW1wdHlPcHRpb24sXG4gICAgICAgIHdpdGhvdXRFbXB0eU9wdGlvbiA9IF90aGlzJHByb3BzMyR3aXRob3V0RSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wczMkd2l0aG91dEUsXG4gICAgICAgIF90aGlzJHByb3BzMyRjYXNlU2VucyA9IF90aGlzJHByb3BzMy5jYXNlU2Vuc2l0aXZlLFxuICAgICAgICBjYXNlU2Vuc2l0aXZlID0gX3RoaXMkcHJvcHMzJGNhc2VTZW5zID09PSB2b2lkIDAgPyB0cnVlIDogX3RoaXMkcHJvcHMzJGNhc2VTZW5zLFxuICAgICAgICBnZXRGaWx0ZXIgPSBfdGhpcyRwcm9wczMuZ2V0RmlsdGVyLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMywgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBzZWxlY3RDbGFzcyA9IFwiZmlsdGVyIHNlbGVjdC1maWx0ZXIgZm9ybS1jb250cm9sIFwiLmNvbmNhdChjbGFzc05hbWUsIFwiIFwiKS5jb25jYXQodGhpcy5zdGF0ZS5pc1NlbGVjdGVkID8gXCJcIiA6IFwicGxhY2Vob2xkZXItc2VsZWN0ZWRcIik7XG4gICAgICB2YXIgZWxtSWQgPSBcIm11bHRpc2VsZWN0LWZpbHRlci1jb2x1bW4tXCIuY29uY2F0KGNvbHVtbi5kYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiRmlsdGVyIGJ5IFwiLCBjb2x1bW4udGV4dCksIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0KSwge30sIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5zZWxlY3RJbnB1dCA9IG47XG4gICAgICAgIH0sXG4gICAgICAgIGlkOiBlbG1JZCxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBzZWxlY3RDbGFzcyxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuZmlsdGVyLFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmdldERlZmF1bHRWYWx1ZSgpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibXVsdGlzZWxlY3QtZmlsdGVyXCJcbiAgICAgIH0pLCB0aGlzLmdldE9wdGlvbnMoKSkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7IC8vIE11bHRpU2VsZWN0RmlsdGVyLnByb3BUeXBlcyA9IHtcbi8vICAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBvcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBmaWx0ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFtMSUtFLCBFUV0pLFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgd2l0aG91dEVtcHR5T3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYXJyYXksXG4vLyAgIGNhc2VTZW5zaXRpdmU6IFByb3BUeXBlcy5ib29sLFxuLy8gICBnZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcbi8vIE11bHRpU2VsZWN0RmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgZGVmYXVsdFZhbHVlOiBbXSxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIHdpdGhvdXRFbXB0eU9wdGlvbjogZmFsc2UsXG4vLyAgIGNvbXBhcmF0b3I6IEVRLFxuLy8gICBjYXNlU2Vuc2l0aXZlOiB0cnVlLFxuLy8gICBpZDogbnVsbCxcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IE11bHRpU2VsZWN0RmlsdGVyOyIsIi8qIGVzbGludCBlcWVxZXE6IDAgKi9cbi8qIGVzbGludCBuby1jb25zb2xlOiAwICovXG5pbXBvcnQgeyBFUSwgRklMVEVSX1RZUEVTLCBHRSwgR1QsIExFLCBMSUtFLCBMVCwgTkUgfSBmcm9tIFwiLi5cIjtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckJ5VGV4dCA9XG4gIChfOiBhbnkpID0+XG4gIChcbiAgICBkYXRhOiBhbnksXG4gICAgZGF0YUZpZWxkOiBhbnksXG4gICAgeyBmaWx0ZXJWYWw6IHVzZXJJbnB1dCA9IFwiXCIsIGNvbXBhcmF0b3IgPSBMSUtFLCBjYXNlU2Vuc2l0aXZlIH06IGFueSxcbiAgICBjdXN0b21GaWx0ZXJWYWx1ZTogYW55XG4gICkgPT4ge1xuICAgIC8vIG1ha2Ugc3VyZSBmaWx0ZXIgdmFsdWUgdG8gYmUgYSBzdHJpbmdcbiAgICBjb25zdCBmaWx0ZXJWYWwgPSB1c2VySW5wdXQudG9TdHJpbmcoKTtcblxuICAgIHJldHVybiBkYXRhLmZpbHRlcigocm93OiBhbnkpID0+IHtcbiAgICAgIGxldCBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2VsbFN0ciA9IF8uaXNEZWZpbmVkKGNlbGwpID8gY2VsbC50b1N0cmluZygpIDogXCJcIjtcbiAgICAgIGlmIChjb21wYXJhdG9yID09PSBFUSkge1xuICAgICAgICByZXR1cm4gY2VsbFN0ciA9PT0gZmlsdGVyVmFsO1xuICAgICAgfVxuICAgICAgaWYgKGNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIGNlbGxTdHIuaW5jbHVkZXMoZmlsdGVyVmFsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgY2VsbFN0ci50b0xvY2FsZVVwcGVyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsLnRvTG9jYWxlVXBwZXJDYXNlKCkpICE9PVxuICAgICAgICAtMVxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckJ5TnVtYmVyID1cbiAgKF86IGFueSkgPT5cbiAgKFxuICAgIGRhdGE6IGFueSxcbiAgICBkYXRhRmllbGQ6IGFueSxcbiAgICB7IGZpbHRlclZhbDogeyBjb21wYXJhdG9yLCBudW1iZXIgfSB9OiBhbnksXG4gICAgY3VzdG9tRmlsdGVyVmFsdWU6IGFueVxuICApID0+XG4gICAgZGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiB7XG4gICAgICBpZiAobnVtYmVyID09PSBcIlwiIHx8ICFjb21wYXJhdG9yKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGxldCBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuXG4gICAgICBpZiAoY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICAgICAgY2VsbCA9IGN1c3RvbUZpbHRlclZhbHVlKGNlbGwsIHJvdyk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY29tcGFyYXRvcikge1xuICAgICAgICBjYXNlIEVROiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgPT0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgR1Q6IHtcbiAgICAgICAgICByZXR1cm4gY2VsbCA+IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEdFOiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgPj0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTFQ6IHtcbiAgICAgICAgICByZXR1cm4gY2VsbCA8IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExFOiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgPD0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTkU6IHtcbiAgICAgICAgICByZXR1cm4gY2VsbCAhPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOdW1iZXIgY29tcGFyYXRvciBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJCeURhdGUgPVxuICAoXzogYW55KSA9PlxuICAoXG4gICAgZGF0YTogYW55LFxuICAgIGRhdGFGaWVsZDogYW55LFxuICAgIHsgZmlsdGVyVmFsOiB7IGNvbXBhcmF0b3IsIGRhdGUgfSB9OiBhbnksXG4gICAgY3VzdG9tRmlsdGVyVmFsdWU6IGFueVxuICApID0+IHtcbiAgICBpZiAoIWRhdGUgfHwgIWNvbXBhcmF0b3IpIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IGZpbHRlckRhdGUgPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICBjb25zdCBmaWx0ZXJNb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBjb25zdCBmaWx0ZXJZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuXG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4ge1xuICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgIGxldCBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuXG4gICAgICBpZiAoY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICAgICAgY2VsbCA9IGN1c3RvbUZpbHRlclZhbHVlKGNlbGwsIHJvdyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY2VsbCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICBjZWxsID0gbmV3IERhdGUoY2VsbCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjZWxsLmdldFVUQ0RhdGUoKTtcbiAgICAgIGNvbnN0IHRhcmdldE1vbnRoID0gY2VsbC5nZXRVVENNb250aCgpO1xuICAgICAgY29uc3QgdGFyZ2V0WWVhciA9IGNlbGwuZ2V0VVRDRnVsbFllYXIoKTtcblxuICAgICAgc3dpdGNoIChjb21wYXJhdG9yKSB7XG4gICAgICAgIGNhc2UgRVE6IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWx0ZXJEYXRlICE9PSB0YXJnZXREYXRlIHx8XG4gICAgICAgICAgICBmaWx0ZXJNb250aCAhPT0gdGFyZ2V0TW9udGggfHxcbiAgICAgICAgICAgIGZpbHRlclllYXIgIT09IHRhcmdldFllYXJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgR1Q6IHtcbiAgICAgICAgICBpZiAoY2VsbCA8PSBkYXRlKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEdFOiB7XG4gICAgICAgICAgaWYgKHRhcmdldFllYXIgPCBmaWx0ZXJZZWFyKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJiB0YXJnZXRNb250aCA8IGZpbHRlck1vbnRoKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0YXJnZXRZZWFyID09PSBmaWx0ZXJZZWFyICYmXG4gICAgICAgICAgICB0YXJnZXRNb250aCA9PT0gZmlsdGVyTW9udGggJiZcbiAgICAgICAgICAgIHRhcmdldERhdGUgPCBmaWx0ZXJEYXRlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExUOiB7XG4gICAgICAgICAgaWYgKGNlbGwgPj0gZGF0ZSkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMRToge1xuICAgICAgICAgIGlmICh0YXJnZXRZZWFyID4gZmlsdGVyWWVhcikge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiYgdGFyZ2V0TW9udGggPiBmaWx0ZXJNb250aCkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJlxuICAgICAgICAgICAgdGFyZ2V0TW9udGggPT09IGZpbHRlck1vbnRoICYmXG4gICAgICAgICAgICB0YXJnZXREYXRlID4gZmlsdGVyRGF0ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBORToge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbHRlckRhdGUgPT09IHRhcmdldERhdGUgJiZcbiAgICAgICAgICAgIGZpbHRlck1vbnRoID09PSB0YXJnZXRNb250aCAmJlxuICAgICAgICAgICAgZmlsdGVyWWVhciA9PT0gdGFyZ2V0WWVhclxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJEYXRlIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQnlBcnJheSA9XG4gIChfOiBhbnkpID0+XG4gIChkYXRhOiBhbnksIGRhdGFGaWVsZDogYW55LCB7IGZpbHRlclZhbCwgY29tcGFyYXRvciB9OiBhbnkpID0+IHtcbiAgICBpZiAoZmlsdGVyVmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRhdGE7XG4gICAgY29uc3QgcmVmaW5lZEZpbHRlclZhbCA9IGZpbHRlclZhbFxuICAgICAgLmZpbHRlcigoeDogYW55KSA9PiBfLmlzRGVmaW5lZCh4KSlcbiAgICAgIC5tYXAoKHg6IGFueSkgPT4geC50b1N0cmluZygpKTtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiB7XG4gICAgICBjb25zdCBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgbGV0IGNlbGxTdHIgPSBfLmlzRGVmaW5lZChjZWxsKSA/IGNlbGwudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICBpZiAoY29tcGFyYXRvciA9PT0gRVEpIHtcbiAgICAgICAgcmV0dXJuIHJlZmluZWRGaWx0ZXJWYWwuaW5kZXhPZihjZWxsU3RyKSAhPT0gLTE7XG4gICAgICB9XG4gICAgICBjZWxsU3RyID0gY2VsbFN0ci50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHJlZmluZWRGaWx0ZXJWYWwuc29tZShcbiAgICAgICAgKGl0ZW06IGFueSkgPT4gY2VsbFN0ci5pbmRleE9mKGl0ZW0udG9Mb2NhbGVVcHBlckNhc2UoKSkgIT09IC0xXG4gICAgICApO1xuICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRmFjdG9yeSA9IChfOiBhbnkpID0+IChmaWx0ZXJUeXBlOiBhbnkpID0+IHtcbiAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuTVVMVElTRUxFQ1Q6XG4gICAgICByZXR1cm4gZmlsdGVyQnlBcnJheShfKTtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5OVU1CRVI6XG4gICAgICByZXR1cm4gZmlsdGVyQnlOdW1iZXIoXyk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuREFURTpcbiAgICAgIHJldHVybiBmaWx0ZXJCeURhdGUoXyk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuVEVYVDpcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5TRUxFQ1Q6XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFVzZSBgdGV4dGAgZmlsdGVyIGFzIGRlZmF1bHQgZmlsdGVyXG4gICAgICByZXR1cm4gZmlsdGVyQnlUZXh0KF8pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVycyA9XG4gIChkYXRhOiBhbnksIGNvbHVtbnM6IGFueSwgXzogYW55KSA9PlxuICAoY3VyckZpbHRlcnM6IGFueSwgY2xlYXJGaWx0ZXJzOiB7IFtkYXRhRmllbGQ6IHN0cmluZ106IGFueSB9ID0ge30pID0+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gZmlsdGVyRmFjdG9yeShfKTtcbiAgICBjb25zdCBmaWx0ZXJTdGF0ZSA9IHsgLi4uY2xlYXJGaWx0ZXJzLCAuLi5jdXJyRmlsdGVycyB9O1xuICAgIGxldCByZXN1bHQgPSBkYXRhO1xuICAgIGxldCBmaWx0ZXJGbjtcbiAgICBPYmplY3Qua2V5cyhmaWx0ZXJTdGF0ZSkuZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG4gICAgICBsZXQgY3VycmVudFJlc3VsdDtcbiAgICAgIGxldCBmaWx0ZXJWYWx1ZTtcbiAgICAgIGxldCBjdXN0b21GaWx0ZXI7XG4gICAgICBjb2x1bW5zID0gY29sdW1ucyA/PyBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoY29sdW1uc1tpXS5kYXRhRmllbGQgPT09IGRhdGFGaWVsZCkge1xuICAgICAgICAgIGZpbHRlclZhbHVlID0gY29sdW1uc1tpXS5maWx0ZXJWYWx1ZTtcbiAgICAgICAgICBpZiAoY29sdW1uc1tpXS5maWx0ZXIpIHtcbiAgICAgICAgICAgIGN1c3RvbUZpbHRlciA9IGNvbHVtbnNbaV0uZmlsdGVyLnByb3BzLm9uRmlsdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2xlYXJGaWx0ZXJzW2RhdGFGaWVsZF0gJiYgY3VzdG9tRmlsdGVyKSB7XG4gICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXN0b21GaWx0ZXIoY2xlYXJGaWx0ZXJzW2RhdGFGaWVsZF0uZmlsdGVyVmFsLCByZXN1bHQpO1xuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXN1bHQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICByZXN1bHQgPSBjdXJyZW50UmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWx0ZXJPYmogPSBmaWx0ZXJTdGF0ZVtkYXRhRmllbGRdO1xuICAgICAgICBmaWx0ZXJGbiA9IGZhY3RvcnkoZmlsdGVyT2JqLmZpbHRlclR5cGUpO1xuICAgICAgICBpZiAoY3VzdG9tRmlsdGVyKSB7XG4gICAgICAgICAgY3VycmVudFJlc3VsdCA9IGN1c3RvbUZpbHRlcihmaWx0ZXJPYmouZmlsdGVyVmFsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudFJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHJlc3VsdCA9IGZpbHRlckZuKHJlc3VsdCwgZGF0YUZpZWxkLCBmaWx0ZXJPYmosIGZpbHRlclZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBjdXJyZW50UmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEVRLCBGSUxURVJfVFlQRVMsIExJS0UgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IGZpbHRlcnMgfSBmcm9tIFwiLi9maWx0ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJQcm92aWRlclByb3BzIHtcbiAgZGF0YTogYW55W107XG4gIGNvbHVtbnM6IGFueVtdO1xuICBkYXRhQ2hhbmdlTGlzdGVuZXI/OiBhbnk7XG4gIGZpbHRlcjogYW55O1xuICBjaGlsZHJlbjogYW55O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoXG4gIF86IGFueSxcbiAgaXNSZW1vdGVGaWx0ZXJpbmc6ICgpID0+IGJvb2xlYW4sXG4gIGhhbmRsZUZpbHRlckNoYW5nZTogKGZpbHRlcnM6IGFueSkgPT4gdm9pZFxuKSA9PiB7XG4gIGNvbnN0IEZpbHRlckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4oe30pO1xuXG4gIGNsYXNzIEZpbHRlclByb3ZpZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEZpbHRlclByb3ZpZGVyUHJvcHM+IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgZGF0YTogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB9O1xuXG4gICAgY3VyckZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgY2xlYXJGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAgIGRhdGE6IGFueVtdO1xuICAgIGlzRW1pdERhdGFDaGFuZ2U6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogRmlsdGVyUHJvdmlkZXJQcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5jdXJyRmlsdGVycyA9IHt9O1xuICAgICAgdGhpcy5jbGVhckZpbHRlcnMgPSB7fTtcbiAgICAgIHRoaXMub25GaWx0ZXIgPSB0aGlzLm9uRmlsdGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmRvRmlsdGVyID0gdGhpcy5kb0ZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5vbkV4dGVybmFsRmlsdGVyID0gdGhpcy5vbkV4dGVybmFsRmlsdGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmRhdGEgPSBwcm9wcy5kYXRhO1xuICAgICAgdGhpcy5pc0VtaXREYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAoaXNSZW1vdGVGaWx0ZXJpbmcoKSAmJiBPYmplY3Qua2V5cyh0aGlzLmN1cnJGaWx0ZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGhhbmRsZUZpbHRlckNoYW5nZSh0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvbkZpbHRlcihjb2x1bW46IGFueSwgZmlsdGVyVHlwZTogYW55LCBpbml0aWFsaXplID0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAoZmlsdGVyVmFsOiBhbnkpID0+IHtcbiAgICAgICAgLy8gd2F0Y2ggb3V0IGhlcmUgaWYgbWlncmF0aW9uIHRvIGNvbnRleHQgQVBJLCAjMzM0XG4gICAgICAgIGNvbnN0IGN1cnJGaWx0ZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jdXJyRmlsdGVycyk7XG4gICAgICAgIHRoaXMuY2xlYXJGaWx0ZXJzID0ge307XG4gICAgICAgIGNvbnN0IHsgZGF0YUZpZWxkLCBmaWx0ZXIgfSA9IGNvbHVtbjtcblxuICAgICAgICBjb25zdCBuZWVkQ2xlYXJGaWx0ZXJzID1cbiAgICAgICAgICAhXy5pc0RlZmluZWQoZmlsdGVyVmFsKSB8fCBmaWx0ZXJWYWwgPT09IFwiXCIgfHwgZmlsdGVyVmFsLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICBpZiAobmVlZENsZWFyRmlsdGVycykge1xuICAgICAgICAgIGRlbGV0ZSBjdXJyRmlsdGVyc1tkYXRhRmllbGRdO1xuICAgICAgICAgIHRoaXMuY2xlYXJGaWx0ZXJzID0geyBbZGF0YUZpZWxkXTogeyBjbGVhcjogdHJ1ZSwgZmlsdGVyVmFsIH0gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzZWxlY3QgZGVmYXVsdCBjb21wYXJhdG9yIGlzIEVRLCBvdGhlcnMgYXJlIExJS0VcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb21wYXJhdG9yID0gZmlsdGVyVHlwZSA9PT0gRklMVEVSX1RZUEVTLlNFTEVDVCA/IEVRIDogTElLRSxcbiAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPSBmYWxzZSxcbiAgICAgICAgICB9ID0gZmlsdGVyLnByb3BzO1xuICAgICAgICAgIGN1cnJGaWx0ZXJzW2RhdGFGaWVsZF0gPSB7XG4gICAgICAgICAgICBmaWx0ZXJWYWwsXG4gICAgICAgICAgICBmaWx0ZXJUeXBlLFxuICAgICAgICAgICAgY29tcGFyYXRvcixcbiAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VyckZpbHRlcnMgPSBjdXJyRmlsdGVycztcblxuICAgICAgICBpZiAoaXNSZW1vdGVGaWx0ZXJpbmcoKSkge1xuICAgICAgICAgIGlmICghaW5pdGlhbGl6ZSkge1xuICAgICAgICAgICAgaGFuZGxlRmlsdGVyQ2hhbmdlKHRoaXMuY3VyckZpbHRlcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBUT0RPOiBXaHkgd2UgbmVlZCB0byBmb3JjZVVwZGF0ZSBoZXJlPyBcbiAgICAgICAgICAvLyBJdCBzZWVtcyB0aGUgZmlsdGVyIGNvbXBvbmVudCBzaG91bGQgYmUgY29udHJvbGxlZCBieSB0aGUgcGFyZW50IGNvbXBvbmVudC9Qcm92aWRlclxuICAgICAgICAgIC8vIEludHJvZHVjZSB0YWRkaXRpb25hbCBwcm9wZXJ0eSBmb3JjZVVwZGF0ZSAoZGVmYXVsdCB0byBmYWxzZSkgdG8gYXZvaWQgaW5maW5pdGUgbG9vcCBvZiB0aGlzLmZvcmNlVXBkYXRlKCksIHdpbGwgbmVlZCB0byByZWZhY3RvciB0aGUgZmlsdGVyIGNvbXBvbmVudCB0byBiZSBjb250cm9sbGVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50L1Byb3ZpZGVyXG4gICAgICAgICAgaWYgKGZpbHRlci5wcm9wcyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlci5wcm9wcy5mb3JjZVVwZGF0ZSA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlci5wcm9wcy5mb3JjZVVwZGF0ZSA9PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvRmlsdGVyKHRoaXMucHJvcHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBvbkV4dGVybmFsRmlsdGVyKGNvbHVtbjogYW55LCBmaWx0ZXJUeXBlOiBhbnkpIHtcbiAgICAgIHJldHVybiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uRmlsdGVyKGNvbHVtbiwgZmlsdGVyVHlwZSkodmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRGaWx0ZXJlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgbmV4dFByb3BzOiBSZWFkb25seTxGaWx0ZXJQcm92aWRlclByb3BzPixcbiAgICAgIG5leHRTdGF0ZTogUmVhZG9ubHk8e30+LFxuICAgICAgbmV4dENvbnRleHQ6IGFueVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgaWYgKCFpc1JlbW90ZUZpbHRlcmluZygpICYmICFfLmlzRXF1YWwobmV4dFByb3BzLmRhdGEsIHRoaXMuZGF0YSkpIHtcbiAgICAgICAgdGhpcy5kb0ZpbHRlcihuZXh0UHJvcHMsIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXh0UHJvcHMuZGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGRvRmlsdGVyKHByb3BzOiBGaWx0ZXJQcm92aWRlclByb3BzLCBpZ25vcmVFbWl0RGF0YUNoYW5nZSA9IGZhbHNlKSB7XG4gICAgICBjb25zdCB7IGRhdGFDaGFuZ2VMaXN0ZW5lciwgZGF0YSwgY29sdW1ucywgZmlsdGVyIH0gPSBwcm9wcztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbHRlcnMoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIF9cbiAgICAgICkodGhpcy5jdXJyRmlsdGVycywgdGhpcy5jbGVhckZpbHRlcnMpO1xuICAgICAgaWYgKGZpbHRlci5hZnRlckZpbHRlcikge1xuICAgICAgICBmaWx0ZXIuYWZ0ZXJGaWx0ZXIocmVzdWx0LCB0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmIChkYXRhQ2hhbmdlTGlzdGVuZXIgJiYgIWlnbm9yZUVtaXREYXRhQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IHRydWU7XG4gICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lci5lbWl0KFwiZmlsdGVyQ2hhbmdlZFwiLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZpbHRlckNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgb25GaWx0ZXI6IHRoaXMub25GaWx0ZXIsXG4gICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyOiB0aGlzLm9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgICAgICAgICBjdXJyRmlsdGVyczogdGhpcy5jdXJyRmlsdGVycyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvRmlsdGVyQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogRmlsdGVyUHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IEZpbHRlckNvbnRleHQuQ29uc3VtZXIsXG4gIH07XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbnZhciBfZXhjbHVkZWQgPSBbXCJpZFwiLCBcInBsYWNlaG9sZGVyXCIsIFwiY29sdW1uXCIsIFwic3R5bGVcIiwgXCJjbGFzc05hbWVcIiwgXCJvbkZpbHRlclwiLCBcImNhc2VTZW5zaXRpdmVcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJnZXRGaWx0ZXJcIiwgXCJmaWx0ZXJTdGF0ZVwiXTtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkgeyBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307IHZhciBvLCByLCBpID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTsgfSByZXR1cm4gaTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkgeyBpZiAobnVsbCA9PSByKSByZXR1cm4ge307IHZhciB0ID0ge307IGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHsgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlOyB0W25dID0gcltuXTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uLy4uXCIpO1xudmFyIFRleHRGaWx0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJENvbXBvbmVudCkge1xuICBmdW5jdGlvbiBUZXh0RmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0RmlsdGVyKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgVGV4dEZpbHRlciwgW3Byb3BzXSk7XG4gICAgX3RoaXMuZmlsdGVyID0gX3RoaXMuZmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLmhhbmRsZUNsaWNrID0gX3RoaXMuaGFuZGxlQ2xpY2suYmluZChfdGhpcyk7XG4gICAgX3RoaXMudGltZW91dCA9IG51bGw7XG4gICAgX3RoaXMuaW5wdXQgPSB7fTtcbiAgICBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3Byb3BzJGRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChwcm9wcy5maWx0ZXJTdGF0ZSAmJiB0eXBlb2YgcHJvcHMuZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBwcm9wcy5maWx0ZXJTdGF0ZS5maWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gKF9wcm9wcyRkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF9wcm9wcyRkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IF9wcm9wcyRkZWZhdWx0VmFsdWUgOiBcIlwiO1xuICAgIH1cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBnZXREZWZhdWx0VmFsdWUoKVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhUZXh0RmlsdGVyLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRleHRGaWx0ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzLm9uRmlsdGVyLFxuICAgICAgICBnZXRGaWx0ZXIgPSBfdGhpcyRwcm9wcy5nZXRGaWx0ZXIsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzLmNvbHVtbjtcbiAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuVEVYVCwgdHJ1ZSkoZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgICAgZ2V0RmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJWYWwpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlclZhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKShmaWx0ZXJWYWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgaWYgKHByZXZQcm9wcy5kZWZhdWx0VmFsdWUgIT09IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRkZWZhdWx0VmE7XG4gICAgICAgIHZhciBuZXh0VmFsdWUgPSAoX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF90aGlzJHByb3BzJGRlZmF1bHRWYSAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkZGVmYXVsdFZhIDogXCJcIjtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdmFsdWU6IG5leHRWYWx1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBfdGhpczMucHJvcHMub25GaWx0ZXIoX3RoaXMzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKShuZXh0VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbHRlcihlKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICAgIHZhciBmaWx0ZXJWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IGZpbHRlclZhbHVlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgX3RoaXM0LnByb3BzLm9uRmlsdGVyKF90aGlzNC5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuVEVYVCkoZmlsdGVyVmFsdWUpO1xuICAgICAgfSwgdGhpcy5wcm9wcy5kZWxheSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuVGltZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5UaW1lcigpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRkZWZhdWx0VmEyO1xuICAgICAgdmFyIHZhbHVlID0gKF90aGlzJHByb3BzJGRlZmF1bHRWYTIgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSkgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiA6IFwiXCI7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5RmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RmlsdGVyKGZpbHRlclRleHQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGZpbHRlclRleHQgIT09IG51bGwgJiYgZmlsdGVyVGV4dCAhPT0gdm9pZCAwID8gZmlsdGVyVGV4dCA6IFwiXCI7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUNsaWNrXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGUpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DbGljayhlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRpZCA9IF90aGlzJHByb3BzMi5pZCxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczIkaWQgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wczIkaWQsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICBfdGhpcyRwcm9wczIkY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgZGF0YUZpZWxkID0gX3RoaXMkcHJvcHMyJGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgIHRleHQgPSBfdGhpcyRwcm9wczIkY29sdW1uLnRleHQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMyLnN0eWxlLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzMi5vbkZpbHRlcixcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNhc2VTZW5zID0gX3RoaXMkcHJvcHMyLmNhc2VTZW5zaXRpdmUsXG4gICAgICAgIGNhc2VTZW5zaXRpdmUgPSBfdGhpcyRwcm9wczIkY2FzZVNlbnMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMyJGNhc2VTZW5zLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzMi5nZXRGaWx0ZXIsXG4gICAgICAgIF90aGlzJHByb3BzMiRmaWx0ZXJTdCA9IF90aGlzJHByb3BzMi5maWx0ZXJTdGF0ZSxcbiAgICAgICAgZmlsdGVyU3RhdGUgPSBfdGhpcyRwcm9wczIkZmlsdGVyU3QgPT09IHZvaWQgMCA/IHt9IDogX3RoaXMkcHJvcHMyJGZpbHRlclN0LFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlbG1JZCA9IFwidGV4dC1maWx0ZXItY29sdW1uLVwiLmNvbmNhdChkYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiRmlsdGVyIGJ5IFwiLCB0ZXh0KSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG4pIHtcbiAgICAgICAgICBfdGhpczUuaW5wdXQgPSBuO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgaWQ6IGVsbUlkLFxuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyIHRleHQtZmlsdGVyIGZvcm0tY29udHJvbCBcIi5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5maWx0ZXIsXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciB8fCBcIkVudGVyIFwiLmNvbmNhdCh0ZXh0LCBcIi4uLlwiKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJ0ZXh0LWZpbHRlclwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7IC8vIFRleHRGaWx0ZXIucHJvcFR5cGVzID0ge1xuLy8gICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBmaWx0ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFtMSUtFLCBFUV0pLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgY2FzZVNlbnNpdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIGdldEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4vLyB9O1xuLy8gVGV4dEZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlbGF5OiBGSUxURVJfREVMQVksXG4vLyAgIGZpbHRlclN0YXRlOiB7fSxcbi8vICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuLy8gICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBUZXh0RmlsdGVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcHJlZmVyLXRlbXBsYXRlOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLi8uLlwiKTtcbnZhciBFUSA9IFwiPVwiO1xudmFyIE5FID0gXCIhPVwiO1xudmFyIEdUID0gXCI+XCI7XG52YXIgR0UgPSBcIj49XCI7XG52YXIgTFQgPSBcIjxcIjtcbnZhciBMRSA9IFwiPD1cIjtcbnZhciBsZWdhbENvbXBhcmF0b3JzID0gW0VRLCBORSwgR1QsIEdFLCBMVCwgTEVdO1xuZnVuY3Rpb24gZGF0ZVBhcnNlcihkKSB7XG4gIHJldHVybiBcIlwiLmNvbmNhdChkLmdldFVUQ0Z1bGxZZWFyKCksIFwiLVwiKS5jb25jYXQoKFwiMFwiICsgKGQuZ2V0VVRDTW9udGgoKSArIDEpKS5zbGljZSgtMiksIFwiLVwiKS5jb25jYXQoKFwiMFwiICsgZC5nZXRVVENEYXRlKCkpLnNsaWNlKC0yKSk7XG59XG52YXIgRGF0ZUZpbHRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIERhdGVGaWx0ZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERhdGVGaWx0ZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBEYXRlRmlsdGVyLCBbcHJvcHNdKTtcbiAgICBfdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICBfdGhpcy5jb21wYXJhdG9ycyA9IHByb3BzLmNvbXBhcmF0b3JzIHx8IGxlZ2FsQ29tcGFyYXRvcnM7XG4gICAgX3RoaXMuYXBwbHlGaWx0ZXIgPSBfdGhpcy5hcHBseUZpbHRlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZURhdGUgPSBfdGhpcy5vbkNoYW5nZURhdGUuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25DaGFuZ2VDb21wYXJhdG9yID0gX3RoaXMub25DaGFuZ2VDb21wYXJhdG9yLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRGF0ZUZpbHRlciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhEYXRlRmlsdGVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIGdldEZpbHRlciA9IHRoaXMucHJvcHMuZ2V0RmlsdGVyO1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSB0aGlzLmRhdGVGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgICAgdmFyIGRhdGUgPSB0aGlzLmlucHV0RGF0ZS52YWx1ZTtcbiAgICAgIGlmIChjb21wYXJhdG9yICYmIGRhdGUpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihkYXRlLCBjb21wYXJhdG9yLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgICAgZ2V0RmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJWYWwpIHtcbiAgICAgICAgICB2YXIgbnVsbGFibGVGaWx0ZXJWYWwgPSBmaWx0ZXJWYWwgfHwge1xuICAgICAgICAgICAgZGF0ZTogbnVsbCxcbiAgICAgICAgICAgIGNvbXBhcmF0b3I6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIF90aGlzMi5kYXRlRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IG51bGxhYmxlRmlsdGVyVmFsLmNvbXBhcmF0b3I7XG4gICAgICAgICAgX3RoaXMyLmlucHV0RGF0ZS52YWx1ZSA9IG51bGxhYmxlRmlsdGVyVmFsLmRhdGUgPyBkYXRlUGFyc2VyKG51bGxhYmxlRmlsdGVyVmFsLmRhdGUpIDogbnVsbDtcbiAgICAgICAgICBfdGhpczIuYXBwbHlGaWx0ZXIobnVsbGFibGVGaWx0ZXJWYWwuZGF0ZSwgbnVsbGFibGVGaWx0ZXJWYWwuY29tcGFyYXRvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZURhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VEYXRlKGUpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5kYXRlRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICAgIHZhciBmaWx0ZXJWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXJWYWx1ZSwgY29tcGFyYXRvcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2hhbmdlQ29tcGFyYXRvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZUNvbXBhcmF0b3IoZSkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5pbnB1dERhdGUudmFsdWU7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSwgY29tcGFyYXRvcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENvbXBhcmF0b3JPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbXBhcmF0b3JPcHRpb25zKCkge1xuICAgICAgdmFyIG9wdGlvblRhZ3MgPSBbXTtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyR3aXRob3V0RW0gPSB0aGlzLnByb3BzLndpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24sXG4gICAgICAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24gPSBfdGhpcyRwcm9wcyR3aXRob3V0RW0gPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMkd2l0aG91dEVtO1xuICAgICAgaWYgKCF3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IFwiLTFcIlxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29tcGFyYXRvcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogaSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5jb21wYXJhdG9yc1tpXVxuICAgICAgICB9LCB0aGlzLmNvbXBhcmF0b3JzW2ldKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGVmYXVsdENvbXBhcmF0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVmYXVsdENvbXBhcmF0b3IoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8ge1xuICAgICAgICAgIGRhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjb21wYXJhdG9yOiBcIlwiXG4gICAgICAgIH0gOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIF90aGlzJHByb3BzJGZpbHRlclN0YSA9IF90aGlzJHByb3BzLmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzJGZpbHRlclN0YSA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wcyRmaWx0ZXJTdGE7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHREYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHREYXRlKCkge1xuICAgICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQgZm9yIHRoZSBpbnB1dCB0eXBlPWRhdGUsIGkuZS4gXCJZWVlZLU1NLUREXCJcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IHtcbiAgICAgICAgICBkYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBfdGhpcyRwcm9wczIkZmlsdGVyU3QgPSBfdGhpcyRwcm9wczIuZmlsdGVyU3RhdGUsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHMyJGZpbHRlclN0ID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzMiRmaWx0ZXJTdDtcbiAgICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQYXJzZXIoZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmRhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZVBhcnNlcihuZXcgRGF0ZShkZWZhdWx0VmFsdWUuZGF0ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5RmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RmlsdGVyKHZhbHVlLCBjb21wYXJhdG9yLCBpc0luaXRpYWwpIHtcbiAgICAgIC8vIGlmICghY29tcGFyYXRvciB8fCAhdmFsdWUpIHtcbiAgICAgIC8vICByZXR1cm47XG4gICAgICAvLyB9XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMzLmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczMub25GaWx0ZXIsXG4gICAgICAgIF90aGlzJHByb3BzMyRkZWxheSA9IF90aGlzJHByb3BzMy5kZWxheSxcbiAgICAgICAgZGVsYXkgPSBfdGhpcyRwcm9wczMkZGVsYXkgPT09IHZvaWQgMCA/IDAgOiBfdGhpcyRwcm9wczMkZGVsYXk7XG4gICAgICB2YXIgZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgIC8vIEluY29taW5nIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgYSBzdHJpbmcsIGFuZCB0aGUgZGVmYXVsdERhdGVcbiAgICAgICAgLy8gYWJvdmUgaXMgaW1wbGVtZW50ZWQgYXMgYW4gZW1wdHkgc3RyaW5nLCBzbyB3ZSBjYW4ganVzdCBjaGVjayBmb3IgdGhhdC5cbiAgICAgICAgLy8gaW5zdGVhZCBvZiBwYXJzaW5nIGFuIGludmFsaWQgRGF0ZS4gVGhlIGZpbHRlciBmdW5jdGlvbiB3aWxsIGludGVycHJldFxuICAgICAgICAvLyBudWxsIGFzIGFuIGVtcHR5IGRhdGUgZmllbGRcbiAgICAgICAgdmFyIGRhdGUgPSB2YWx1ZSA9PT0gXCJcIiA/IG51bGwgOiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuREFURSwgaXNJbml0aWFsKSh7XG4gICAgICAgICAgZGF0ZTogZGF0ZSxcbiAgICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmIChkZWxheSkge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBleGVjdXRlKCk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4ZWN1dGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzNCRpZCA9IF90aGlzJHByb3BzNC5pZCxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczQkaWQgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wczQkaWQsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHM0LnBsYWNlaG9sZGVyLFxuICAgICAgICBfdGhpcyRwcm9wczQkY29sdW1uID0gX3RoaXMkcHJvcHM0LmNvbHVtbixcbiAgICAgICAgZGF0YUZpZWxkID0gX3RoaXMkcHJvcHM0JGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgIHRleHQgPSBfdGhpcyRwcm9wczQkY29sdW1uLnRleHQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM0LnN0eWxlLFxuICAgICAgICBjb21wYXJhdG9yU3R5bGUgPSBfdGhpcyRwcm9wczQuY29tcGFyYXRvclN0eWxlLFxuICAgICAgICBkYXRlU3R5bGUgPSBfdGhpcyRwcm9wczQuZGF0ZVN0eWxlLFxuICAgICAgICBfdGhpcyRwcm9wczQkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczQuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczQkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczQkY2xhc3NOYW0sXG4gICAgICAgIF90aGlzJHByb3BzNCRjb21wYXJhdCA9IF90aGlzJHByb3BzNC5jb21wYXJhdG9yQ2xhc3NOYW1lLFxuICAgICAgICBjb21wYXJhdG9yQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0JGNvbXBhcmF0ID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHM0JGNvbXBhcmF0LFxuICAgICAgICBfdGhpcyRwcm9wczQkZGF0ZUNsYXMgPSBfdGhpcyRwcm9wczQuZGF0ZUNsYXNzTmFtZSxcbiAgICAgICAgZGF0ZUNsYXNzTmFtZSA9IF90aGlzJHByb3BzNCRkYXRlQ2xhcyA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzNCRkYXRlQ2xhcztcbiAgICAgIHZhciBjb21wYXJhdG9yRWxtSWQgPSBcImRhdGUtZmlsdGVyLWNvbXBhcmF0b3ItXCIuY29uY2F0KGRhdGFGaWVsZCkuY29uY2F0KGlkID8gXCItXCIuY29uY2F0KGlkKSA6IFwiXCIpO1xuICAgICAgdmFyIGlucHV0RWxtSWQgPSBcImRhdGUtZmlsdGVyLWNvbHVtbi1cIi5jb25jYXQoZGF0YUZpZWxkKS5jb25jYXQoaWQgPyBcIi1cIi5jb25jYXQoaWQpIDogXCJcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgICAgIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyIGRhdGUtZmlsdGVyIFwiLmNvbmNhdChjbGFzc05hbWUpLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJkYXRlLWZpbHRlclwiXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGNvbXBhcmF0b3JFbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkZpbHRlciBjb21wYXJhdG9yXCIpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5kYXRlRmlsdGVyQ29tcGFyYXRvciA9IG47XG4gICAgICAgIH0sXG4gICAgICAgIGlkOiBjb21wYXJhdG9yRWxtSWQsXG4gICAgICAgIHN0eWxlOiBjb21wYXJhdG9yU3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZTogXCJkYXRlLWZpbHRlci1jb21wYXJhdG9yIGZvcm0tY29udHJvbCBcIi5jb25jYXQoY29tcGFyYXRvckNsYXNzTmFtZSksXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvcixcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmdldERlZmF1bHRDb21wYXJhdG9yKCksXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJkYXRlLWZpbHRlci1jb21wYXJhdG9yXCJcbiAgICAgIH0sIHRoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSkpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBodG1sRm9yOiBpbnB1dEVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiRW50ZXIgJFwiLCB0ZXh0KSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5pbnB1dERhdGUgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlciBkYXRlLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KGRhdGVDbGFzc05hbWUpLFxuICAgICAgICBzdHlsZTogZGF0ZVN0eWxlLFxuICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VEYXRlLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIgfHwgXCJFbnRlciBcIi5jb25jYXQodGV4dCwgXCIuLi5cIiksXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0RGF0ZSgpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwiZGF0ZS1maWx0ZXItaW5wdXRcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpOyAvLyBEYXRlRmlsdGVyLnByb3BUeXBlcyA9IHtcbi8vICAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgZGF0ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdF0pLFxuLy8gICAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbLi4ubGVnYWxDb21wYXJhdG9ycywgJyddKVxuLy8gICB9KSxcbi8vICAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiAwICovXG4vLyAgIGNvbXBhcmF0b3JzOiAocHJvcHM6IGFueSwgcHJvcE5hbWU6IGFueSkgPT4ge1xuLy8gICAgIGlmICghcHJvcHNbcHJvcE5hbWVdKSB7XG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHNbcHJvcE5hbWVdLmxlbmd0aDsgaSArPSAxKSB7XG4vLyAgICAgICBsZXQgY29tcGFyYXRvcklzVmFsaWQgPSBmYWxzZTtcbi8vICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVnYWxDb21wYXJhdG9ycy5sZW5ndGg7IGogKz0gMSkge1xuLy8gICAgICAgICBpZiAobGVnYWxDb21wYXJhdG9yc1tqXSA9PT0gcHJvcHNbcHJvcE5hbWVdW2ldIHx8IHByb3BzW3Byb3BOYW1lXVtpXSA9PT0gJycpIHtcbi8vICAgICAgICAgICBjb21wYXJhdG9ySXNWYWxpZCA9IHRydWU7XG4vLyAgICAgICAgICAgYnJlYWs7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICAgIGlmICghY29tcGFyYXRvcklzVmFsaWQpIHtcbi8vICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgRGF0ZSBjb21wYXJhdG9yIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWQuXG4vLyAgICAgICAgICAgVXNlIG9ubHkgJHtsZWdhbENvbXBhcmF0b3JzfWApO1xuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgfSxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb246IFByb3BUeXBlcy5ib29sLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY29tcGFyYXRvclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBkYXRlU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgY29tcGFyYXRvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZGF0ZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuY1xuLy8gfTtcbi8vIERhdGVGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBkZWxheTogMCxcbi8vICAgZGVmYXVsdFZhbHVlOiB7XG4vLyAgICAgZGF0ZTogdW5kZWZpbmVkLFxuLy8gICAgIGNvbXBhcmF0b3I6ICcnXG4vLyAgIH0sXG4vLyAgIGZpbHRlclN0YXRlOiB7fSxcbi8vICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbjogZmFsc2UsXG4vLyAgIGNvbXBhcmF0b3JzOiBsZWdhbENvbXBhcmF0b3JzLFxuLy8gICBwbGFjZWhvbGRlcjogdW5kZWZpbmVkLFxuLy8gICBzdHlsZTogdW5kZWZpbmVkLFxuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBjb21wYXJhdG9yU3R5bGU6IHVuZGVmaW5lZCxcbi8vICAgY29tcGFyYXRvckNsYXNzTmFtZTogJycsXG4vLyAgIGRhdGVTdHlsZTogdW5kZWZpbmVkLFxuLy8gICBkYXRlQ2xhc3NOYW1lOiAnJyxcbi8vICAgaWQ6IG51bGxcbi8vIH07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IERhdGVGaWx0ZXI7IiwiLy8gVGhlIGluZmVycmVkIHR5cGUgb2YgJ2RlZmF1bHQnIGNhbm5vdCBiZSBuYW1lZCB3aXRob3V0IGEgcmVmZXJlbmNlIHRvICdyZWFjdC1ib290c3RyYXAtdGFibGUtbmcvbm9kZV9tb2R1bGVzL0B0eXBlcy9wcm9wLXR5cGVzJy5cbi8vIFRoaXMgaXMgbGlrZWx5IG5vdCBwb3J0YWJsZS4gQSB0eXBlIGFubm90YXRpb24gaXMgbmVjZXNzYXJ5LnRzKDI3NDIpXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ29sdW1uRGVzY3JpcHRpb24sXG4gIFRhYmxlQ29sdW1uRmlsdGVyUHJvcHMsXG59IGZyb20gXCJyZWFjdC1ib290c3RyYXAtdGFibGUtbmdcIjtcblxuaW1wb3J0IERhdGVGaWx0ZXIgZnJvbSBcIi4vc3JjL2NvbXBvbmVudHMvZGF0ZVwiO1xuaW1wb3J0IE11bHRpU2VsZWN0RmlsdGVyIGZyb20gXCIuL3NyYy9jb21wb25lbnRzL211bHRpc2VsZWN0XCI7XG5pbXBvcnQgTnVtYmVyRmlsdGVyIGZyb20gXCIuL3NyYy9jb21wb25lbnRzL251bWJlclwiO1xuaW1wb3J0IFNlbGVjdEZpbHRlciBmcm9tIFwiLi9zcmMvY29tcG9uZW50cy9zZWxlY3RcIjtcbmltcG9ydCBUZXh0RmlsdGVyIGZyb20gXCIuL3NyYy9jb21wb25lbnRzL3RleHRcIjtcbmltcG9ydCBjcmVhdGVDb250ZXh0IGZyb20gXCIuL3NyYy9jb250ZXh0XCI7XG5cbmV4cG9ydCBlbnVtIEZJTFRFUl9UWVBFUyB7XG4gIFRFWFQgPSBcIlRFWFRcIixcbiAgU0VMRUNUID0gXCJTRUxFQ1RcIixcbiAgTVVMVElTRUxFQ1QgPSBcIk1VTFRJU0VMRUNUXCIsXG4gIE5VTUJFUiA9IFwiTlVNQkVSXCIsXG4gIERBVEUgPSBcIkRBVEVcIixcbn1cblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9ERUxBWSA9IDUwMDtcblxuLyoqXG4gKiBGaWx0ZXIgY29tcGFyYXRvcnMgdXNlZCBmb3IgdGFibGUgZmlsdGVyc1xuICovXG5leHBvcnQgY29uc3QgTElLRSA9IFwiTElLRVwiO1xuZXhwb3J0IGNvbnN0IEVRID0gXCI9XCI7XG5leHBvcnQgY29uc3QgTkUgPSBcIiE9XCI7XG5leHBvcnQgY29uc3QgR1QgPSBcIj5cIjtcbmV4cG9ydCBjb25zdCBHRSA9IFwiPj1cIjtcbmV4cG9ydCBjb25zdCBMVCA9IFwiPFwiO1xuZXhwb3J0IGNvbnN0IExFID0gXCI8PVwiO1xuXG5leHBvcnQgdHlwZSBDb21wYXJhdG9yID0gc3RyaW5nO1xuXG5leHBvcnQgY29uc3QgQ29tcGFyYXRvck51bWJlciA9IDc7XG5cbmV4cG9ydCB0eXBlIFRleHRGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8XG4gIHN0cmluZyxcbiAgVFxuPiAmXG4gIFBhcnRpYWw8e1xuICAgIC8vIGRlZmF1bHQgaXMgZmFsc2UsIGFuZCB0cnVlIHdpbGwgb25seSB3b3JrIHdoZW4gY29tcGFyYXRvciBpcyBMSUtFXG4gICAgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbjtcbiAgICBjb21wYXJhdG9yOiBDb21wYXJhdG9yO1xuICAgIC8vIG9uIGZpbHRlciBlbGVtZW50IGNsaWNrIGV2ZW50XG4gICAgb25DbGljazogKChlOiBTeW50aGV0aWNFdmVudCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgZmlsdGVyU3RhdGU/OiBhbnk7XG4gICAgY29sdW1uOiBhbnk7XG4gIH0+O1xuXG5leHBvcnQgY29uc3QgdGV4dEZpbHRlciA9IChwcm9wczogUGFydGlhbDxUZXh0RmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogVGV4dEZpbHRlcixcbiAgcHJvcHMsXG59KTtcblxuZXhwb3J0IHR5cGUgU2VsZWN0RmlsdGVyT3B0aW9ucyA9XG4gIHwgeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9XG4gIHwgQXJyYXk8eyB2YWx1ZTogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH0+O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8XG4gIHN0cmluZyxcbiAgVFxuPiAmIHtcbiAgb3B0aW9uczpcbiAgICB8IFNlbGVjdEZpbHRlck9wdGlvbnNcbiAgICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxUPikgPT4gU2VsZWN0RmlsdGVyT3B0aW9ucyk7XG4gIGNvbXBhcmF0b3I/OiBDb21wYXJhdG9yIHwgdW5kZWZpbmVkO1xuICAvLyBXaGVuIHRoZSBkZWZhdWx0IHVuc2V0IHNlbGVjdGlvbiBpcyBoaWRkZW4gZnJvbSBkcm9wZG93blxuICB3aXRob3V0RW1wdHlPcHRpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJTdGF0ZT86IGFueTtcbiAgY29sdW1uOiBhbnk7XG4gIGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdEZpbHRlciA9IChwcm9wczogUGFydGlhbDxTZWxlY3RGaWx0ZXJQcm9wcz4gPSB7fSkgPT4gKHtcbiAgRmlsdGVyOiBTZWxlY3RGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucyA9IHtcbiAgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBNdWx0aVNlbGVjdEZpbHRlclByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+ID1cbiAgVGFibGVDb2x1bW5GaWx0ZXJQcm9wczxzdHJpbmdbXSwgVD4gJiB7XG4gICAgb3B0aW9uczogTXVsdGlTZWxlY3RGaWx0ZXJPcHRpb25zIHwgKCgpID0+IE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucyk7XG4gICAgY29tcGFyYXRvcj86IENvbXBhcmF0b3IgfCB1bmRlZmluZWQ7XG4gICAgLy8gV2hlbiBzZXQgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIGlzIGhpZGRlbiBmcm9tIGRyb3Bkb3duXG4gICAgd2l0aG91dEVtcHR5T3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBmaWx0ZXJTdGF0ZT86IGFueTtcbiAgICBjb2x1bW46IGFueTtcbiAgICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IG11bHRpU2VsZWN0RmlsdGVyID0gKFxuICBwcm9wczogUGFydGlhbDxNdWx0aVNlbGVjdEZpbHRlclByb3BzPiA9IHt9XG4pID0+ICh7XG4gIEZpbHRlcjogTXVsdGlTZWxlY3RGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIE51bWJlckZpbHRlclByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+ID0gVGFibGVDb2x1bW5GaWx0ZXJQcm9wczxcbiAgeyBudW1iZXI6IG51bWJlciB8IFwiXCI7IGNvbXBhcmF0b3I6IENvbXBhcmF0b3IgfSxcbiAgVFxuPiAmIHtcbiAgb3B0aW9ucz86IG51bWJlcltdIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9ycz86IENvbXBhcmF0b3JbXSB8IHVuZGVmaW5lZDtcbiAgLy8gV2hlbiBzZXQgdG8gdHJ1ZSBjb21wYXJhdG9yIGRyb3Bkb3duIGRvZXMgbm90IHNob3cgYSBcIm5vIHNlbGVjdGlvblwiIG9wdGlvblxuICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY29tcGFyYXRvckNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbnVtYmVyQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9yU3R5bGU/OiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBudW1iZXJTdHlsZT86IENTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRWYWx1ZT86IHsgbnVtYmVyOiBudW1iZXI7IGNvbXBhcmF0b3I6IENvbXBhcmF0b3IgfSB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyU3RhdGU/OiBhbnk7XG4gIGNvbHVtbjogYW55O1xufTtcblxuZXhwb3J0IGNvbnN0IG51bWJlckZpbHRlciA9IChwcm9wczogUGFydGlhbDxOdW1iZXJGaWx0ZXJQcm9wcz4gPSB7fSkgPT4gKHtcbiAgRmlsdGVyOiBOdW1iZXJGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIERhdGVGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8XG4gIERhdGUsXG4gIFRcbj4gJiB7XG4gIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0VmFsdWU/OlxuICAgIHwge1xuICAgICAgICBkYXRlPzogRGF0ZTtcbiAgICAgICAgY29tcGFyYXRvcj86IENvbXBhcmF0b3I7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbXBhcmF0b3JzPzogQ29tcGFyYXRvcltdIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9yQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkYXRlQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9yU3R5bGU/OiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBkYXRlU3R5bGU/OiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJTdGF0ZT86IGFueTtcbiAgY29sdW1uOiBhbnk7XG59O1xuXG5leHBvcnQgY29uc3QgZGF0ZUZpbHRlciA9IChwcm9wczogUGFydGlhbDxEYXRlRmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogRGF0ZUZpbHRlcixcbiAgcHJvcHMsXG59KTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRmlsdGVyUHJvcHMgPSB7XG4gIHR5cGU/OiBzdHJpbmcgfCBGSUxURVJfVFlQRVMgfCB1bmRlZmluZWQ7XG4gIGNvbXBhcmF0b3I/OiBDb21wYXJhdG9yIHwgdW5kZWZpbmVkO1xuICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBjdXN0b21GaWx0ZXIgPSAocHJvcHM6IFBhcnRpYWw8Q3VzdG9tRmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogKCkgPT4ge30sXG4gIHByb3BzLFxufSk7XG5cbi8qKlxuICogZGVjbGFyYXRpb24gZm9yIHRhYmxlIGZpbHRlciBzdWIgbW9kdWxlXG4gKi9cbmV4cG9ydCB0eXBlIEZpbHRlckZhY3RvcnlQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IHtcbiAgLy8gVE9ETyBuZXdGaWx0ZXJzIGlzIG5vdCB0ZXN0ZWQgbm90IGl0cyB0eXBlIGlzIHZhbGlkYXRlZCBzaW5jZSB0aGUgYXV0aG9yIG9mIHRoaXMgY29tbWl0IGhhcyBubyBleHBlcmllbmNlIHdpdGggdGhpcyBmaWVsZFxuICBhZnRlckZpbHRlcj86ICgobmV3UmVzdWx0OiBUW10sIG5ld0ZpbHRlcnM/OiB1bmtub3duW10pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xufTtcblxuLy8gZGVjbGFyZSBmdW5jdGlvbiBmaWx0ZXJGYWN0b3J5KHByb3BzPzogRmlsdGVyRmFjdG9yeVByb3BzKTogdW5rbm93bjtcbi8vIGV4cG9ydCBkZWZhdWx0IGZpbHRlckZhY3Rvcnk7XG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zID0ge30pID0+ICh7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIG9wdGlvbnMsXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcHJlZmVyLXRlbXBsYXRlOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IERhdGVGaWx0ZXJQcm9wcywgRklMVEVSX1RZUEVTIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmNvbnN0IEVRID0gXCI9XCI7XG5jb25zdCBORSA9IFwiIT1cIjtcbmNvbnN0IEdUID0gXCI+XCI7XG5jb25zdCBHRSA9IFwiPj1cIjtcbmNvbnN0IExUID0gXCI8XCI7XG5jb25zdCBMRSA9IFwiPD1cIjtcblxuY29uc3QgbGVnYWxDb21wYXJhdG9ycyA9IFtFUSwgTkUsIEdULCBHRSwgTFQsIExFXTtcblxuZnVuY3Rpb24gZGF0ZVBhcnNlcihkOiBhbnkpIHtcbiAgcmV0dXJuIGAke2QuZ2V0VVRDRnVsbFllYXIoKX0tJHsoXCIwXCIgKyAoZC5nZXRVVENNb250aCgpICsgMSkpLnNsaWNlKC0yKX0tJHsoXG4gICAgXCIwXCIgKyBkLmdldFVUQ0RhdGUoKVxuICApLnNsaWNlKC0yKX1gO1xufVxuXG5jbGFzcyBEYXRlRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50PERhdGVGaWx0ZXJQcm9wcz4ge1xuICBjb21wYXJhdG9yczogYW55O1xuICBkYXRlRmlsdGVyQ29tcGFyYXRvcjogYW55O1xuICBpbnB1dERhdGU6IGFueTtcbiAgdGltZW91dDogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5jb21wYXJhdG9ycyA9IHByb3BzLmNvbXBhcmF0b3JzIHx8IGxlZ2FsQ29tcGFyYXRvcnM7XG4gICAgdGhpcy5hcHBseUZpbHRlciA9IHRoaXMuYXBwbHlGaWx0ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ2hhbmdlRGF0ZSA9IHRoaXMub25DaGFuZ2VEYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IgPSB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBnZXRGaWx0ZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IHRoaXMuZGF0ZUZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuaW5wdXREYXRlLnZhbHVlO1xuICAgIGlmIChjb21wYXJhdG9yICYmIGRhdGUpIHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZGF0ZSwgY29tcGFyYXRvciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgIGdldEZpbHRlcigoZmlsdGVyVmFsOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbnVsbGFibGVGaWx0ZXJWYWwgPSBmaWx0ZXJWYWwgfHwgeyBkYXRlOiBudWxsLCBjb21wYXJhdG9yOiBudWxsIH07XG4gICAgICAgIHRoaXMuZGF0ZUZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBudWxsYWJsZUZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgICAgICB0aGlzLmlucHV0RGF0ZS52YWx1ZSA9IG51bGxhYmxlRmlsdGVyVmFsLmRhdGVcbiAgICAgICAgICA/IGRhdGVQYXJzZXIobnVsbGFibGVGaWx0ZXJWYWwuZGF0ZSlcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihudWxsYWJsZUZpbHRlclZhbC5kYXRlLCBudWxsYWJsZUZpbHRlclZhbC5jb21wYXJhdG9yKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgb25DaGFuZ2VEYXRlKGU6IGFueSkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLmRhdGVGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXJWYWx1ZSwgY29tcGFyYXRvcik7XG4gIH1cblxuICBvbkNoYW5nZUNvbXBhcmF0b3IoZTogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmlucHV0RGF0ZS52YWx1ZTtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSwgY29tcGFyYXRvcik7XG4gIH1cblxuICBnZXRDb21wYXJhdG9yT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3QgeyB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uID0gZmFsc2UgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCF3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goPG9wdGlvbiBrZXk9XCItMVwiIC8+KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbXBhcmF0b3JzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgIDxvcHRpb24ga2V5PXtpfSB2YWx1ZT17dGhpcy5jb21wYXJhdG9yc1tpXX0+XG4gICAgICAgICAge3RoaXMuY29tcGFyYXRvcnNbaV19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gIH1cblxuICBnZXREZWZhdWx0Q29tcGFyYXRvcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7IGRhdGU6IHVuZGVmaW5lZCwgY29tcGFyYXRvcjogXCJcIiB9LFxuICAgICAgZmlsdGVyU3RhdGUgPSB7fSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsKSB7XG4gICAgICByZXR1cm4gZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmNvbXBhcmF0b3I7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUuY29tcGFyYXRvcjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXREZWZhdWx0RGF0ZSgpIHtcbiAgICAvLyBTZXQgdGhlIGFwcHJvcHJpYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0IHR5cGU9ZGF0ZSwgaS5lLiBcIllZWVktTU0tRERcIlxuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHsgZGF0ZTogdW5kZWZpbmVkLCBjb21wYXJhdG9yOiBcIlwiIH0sXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmRhdGUpIHtcbiAgICAgIHJldHVybiBkYXRlUGFyc2VyKGZpbHRlclN0YXRlLmZpbHRlclZhbC5kYXRlKTtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuZGF0ZSkge1xuICAgICAgcmV0dXJuIGRhdGVQYXJzZXIobmV3IERhdGUoZGVmYXVsdFZhbHVlLmRhdGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55LCBjb21wYXJhdG9yOiBhbnksIGlzSW5pdGlhbD86IGFueSkge1xuICAgIC8vIGlmICghY29tcGFyYXRvciB8fCAhdmFsdWUpIHtcbiAgICAvLyAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBjb25zdCB7IGNvbHVtbiwgb25GaWx0ZXIsIGRlbGF5ID0gMCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBleGVjdXRlID0gKCkgPT4ge1xuICAgICAgLy8gSW5jb21pbmcgdmFsdWUgc2hvdWxkIGFsd2F5cyBiZSBhIHN0cmluZywgYW5kIHRoZSBkZWZhdWx0RGF0ZVxuICAgICAgLy8gYWJvdmUgaXMgaW1wbGVtZW50ZWQgYXMgYW4gZW1wdHkgc3RyaW5nLCBzbyB3ZSBjYW4ganVzdCBjaGVjayBmb3IgdGhhdC5cbiAgICAgIC8vIGluc3RlYWQgb2YgcGFyc2luZyBhbiBpbnZhbGlkIERhdGUuIFRoZSBmaWx0ZXIgZnVuY3Rpb24gd2lsbCBpbnRlcnByZXRcbiAgICAgIC8vIG51bGwgYXMgYW4gZW1wdHkgZGF0ZSBmaWVsZFxuICAgICAgY29uc3QgZGF0ZSA9IHZhbHVlID09PSBcIlwiID8gbnVsbCA6IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLkRBVEUsIGlzSW5pdGlhbCkoeyBkYXRlLCBjb21wYXJhdG9yIH0pO1xuICAgIH07XG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZXhlY3V0ZSgpO1xuICAgICAgfSwgZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGVjdXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkID0gbnVsbCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgY29sdW1uOiB7IGRhdGFGaWVsZCwgdGV4dCB9LFxuICAgICAgc3R5bGUsXG4gICAgICBjb21wYXJhdG9yU3R5bGUsXG4gICAgICBkYXRlU3R5bGUsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgY29tcGFyYXRvckNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBkYXRlQ2xhc3NOYW1lID0gXCJcIixcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGNvbXBhcmF0b3JFbG1JZCA9IGBkYXRlLWZpbHRlci1jb21wYXJhdG9yLSR7ZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIGNvbnN0IGlucHV0RWxtSWQgPSBgZGF0ZS1maWx0ZXItY29sdW1uLSR7ZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJ9YDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICBjbGFzc05hbWU9e2BmaWx0ZXIgZGF0ZS1maWx0ZXIgJHtjbGFzc05hbWV9YH1cbiAgICAgICAgc3R5bGU9e3N0eWxlIGFzIGFueX1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXRlLWZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIiBodG1sRm9yPXtjb21wYXJhdG9yRWxtSWR9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5GaWx0ZXIgY29tcGFyYXRvcjwvc3Bhbj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMuZGF0ZUZpbHRlckNvbXBhcmF0b3IgPSBuOyB9fVxuICAgICAgICAgICAgaWQ9e2NvbXBhcmF0b3JFbG1JZH1cbiAgICAgICAgICAgIHN0eWxlPXtjb21wYXJhdG9yU3R5bGUgYXMgYW55fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgZGF0ZS1maWx0ZXItY29tcGFyYXRvciBmb3JtLWNvbnRyb2wgJHtjb21wYXJhdG9yQ2xhc3NOYW1lfWB9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZUNvbXBhcmF0b3J9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdENvbXBhcmF0b3IoKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF0ZS1maWx0ZXItY29tcGFyYXRvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKX1cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIGh0bWxGb3I9e2lucHV0RWxtSWR9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5FbnRlciAke3RleHR9PC9zcGFuPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLmlucHV0RGF0ZSA9IG47IH19XG4gICAgICAgICAgICBpZD17aW5wdXRFbG1JZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGZpbHRlciBkYXRlLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgJHtkYXRlQ2xhc3NOYW1lfWB9XG4gICAgICAgICAgICBzdHlsZT17ZGF0ZVN0eWxlIGFzIGFueX1cbiAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlRGF0ZX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlciB8fCBgRW50ZXIgJHt0ZXh0fS4uLmB9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdERhdGUoKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF0ZS1maWx0ZXItaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbi8vIERhdGVGaWx0ZXIucHJvcFR5cGVzID0ge1xuLy8gICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgY29sdW1uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4vLyAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBmaWx0ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4vLyAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnNoYXBlKHtcbi8vICAgICBkYXRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0XSksXG4vLyAgICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFsuLi5sZWdhbENvbXBhcmF0b3JzLCAnJ10pXG4vLyAgIH0pLFxuLy8gICAvKiBlc2xpbnQgY29uc2lzdGVudC1yZXR1cm46IDAgKi9cbi8vICAgY29tcGFyYXRvcnM6IChwcm9wczogYW55LCBwcm9wTmFtZTogYW55KSA9PiB7XG4vLyAgICAgaWYgKCFwcm9wc1twcm9wTmFtZV0pIHtcbi8vICAgICAgIHJldHVybjtcbi8vICAgICB9XG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wc1twcm9wTmFtZV0ubGVuZ3RoOyBpICs9IDEpIHtcbi8vICAgICAgIGxldCBjb21wYXJhdG9ySXNWYWxpZCA9IGZhbHNlO1xuLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZWdhbENvbXBhcmF0b3JzLmxlbmd0aDsgaiArPSAxKSB7XG4vLyAgICAgICAgIGlmIChsZWdhbENvbXBhcmF0b3JzW2pdID09PSBwcm9wc1twcm9wTmFtZV1baV0gfHwgcHJvcHNbcHJvcE5hbWVdW2ldID09PSAnJykge1xuLy8gICAgICAgICAgIGNvbXBhcmF0b3JJc1ZhbGlkID0gdHJ1ZTtcbi8vICAgICAgICAgICBicmVhaztcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgICAgaWYgKCFjb21wYXJhdG9ySXNWYWxpZCkge1xuLy8gICAgICAgICByZXR1cm4gbmV3IEVycm9yKGBEYXRlIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZC5cbi8vICAgICAgICAgICBVc2Ugb25seSAke2xlZ2FsQ29tcGFyYXRvcnN9YCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICB9LFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjb21wYXJhdG9yU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGRhdGVTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBjb21wYXJhdG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBkYXRlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBnZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jXG4vLyB9O1xuXG4vLyBEYXRlRmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgZGVsYXk6IDAsXG4vLyAgIGRlZmF1bHRWYWx1ZToge1xuLy8gICAgIGRhdGU6IHVuZGVmaW5lZCxcbi8vICAgICBjb21wYXJhdG9yOiAnJ1xuLy8gICB9LFxuLy8gICBmaWx0ZXJTdGF0ZToge30sXG4vLyAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb246IGZhbHNlLFxuLy8gICBjb21wYXJhdG9yczogbGVnYWxDb21wYXJhdG9ycyxcbi8vICAgcGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbi8vICAgc3R5bGU6IHVuZGVmaW5lZCxcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgY29tcGFyYXRvclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNvbXBhcmF0b3JDbGFzc05hbWU6ICcnLFxuLy8gICBkYXRlU3R5bGU6IHVuZGVmaW5lZCxcbi8vICAgZGF0ZUNsYXNzTmFtZTogJycsXG4vLyAgIGlkOiBudWxsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlRmlsdGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9uczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uLy4uXCIpO1xudmFyIEVRID0gXCI9XCI7XG52YXIgTkUgPSBcIiE9XCI7XG52YXIgR1QgPSBcIj5cIjtcbnZhciBHRSA9IFwiPj1cIjtcbnZhciBMVCA9IFwiPFwiO1xudmFyIExFID0gXCI8PVwiO1xudmFyIGxlZ2FsQ29tcGFyYXRvcnMgPSBbRVEsIE5FLCBHVCwgR0UsIExULCBMRV07XG52YXIgTnVtYmVyRmlsdGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gTnVtYmVyRmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOdW1iZXJGaWx0ZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBOdW1iZXJGaWx0ZXIsIFtwcm9wc10pO1xuICAgIF90aGlzLmNvbXBhcmF0b3JzID0gcHJvcHMuY29tcGFyYXRvcnMgfHwgbGVnYWxDb21wYXJhdG9ycztcbiAgICBfdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgaXNTZWxlY3RlZCA9IHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMub3B0aW9ucyAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICBpc1NlbGVjdGVkID0gcHJvcHMub3B0aW9ucy5pbmRleE9mKHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIpID4gLTE7XG4gICAgfVxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZFxuICAgIH07XG4gICAgX3RoaXMub25DaGFuZ2VOdW1iZXIgPSBfdGhpcy5vbkNoYW5nZU51bWJlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZU51bWJlclNldCA9IF90aGlzLm9uQ2hhbmdlTnVtYmVyU2V0LmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlQ29tcGFyYXRvciA9IF90aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKE51bWJlckZpbHRlciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhOdW1iZXJGaWx0ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wcy5jb2x1bW4sXG4gICAgICAgIG9uRmlsdGVyID0gX3RoaXMkcHJvcHMub25GaWx0ZXIsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzLmdldEZpbHRlcjtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID09PSBcIlwiID8gRVEgOiB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgICB2YXIgbnVtYmVyID0gdGhpcy5udW1iZXJGaWx0ZXIudmFsdWU7XG4gICAgICBpZiAoY29tcGFyYXRvciAmJiBudW1iZXIpIHtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5OVU1CRVIsIHRydWUpKHtcbiAgICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgICBnZXRGaWx0ZXIoZnVuY3Rpb24gKGZpbHRlclZhbCkge1xuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBmaWx0ZXJWYWwgIT09IFwiXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX3RoaXMyLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBmaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgICBfdGhpczIubnVtYmVyRmlsdGVyLnZhbHVlID0gZmlsdGVyVmFsLm51bWJlcjtcbiAgICAgICAgICB2YXIgZm4gPSBmaWx0ZXJWYWwubnVtYmVyO1xuICAgICAgICAgIHZhciBmYyA9IGZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICAgICAgbnVtYmVyOiBmbixcbiAgICAgICAgICAgIGNvbXBhcmF0b3I6IGZjXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZU51bWJlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZU51bWJlcihlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlbGF5ID0gX3RoaXMkcHJvcHMyLmRlbGF5LFxuICAgICAgICBkZWxheSA9IF90aGlzJHByb3BzMiRkZWxheSA9PT0gdm9pZCAwID8gX18xLkZJTFRFUl9ERUxBWSA6IF90aGlzJHByb3BzMiRkZWxheSxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczIub25GaWx0ZXI7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICAgIGlmIChjb21wYXJhdG9yID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB9XG4gICAgICB2YXIgdiA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuTlVNQkVSKSh7XG4gICAgICAgICAgbnVtYmVyOiB2LFxuICAgICAgICAgIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3JcbiAgICAgICAgfSk7XG4gICAgICB9LCBkZWxheSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2hhbmdlTnVtYmVyU2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlTnVtYmVyU2V0KGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczMuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzMy5vbkZpbHRlcjtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgICAgdmFyIHZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIlxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICAvLyBpZiAoY29tcGFyYXRvciA9PT0gJycpIHtcbiAgICAgIC8vICAgcmV0dXJuO1xuICAgICAgLy8gfVxuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IHZhbHVlLFxuICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25DaGFuZ2VDb21wYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlQ29tcGFyYXRvcihlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM0LmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczQub25GaWx0ZXI7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAvLyBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAvLyAgIHJldHVybjtcbiAgICAgIC8vIH1cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5OVU1CRVIpKHtcbiAgICAgICAgbnVtYmVyOiB2YWx1ZSxcbiAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvclxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRDb21wYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHRDb21wYXJhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzNSRkZWZhdWx0ViA9IF90aGlzJHByb3BzNS5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzNSRkZWZhdWx0ViA9PT0gdm9pZCAwID8ge1xuICAgICAgICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbXBhcmF0b3I6IFwiXCJcbiAgICAgICAgfSA6IF90aGlzJHByb3BzNSRkZWZhdWx0VixcbiAgICAgICAgX3RoaXMkcHJvcHM1JGZpbHRlclN0ID0gX3RoaXMkcHJvcHM1LmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzNSRmaWx0ZXJTdCA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczUkZmlsdGVyU3Q7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHM2JGRlZmF1bHRWID0gX3RoaXMkcHJvcHM2LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM2JGRlZmF1bHRWID09PSB2b2lkIDAgPyB7XG4gICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHM2JGRlZmF1bHRWLFxuICAgICAgICBfdGhpcyRwcm9wczYkZmlsdGVyU3QgPSBfdGhpcyRwcm9wczYuZmlsdGVyU3RhdGUsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHM2JGZpbHRlclN0ID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzNiRmaWx0ZXJTdDtcbiAgICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbC5udW1iZXI7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5udW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5udW1iZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q29tcGFyYXRvck9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIF90aGlzJHByb3BzJHdpdGhvdXRFbSA9IHRoaXMucHJvcHMud2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbixcbiAgICAgICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbiA9IF90aGlzJHByb3BzJHdpdGhvdXRFbSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyR3aXRob3V0RW07XG4gICAgICBpZiAoIXdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24pIHtcbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogXCItMVwiXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb21wYXJhdG9ycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBpLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbXBhcmF0b3JzW2ldXG4gICAgICAgIH0sIHRoaXMuY29tcGFyYXRvcnNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25UYWdzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXROdW1iZXJPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE51bWJlck9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczcub3B0aW9ucyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM3LmNvbHVtbixcbiAgICAgICAgX3RoaXMkcHJvcHM3JHdpdGhvdXRFID0gX3RoaXMkcHJvcHM3LndpdGhvdXRFbXB0eU51bWJlck9wdGlvbixcbiAgICAgICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uID0gX3RoaXMkcHJvcHM3JHdpdGhvdXRFID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzNyR3aXRob3V0RTtcbiAgICAgIGlmICghd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IFwiLTFcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgICB9LCB0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8IFwiU2VsZWN0IFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIikpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBpLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zW2ldXG4gICAgICAgIH0sIG9wdGlvbnNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25UYWdzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhcHBseUZpbHRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhcHBseUZpbHRlcihmaWx0ZXJPYmopIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczguY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzOC5vbkZpbHRlcjtcbiAgICAgIHZhciBudW1iZXIgPSBmaWx0ZXJPYmoubnVtYmVyLFxuICAgICAgICBjb21wYXJhdG9yID0gZmlsdGVyT2JqLmNvbXBhcmF0b3I7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiBudW1iZXIgIT09IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID0gY29tcGFyYXRvcjtcbiAgICAgIHRoaXMubnVtYmVyRmlsdGVyLnZhbHVlID0gbnVtYmVyO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvclxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczkuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzOS5vbkZpbHRlcixcbiAgICAgICAgX3RoaXMkcHJvcHM5JGRlZmF1bHRWID0gX3RoaXMkcHJvcHM5LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM5JGRlZmF1bHRWID09PSB2b2lkIDAgPyB7XG4gICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHM5JGRlZmF1bHRWO1xuICAgICAgdmFyIHZhbHVlID0gZGVmYXVsdFZhbHVlID8gZGVmYXVsdFZhbHVlLm51bWJlciA6IFwiXCI7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGRlZmF1bHRWYWx1ZSA/IGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yIDogXCJcIjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IGNvbXBhcmF0b3I7XG4gICAgICB0aGlzLm51bWJlckZpbHRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IHZhbHVlLFxuICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIGlzU2VsZWN0ZWQgPSB0aGlzLnN0YXRlLmlzU2VsZWN0ZWQ7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMwID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMwJGlkID0gX3RoaXMkcHJvcHMwLmlkLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzMCRpZCA9PT0gdm9pZCAwID8gbnVsbCA6IF90aGlzJHByb3BzMCRpZCxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMwLmNvbHVtbixcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMC5vcHRpb25zLFxuICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzMC5zdHlsZSxcbiAgICAgICAgX3RoaXMkcHJvcHMwJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMwLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMwJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMwJGNsYXNzTmFtLFxuICAgICAgICBudW1iZXJTdHlsZSA9IF90aGlzJHByb3BzMC5udW1iZXJTdHlsZSxcbiAgICAgICAgX3RoaXMkcHJvcHMwJG51bWJlckNsID0gX3RoaXMkcHJvcHMwLm51bWJlckNsYXNzTmFtZSxcbiAgICAgICAgbnVtYmVyQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMwJG51bWJlckNsID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMwJG51bWJlckNsLFxuICAgICAgICBjb21wYXJhdG9yU3R5bGUgPSBfdGhpcyRwcm9wczAuY29tcGFyYXRvclN0eWxlLFxuICAgICAgICBfdGhpcyRwcm9wczAkY29tcGFyYXQgPSBfdGhpcyRwcm9wczAuY29tcGFyYXRvckNsYXNzTmFtZSxcbiAgICAgICAgY29tcGFyYXRvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzMCRjb21wYXJhdCA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMCRjb21wYXJhdCxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczAucGxhY2Vob2xkZXI7XG4gICAgICB2YXIgc2VsZWN0Q2xhc3MgPSBcIlxcbiAgICAgIHNlbGVjdC1maWx0ZXJcXG4gICAgICBudW1iZXItZmlsdGVyLWlucHV0XFxuICAgICAgZm9ybS1jb250cm9sXFxuICAgICAgXCIuY29uY2F0KG51bWJlckNsYXNzTmFtZSwgXCJcXG4gICAgICBcIikuY29uY2F0KCFpc1NlbGVjdGVkID8gXCJwbGFjZWhvbGRlci1zZWxlY3RlZFwiIDogXCJcIiwgXCJcXG4gICAgXCIpO1xuICAgICAgdmFyIGNvbXBhcmF0b3JFbG1JZCA9IFwibnVtYmVyLWZpbHRlci1jb21wYXJhdG9yLVwiLmNvbmNhdChjb2x1bW4uZGF0YUZpZWxkKS5jb25jYXQoaWQgPyBcIi1cIi5jb25jYXQoaWQpIDogXCJcIik7XG4gICAgICB2YXIgaW5wdXRFbG1JZCA9IFwibnVtYmVyLWZpbHRlci1jb2x1bW4tXCIuY29uY2F0KGNvbHVtbi5kYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZTogXCJmaWx0ZXIgbnVtYmVyLWZpbHRlciBcIi5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtYmVyLWZpbHRlclwiXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGNvbXBhcmF0b3JFbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkZpbHRlciBjb21wYXJhdG9yXCIpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yID0gbjtcbiAgICAgICAgfSxcbiAgICAgICAgc3R5bGU6IGNvbXBhcmF0b3JTdHlsZSxcbiAgICAgICAgaWQ6IGNvbXBhcmF0b3JFbG1JZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcIm51bWJlci1maWx0ZXItY29tcGFyYXRvciBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KGNvbXBhcmF0b3JDbGFzc05hbWUpLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0Q29tcGFyYXRvcigpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtYmVyLWZpbHRlci1jb21wYXJhdG9yXCJcbiAgICAgIH0sIHRoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSkpLCBvcHRpb25zID8gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlci1sYWJlbFwiLFxuICAgICAgICBodG1sRm9yOiBpbnB1dEVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiU2VsZWN0IFwiLmNvbmNhdChjb2x1bW4udGV4dCkpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5udW1iZXJGaWx0ZXIgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgc3R5bGU6IG51bWJlclN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IHNlbGVjdENsYXNzLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZU51bWJlclNldCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmdldERlZmF1bHRWYWx1ZSgpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtYmVyLWZpbHRlci1zZWxlY3RcIlxuICAgICAgfSwgdGhpcy5nZXROdW1iZXJPcHRpb25zKCkpKSA6IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7XG4gICAgICAgIGh0bWxGb3I6IGlucHV0RWxtSWRcbiAgICAgIH0sIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInNyLW9ubHlcIlxuICAgICAgfSwgXCJFbnRlciBcIi5jb25jYXQoY29sdW1uLnRleHQpKSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5udW1iZXJGaWx0ZXIgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgc3R5bGU6IG51bWJlclN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IFwibnVtYmVyLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KG51bWJlckNsYXNzTmFtZSksXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciB8fCBcIkVudGVyIFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIiksXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlTnVtYmVyLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCksXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJudW1iZXItZmlsdGVyLWlucHV0XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTsgLy8gTnVtYmVyRmlsdGVyLnByb3BUeXBlcyA9IHtcbi8vICAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNvbHVtbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuLy8gICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZmlsdGVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpLFxuLy8gICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zaGFwZSh7XG4vLyAgICAgbnVtYmVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4vLyAgICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKFsuLi5sZWdhbENvbXBhcmF0b3JzLCBcIlwiXSksXG4vLyAgIH0pLFxuLy8gICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbi8vICAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiAwICovXG4vLyAgIGNvbXBhcmF0b3JzOiAocHJvcHM6IGFueSwgcHJvcE5hbWU6IGFueSkgPT4ge1xuLy8gICAgIGlmICghcHJvcHNbcHJvcE5hbWVdKSB7XG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHNbcHJvcE5hbWVdLmxlbmd0aDsgaSArPSAxKSB7XG4vLyAgICAgICBsZXQgY29tcGFyYXRvcklzVmFsaWQgPSBmYWxzZTtcbi8vICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVnYWxDb21wYXJhdG9ycy5sZW5ndGg7IGogKz0gMSkge1xuLy8gICAgICAgICBpZiAoXG4vLyAgICAgICAgICAgbGVnYWxDb21wYXJhdG9yc1tqXSA9PT0gcHJvcHNbcHJvcE5hbWVdW2ldIHx8XG4vLyAgICAgICAgICAgcHJvcHNbcHJvcE5hbWVdW2ldID09PSBcIlwiXG4vLyAgICAgICAgICkge1xuLy8gICAgICAgICAgIGNvbXBhcmF0b3JJc1ZhbGlkID0gdHJ1ZTtcbi8vICAgICAgICAgICBicmVhaztcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgICAgaWYgKCFjb21wYXJhdG9ySXNWYWxpZCkge1xuLy8gICAgICAgICByZXR1cm4gbmV3IEVycm9yKGBOdW1iZXIgY29tcGFyYXRvciBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkLlxuLy8gICAgICAgICAgIFVzZSBvbmx5ICR7bGVnYWxDb21wYXJhdG9yc31gKTtcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH0sXG4vLyAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbi8vICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgY29tcGFyYXRvclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjb21wYXJhdG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBudW1iZXJTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgbnVtYmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBnZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLFxuLy8gfTtcbi8vIE51bWJlckZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlbGF5OiBGSUxURVJfREVMQVksXG4vLyAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbi8vICAgZGVmYXVsdFZhbHVlOiB7XG4vLyAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4vLyAgICAgY29tcGFyYXRvcjogXCJcIixcbi8vICAgfSxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uOiBmYWxzZSxcbi8vICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uOiBmYWxzZSxcbi8vICAgY29tcGFyYXRvcnM6IGxlZ2FsQ29tcGFyYXRvcnMsXG4vLyAgIHBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4vLyAgIHN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgY29tcGFyYXRvclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNvbXBhcmF0b3JDbGFzc05hbWU6IFwiXCIsXG4vLyAgIG51bWJlclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIG51bWJlckNsYXNzTmFtZTogXCJcIixcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBOdW1iZXJGaWx0ZXI7IiwiLyogZXNsaW50IGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9uczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZJTFRFUl9ERUxBWSwgRklMVEVSX1RZUEVTLCBOdW1iZXJGaWx0ZXJQcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5jb25zdCBFUSA9IFwiPVwiO1xuY29uc3QgTkUgPSBcIiE9XCI7XG5jb25zdCBHVCA9IFwiPlwiO1xuY29uc3QgR0UgPSBcIj49XCI7XG5jb25zdCBMVCA9IFwiPFwiO1xuY29uc3QgTEUgPSBcIjw9XCI7XG5cbmNvbnN0IGxlZ2FsQ29tcGFyYXRvcnMgPSBbRVEsIE5FLCBHVCwgR0UsIExULCBMRV07XG5cbmludGVyZmFjZSBOdW1iZXJGaWx0ZXJTdGF0ZSB7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbmNsYXNzIE51bWJlckZpbHRlciBleHRlbmRzIENvbXBvbmVudDxOdW1iZXJGaWx0ZXJQcm9wcywgTnVtYmVyRmlsdGVyU3RhdGU+IHtcbiAgY29tcGFyYXRvcnM6IGFueVtdO1xuICBudW1iZXJGaWx0ZXI6IGFueTtcbiAgbnVtYmVyRmlsdGVyQ29tcGFyYXRvcjogYW55O1xuICB0aW1lb3V0OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IE51bWJlckZpbHRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29tcGFyYXRvcnMgPSBwcm9wcy5jb21wYXJhdG9ycyB8fCBsZWdhbENvbXBhcmF0b3JzO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgbGV0IGlzU2VsZWN0ZWQgPVxuICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMub3B0aW9ucyAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICBpc1NlbGVjdGVkID0gcHJvcHMub3B0aW9ucy5pbmRleE9mKHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIpID4gLTE7XG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSB7IGlzU2VsZWN0ZWQgfTtcbiAgICB0aGlzLm9uQ2hhbmdlTnVtYmVyID0gdGhpcy5vbkNoYW5nZU51bWJlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2VOdW1iZXJTZXQgPSB0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IgPSB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyLCBnZXRGaWx0ZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29tcGFyYXRvciA9XG4gICAgICB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPT09IFwiXCJcbiAgICAgICAgPyBFUVxuICAgICAgICA6IHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICBjb25zdCBudW1iZXIgPSB0aGlzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICBpZiAoY29tcGFyYXRvciAmJiBudW1iZXIpIHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUiwgdHJ1ZSkoeyBudW1iZXIsIGNvbXBhcmF0b3IgfSk7XG4gICAgfVxuXG4gICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgIGdldEZpbHRlcigoZmlsdGVyVmFsOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiBmaWx0ZXJWYWwgIT09IFwiXCIgfSkpO1xuICAgICAgICB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBmaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgdGhpcy5udW1iZXJGaWx0ZXIudmFsdWUgPSBmaWx0ZXJWYWwubnVtYmVyO1xuXG4gICAgICAgIGNvbnN0IGZuID0gZmlsdGVyVmFsLm51bWJlcjtcbiAgICAgICAgY29uc3QgZmMgPSBmaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUikoeyBudW1iZXI6IGZuLCBjb21wYXJhdG9yOiBmYyB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgb25DaGFuZ2VOdW1iZXIoZTogYW55KSB7XG4gICAgY29uc3QgeyBkZWxheSA9IEZJTFRFUl9ERUxBWSwgY29sdW1uLCBvbkZpbHRlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGlmIChjb21wYXJhdG9yID09PSBcIlwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgICBjb25zdCB2ID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5OVU1CRVIpKHsgbnVtYmVyOiB2LCBjb21wYXJhdG9yIH0pO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIG9uQ2hhbmdlTnVtYmVyU2V0KGU6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCBvbkZpbHRlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGUudGFyZ2V0O1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCIgfSkpO1xuICAgIC8vIGlmIChjb21wYXJhdG9yID09PSAnJykge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUikoeyBudW1iZXI6IHZhbHVlLCBjb21wYXJhdG9yIH0pO1xuICB9XG5cbiAgb25DaGFuZ2VDb21wYXJhdG9yKGU6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCBvbkZpbHRlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubnVtYmVyRmlsdGVyLnZhbHVlO1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAvLyBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuTlVNQkVSKSh7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSk7XG4gIH1cblxuICBnZXREZWZhdWx0Q29tcGFyYXRvcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7IG51bWJlcjogdW5kZWZpbmVkLCBjb21wYXJhdG9yOiBcIlwiIH0sXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7IG51bWJlcjogdW5kZWZpbmVkLCBjb21wYXJhdG9yOiBcIlwiIH0sXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwubnVtYmVyO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5udW1iZXIpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUubnVtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldENvbXBhcmF0b3JPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBjb25zdCB7IHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24gPSBmYWxzZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIXdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24pIHtcbiAgICAgIG9wdGlvblRhZ3MucHVzaCg8b3B0aW9uIGtleT1cIi0xXCIgLz4pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29tcGFyYXRvcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIG9wdGlvblRhZ3MucHVzaChcbiAgICAgICAgPG9wdGlvbiBrZXk9e2l9IHZhbHVlPXt0aGlzLmNvbXBhcmF0b3JzW2ldfT5cbiAgICAgICAgICB7dGhpcy5jb21wYXJhdG9yc1tpXX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIGdldE51bWJlck9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9uVGFncyA9IFtdO1xuICAgIGNvbnN0IHsgb3B0aW9ucywgY29sdW1uLCB3aXRob3V0RW1wdHlOdW1iZXJPcHRpb24gPSBmYWxzZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIXdpdGhvdXRFbXB0eU51bWJlck9wdGlvbikge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT1cIi0xXCIgdmFsdWU9XCJcIj5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wbGFjZWhvbGRlciB8fCBgU2VsZWN0ICR7Y29sdW1uLnRleHR9Li4uYH1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IChvcHRpb25zIGFzIG51bWJlcltdKS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT17aX0gdmFsdWU9eyhvcHRpb25zIGFzIG51bWJlcltdKVtpXX0+XG4gICAgICAgICAgeyhvcHRpb25zIGFzIG51bWJlcltdKVtpXX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKGZpbHRlck9iajogYW55KSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgbnVtYmVyLCBjb21wYXJhdG9yIH0gPSBmaWx0ZXJPYmo7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiBudW1iZXIgIT09IFwiXCIgfSkpO1xuICAgIHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IGNvbXBhcmF0b3I7XG4gICAgdGhpcy5udW1iZXJGaWx0ZXIudmFsdWUgPSBudW1iZXI7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5OVU1CRVIpKHsgbnVtYmVyLCBjb21wYXJhdG9yIH0pO1xuICB9XG5cbiAgY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb2x1bW4sXG4gICAgICBvbkZpbHRlcixcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHsgbnVtYmVyOiB1bmRlZmluZWQsIGNvbXBhcmF0b3I6IFwiXCIgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSA/IGRlZmF1bHRWYWx1ZS5udW1iZXIgOiBcIlwiO1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSBkZWZhdWx0VmFsdWUgPyBkZWZhdWx0VmFsdWUuY29tcGFyYXRvciA6IFwiXCI7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIiB9KSk7XG4gICAgdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID0gY29tcGFyYXRvcjtcbiAgICB0aGlzLm51bWJlckZpbHRlci52YWx1ZSA9IHZhbHVlO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuTlVNQkVSKSh7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc1NlbGVjdGVkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHtcbiAgICAgIGlkID0gbnVsbCxcbiAgICAgIGNvbHVtbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzdHlsZSxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBudW1iZXJTdHlsZSxcbiAgICAgIG51bWJlckNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBjb21wYXJhdG9yU3R5bGUsXG4gICAgICBjb21wYXJhdG9yQ2xhc3NOYW1lID0gXCJcIixcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gYFxuICAgICAgc2VsZWN0LWZpbHRlclxuICAgICAgbnVtYmVyLWZpbHRlci1pbnB1dFxuICAgICAgZm9ybS1jb250cm9sXG4gICAgICAke251bWJlckNsYXNzTmFtZX1cbiAgICAgICR7IWlzU2VsZWN0ZWQgPyBcInBsYWNlaG9sZGVyLXNlbGVjdGVkXCIgOiBcIlwifVxuICAgIGA7XG5cbiAgICBjb25zdCBjb21wYXJhdG9yRWxtSWQgPSBgbnVtYmVyLWZpbHRlci1jb21wYXJhdG9yLSR7Y29sdW1uLmRhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwiXG4gICAgICB9YDtcbiAgICBjb25zdCBpbnB1dEVsbUlkID0gYG51bWJlci1maWx0ZXItY29sdW1uLSR7Y29sdW1uLmRhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwiXG4gICAgICB9YDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICBjbGFzc05hbWU9e2BmaWx0ZXIgbnVtYmVyLWZpbHRlciAke2NsYXNzTmFtZX1gfVxuICAgICAgICBzdHlsZT17c3R5bGUgYXMgYW55fVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm51bWJlci1maWx0ZXJcIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmlsdGVyLWxhYmVsXCIgaHRtbEZvcj17Y29tcGFyYXRvckVsbUlkfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+RmlsdGVyIGNvbXBhcmF0b3I8L3NwYW4+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IgPSBuOyB9fVxuICAgICAgICAgICAgc3R5bGU9e2NvbXBhcmF0b3JTdHlsZSBhcyBhbnl9XG4gICAgICAgICAgICBpZD17Y29tcGFyYXRvckVsbUlkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgbnVtYmVyLWZpbHRlci1jb21wYXJhdG9yIGZvcm0tY29udHJvbCAke2NvbXBhcmF0b3JDbGFzc05hbWV9YH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvcn1cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5nZXREZWZhdWx0Q29tcGFyYXRvcigpfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJudW1iZXItZmlsdGVyLWNvbXBhcmF0b3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLmdldENvbXBhcmF0b3JPcHRpb25zKCl9XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIHtvcHRpb25zID8gKFxuICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIiBodG1sRm9yPXtpbnB1dEVsbUlkfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj57YFNlbGVjdCAke2NvbHVtbi50ZXh0fWB9PC9zcGFuPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMubnVtYmVyRmlsdGVyID0gbjsgfX1cbiAgICAgICAgICAgICAgaWQ9e2lucHV0RWxtSWR9XG4gICAgICAgICAgICAgIHN0eWxlPXtudW1iZXJTdHlsZSBhcyBhbnl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c2VsZWN0Q2xhc3N9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0fVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdFZhbHVlKCl9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibnVtYmVyLWZpbHRlci1zZWxlY3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dGhpcy5nZXROdW1iZXJPcHRpb25zKCl9XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxsYWJlbCBodG1sRm9yPXtpbnB1dEVsbUlkfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj57YEVudGVyICR7Y29sdW1uLnRleHR9YH08L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLm51bWJlckZpbHRlciA9IG47IH19XG4gICAgICAgICAgICAgIGlkPXtpbnB1dEVsbUlkfVxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgc3R5bGU9e251bWJlclN0eWxlIGFzIGFueX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgbnVtYmVyLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgJHtudW1iZXJDbGFzc05hbWV9YH1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyIHx8IGBFbnRlciAke2NvbHVtbi50ZXh0fS4uLmB9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlTnVtYmVyfVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuZ2V0RGVmYXVsdFZhbHVlKCl9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibnVtYmVyLWZpbHRlci1pbnB1dFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbi8vIE51bWJlckZpbHRlci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjb2x1bW46IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbi8vICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGZpbHRlclN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyKSxcbi8vICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc2hhcGUoe1xuLy8gICAgIG51bWJlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuLy8gICAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihbLi4ubGVnYWxDb21wYXJhdG9ycywgXCJcIl0pLFxuLy8gICB9KSxcbi8vICAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4vLyAgIC8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogMCAqL1xuLy8gICBjb21wYXJhdG9yczogKHByb3BzOiBhbnksIHByb3BOYW1lOiBhbnkpID0+IHtcbi8vICAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSkge1xuLy8gICAgICAgcmV0dXJuO1xuLy8gICAgIH1cbi8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzW3Byb3BOYW1lXS5sZW5ndGg7IGkgKz0gMSkge1xuLy8gICAgICAgbGV0IGNvbXBhcmF0b3JJc1ZhbGlkID0gZmFsc2U7XG4vLyAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlZ2FsQ29tcGFyYXRvcnMubGVuZ3RoOyBqICs9IDEpIHtcbi8vICAgICAgICAgaWYgKFxuLy8gICAgICAgICAgIGxlZ2FsQ29tcGFyYXRvcnNbal0gPT09IHByb3BzW3Byb3BOYW1lXVtpXSB8fFxuLy8gICAgICAgICAgIHByb3BzW3Byb3BOYW1lXVtpXSA9PT0gXCJcIlxuLy8gICAgICAgICApIHtcbi8vICAgICAgICAgICBjb21wYXJhdG9ySXNWYWxpZCA9IHRydWU7XG4vLyAgICAgICAgICAgYnJlYWs7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICAgIGlmICghY29tcGFyYXRvcklzVmFsaWQpIHtcbi8vICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTnVtYmVyIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZC5cbi8vICAgICAgICAgICBVc2Ugb25seSAke2xlZ2FsQ29tcGFyYXRvcnN9YCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICB9LFxuLy8gICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHdpdGhvdXRFbXB0eU51bWJlck9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIGNvbXBhcmF0b3JTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgY29tcGFyYXRvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgbnVtYmVyU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4vLyAgIG51bWJlckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgZ2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbi8vIH07XG5cbi8vIE51bWJlckZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGRlbGF5OiBGSUxURVJfREVMQVksXG4vLyAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbi8vICAgZGVmYXVsdFZhbHVlOiB7XG4vLyAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4vLyAgICAgY29tcGFyYXRvcjogXCJcIixcbi8vICAgfSxcbi8vICAgZmlsdGVyU3RhdGU6IHt9LFxuLy8gICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uOiBmYWxzZSxcbi8vICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uOiBmYWxzZSxcbi8vICAgY29tcGFyYXRvcnM6IGxlZ2FsQ29tcGFyYXRvcnMsXG4vLyAgIHBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4vLyAgIHN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vICAgY29tcGFyYXRvclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIGNvbXBhcmF0b3JDbGFzc05hbWU6IFwiXCIsXG4vLyAgIG51bWJlclN0eWxlOiB1bmRlZmluZWQsXG4vLyAgIG51bWJlckNsYXNzTmFtZTogXCJcIixcbi8vICAgaWQ6IG51bGwsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBOdW1iZXJGaWx0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjg0KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX2RlZmluZVByb3BlcnRpZXMiLCJlIiwiciIsInQiLCJsZW5ndGgiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiaSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl90b1ByaW1pdGl2ZSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiYXBwbHkiLCJCb29sZWFuIiwidmFsdWVPZiIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiX3NldFByb3RvdHlwZU9mIiwiX19pbXBvcnREZWZhdWx0IiwibW9kIiwiX19lc01vZHVsZSIsInZhbHVlIiwicHJvcF90eXBlc18xIiwicmVhY3RfMSIsIl9fMSIsImZpbHRlcl8xIiwiXyIsImlzUmVtb3RlRmlsdGVyaW5nIiwiaGFuZGxlRmlsdGVyQ2hhbmdlIiwiRmlsdGVyQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJGaWx0ZXJQcm92aWRlciIsIl9yZWFjdF8xJGRlZmF1bHQkQ29tcCIsInByb3BzIiwiX3RoaXMiLCJhIiwibiIsIl9jbGFzc0NhbGxDaGVjayIsInRoaXMiLCJjdXJyRmlsdGVycyIsImNsZWFyRmlsdGVycyIsIm9uRmlsdGVyIiwiZG9GaWx0ZXIiLCJvbkV4dGVybmFsRmlsdGVyIiwiZGF0YSIsImlzRW1pdERhdGFDaGFuZ2UiLCJjcmVhdGUiLCJfaW5oZXJpdHMiLCJrZXlzIiwiY29sdW1uIiwiZmlsdGVyVHlwZSIsIl90aGlzMiIsImluaXRpYWxpemUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJmaWx0ZXJWYWwiLCJhc3NpZ24iLCJkYXRhRmllbGQiLCJmaWx0ZXIiLCJpc0RlZmluZWQiLCJfZmlsdGVyJHByb3BzIiwiX2ZpbHRlciRwcm9wcyRjb21wYXJhIiwiY29tcGFyYXRvciIsIkZJTFRFUl9UWVBFUyIsIlNFTEVDVCIsIkVRIiwiTElLRSIsIl9maWx0ZXIkcHJvcHMkY2FzZVNlbiIsImNhc2VTZW5zaXRpdmUiLCJjbGVhciIsImZvcmNlVXBkYXRlIiwiX3RoaXMzIiwibmV4dFByb3BzIiwibmV4dFN0YXRlIiwibmV4dENvbnRleHQiLCJpc0VxdWFsIiwiaWdub3JlRW1pdERhdGFDaGFuZ2UiLCJkYXRhQ2hhbmdlTGlzdGVuZXIiLCJjb2x1bW5zIiwicmVzdWx0IiwiZmlsdGVycyIsImFmdGVyRmlsdGVyIiwiZW1pdCIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsImNoaWxkcmVuIiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiYXJyYXkiLCJpc1JlcXVpcmVkIiwib2JqZWN0IiwiQ29uc3VtZXIiLCJfZXhjbHVkZWQiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfb3duS2V5cyIsIl9fY3JlYXRlQmluZGluZyIsIm0iLCJrIiwiazIiLCJkZXNjIiwiZ2V0IiwiX19zZXRNb2R1bGVEZWZhdWx0IiwidiIsIl9faW1wb3J0U3RhciIsImdldE93blByb3BlcnR5TmFtZXMiLCJhciIsImhhc093blByb3BlcnR5IiwiU2VsZWN0RmlsdGVyIiwiX3JlYWN0XzEkQ29tcG9uZW50Iiwib3B0aW9ucyIsImdldE9wdGlvbnMiLCJpc1NlbGVjdGVkIiwiZ2V0RGVmYXVsdFZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiX3JlZiIsImxhYmVsIiwibWFwIiwiX3JlZjIiLCJzdGF0ZSIsIl90aGlzJHByb3BzIiwiZ2V0RmlsdGVyIiwic2VsZWN0SW5wdXQiLCJzZXRTdGF0ZSIsInByZXZQcm9wcyIsIm5lZWRGaWx0ZXIiLCJfdGhpcyRwcm9wczIiLCJkZWZhdWx0VmFsdWUiLCJuZXh0T3B0aW9ucyIsImN1cnJPcHRzIiwicHJldk9wdHMiLCJfaSIsIm9wdGlvbnNFcXVhbHMiLCJfdGhpcyRwcm9wczMiLCJmaWx0ZXJTdGF0ZSIsInRhcmdldCIsIm9wdGlvblRhZ3MiLCJfdGhpcyRwcm9wczQiLCJwbGFjZWhvbGRlciIsIndpdGhvdXRFbXB0eU9wdGlvbiIsImNvbmNhdCIsInRleHQiLCJfcmVmMyIsIl90aGlzJHByb3BzNSIsImlkIiwic3R5bGUiLCJjbGFzc05hbWUiLCJyZXN0IiwiaW5kZXhPZiIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJzZWxlY3RDbGFzcyIsImVsbUlkIiwiaHRtbEZvciIsInJlZiIsIm9uQ2hhbmdlIiwib25DbGljayIsInN0b3BQcm9wYWdhdGlvbiIsInJlbmRlck9wdGlvbnMiLCJmaWx0ZXJGYWN0b3J5IiwiZmlsdGVyQnlBcnJheSIsImZpbHRlckJ5RGF0ZSIsImZpbHRlckJ5TnVtYmVyIiwiZmlsdGVyQnlUZXh0IiwiY3VzdG9tRmlsdGVyVmFsdWUiLCJfcmVmJGZpbHRlclZhbCIsInVzZXJJbnB1dCIsIl9yZWYkY29tcGFyYXRvciIsInRvU3RyaW5nIiwicm93IiwiY2VsbCIsImNlbGxTdHIiLCJpbmNsdWRlcyIsInRvTG9jYWxlVXBwZXJDYXNlIiwiX3JlZjIkZmlsdGVyVmFsIiwibnVtYmVyIiwiR1QiLCJHRSIsIkxUIiwiTEUiLCJORSIsImNvbnNvbGUiLCJlcnJvciIsIl9yZWYzJGZpbHRlclZhbCIsImRhdGUiLCJmaWx0ZXJEYXRlIiwiZ2V0VVRDRGF0ZSIsImZpbHRlck1vbnRoIiwiZ2V0VVRDTW9udGgiLCJmaWx0ZXJZZWFyIiwiZ2V0VVRDRnVsbFllYXIiLCJ2YWxpZCIsIkRhdGUiLCJ0YXJnZXREYXRlIiwidGFyZ2V0TW9udGgiLCJ0YXJnZXRZZWFyIiwiX3JlZjQiLCJyZWZpbmVkRmlsdGVyVmFsIiwieCIsInNvbWUiLCJpdGVtIiwiTVVMVElTRUxFQ1QiLCJOVU1CRVIiLCJEQVRFIiwiVEVYVCIsImZpbHRlckZuIiwiY3VycmVudFJlc3VsdCIsImZpbHRlclZhbHVlIiwiY3VzdG9tRmlsdGVyIiwiZmlsdGVyT2JqIiwiZ2V0U2VsZWN0aW9ucyIsImNvbnRhaW5lciIsInNlbGVjdGVkT3B0aW9ucyIsImZyb20iLCJzZWxlY3Rpb25zIiwidG90YWxMZW4iLCJvcHRpb24iLCJzZWxlY3RlZCIsIk11bHRpU2VsZWN0RmlsdGVyIiwic3VwZXIiLCJhcHBseUZpbHRlciIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY2xlYW5GaWx0ZXJlZCIsInJlbmRlciIsIm11bHRpcGxlIiwiZGF0ZUZpbHRlciIsIm51bWJlckZpbHRlciIsIm11bHRpU2VsZWN0RmlsdGVyIiwic2VsZWN0RmlsdGVyIiwidGV4dEZpbHRlciIsIkNvbXBhcmF0b3JOdW1iZXIiLCJGSUxURVJfREVMQVkiLCJkYXRlXzEiLCJtdWx0aXNlbGVjdF8xIiwibnVtYmVyXzEiLCJzZWxlY3RfMSIsInRleHRfMSIsImNvbnRleHRfMSIsIkZpbHRlciIsIlRleHRGaWx0ZXIiLCJoYW5kbGVDbGljayIsInRpbWVvdXQiLCJpbnB1dCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY2xlYW5UaW1lciIsIm5leHRWYWx1ZSIsInNldFRpbWVvdXQiLCJkZWxheSIsImNsZWFyVGltZW91dCIsImZpbHRlclRleHQiLCJ0eXBlIiwiX3Byb3BzJGRlZmF1bHRWYWx1ZSIsIl90aGlzJHByb3BzJGZpbHRlclN0YSIsIl90aGlzJHByb3BzJGRlZmF1bHRWYSIsIl90aGlzJHByb3BzMiR3aXRob3V0RSIsIl90aGlzJHByb3BzMiRkZWZhdWx0ViIsIl90aGlzJHByb3BzMyRpZCIsIl90aGlzJHByb3BzMyRjbGFzc05hbSIsIl90aGlzJHByb3BzMyRjb21wYXJhdCIsImdldEZpbHRlcmVkIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwiX3RoaXM0IiwiX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiIsIl90aGlzNSIsIl90aGlzJHByb3BzMiRpZCIsIl90aGlzJHByb3BzMiRjb2x1bW4iLCJsZWdhbENvbXBhcmF0b3JzIiwiZGF0ZVBhcnNlciIsImQiLCJzbGljZSIsIkRhdGVGaWx0ZXIiLCJjb21wYXJhdG9ycyIsIm9uQ2hhbmdlRGF0ZSIsIm9uQ2hhbmdlQ29tcGFyYXRvciIsImRhdGVGaWx0ZXJDb21wYXJhdG9yIiwiaW5wdXREYXRlIiwibnVsbGFibGVGaWx0ZXJWYWwiLCJfdGhpcyRwcm9wcyR3aXRob3V0RW0iLCJ3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uIiwiX3RoaXMkcHJvcHMyJGZpbHRlclN0IiwiaXNJbml0aWFsIiwiX3RoaXMkcHJvcHMzJGRlbGF5IiwiZXhlY3V0ZSIsIl90aGlzJHByb3BzNCRpZCIsIl90aGlzJHByb3BzNCRjb2x1bW4iLCJjb21wYXJhdG9yU3R5bGUiLCJkYXRlU3R5bGUiLCJfdGhpcyRwcm9wczQkY2xhc3NOYW0iLCJfdGhpcyRwcm9wczQkY29tcGFyYXQiLCJjb21wYXJhdG9yQ2xhc3NOYW1lIiwiX3RoaXMkcHJvcHM0JGRhdGVDbGFzIiwiZGF0ZUNsYXNzTmFtZSIsImNvbXBhcmF0b3JFbG1JZCIsImlucHV0RWxtSWQiLCJnZXREZWZhdWx0Q29tcGFyYXRvciIsImdldENvbXBhcmF0b3JPcHRpb25zIiwiZ2V0RGVmYXVsdERhdGUiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJlcnIiLCJFcnJvciIsIm5hbWUiLCJnZXRTaGltIiwiUmVhY3RQcm9wVHlwZXMiLCJiaWdpbnQiLCJib29sIiwiZnVuYyIsInN0cmluZyIsInN5bWJvbCIsImFueSIsImFycmF5T2YiLCJlbGVtZW50IiwiZWxlbWVudFR5cGUiLCJpbnN0YW5jZU9mIiwibm9kZSIsIm9iamVjdE9mIiwib25lT2YiLCJvbmVPZlR5cGUiLCJzaGFwZSIsImV4YWN0IiwiY2hlY2tQcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJOdW1iZXJGaWx0ZXIiLCJvbkNoYW5nZU51bWJlciIsIm9uQ2hhbmdlTnVtYmVyU2V0IiwibnVtYmVyRmlsdGVyQ29tcGFyYXRvciIsImZuIiwiZmMiLCJfdGhpcyRwcm9wczIkZGVsYXkiLCJfdGhpcyRwcm9wczUkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczUkZmlsdGVyU3QiLCJfdGhpcyRwcm9wczYiLCJfdGhpcyRwcm9wczYkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczYkZmlsdGVyU3QiLCJfdGhpcyRwcm9wczciLCJfdGhpcyRwcm9wczckd2l0aG91dEUiLCJ3aXRob3V0RW1wdHlOdW1iZXJPcHRpb24iLCJfdGhpcyRwcm9wczgiLCJfdGhpcyRwcm9wczkiLCJfdGhpcyRwcm9wczkkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczAiLCJfdGhpcyRwcm9wczAkaWQiLCJfdGhpcyRwcm9wczAkY2xhc3NOYW0iLCJudW1iZXJTdHlsZSIsIl90aGlzJHByb3BzMCRudW1iZXJDbCIsIm51bWJlckNsYXNzTmFtZSIsIl90aGlzJHByb3BzMCRjb21wYXJhdCIsImdldE51bWJlck9wdGlvbnMiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react")):"function"==typeof define&&define.amd?define(["react"],e):"object"==typeof exports?exports.ReactBootstrapTableNgFilter=e(require("react")):t.ReactBootstrapTableNgFilter=e(t.React)}(self,t=>(()=>{"use strict";var e={37(t,e,r){function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function n(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,s(o.key),o)}}function a(t,e,r){return e=l(e),function(t,e){if(e&&("object"==o(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,i()?Reflect.construct(e,r||[],l(t).constructor):e.apply(t,r))}function i(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(i=function(){return!!t})()}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function u(t,e){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},u(t,e)}function c(t,e,r){return(e=s(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function s(t){var e=function(t,e){if("object"!=o(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==o(e)?e:e+""}var p=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var f=p(r(442)),d=r(355),m=r(206);e.default=function(t,e,r){var o=f.default.createContext({}),i=function(i){function l(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,l),c(e=a(this,l,[t]),"currFilters",void 0),c(e,"clearFilters",void 0),c(e,"data",void 0),c(e,"isEmitDataChange",void 0),e.currFilters={},e.clearFilters={},e.onFilter=e.onFilter.bind(e),e.doFilter=e.doFilter.bind(e),e.onExternalFilter=e.onExternalFilter.bind(e),e.data=t.data,e.isEmitDataChange=!1,e}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&u(t,e)}(l,i),s=l,p=[{key:"componentDidMount",value:function(){e()&&Object.keys(this.currFilters).length>0&&r(this.currFilters)}},{key:"onFilter",value:function(o,n){var a=this,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return function(l){var u=Object.assign({},a.currFilters);a.clearFilters={};var s=o.dataField,p=o.filter;if(t.isDefined(l)&&""!==l&&0!==l.length){var f=p.props,m=f.comparator,h=void 0===m?n===d.FILTER_TYPES.SELECT?d.EQ:d.LIKE:m,y=f.caseSensitive,b=void 0!==y&&y;u[s]={filterVal:l,filterType:n,comparator:h,caseSensitive:b}}else delete u[s],a.clearFilters=c({},s,{clear:!0,filterVal:l});if(a.currFilters=u,e()){if(i||r(a.currFilters),void 0===p.props||void 0===p.props.forceUpdate||0==p.props.forceUpdate)return;a.forceUpdate()}a.doFilter(a.props)}}},{key:"onExternalFilter",value:function(t,e){var r=this;return function(o){r.onFilter(t,e)(o)}}},{key:"getFiltered",value:function(){return this.data}},{key:"shouldComponentUpdate",value:function(r,o,n){return e()||t.isEqual(r.data,this.data)?this.data=r.data:this.doFilter(r,this.isEmitDataChange),!0}},{key:"doFilter",value:function(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=e.dataChangeListener,n=e.data,a=e.columns,i=e.filter,l=(0,m.filters)(n,a,t)(this.currFilters,this.clearFilters);i.afterFilter&&i.afterFilter(l,this.currFilters),this.data=l,o&&!r?(this.isEmitDataChange=!0,o.emit("filterChanged",l.length)):(this.isEmitDataChange=!1,this.forceUpdate())}},{key:"render",value:function(){return f.default.createElement(o.Provider,{value:{data:this.data,onFilter:this.onFilter,onExternalFilter:this.onExternalFilter,currFilters:this.currFilters}},this.props.children)}}],p&&n(s.prototype,p),h&&n(s,h),Object.defineProperty(s,"prototype",{writable:!1}),s;var s,p,h}(f.default.Component);return{Provider:i,Consumer:o.Consumer}}},63(t,e,r){var o=["id","style","className","defaultValue","onFilter","column","options","comparator","withoutEmptyOption","caseSensitive","getFilter","filterState"];function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,o)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){f(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,d(o.key),o)}}function u(t,e,r){return e=s(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,c()?Reflect.construct(e,r||[],s(t).constructor):e.apply(t,r))}function c(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(c=function(){return!!t})()}function s(t){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},s(t)}function p(t,e){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},p(t,e)}function f(t,e,r){return(e=d(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function d(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}var m,h=Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),o=0;o<r.length;o++)"default"!==r[o]&&h(e,t,r[o]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355);var g=function(t){function e(t){var r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),f(r=u(this,e,[t]),"options",void 0),f(r,"selectInput",void 0),r.filter=r.filter.bind(r),r.options=r.getOptions(t);var o,n,a=void 0!==(o=r.options,n=r.getDefaultValue(),Array.isArray(o)?o.filter(function(t){return t.label===n}).map(function(t){return t.value})[0]:o[n]);return r.state={isSelected:a},r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&p(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.column,o=e.onFilter,n=e.getFilter,a=this.selectInput.value;a&&""!==a&&o(r,E.FILTER_TYPES.SELECT,!0)(a),n&&n(function(e){t.setState(function(){return{isSelected:""!==e}}),t.selectInput.value=e,o(r,E.FILTER_TYPES.SELECT)(e)})}},{key:"componentDidUpdate",value:function(t){var e=!1,r=this.props,o=r.column,n=r.onFilter,a=r.defaultValue,i=this.getOptions(this.props);if(a!==t.defaultValue?(this.selectInput.value=a,e=!0):function(t,e){if(Array.isArray(t)){if(t.length===e.length){for(var r=0;r<t.length;r+=1)if(t[r].value!==e[r].value||t[r].label!==e[r].label)return!1;return!0}return!1}for(var o=Object.keys(t),n=0;n<o.length;n+=1)if(t[o[n]]!==e[o[n]])return!1;return Object.keys(t).length===Object.keys(e).length}(i,this.options)||(this.options=i,e=!0),e){var l=this.selectInput.value;l&&n(o,E.FILTER_TYPES.SELECT)(l)}}},{key:"getOptions",value:function(t){return"function"==typeof t.options?t.options(t.column):t.options}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.filterState,r=t.defaultValue;return e&&void 0!==e.filterVal?e.filterVal:r}},{key:"cleanFiltered",value:function(){var t=void 0!==this.props.defaultValue?this.props.defaultValue:"";this.setState(function(){return{isSelected:""!==t}}),this.selectInput.value=t,this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(t)}},{key:"applyFilter",value:function(t){this.selectInput.value=t,this.setState(function(){return{isSelected:""!==t}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(t)}},{key:"filter",value:function(t){var e=t.target.value;this.setState(function(){return{isSelected:""!==e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.SELECT)(e)}},{key:"renderOptions",value:function(){var t=[],e=this.options,r=this.props,o=r.placeholder,n=r.column,a=r.withoutEmptyOption,i=r.defaultValue;return a||void 0!==i&&""!==i||t.push(v.default.createElement("option",{key:"-1",value:"","data-testid":"select-filter-placeholder"},o||"Select ".concat(n.text,"..."))),Array.isArray(e)?e.forEach(function(e){var r=e.value,o=e.label;return t.push(v.default.createElement("option",{key:r,value:r},o))}):Object.keys(e).forEach(function(r){return t.push(v.default.createElement("option",{key:r,value:r},e[r]))}),t}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=e.style,a=e.className,l=(e.defaultValue,e.onFilter,e.column),u=(e.options,e.comparator,e.withoutEmptyOption,e.caseSensitive,e.getFilter,e.filterState,function(t,e){if(null==t)return{};var r,o,n=function(t,e){if(null==t)return{};var r={};for(var o in t)if({}.hasOwnProperty.call(t,o)){if(-1!==e.indexOf(o))continue;r[o]=t[o]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(o=0;o<a.length;o++)r=a[o],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}(e,o)),c="filter select-filter form-control ".concat(a," ").concat(this.state.isSelected?"":"placeholder-selected"),s="select-filter-column-".concat(l.dataField).concat(r?"-".concat(r):"");return v.default.createElement("label",{className:"filter-label",htmlFor:s},v.default.createElement("span",{className:"sr-only"},"Filter by ",l.text),v.default.createElement("select",i(i({},u),{},{ref:function(e){t.selectInput=e},id:s,style:n,className:c,onChange:this.filter,onClick:function(t){return t.stopPropagation()},defaultValue:this.getDefaultValue()||"","data-testid":"select-filter"}),this.renderOptions()))}}],n&&l(r.prototype,n),a&&l(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);f(g,"defaultProps",{defaultValue:"",filterState:{},className:"",withoutEmptyOption:!1,comparator:E.EQ,caseSensitive:!0,id:null}),e.default=g},206(t,e,r){function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,o)}return r}function n(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?o(Object(r),!0).forEach(function(e){a(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function a(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=i(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=i(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==i(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.filterFactory=e.filterByArray=e.filterByDate=e.filterByNumber=e.filterByText=void 0;var l=r(355);e.filterByText=function(t){return function(e,r,o,n){var a=o.filterVal,i=void 0===a?"":a,u=o.comparator,c=void 0===u?l.LIKE:u,s=o.caseSensitive,p=i.toString();return e.filter(function(e){var o=t.get(e,r);n&&(o=n(o,e));var a=t.isDefined(o)?o.toString():"";return c===l.EQ?a===p:s?a.includes(p):-1!==a.toLocaleUpperCase().indexOf(p.toLocaleUpperCase())})}};e.filterByNumber=function(t){return function(e,r,o,n){var a=o.filterVal,i=a.comparator,u=a.number;return e.filter(function(e){if(""===u||!i)return!0;var o=t.get(e,r);switch(n&&(o=n(o,e)),i){case l.EQ:return o==u;case l.GT:return o>u;case l.GE:return o>=u;case l.LT:return o<u;case l.LE:return o<=u;case l.NE:return o!=u;default:return console.error("Number comparator provided is not supported"),!0}})}};e.filterByDate=function(t){return function(e,r,o,n){var a=o.filterVal,u=a.comparator,c=a.date;if(!c||!u)return e;var s=c.getUTCDate(),p=c.getUTCMonth(),f=c.getUTCFullYear();return e.filter(function(e){var o=!0,a=t.get(e,r);n&&(a=n(a,e)),"object"!==i(a)&&(a=new Date(a));var d=a.getUTCDate(),m=a.getUTCMonth(),h=a.getUTCFullYear();switch(u){case l.EQ:s===d&&p===m&&f===h||(o=!1);break;case l.GT:a<=c&&(o=!1);break;case l.GE:(h<f||h===f&&m<p||h===f&&m===p&&d<s)&&(o=!1);break;case l.LT:a>=c&&(o=!1);break;case l.LE:(h>f||h===f&&m>p||h===f&&m===p&&d>s)&&(o=!1);break;case l.NE:s===d&&p===m&&f===h&&(o=!1);break;default:console.error("Date comparator provided is not supported")}return o})}};e.filterByArray=function(t){return function(e,r,o){var n=o.filterVal,a=o.comparator;if(0===n.length)return e;var i=n.filter(function(e){return t.isDefined(e)}).map(function(t){return t.toString()});return e.filter(function(e){var o=t.get(e,r),n=t.isDefined(o)?o.toString():"";return a===l.EQ?-1!==i.indexOf(n):(n=n.toLocaleUpperCase(),i.some(function(t){return-1!==n.indexOf(t.toLocaleUpperCase())}))})}};e.filterFactory=function(t){return function(r){switch(r){case l.FILTER_TYPES.MULTISELECT:return(0,e.filterByArray)(t);case l.FILTER_TYPES.NUMBER:return(0,e.filterByNumber)(t);case l.FILTER_TYPES.DATE:return(0,e.filterByDate)(t);case l.FILTER_TYPES.TEXT:case l.FILTER_TYPES.SELECT:default:return(0,e.filterByText)(t)}}};e.filters=function(t,r,o){return function(a){var i,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=(0,e.filterFactory)(o),c=n(n({},l),a),s=t;return Object.keys(c).forEach(function(t){var e,o,n;r=null!=r?r:[];for(var a=0;a<r.length;a+=1)if(r[a].dataField===t){o=r[a].filterValue,r[a].filter&&(n=r[a].filter.props.onFilter);break}if(l[t]&&n)void 0!==(e=n(l[t].filterVal,s))&&(s=e);else{var p=c[t];i=u(p.filterType),n&&(e=n(p.filterVal,s)),s=void 0===e?i(s,t,p,o):e}}),s}}},321(t,e,r){var o,n=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(o=function(t){return o=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},o(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=o(t),i=0;i<r.length;i++)"default"!==r[i]&&n(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355);const c=t=>{if(t&&t.selectedOptions)return Array.from(t.selectedOptions).map(t=>t.value);if(t&&Array.isArray(t.value))return t.value;const e=[],r=t&&t.options?t.options.length:0;for(let o=0;o<r;o+=1){const r=t.options[o];r&&r.selected&&e.push(r.value)}return e};class s extends l.Component{selectInput;constructor(t){super(t),this.filter=this.filter.bind(this),this.applyFilter=this.applyFilter.bind(this);const e=(t.defaultValue??[]).map(e=>t.options[e]).length>0;this.state={isSelected:e}}componentDidMount(){const{getFilter:t}=this.props,e=c(this.selectInput);e&&e.length>0&&this.applyFilter(e),t&&t(t=>{this.selectInput.value=t,this.applyFilter(t)})}componentDidUpdate(t){let e=!1;this.props.defaultValue!==t.defaultValue?e=!0:function(t,e){const r=Object.keys(t);for(let o=0;o<r.length;o+=1)if(t[r[o]]!==e[r[o]])return!1;return Object.keys(t).length===Object.keys(e).length}(this.props.options,t.options)||(e=!0),e&&this.applyFilter(c(this.selectInput))}getDefaultValue(){const{filterState:t={},defaultValue:e=[]}=this.props;return t&&void 0!==t.filterVal?t.filterVal:e}getOptions(){const t=[],{options:e,placeholder:r,column:o,withoutEmptyOption:n=!1,defaultValue:a=[]}=this.props,i=a&&a.length>0;return n||i||t.push(l.default.createElement("option",{key:"-1",value:"","data-testid":"multiselect-placeholder"},r||`Select ${o.text}...`)),Object.keys(e).forEach(r=>t.push(l.default.createElement("option",{key:r,value:r},e[r]))),t}cleanFiltered(){const t=void 0!==this.props.defaultValue?this.props.defaultValue:[];this.selectInput.value=t,this.applyFilter(t)}applyFilter(t){1===t.length&&""===t[0]&&(t=[]),this.setState(()=>({isSelected:t.length>0})),this.props.onFilter(this.props.column,u.FILTER_TYPES.MULTISELECT)(t)}filter(t){const e=c(t.target);this.applyFilter(e)}render(){const{id:t=null,style:e,className:r="",filterState:o={},defaultValue:n=[],onFilter:a,column:i,options:c,comparator:s=u.EQ,withoutEmptyOption:p=!1,caseSensitive:f=!0,getFilter:d,...m}=this.props,h=`filter select-filter form-control ${r} ${this.state.isSelected?"":"placeholder-selected"}`,y=`multiselect-filter-column-${i.dataField}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:y},l.default.createElement("span",{className:"sr-only"},"Filter by ",i.text),l.default.createElement("select",{...m,ref:t=>{this.selectInput=t},id:y,style:e,multiple:!0,className:h,onChange:this.filter,onClick:t=>t.stopPropagation(),defaultValue:this.getDefaultValue(),"data-testid":"multiselect-filter"},this.getOptions()))}static defaultProps={defaultValue:[],filterState:{},className:"",withoutEmptyOption:!1,comparator:u.EQ,caseSensitive:!0,id:null}}e.default=s},355(t,e,r){var o=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.customFilter=e.dateFilter=e.numberFilter=e.multiSelectFilter=e.selectFilter=e.textFilter=e.ComparatorNumber=e.LE=e.LT=e.GE=e.GT=e.NE=e.EQ=e.LIKE=e.FILTER_DELAY=e.FILTER_TYPES=void 0;var n,a=o(r(659)),i=o(r(558)),l=o(r(834)),u=o(r(63)),c=o(r(652)),s=o(r(37));!function(t){t.TEXT="TEXT",t.SELECT="SELECT",t.MULTISELECT="MULTISELECT",t.NUMBER="NUMBER",t.DATE="DATE"}(n||(e.FILTER_TYPES=n={})),e.FILTER_DELAY=500,e.LIKE="LIKE",e.EQ="=",e.NE="!=",e.GT=">",e.GE=">=",e.LT="<",e.LE="<=",e.ComparatorNumber=7;e.textFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:c.default,props:t}};e.selectFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:u.default,props:t}};e.multiSelectFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:i.default,props:t}};e.numberFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:l.default,props:t}};e.dateFilter=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{Filter:a.default,props:t}};e.customFilter=function(){return{Filter:function(){},props:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}},e.default=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{createContext:s.default,options:t}}},388(t,e,r){var o,n=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(o=function(t){return o=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},o(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=o(t),i=0;i<r.length;i++)"default"!==r[i]&&n(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355);class c extends l.Component{options;selectInput;constructor(t){super(t),this.filter=this.filter.bind(this),this.options=this.getOptions(t);const e=void 0!==function(t,e){if(Array.isArray(t))return t.filter(({label:t})=>t===e).map(({value:t})=>t)[0];return t[e]}(this.options,this.getDefaultValue());this.state={isSelected:e}}componentDidMount(){const{column:t,onFilter:e,getFilter:r}=this.props,o=this.selectInput.value;o&&""!==o&&e(t,u.FILTER_TYPES.SELECT,!0)(o),r&&r(r=>{this.setState(()=>({isSelected:""!==r})),this.selectInput.value=r,e(t,u.FILTER_TYPES.SELECT)(r)})}componentDidUpdate(t){let e=!1;const{column:r,onFilter:o,defaultValue:n}=this.props,a=this.getOptions(this.props);if(n!==t.defaultValue?(this.selectInput.value=n,e=!0):function(t,e){if(Array.isArray(t)){if(t.length===e.length){for(let r=0;r<t.length;r+=1)if(t[r].value!==e[r].value||t[r].label!==e[r].label)return!1;return!0}return!1}const r=Object.keys(t);for(let o=0;o<r.length;o+=1)if(t[r[o]]!==e[r[o]])return!1;return Object.keys(t).length===Object.keys(e).length}(a,this.options)||(this.options=a,e=!0),e){const t=this.selectInput.value;t&&o(r,u.FILTER_TYPES.SELECT)(t)}}getOptions(t){return"function"==typeof t.options?t.options(t.column):t.options}getDefaultValue(){const{filterState:t,defaultValue:e}=this.props;return t&&void 0!==t.filterVal?t.filterVal:e}cleanFiltered(){const t=void 0!==this.props.defaultValue?this.props.defaultValue:"";this.setState(()=>({isSelected:""!==t})),this.selectInput.value=t,this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(t)}applyFilter(t){this.selectInput.value=t,this.setState(()=>({isSelected:""!==t})),this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(t)}filter(t){const{value:e}=t.target;this.setState(()=>({isSelected:""!==e})),this.props.onFilter(this.props.column,u.FILTER_TYPES.SELECT)(e)}renderOptions(){const t=[],{options:e}=this,{placeholder:r,column:o,withoutEmptyOption:n,defaultValue:a}=this.props;return n||void 0!==a&&""!==a||t.push(l.default.createElement("option",{key:"-1",value:"","data-testid":"select-filter-placeholder"},r||`Select ${o.text}...`)),Array.isArray(e)?e.forEach(({value:e,label:r})=>t.push(l.default.createElement("option",{key:e,value:e},r))):Object.keys(e).forEach(r=>t.push(l.default.createElement("option",{key:r,value:r},e[r]))),t}render(){const{id:t,style:e,className:r,defaultValue:o,onFilter:n,column:a,options:i,comparator:u,withoutEmptyOption:c,caseSensitive:s,getFilter:p,filterState:f,...d}=this.props,m=`filter select-filter form-control ${r} ${this.state.isSelected?"":"placeholder-selected"}`,h=`select-filter-column-${a.dataField}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:h},l.default.createElement("span",{className:"sr-only"},"Filter by ",a.text),l.default.createElement("select",{...d,ref:t=>{this.selectInput=t},id:h,style:e,className:m,onChange:this.filter,onClick:t=>t.stopPropagation(),defaultValue:this.getDefaultValue()||"","data-testid":"select-filter"},this.renderOptions()))}static defaultProps={defaultValue:"",filterState:{},className:"",withoutEmptyOption:!1,comparator:u.EQ,caseSensitive:!0,id:null}}e.default=c},442(e){e.exports=t},461(t,e,r){var o,n=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(o=function(t){return o=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},o(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=o(t),i=0;i<r.length;i++)"default"!==r[i]&&n(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355);class c extends l.Component{input;timeout;constructor(t){super(t),this.filter=this.filter.bind(this),this.handleClick=this.handleClick.bind(this),this.timeout=null,this.input={},this.state={value:t.filterState&&void 0!==t.filterState.filterVal?t.filterState.filterVal:t.defaultValue??""}}componentDidMount(){const{onFilter:t,getFilter:e,column:r}=this.props,o=this.input.value;o&&t(this.props.column,u.FILTER_TYPES.TEXT,!0)(o),e&&e(e=>{this.setState(()=>({value:e})),t(r,u.FILTER_TYPES.TEXT)(e)})}componentWillUnmount(){this.cleanTimer()}componentDidUpdate(t){if(t.defaultValue!==this.props.defaultValue){const t=this.props.defaultValue??"";this.setState({value:t},()=>{this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(t)})}}filter(t){t.stopPropagation(),this.cleanTimer();const e=t.target.value;this.setState(()=>({value:e})),this.timeout=setTimeout(()=>{this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(e)},this.props.delay)}cleanTimer(){this.timeout&&clearTimeout(this.timeout)}cleanFiltered(){const t=this.props.defaultValue??"";this.setState(()=>({value:t})),this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(t)}applyFilter(t){const e=t??"";this.setState(()=>({value:e})),this.props.onFilter(this.props.column,u.FILTER_TYPES.TEXT)(e)}handleClick(t){t.stopPropagation(),this.props.onClick&&this.props.onClick(t)}render(){const{id:t=null,placeholder:e,column:{dataField:r,text:o},style:n,className:a,onFilter:i,caseSensitive:u=!1,defaultValue:c="",getFilter:s,filterState:p={},...f}=this.props,d=`text-filter-column-${r}${t?`-${t}`:""}`;return l.default.createElement("label",{className:"filter-label",htmlFor:d},l.default.createElement("span",{className:"sr-only"},"Filter by ",o),l.default.createElement("input",{...f,ref:t=>{this.input=t},type:"text",id:d,className:`filter text-filter form-control ${a}`,style:n,onChange:this.filter,onClick:this.handleClick,placeholder:e||`Enter ${o}...`,value:this.state.value,"data-testid":"text-filter"}))}static defaultProps={delay:500,filterState:{},defaultValue:"",caseSensitive:!1,id:null}}e.default=c},558(t,e,r){var o=["id","style","className","filterState","defaultValue","onFilter","column","options","comparator","withoutEmptyOption","caseSensitive","getFilter"];function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,o)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){f(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,d(o.key),o)}}function u(t,e,r){return e=s(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,c()?Reflect.construct(e,r||[],s(t).constructor):e.apply(t,r))}function c(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(c=function(){return!!t})()}function s(t){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},s(t)}function p(t,e){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},p(t,e)}function f(t,e,r){return(e=d(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function d(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}var m,h=Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),o=0;o<r.length;o++)"default"!==r[o]&&h(e,t,r[o]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355);var g=function(t){if(t&&t.selectedOptions)return Array.from(t.selectedOptions).map(function(t){return t.value});if(t&&Array.isArray(t.value))return t.value;for(var e=[],r=t&&t.options?t.options.length:0,o=0;o<r;o+=1){var n=t.options[o];n&&n.selected&&e.push(n.value)}return e},O=function(t){function e(t){var r,o;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),f(o=u(this,e,[t]),"selectInput",void 0),o.filter=o.filter.bind(o),o.applyFilter=o.applyFilter.bind(o);var n=(null!==(r=t.defaultValue)&&void 0!==r?r:[]).map(function(e){return t.options[e]}).length>0;return o.state={isSelected:n},o}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&p(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props.getFilter,r=g(this.selectInput);r&&r.length>0&&this.applyFilter(r),e&&e(function(e){t.selectInput.value=e,t.applyFilter(e)})}},{key:"componentDidUpdate",value:function(t){var e=!1;this.props.defaultValue!==t.defaultValue?e=!0:function(t,e){for(var r=Object.keys(t),o=0;o<r.length;o+=1)if(t[r[o]]!==e[r[o]])return!1;return Object.keys(t).length===Object.keys(e).length}(this.props.options,t.options)||(e=!0),e&&this.applyFilter(g(this.selectInput))}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.filterState,r=void 0===e?{}:e,o=t.defaultValue,n=void 0===o?[]:o;return r&&void 0!==r.filterVal?r.filterVal:n}},{key:"getOptions",value:function(){var t=[],e=this.props,r=e.options,o=e.placeholder,n=e.column,a=e.withoutEmptyOption,i=void 0!==a&&a,l=e.defaultValue,u=void 0===l?[]:l,c=u&&u.length>0;return i||c||t.push(v.default.createElement("option",{key:"-1",value:"","data-testid":"multiselect-placeholder"},o||"Select ".concat(n.text,"..."))),Object.keys(r).forEach(function(e){return t.push(v.default.createElement("option",{key:e,value:e},r[e]))}),t}},{key:"cleanFiltered",value:function(){var t=void 0!==this.props.defaultValue?this.props.defaultValue:[];this.selectInput.value=t,this.applyFilter(t)}},{key:"applyFilter",value:function(t){1===t.length&&""===t[0]&&(t=[]),this.setState(function(){return{isSelected:t.length>0}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.MULTISELECT)(t)}},{key:"filter",value:function(t){var e=g(t.target);this.applyFilter(e)}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,a=e.style,l=e.className,u=void 0===l?"":l,c=(e.filterState,e.defaultValue,e.onFilter,e.column),s=(e.options,e.comparator),p=(void 0===s&&E.EQ,e.withoutEmptyOption,e.caseSensitive,e.getFilter,function(t,e){if(null==t)return{};var r,o,n=function(t,e){if(null==t)return{};var r={};for(var o in t)if({}.hasOwnProperty.call(t,o)){if(-1!==e.indexOf(o))continue;r[o]=t[o]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(o=0;o<a.length;o++)r=a[o],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}(e,o)),f="filter select-filter form-control ".concat(u," ").concat(this.state.isSelected?"":"placeholder-selected"),d="multiselect-filter-column-".concat(c.dataField).concat(n?"-".concat(n):"");return v.default.createElement("label",{className:"filter-label",htmlFor:d},v.default.createElement("span",{className:"sr-only"},"Filter by ",c.text),v.default.createElement("select",i(i({},p),{},{ref:function(e){t.selectInput=e},id:d,style:a,multiple:!0,className:f,onChange:this.filter,onClick:function(t){return t.stopPropagation()},defaultValue:this.getDefaultValue(),"data-testid":"multiselect-filter"}),this.getOptions()))}}],n&&l(r.prototype,n),a&&l(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);f(O,"defaultProps",{defaultValue:[],filterState:{},className:"",withoutEmptyOption:!1,comparator:E.EQ,caseSensitive:!0,id:null}),e.default=O},599(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.filterFactory=e.filterByArray=e.filterByDate=e.filterByNumber=e.filterByText=void 0;const o=r(355);e.filterByText=t=>(e,r,{filterVal:n="",comparator:a=o.LIKE,caseSensitive:i},l)=>{const u=n.toString();return e.filter(e=>{let n=t.get(e,r);l&&(n=l(n,e));const c=t.isDefined(n)?n.toString():"";return a===o.EQ?c===u:i?c.includes(u):-1!==c.toLocaleUpperCase().indexOf(u.toLocaleUpperCase())})};e.filterByNumber=t=>(e,r,{filterVal:{comparator:n,number:a}},i)=>e.filter(e=>{if(""===a||!n)return!0;let l=t.get(e,r);switch(i&&(l=i(l,e)),n){case o.EQ:return l==a;case o.GT:return l>a;case o.GE:return l>=a;case o.LT:return l<a;case o.LE:return l<=a;case o.NE:return l!=a;default:return console.error("Number comparator provided is not supported"),!0}});e.filterByDate=t=>(e,r,{filterVal:{comparator:n,date:a}},i)=>{if(!a||!n)return e;const l=a.getUTCDate(),u=a.getUTCMonth(),c=a.getUTCFullYear();return e.filter(e=>{let s=!0,p=t.get(e,r);i&&(p=i(p,e)),"object"!=typeof p&&(p=new Date(p));const f=p.getUTCDate(),d=p.getUTCMonth(),m=p.getUTCFullYear();switch(n){case o.EQ:l===f&&u===d&&c===m||(s=!1);break;case o.GT:p<=a&&(s=!1);break;case o.GE:(m<c||m===c&&d<u||m===c&&d===u&&f<l)&&(s=!1);break;case o.LT:p>=a&&(s=!1);break;case o.LE:(m>c||m===c&&d>u||m===c&&d===u&&f>l)&&(s=!1);break;case o.NE:l===f&&u===d&&c===m&&(s=!1);break;default:console.error("Date comparator provided is not supported")}return s})};e.filterByArray=t=>(e,r,{filterVal:n,comparator:a})=>{if(0===n.length)return e;const i=n.filter(e=>t.isDefined(e)).map(t=>t.toString());return e.filter(e=>{const n=t.get(e,r);let l=t.isDefined(n)?n.toString():"";return a===o.EQ?-1!==i.indexOf(l):(l=l.toLocaleUpperCase(),i.some(t=>-1!==l.indexOf(t.toLocaleUpperCase())))})};e.filterFactory=t=>r=>{switch(r){case o.FILTER_TYPES.MULTISELECT:return(0,e.filterByArray)(t);case o.FILTER_TYPES.NUMBER:return(0,e.filterByNumber)(t);case o.FILTER_TYPES.DATE:return(0,e.filterByDate)(t);case o.FILTER_TYPES.TEXT:case o.FILTER_TYPES.SELECT:default:return(0,e.filterByText)(t)}};e.filters=(t,r,o)=>(n,a={})=>{const i=(0,e.filterFactory)(o),l={...a,...n};let u,c=t;return Object.keys(l).forEach(t=>{let e,o,n;r=r??[];for(let e=0;e<r.length;e+=1)if(r[e].dataField===t){o=r[e].filterValue,r[e].filter&&(n=r[e].filter.props.onFilter);break}if(a[t]&&n)e=n(a[t].filterVal,c),void 0!==e&&(c=e);else{const r=l[t];u=i(r.filterType),n&&(e=n(r.filterVal,c)),c=void 0===e?u(c,t,r,o):e}}),c}},610(t,e,r){var o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const n=o(r(442)),a=r(355),i=r(599);e.default=(t,e,r)=>{const o=n.default.createContext({});class l extends n.default.Component{currFilters;clearFilters;data;isEmitDataChange;constructor(t){super(t),this.currFilters={},this.clearFilters={},this.onFilter=this.onFilter.bind(this),this.doFilter=this.doFilter.bind(this),this.onExternalFilter=this.onExternalFilter.bind(this),this.data=t.data,this.isEmitDataChange=!1}componentDidMount(){e()&&Object.keys(this.currFilters).length>0&&r(this.currFilters)}onFilter(o,n,i=!1){return l=>{const u=Object.assign({},this.currFilters);this.clearFilters={};const{dataField:c,filter:s}=o;if(!t.isDefined(l)||""===l||0===l.length)delete u[c],this.clearFilters={[c]:{clear:!0,filterVal:l}};else{const{comparator:t=(n===a.FILTER_TYPES.SELECT?a.EQ:a.LIKE),caseSensitive:e=!1}=s.props;u[c]={filterVal:l,filterType:n,comparator:t,caseSensitive:e}}if(this.currFilters=u,e()){if(i||r(this.currFilters),void 0===s.props||void 0===s.props.forceUpdate||0==s.props.forceUpdate)return;this.forceUpdate()}this.doFilter(this.props)}}onExternalFilter(t,e){return r=>{this.onFilter(t,e)(r)}}getFiltered(){return this.data}shouldComponentUpdate(r,o,n){return e()||t.isEqual(r.data,this.data)?this.data=r.data:this.doFilter(r,this.isEmitDataChange),!0}doFilter(e,r=!1){const{dataChangeListener:o,data:n,columns:a,filter:l}=e,u=(0,i.filters)(n,a,t)(this.currFilters,this.clearFilters);l.afterFilter&&l.afterFilter(u,this.currFilters),this.data=u,o&&!r?(this.isEmitDataChange=!0,o.emit("filterChanged",u.length)):(this.isEmitDataChange=!1,this.forceUpdate())}render(){return n.default.createElement(o.Provider,{value:{data:this.data,onFilter:this.onFilter,onExternalFilter:this.onExternalFilter,currFilters:this.currFilters}},this.props.children)}}return{Provider:l,Consumer:o.Consumer}}},652(t,e,r){var o=["id","placeholder","column","style","className","onFilter","caseSensitive","defaultValue","getFilter","filterState"];function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,o)}return r}function i(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?a(Object(r),!0).forEach(function(e){f(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function l(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,d(o.key),o)}}function u(t,e,r){return e=s(e),function(t,e){if(e&&("object"==n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,c()?Reflect.construct(e,r||[],s(t).constructor):e.apply(t,r))}function c(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(c=function(){return!!t})()}function s(t){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},s(t)}function p(t,e){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},p(t,e)}function f(t,e,r){return(e=d(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function d(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==n(e)?e:e+""}var m,h=Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]},y=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},b=(m=function(t){return m=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},m(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=m(t),o=0;o<r.length;o++)"default"!==r[o]&&h(e,t,r[o]);return y(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var v=b(r(442)),E=r(355),g=function(t){function e(t){var r,o;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),f(r=u(this,e,[t]),"input",void 0),f(r,"timeout",void 0),r.filter=r.filter.bind(r),r.handleClick=r.handleClick.bind(r),r.timeout=null,r.input={},r.state={value:t.filterState&&void 0!==t.filterState.filterVal?t.filterState.filterVal:null!==(o=t.defaultValue)&&void 0!==o?o:""},r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&p(t,e)}(e,t),r=e,n=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.onFilter,o=e.getFilter,n=e.column,a=this.input.value;a&&r(this.props.column,E.FILTER_TYPES.TEXT,!0)(a),o&&o(function(e){t.setState(function(){return{value:e}}),r(n,E.FILTER_TYPES.TEXT)(e)})}},{key:"componentWillUnmount",value:function(){this.cleanTimer()}},{key:"componentDidUpdate",value:function(t){var e=this;if(t.defaultValue!==this.props.defaultValue){var r,o=null!==(r=this.props.defaultValue)&&void 0!==r?r:"";this.setState({value:o},function(){e.props.onFilter(e.props.column,E.FILTER_TYPES.TEXT)(o)})}}},{key:"filter",value:function(t){var e=this;t.stopPropagation(),this.cleanTimer();var r=t.target.value;this.setState(function(){return{value:r}}),this.timeout=setTimeout(function(){e.props.onFilter(e.props.column,E.FILTER_TYPES.TEXT)(r)},this.props.delay)}},{key:"cleanTimer",value:function(){this.timeout&&clearTimeout(this.timeout)}},{key:"cleanFiltered",value:function(){var t,e=null!==(t=this.props.defaultValue)&&void 0!==t?t:"";this.setState(function(){return{value:e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.TEXT)(e)}},{key:"applyFilter",value:function(t){var e=null!=t?t:"";this.setState(function(){return{value:e}}),this.props.onFilter(this.props.column,E.FILTER_TYPES.TEXT)(e)}},{key:"handleClick",value:function(t){t.stopPropagation(),this.props.onClick&&this.props.onClick(t)}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,n=void 0===r?null:r,a=e.placeholder,l=e.column,u=l.dataField,c=l.text,s=e.style,p=e.className,f=(e.onFilter,e.caseSensitive,e.defaultValue,e.getFilter,e.filterState,function(t,e){if(null==t)return{};var r,o,n=function(t,e){if(null==t)return{};var r={};for(var o in t)if({}.hasOwnProperty.call(t,o)){if(-1!==e.indexOf(o))continue;r[o]=t[o]}return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(o=0;o<a.length;o++)r=a[o],-1===e.indexOf(r)&&{}.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}(e,o)),d="text-filter-column-".concat(u).concat(n?"-".concat(n):"");return v.default.createElement("label",{className:"filter-label",htmlFor:d},v.default.createElement("span",{className:"sr-only"},"Filter by ",c),v.default.createElement("input",i(i({},f),{},{ref:function(e){t.input=e},type:"text",id:d,className:"filter text-filter form-control ".concat(p),style:s,onChange:this.filter,onClick:this.handleClick,placeholder:a||"Enter ".concat(c,"..."),value:this.state.value,"data-testid":"text-filter"})))}}],n&&l(r.prototype,n),a&&l(r,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,a}(v.Component);f(g,"defaultProps",{delay:500,filterState:{},defaultValue:"",caseSensitive:!1,id:null}),e.default=g},659(t,e,r){function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function n(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,s(o.key),o)}}function a(t,e,r){return e=l(e),function(t,e){if(e&&("object"==o(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,i()?Reflect.construct(e,r||[],l(t).constructor):e.apply(t,r))}function i(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(i=function(){return!!t})()}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function u(t,e){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},u(t,e)}function c(t,e,r){return(e=s(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function s(t){var e=function(t,e){if("object"!=o(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==o(e)?e:e+""}var p,f=Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]},d=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},m=(p=function(t){return p=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},p(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=p(t),o=0;o<r.length;o++)"default"!==r[o]&&f(e,t,r[o]);return d(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var h=m(r(442)),y=r(355),b=["=","!=",">",">=","<","<="];function v(t){return"".concat(t.getUTCFullYear(),"-").concat(("0"+(t.getUTCMonth()+1)).slice(-2),"-").concat(("0"+t.getUTCDate()).slice(-2))}var E=function(t){function e(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),c(r=a(this,e,[t]),"comparators",void 0),c(r,"dateFilterComparator",void 0),c(r,"inputDate",void 0),c(r,"timeout",void 0),r.timeout=null,r.comparators=t.comparators||b,r.applyFilter=r.applyFilter.bind(r),r.onChangeDate=r.onChangeDate.bind(r),r.onChangeComparator=r.onChangeComparator.bind(r),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&u(t,e)}(e,t),r=e,o=[{key:"componentDidMount",value:function(){var t=this,e=this.props.getFilter,r=this.dateFilterComparator.value,o=this.inputDate.value;r&&o&&this.applyFilter(o,r,!0),e&&e(function(e){var r=e||{date:null,comparator:null};t.dateFilterComparator.value=r.comparator,t.inputDate.value=r.date?v(r.date):null,t.applyFilter(r.date,r.comparator)})}},{key:"componentWillUnmount",value:function(){this.timeout&&clearTimeout(this.timeout)}},{key:"onChangeDate",value:function(t){var e=this.dateFilterComparator.value,r=t.target.value;this.applyFilter(r,e)}},{key:"onChangeComparator",value:function(t){var e=this.inputDate.value,r=t.target.value;this.applyFilter(e,r)}},{key:"getComparatorOptions",value:function(){var t=[],e=this.props.withoutEmptyComparatorOption;void 0!==e&&e||t.push(h.default.createElement("option",{key:"-1"}));for(var r=0;r<this.comparators.length;r+=1)t.push(h.default.createElement("option",{key:r,value:this.comparators[r]},this.comparators[r]));return t}},{key:"getDefaultComparator",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{date:void 0,comparator:""}:e,o=t.filterState,n=void 0===o?{}:o;return n&&n.filterVal?n.filterVal.comparator:r&&r.comparator?r.comparator:""}},{key:"getDefaultDate",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{date:void 0,comparator:""}:e,o=t.filterState,n=void 0===o?{}:o;return n&&n.filterVal&&n.filterVal.date?v(n.filterVal.date):r&&r.date?v(new Date(r.date)):""}},{key:"applyFilter",value:function(t,e,r){var o=this.props,n=o.column,a=o.onFilter,i=o.delay,l=void 0===i?0:i,u=function(){var o=""===t?null:new Date(t);a(n,y.FILTER_TYPES.DATE,r)({date:o,comparator:e})};l?this.timeout=setTimeout(function(){u()},l):u()}},{key:"render",value:function(){var t=this,e=this.props,r=e.id,o=void 0===r?null:r,n=e.placeholder,a=e.column,i=a.dataField,l=a.text,u=e.style,c=e.comparatorStyle,s=e.dateStyle,p=e.className,f=void 0===p?"":p,d=e.comparatorClassName,m=void 0===d?"":d,y=e.dateClassName,b=void 0===y?"":y,v="date-filter-comparator-".concat(i).concat(o?"-".concat(o):""),E="date-filter-column-".concat(i).concat(o?"-".concat(o):"");return h.default.createElement("div",{onClick:function(t){return t.stopPropagation()},className:"filter date-filter ".concat(f),style:u,"data-testid":"date-filter"},h.default.createElement("label",{className:"filter-label",htmlFor:v},h.default.createElement("span",{className:"sr-only"},"Filter comparator"),h.default.createElement("select",{ref:function(e){t.dateFilterComparator=e},id:v,style:c,className:"date-filter-comparator form-control ".concat(m),onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"date-filter-comparator"},this.getComparatorOptions())),h.default.createElement("label",{htmlFor:E},h.default.createElement("span",{className:"sr-only"},"Enter $",l),h.default.createElement("input",{ref:function(e){t.inputDate=e},id:E,className:"filter date-filter-input form-control ".concat(b),style:s,type:"date",onChange:this.onChangeDate,placeholder:n||"Enter ".concat(l,"..."),defaultValue:this.getDefaultDate(),"data-testid":"date-filter-input"})))}}],o&&n(r.prototype,o),i&&n(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,i}(h.Component);c(E,"defaultProps",{delay:0,defaultValue:{date:void 0,comparator:""},filterState:{},withoutEmptyComparatorOption:!1,comparators:b,placeholder:void 0,style:void 0,className:"",comparatorStyle:void 0,comparatorClassName:"",dateStyle:void 0,dateClassName:"",id:null}),e.default=E},684(t,e,r){var o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.customFilter=e.dateFilter=e.numberFilter=e.multiSelectFilter=e.selectFilter=e.textFilter=e.ComparatorNumber=e.LE=e.LT=e.GE=e.GT=e.NE=e.EQ=e.LIKE=e.FILTER_DELAY=e.FILTER_TYPES=void 0;const n=o(r(696)),a=o(r(321)),i=o(r(851)),l=o(r(388)),u=o(r(461)),c=o(r(610));var s;!function(t){t.TEXT="TEXT",t.SELECT="SELECT",t.MULTISELECT="MULTISELECT",t.NUMBER="NUMBER",t.DATE="DATE"}(s||(e.FILTER_TYPES=s={})),e.FILTER_DELAY=500,e.LIKE="LIKE",e.EQ="=",e.NE="!=",e.GT=">",e.GE=">=",e.LT="<",e.LE="<=",e.ComparatorNumber=7;e.textFilter=(t={})=>({Filter:u.default,props:t});e.selectFilter=(t={})=>({Filter:l.default,props:t});e.multiSelectFilter=(t={})=>({Filter:a.default,props:t});e.numberFilter=(t={})=>({Filter:i.default,props:t});e.dateFilter=(t={})=>({Filter:n.default,props:t});e.customFilter=(t={})=>({Filter:()=>{},props:t}),e.default=(t={})=>({createContext:c.default,options:t})},696(t,e,r){var o,n=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(o=function(t){return o=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},o(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=o(t),i=0;i<r.length;i++)"default"!==r[i]&&n(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=["=","!=",">",">=","<","<="];function s(t){return`${t.getUTCFullYear()}-${("0"+(t.getUTCMonth()+1)).slice(-2)}-${("0"+t.getUTCDate()).slice(-2)}`}class p extends l.Component{comparators;dateFilterComparator;inputDate;timeout;constructor(t){super(t),this.timeout=null,this.comparators=t.comparators||c,this.applyFilter=this.applyFilter.bind(this),this.onChangeDate=this.onChangeDate.bind(this),this.onChangeComparator=this.onChangeComparator.bind(this)}componentDidMount(){const{getFilter:t}=this.props,e=this.dateFilterComparator.value,r=this.inputDate.value;e&&r&&this.applyFilter(r,e,!0),t&&t(t=>{const e=t||{date:null,comparator:null};this.dateFilterComparator.value=e.comparator,this.inputDate.value=e.date?s(e.date):null,this.applyFilter(e.date,e.comparator)})}componentWillUnmount(){this.timeout&&clearTimeout(this.timeout)}onChangeDate(t){const e=this.dateFilterComparator.value,r=t.target.value;this.applyFilter(r,e)}onChangeComparator(t){const e=this.inputDate.value,r=t.target.value;this.applyFilter(e,r)}getComparatorOptions(){const t=[],{withoutEmptyComparatorOption:e=!1}=this.props;e||t.push(l.default.createElement("option",{key:"-1"}));for(let e=0;e<this.comparators.length;e+=1)t.push(l.default.createElement("option",{key:e,value:this.comparators[e]},this.comparators[e]));return t}getDefaultComparator(){const{defaultValue:t={date:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.comparator:t&&t.comparator?t.comparator:""}getDefaultDate(){const{defaultValue:t={date:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal&&e.filterVal.date?s(e.filterVal.date):t&&t.date?s(new Date(t.date)):""}applyFilter(t,e,r){const{column:o,onFilter:n,delay:a=0}=this.props,i=()=>{const a=""===t?null:new Date(t);n(o,u.FILTER_TYPES.DATE,r)({date:a,comparator:e})};a?this.timeout=setTimeout(()=>{i()},a):i()}render(){const{id:t=null,placeholder:e,column:{dataField:r,text:o},style:n,comparatorStyle:a,dateStyle:i,className:u="",comparatorClassName:c="",dateClassName:s=""}=this.props,p=`date-filter-comparator-${r}${t?`-${t}`:""}`,f=`date-filter-column-${r}${t?`-${t}`:""}`;return l.default.createElement("div",{onClick:t=>t.stopPropagation(),className:`filter date-filter ${u}`,style:n,"data-testid":"date-filter"},l.default.createElement("label",{className:"filter-label",htmlFor:p},l.default.createElement("span",{className:"sr-only"},"Filter comparator"),l.default.createElement("select",{ref:t=>{this.dateFilterComparator=t},id:p,style:a,className:`date-filter-comparator form-control ${c}`,onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"date-filter-comparator"},this.getComparatorOptions())),l.default.createElement("label",{htmlFor:f},l.default.createElement("span",{className:"sr-only"},"Enter $",o),l.default.createElement("input",{ref:t=>{this.inputDate=t},id:f,className:`filter date-filter-input form-control ${s}`,style:i,type:"date",onChange:this.onChangeDate,placeholder:e||`Enter ${o}...`,defaultValue:this.getDefaultDate(),"data-testid":"date-filter-input"})))}static defaultProps={delay:0,defaultValue:{date:void 0,comparator:""},filterState:{},withoutEmptyComparatorOption:!1,comparators:c,placeholder:void 0,style:void 0,className:"",comparatorStyle:void 0,comparatorClassName:"",dateStyle:void 0,dateClassName:"",id:null}}e.default=p},834(t,e,r){function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function n(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,s(o.key),o)}}function a(t,e,r){return e=l(e),function(t,e){if(e&&("object"==o(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,i()?Reflect.construct(e,r||[],l(t).constructor):e.apply(t,r))}function i(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(i=function(){return!!t})()}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function u(t,e){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},u(t,e)}function c(t,e,r){return(e=s(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function s(t){var e=function(t,e){if("object"!=o(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==o(e)?e:e+""}var p,f=Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]},d=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e},m=(p=function(t){return p=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},p(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=p(t),o=0;o<r.length;o++)"default"!==r[o]&&f(e,t,r[o]);return d(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});var h=m(r(442)),y=r(355),b=["=","!=",">",">=","<","<="],v=function(t){function e(t){var r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),c(r=a(this,e,[t]),"comparators",void 0),c(r,"numberFilter",void 0),c(r,"numberFilterComparator",void 0),c(r,"timeout",void 0),r.comparators=t.comparators||b,r.timeout=null;var o=void 0!==t.defaultValue&&void 0!==t.defaultValue.number;return t.options&&o&&(o=t.options.indexOf(t.defaultValue.number)>-1),r.state={isSelected:o},r.onChangeNumber=r.onChangeNumber.bind(r),r.onChangeNumberSet=r.onChangeNumberSet.bind(r),r.onChangeComparator=r.onChangeComparator.bind(r),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&u(t,e)}(e,t),r=e,o=[{key:"componentDidMount",value:function(){var t=this,e=this.props,r=e.column,o=e.onFilter,n=e.getFilter,a=""===this.numberFilterComparator.value?"=":this.numberFilterComparator.value,i=this.numberFilter.value;a&&i&&o(r,y.FILTER_TYPES.NUMBER,!0)({number:i,comparator:a}),n&&n(function(e){t.setState(function(){return{isSelected:""!==e}}),t.numberFilterComparator.value=e.comparator,t.numberFilter.value=e.number;var n=e.number,a=e.comparator;o(r,y.FILTER_TYPES.NUMBER)({number:n,comparator:a})})}},{key:"componentWillUnmount",value:function(){clearTimeout(this.timeout)}},{key:"onChangeNumber",value:function(t){var e=this.props,r=e.delay,o=void 0===r?y.FILTER_DELAY:r,n=e.column,a=e.onFilter,i=this.numberFilterComparator.value;if(""!==i){this.timeout&&clearTimeout(this.timeout);var l=t.target.value;this.timeout=setTimeout(function(){a(n,y.FILTER_TYPES.NUMBER)({number:l,comparator:i})},o)}}},{key:"onChangeNumberSet",value:function(t){var e=this.props,r=e.column,o=e.onFilter,n=this.numberFilterComparator.value,a=t.target.value;this.setState(function(){return{isSelected:""!==a}}),o(r,y.FILTER_TYPES.NUMBER)({number:a,comparator:n})}},{key:"onChangeComparator",value:function(t){var e=this.props,r=e.column,o=e.onFilter,n=this.numberFilter.value,a=t.target.value;o(r,y.FILTER_TYPES.NUMBER)({number:n,comparator:a})}},{key:"getDefaultComparator",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{number:void 0,comparator:""}:e,o=t.filterState,n=void 0===o?{}:o;return n&&n.filterVal?n.filterVal.comparator:r&&r.comparator?r.comparator:""}},{key:"getDefaultValue",value:function(){var t=this.props,e=t.defaultValue,r=void 0===e?{number:void 0,comparator:""}:e,o=t.filterState,n=void 0===o?{}:o;return n&&n.filterVal?n.filterVal.number:r&&r.number?r.number:""}},{key:"getComparatorOptions",value:function(){var t=[],e=this.props.withoutEmptyComparatorOption;void 0!==e&&e||t.push(h.default.createElement("option",{key:"-1"}));for(var r=0;r<this.comparators.length;r+=1)t.push(h.default.createElement("option",{key:r,value:this.comparators[r]},this.comparators[r]));return t}},{key:"getNumberOptions",value:function(){var t=[],e=this.props,r=e.options,o=e.column,n=e.withoutEmptyNumberOption;void 0!==n&&n||t.push(h.default.createElement("option",{key:"-1",value:""},this.props.placeholder||"Select ".concat(o.text,"...")));for(var a=0;a<r.length;a+=1)t.push(h.default.createElement("option",{key:a,value:r[a]},r[a]));return t}},{key:"applyFilter",value:function(t){var e=this.props,r=e.column,o=e.onFilter,n=t.number,a=t.comparator;this.setState(function(){return{isSelected:""!==n}}),this.numberFilterComparator.value=a,this.numberFilter.value=n,o(r,y.FILTER_TYPES.NUMBER)({number:n,comparator:a})}},{key:"cleanFiltered",value:function(){var t=this.props,e=t.column,r=t.onFilter,o=t.defaultValue,n=void 0===o?{number:void 0,comparator:""}:o,a=n?n.number:"",i=n?n.comparator:"";this.setState(function(){return{isSelected:""!==a}}),this.numberFilterComparator.value=i,this.numberFilter.value=a,r(e,y.FILTER_TYPES.NUMBER)({number:a,comparator:i})}},{key:"render",value:function(){var t=this,e=this.state.isSelected,r=this.props,o=r.id,n=void 0===o?null:o,a=r.column,i=r.options,l=r.style,u=r.className,c=void 0===u?"":u,s=r.numberStyle,p=r.numberClassName,f=void 0===p?"":p,d=r.comparatorStyle,m=r.comparatorClassName,y=void 0===m?"":m,b=r.placeholder,v="\n select-filter\n number-filter-input\n form-control\n ".concat(f,"\n ").concat(e?"":"placeholder-selected","\n "),E="number-filter-comparator-".concat(a.dataField).concat(n?"-".concat(n):""),g="number-filter-column-".concat(a.dataField).concat(n?"-".concat(n):"");return h.default.createElement("div",{onClick:function(t){return t.stopPropagation()},className:"filter number-filter ".concat(c),style:l,"data-testid":"number-filter"},h.default.createElement("label",{className:"filter-label",htmlFor:E},h.default.createElement("span",{className:"sr-only"},"Filter comparator"),h.default.createElement("select",{ref:function(e){t.numberFilterComparator=e},style:d,id:E,className:"number-filter-comparator form-control ".concat(y),onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"number-filter-comparator"},this.getComparatorOptions())),i?h.default.createElement("label",{className:"filter-label",htmlFor:g},h.default.createElement("span",{className:"sr-only"},"Select ".concat(a.text)),h.default.createElement("select",{ref:function(e){t.numberFilter=e},id:g,style:s,className:v,onChange:this.onChangeNumberSet,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-select"},this.getNumberOptions())):h.default.createElement("label",{htmlFor:g},h.default.createElement("span",{className:"sr-only"},"Enter ".concat(a.text)),h.default.createElement("input",{ref:function(e){t.numberFilter=e},id:g,type:"number",style:s,className:"number-filter-input form-control ".concat(f),placeholder:b||"Enter ".concat(a.text,"..."),onChange:this.onChangeNumber,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-input"})))}}],o&&n(r.prototype,o),i&&n(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,o,i}(h.Component);c(v,"defaultProps",{delay:y.FILTER_DELAY,options:void 0,defaultValue:{number:void 0,comparator:""},filterState:{},withoutEmptyComparatorOption:!1,withoutEmptyNumberOption:!1,comparators:b,placeholder:void 0,style:void 0,className:"",comparatorStyle:void 0,comparatorClassName:"",numberStyle:void 0,numberClassName:"",id:null}),e.default=v},851(t,e,r){var o,n=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||(o=function(t){return o=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},o(t)},function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r=o(t),i=0;i<r.length;i++)"default"!==r[i]&&n(e,t,r[i]);return a(e,t),e});Object.defineProperty(e,"__esModule",{value:!0});const l=i(r(442)),u=r(355),c=["=","!=",">",">=","<","<="];class s extends l.Component{comparators;numberFilter;numberFilterComparator;timeout;constructor(t){super(t),this.comparators=t.comparators||c,this.timeout=null;let e=void 0!==t.defaultValue&&void 0!==t.defaultValue.number;t.options&&e&&(e=t.options.indexOf(t.defaultValue.number)>-1),this.state={isSelected:e},this.onChangeNumber=this.onChangeNumber.bind(this),this.onChangeNumberSet=this.onChangeNumberSet.bind(this),this.onChangeComparator=this.onChangeComparator.bind(this)}componentDidMount(){const{column:t,onFilter:e,getFilter:r}=this.props,o=""===this.numberFilterComparator.value?"=":this.numberFilterComparator.value,n=this.numberFilter.value;o&&n&&e(t,u.FILTER_TYPES.NUMBER,!0)({number:n,comparator:o}),r&&r(r=>{this.setState(()=>({isSelected:""!==r})),this.numberFilterComparator.value=r.comparator,this.numberFilter.value=r.number;const o=r.number,n=r.comparator;e(t,u.FILTER_TYPES.NUMBER)({number:o,comparator:n})})}componentWillUnmount(){clearTimeout(this.timeout)}onChangeNumber(t){const{delay:e=u.FILTER_DELAY,column:r,onFilter:o}=this.props,n=this.numberFilterComparator.value;if(""===n)return;this.timeout&&clearTimeout(this.timeout);const a=t.target.value;this.timeout=setTimeout(()=>{o(r,u.FILTER_TYPES.NUMBER)({number:a,comparator:n})},e)}onChangeNumberSet(t){const{column:e,onFilter:r}=this.props,o=this.numberFilterComparator.value,{value:n}=t.target;this.setState(()=>({isSelected:""!==n})),r(e,u.FILTER_TYPES.NUMBER)({number:n,comparator:o})}onChangeComparator(t){const{column:e,onFilter:r}=this.props,o=this.numberFilter.value,n=t.target.value;r(e,u.FILTER_TYPES.NUMBER)({number:o,comparator:n})}getDefaultComparator(){const{defaultValue:t={number:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.comparator:t&&t.comparator?t.comparator:""}getDefaultValue(){const{defaultValue:t={number:void 0,comparator:""},filterState:e={}}=this.props;return e&&e.filterVal?e.filterVal.number:t&&t.number?t.number:""}getComparatorOptions(){const t=[],{withoutEmptyComparatorOption:e=!1}=this.props;e||t.push(l.default.createElement("option",{key:"-1"}));for(let e=0;e<this.comparators.length;e+=1)t.push(l.default.createElement("option",{key:e,value:this.comparators[e]},this.comparators[e]));return t}getNumberOptions(){const t=[],{options:e,column:r,withoutEmptyNumberOption:o=!1}=this.props;o||t.push(l.default.createElement("option",{key:"-1",value:""},this.props.placeholder||`Select ${r.text}...`));for(let r=0;r<e.length;r+=1)t.push(l.default.createElement("option",{key:r,value:e[r]},e[r]));return t}applyFilter(t){const{column:e,onFilter:r}=this.props,{number:o,comparator:n}=t;this.setState(()=>({isSelected:""!==o})),this.numberFilterComparator.value=n,this.numberFilter.value=o,r(e,u.FILTER_TYPES.NUMBER)({number:o,comparator:n})}cleanFiltered(){const{column:t,onFilter:e,defaultValue:r={number:void 0,comparator:""}}=this.props,o=r?r.number:"",n=r?r.comparator:"";this.setState(()=>({isSelected:""!==o})),this.numberFilterComparator.value=n,this.numberFilter.value=o,e(t,u.FILTER_TYPES.NUMBER)({number:o,comparator:n})}render(){const{isSelected:t}=this.state,{id:e=null,column:r,options:o,style:n,className:a="",numberStyle:i,numberClassName:u="",comparatorStyle:c,comparatorClassName:s="",placeholder:p}=this.props,f=`\n select-filter\n number-filter-input\n form-control\n ${u}\n ${t?"":"placeholder-selected"}\n `,d=`number-filter-comparator-${r.dataField}${e?`-${e}`:""}`,m=`number-filter-column-${r.dataField}${e?`-${e}`:""}`;return l.default.createElement("div",{onClick:t=>t.stopPropagation(),className:`filter number-filter ${a}`,style:n,"data-testid":"number-filter"},l.default.createElement("label",{className:"filter-label",htmlFor:d},l.default.createElement("span",{className:"sr-only"},"Filter comparator"),l.default.createElement("select",{ref:t=>{this.numberFilterComparator=t},style:c,id:d,className:`number-filter-comparator form-control ${s}`,onChange:this.onChangeComparator,defaultValue:this.getDefaultComparator(),"data-testid":"number-filter-comparator"},this.getComparatorOptions())),o?l.default.createElement("label",{className:"filter-label",htmlFor:m},l.default.createElement("span",{className:"sr-only"},`Select ${r.text}`),l.default.createElement("select",{ref:t=>{this.numberFilter=t},id:m,style:i,className:f,onChange:this.onChangeNumberSet,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-select"},this.getNumberOptions())):l.default.createElement("label",{htmlFor:m},l.default.createElement("span",{className:"sr-only"},`Enter ${r.text}`),l.default.createElement("input",{ref:t=>{this.numberFilter=t},id:m,type:"number",style:i,className:`number-filter-input form-control ${u}`,placeholder:p||`Enter ${r.text}...`,onChange:this.onChangeNumber,defaultValue:this.getDefaultValue(),"data-testid":"number-filter-input"})))}static defaultProps={delay:u.FILTER_DELAY,options:void 0,defaultValue:{number:void 0,comparator:""},filterState:{},withoutEmptyComparatorOption:!1,withoutEmptyNumberOption:!1,comparators:c,placeholder:void 0,style:void 0,className:"",comparatorStyle:void 0,comparatorClassName:"",numberStyle:void 0,numberClassName:"",id:null}}e.default=s}},r={};var o=function t(o){var n=r[o];if(void 0!==n)return n.exports;var a=r[o]={exports:{}};return e[o].call(a.exports,a,a.exports,t),a.exports}(684);return o})());
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIuanMiLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsVUFDUixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsU0FBVUosR0FDUSxpQkFBWkMsUUFDZEEsUUFBcUMsNEJBQUlELEVBQVFHLFFBQVEsVUFFekRKLEVBQWtDLDRCQUFJQyxFQUFRRCxFQUFZLE1BQzNELENBVEQsQ0FTR08sS0FBT0MsRyxvQ0NKVixTQUFTQyxFQUFRQyxHQUFnQyxPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FBSyxjQUFjQSxDQUFHLEVBQUksU0FBVUEsR0FBSyxPQUFPQSxHQUFLLG1CQUFxQkMsUUFBVUQsRUFBRUcsY0FBZ0JGLFFBQVVELElBQU1DLE9BQU9HLFVBQVksZ0JBQWtCSixDQUFHLEVBQUdELEVBQVFDLEVBQUksQ0FFN1QsU0FBU0ssRUFBa0JDLEVBQUdDLEdBQUssSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlELEVBQUVFLE9BQVFELElBQUssQ0FBRSxJQUFJUixFQUFJTyxFQUFFQyxHQUFJUixFQUFFVSxXQUFhVixFQUFFVSxhQUFjLEVBQUlWLEVBQUVXLGNBQWUsRUFBSSxVQUFXWCxJQUFNQSxFQUFFWSxVQUFXLEdBQUtDLE9BQU9DLGVBQWVSLEVBQUdTLEVBQWVmLEVBQUVnQixLQUFNaEIsRUFBSSxDQUFFLENBRXZPLFNBQVNpQixFQUFXVCxFQUFHUixFQUFHTSxHQUFLLE9BQU9OLEVBQUlrQixFQUFnQmxCLEdBQzFELFNBQW9DUSxFQUFHRixHQUFLLEdBQUlBLElBQU0sVUFBWVAsRUFBUU8sSUFBTSxtQkFBcUJBLEdBQUksT0FBT0EsRUFBRyxRQUFTLElBQU1BLEVBQUcsTUFB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SUFBSUMsRUFBU3VXLEVBQXlCRyxHQUFZLENBR2pEM1csUUFBUyxDQUFDLEdBT1gsT0FIQTZXLEVBQW9CRixHQUFVdFUsS0FBS3BDLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVMwVyxHQUdwRXpXLEVBQU9ELE9BQ2YsQ0NuQjBCMFcsQ0FBb0IsSyIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvc3JjL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvc3JjL2NvbXBvbmVudHMvc2VsZWN0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL3NyYy9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9zcmMvY29tcG9uZW50cy9tdWx0aXNlbGVjdC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9zcmMvY29tcG9uZW50cy9zZWxlY3QudHN4Iiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL3RleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL3NyYy9jb21wb25lbnRzL211bHRpc2VsZWN0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvc3JjL2ZpbHRlci50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL2xpYi9zcmMvY29tcG9uZW50cy90ZXh0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL3NyYy9jb21wb25lbnRzL2RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLWZpbHRlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL2RhdGUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1maWx0ZXIvbGliL3NyYy9jb21wb25lbnRzL251bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctZmlsdGVyL3NyYy9jb21wb25lbnRzL251bWJlci50c3giLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nRmlsdGVyXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ0ZpbHRlclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2ltcG9ydERlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnREZWZhdWx0IHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBcImRlZmF1bHRcIjogbW9kXG4gIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uXCIpO1xudmFyIGZpbHRlcl8xID0gcmVxdWlyZShcIi4vZmlsdGVyXCIpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoXywgaXNSZW1vdGVGaWx0ZXJpbmcsIGhhbmRsZUZpbHRlckNoYW5nZSkge1xuICB2YXIgRmlsdGVyQ29udGV4dCA9IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUNvbnRleHQoe30pO1xuICB2YXIgRmlsdGVyUHJvdmlkZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9yZWFjdF8xJGRlZmF1bHQkQ29tcCkge1xuICAgIGZ1bmN0aW9uIEZpbHRlclByb3ZpZGVyKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmlsdGVyUHJvdmlkZXIpO1xuICAgICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIEZpbHRlclByb3ZpZGVyLCBbcHJvcHNdKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJjdXJyRmlsdGVyc1wiLCB2b2lkIDApO1xuICAgICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImNsZWFyRmlsdGVyc1wiLCB2b2lkIDApO1xuICAgICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcImRhdGFcIiwgdm9pZCAwKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpc0VtaXREYXRhQ2hhbmdlXCIsIHZvaWQgMCk7XG4gICAgICBfdGhpcy5jdXJyRmlsdGVycyA9IHt9O1xuICAgICAgX3RoaXMuY2xlYXJGaWx0ZXJzID0ge307XG4gICAgICBfdGhpcy5vbkZpbHRlciA9IF90aGlzLm9uRmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuZG9GaWx0ZXIgPSBfdGhpcy5kb0ZpbHRlci5iaW5kKF90aGlzKTtcbiAgICAgIF90aGlzLm9uRXh0ZXJuYWxGaWx0ZXIgPSBfdGhpcy5vbkV4dGVybmFsRmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgICAgX3RoaXMuZGF0YSA9IHByb3BzLmRhdGE7XG4gICAgICBfdGhpcy5pc0VtaXREYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9pbmhlcml0cyhGaWx0ZXJQcm92aWRlciwgX3JlYWN0XzEkZGVmYXVsdCRDb21wKTtcbiAgICByZXR1cm4gX2NyZWF0ZUNsYXNzKEZpbHRlclByb3ZpZGVyLCBbe1xuICAgICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGlmIChpc1JlbW90ZUZpbHRlcmluZygpICYmIE9iamVjdC5rZXlzKHRoaXMuY3VyckZpbHRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBoYW5kbGVGaWx0ZXJDaGFuZ2UodGhpcy5jdXJyRmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwib25GaWx0ZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbkZpbHRlcihjb2x1bW4sIGZpbHRlclR5cGUpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgIHZhciBpbml0aWFsaXplID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmaWx0ZXJWYWwpIHtcbiAgICAgICAgICAvLyB3YXRjaCBvdXQgaGVyZSBpZiBtaWdyYXRpb24gdG8gY29udGV4dCBBUEksICMzMzRcbiAgICAgICAgICB2YXIgY3VyckZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBfdGhpczIuY3VyckZpbHRlcnMpO1xuICAgICAgICAgIF90aGlzMi5jbGVhckZpbHRlcnMgPSB7fTtcbiAgICAgICAgICB2YXIgZGF0YUZpZWxkID0gY29sdW1uLmRhdGFGaWVsZCxcbiAgICAgICAgICAgIGZpbHRlciA9IGNvbHVtbi5maWx0ZXI7XG4gICAgICAgICAgdmFyIG5lZWRDbGVhckZpbHRlcnMgPSAhXy5pc0RlZmluZWQoZmlsdGVyVmFsKSB8fCBmaWx0ZXJWYWwgPT09IFwiXCIgfHwgZmlsdGVyVmFsLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICBpZiAobmVlZENsZWFyRmlsdGVycykge1xuICAgICAgICAgICAgZGVsZXRlIGN1cnJGaWx0ZXJzW2RhdGFGaWVsZF07XG4gICAgICAgICAgICBfdGhpczIuY2xlYXJGaWx0ZXJzID0gX2RlZmluZVByb3BlcnR5KHt9LCBkYXRhRmllbGQsIHtcbiAgICAgICAgICAgICAgY2xlYXI6IHRydWUsXG4gICAgICAgICAgICAgIGZpbHRlclZhbDogZmlsdGVyVmFsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2VsZWN0IGRlZmF1bHQgY29tcGFyYXRvciBpcyBFUSwgb3RoZXJzIGFyZSBMSUtFXG4gICAgICAgICAgICB2YXIgX2ZpbHRlciRwcm9wcyA9IGZpbHRlci5wcm9wcyxcbiAgICAgICAgICAgICAgX2ZpbHRlciRwcm9wcyRjb21wYXJhID0gX2ZpbHRlciRwcm9wcy5jb21wYXJhdG9yLFxuICAgICAgICAgICAgICBjb21wYXJhdG9yID0gX2ZpbHRlciRwcm9wcyRjb21wYXJhID09PSB2b2lkIDAgPyBmaWx0ZXJUeXBlID09PSBfXzEuRklMVEVSX1RZUEVTLlNFTEVDVCA/IF9fMS5FUSA6IF9fMS5MSUtFIDogX2ZpbHRlciRwcm9wcyRjb21wYXJhLFxuICAgICAgICAgICAgICBfZmlsdGVyJHByb3BzJGNhc2VTZW4gPSBfZmlsdGVyJHByb3BzLmNhc2VTZW5zaXRpdmUsXG4gICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPSBfZmlsdGVyJHByb3BzJGNhc2VTZW4gPT09IHZvaWQgMCA/IGZhbHNlIDogX2ZpbHRlciRwcm9wcyRjYXNlU2VuO1xuICAgICAgICAgICAgY3VyckZpbHRlcnNbZGF0YUZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgZmlsdGVyVmFsOiBmaWx0ZXJWYWwsXG4gICAgICAgICAgICAgIGZpbHRlclR5cGU6IGZpbHRlclR5cGUsXG4gICAgICAgICAgICAgIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3IsXG4gICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU6IGNhc2VTZW5zaXRpdmVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIF90aGlzMi5jdXJyRmlsdGVycyA9IGN1cnJGaWx0ZXJzO1xuICAgICAgICAgIGlmIChpc1JlbW90ZUZpbHRlcmluZygpKSB7XG4gICAgICAgICAgICBpZiAoIWluaXRpYWxpemUpIHtcbiAgICAgICAgICAgICAgaGFuZGxlRmlsdGVyQ2hhbmdlKF90aGlzMi5jdXJyRmlsdGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUT0RPOiBXaHkgd2UgbmVlZCB0byBmb3JjZVVwZGF0ZSBoZXJlPyBcbiAgICAgICAgICAgIC8vIEl0IHNlZW1zIHRoZSBmaWx0ZXIgY29tcG9uZW50IHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50L1Byb3ZpZGVyXG4gICAgICAgICAgICAvLyBJbnRyb2R1Y2UgYWRkaXRpb25hbCBwcm9wZXJ0eSwgZm9yY2VVcGRhdGUgKGRlZmF1bHQgdG8gZmFsc2UpLCB0byBhdm9pZCBpbmZpbml0ZSBsb29wIG9mIHRoaXMuZm9yY2VVcGRhdGUoKSwgd2lsbCBuZWVkIHRvIHJlZmFjdG9yIHRoZSBmaWx0ZXIgY29tcG9uZW50IHRvIGJlIGNvbnRyb2xsZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQvUHJvdmlkZXJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIucHJvcHMgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXIucHJvcHMuZm9yY2VVcGRhdGUgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXIucHJvcHMuZm9yY2VVcGRhdGUgPT0gZmFsc2UpIHJldHVybjtcbiAgICAgICAgICAgIF90aGlzMi5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpczIuZG9GaWx0ZXIoX3RoaXMyLnByb3BzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwib25FeHRlcm5hbEZpbHRlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRXh0ZXJuYWxGaWx0ZXIoY29sdW1uLCBmaWx0ZXJUeXBlKSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgX3RoaXMzLm9uRmlsdGVyKGNvbHVtbiwgZmlsdGVyVHlwZSkodmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRGaWx0ZXJlZFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpbHRlcmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gICAgICAgIGlmICghaXNSZW1vdGVGaWx0ZXJpbmcoKSAmJiAhXy5pc0VxdWFsKG5leHRQcm9wcy5kYXRhLCB0aGlzLmRhdGEpKSB7XG4gICAgICAgICAgdGhpcy5kb0ZpbHRlcihuZXh0UHJvcHMsIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gbmV4dFByb3BzLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRvRmlsdGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZG9GaWx0ZXIocHJvcHMpIHtcbiAgICAgICAgdmFyIGlnbm9yZUVtaXREYXRhQ2hhbmdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGFDaGFuZ2VMaXN0ZW5lciA9IHByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lcixcbiAgICAgICAgICBkYXRhID0gcHJvcHMuZGF0YSxcbiAgICAgICAgICBjb2x1bW5zID0gcHJvcHMuY29sdW1ucyxcbiAgICAgICAgICBmaWx0ZXIgPSBwcm9wcy5maWx0ZXI7XG4gICAgICAgIHZhciByZXN1bHQgPSAoMCwgZmlsdGVyXzEuZmlsdGVycykoZGF0YSwgY29sdW1ucywgXykodGhpcy5jdXJyRmlsdGVycywgdGhpcy5jbGVhckZpbHRlcnMpO1xuICAgICAgICBpZiAoZmlsdGVyLmFmdGVyRmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyLmFmdGVyRmlsdGVyKHJlc3VsdCwgdGhpcy5jdXJyRmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhID0gcmVzdWx0O1xuICAgICAgICBpZiAoZGF0YUNoYW5nZUxpc3RlbmVyICYmICFpZ25vcmVFbWl0RGF0YUNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgZGF0YUNoYW5nZUxpc3RlbmVyLmVtaXQoXCJmaWx0ZXJDaGFuZ2VkXCIsIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KEZpbHRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgb25GaWx0ZXI6IHRoaXMub25GaWx0ZXIsXG4gICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyOiB0aGlzLm9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgICAgICAgICBjdXJyRmlsdGVyczogdGhpcy5jdXJyRmlsdGVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfV0pO1xuICB9KHJlYWN0XzFbXCJkZWZhdWx0XCJdLkNvbXBvbmVudCk7XG4gIHJldHVybiB7XG4gICAgUHJvdmlkZXI6IEZpbHRlclByb3ZpZGVyLFxuICAgIENvbnN1bWVyOiBGaWx0ZXJDb250ZXh0LkNvbnN1bWVyXG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2V4Y2x1ZGVkID0gW1wiaWRcIiwgXCJzdHlsZVwiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcIm9uRmlsdGVyXCIsIFwiY29sdW1uXCIsIFwib3B0aW9uc1wiLCBcImNvbXBhcmF0b3JcIiwgXCJ3aXRob3V0RW1wdHlPcHRpb25cIiwgXCJjYXNlU2Vuc2l0aXZlXCIsIFwiZ2V0RmlsdGVyXCIsIFwiZmlsdGVyU3RhdGVcIl07XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7IGlmIChudWxsID09IGUpIHJldHVybiB7fTsgdmFyIG8sIHIsIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyBmb3IgKHIgPSAwOyByIDwgbi5sZW5ndGg7IHIrKykgbyA9IG5bcl0sIC0xID09PSB0LmluZGV4T2YobykgJiYge30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLCBvKSAmJiAoaVtvXSA9IGVbb10pOyB9IHJldHVybiBpOyB9XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7IGlmIChudWxsID09IHIpIHJldHVybiB7fTsgdmFyIHQgPSB7fTsgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkgeyBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7IHRbbl0gPSByW25dOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikgeyBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHsgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7IHZhciBvID0gclt0XTsgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIF90b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHsgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGU7IH1cbmZ1bmN0aW9uIF9jYWxsU3VwZXIodCwgbywgZSkgeyByZXR1cm4gbyA9IF9nZXRQcm90b3R5cGVPZihvKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpID8gUmVmbGVjdC5jb25zdHJ1Y3QobywgZSB8fCBbXSwgX2dldFByb3RvdHlwZU9mKHQpLmNvbnN0cnVjdG9yKSA6IG8uYXBwbHkodCwgZSkpOyB9XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBlKSB7IGlmIChlICYmIChcIm9iamVjdFwiID09IF90eXBlb2YoZSkgfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlKSkgcmV0dXJuIGU7IGlmICh2b2lkIDAgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkgeyBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyB0cnkgeyB2YXIgdCA9ICFCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IH0gY2F0Y2ggKHQpIHt9IHJldHVybiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHJldHVybiAhIXQ7IH0pKCk7IH1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7IHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTsgfSwgX2dldFByb3RvdHlwZU9mKHQpOyB9XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHQsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIGUgJiYgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkgeyByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7IH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHsgcmV0dXJuIChyID0gX3RvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgeyB2YWx1ZTogdCwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IGVbcl0gPSB0LCBlOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxudmFyIF9fY3JlYXRlQmluZGluZyA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgIGRlc2MgPSB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBtW2tdO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0gOiBmdW5jdGlvbiAobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9fc2V0TW9kdWxlRGVmYXVsdCB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZcbiAgfSk7XG59IDogZnVuY3Rpb24gKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfb3duS2V5cyA9IGZ1bmN0aW9uIG93bktleXMobykge1xuICAgIF9vd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhciA9IFtdO1xuICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgIHJldHVybiBhcjtcbiAgICB9O1xuICAgIHJldHVybiBfb3duS2V5cyhvKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBfb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbi8qIGVzbGludCByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uLy4uXCIpO1xuZnVuY3Rpb24gb3B0aW9uc0VxdWFscyhjdXJyT3B0cywgcHJldk9wdHMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY3Vyck9wdHMpKSB7XG4gICAgaWYgKGN1cnJPcHRzLmxlbmd0aCA9PT0gcHJldk9wdHMubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnJPcHRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChjdXJyT3B0c1tpXS52YWx1ZSAhPT0gcHJldk9wdHNbaV0udmFsdWUgfHwgY3Vyck9wdHNbaV0ubGFiZWwgIT09IHByZXZPcHRzW2ldLmxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY3Vyck9wdHMpO1xuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwga2V5cy5sZW5ndGg7IF9pICs9IDEpIHtcbiAgICBpZiAoY3Vyck9wdHNba2V5c1tfaV1dICE9PSBwcmV2T3B0c1trZXlzW19pXV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGN1cnJPcHRzKS5sZW5ndGggPT09IE9iamVjdC5rZXlzKHByZXZPcHRzKS5sZW5ndGg7XG59XG5mdW5jdGlvbiBnZXRPcHRpb25WYWx1ZShvcHRpb25zLCBrZXkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICB2YXIgcmVzdWx0ID0gb3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBsYWJlbCA9IF9yZWYubGFiZWw7XG4gICAgICByZXR1cm4gbGFiZWwgPT09IGtleTtcbiAgICB9KS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgdmFsdWUgPSBfcmVmMi52YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0WzBdO1xuICB9XG4gIHJldHVybiBvcHRpb25zW2tleV07XG59XG52YXIgU2VsZWN0RmlsdGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gU2VsZWN0RmlsdGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZWxlY3RGaWx0ZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBTZWxlY3RGaWx0ZXIsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJvcHRpb25zXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInNlbGVjdElucHV0XCIsIHZvaWQgMCk7XG4gICAgX3RoaXMuZmlsdGVyID0gX3RoaXMuZmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9wdGlvbnMgPSBfdGhpcy5nZXRPcHRpb25zKHByb3BzKTtcbiAgICB2YXIgaXNTZWxlY3RlZCA9IGdldE9wdGlvblZhbHVlKF90aGlzLm9wdGlvbnMsIF90aGlzLmdldERlZmF1bHRWYWx1ZSgpKSAhPT0gdW5kZWZpbmVkO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZFxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhTZWxlY3RGaWx0ZXIsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoU2VsZWN0RmlsdGVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzLm9uRmlsdGVyLFxuICAgICAgICBnZXRGaWx0ZXIgPSBfdGhpcyRwcm9wcy5nZXRGaWx0ZXI7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnNlbGVjdElucHV0LnZhbHVlO1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNULCB0cnVlKSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgb25GaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzXG4gICAgICBpZiAoZ2V0RmlsdGVyKSB7XG4gICAgICAgIGdldEZpbHRlcihmdW5jdGlvbiAoZmlsdGVyVmFsKSB7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZpbHRlclZhbCAhPT0gXCJcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfdGhpczIuc2VsZWN0SW5wdXQudmFsdWUgPSBmaWx0ZXJWYWw7XG4gICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUKShmaWx0ZXJWYWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBuZWVkRmlsdGVyID0gZmFsc2U7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczIub25GaWx0ZXIsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWU7XG4gICAgICB2YXIgbmV4dE9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnModGhpcy5wcm9wcyk7XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBwcmV2UHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICghb3B0aW9uc0VxdWFscyhuZXh0T3B0aW9ucywgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBuZXh0T3B0aW9ucztcbiAgICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAobmVlZEZpbHRlcikge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnNlbGVjdElucHV0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE9wdGlvbnMocHJvcHMpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgcHJvcHMub3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiID8gcHJvcHMub3B0aW9ucyhwcm9wcy5jb2x1bW4pIDogcHJvcHMub3B0aW9ucztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGVmYXVsdFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzMy5maWx0ZXJTdGF0ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMzLmRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiB0eXBlb2YgZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhbkZpbHRlcmVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFuRmlsdGVyZWQoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgOiBcIlwiO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYXBwbHlGaWx0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXBwbHlGaWx0ZXIodmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuU0VMRUNUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpbHRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaWx0ZXIoZSkge1xuICAgICAgdmFyIHZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIlxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlck9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczQucGxhY2Vob2xkZXIsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzNC5jb2x1bW4sXG4gICAgICAgIHdpdGhvdXRFbXB0eU9wdGlvbiA9IF90aGlzJHByb3BzNC53aXRob3V0RW1wdHlPcHRpb24sXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzNC5kZWZhdWx0VmFsdWU7XG4gICAgICB2YXIgaXNTZWxlY3RlZCA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gXCJcIjtcbiAgICAgIGlmICghd2l0aG91dEVtcHR5T3B0aW9uICYmICFpc1NlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IFwiLTFcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwic2VsZWN0LWZpbHRlci1wbGFjZWhvbGRlclwiXG4gICAgICAgIH0sIHBsYWNlaG9sZGVyIHx8IFwiU2VsZWN0IFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIikpKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBfcmVmMy52YWx1ZSxcbiAgICAgICAgICAgIGxhYmVsID0gX3JlZjMubGFiZWw7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICAgIGtleTogdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICB9LCBsYWJlbCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiBrZXlcbiAgICAgICAgICB9LCBvcHRpb25zW2tleV0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlkID0gX3RoaXMkcHJvcHM1LmlkLFxuICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNS5zdHlsZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM1LmNsYXNzTmFtZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM1LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczUub25GaWx0ZXIsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzNS5jb2x1bW4sXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczUub3B0aW9ucyxcbiAgICAgICAgY29tcGFyYXRvciA9IF90aGlzJHByb3BzNS5jb21wYXJhdG9yLFxuICAgICAgICB3aXRob3V0RW1wdHlPcHRpb24gPSBfdGhpcyRwcm9wczUud2l0aG91dEVtcHR5T3B0aW9uLFxuICAgICAgICBjYXNlU2Vuc2l0aXZlID0gX3RoaXMkcHJvcHM1LmNhc2VTZW5zaXRpdmUsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzNS5nZXRGaWx0ZXIsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHM1LmZpbHRlclN0YXRlLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzNSwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBzZWxlY3RDbGFzcyA9IFwiZmlsdGVyIHNlbGVjdC1maWx0ZXIgZm9ybS1jb250cm9sIFwiLmNvbmNhdChjbGFzc05hbWUsIFwiIFwiKS5jb25jYXQodGhpcy5zdGF0ZS5pc1NlbGVjdGVkID8gXCJcIiA6IFwicGxhY2Vob2xkZXItc2VsZWN0ZWRcIik7XG4gICAgICB2YXIgZWxtSWQgPSBcInNlbGVjdC1maWx0ZXItY29sdW1uLVwiLmNvbmNhdChjb2x1bW4uZGF0YUZpZWxkKS5jb25jYXQoaWQgPyBcIi1cIi5jb25jYXQoaWQpIDogXCJcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlci1sYWJlbFwiLFxuICAgICAgICBodG1sRm9yOiBlbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkZpbHRlciBieSBcIiwgY29sdW1uLnRleHQpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG4pIHtcbiAgICAgICAgICBfdGhpczMuc2VsZWN0SW5wdXQgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogZWxtSWQsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgY2xhc3NOYW1lOiBzZWxlY3RDbGFzcyxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuZmlsdGVyLFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmdldERlZmF1bHRWYWx1ZSgpIHx8IFwiXCIsXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJzZWxlY3QtZmlsdGVyXCJcbiAgICAgIH0pLCB0aGlzLnJlbmRlck9wdGlvbnMoKSkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoU2VsZWN0RmlsdGVyLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGRlZmF1bHRWYWx1ZTogJycsXG4gIGZpbHRlclN0YXRlOiB7fSxcbiAgY2xhc3NOYW1lOiAnJyxcbiAgd2l0aG91dEVtcHR5T3B0aW9uOiBmYWxzZSxcbiAgY29tcGFyYXRvcjogX18xLkVRLFxuICBjYXNlU2Vuc2l0aXZlOiB0cnVlLFxuICBpZDogbnVsbFxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFNlbGVjdEZpbHRlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7IHJldHVybiB0eXBlb2YgbzsgfSA6IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvOyB9LCBfdHlwZW9mKG8pOyB9XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maWx0ZXJzID0gZXhwb3J0cy5maWx0ZXJGYWN0b3J5ID0gZXhwb3J0cy5maWx0ZXJCeUFycmF5ID0gZXhwb3J0cy5maWx0ZXJCeURhdGUgPSBleHBvcnRzLmZpbHRlckJ5TnVtYmVyID0gZXhwb3J0cy5maWx0ZXJCeVRleHQgPSB2b2lkIDA7XG4vKiBlc2xpbnQgZXFlcWVxOiAwICovXG4vKiBlc2xpbnQgbm8tY29uc29sZTogMCAqL1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLlwiKTtcbnZhciBmaWx0ZXJCeVRleHQgPSBmdW5jdGlvbiBmaWx0ZXJCeVRleHQoXykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRhdGEsIGRhdGFGaWVsZCwgX3JlZiwgY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICB2YXIgX3JlZiRmaWx0ZXJWYWwgPSBfcmVmLmZpbHRlclZhbCxcbiAgICAgIHVzZXJJbnB1dCA9IF9yZWYkZmlsdGVyVmFsID09PSB2b2lkIDAgPyBcIlwiIDogX3JlZiRmaWx0ZXJWYWwsXG4gICAgICBfcmVmJGNvbXBhcmF0b3IgPSBfcmVmLmNvbXBhcmF0b3IsXG4gICAgICBjb21wYXJhdG9yID0gX3JlZiRjb21wYXJhdG9yID09PSB2b2lkIDAgPyBfXzEuTElLRSA6IF9yZWYkY29tcGFyYXRvcixcbiAgICAgIGNhc2VTZW5zaXRpdmUgPSBfcmVmLmNhc2VTZW5zaXRpdmU7XG4gICAgLy8gbWFrZSBzdXJlIGZpbHRlciB2YWx1ZSB0byBiZSBhIHN0cmluZ1xuICAgIHZhciBmaWx0ZXJWYWwgPSB1c2VySW5wdXQudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHJvdykge1xuICAgICAgdmFyIGNlbGwgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICBpZiAoY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICAgICAgY2VsbCA9IGN1c3RvbUZpbHRlclZhbHVlKGNlbGwsIHJvdyk7XG4gICAgICB9XG4gICAgICB2YXIgY2VsbFN0ciA9IF8uaXNEZWZpbmVkKGNlbGwpID8gY2VsbC50b1N0cmluZygpIDogXCJcIjtcbiAgICAgIGlmIChjb21wYXJhdG9yID09PSBfXzEuRVEpIHtcbiAgICAgICAgcmV0dXJuIGNlbGxTdHIgPT09IGZpbHRlclZhbDtcbiAgICAgIH1cbiAgICAgIGlmIChjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgIHJldHVybiBjZWxsU3RyLmluY2x1ZGVzKGZpbHRlclZhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2VsbFN0ci50b0xvY2FsZVVwcGVyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsLnRvTG9jYWxlVXBwZXJDYXNlKCkpICE9PSAtMTtcbiAgICB9KTtcbiAgfTtcbn07XG5leHBvcnRzLmZpbHRlckJ5VGV4dCA9IGZpbHRlckJ5VGV4dDtcbnZhciBmaWx0ZXJCeU51bWJlciA9IGZ1bmN0aW9uIGZpbHRlckJ5TnVtYmVyKF8pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCBkYXRhRmllbGQsIF9yZWYyLCBjdXN0b21GaWx0ZXJWYWx1ZSkge1xuICAgIHZhciBfcmVmMiRmaWx0ZXJWYWwgPSBfcmVmMi5maWx0ZXJWYWwsXG4gICAgICBjb21wYXJhdG9yID0gX3JlZjIkZmlsdGVyVmFsLmNvbXBhcmF0b3IsXG4gICAgICBudW1iZXIgPSBfcmVmMiRmaWx0ZXJWYWwubnVtYmVyO1xuICAgIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAocm93KSB7XG4gICAgICBpZiAobnVtYmVyID09PSBcIlwiIHx8ICFjb21wYXJhdG9yKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHZhciBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChjb21wYXJhdG9yKSB7XG4gICAgICAgIGNhc2UgX18xLkVROlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsID09IG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkdUOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsID4gbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuR0U6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGwgPj0gbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuTFQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGwgPCBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5MRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbCA8PSBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5ORTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbCAhPSBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOdW1iZXIgY29tcGFyYXRvciBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufTtcbmV4cG9ydHMuZmlsdGVyQnlOdW1iZXIgPSBmaWx0ZXJCeU51bWJlcjtcbnZhciBmaWx0ZXJCeURhdGUgPSBmdW5jdGlvbiBmaWx0ZXJCeURhdGUoXykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRhdGEsIGRhdGFGaWVsZCwgX3JlZjMsIGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgdmFyIF9yZWYzJGZpbHRlclZhbCA9IF9yZWYzLmZpbHRlclZhbCxcbiAgICAgIGNvbXBhcmF0b3IgPSBfcmVmMyRmaWx0ZXJWYWwuY29tcGFyYXRvcixcbiAgICAgIGRhdGUgPSBfcmVmMyRmaWx0ZXJWYWwuZGF0ZTtcbiAgICBpZiAoIWRhdGUgfHwgIWNvbXBhcmF0b3IpIHJldHVybiBkYXRhO1xuICAgIHZhciBmaWx0ZXJEYXRlID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgdmFyIGZpbHRlck1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHZhciBmaWx0ZXJZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAocm93KSB7XG4gICAgICB2YXIgdmFsaWQgPSB0cnVlO1xuICAgICAgdmFyIGNlbGwgPSBfLmdldChyb3csIGRhdGFGaWVsZCk7XG4gICAgICBpZiAoY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICAgICAgY2VsbCA9IGN1c3RvbUZpbHRlclZhbHVlKGNlbGwsIHJvdyk7XG4gICAgICB9XG4gICAgICBpZiAoX3R5cGVvZihjZWxsKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICBjZWxsID0gbmV3IERhdGUoY2VsbCk7XG4gICAgICB9XG4gICAgICB2YXIgdGFyZ2V0RGF0ZSA9IGNlbGwuZ2V0VVRDRGF0ZSgpO1xuICAgICAgdmFyIHRhcmdldE1vbnRoID0gY2VsbC5nZXRVVENNb250aCgpO1xuICAgICAgdmFyIHRhcmdldFllYXIgPSBjZWxsLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICBzd2l0Y2ggKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgY2FzZSBfXzEuRVE6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGZpbHRlckRhdGUgIT09IHRhcmdldERhdGUgfHwgZmlsdGVyTW9udGggIT09IHRhcmdldE1vbnRoIHx8IGZpbHRlclllYXIgIT09IHRhcmdldFllYXIpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuR1Q6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGNlbGwgPD0gZGF0ZSkge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5HRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0WWVhciA8IGZpbHRlclllYXIpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJiB0YXJnZXRNb250aCA8IGZpbHRlck1vbnRoKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiYgdGFyZ2V0TW9udGggPT09IGZpbHRlck1vbnRoICYmIHRhcmdldERhdGUgPCBmaWx0ZXJEYXRlKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX18xLkxUOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChjZWxsID49IGRhdGUpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfXzEuTEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRhcmdldFllYXIgPiBmaWx0ZXJZZWFyKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiYgdGFyZ2V0TW9udGggPiBmaWx0ZXJNb250aCkge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRZZWFyID09PSBmaWx0ZXJZZWFyICYmIHRhcmdldE1vbnRoID09PSBmaWx0ZXJNb250aCAmJiB0YXJnZXREYXRlID4gZmlsdGVyRGF0ZSkge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIF9fMS5ORTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyRGF0ZSA9PT0gdGFyZ2V0RGF0ZSAmJiBmaWx0ZXJNb250aCA9PT0gdGFyZ2V0TW9udGggJiYgZmlsdGVyWWVhciA9PT0gdGFyZ2V0WWVhcikge1xuICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJEYXRlIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9KTtcbiAgfTtcbn07XG5leHBvcnRzLmZpbHRlckJ5RGF0ZSA9IGZpbHRlckJ5RGF0ZTtcbnZhciBmaWx0ZXJCeUFycmF5ID0gZnVuY3Rpb24gZmlsdGVyQnlBcnJheShfKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGF0YSwgZGF0YUZpZWxkLCBfcmVmNCkge1xuICAgIHZhciBmaWx0ZXJWYWwgPSBfcmVmNC5maWx0ZXJWYWwsXG4gICAgICBjb21wYXJhdG9yID0gX3JlZjQuY29tcGFyYXRvcjtcbiAgICBpZiAoZmlsdGVyVmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRhdGE7XG4gICAgdmFyIHJlZmluZWRGaWx0ZXJWYWwgPSBmaWx0ZXJWYWwuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gXy5pc0RlZmluZWQoeCk7XG4gICAgfSkubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC50b1N0cmluZygpO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAocm93KSB7XG4gICAgICB2YXIgY2VsbCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIHZhciBjZWxsU3RyID0gXy5pc0RlZmluZWQoY2VsbCkgPyBjZWxsLnRvU3RyaW5nKCkgOiBcIlwiO1xuICAgICAgaWYgKGNvbXBhcmF0b3IgPT09IF9fMS5FUSkge1xuICAgICAgICByZXR1cm4gcmVmaW5lZEZpbHRlclZhbC5pbmRleE9mKGNlbGxTdHIpICE9PSAtMTtcbiAgICAgIH1cbiAgICAgIGNlbGxTdHIgPSBjZWxsU3RyLnRvTG9jYWxlVXBwZXJDYXNlKCk7XG4gICAgICByZXR1cm4gcmVmaW5lZEZpbHRlclZhbC5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBjZWxsU3RyLmluZGV4T2YoaXRlbS50b0xvY2FsZVVwcGVyQ2FzZSgpKSAhPT0gLTE7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn07XG5leHBvcnRzLmZpbHRlckJ5QXJyYXkgPSBmaWx0ZXJCeUFycmF5O1xudmFyIGZpbHRlckZhY3RvcnkgPSBmdW5jdGlvbiBmaWx0ZXJGYWN0b3J5KF8pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChmaWx0ZXJUeXBlKSB7XG4gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7XG4gICAgICBjYXNlIF9fMS5GSUxURVJfVFlQRVMuTVVMVElTRUxFQ1Q6XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5maWx0ZXJCeUFycmF5KShfKTtcbiAgICAgIGNhc2UgX18xLkZJTFRFUl9UWVBFUy5OVU1CRVI6XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5maWx0ZXJCeU51bWJlcikoXyk7XG4gICAgICBjYXNlIF9fMS5GSUxURVJfVFlQRVMuREFURTpcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmZpbHRlckJ5RGF0ZSkoXyk7XG4gICAgICBjYXNlIF9fMS5GSUxURVJfVFlQRVMuVEVYVDpcbiAgICAgIGNhc2UgX18xLkZJTFRFUl9UWVBFUy5TRUxFQ1Q6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBVc2UgYHRleHRgIGZpbHRlciBhcyBkZWZhdWx0IGZpbHRlclxuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuZmlsdGVyQnlUZXh0KShfKTtcbiAgICB9XG4gIH07XG59O1xuZXhwb3J0cy5maWx0ZXJGYWN0b3J5ID0gZmlsdGVyRmFjdG9yeTtcbnZhciBmaWx0ZXJzID0gZnVuY3Rpb24gZmlsdGVycyhkYXRhLCBjb2x1bW5zLCBfKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoY3VyckZpbHRlcnMpIHtcbiAgICB2YXIgY2xlYXJGaWx0ZXJzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgZmFjdG9yeSA9ICgwLCBleHBvcnRzLmZpbHRlckZhY3RvcnkpKF8pO1xuICAgIHZhciBmaWx0ZXJTdGF0ZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2xlYXJGaWx0ZXJzKSwgY3VyckZpbHRlcnMpO1xuICAgIHZhciByZXN1bHQgPSBkYXRhO1xuICAgIHZhciBmaWx0ZXJGbjtcbiAgICBPYmplY3Qua2V5cyhmaWx0ZXJTdGF0ZSkuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUZpZWxkKSB7XG4gICAgICB2YXIgY3VycmVudFJlc3VsdDtcbiAgICAgIHZhciBmaWx0ZXJWYWx1ZTtcbiAgICAgIHZhciBjdXN0b21GaWx0ZXI7XG4gICAgICBjb2x1bW5zID0gY29sdW1ucyAhPT0gbnVsbCAmJiBjb2x1bW5zICE9PSB2b2lkIDAgPyBjb2x1bW5zIDogW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGNvbHVtbnNbaV0uZGF0YUZpZWxkID09PSBkYXRhRmllbGQpIHtcbiAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IGNvbHVtbnNbaV0uZmlsdGVyVmFsdWU7XG4gICAgICAgICAgaWYgKGNvbHVtbnNbaV0uZmlsdGVyKSB7XG4gICAgICAgICAgICBjdXN0b21GaWx0ZXIgPSBjb2x1bW5zW2ldLmZpbHRlci5wcm9wcy5vbkZpbHRlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjbGVhckZpbHRlcnNbZGF0YUZpZWxkXSAmJiBjdXN0b21GaWx0ZXIpIHtcbiAgICAgICAgY3VycmVudFJlc3VsdCA9IGN1c3RvbUZpbHRlcihjbGVhckZpbHRlcnNbZGF0YUZpZWxkXS5maWx0ZXJWYWwsIHJlc3VsdCk7XG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudFJlc3VsdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnRSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBmaWx0ZXJPYmogPSBmaWx0ZXJTdGF0ZVtkYXRhRmllbGRdO1xuICAgICAgICBmaWx0ZXJGbiA9IGZhY3RvcnkoZmlsdGVyT2JqLmZpbHRlclR5cGUpO1xuICAgICAgICBpZiAoY3VzdG9tRmlsdGVyKSB7XG4gICAgICAgICAgY3VycmVudFJlc3VsdCA9IGN1c3RvbUZpbHRlcihmaWx0ZXJPYmouZmlsdGVyVmFsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudFJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHJlc3VsdCA9IGZpbHRlckZuKHJlc3VsdCwgZGF0YUZpZWxkLCBmaWx0ZXJPYmosIGZpbHRlclZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBjdXJyZW50UmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG5leHBvcnRzLmZpbHRlcnMgPSBmaWx0ZXJzOyIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbi8qIGVzbGludCByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgRVEsXG4gIEZJTFRFUl9UWVBFUyxcbiAgTXVsdGlTZWxlY3RGaWx0ZXJPcHRpb25zLFxuICBNdWx0aVNlbGVjdEZpbHRlclByb3BzLFxufSBmcm9tIFwiLi4vLi5cIjtcblxuZnVuY3Rpb24gb3B0aW9uc0VxdWFscyhjdXJyT3B0czogYW55LCBwcmV2T3B0czogYW55KSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjdXJyT3B0cyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChjdXJyT3B0c1trZXlzW2ldXSAhPT0gcHJldk9wdHNba2V5c1tpXV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGN1cnJPcHRzKS5sZW5ndGggPT09IE9iamVjdC5rZXlzKHByZXZPcHRzKS5sZW5ndGg7XG59XG5cbmNvbnN0IGdldFNlbGVjdGlvbnMgPSAoY29udGFpbmVyOiBhbnkpID0+IHtcbiAgaWYgKGNvbnRhaW5lciAmJiBjb250YWluZXIuc2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oY29udGFpbmVyLnNlbGVjdGVkT3B0aW9ucykubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0udmFsdWUpO1xuICB9XG4gIGlmIChjb250YWluZXIgJiYgQXJyYXkuaXNBcnJheShjb250YWluZXIudmFsdWUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci52YWx1ZTtcbiAgfVxuICBjb25zdCBzZWxlY3Rpb25zID0gW107XG4gIGNvbnN0IHRvdGFsTGVuID0gY29udGFpbmVyICYmIGNvbnRhaW5lci5vcHRpb25zID8gY29udGFpbmVyLm9wdGlvbnMubGVuZ3RoIDogMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbExlbjsgaSArPSAxKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY29udGFpbmVyLm9wdGlvbnNbaV07XG4gICAgaWYgKG9wdGlvbiAmJiBvcHRpb24uc2VsZWN0ZWQpIHNlbGVjdGlvbnMucHVzaChvcHRpb24udmFsdWUpO1xuICB9XG4gIHJldHVybiBzZWxlY3Rpb25zO1xufTtcblxuaW50ZXJmYWNlIE11bHRpU2VsZWN0RmlsdGVyU3RhdGUge1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xufVxuY2xhc3MgTXVsdGlTZWxlY3RGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQ8XG4gIE11bHRpU2VsZWN0RmlsdGVyUHJvcHMsXG4gIE11bHRpU2VsZWN0RmlsdGVyU3RhdGVcbj4ge1xuICBzZWxlY3RJbnB1dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBNdWx0aVNlbGVjdEZpbHRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuZmlsdGVyID0gdGhpcy5maWx0ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLmFwcGx5RmlsdGVyID0gdGhpcy5hcHBseUZpbHRlci5iaW5kKHRoaXMpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPVxuICAgICAgKHByb3BzLmRlZmF1bHRWYWx1ZSA/PyBbXSkubWFwKFxuICAgICAgICAoaXRlbTogc3RyaW5nKSA9PiAocHJvcHMub3B0aW9ucyBhcyBNdWx0aVNlbGVjdEZpbHRlck9wdGlvbnMpW2l0ZW1dXG4gICAgICApLmxlbmd0aCA+IDA7XG4gICAgdGhpcy5zdGF0ZSA9IHsgaXNTZWxlY3RlZCB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBnZXRGaWx0ZXIgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB2YWx1ZSA9IGdldFNlbGVjdGlvbnModGhpcy5zZWxlY3RJbnB1dCk7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICBpZiAoZ2V0RmlsdGVyKSB7XG4gICAgICBnZXRGaWx0ZXIoKGZpbHRlclZhbDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSBmaWx0ZXJWYWw7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyVmFsKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSkge1xuICAgIGxldCBuZWVkRmlsdGVyID0gZmFsc2U7XG4gICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9PSBwcmV2UHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICBuZWVkRmlsdGVyID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zRXF1YWxzKHRoaXMucHJvcHMub3B0aW9ucywgcHJldlByb3BzLm9wdGlvbnMpKSB7XG4gICAgICBuZWVkRmlsdGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG5lZWRGaWx0ZXIpIHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZ2V0U2VsZWN0aW9ucyh0aGlzLnNlbGVjdElucHV0KSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGNvbnN0IHsgZmlsdGVyU3RhdGUgPSB7fSwgZGVmYXVsdFZhbHVlID0gW10gfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpbHRlclN0YXRlICYmIHR5cGVvZiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWw7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBjb25zdCB7XG4gICAgICBvcHRpb25zLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICBjb2x1bW4sXG4gICAgICB3aXRob3V0RW1wdHlPcHRpb24gPSBmYWxzZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFtdLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmxlbmd0aCA+IDA7XG4gICAgaWYgKCF3aXRob3V0RW1wdHlPcHRpb24gJiYgIWlzU2VsZWN0ZWQpIHtcbiAgICAgIG9wdGlvblRhZ3MucHVzaChcbiAgICAgICAgPG9wdGlvbiBrZXk9XCItMVwiIHZhbHVlPVwiXCIgZGF0YS10ZXN0aWQ9XCJtdWx0aXNlbGVjdC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHtwbGFjZWhvbGRlciB8fCBgU2VsZWN0ICR7Y29sdW1uLnRleHR9Li4uYH1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKChrZXkpID0+XG4gICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgIDxvcHRpb24ga2V5PXtrZXl9IHZhbHVlPXtrZXl9PlxuICAgICAgICAgIHsob3B0aW9ucyBhcyBNdWx0aVNlbGVjdEZpbHRlck9wdGlvbnMpW2tleV19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gIH1cblxuICBjbGVhbkZpbHRlcmVkKCkge1xuICAgIGNvbnN0IHZhbHVlID1cbiAgICAgIHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA6IFtdO1xuICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmFwcGx5RmlsdGVyKHZhbHVlKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxICYmIHZhbHVlWzBdID09PSBcIlwiKSB7XG4gICAgICB2YWx1ZSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGlzU2VsZWN0ZWQ6IHZhbHVlLmxlbmd0aCA+IDAgfSkpO1xuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLk1VTFRJU0VMRUNUKSh2YWx1ZSk7XG4gIH1cblxuICBmaWx0ZXIoZTogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRTZWxlY3Rpb25zKGUudGFyZ2V0KTtcbiAgICB0aGlzLmFwcGx5RmlsdGVyKHZhbHVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZCA9IG51bGwsXG4gICAgICBzdHlsZSxcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgICAgZGVmYXVsdFZhbHVlID0gW10sXG4gICAgICBvbkZpbHRlcixcbiAgICAgIGNvbHVtbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb21wYXJhdG9yID0gRVEsXG4gICAgICB3aXRob3V0RW1wdHlPcHRpb24gPSBmYWxzZSxcbiAgICAgIGNhc2VTZW5zaXRpdmUgPSB0cnVlLFxuICAgICAgZ2V0RmlsdGVyLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qgc2VsZWN0Q2xhc3MgPSBgZmlsdGVyIHNlbGVjdC1maWx0ZXIgZm9ybS1jb250cm9sICR7Y2xhc3NOYW1lfSAke3RoaXMuc3RhdGUuaXNTZWxlY3RlZCA/IFwiXCIgOiBcInBsYWNlaG9sZGVyLXNlbGVjdGVkXCJcbiAgICAgIH1gO1xuICAgIGNvbnN0IGVsbUlkID0gYG11bHRpc2VsZWN0LWZpbHRlci1jb2x1bW4tJHtjb2x1bW4uZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJcbiAgICAgIH1gO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIiBodG1sRm9yPXtlbG1JZH0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5GaWx0ZXIgYnkge2NvbHVtbi50ZXh0fTwvc3Bhbj5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgIHJlZj17KG4pID0+IHsgdGhpcy5zZWxlY3RJbnB1dCA9IG47IH19XG4gICAgICAgICAgaWQ9e2VsbUlkfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgIGNsYXNzTmFtZT17c2VsZWN0Q2xhc3N9XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMuZmlsdGVyfVxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5nZXREZWZhdWx0VmFsdWUoKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm11bHRpc2VsZWN0LWZpbHRlclwiXG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5nZXRPcHRpb25zKCl9XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZGVmYXVsdFZhbHVlOiBbXSxcbiAgICBmaWx0ZXJTdGF0ZToge30sXG4gICAgY2xhc3NOYW1lOiBcIlwiLFxuICAgIHdpdGhvdXRFbXB0eU9wdGlvbjogZmFsc2UsXG4gICAgY29tcGFyYXRvcjogRVEsXG4gICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpZDogbnVsbCxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTXVsdGlTZWxlY3RGaWx0ZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gVGhlIGluZmVycmVkIHR5cGUgb2YgJ2RlZmF1bHQnIGNhbm5vdCBiZSBuYW1lZCB3aXRob3V0IGEgcmVmZXJlbmNlIHRvICdyZWFjdC1ib290c3RyYXAtdGFibGUtbmcvbm9kZV9tb2R1bGVzL0B0eXBlcy9wcm9wLXR5cGVzJy5cbi8vIFRoaXMgaXMgbGlrZWx5IG5vdCBwb3J0YWJsZS4gQSB0eXBlIGFubm90YXRpb24gaXMgbmVjZXNzYXJ5LnRzKDI3NDIpXG52YXIgX19pbXBvcnREZWZhdWx0ID0gdm9pZCAwICYmICh2b2lkIDApLl9faW1wb3J0RGVmYXVsdCB8fCBmdW5jdGlvbiAobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgXCJkZWZhdWx0XCI6IG1vZFxuICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmN1c3RvbUZpbHRlciA9IGV4cG9ydHMuZGF0ZUZpbHRlciA9IGV4cG9ydHMubnVtYmVyRmlsdGVyID0gZXhwb3J0cy5tdWx0aVNlbGVjdEZpbHRlciA9IGV4cG9ydHMuc2VsZWN0RmlsdGVyID0gZXhwb3J0cy50ZXh0RmlsdGVyID0gZXhwb3J0cy5Db21wYXJhdG9yTnVtYmVyID0gZXhwb3J0cy5MRSA9IGV4cG9ydHMuTFQgPSBleHBvcnRzLkdFID0gZXhwb3J0cy5HVCA9IGV4cG9ydHMuTkUgPSBleHBvcnRzLkVRID0gZXhwb3J0cy5MSUtFID0gZXhwb3J0cy5GSUxURVJfREVMQVkgPSBleHBvcnRzLkZJTFRFUl9UWVBFUyA9IHZvaWQgMDtcbnZhciBkYXRlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL2NvbXBvbmVudHMvZGF0ZVwiKSk7XG52YXIgbXVsdGlzZWxlY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29tcG9uZW50cy9tdWx0aXNlbGVjdFwiKSk7XG52YXIgbnVtYmVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL2NvbXBvbmVudHMvbnVtYmVyXCIpKTtcbnZhciBzZWxlY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29tcG9uZW50cy9zZWxlY3RcIikpO1xudmFyIHRleHRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9zcmMvY29tcG9uZW50cy90ZXh0XCIpKTtcbnZhciBjb250ZXh0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc3JjL2NvbnRleHRcIikpO1xudmFyIEZJTFRFUl9UWVBFUztcbihmdW5jdGlvbiAoRklMVEVSX1RZUEVTKSB7XG4gIEZJTFRFUl9UWVBFU1tcIlRFWFRcIl0gPSBcIlRFWFRcIjtcbiAgRklMVEVSX1RZUEVTW1wiU0VMRUNUXCJdID0gXCJTRUxFQ1RcIjtcbiAgRklMVEVSX1RZUEVTW1wiTVVMVElTRUxFQ1RcIl0gPSBcIk1VTFRJU0VMRUNUXCI7XG4gIEZJTFRFUl9UWVBFU1tcIk5VTUJFUlwiXSA9IFwiTlVNQkVSXCI7XG4gIEZJTFRFUl9UWVBFU1tcIkRBVEVcIl0gPSBcIkRBVEVcIjtcbn0pKEZJTFRFUl9UWVBFUyB8fCAoZXhwb3J0cy5GSUxURVJfVFlQRVMgPSBGSUxURVJfVFlQRVMgPSB7fSkpO1xuZXhwb3J0cy5GSUxURVJfREVMQVkgPSA1MDA7XG4vKipcbiAqIEZpbHRlciBjb21wYXJhdG9ycyB1c2VkIGZvciB0YWJsZSBmaWx0ZXJzXG4gKi9cbmV4cG9ydHMuTElLRSA9IFwiTElLRVwiO1xuZXhwb3J0cy5FUSA9IFwiPVwiO1xuZXhwb3J0cy5ORSA9IFwiIT1cIjtcbmV4cG9ydHMuR1QgPSBcIj5cIjtcbmV4cG9ydHMuR0UgPSBcIj49XCI7XG5leHBvcnRzLkxUID0gXCI8XCI7XG5leHBvcnRzLkxFID0gXCI8PVwiO1xuZXhwb3J0cy5Db21wYXJhdG9yTnVtYmVyID0gNztcbnZhciB0ZXh0RmlsdGVyID0gZnVuY3Rpb24gdGV4dEZpbHRlcigpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBGaWx0ZXI6IHRleHRfMVtcImRlZmF1bHRcIl0sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy50ZXh0RmlsdGVyID0gdGV4dEZpbHRlcjtcbnZhciBzZWxlY3RGaWx0ZXIgPSBmdW5jdGlvbiBzZWxlY3RGaWx0ZXIoKSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgRmlsdGVyOiBzZWxlY3RfMVtcImRlZmF1bHRcIl0sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy5zZWxlY3RGaWx0ZXIgPSBzZWxlY3RGaWx0ZXI7XG52YXIgbXVsdGlTZWxlY3RGaWx0ZXIgPSBmdW5jdGlvbiBtdWx0aVNlbGVjdEZpbHRlcigpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBGaWx0ZXI6IG11bHRpc2VsZWN0XzFbXCJkZWZhdWx0XCJdLFxuICAgIHByb3BzOiBwcm9wc1xuICB9O1xufTtcbmV4cG9ydHMubXVsdGlTZWxlY3RGaWx0ZXIgPSBtdWx0aVNlbGVjdEZpbHRlcjtcbnZhciBudW1iZXJGaWx0ZXIgPSBmdW5jdGlvbiBudW1iZXJGaWx0ZXIoKSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgRmlsdGVyOiBudW1iZXJfMVtcImRlZmF1bHRcIl0sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy5udW1iZXJGaWx0ZXIgPSBudW1iZXJGaWx0ZXI7XG52YXIgZGF0ZUZpbHRlciA9IGZ1bmN0aW9uIGRhdGVGaWx0ZXIoKSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgRmlsdGVyOiBkYXRlXzFbXCJkZWZhdWx0XCJdLFxuICAgIHByb3BzOiBwcm9wc1xuICB9O1xufTtcbmV4cG9ydHMuZGF0ZUZpbHRlciA9IGRhdGVGaWx0ZXI7XG52YXIgY3VzdG9tRmlsdGVyID0gZnVuY3Rpb24gY3VzdG9tRmlsdGVyKCkge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICByZXR1cm4ge1xuICAgIEZpbHRlcjogZnVuY3Rpb24gRmlsdGVyKCkge30sXG4gICAgcHJvcHM6IHByb3BzXG4gIH07XG59O1xuZXhwb3J0cy5jdXN0b21GaWx0ZXIgPSBjdXN0b21GaWx0ZXI7XG4vLyBkZWNsYXJlIGZ1bmN0aW9uIGZpbHRlckZhY3RvcnkocHJvcHM/OiBGaWx0ZXJGYWN0b3J5UHJvcHMpOiB1bmtub3duO1xuLy8gZXhwb3J0IGRlZmF1bHQgZmlsdGVyRmFjdG9yeTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgY3JlYXRlQ29udGV4dDogY29udGV4dF8xW1wiZGVmYXVsdFwiXSxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH07XG59OyIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCBjbGFzcy1tZXRob2RzLXVzZS10aGlzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFUSwgRklMVEVSX1RZUEVTLCBTZWxlY3RGaWx0ZXJQcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5mdW5jdGlvbiBvcHRpb25zRXF1YWxzKGN1cnJPcHRzOiBhbnksIHByZXZPcHRzOiBhbnkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY3Vyck9wdHMpKSB7XG4gICAgaWYgKGN1cnJPcHRzLmxlbmd0aCA9PT0gcHJldk9wdHMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJPcHRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdXJyT3B0c1tpXS52YWx1ZSAhPT0gcHJldk9wdHNbaV0udmFsdWUgfHxcbiAgICAgICAgICBjdXJyT3B0c1tpXS5sYWJlbCAhPT0gcHJldk9wdHNbaV0ubGFiZWxcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjdXJyT3B0cyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChjdXJyT3B0c1trZXlzW2ldXSAhPT0gcHJldk9wdHNba2V5c1tpXV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGN1cnJPcHRzKS5sZW5ndGggPT09IE9iamVjdC5rZXlzKHByZXZPcHRzKS5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIGdldE9wdGlvblZhbHVlKG9wdGlvbnM6IGFueSwga2V5OiBhbnkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICBjb25zdCByZXN1bHQgPSBvcHRpb25zXG4gICAgICAuZmlsdGVyKCh7IGxhYmVsIH0pID0+IGxhYmVsID09PSBrZXkpXG4gICAgICAubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcbiAgICByZXR1cm4gcmVzdWx0WzBdO1xuICB9XG4gIHJldHVybiBvcHRpb25zW2tleV07XG59XG5cbmludGVyZmFjZSBTZWxlY3RGaWx0ZXJTdGF0ZSB7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbmNsYXNzIFNlbGVjdEZpbHRlciBleHRlbmRzIENvbXBvbmVudDxTZWxlY3RGaWx0ZXJQcm9wcywgU2VsZWN0RmlsdGVyU3RhdGU+IHtcbiAgb3B0aW9uczogYW55O1xuICBzZWxlY3RJbnB1dDogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuZmlsdGVyID0gdGhpcy5maWx0ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMocHJvcHMpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPVxuICAgICAgZ2V0T3B0aW9uVmFsdWUodGhpcy5vcHRpb25zLCB0aGlzLmdldERlZmF1bHRWYWx1ZSgpKSAhPT0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc3RhdGUgPSB7IGlzU2VsZWN0ZWQgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgY29sdW1uLCBvbkZpbHRlciwgZ2V0RmlsdGVyIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdElucHV0LnZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gXCJcIikge1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuU0VMRUNULCB0cnVlKSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgIGdldEZpbHRlcigoZmlsdGVyVmFsOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiBmaWx0ZXJWYWwgIT09IFwiXCIgfSkpO1xuICAgICAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gZmlsdGVyVmFsO1xuXG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5TRUxFQ1QpKGZpbHRlclZhbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBTZWxlY3RGaWx0ZXJQcm9wcykge1xuICAgIGxldCBuZWVkRmlsdGVyID0gZmFsc2U7XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyLCBkZWZhdWx0VmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbmV4dE9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnModGhpcy5wcm9wcyk7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gcHJldlByb3BzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RJbnB1dC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnNFcXVhbHMobmV4dE9wdGlvbnMsIHRoaXMub3B0aW9ucykpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG5leHRPcHRpb25zO1xuICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgfVxuICAgIGlmIChuZWVkRmlsdGVyKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0SW5wdXQudmFsdWU7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLlNFTEVDVCkodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldE9wdGlvbnMocHJvcHM6IFNlbGVjdEZpbHRlclByb3BzKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwcm9wcy5vcHRpb25zID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gcHJvcHMub3B0aW9ucyhwcm9wcy5jb2x1bW4pXG4gICAgICA6IHByb3BzLm9wdGlvbnM7XG4gIH1cblxuICBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXJTdGF0ZSwgZGVmYXVsdFZhbHVlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiB0eXBlb2YgZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gZmlsdGVyU3RhdGUuZmlsdGVyVmFsO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9XG4gICAgICB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgOiBcIlwiO1xuICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgaXNTZWxlY3RlZDogdmFsdWUgIT09IFwiXCIgfSkpO1xuICAgIHRoaXMuc2VsZWN0SW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5TRUxFQ1QpKHZhbHVlKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIiB9KSk7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuU0VMRUNUKSh2YWx1ZSk7XG4gIH1cblxuICBmaWx0ZXIoZTogYW55KSB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gZS50YXJnZXQ7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIiB9KSk7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuU0VMRUNUKSh2YWx1ZSk7XG4gIH1cblxuICByZW5kZXJPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBjb25zdCB7IG9wdGlvbnMgfSA9IHRoaXM7XG4gICAgY29uc3QgeyBwbGFjZWhvbGRlciwgY29sdW1uLCB3aXRob3V0RW1wdHlPcHRpb24sIGRlZmF1bHRWYWx1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgZGVmYXVsdFZhbHVlICE9PSBcIlwiO1xuICAgIGlmICghd2l0aG91dEVtcHR5T3B0aW9uICYmICFpc1NlbGVjdGVkKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgIDxvcHRpb24ga2V5PVwiLTFcIiB2YWx1ZT1cIlwiIGRhdGEtdGVzdGlkPVwic2VsZWN0LWZpbHRlci1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHtwbGFjZWhvbGRlciB8fCBgU2VsZWN0ICR7Y29sdW1uLnRleHR9Li4uYH1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgb3B0aW9ucy5mb3JFYWNoKCh7IHZhbHVlLCBsYWJlbCB9KSA9PlxuICAgICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgICAgPG9wdGlvbiBrZXk9e3ZhbHVlfSB2YWx1ZT17dmFsdWV9PlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKChrZXkpID0+XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChcbiAgICAgICAgICA8b3B0aW9uIGtleT17a2V5fSB2YWx1ZT17a2V5fT5cbiAgICAgICAgICAgIHtvcHRpb25zW2tleV19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkLFxuICAgICAgc3R5bGUsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBvbkZpbHRlcixcbiAgICAgIGNvbHVtbixcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb21wYXJhdG9yLFxuICAgICAgd2l0aG91dEVtcHR5T3B0aW9uLFxuICAgICAgY2FzZVNlbnNpdGl2ZSxcbiAgICAgIGdldEZpbHRlcixcbiAgICAgIGZpbHRlclN0YXRlLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qgc2VsZWN0Q2xhc3MgPSBgZmlsdGVyIHNlbGVjdC1maWx0ZXIgZm9ybS1jb250cm9sICR7Y2xhc3NOYW1lfSAke3RoaXMuc3RhdGUuaXNTZWxlY3RlZCA/IFwiXCIgOiBcInBsYWNlaG9sZGVyLXNlbGVjdGVkXCJcbiAgICAgIH1gO1xuICAgIGNvbnN0IGVsbUlkID0gYHNlbGVjdC1maWx0ZXItY29sdW1uLSR7Y29sdW1uLmRhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwiXG4gICAgICB9YDtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmlsdGVyLWxhYmVsXCIgaHRtbEZvcj17ZWxtSWR9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+RmlsdGVyIGJ5IHtjb2x1bW4udGV4dH08L3NwYW4+XG4gICAgICAgIDxzZWxlY3RcbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMuc2VsZWN0SW5wdXQgPSBuOyB9fVxuICAgICAgICAgIGlkPXtlbG1JZH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtzZWxlY3RDbGFzc31cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5maWx0ZXJ9XG4gICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXt0aGlzLmdldERlZmF1bHRWYWx1ZSgpIHx8IFwiXCJ9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJzZWxlY3QtZmlsdGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJlbmRlck9wdGlvbnMoKX1cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkZWZhdWx0VmFsdWU6ICcnLFxuICAgIGZpbHRlclN0YXRlOiB7fSxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIHdpdGhvdXRFbXB0eU9wdGlvbjogZmFsc2UsXG4gICAgY29tcGFyYXRvcjogRVEsXG4gICAgY2FzZVNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpZDogbnVsbFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RGaWx0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fOyIsIlxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBGSUxURVJfVFlQRVMsIFRleHRGaWx0ZXJQcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5pbnRlcmZhY2UgVGV4dEZpbHRlclN0YXRlIHtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuY2xhc3MgVGV4dEZpbHRlciBleHRlbmRzIENvbXBvbmVudDxUZXh0RmlsdGVyUHJvcHMsIFRleHRGaWx0ZXJTdGF0ZT4ge1xuICBpbnB1dDogeyB2YWx1ZTogYW55IH0gfCBhbnk7XG4gIHRpbWVvdXQ6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IFRleHRGaWx0ZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMuaW5wdXQgPSB7fTtcbiAgICBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLmZpbHRlclN0YXRlICYmXG4gICAgICAgIHR5cGVvZiBwcm9wcy5maWx0ZXJTdGF0ZS5maWx0ZXJWYWwgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gcHJvcHMuZmlsdGVyU3RhdGUuZmlsdGVyVmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb3BzLmRlZmF1bHRWYWx1ZSA/PyBcIlwiO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWU6IGdldERlZmF1bHRWYWx1ZSgpLFxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IG9uRmlsdGVyLCBnZXRGaWx0ZXIsIGNvbHVtbiB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlO1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIEZJTFRFUl9UWVBFUy5URVhULCB0cnVlKShkZWZhdWx0VmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICBpZiAoZ2V0RmlsdGVyKSB7XG4gICAgICBnZXRGaWx0ZXIoKGZpbHRlclZhbDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgdmFsdWU6IGZpbHRlclZhbCB9KSk7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5URVhUKShmaWx0ZXJWYWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jbGVhblRpbWVyKCk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnkpIHtcbiAgICBpZiAocHJldlByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID8/IFwiXCI7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IG5leHRWYWx1ZSB9LCAoKSA9PiB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuVEVYVCkobmV4dFZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlcihlOiBhbnkpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuY2xlYW5UaW1lcigpO1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyB2YWx1ZTogZmlsdGVyVmFsdWUgfSkpO1xuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgRklMVEVSX1RZUEVTLlRFWFQpKGZpbHRlclZhbHVlKTtcbiAgICB9LCB0aGlzLnByb3BzLmRlbGF5KTtcbiAgfVxuXG4gIGNsZWFuVGltZXIoKSB7XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID8/IFwiXCI7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyB2YWx1ZSB9KSk7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuVEVYVCkodmFsdWUpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIoZmlsdGVyVGV4dDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJUZXh0ID8/IFwiXCI7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyB2YWx1ZSB9KSk7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMucHJvcHMuY29sdW1uLCBGSUxURVJfVFlQRVMuVEVYVCkodmFsdWUpO1xuICB9XG5cbiAgaGFuZGxlQ2xpY2soZTogYW55KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2xpY2soZSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkID0gbnVsbCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgY29sdW1uOiB7IGRhdGFGaWVsZCwgdGV4dCB9LFxuICAgICAgc3R5bGUsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBvbkZpbHRlcixcbiAgICAgIGNhc2VTZW5zaXRpdmUgPSBmYWxzZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IFwiXCIsXG4gICAgICBnZXRGaWx0ZXIsXG4gICAgICBmaWx0ZXJTdGF0ZSA9IHt9LFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgZWxtSWQgPSBgdGV4dC1maWx0ZXItY29sdW1uLSR7ZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJ9YDtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmlsdGVyLWxhYmVsXCIgaHRtbEZvcj17ZWxtSWR9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+RmlsdGVyIGJ5IHt0ZXh0fTwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLmlucHV0ID0gbjsgfX1cbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgaWQ9e2VsbUlkfVxuICAgICAgICAgIGNsYXNzTmFtZT17YGZpbHRlciB0ZXh0LWZpbHRlciBmb3JtLWNvbnRyb2wgJHtjbGFzc05hbWV9YH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMuZmlsdGVyfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyIHx8IGBFbnRlciAke3RleHR9Li4uYH1cbiAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInRleHQtZmlsdGVyXCJcbiAgICAgICAgLz5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZGVsYXk6IDUwMCxcbiAgICBmaWx0ZXJTdGF0ZToge30sXG4gICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICAgIGNhc2VTZW5zaXRpdmU6IGZhbHNlLFxuICAgIGlkOiBudWxsLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0RmlsdGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJpZFwiLCBcInN0eWxlXCIsIFwiY2xhc3NOYW1lXCIsIFwiZmlsdGVyU3RhdGVcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJvbkZpbHRlclwiLCBcImNvbHVtblwiLCBcIm9wdGlvbnNcIiwgXCJjb21wYXJhdG9yXCIsIFwid2l0aG91dEVtcHR5T3B0aW9uXCIsIFwiY2FzZVNlbnNpdGl2ZVwiLCBcImdldEZpbHRlclwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcmVhY3Qvbm8tdW51c2VkLXByb3AtdHlwZXM6IDAgKi9cbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX18xID0gcmVxdWlyZShcIi4uLy4uXCIpO1xuZnVuY3Rpb24gb3B0aW9uc0VxdWFscyhjdXJyT3B0cywgcHJldk9wdHMpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjdXJyT3B0cyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChjdXJyT3B0c1trZXlzW2ldXSAhPT0gcHJldk9wdHNba2V5c1tpXV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGN1cnJPcHRzKS5sZW5ndGggPT09IE9iamVjdC5rZXlzKHByZXZPcHRzKS5sZW5ndGg7XG59XG52YXIgZ2V0U2VsZWN0aW9ucyA9IGZ1bmN0aW9uIGdldFNlbGVjdGlvbnMoY29udGFpbmVyKSB7XG4gIGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLnNlbGVjdGVkT3B0aW9ucykge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5zZWxlY3RlZE9wdGlvbnMpLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGNvbnRhaW5lciAmJiBBcnJheS5pc0FycmF5KGNvbnRhaW5lci52YWx1ZSkpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLnZhbHVlO1xuICB9XG4gIHZhciBzZWxlY3Rpb25zID0gW107XG4gIHZhciB0b3RhbExlbiA9IGNvbnRhaW5lciAmJiBjb250YWluZXIub3B0aW9ucyA/IGNvbnRhaW5lci5vcHRpb25zLmxlbmd0aCA6IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxMZW47IGkgKz0gMSkge1xuICAgIHZhciBvcHRpb24gPSBjb250YWluZXIub3B0aW9uc1tpXTtcbiAgICBpZiAob3B0aW9uICYmIG9wdGlvbi5zZWxlY3RlZCkgc2VsZWN0aW9ucy5wdXNoKG9wdGlvbi52YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdGlvbnM7XG59O1xudmFyIE11bHRpU2VsZWN0RmlsdGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gTXVsdGlTZWxlY3RGaWx0ZXIocHJvcHMpIHtcbiAgICB2YXIgX3Byb3BzJGRlZmF1bHRWYWx1ZTtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE11bHRpU2VsZWN0RmlsdGVyKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgTXVsdGlTZWxlY3RGaWx0ZXIsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJzZWxlY3RJbnB1dFwiLCB2b2lkIDApO1xuICAgIF90aGlzLmZpbHRlciA9IF90aGlzLmZpbHRlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5hcHBseUZpbHRlciA9IF90aGlzLmFwcGx5RmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgIHZhciBpc1NlbGVjdGVkID0gKChfcHJvcHMkZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlKSAhPT0gbnVsbCAmJiBfcHJvcHMkZGVmYXVsdFZhbHVlICE9PSB2b2lkIDAgPyBfcHJvcHMkZGVmYXVsdFZhbHVlIDogW10pLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIHByb3BzLm9wdGlvbnNbaXRlbV07XG4gICAgfSkubGVuZ3RoID4gMDtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWRcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoTXVsdGlTZWxlY3RGaWx0ZXIsIF9yZWFjdF8xJENvbXBvbmVudCk7XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoTXVsdGlTZWxlY3RGaWx0ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgZ2V0RmlsdGVyID0gdGhpcy5wcm9wcy5nZXRGaWx0ZXI7XG4gICAgICB2YXIgdmFsdWUgPSBnZXRTZWxlY3Rpb25zKHRoaXMuc2VsZWN0SW5wdXQpO1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgb25GaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzXG4gICAgICBpZiAoZ2V0RmlsdGVyKSB7XG4gICAgICAgIGdldEZpbHRlcihmdW5jdGlvbiAoZmlsdGVyVmFsKSB7XG4gICAgICAgICAgX3RoaXMyLnNlbGVjdElucHV0LnZhbHVlID0gZmlsdGVyVmFsO1xuICAgICAgICAgIF90aGlzMi5hcHBseUZpbHRlcihmaWx0ZXJWYWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBuZWVkRmlsdGVyID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT09IHByZXZQcm9wcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgbmVlZEZpbHRlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zRXF1YWxzKHRoaXMucHJvcHMub3B0aW9ucywgcHJldlByb3BzLm9wdGlvbnMpKSB7XG4gICAgICAgIG5lZWRGaWx0ZXIgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRGaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihnZXRTZWxlY3Rpb25zKHRoaXMuc2VsZWN0SW5wdXQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGVmYXVsdFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGZpbHRlclN0YSA9IF90aGlzJHByb3BzLmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzJGZpbHRlclN0YSA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wcyRmaWx0ZXJTdGEsXG4gICAgICAgIF90aGlzJHByb3BzJGRlZmF1bHRWYSA9IF90aGlzJHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMkZGVmYXVsdFZhID09PSB2b2lkIDAgPyBbXSA6IF90aGlzJHByb3BzJGRlZmF1bHRWYTtcbiAgICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiB0eXBlb2YgZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczIub3B0aW9ucyxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczIucGxhY2Vob2xkZXIsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzMi5jb2x1bW4sXG4gICAgICAgIF90aGlzJHByb3BzMiR3aXRob3V0RSA9IF90aGlzJHByb3BzMi53aXRob3V0RW1wdHlPcHRpb24sXG4gICAgICAgIHdpdGhvdXRFbXB0eU9wdGlvbiA9IF90aGlzJHByb3BzMiR3aXRob3V0RSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wczIkd2l0aG91dEUsXG4gICAgICAgIF90aGlzJHByb3BzMiRkZWZhdWx0ViA9IF90aGlzJHByb3BzMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzMiRkZWZhdWx0ViA9PT0gdm9pZCAwID8gW10gOiBfdGhpcyRwcm9wczIkZGVmYXVsdFY7XG4gICAgICB2YXIgaXNTZWxlY3RlZCA9IGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUubGVuZ3RoID4gMDtcbiAgICAgIGlmICghd2l0aG91dEVtcHR5T3B0aW9uICYmICFpc1NlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IFwiLTFcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibXVsdGlzZWxlY3QtcGxhY2Vob2xkZXJcIlxuICAgICAgICB9LCBwbGFjZWhvbGRlciB8fCBcIlNlbGVjdCBcIi5jb25jYXQoY29sdW1uLnRleHQsIFwiLi4uXCIpKSk7XG4gICAgICB9XG4gICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZToga2V5XG4gICAgICAgIH0sIG9wdGlvbnNba2V5XSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xlYW5GaWx0ZXJlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhbkZpbHRlcmVkKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlIDogW107XG4gICAgICB0aGlzLnNlbGVjdElucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYXBwbHlGaWx0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXBwbHlGaWx0ZXIodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEgJiYgdmFsdWVbMF0gPT09IFwiXCIpIHtcbiAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5NVUxUSVNFTEVDVCkodmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaWx0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmlsdGVyKGUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldFNlbGVjdGlvbnMoZS50YXJnZXQpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczMkaWQgPSBfdGhpcyRwcm9wczMuaWQsXG4gICAgICAgIGlkID0gX3RoaXMkcHJvcHMzJGlkID09PSB2b2lkIDAgPyBudWxsIDogX3RoaXMkcHJvcHMzJGlkLFxuICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzMy5zdHlsZSxcbiAgICAgICAgX3RoaXMkcHJvcHMzJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMzLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMzJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMzJGNsYXNzTmFtLFxuICAgICAgICBfdGhpcyRwcm9wczMkZmlsdGVyU3QgPSBfdGhpcyRwcm9wczMuZmlsdGVyU3RhdGUsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHMzJGZpbHRlclN0ID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzMyRmaWx0ZXJTdCxcbiAgICAgICAgX3RoaXMkcHJvcHMzJGRlZmF1bHRWID0gX3RoaXMkcHJvcHMzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHMzJGRlZmF1bHRWID09PSB2b2lkIDAgPyBbXSA6IF90aGlzJHByb3BzMyRkZWZhdWx0VixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczMub25GaWx0ZXIsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzMy5jb2x1bW4sXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczMub3B0aW9ucyxcbiAgICAgICAgX3RoaXMkcHJvcHMzJGNvbXBhcmF0ID0gX3RoaXMkcHJvcHMzLmNvbXBhcmF0b3IsXG4gICAgICAgIGNvbXBhcmF0b3IgPSBfdGhpcyRwcm9wczMkY29tcGFyYXQgPT09IHZvaWQgMCA/IF9fMS5FUSA6IF90aGlzJHByb3BzMyRjb21wYXJhdCxcbiAgICAgICAgX3RoaXMkcHJvcHMzJHdpdGhvdXRFID0gX3RoaXMkcHJvcHMzLndpdGhvdXRFbXB0eU9wdGlvbixcbiAgICAgICAgd2l0aG91dEVtcHR5T3B0aW9uID0gX3RoaXMkcHJvcHMzJHdpdGhvdXRFID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzMyR3aXRob3V0RSxcbiAgICAgICAgX3RoaXMkcHJvcHMzJGNhc2VTZW5zID0gX3RoaXMkcHJvcHMzLmNhc2VTZW5zaXRpdmUsXG4gICAgICAgIGNhc2VTZW5zaXRpdmUgPSBfdGhpcyRwcm9wczMkY2FzZVNlbnMgPT09IHZvaWQgMCA/IHRydWUgOiBfdGhpcyRwcm9wczMkY2FzZVNlbnMsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzMy5nZXRGaWx0ZXIsXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBfZXhjbHVkZWQpO1xuICAgICAgdmFyIHNlbGVjdENsYXNzID0gXCJmaWx0ZXIgc2VsZWN0LWZpbHRlciBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KGNsYXNzTmFtZSwgXCIgXCIpLmNvbmNhdCh0aGlzLnN0YXRlLmlzU2VsZWN0ZWQgPyBcIlwiIDogXCJwbGFjZWhvbGRlci1zZWxlY3RlZFwiKTtcbiAgICAgIHZhciBlbG1JZCA9IFwibXVsdGlzZWxlY3QtZmlsdGVyLWNvbHVtbi1cIi5jb25jYXQoY29sdW1uLmRhdGFGaWVsZCkuY29uY2F0KGlkID8gXCItXCIuY29uY2F0KGlkKSA6IFwiXCIpO1xuICAgICAgcmV0dXJuIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJmaWx0ZXItbGFiZWxcIixcbiAgICAgICAgaHRtbEZvcjogZWxtSWRcbiAgICAgIH0sIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInNyLW9ubHlcIlxuICAgICAgfSwgXCJGaWx0ZXIgYnkgXCIsIGNvbHVtbi50ZXh0KSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3QpLCB7fSwge1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihuKSB7XG4gICAgICAgICAgX3RoaXMzLnNlbGVjdElucHV0ID0gbjtcbiAgICAgICAgfSxcbiAgICAgICAgaWQ6IGVsbUlkLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICBjbGFzc05hbWU6IHNlbGVjdENsYXNzLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5maWx0ZXIsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgICAgIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCksXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJtdWx0aXNlbGVjdC1maWx0ZXJcIlxuICAgICAgfSksIHRoaXMuZ2V0T3B0aW9ucygpKSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShNdWx0aVNlbGVjdEZpbHRlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBkZWZhdWx0VmFsdWU6IFtdLFxuICBmaWx0ZXJTdGF0ZToge30sXG4gIGNsYXNzTmFtZTogXCJcIixcbiAgd2l0aG91dEVtcHR5T3B0aW9uOiBmYWxzZSxcbiAgY29tcGFyYXRvcjogX18xLkVRLFxuICBjYXNlU2Vuc2l0aXZlOiB0cnVlLFxuICBpZDogbnVsbFxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IE11bHRpU2VsZWN0RmlsdGVyOyIsIi8qIGVzbGludCBlcWVxZXE6IDAgKi9cbi8qIGVzbGludCBuby1jb25zb2xlOiAwICovXG5pbXBvcnQgeyBFUSwgRklMVEVSX1RZUEVTLCBHRSwgR1QsIExFLCBMSUtFLCBMVCwgTkUgfSBmcm9tIFwiLi5cIjtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckJ5VGV4dCA9XG4gIChfOiBhbnkpID0+XG4gIChcbiAgICBkYXRhOiBhbnksXG4gICAgZGF0YUZpZWxkOiBhbnksXG4gICAgeyBmaWx0ZXJWYWw6IHVzZXJJbnB1dCA9IFwiXCIsIGNvbXBhcmF0b3IgPSBMSUtFLCBjYXNlU2Vuc2l0aXZlIH06IGFueSxcbiAgICBjdXN0b21GaWx0ZXJWYWx1ZTogYW55XG4gICkgPT4ge1xuICAgIC8vIG1ha2Ugc3VyZSBmaWx0ZXIgdmFsdWUgdG8gYmUgYSBzdHJpbmdcbiAgICBjb25zdCBmaWx0ZXJWYWwgPSB1c2VySW5wdXQudG9TdHJpbmcoKTtcblxuICAgIHJldHVybiBkYXRhLmZpbHRlcigocm93OiBhbnkpID0+IHtcbiAgICAgIGxldCBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgaWYgKGN1c3RvbUZpbHRlclZhbHVlKSB7XG4gICAgICAgIGNlbGwgPSBjdXN0b21GaWx0ZXJWYWx1ZShjZWxsLCByb3cpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2VsbFN0ciA9IF8uaXNEZWZpbmVkKGNlbGwpID8gY2VsbC50b1N0cmluZygpIDogXCJcIjtcbiAgICAgIGlmIChjb21wYXJhdG9yID09PSBFUSkge1xuICAgICAgICByZXR1cm4gY2VsbFN0ciA9PT0gZmlsdGVyVmFsO1xuICAgICAgfVxuICAgICAgaWYgKGNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIGNlbGxTdHIuaW5jbHVkZXMoZmlsdGVyVmFsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgY2VsbFN0ci50b0xvY2FsZVVwcGVyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsLnRvTG9jYWxlVXBwZXJDYXNlKCkpICE9PVxuICAgICAgICAtMVxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckJ5TnVtYmVyID1cbiAgKF86IGFueSkgPT5cbiAgKFxuICAgIGRhdGE6IGFueSxcbiAgICBkYXRhRmllbGQ6IGFueSxcbiAgICB7IGZpbHRlclZhbDogeyBjb21wYXJhdG9yLCBudW1iZXIgfSB9OiBhbnksXG4gICAgY3VzdG9tRmlsdGVyVmFsdWU6IGFueVxuICApID0+XG4gICAgZGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiB7XG4gICAgICBpZiAobnVtYmVyID09PSBcIlwiIHx8ICFjb21wYXJhdG9yKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGxldCBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuXG4gICAgICBpZiAoY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICAgICAgY2VsbCA9IGN1c3RvbUZpbHRlclZhbHVlKGNlbGwsIHJvdyk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY29tcGFyYXRvcikge1xuICAgICAgICBjYXNlIEVROiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgPT0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgR1Q6IHtcbiAgICAgICAgICByZXR1cm4gY2VsbCA+IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEdFOiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgPj0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTFQ6IHtcbiAgICAgICAgICByZXR1cm4gY2VsbCA8IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExFOiB7XG4gICAgICAgICAgcmV0dXJuIGNlbGwgPD0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTkU6IHtcbiAgICAgICAgICByZXR1cm4gY2VsbCAhPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOdW1iZXIgY29tcGFyYXRvciBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJCeURhdGUgPVxuICAoXzogYW55KSA9PlxuICAoXG4gICAgZGF0YTogYW55LFxuICAgIGRhdGFGaWVsZDogYW55LFxuICAgIHsgZmlsdGVyVmFsOiB7IGNvbXBhcmF0b3IsIGRhdGUgfSB9OiBhbnksXG4gICAgY3VzdG9tRmlsdGVyVmFsdWU6IGFueVxuICApID0+IHtcbiAgICBpZiAoIWRhdGUgfHwgIWNvbXBhcmF0b3IpIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IGZpbHRlckRhdGUgPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICBjb25zdCBmaWx0ZXJNb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBjb25zdCBmaWx0ZXJZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuXG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4ge1xuICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgIGxldCBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuXG4gICAgICBpZiAoY3VzdG9tRmlsdGVyVmFsdWUpIHtcbiAgICAgICAgY2VsbCA9IGN1c3RvbUZpbHRlclZhbHVlKGNlbGwsIHJvdyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY2VsbCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICBjZWxsID0gbmV3IERhdGUoY2VsbCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjZWxsLmdldFVUQ0RhdGUoKTtcbiAgICAgIGNvbnN0IHRhcmdldE1vbnRoID0gY2VsbC5nZXRVVENNb250aCgpO1xuICAgICAgY29uc3QgdGFyZ2V0WWVhciA9IGNlbGwuZ2V0VVRDRnVsbFllYXIoKTtcblxuICAgICAgc3dpdGNoIChjb21wYXJhdG9yKSB7XG4gICAgICAgIGNhc2UgRVE6IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWx0ZXJEYXRlICE9PSB0YXJnZXREYXRlIHx8XG4gICAgICAgICAgICBmaWx0ZXJNb250aCAhPT0gdGFyZ2V0TW9udGggfHxcbiAgICAgICAgICAgIGZpbHRlclllYXIgIT09IHRhcmdldFllYXJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgR1Q6IHtcbiAgICAgICAgICBpZiAoY2VsbCA8PSBkYXRlKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEdFOiB7XG4gICAgICAgICAgaWYgKHRhcmdldFllYXIgPCBmaWx0ZXJZZWFyKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJiB0YXJnZXRNb250aCA8IGZpbHRlck1vbnRoKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0YXJnZXRZZWFyID09PSBmaWx0ZXJZZWFyICYmXG4gICAgICAgICAgICB0YXJnZXRNb250aCA9PT0gZmlsdGVyTW9udGggJiZcbiAgICAgICAgICAgIHRhcmdldERhdGUgPCBmaWx0ZXJEYXRlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExUOiB7XG4gICAgICAgICAgaWYgKGNlbGwgPj0gZGF0ZSkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMRToge1xuICAgICAgICAgIGlmICh0YXJnZXRZZWFyID4gZmlsdGVyWWVhcikge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFllYXIgPT09IGZpbHRlclllYXIgJiYgdGFyZ2V0TW9udGggPiBmaWx0ZXJNb250aCkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0WWVhciA9PT0gZmlsdGVyWWVhciAmJlxuICAgICAgICAgICAgdGFyZ2V0TW9udGggPT09IGZpbHRlck1vbnRoICYmXG4gICAgICAgICAgICB0YXJnZXREYXRlID4gZmlsdGVyRGF0ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBORToge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbHRlckRhdGUgPT09IHRhcmdldERhdGUgJiZcbiAgICAgICAgICAgIGZpbHRlck1vbnRoID09PSB0YXJnZXRNb250aCAmJlxuICAgICAgICAgICAgZmlsdGVyWWVhciA9PT0gdGFyZ2V0WWVhclxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJEYXRlIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQnlBcnJheSA9XG4gIChfOiBhbnkpID0+XG4gIChkYXRhOiBhbnksIGRhdGFGaWVsZDogYW55LCB7IGZpbHRlclZhbCwgY29tcGFyYXRvciB9OiBhbnkpID0+IHtcbiAgICBpZiAoZmlsdGVyVmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRhdGE7XG4gICAgY29uc3QgcmVmaW5lZEZpbHRlclZhbCA9IGZpbHRlclZhbFxuICAgICAgLmZpbHRlcigoeDogYW55KSA9PiBfLmlzRGVmaW5lZCh4KSlcbiAgICAgIC5tYXAoKHg6IGFueSkgPT4geC50b1N0cmluZygpKTtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiB7XG4gICAgICBjb25zdCBjZWxsID0gXy5nZXQocm93LCBkYXRhRmllbGQpO1xuICAgICAgbGV0IGNlbGxTdHIgPSBfLmlzRGVmaW5lZChjZWxsKSA/IGNlbGwudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICBpZiAoY29tcGFyYXRvciA9PT0gRVEpIHtcbiAgICAgICAgcmV0dXJuIHJlZmluZWRGaWx0ZXJWYWwuaW5kZXhPZihjZWxsU3RyKSAhPT0gLTE7XG4gICAgICB9XG4gICAgICBjZWxsU3RyID0gY2VsbFN0ci50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHJlZmluZWRGaWx0ZXJWYWwuc29tZShcbiAgICAgICAgKGl0ZW06IGFueSkgPT4gY2VsbFN0ci5pbmRleE9mKGl0ZW0udG9Mb2NhbGVVcHBlckNhc2UoKSkgIT09IC0xXG4gICAgICApO1xuICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRmFjdG9yeSA9IChfOiBhbnkpID0+IChmaWx0ZXJUeXBlOiBhbnkpID0+IHtcbiAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuTVVMVElTRUxFQ1Q6XG4gICAgICByZXR1cm4gZmlsdGVyQnlBcnJheShfKTtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5OVU1CRVI6XG4gICAgICByZXR1cm4gZmlsdGVyQnlOdW1iZXIoXyk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuREFURTpcbiAgICAgIHJldHVybiBmaWx0ZXJCeURhdGUoXyk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuVEVYVDpcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5TRUxFQ1Q6XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFVzZSBgdGV4dGAgZmlsdGVyIGFzIGRlZmF1bHQgZmlsdGVyXG4gICAgICByZXR1cm4gZmlsdGVyQnlUZXh0KF8pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVycyA9XG4gIChkYXRhOiBhbnksIGNvbHVtbnM6IGFueSwgXzogYW55KSA9PlxuICAoY3VyckZpbHRlcnM6IGFueSwgY2xlYXJGaWx0ZXJzOiB7IFtkYXRhRmllbGQ6IHN0cmluZ106IGFueSB9ID0ge30pID0+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gZmlsdGVyRmFjdG9yeShfKTtcbiAgICBjb25zdCBmaWx0ZXJTdGF0ZSA9IHsgLi4uY2xlYXJGaWx0ZXJzLCAuLi5jdXJyRmlsdGVycyB9O1xuICAgIGxldCByZXN1bHQgPSBkYXRhO1xuICAgIGxldCBmaWx0ZXJGbjtcbiAgICBPYmplY3Qua2V5cyhmaWx0ZXJTdGF0ZSkuZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG4gICAgICBsZXQgY3VycmVudFJlc3VsdDtcbiAgICAgIGxldCBmaWx0ZXJWYWx1ZTtcbiAgICAgIGxldCBjdXN0b21GaWx0ZXI7XG4gICAgICBjb2x1bW5zID0gY29sdW1ucyA/PyBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoY29sdW1uc1tpXS5kYXRhRmllbGQgPT09IGRhdGFGaWVsZCkge1xuICAgICAgICAgIGZpbHRlclZhbHVlID0gY29sdW1uc1tpXS5maWx0ZXJWYWx1ZTtcbiAgICAgICAgICBpZiAoY29sdW1uc1tpXS5maWx0ZXIpIHtcbiAgICAgICAgICAgIGN1c3RvbUZpbHRlciA9IGNvbHVtbnNbaV0uZmlsdGVyLnByb3BzLm9uRmlsdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2xlYXJGaWx0ZXJzW2RhdGFGaWVsZF0gJiYgY3VzdG9tRmlsdGVyKSB7XG4gICAgICAgIGN1cnJlbnRSZXN1bHQgPSBjdXN0b21GaWx0ZXIoY2xlYXJGaWx0ZXJzW2RhdGFGaWVsZF0uZmlsdGVyVmFsLCByZXN1bHQpO1xuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXN1bHQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICByZXN1bHQgPSBjdXJyZW50UmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWx0ZXJPYmogPSBmaWx0ZXJTdGF0ZVtkYXRhRmllbGRdO1xuICAgICAgICBmaWx0ZXJGbiA9IGZhY3RvcnkoZmlsdGVyT2JqLmZpbHRlclR5cGUpO1xuICAgICAgICBpZiAoY3VzdG9tRmlsdGVyKSB7XG4gICAgICAgICAgY3VycmVudFJlc3VsdCA9IGN1c3RvbUZpbHRlcihmaWx0ZXJPYmouZmlsdGVyVmFsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudFJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHJlc3VsdCA9IGZpbHRlckZuKHJlc3VsdCwgZGF0YUZpZWxkLCBmaWx0ZXJPYmosIGZpbHRlclZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBjdXJyZW50UmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRVEsIEZJTFRFUl9UWVBFUywgTElLRSB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgZmlsdGVycyB9IGZyb20gXCIuL2ZpbHRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgY29sdW1uczogYW55W107XG4gIGRhdGFDaGFuZ2VMaXN0ZW5lcj86IGFueTtcbiAgZmlsdGVyOiBhbnk7XG4gIGNoaWxkcmVuOiBhbnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChcbiAgXzogYW55LFxuICBpc1JlbW90ZUZpbHRlcmluZzogKCkgPT4gYm9vbGVhbixcbiAgaGFuZGxlRmlsdGVyQ2hhbmdlOiAoZmlsdGVyczogYW55KSA9PiB2b2lkXG4pID0+IHtcbiAgY29uc3QgRmlsdGVyQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8YW55Pih7fSk7XG5cbiAgY2xhc3MgRmlsdGVyUHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8RmlsdGVyUHJvdmlkZXJQcm9wcz4ge1xuXG5cbiAgICBjdXJyRmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBjbGVhckZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgZGF0YTogYW55W107XG4gICAgaXNFbWl0RGF0YUNoYW5nZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBGaWx0ZXJQcm92aWRlclByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmN1cnJGaWx0ZXJzID0ge307XG4gICAgICB0aGlzLmNsZWFyRmlsdGVycyA9IHt9O1xuICAgICAgdGhpcy5vbkZpbHRlciA9IHRoaXMub25GaWx0ZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZG9GaWx0ZXIgPSB0aGlzLmRvRmlsdGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLm9uRXh0ZXJuYWxGaWx0ZXIgPSB0aGlzLm9uRXh0ZXJuYWxGaWx0ZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZGF0YSA9IHByb3BzLmRhdGE7XG4gICAgICB0aGlzLmlzRW1pdERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChpc1JlbW90ZUZpbHRlcmluZygpICYmIE9iamVjdC5rZXlzKHRoaXMuY3VyckZpbHRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaGFuZGxlRmlsdGVyQ2hhbmdlKHRoaXMuY3VyckZpbHRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9uRmlsdGVyKGNvbHVtbjogYW55LCBmaWx0ZXJUeXBlOiBhbnksIGluaXRpYWxpemUgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIChmaWx0ZXJWYWw6IGFueSkgPT4ge1xuICAgICAgICAvLyB3YXRjaCBvdXQgaGVyZSBpZiBtaWdyYXRpb24gdG8gY29udGV4dCBBUEksICMzMzRcbiAgICAgICAgY29uc3QgY3VyckZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgICAgdGhpcy5jbGVhckZpbHRlcnMgPSB7fTtcbiAgICAgICAgY29uc3QgeyBkYXRhRmllbGQsIGZpbHRlciB9ID0gY29sdW1uO1xuXG4gICAgICAgIGNvbnN0IG5lZWRDbGVhckZpbHRlcnMgPVxuICAgICAgICAgICFfLmlzRGVmaW5lZChmaWx0ZXJWYWwpIHx8IGZpbHRlclZhbCA9PT0gXCJcIiB8fCBmaWx0ZXJWYWwubGVuZ3RoID09PSAwO1xuXG4gICAgICAgIGlmIChuZWVkQ2xlYXJGaWx0ZXJzKSB7XG4gICAgICAgICAgZGVsZXRlIGN1cnJGaWx0ZXJzW2RhdGFGaWVsZF07XG4gICAgICAgICAgdGhpcy5jbGVhckZpbHRlcnMgPSB7IFtkYXRhRmllbGRdOiB7IGNsZWFyOiB0cnVlLCBmaWx0ZXJWYWwgfSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHNlbGVjdCBkZWZhdWx0IGNvbXBhcmF0b3IgaXMgRVEsIG90aGVycyBhcmUgTElLRVxuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNvbXBhcmF0b3IgPSBmaWx0ZXJUeXBlID09PSBGSUxURVJfVFlQRVMuU0VMRUNUID8gRVEgOiBMSUtFLFxuICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlLFxuICAgICAgICAgIH0gPSBmaWx0ZXIucHJvcHM7XG4gICAgICAgICAgY3VyckZpbHRlcnNbZGF0YUZpZWxkXSA9IHtcbiAgICAgICAgICAgIGZpbHRlclZhbCxcbiAgICAgICAgICAgIGZpbHRlclR5cGUsXG4gICAgICAgICAgICBjb21wYXJhdG9yLFxuICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyRmlsdGVycyA9IGN1cnJGaWx0ZXJzO1xuXG4gICAgICAgIGlmIChpc1JlbW90ZUZpbHRlcmluZygpKSB7XG4gICAgICAgICAgaWYgKCFpbml0aWFsaXplKSB7XG4gICAgICAgICAgICBoYW5kbGVGaWx0ZXJDaGFuZ2UodGhpcy5jdXJyRmlsdGVycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRPRE86IFdoeSB3ZSBuZWVkIHRvIGZvcmNlVXBkYXRlIGhlcmU/IFxuICAgICAgICAgIC8vIEl0IHNlZW1zIHRoZSBmaWx0ZXIgY29tcG9uZW50IHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50L1Byb3ZpZGVyXG4gICAgICAgICAgLy8gSW50cm9kdWNlIGFkZGl0aW9uYWwgcHJvcGVydHksIGZvcmNlVXBkYXRlIChkZWZhdWx0IHRvIGZhbHNlKSwgdG8gYXZvaWQgaW5maW5pdGUgbG9vcCBvZiB0aGlzLmZvcmNlVXBkYXRlKCksIHdpbGwgbmVlZCB0byByZWZhY3RvciB0aGUgZmlsdGVyIGNvbXBvbmVudCB0byBiZSBjb250cm9sbGVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50L1Byb3ZpZGVyXG4gICAgICAgICAgaWYgKGZpbHRlci5wcm9wcyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlci5wcm9wcy5mb3JjZVVwZGF0ZSA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlci5wcm9wcy5mb3JjZVVwZGF0ZSA9PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvRmlsdGVyKHRoaXMucHJvcHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBvbkV4dGVybmFsRmlsdGVyKGNvbHVtbjogYW55LCBmaWx0ZXJUeXBlOiBhbnkpIHtcbiAgICAgIHJldHVybiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uRmlsdGVyKGNvbHVtbiwgZmlsdGVyVHlwZSkodmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRGaWx0ZXJlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgbmV4dFByb3BzOiBSZWFkb25seTxGaWx0ZXJQcm92aWRlclByb3BzPixcbiAgICAgIG5leHRTdGF0ZTogUmVhZG9ubHk8e30+LFxuICAgICAgbmV4dENvbnRleHQ6IGFueVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgaWYgKCFpc1JlbW90ZUZpbHRlcmluZygpICYmICFfLmlzRXF1YWwobmV4dFByb3BzLmRhdGEsIHRoaXMuZGF0YSkpIHtcbiAgICAgICAgdGhpcy5kb0ZpbHRlcihuZXh0UHJvcHMsIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXh0UHJvcHMuZGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGRvRmlsdGVyKHByb3BzOiBGaWx0ZXJQcm92aWRlclByb3BzLCBpZ25vcmVFbWl0RGF0YUNoYW5nZSA9IGZhbHNlKSB7XG4gICAgICBjb25zdCB7IGRhdGFDaGFuZ2VMaXN0ZW5lciwgZGF0YSwgY29sdW1ucywgZmlsdGVyIH0gPSBwcm9wcztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbHRlcnMoXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIF9cbiAgICAgICkodGhpcy5jdXJyRmlsdGVycywgdGhpcy5jbGVhckZpbHRlcnMpO1xuICAgICAgaWYgKGZpbHRlci5hZnRlckZpbHRlcikge1xuICAgICAgICBmaWx0ZXIuYWZ0ZXJGaWx0ZXIocmVzdWx0LCB0aGlzLmN1cnJGaWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmIChkYXRhQ2hhbmdlTGlzdGVuZXIgJiYgIWlnbm9yZUVtaXREYXRhQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IHRydWU7XG4gICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lci5lbWl0KFwiZmlsdGVyQ2hhbmdlZFwiLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNFbWl0RGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZpbHRlckNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgb25GaWx0ZXI6IHRoaXMub25GaWx0ZXIsXG4gICAgICAgICAgICBvbkV4dGVybmFsRmlsdGVyOiB0aGlzLm9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgICAgICAgICBjdXJyRmlsdGVyczogdGhpcy5jdXJyRmlsdGVycyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvRmlsdGVyQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogRmlsdGVyUHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IEZpbHRlckNvbnRleHQuQ29uc3VtZXIsXG4gIH07XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJpZFwiLCBcInBsYWNlaG9sZGVyXCIsIFwiY29sdW1uXCIsIFwic3R5bGVcIiwgXCJjbGFzc05hbWVcIiwgXCJvbkZpbHRlclwiLCBcImNhc2VTZW5zaXRpdmVcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJnZXRGaWx0ZXJcIiwgXCJmaWx0ZXJTdGF0ZVwiXTtcbmZ1bmN0aW9uIF90eXBlb2YobykgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9IDogZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87IH0sIF90eXBlb2Yobyk7IH1cbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHsgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9OyB2YXIgbywgciwgaSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGUsIHQpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7IH0gcmV0dXJuIGk7IH1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHsgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9OyB2YXIgdCA9IHt9OyBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7IGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTsgdFtuXSA9IHJbbl07IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7IGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikgeyBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHsgdmFyIG8gPSByW3RdOyBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgX3RvUHJvcGVydHlLZXkoby5rZXkpLCBvKTsgfSB9XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkgeyByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTsgfVxuZnVuY3Rpb24gX2NhbGxTdXBlcih0LCBvLCBlKSB7IHJldHVybiBvID0gX2dldFByb3RvdHlwZU9mKG8pLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0LCBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgPyBSZWZsZWN0LmNvbnN0cnVjdChvLCBlIHx8IFtdLCBfZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IpIDogby5hcHBseSh0LCBlKSk7IH1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHsgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTsgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZCh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7IGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IHRyeSB7IHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgfSBjYXRjaCAodCkge30gcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgcmV0dXJuICEhdDsgfSkoKTsgfVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpOyB9LCBfZ2V0UHJvdG90eXBlT2YodCk7IH1cbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogdCwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZSAmJiBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7IHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDsgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkgeyByZXR1cm4gKHIgPSBfdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7IHZhbHVlOiB0LCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVtyXSA9IHQsIGU7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG52YXIgX19jcmVhdGVCaW5kaW5nID0gdm9pZCAwICYmICh2b2lkIDApLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgZGVzYyA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG1ba107XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSA6IGZ1bmN0aW9uIChvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdlxuICB9KTtcbn0gOiBmdW5jdGlvbiAobywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19pbXBvcnRTdGFyIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9vd25LZXlzID0gZnVuY3Rpb24gb3duS2V5cyhvKSB7XG4gICAgX293bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGFyID0gW107XG4gICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG4gICAgcmV0dXJuIF9vd25LZXlzKG8pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IF9vd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLi8uLlwiKTtcbnZhciBUZXh0RmlsdGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfcmVhY3RfMSRDb21wb25lbnQpIHtcbiAgZnVuY3Rpb24gVGV4dEZpbHRlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dEZpbHRlcik7XG4gICAgX3RoaXMgPSBfY2FsbFN1cGVyKHRoaXMsIFRleHRGaWx0ZXIsIFtwcm9wc10pO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJpbnB1dFwiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eShfdGhpcywgXCJ0aW1lb3V0XCIsIHZvaWQgMCk7XG4gICAgX3RoaXMuZmlsdGVyID0gX3RoaXMuZmlsdGVyLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLmhhbmRsZUNsaWNrID0gX3RoaXMuaGFuZGxlQ2xpY2suYmluZChfdGhpcyk7XG4gICAgX3RoaXMudGltZW91dCA9IG51bGw7XG4gICAgX3RoaXMuaW5wdXQgPSB7fTtcbiAgICBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3Byb3BzJGRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChwcm9wcy5maWx0ZXJTdGF0ZSAmJiB0eXBlb2YgcHJvcHMuZmlsdGVyU3RhdGUuZmlsdGVyVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBwcm9wcy5maWx0ZXJTdGF0ZS5maWx0ZXJWYWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gKF9wcm9wcyRkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF9wcm9wcyRkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IF9wcm9wcyRkZWZhdWx0VmFsdWUgOiBcIlwiO1xuICAgIH1cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBnZXREZWZhdWx0VmFsdWUoKVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9pbmhlcml0cyhUZXh0RmlsdGVyLCBfcmVhY3RfMSRDb21wb25lbnQpO1xuICByZXR1cm4gX2NyZWF0ZUNsYXNzKFRleHRGaWx0ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzLm9uRmlsdGVyLFxuICAgICAgICBnZXRGaWx0ZXIgPSBfdGhpcyRwcm9wcy5nZXRGaWx0ZXIsXG4gICAgICAgIGNvbHVtbiA9IF90aGlzJHByb3BzLmNvbHVtbjtcbiAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIodGhpcy5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuVEVYVCwgdHJ1ZSkoZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgICAgZ2V0RmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJWYWwpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlclZhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKShmaWx0ZXJWYWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgaWYgKHByZXZQcm9wcy5kZWZhdWx0VmFsdWUgIT09IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRkZWZhdWx0VmE7XG4gICAgICAgIHZhciBuZXh0VmFsdWUgPSAoX3RoaXMkcHJvcHMkZGVmYXVsdFZhID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF90aGlzJHByb3BzJGRlZmF1bHRWYSAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkZGVmYXVsdFZhIDogXCJcIjtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdmFsdWU6IG5leHRWYWx1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBfdGhpczMucHJvcHMub25GaWx0ZXIoX3RoaXMzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKShuZXh0VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbHRlcihlKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICAgIHZhciBmaWx0ZXJWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IGZpbHRlclZhbHVlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgX3RoaXM0LnByb3BzLm9uRmlsdGVyKF90aGlzNC5wcm9wcy5jb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuVEVYVCkoZmlsdGVyVmFsdWUpO1xuICAgICAgfSwgdGhpcy5wcm9wcy5kZWxheSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuVGltZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5UaW1lcigpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRkZWZhdWx0VmEyO1xuICAgICAgdmFyIHZhbHVlID0gKF90aGlzJHByb3BzJGRlZmF1bHRWYTIgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSkgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiAhPT0gdm9pZCAwID8gX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiA6IFwiXCI7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5RmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RmlsdGVyKGZpbHRlclRleHQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGZpbHRlclRleHQgIT09IG51bGwgJiYgZmlsdGVyVGV4dCAhPT0gdm9pZCAwID8gZmlsdGVyVGV4dCA6IFwiXCI7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLnByb3BzLmNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5URVhUKSh2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUNsaWNrXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGUpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DbGljayhlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRpZCA9IF90aGlzJHByb3BzMi5pZCxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczIkaWQgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wczIkaWQsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICBfdGhpcyRwcm9wczIkY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgZGF0YUZpZWxkID0gX3RoaXMkcHJvcHMyJGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgIHRleHQgPSBfdGhpcyRwcm9wczIkY29sdW1uLnRleHQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMyLnN0eWxlLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzMi5vbkZpbHRlcixcbiAgICAgICAgX3RoaXMkcHJvcHMyJGNhc2VTZW5zID0gX3RoaXMkcHJvcHMyLmNhc2VTZW5zaXRpdmUsXG4gICAgICAgIGNhc2VTZW5zaXRpdmUgPSBfdGhpcyRwcm9wczIkY2FzZVNlbnMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMyJGNhc2VTZW5zLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkZGVmYXVsdFYsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzMi5nZXRGaWx0ZXIsXG4gICAgICAgIF90aGlzJHByb3BzMiRmaWx0ZXJTdCA9IF90aGlzJHByb3BzMi5maWx0ZXJTdGF0ZSxcbiAgICAgICAgZmlsdGVyU3RhdGUgPSBfdGhpcyRwcm9wczIkZmlsdGVyU3QgPT09IHZvaWQgMCA/IHt9IDogX3RoaXMkcHJvcHMyJGZpbHRlclN0LFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcbiAgICAgIHZhciBlbG1JZCA9IFwidGV4dC1maWx0ZXItY29sdW1uLVwiLmNvbmNhdChkYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiRmlsdGVyIGJ5IFwiLCB0ZXh0KSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG4pIHtcbiAgICAgICAgICBfdGhpczUuaW5wdXQgPSBuO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgaWQ6IGVsbUlkLFxuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyIHRleHQtZmlsdGVyIGZvcm0tY29udHJvbCBcIi5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5maWx0ZXIsXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciB8fCBcIkVudGVyIFwiLmNvbmNhdCh0ZXh0LCBcIi4uLlwiKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJ0ZXh0LWZpbHRlclwiXG4gICAgICB9KSkpO1xuICAgIH1cbiAgfV0pO1xufShyZWFjdF8xLkNvbXBvbmVudCk7XG5fZGVmaW5lUHJvcGVydHkoVGV4dEZpbHRlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBkZWxheTogNTAwLFxuICBmaWx0ZXJTdGF0ZToge30sXG4gIGRlZmF1bHRWYWx1ZTogXCJcIixcbiAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4gIGlkOiBudWxsXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gVGV4dEZpbHRlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG4vKiBlc2xpbnQgcHJlZmVyLXRlbXBsYXRlOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLi8uLlwiKTtcbnZhciBFUSA9IFwiPVwiO1xudmFyIE5FID0gXCIhPVwiO1xudmFyIEdUID0gXCI+XCI7XG52YXIgR0UgPSBcIj49XCI7XG52YXIgTFQgPSBcIjxcIjtcbnZhciBMRSA9IFwiPD1cIjtcbnZhciBsZWdhbENvbXBhcmF0b3JzID0gW0VRLCBORSwgR1QsIEdFLCBMVCwgTEVdO1xuZnVuY3Rpb24gZGF0ZVBhcnNlcihkKSB7XG4gIHJldHVybiBcIlwiLmNvbmNhdChkLmdldFVUQ0Z1bGxZZWFyKCksIFwiLVwiKS5jb25jYXQoKFwiMFwiICsgKGQuZ2V0VVRDTW9udGgoKSArIDEpKS5zbGljZSgtMiksIFwiLVwiKS5jb25jYXQoKFwiMFwiICsgZC5nZXRVVENEYXRlKCkpLnNsaWNlKC0yKSk7XG59XG52YXIgRGF0ZUZpbHRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIERhdGVGaWx0ZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERhdGVGaWx0ZXIpO1xuICAgIF90aGlzID0gX2NhbGxTdXBlcih0aGlzLCBEYXRlRmlsdGVyLCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY29tcGFyYXRvcnNcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiZGF0ZUZpbHRlckNvbXBhcmF0b3JcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiaW5wdXREYXRlXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcInRpbWVvdXRcIiwgdm9pZCAwKTtcbiAgICBfdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICBfdGhpcy5jb21wYXJhdG9ycyA9IHByb3BzLmNvbXBhcmF0b3JzIHx8IGxlZ2FsQ29tcGFyYXRvcnM7XG4gICAgX3RoaXMuYXBwbHlGaWx0ZXIgPSBfdGhpcy5hcHBseUZpbHRlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZURhdGUgPSBfdGhpcy5vbkNoYW5nZURhdGUuYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25DaGFuZ2VDb21wYXJhdG9yID0gX3RoaXMub25DaGFuZ2VDb21wYXJhdG9yLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfaW5oZXJpdHMoRGF0ZUZpbHRlciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhEYXRlRmlsdGVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIGdldEZpbHRlciA9IHRoaXMucHJvcHMuZ2V0RmlsdGVyO1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSB0aGlzLmRhdGVGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgICAgdmFyIGRhdGUgPSB0aGlzLmlucHV0RGF0ZS52YWx1ZTtcbiAgICAgIGlmIChjb21wYXJhdG9yICYmIGRhdGUpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihkYXRlLCBjb21wYXJhdG9yLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICAgIGlmIChnZXRGaWx0ZXIpIHtcbiAgICAgICAgZ2V0RmlsdGVyKGZ1bmN0aW9uIChmaWx0ZXJWYWwpIHtcbiAgICAgICAgICB2YXIgbnVsbGFibGVGaWx0ZXJWYWwgPSBmaWx0ZXJWYWwgfHwge1xuICAgICAgICAgICAgZGF0ZTogbnVsbCxcbiAgICAgICAgICAgIGNvbXBhcmF0b3I6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIF90aGlzMi5kYXRlRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IG51bGxhYmxlRmlsdGVyVmFsLmNvbXBhcmF0b3I7XG4gICAgICAgICAgX3RoaXMyLmlucHV0RGF0ZS52YWx1ZSA9IG51bGxhYmxlRmlsdGVyVmFsLmRhdGUgPyBkYXRlUGFyc2VyKG51bGxhYmxlRmlsdGVyVmFsLmRhdGUpIDogbnVsbDtcbiAgICAgICAgICBfdGhpczIuYXBwbHlGaWx0ZXIobnVsbGFibGVGaWx0ZXJWYWwuZGF0ZSwgbnVsbGFibGVGaWx0ZXJWYWwuY29tcGFyYXRvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZURhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VEYXRlKGUpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5kYXRlRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICAgIHZhciBmaWx0ZXJWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXJWYWx1ZSwgY29tcGFyYXRvcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2hhbmdlQ29tcGFyYXRvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZUNvbXBhcmF0b3IoZSkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5pbnB1dERhdGUudmFsdWU7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSwgY29tcGFyYXRvcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENvbXBhcmF0b3JPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbXBhcmF0b3JPcHRpb25zKCkge1xuICAgICAgdmFyIG9wdGlvblRhZ3MgPSBbXTtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyR3aXRob3V0RW0gPSB0aGlzLnByb3BzLndpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24sXG4gICAgICAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24gPSBfdGhpcyRwcm9wcyR3aXRob3V0RW0gPT09IHZvaWQgMCA/IGZhbHNlIDogX3RoaXMkcHJvcHMkd2l0aG91dEVtO1xuICAgICAgaWYgKCF3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IFwiLTFcIlxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29tcGFyYXRvcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogaSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5jb21wYXJhdG9yc1tpXVxuICAgICAgICB9LCB0aGlzLmNvbXBhcmF0b3JzW2ldKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGVmYXVsdENvbXBhcmF0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVmYXVsdENvbXBhcmF0b3IoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wcyRkZWZhdWx0VmEgPSBfdGhpcyRwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzJGRlZmF1bHRWYSA9PT0gdm9pZCAwID8ge1xuICAgICAgICAgIGRhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjb21wYXJhdG9yOiBcIlwiXG4gICAgICAgIH0gOiBfdGhpcyRwcm9wcyRkZWZhdWx0VmEsXG4gICAgICAgIF90aGlzJHByb3BzJGZpbHRlclN0YSA9IF90aGlzJHByb3BzLmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzJGZpbHRlclN0YSA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wcyRmaWx0ZXJTdGE7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHREYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHREYXRlKCkge1xuICAgICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQgZm9yIHRoZSBpbnB1dCB0eXBlPWRhdGUsIGkuZS4gXCJZWVlZLU1NLUREXCJcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPSBfdGhpcyRwcm9wczIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBfdGhpcyRwcm9wczIkZGVmYXVsdFYgPT09IHZvaWQgMCA/IHtcbiAgICAgICAgICBkYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHMyJGRlZmF1bHRWLFxuICAgICAgICBfdGhpcyRwcm9wczIkZmlsdGVyU3QgPSBfdGhpcyRwcm9wczIuZmlsdGVyU3RhdGUsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHMyJGZpbHRlclN0ID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzMiRmaWx0ZXJTdDtcbiAgICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQYXJzZXIoZmlsdGVyU3RhdGUuZmlsdGVyVmFsLmRhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUuZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZVBhcnNlcihuZXcgRGF0ZShkZWZhdWx0VmFsdWUuZGF0ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFwcGx5RmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFwcGx5RmlsdGVyKHZhbHVlLCBjb21wYXJhdG9yLCBpc0luaXRpYWwpIHtcbiAgICAgIC8vIGlmICghY29tcGFyYXRvciB8fCAhdmFsdWUpIHtcbiAgICAgIC8vICByZXR1cm47XG4gICAgICAvLyB9XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMzLmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczMub25GaWx0ZXIsXG4gICAgICAgIF90aGlzJHByb3BzMyRkZWxheSA9IF90aGlzJHByb3BzMy5kZWxheSxcbiAgICAgICAgZGVsYXkgPSBfdGhpcyRwcm9wczMkZGVsYXkgPT09IHZvaWQgMCA/IDAgOiBfdGhpcyRwcm9wczMkZGVsYXk7XG4gICAgICB2YXIgZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgIC8vIEluY29taW5nIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgYSBzdHJpbmcsIGFuZCB0aGUgZGVmYXVsdERhdGVcbiAgICAgICAgLy8gYWJvdmUgaXMgaW1wbGVtZW50ZWQgYXMgYW4gZW1wdHkgc3RyaW5nLCBzbyB3ZSBjYW4ganVzdCBjaGVjayBmb3IgdGhhdC5cbiAgICAgICAgLy8gaW5zdGVhZCBvZiBwYXJzaW5nIGFuIGludmFsaWQgRGF0ZS4gVGhlIGZpbHRlciBmdW5jdGlvbiB3aWxsIGludGVycHJldFxuICAgICAgICAvLyBudWxsIGFzIGFuIGVtcHR5IGRhdGUgZmllbGRcbiAgICAgICAgdmFyIGRhdGUgPSB2YWx1ZSA9PT0gXCJcIiA/IG51bGwgOiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuREFURSwgaXNJbml0aWFsKSh7XG4gICAgICAgICAgZGF0ZTogZGF0ZSxcbiAgICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmIChkZWxheSkge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBleGVjdXRlKCk7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4ZWN1dGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzNCRpZCA9IF90aGlzJHByb3BzNC5pZCxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczQkaWQgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wczQkaWQsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHM0LnBsYWNlaG9sZGVyLFxuICAgICAgICBfdGhpcyRwcm9wczQkY29sdW1uID0gX3RoaXMkcHJvcHM0LmNvbHVtbixcbiAgICAgICAgZGF0YUZpZWxkID0gX3RoaXMkcHJvcHM0JGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgIHRleHQgPSBfdGhpcyRwcm9wczQkY29sdW1uLnRleHQsXG4gICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM0LnN0eWxlLFxuICAgICAgICBjb21wYXJhdG9yU3R5bGUgPSBfdGhpcyRwcm9wczQuY29tcGFyYXRvclN0eWxlLFxuICAgICAgICBkYXRlU3R5bGUgPSBfdGhpcyRwcm9wczQuZGF0ZVN0eWxlLFxuICAgICAgICBfdGhpcyRwcm9wczQkY2xhc3NOYW0gPSBfdGhpcyRwcm9wczQuY2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczQkY2xhc3NOYW0gPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczQkY2xhc3NOYW0sXG4gICAgICAgIF90aGlzJHByb3BzNCRjb21wYXJhdCA9IF90aGlzJHByb3BzNC5jb21wYXJhdG9yQ2xhc3NOYW1lLFxuICAgICAgICBjb21wYXJhdG9yQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0JGNvbXBhcmF0ID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHM0JGNvbXBhcmF0LFxuICAgICAgICBfdGhpcyRwcm9wczQkZGF0ZUNsYXMgPSBfdGhpcyRwcm9wczQuZGF0ZUNsYXNzTmFtZSxcbiAgICAgICAgZGF0ZUNsYXNzTmFtZSA9IF90aGlzJHByb3BzNCRkYXRlQ2xhcyA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzNCRkYXRlQ2xhcztcbiAgICAgIHZhciBjb21wYXJhdG9yRWxtSWQgPSBcImRhdGUtZmlsdGVyLWNvbXBhcmF0b3ItXCIuY29uY2F0KGRhdGFGaWVsZCkuY29uY2F0KGlkID8gXCItXCIuY29uY2F0KGlkKSA6IFwiXCIpO1xuICAgICAgdmFyIGlucHV0RWxtSWQgPSBcImRhdGUtZmlsdGVyLWNvbHVtbi1cIi5jb25jYXQoZGF0YUZpZWxkKS5jb25jYXQoaWQgPyBcIi1cIi5jb25jYXQoaWQpIDogXCJcIik7XG4gICAgICByZXR1cm4gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgICAgIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyIGRhdGUtZmlsdGVyIFwiLmNvbmNhdChjbGFzc05hbWUpLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJkYXRlLWZpbHRlclwiXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGNvbXBhcmF0b3JFbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkZpbHRlciBjb21wYXJhdG9yXCIpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5kYXRlRmlsdGVyQ29tcGFyYXRvciA9IG47XG4gICAgICAgIH0sXG4gICAgICAgIGlkOiBjb21wYXJhdG9yRWxtSWQsXG4gICAgICAgIHN0eWxlOiBjb21wYXJhdG9yU3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZTogXCJkYXRlLWZpbHRlci1jb21wYXJhdG9yIGZvcm0tY29udHJvbCBcIi5jb25jYXQoY29tcGFyYXRvckNsYXNzTmFtZSksXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvcixcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmdldERlZmF1bHRDb21wYXJhdG9yKCksXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJkYXRlLWZpbHRlci1jb21wYXJhdG9yXCJcbiAgICAgIH0sIHRoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSkpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBodG1sRm9yOiBpbnB1dEVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiRW50ZXIgJFwiLCB0ZXh0KSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5pbnB1dERhdGUgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlciBkYXRlLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KGRhdGVDbGFzc05hbWUpLFxuICAgICAgICBzdHlsZTogZGF0ZVN0eWxlLFxuICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2VEYXRlLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIgfHwgXCJFbnRlciBcIi5jb25jYXQodGV4dCwgXCIuLi5cIiksXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0RGF0ZSgpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwiZGF0ZS1maWx0ZXItaW5wdXRcIlxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcbn0ocmVhY3RfMS5Db21wb25lbnQpO1xuX2RlZmluZVByb3BlcnR5KERhdGVGaWx0ZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgZGVsYXk6IDAsXG4gIGRlZmF1bHRWYWx1ZToge1xuICAgIGRhdGU6IHVuZGVmaW5lZCxcbiAgICBjb21wYXJhdG9yOiAnJ1xuICB9LFxuICBmaWx0ZXJTdGF0ZToge30sXG4gIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb246IGZhbHNlLFxuICBjb21wYXJhdG9yczogbGVnYWxDb21wYXJhdG9ycyxcbiAgcGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgc3R5bGU6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lOiAnJyxcbiAgY29tcGFyYXRvclN0eWxlOiB1bmRlZmluZWQsXG4gIGNvbXBhcmF0b3JDbGFzc05hbWU6ICcnLFxuICBkYXRlU3R5bGU6IHVuZGVmaW5lZCxcbiAgZGF0ZUNsYXNzTmFtZTogJycsXG4gIGlkOiBudWxsXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRGF0ZUZpbHRlcjsiLCIvLyBUaGUgaW5mZXJyZWQgdHlwZSBvZiAnZGVmYXVsdCcgY2Fubm90IGJlIG5hbWVkIHdpdGhvdXQgYSByZWZlcmVuY2UgdG8gJ3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9ub2RlX21vZHVsZXMvQHR5cGVzL3Byb3AtdHlwZXMnLlxuLy8gVGhpcyBpcyBsaWtlbHkgbm90IHBvcnRhYmxlLiBBIHR5cGUgYW5ub3RhdGlvbiBpcyBuZWNlc3NhcnkudHMoMjc0MilcblxuaW1wb3J0IHsgQ1NTUHJvcGVydGllcywgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIENvbHVtbkRlc2NyaXB0aW9uLFxuICBUYWJsZUNvbHVtbkZpbHRlclByb3BzLFxufSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5cbmltcG9ydCBEYXRlRmlsdGVyIGZyb20gXCIuL3NyYy9jb21wb25lbnRzL2RhdGVcIjtcbmltcG9ydCBNdWx0aVNlbGVjdEZpbHRlciBmcm9tIFwiLi9zcmMvY29tcG9uZW50cy9tdWx0aXNlbGVjdFwiO1xuaW1wb3J0IE51bWJlckZpbHRlciBmcm9tIFwiLi9zcmMvY29tcG9uZW50cy9udW1iZXJcIjtcbmltcG9ydCBTZWxlY3RGaWx0ZXIgZnJvbSBcIi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0XCI7XG5pbXBvcnQgVGV4dEZpbHRlciBmcm9tIFwiLi9zcmMvY29tcG9uZW50cy90ZXh0XCI7XG5pbXBvcnQgY3JlYXRlQ29udGV4dCBmcm9tIFwiLi9zcmMvY29udGV4dFwiO1xuXG5leHBvcnQgZW51bSBGSUxURVJfVFlQRVMge1xuICBURVhUID0gXCJURVhUXCIsXG4gIFNFTEVDVCA9IFwiU0VMRUNUXCIsXG4gIE1VTFRJU0VMRUNUID0gXCJNVUxUSVNFTEVDVFwiLFxuICBOVU1CRVIgPSBcIk5VTUJFUlwiLFxuICBEQVRFID0gXCJEQVRFXCIsXG59XG5cbmV4cG9ydCBjb25zdCBGSUxURVJfREVMQVkgPSA1MDA7XG5cbi8qKlxuICogRmlsdGVyIGNvbXBhcmF0b3JzIHVzZWQgZm9yIHRhYmxlIGZpbHRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IExJS0UgPSBcIkxJS0VcIjtcbmV4cG9ydCBjb25zdCBFUSA9IFwiPVwiO1xuZXhwb3J0IGNvbnN0IE5FID0gXCIhPVwiO1xuZXhwb3J0IGNvbnN0IEdUID0gXCI+XCI7XG5leHBvcnQgY29uc3QgR0UgPSBcIj49XCI7XG5leHBvcnQgY29uc3QgTFQgPSBcIjxcIjtcbmV4cG9ydCBjb25zdCBMRSA9IFwiPD1cIjtcblxuZXhwb3J0IHR5cGUgQ29tcGFyYXRvciA9IHN0cmluZztcblxuZXhwb3J0IGNvbnN0IENvbXBhcmF0b3JOdW1iZXIgPSA3O1xuXG5leHBvcnQgdHlwZSBUZXh0RmlsdGVyUHJvcHM8VCBleHRlbmRzIG9iamVjdCA9IGFueT4gPSBUYWJsZUNvbHVtbkZpbHRlclByb3BzPFxuICBzdHJpbmcsXG4gIFRcbj4gJlxuICBQYXJ0aWFsPHtcbiAgICAvLyBkZWZhdWx0IGlzIGZhbHNlLCBhbmQgdHJ1ZSB3aWxsIG9ubHkgd29yayB3aGVuIGNvbXBhcmF0b3IgaXMgTElLRVxuICAgIGNhc2VTZW5zaXRpdmU6IGJvb2xlYW47XG4gICAgY29tcGFyYXRvcjogQ29tcGFyYXRvcjtcbiAgICAvLyBvbiBmaWx0ZXIgZWxlbWVudCBjbGljayBldmVudFxuICAgIG9uQ2xpY2s6ICgoZTogU3ludGhldGljRXZlbnQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgIGZpbHRlclN0YXRlPzogYW55O1xuICAgIGNvbHVtbjogYW55O1xuICB9PjtcblxuZXhwb3J0IGNvbnN0IHRleHRGaWx0ZXIgPSAocHJvcHM6IFBhcnRpYWw8VGV4dEZpbHRlclByb3BzPiA9IHt9KSA9PiAoe1xuICBGaWx0ZXI6IFRleHRGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdEZpbHRlck9wdGlvbnMgPVxuICB8IHsgW2luZGV4OiBzdHJpbmddOiBzdHJpbmcgfVxuICB8IEFycmF5PHsgdmFsdWU6IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9PjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0RmlsdGVyUHJvcHM8VCBleHRlbmRzIG9iamVjdCA9IGFueT4gPSBUYWJsZUNvbHVtbkZpbHRlclByb3BzPFxuICBzdHJpbmcsXG4gIFRcbj4gJiB7XG4gIG9wdGlvbnM6XG4gICAgfCBTZWxlY3RGaWx0ZXJPcHRpb25zXG4gICAgfCAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VD4pID0+IFNlbGVjdEZpbHRlck9wdGlvbnMpO1xuICBjb21wYXJhdG9yPzogQ29tcGFyYXRvciB8IHVuZGVmaW5lZDtcbiAgLy8gV2hlbiB0aGUgZGVmYXVsdCB1bnNldCBzZWxlY3Rpb24gaXMgaGlkZGVuIGZyb20gZHJvcGRvd25cbiAgd2l0aG91dEVtcHR5T3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyU3RhdGU/OiBhbnk7XG4gIGNvbHVtbjogYW55O1xuICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RGaWx0ZXIgPSAocHJvcHM6IFBhcnRpYWw8U2VsZWN0RmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogU2VsZWN0RmlsdGVyLFxuICBwcm9wcyxcbn0pO1xuXG5leHBvcnQgdHlwZSBNdWx0aVNlbGVjdEZpbHRlck9wdGlvbnMgPSB7XG4gIFtpbmRleDogc3RyaW5nXTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3RGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9XG4gIFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8c3RyaW5nW10sIFQ+ICYge1xuICAgIG9wdGlvbnM6IE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucyB8ICgoKSA9PiBNdWx0aVNlbGVjdEZpbHRlck9wdGlvbnMpO1xuICAgIGNvbXBhcmF0b3I/OiBDb21wYXJhdG9yIHwgdW5kZWZpbmVkO1xuICAgIC8vIFdoZW4gc2V0IHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBpcyBoaWRkZW4gZnJvbSBkcm9wZG93blxuICAgIHdpdGhvdXRFbXB0eU9wdGlvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgZmlsdGVyU3RhdGU/OiBhbnk7XG4gICAgY29sdW1uOiBhbnk7XG4gICAgY2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG4gIH07XG5cbmV4cG9ydCBjb25zdCBtdWx0aVNlbGVjdEZpbHRlciA9IChcbiAgcHJvcHM6IFBhcnRpYWw8TXVsdGlTZWxlY3RGaWx0ZXJQcm9wcz4gPSB7fVxuKSA9PiAoe1xuICBGaWx0ZXI6IE11bHRpU2VsZWN0RmlsdGVyLFxuICBwcm9wcyxcbn0pO1xuXG5leHBvcnQgdHlwZSBOdW1iZXJGaWx0ZXJQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiA9IFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8XG4gIHsgbnVtYmVyOiBudW1iZXIgfCBcIlwiOyBjb21wYXJhdG9yOiBDb21wYXJhdG9yIH0sXG4gIFRcbj4gJiB7XG4gIG9wdGlvbnM/OiBudW1iZXJbXSB8IHVuZGVmaW5lZDtcbiAgY29tcGFyYXRvcnM/OiBDb21wYXJhdG9yW10gfCB1bmRlZmluZWQ7XG4gIC8vIFdoZW4gc2V0IHRvIHRydWUgY29tcGFyYXRvciBkcm9wZG93biBkb2VzIG5vdCBzaG93IGEgXCJubyBzZWxlY3Rpb25cIiBvcHRpb25cbiAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHdpdGhvdXRFbXB0eU51bWJlck9wdGlvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNvbXBhcmF0b3JDbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG51bWJlckNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29tcGFyYXRvclN0eWxlPzogQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgbnVtYmVyU3R5bGU/OiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0VmFsdWU/OiB7IG51bWJlcjogbnVtYmVyOyBjb21wYXJhdG9yOiBDb21wYXJhdG9yIH0gfCB1bmRlZmluZWQ7XG4gIGZpbHRlclN0YXRlPzogYW55O1xuICBjb2x1bW46IGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBudW1iZXJGaWx0ZXIgPSAocHJvcHM6IFBhcnRpYWw8TnVtYmVyRmlsdGVyUHJvcHM+ID0ge30pID0+ICh7XG4gIEZpbHRlcjogTnVtYmVyRmlsdGVyLFxuICBwcm9wcyxcbn0pO1xuXG5leHBvcnQgdHlwZSBEYXRlRmlsdGVyUHJvcHM8VCBleHRlbmRzIG9iamVjdCA9IGFueT4gPSBUYWJsZUNvbHVtbkZpbHRlclByb3BzPFxuICBEYXRlLFxuICBUXG4+ICYge1xuICB3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdFZhbHVlPzpcbiAgICB8IHtcbiAgICAgICAgZGF0ZT86IERhdGU7XG4gICAgICAgIGNvbXBhcmF0b3I/OiBDb21wYXJhdG9yO1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9ycz86IENvbXBhcmF0b3JbXSB8IHVuZGVmaW5lZDtcbiAgY29tcGFyYXRvckNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGF0ZUNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29tcGFyYXRvclN0eWxlPzogQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgZGF0ZVN0eWxlPzogQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyU3RhdGU/OiBhbnk7XG4gIGNvbHVtbjogYW55O1xufTtcblxuZXhwb3J0IGNvbnN0IGRhdGVGaWx0ZXIgPSAocHJvcHM6IFBhcnRpYWw8RGF0ZUZpbHRlclByb3BzPiA9IHt9KSA9PiAoe1xuICBGaWx0ZXI6IERhdGVGaWx0ZXIsXG4gIHByb3BzLFxufSk7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUZpbHRlclByb3BzID0ge1xuICB0eXBlPzogc3RyaW5nIHwgRklMVEVSX1RZUEVTIHwgdW5kZWZpbmVkO1xuICBjb21wYXJhdG9yPzogQ29tcGFyYXRvciB8IHVuZGVmaW5lZDtcbiAgY2FzZVNlbnNpdGl2ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgY3VzdG9tRmlsdGVyID0gKHByb3BzOiBQYXJ0aWFsPEN1c3RvbUZpbHRlclByb3BzPiA9IHt9KSA9PiAoe1xuICBGaWx0ZXI6ICgpID0+IHt9LFxuICBwcm9wcyxcbn0pO1xuXG4vKipcbiAqIGRlY2xhcmF0aW9uIGZvciB0YWJsZSBmaWx0ZXIgc3ViIG1vZHVsZVxuICovXG5leHBvcnQgdHlwZSBGaWx0ZXJGYWN0b3J5UHJvcHM8VCBleHRlbmRzIG9iamVjdCA9IGFueT4gPSB7XG4gIC8vIFRPRE8gbmV3RmlsdGVycyBpcyBub3QgdGVzdGVkIG5vdCBpdHMgdHlwZSBpcyB2YWxpZGF0ZWQgc2luY2UgdGhlIGF1dGhvciBvZiB0aGlzIGNvbW1pdCBoYXMgbm8gZXhwZXJpZW5jZSB3aXRoIHRoaXMgZmllbGRcbiAgYWZ0ZXJGaWx0ZXI/OiAoKG5ld1Jlc3VsdDogVFtdLCBuZXdGaWx0ZXJzPzogdW5rbm93bltdKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbn07XG5cbi8vIGRlY2xhcmUgZnVuY3Rpb24gZmlsdGVyRmFjdG9yeShwcm9wcz86IEZpbHRlckZhY3RvcnlQcm9wcyk6IHVua25vd247XG4vLyBleHBvcnQgZGVmYXVsdCBmaWx0ZXJGYWN0b3J5O1xuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9ucyA9IHt9KSA9PiAoe1xuICBjcmVhdGVDb250ZXh0LFxuICBvcHRpb25zLFxufSk7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuLyogZXNsaW50IHByZWZlci10ZW1wbGF0ZTogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBEYXRlRmlsdGVyUHJvcHMsIEZJTFRFUl9UWVBFUyB9IGZyb20gXCIuLi8uLlwiO1xuXG5jb25zdCBFUSA9IFwiPVwiO1xuY29uc3QgTkUgPSBcIiE9XCI7XG5jb25zdCBHVCA9IFwiPlwiO1xuY29uc3QgR0UgPSBcIj49XCI7XG5jb25zdCBMVCA9IFwiPFwiO1xuY29uc3QgTEUgPSBcIjw9XCI7XG5cbmNvbnN0IGxlZ2FsQ29tcGFyYXRvcnMgPSBbRVEsIE5FLCBHVCwgR0UsIExULCBMRV07XG5cbmZ1bmN0aW9uIGRhdGVQYXJzZXIoZDogYW55KSB7XG4gIHJldHVybiBgJHtkLmdldFVUQ0Z1bGxZZWFyKCl9LSR7KFwiMFwiICsgKGQuZ2V0VVRDTW9udGgoKSArIDEpKS5zbGljZSgtMil9LSR7KFxuICAgIFwiMFwiICsgZC5nZXRVVENEYXRlKClcbiAgKS5zbGljZSgtMil9YDtcbn1cblxuY2xhc3MgRGF0ZUZpbHRlciBleHRlbmRzIENvbXBvbmVudDxEYXRlRmlsdGVyUHJvcHM+IHtcbiAgY29tcGFyYXRvcnM6IGFueTtcbiAgZGF0ZUZpbHRlckNvbXBhcmF0b3I6IGFueTtcbiAgaW5wdXREYXRlOiBhbnk7XG4gIHRpbWVvdXQ6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMuY29tcGFyYXRvcnMgPSBwcm9wcy5jb21wYXJhdG9ycyB8fCBsZWdhbENvbXBhcmF0b3JzO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIgPSB0aGlzLmFwcGx5RmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZURhdGUgPSB0aGlzLm9uQ2hhbmdlRGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2VDb21wYXJhdG9yID0gdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZ2V0RmlsdGVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLmRhdGVGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmlucHV0RGF0ZS52YWx1ZTtcbiAgICBpZiAoY29tcGFyYXRvciAmJiBkYXRlKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKGRhdGUsIGNvbXBhcmF0b3IsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGV4cG9ydCBvbkZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3NcbiAgICBpZiAoZ2V0RmlsdGVyKSB7XG4gICAgICBnZXRGaWx0ZXIoKGZpbHRlclZhbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG51bGxhYmxlRmlsdGVyVmFsID0gZmlsdGVyVmFsIHx8IHsgZGF0ZTogbnVsbCwgY29tcGFyYXRvcjogbnVsbCB9O1xuICAgICAgICB0aGlzLmRhdGVGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID0gbnVsbGFibGVGaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgdGhpcy5pbnB1dERhdGUudmFsdWUgPSBudWxsYWJsZUZpbHRlclZhbC5kYXRlXG4gICAgICAgICAgPyBkYXRlUGFyc2VyKG51bGxhYmxlRmlsdGVyVmFsLmRhdGUpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIobnVsbGFibGVGaWx0ZXJWYWwuZGF0ZSwgbnVsbGFibGVGaWx0ZXJWYWwuY29tcGFyYXRvcik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy50aW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgfVxuXG4gIG9uQ2hhbmdlRGF0ZShlOiBhbnkpIHtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5kYXRlRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyVmFsdWUsIGNvbXBhcmF0b3IpO1xuICB9XG5cbiAgb25DaGFuZ2VDb21wYXJhdG9yKGU6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnB1dERhdGUudmFsdWU7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUsIGNvbXBhcmF0b3IpO1xuICB9XG5cbiAgZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9uVGFncyA9IFtdO1xuICAgIGNvbnN0IHsgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbiA9IGZhbHNlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICghd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbikge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKDxvcHRpb24ga2V5PVwiLTFcIiAvPik7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21wYXJhdG9ycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT17aX0gdmFsdWU9e3RoaXMuY29tcGFyYXRvcnNbaV19PlxuICAgICAgICAgIHt0aGlzLmNvbXBhcmF0b3JzW2ldfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgZ2V0RGVmYXVsdENvbXBhcmF0b3IoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdFZhbHVlID0geyBkYXRlOiB1bmRlZmluZWQsIGNvbXBhcmF0b3I6IFwiXCIgfSxcbiAgICAgIGZpbHRlclN0YXRlID0ge30sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpbHRlclN0YXRlICYmIGZpbHRlclN0YXRlLmZpbHRlclZhbCkge1xuICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3I7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0RGVmYXVsdERhdGUoKSB7XG4gICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQgZm9yIHRoZSBpbnB1dCB0eXBlPWRhdGUsIGkuZS4gXCJZWVlZLU1NLUREXCJcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7IGRhdGU6IHVuZGVmaW5lZCwgY29tcGFyYXRvcjogXCJcIiB9LFxuICAgICAgZmlsdGVyU3RhdGUgPSB7fSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsICYmIGZpbHRlclN0YXRlLmZpbHRlclZhbC5kYXRlKSB7XG4gICAgICByZXR1cm4gZGF0ZVBhcnNlcihmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuZGF0ZSk7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmRhdGUpIHtcbiAgICAgIHJldHVybiBkYXRlUGFyc2VyKG5ldyBEYXRlKGRlZmF1bHRWYWx1ZS5kYXRlKSk7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIodmFsdWU6IGFueSwgY29tcGFyYXRvcjogYW55LCBpc0luaXRpYWw/OiBhbnkpIHtcbiAgICAvLyBpZiAoIWNvbXBhcmF0b3IgfHwgIXZhbHVlKSB7XG4gICAgLy8gIHJldHVybjtcbiAgICAvLyB9XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyLCBkZWxheSA9IDAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZXhlY3V0ZSA9ICgpID0+IHtcbiAgICAgIC8vIEluY29taW5nIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgYSBzdHJpbmcsIGFuZCB0aGUgZGVmYXVsdERhdGVcbiAgICAgIC8vIGFib3ZlIGlzIGltcGxlbWVudGVkIGFzIGFuIGVtcHR5IHN0cmluZywgc28gd2UgY2FuIGp1c3QgY2hlY2sgZm9yIHRoYXQuXG4gICAgICAvLyBpbnN0ZWFkIG9mIHBhcnNpbmcgYW4gaW52YWxpZCBEYXRlLiBUaGUgZmlsdGVyIGZ1bmN0aW9uIHdpbGwgaW50ZXJwcmV0XG4gICAgICAvLyBudWxsIGFzIGFuIGVtcHR5IGRhdGUgZmllbGRcbiAgICAgIGNvbnN0IGRhdGUgPSB2YWx1ZSA9PT0gXCJcIiA/IG51bGwgOiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5EQVRFLCBpc0luaXRpYWwpKHsgZGF0ZSwgY29tcGFyYXRvciB9KTtcbiAgICB9O1xuICAgIGlmIChkZWxheSkge1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGV4ZWN1dGUoKTtcbiAgICAgIH0sIGRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhlY3V0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZCA9IG51bGwsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIGNvbHVtbjogeyBkYXRhRmllbGQsIHRleHQgfSxcbiAgICAgIHN0eWxlLFxuICAgICAgY29tcGFyYXRvclN0eWxlLFxuICAgICAgZGF0ZVN0eWxlLFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIGNvbXBhcmF0b3JDbGFzc05hbWUgPSBcIlwiLFxuICAgICAgZGF0ZUNsYXNzTmFtZSA9IFwiXCIsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBjb21wYXJhdG9yRWxtSWQgPSBgZGF0ZS1maWx0ZXItY29tcGFyYXRvci0ke2RhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwiXG4gICAgICB9YDtcbiAgICBjb25zdCBpbnB1dEVsbUlkID0gYGRhdGUtZmlsdGVyLWNvbHVtbi0ke2RhdGFGaWVsZH0ke2lkID8gYC0ke2lkfWAgOiBcIlwifWA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgY2xhc3NOYW1lPXtgZmlsdGVyIGRhdGUtZmlsdGVyICR7Y2xhc3NOYW1lfWB9XG4gICAgICAgIHN0eWxlPXtzdHlsZSBhcyBhbnl9XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiZGF0ZS1maWx0ZXJcIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmlsdGVyLWxhYmVsXCIgaHRtbEZvcj17Y29tcGFyYXRvckVsbUlkfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+RmlsdGVyIGNvbXBhcmF0b3I8L3NwYW4+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLmRhdGVGaWx0ZXJDb21wYXJhdG9yID0gbjsgfX1cbiAgICAgICAgICAgIGlkPXtjb21wYXJhdG9yRWxtSWR9XG4gICAgICAgICAgICBzdHlsZT17Y29tcGFyYXRvclN0eWxlIGFzIGFueX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGRhdGUtZmlsdGVyLWNvbXBhcmF0b3IgZm9ybS1jb250cm9sICR7Y29tcGFyYXRvckNsYXNzTmFtZX1gfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2VDb21wYXJhdG9yfVxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXt0aGlzLmdldERlZmF1bHRDb21wYXJhdG9yKCl9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRhdGUtZmlsdGVyLWNvbXBhcmF0b3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLmdldENvbXBhcmF0b3JPcHRpb25zKCl9XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCBodG1sRm9yPXtpbnB1dEVsbUlkfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+RW50ZXIgJHt0ZXh0fTwvc3Bhbj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17KG4pID0+IHsgdGhpcy5pbnB1dERhdGUgPSBuOyB9fVxuICAgICAgICAgICAgaWQ9e2lucHV0RWxtSWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2BmaWx0ZXIgZGF0ZS1maWx0ZXItaW5wdXQgZm9ybS1jb250cm9sICR7ZGF0ZUNsYXNzTmFtZX1gfVxuICAgICAgICAgICAgc3R5bGU9e2RhdGVTdHlsZSBhcyBhbnl9XG4gICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZURhdGV9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXIgfHwgYEVudGVyICR7dGV4dH0uLi5gfVxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXt0aGlzLmdldERlZmF1bHREYXRlKCl9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRhdGUtZmlsdGVyLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZGVsYXk6IDAsXG4gICAgZGVmYXVsdFZhbHVlOiB7XG4gICAgICBkYXRlOiB1bmRlZmluZWQsXG4gICAgICBjb21wYXJhdG9yOiAnJ1xuICAgIH0sXG4gICAgZmlsdGVyU3RhdGU6IHt9LFxuICAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb246IGZhbHNlLFxuICAgIGNvbXBhcmF0b3JzOiBsZWdhbENvbXBhcmF0b3JzLFxuICAgIHBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gICAgc3R5bGU6IHVuZGVmaW5lZCxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGNvbXBhcmF0b3JTdHlsZTogdW5kZWZpbmVkLFxuICAgIGNvbXBhcmF0b3JDbGFzc05hbWU6ICcnLFxuICAgIGRhdGVTdHlsZTogdW5kZWZpbmVkLFxuICAgIGRhdGVDbGFzc05hbWU6ICcnLFxuICAgIGlkOiBudWxsXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVGaWx0ZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgeyByZXR1cm4gdHlwZW9mIG87IH0gOiBmdW5jdGlvbiAobykgeyByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbzsgfSwgX3R5cGVvZihvKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHsgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7IGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykgeyB2YXIgbyA9IHJbdF07IG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pOyB9IH1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7IHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlOyB9XG5mdW5jdGlvbiBfY2FsbFN1cGVyKHQsIG8sIGUpIHsgcmV0dXJuIG8gPSBfZ2V0UHJvdG90eXBlT2YobyksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSA/IFJlZmxlY3QuY29uc3RydWN0KG8sIGUgfHwgW10sIF9nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3RvcikgOiBvLmFwcGx5KHQsIGUpKTsgfVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkgeyBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlOyBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHsgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyByZXR1cm4gZTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgdHJ5IHsgdmFyIHQgPSAhQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyB9IGNhdGNoICh0KSB7fSByZXR1cm4gKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyByZXR1cm4gISF0OyB9KSgpOyB9XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkgeyByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7IH0sIF9nZXRQcm90b3R5cGVPZih0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiB0LCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlICYmIF9zZXRQcm90b3R5cGVPZih0LCBlKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0OyB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSB2b2lkIDAgJiYgKHZvaWQgMCkuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICBkZXNjID0ge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbVtrXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59IDogZnVuY3Rpb24gKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyBmdW5jdGlvbiAobywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2XG4gIH0pO1xufSA6IGZ1bmN0aW9uIChvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9IHZvaWQgMCAmJiAodm9pZCAwKS5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24gKCkge1xuICB2YXIgX293bktleXMgPSBmdW5jdGlvbiBvd25LZXlzKG8pIHtcbiAgICBfb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICB2YXIgYXIgPSBbXTtcbiAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICByZXR1cm4gYXI7XG4gICAgfTtcbiAgICByZXR1cm4gX293bktleXMobyk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gX293bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbi8qIGVzbGludCBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9fMSA9IHJlcXVpcmUoXCIuLi8uLlwiKTtcbnZhciBFUSA9IFwiPVwiO1xudmFyIE5FID0gXCIhPVwiO1xudmFyIEdUID0gXCI+XCI7XG52YXIgR0UgPSBcIj49XCI7XG52YXIgTFQgPSBcIjxcIjtcbnZhciBMRSA9IFwiPD1cIjtcbnZhciBsZWdhbENvbXBhcmF0b3JzID0gW0VRLCBORSwgR1QsIEdFLCBMVCwgTEVdO1xudmFyIE51bWJlckZpbHRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX3JlYWN0XzEkQ29tcG9uZW50KSB7XG4gIGZ1bmN0aW9uIE51bWJlckZpbHRlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTnVtYmVyRmlsdGVyKTtcbiAgICBfdGhpcyA9IF9jYWxsU3VwZXIodGhpcywgTnVtYmVyRmlsdGVyLCBbcHJvcHNdKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwiY29tcGFyYXRvcnNcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwibnVtYmVyRmlsdGVyXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KF90aGlzLCBcIm51bWJlckZpbHRlckNvbXBhcmF0b3JcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkoX3RoaXMsIFwidGltZW91dFwiLCB2b2lkIDApO1xuICAgIF90aGlzLmNvbXBhcmF0b3JzID0gcHJvcHMuY29tcGFyYXRvcnMgfHwgbGVnYWxDb21wYXJhdG9ycztcbiAgICBfdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgaXNTZWxlY3RlZCA9IHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMub3B0aW9ucyAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICBpc1NlbGVjdGVkID0gcHJvcHMub3B0aW9ucy5pbmRleE9mKHByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIpID4gLTE7XG4gICAgfVxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZFxuICAgIH07XG4gICAgX3RoaXMub25DaGFuZ2VOdW1iZXIgPSBfdGhpcy5vbkNoYW5nZU51bWJlci5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbkNoYW5nZU51bWJlclNldCA9IF90aGlzLm9uQ2hhbmdlTnVtYmVyU2V0LmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLm9uQ2hhbmdlQ29tcGFyYXRvciA9IF90aGlzLm9uQ2hhbmdlQ29tcGFyYXRvci5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2luaGVyaXRzKE51bWJlckZpbHRlciwgX3JlYWN0XzEkQ29tcG9uZW50KTtcbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhOdW1iZXJGaWx0ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wcy5jb2x1bW4sXG4gICAgICAgIG9uRmlsdGVyID0gX3RoaXMkcHJvcHMub25GaWx0ZXIsXG4gICAgICAgIGdldEZpbHRlciA9IF90aGlzJHByb3BzLmdldEZpbHRlcjtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID09PSBcIlwiID8gRVEgOiB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgICB2YXIgbnVtYmVyID0gdGhpcy5udW1iZXJGaWx0ZXIudmFsdWU7XG4gICAgICBpZiAoY29tcGFyYXRvciAmJiBudW1iZXIpIHtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5OVU1CRVIsIHRydWUpKHtcbiAgICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IG9uRmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2Vzc1xuICAgICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgICBnZXRGaWx0ZXIoZnVuY3Rpb24gKGZpbHRlclZhbCkge1xuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBmaWx0ZXJWYWwgIT09IFwiXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX3RoaXMyLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBmaWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgICAgICBfdGhpczIubnVtYmVyRmlsdGVyLnZhbHVlID0gZmlsdGVyVmFsLm51bWJlcjtcbiAgICAgICAgICB2YXIgZm4gPSBmaWx0ZXJWYWwubnVtYmVyO1xuICAgICAgICAgIHZhciBmYyA9IGZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICAgICAgbnVtYmVyOiBmbixcbiAgICAgICAgICAgIGNvbXBhcmF0b3I6IGZjXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNoYW5nZU51bWJlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZU51bWJlcihlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGRlbGF5ID0gX3RoaXMkcHJvcHMyLmRlbGF5LFxuICAgICAgICBkZWxheSA9IF90aGlzJHByb3BzMiRkZWxheSA9PT0gdm9pZCAwID8gX18xLkZJTFRFUl9ERUxBWSA6IF90aGlzJHByb3BzMiRkZWxheSxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMyLmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczIub25GaWx0ZXI7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICAgIGlmIChjb21wYXJhdG9yID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB9XG4gICAgICB2YXIgdiA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbkZpbHRlcihjb2x1bW4sIF9fMS5GSUxURVJfVFlQRVMuTlVNQkVSKSh7XG4gICAgICAgICAgbnVtYmVyOiB2LFxuICAgICAgICAgIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3JcbiAgICAgICAgfSk7XG4gICAgICB9LCBkZWxheSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2hhbmdlTnVtYmVyU2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlTnVtYmVyU2V0KGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczMuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzMy5vbkZpbHRlcjtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgICAgdmFyIHZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIlxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICAvLyBpZiAoY29tcGFyYXRvciA9PT0gJycpIHtcbiAgICAgIC8vICAgcmV0dXJuO1xuICAgICAgLy8gfVxuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IHZhbHVlLFxuICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25DaGFuZ2VDb21wYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2hhbmdlQ29tcGFyYXRvcihlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM0LmNvbHVtbixcbiAgICAgICAgb25GaWx0ZXIgPSBfdGhpcyRwcm9wczQub25GaWx0ZXI7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAvLyBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAvLyAgIHJldHVybjtcbiAgICAgIC8vIH1cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgX18xLkZJTFRFUl9UWVBFUy5OVU1CRVIpKHtcbiAgICAgICAgbnVtYmVyOiB2YWx1ZSxcbiAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvclxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRDb21wYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlZmF1bHRDb21wYXJhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzNSRkZWZhdWx0ViA9IF90aGlzJHByb3BzNS5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IF90aGlzJHByb3BzNSRkZWZhdWx0ViA9PT0gdm9pZCAwID8ge1xuICAgICAgICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbXBhcmF0b3I6IFwiXCJcbiAgICAgICAgfSA6IF90aGlzJHByb3BzNSRkZWZhdWx0VixcbiAgICAgICAgX3RoaXMkcHJvcHM1JGZpbHRlclN0ID0gX3RoaXMkcHJvcHM1LmZpbHRlclN0YXRlLFxuICAgICAgICBmaWx0ZXJTdGF0ZSA9IF90aGlzJHByb3BzNSRmaWx0ZXJTdCA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczUkZmlsdGVyU3Q7XG4gICAgICBpZiAoZmlsdGVyU3RhdGUgJiYgZmlsdGVyU3RhdGUuZmlsdGVyVmFsKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwuY29tcGFyYXRvcjtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlZmF1bHRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHM2JGRlZmF1bHRWID0gX3RoaXMkcHJvcHM2LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM2JGRlZmF1bHRWID09PSB2b2lkIDAgPyB7XG4gICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHM2JGRlZmF1bHRWLFxuICAgICAgICBfdGhpcyRwcm9wczYkZmlsdGVyU3QgPSBfdGhpcyRwcm9wczYuZmlsdGVyU3RhdGUsXG4gICAgICAgIGZpbHRlclN0YXRlID0gX3RoaXMkcHJvcHM2JGZpbHRlclN0ID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzNiRmaWx0ZXJTdDtcbiAgICAgIGlmIChmaWx0ZXJTdGF0ZSAmJiBmaWx0ZXJTdGF0ZS5maWx0ZXJWYWwpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbC5udW1iZXI7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5udW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5udW1iZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q29tcGFyYXRvck9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIF90aGlzJHByb3BzJHdpdGhvdXRFbSA9IHRoaXMucHJvcHMud2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbixcbiAgICAgICAgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbiA9IF90aGlzJHByb3BzJHdpdGhvdXRFbSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRwcm9wcyR3aXRob3V0RW07XG4gICAgICBpZiAoIXdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb24pIHtcbiAgICAgICAgb3B0aW9uVGFncy5wdXNoKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwge1xuICAgICAgICAgIGtleTogXCItMVwiXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb21wYXJhdG9ycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBpLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbXBhcmF0b3JzW2ldXG4gICAgICAgIH0sIHRoaXMuY29tcGFyYXRvcnNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25UYWdzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXROdW1iZXJPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE51bWJlck9wdGlvbnMoKSB7XG4gICAgICB2YXIgb3B0aW9uVGFncyA9IFtdO1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczcub3B0aW9ucyxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHM3LmNvbHVtbixcbiAgICAgICAgX3RoaXMkcHJvcHM3JHdpdGhvdXRFID0gX3RoaXMkcHJvcHM3LndpdGhvdXRFbXB0eU51bWJlck9wdGlvbixcbiAgICAgICAgd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uID0gX3RoaXMkcHJvcHM3JHdpdGhvdXRFID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHByb3BzNyR3aXRob3V0RTtcbiAgICAgIGlmICghd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uKSB7XG4gICAgICAgIG9wdGlvblRhZ3MucHVzaChyZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICBrZXk6IFwiLTFcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgICB9LCB0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8IFwiU2VsZWN0IFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIikpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBvcHRpb25UYWdzLnB1c2gocmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7XG4gICAgICAgICAga2V5OiBpLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zW2ldXG4gICAgICAgIH0sIG9wdGlvbnNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25UYWdzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhcHBseUZpbHRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhcHBseUZpbHRlcihmaWx0ZXJPYmopIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczguY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzOC5vbkZpbHRlcjtcbiAgICAgIHZhciBudW1iZXIgPSBmaWx0ZXJPYmoubnVtYmVyLFxuICAgICAgICBjb21wYXJhdG9yID0gZmlsdGVyT2JqLmNvbXBhcmF0b3I7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1NlbGVjdGVkOiBudW1iZXIgIT09IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID0gY29tcGFyYXRvcjtcbiAgICAgIHRoaXMubnVtYmVyRmlsdGVyLnZhbHVlID0gbnVtYmVyO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IG51bWJlcixcbiAgICAgICAgY29tcGFyYXRvcjogY29tcGFyYXRvclxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFuRmlsdGVyZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW5GaWx0ZXJlZCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb2x1bW4gPSBfdGhpcyRwcm9wczkuY29sdW1uLFxuICAgICAgICBvbkZpbHRlciA9IF90aGlzJHByb3BzOS5vbkZpbHRlcixcbiAgICAgICAgX3RoaXMkcHJvcHM5JGRlZmF1bHRWID0gX3RoaXMkcHJvcHM5LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gX3RoaXMkcHJvcHM5JGRlZmF1bHRWID09PSB2b2lkIDAgPyB7XG4gICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29tcGFyYXRvcjogXCJcIlxuICAgICAgICB9IDogX3RoaXMkcHJvcHM5JGRlZmF1bHRWO1xuICAgICAgdmFyIHZhbHVlID0gZGVmYXVsdFZhbHVlID8gZGVmYXVsdFZhbHVlLm51bWJlciA6IFwiXCI7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGRlZmF1bHRWYWx1ZSA/IGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yIDogXCJcIjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IGNvbXBhcmF0b3I7XG4gICAgICB0aGlzLm51bWJlckZpbHRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBfXzEuRklMVEVSX1RZUEVTLk5VTUJFUikoe1xuICAgICAgICBudW1iZXI6IHZhbHVlLFxuICAgICAgICBjb21wYXJhdG9yOiBjb21wYXJhdG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIGlzU2VsZWN0ZWQgPSB0aGlzLnN0YXRlLmlzU2VsZWN0ZWQ7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMwID0gdGhpcy5wcm9wcyxcbiAgICAgICAgX3RoaXMkcHJvcHMwJGlkID0gX3RoaXMkcHJvcHMwLmlkLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzMCRpZCA9PT0gdm9pZCAwID8gbnVsbCA6IF90aGlzJHByb3BzMCRpZCxcbiAgICAgICAgY29sdW1uID0gX3RoaXMkcHJvcHMwLmNvbHVtbixcbiAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMC5vcHRpb25zLFxuICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzMC5zdHlsZSxcbiAgICAgICAgX3RoaXMkcHJvcHMwJGNsYXNzTmFtID0gX3RoaXMkcHJvcHMwLmNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMwJGNsYXNzTmFtID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMwJGNsYXNzTmFtLFxuICAgICAgICBudW1iZXJTdHlsZSA9IF90aGlzJHByb3BzMC5udW1iZXJTdHlsZSxcbiAgICAgICAgX3RoaXMkcHJvcHMwJG51bWJlckNsID0gX3RoaXMkcHJvcHMwLm51bWJlckNsYXNzTmFtZSxcbiAgICAgICAgbnVtYmVyQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMwJG51bWJlckNsID09PSB2b2lkIDAgPyBcIlwiIDogX3RoaXMkcHJvcHMwJG51bWJlckNsLFxuICAgICAgICBjb21wYXJhdG9yU3R5bGUgPSBfdGhpcyRwcm9wczAuY29tcGFyYXRvclN0eWxlLFxuICAgICAgICBfdGhpcyRwcm9wczAkY29tcGFyYXQgPSBfdGhpcyRwcm9wczAuY29tcGFyYXRvckNsYXNzTmFtZSxcbiAgICAgICAgY29tcGFyYXRvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzMCRjb21wYXJhdCA9PT0gdm9pZCAwID8gXCJcIiA6IF90aGlzJHByb3BzMCRjb21wYXJhdCxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczAucGxhY2Vob2xkZXI7XG4gICAgICB2YXIgc2VsZWN0Q2xhc3MgPSBcIlxcbiAgICAgIHNlbGVjdC1maWx0ZXJcXG4gICAgICBudW1iZXItZmlsdGVyLWlucHV0XFxuICAgICAgZm9ybS1jb250cm9sXFxuICAgICAgXCIuY29uY2F0KG51bWJlckNsYXNzTmFtZSwgXCJcXG4gICAgICBcIikuY29uY2F0KCFpc1NlbGVjdGVkID8gXCJwbGFjZWhvbGRlci1zZWxlY3RlZFwiIDogXCJcIiwgXCJcXG4gICAgXCIpO1xuICAgICAgdmFyIGNvbXBhcmF0b3JFbG1JZCA9IFwibnVtYmVyLWZpbHRlci1jb21wYXJhdG9yLVwiLmNvbmNhdChjb2x1bW4uZGF0YUZpZWxkKS5jb25jYXQoaWQgPyBcIi1cIi5jb25jYXQoaWQpIDogXCJcIik7XG4gICAgICB2YXIgaW5wdXRFbG1JZCA9IFwibnVtYmVyLWZpbHRlci1jb2x1bW4tXCIuY29uY2F0KGNvbHVtbi5kYXRhRmllbGQpLmNvbmNhdChpZCA/IFwiLVwiLmNvbmNhdChpZCkgOiBcIlwiKTtcbiAgICAgIHJldHVybiByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZTogXCJmaWx0ZXIgbnVtYmVyLWZpbHRlciBcIi5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtYmVyLWZpbHRlclwiXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZmlsdGVyLWxhYmVsXCIsXG4gICAgICAgIGh0bWxGb3I6IGNvbXBhcmF0b3JFbG1JZFxuICAgICAgfSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwic3Itb25seVwiXG4gICAgICB9LCBcIkZpbHRlciBjb21wYXJhdG9yXCIpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yID0gbjtcbiAgICAgICAgfSxcbiAgICAgICAgc3R5bGU6IGNvbXBhcmF0b3JTdHlsZSxcbiAgICAgICAgaWQ6IGNvbXBhcmF0b3JFbG1JZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcIm51bWJlci1maWx0ZXItY29tcGFyYXRvciBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KGNvbXBhcmF0b3JDbGFzc05hbWUpLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5nZXREZWZhdWx0Q29tcGFyYXRvcigpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtYmVyLWZpbHRlci1jb21wYXJhdG9yXCJcbiAgICAgIH0sIHRoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSkpLCBvcHRpb25zID8gcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImZpbHRlci1sYWJlbFwiLFxuICAgICAgICBodG1sRm9yOiBpbnB1dEVsbUlkXG4gICAgICB9LCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzci1vbmx5XCJcbiAgICAgIH0sIFwiU2VsZWN0IFwiLmNvbmNhdChjb2x1bW4udGV4dCkpLCByZWFjdF8xW1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5udW1iZXJGaWx0ZXIgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgc3R5bGU6IG51bWJlclN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IHNlbGVjdENsYXNzLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZU51bWJlclNldCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmdldERlZmF1bHRWYWx1ZSgpLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtYmVyLWZpbHRlci1zZWxlY3RcIlxuICAgICAgfSwgdGhpcy5nZXROdW1iZXJPcHRpb25zKCkpKSA6IHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7XG4gICAgICAgIGh0bWxGb3I6IGlucHV0RWxtSWRcbiAgICAgIH0sIHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInNyLW9ubHlcIlxuICAgICAgfSwgXCJFbnRlciBcIi5jb25jYXQoY29sdW1uLnRleHQpKSwgcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobikge1xuICAgICAgICAgIF90aGlzMy5udW1iZXJGaWx0ZXIgPSBuO1xuICAgICAgICB9LFxuICAgICAgICBpZDogaW5wdXRFbG1JZCxcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgc3R5bGU6IG51bWJlclN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IFwibnVtYmVyLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wgXCIuY29uY2F0KG51bWJlckNsYXNzTmFtZSksXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciB8fCBcIkVudGVyIFwiLmNvbmNhdChjb2x1bW4udGV4dCwgXCIuLi5cIiksXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlTnVtYmVyLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCksXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJudW1iZXItZmlsdGVyLWlucHV0XCJcbiAgICAgIH0pKSk7XG4gICAgfVxuICB9XSk7XG59KHJlYWN0XzEuQ29tcG9uZW50KTtcbl9kZWZpbmVQcm9wZXJ0eShOdW1iZXJGaWx0ZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgZGVsYXk6IF9fMS5GSUxURVJfREVMQVksXG4gIG9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgZGVmYXVsdFZhbHVlOiB7XG4gICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgY29tcGFyYXRvcjogXCJcIlxuICB9LFxuICBmaWx0ZXJTdGF0ZToge30sXG4gIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb246IGZhbHNlLFxuICB3aXRob3V0RW1wdHlOdW1iZXJPcHRpb246IGZhbHNlLFxuICBjb21wYXJhdG9yczogbGVnYWxDb21wYXJhdG9ycyxcbiAgcGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgc3R5bGU6IHVuZGVmaW5lZCxcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICBjb21wYXJhdG9yU3R5bGU6IHVuZGVmaW5lZCxcbiAgY29tcGFyYXRvckNsYXNzTmFtZTogXCJcIixcbiAgbnVtYmVyU3R5bGU6IHVuZGVmaW5lZCxcbiAgbnVtYmVyQ2xhc3NOYW1lOiBcIlwiLFxuICBpZDogbnVsbFxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IE51bWJlckZpbHRlcjsiLCIvKiBlc2xpbnQganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRklMVEVSX0RFTEFZLCBGSUxURVJfVFlQRVMsIE51bWJlckZpbHRlclByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmNvbnN0IEVRID0gXCI9XCI7XG5jb25zdCBORSA9IFwiIT1cIjtcbmNvbnN0IEdUID0gXCI+XCI7XG5jb25zdCBHRSA9IFwiPj1cIjtcbmNvbnN0IExUID0gXCI8XCI7XG5jb25zdCBMRSA9IFwiPD1cIjtcblxuY29uc3QgbGVnYWxDb21wYXJhdG9ycyA9IFtFUSwgTkUsIEdULCBHRSwgTFQsIExFXTtcblxuaW50ZXJmYWNlIE51bWJlckZpbHRlclN0YXRlIHtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuY2xhc3MgTnVtYmVyRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50PE51bWJlckZpbHRlclByb3BzLCBOdW1iZXJGaWx0ZXJTdGF0ZT4ge1xuICBjb21wYXJhdG9yczogYW55W107XG4gIG51bWJlckZpbHRlcjogYW55O1xuICBudW1iZXJGaWx0ZXJDb21wYXJhdG9yOiBhbnk7XG4gIHRpbWVvdXQ6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogTnVtYmVyRmlsdGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb21wYXJhdG9ycyA9IHByb3BzLmNvbXBhcmF0b3JzIHx8IGxlZ2FsQ29tcGFyYXRvcnM7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICBsZXQgaXNTZWxlY3RlZCA9XG4gICAgICBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlLm51bWJlciAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5vcHRpb25zICYmIGlzU2VsZWN0ZWQpIHtcbiAgICAgIGlzU2VsZWN0ZWQgPSBwcm9wcy5vcHRpb25zLmluZGV4T2YocHJvcHMuZGVmYXVsdFZhbHVlLm51bWJlcikgPiAtMTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9IHsgaXNTZWxlY3RlZCB9O1xuICAgIHRoaXMub25DaGFuZ2VOdW1iZXIgPSB0aGlzLm9uQ2hhbmdlTnVtYmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZU51bWJlclNldCA9IHRoaXMub25DaGFuZ2VOdW1iZXJTZXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvciA9IHRoaXMub25DaGFuZ2VDb21wYXJhdG9yLmJpbmQodGhpcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgb25GaWx0ZXIsIGdldEZpbHRlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb21wYXJhdG9yID1cbiAgICAgIHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9PT0gXCJcIlxuICAgICAgICA/IEVRXG4gICAgICAgIDogdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGNvbnN0IG51bWJlciA9IHRoaXMubnVtYmVyRmlsdGVyLnZhbHVlO1xuICAgIGlmIChjb21wYXJhdG9yICYmIG51bWJlcikge1xuICAgICAgLy8gVE9ET1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuTlVNQkVSLCB0cnVlKSh7IG51bWJlciwgY29tcGFyYXRvciB9KTtcbiAgICB9XG5cbiAgICAvLyBleHBvcnQgb25GaWx0ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdXNlcnMgdG8gYWNjZXNzXG4gICAgaWYgKGdldEZpbHRlcikge1xuICAgICAgZ2V0RmlsdGVyKChmaWx0ZXJWYWw6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGlzU2VsZWN0ZWQ6IGZpbHRlclZhbCAhPT0gXCJcIiB9KSk7XG4gICAgICAgIHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZSA9IGZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgICAgICB0aGlzLm51bWJlckZpbHRlci52YWx1ZSA9IGZpbHRlclZhbC5udW1iZXI7XG5cbiAgICAgICAgY29uc3QgZm4gPSBmaWx0ZXJWYWwubnVtYmVyO1xuICAgICAgICBjb25zdCBmYyA9IGZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuTlVNQkVSKSh7IG51bWJlcjogZm4sIGNvbXBhcmF0b3I6IGZjIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gIH1cblxuICBvbkNoYW5nZU51bWJlcihlOiBhbnkpIHtcbiAgICBjb25zdCB7IGRlbGF5ID0gRklMVEVSX0RFTEFZLCBjb2x1bW4sIG9uRmlsdGVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgaWYgKGNvbXBhcmF0b3IgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBlLnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUikoeyBudW1iZXI6IHYsIGNvbXBhcmF0b3IgfSk7XG4gICAgfSwgZGVsYXkpO1xuICB9XG5cbiAgb25DaGFuZ2VOdW1iZXJTZXQoZTogYW55KSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gZS50YXJnZXQ7XG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBpc1NlbGVjdGVkOiB2YWx1ZSAhPT0gXCJcIiB9KSk7XG4gICAgLy8gaWYgKGNvbXBhcmF0b3IgPT09ICcnKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIC8vIFRPRE9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25GaWx0ZXIoY29sdW1uLCBGSUxURVJfVFlQRVMuTlVNQkVSKSh7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSk7XG4gIH1cblxuICBvbkNoYW5nZUNvbXBhcmF0b3IoZTogYW55KSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIG9uRmlsdGVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5udW1iZXJGaWx0ZXIudmFsdWU7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIC8vIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAvLyAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5OVU1CRVIpKHsgbnVtYmVyOiB2YWx1ZSwgY29tcGFyYXRvciB9KTtcbiAgfVxuXG4gIGdldERlZmF1bHRDb21wYXJhdG9yKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHsgbnVtYmVyOiB1bmRlZmluZWQsIGNvbXBhcmF0b3I6IFwiXCIgfSxcbiAgICAgIGZpbHRlclN0YXRlID0ge30sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpbHRlclN0YXRlICYmIGZpbHRlclN0YXRlLmZpbHRlclZhbCkge1xuICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbC5jb21wYXJhdG9yO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3I7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHsgbnVtYmVyOiB1bmRlZmluZWQsIGNvbXBhcmF0b3I6IFwiXCIgfSxcbiAgICAgIGZpbHRlclN0YXRlID0ge30sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpbHRlclN0YXRlICYmIGZpbHRlclN0YXRlLmZpbHRlclZhbCkge1xuICAgICAgcmV0dXJuIGZpbHRlclN0YXRlLmZpbHRlclZhbC5udW1iZXI7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgZGVmYXVsdFZhbHVlLm51bWJlcikge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZS5udW1iZXI7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9uVGFncyA9IFtdO1xuICAgIGNvbnN0IHsgd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbiA9IGZhbHNlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICghd2l0aG91dEVtcHR5Q29tcGFyYXRvck9wdGlvbikge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKDxvcHRpb24ga2V5PVwiLTFcIiAvPik7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21wYXJhdG9ycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT17aX0gdmFsdWU9e3RoaXMuY29tcGFyYXRvcnNbaV19PlxuICAgICAgICAgIHt0aGlzLmNvbXBhcmF0b3JzW2ldfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgZ2V0TnVtYmVyT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3QgeyBvcHRpb25zLCBjb2x1bW4sIHdpdGhvdXRFbXB0eU51bWJlck9wdGlvbiA9IGZhbHNlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICghd2l0aG91dEVtcHR5TnVtYmVyT3B0aW9uKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgIDxvcHRpb24ga2V5PVwiLTFcIiB2YWx1ZT1cIlwiPlxuICAgICAgICAgIHt0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8IGBTZWxlY3QgJHtjb2x1bW4udGV4dH0uLi5gfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKG9wdGlvbnMgYXMgbnVtYmVyW10pLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgIDxvcHRpb24ga2V5PXtpfSB2YWx1ZT17KG9wdGlvbnMgYXMgbnVtYmVyW10pW2ldfT5cbiAgICAgICAgICB7KG9wdGlvbnMgYXMgbnVtYmVyW10pW2ldfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIoZmlsdGVyT2JqOiBhbnkpIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgb25GaWx0ZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBudW1iZXIsIGNvbXBhcmF0b3IgfSA9IGZpbHRlck9iajtcbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGlzU2VsZWN0ZWQ6IG51bWJlciAhPT0gXCJcIiB9KSk7XG4gICAgdGhpcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlID0gY29tcGFyYXRvcjtcbiAgICB0aGlzLm51bWJlckZpbHRlci52YWx1ZSA9IG51bWJlcjtcbiAgICAvLyBUT0RPXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9uRmlsdGVyKGNvbHVtbiwgRklMVEVSX1RZUEVTLk5VTUJFUikoeyBudW1iZXIsIGNvbXBhcmF0b3IgfSk7XG4gIH1cblxuICBjbGVhbkZpbHRlcmVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbHVtbixcbiAgICAgIG9uRmlsdGVyLFxuICAgICAgZGVmYXVsdFZhbHVlID0geyBudW1iZXI6IHVuZGVmaW5lZCwgY29tcGFyYXRvcjogXCJcIiB9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdFZhbHVlID8gZGVmYXVsdFZhbHVlLm51bWJlciA6IFwiXCI7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IGRlZmF1bHRWYWx1ZSA/IGRlZmF1bHRWYWx1ZS5jb21wYXJhdG9yIDogXCJcIjtcbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGlzU2VsZWN0ZWQ6IHZhbHVlICE9PSBcIlwiIH0pKTtcbiAgICB0aGlzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWUgPSBjb21wYXJhdG9yO1xuICAgIHRoaXMubnVtYmVyRmlsdGVyLnZhbHVlID0gdmFsdWU7XG4gICAgLy8gVE9ET1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvbkZpbHRlcihjb2x1bW4sIEZJTFRFUl9UWVBFUy5OVU1CRVIpKHsgbnVtYmVyOiB2YWx1ZSwgY29tcGFyYXRvciB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGlzU2VsZWN0ZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgaWQgPSBudWxsLFxuICAgICAgY29sdW1uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHN0eWxlLFxuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIG51bWJlclN0eWxlLFxuICAgICAgbnVtYmVyQ2xhc3NOYW1lID0gXCJcIixcbiAgICAgIGNvbXBhcmF0b3JTdHlsZSxcbiAgICAgIGNvbXBhcmF0b3JDbGFzc05hbWUgPSBcIlwiLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgc2VsZWN0Q2xhc3MgPSBgXG4gICAgICBzZWxlY3QtZmlsdGVyXG4gICAgICBudW1iZXItZmlsdGVyLWlucHV0XG4gICAgICBmb3JtLWNvbnRyb2xcbiAgICAgICR7bnVtYmVyQ2xhc3NOYW1lfVxuICAgICAgJHshaXNTZWxlY3RlZCA/IFwicGxhY2Vob2xkZXItc2VsZWN0ZWRcIiA6IFwiXCJ9XG4gICAgYDtcblxuICAgIGNvbnN0IGNvbXBhcmF0b3JFbG1JZCA9IGBudW1iZXItZmlsdGVyLWNvbXBhcmF0b3ItJHtjb2x1bW4uZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIGNvbnN0IGlucHV0RWxtSWQgPSBgbnVtYmVyLWZpbHRlci1jb2x1bW4tJHtjb2x1bW4uZGF0YUZpZWxkfSR7aWQgPyBgLSR7aWR9YCA6IFwiXCJcbiAgICAgIH1gO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgIGNsYXNzTmFtZT17YGZpbHRlciBudW1iZXItZmlsdGVyICR7Y2xhc3NOYW1lfWB9XG4gICAgICAgIHN0eWxlPXtzdHlsZSBhcyBhbnl9XG4gICAgICAgIGRhdGEtdGVzdGlkPVwibnVtYmVyLWZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIiBodG1sRm9yPXtjb21wYXJhdG9yRWxtSWR9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5GaWx0ZXIgY29tcGFyYXRvcjwvc3Bhbj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMubnVtYmVyRmlsdGVyQ29tcGFyYXRvciA9IG47IH19XG4gICAgICAgICAgICBzdHlsZT17Y29tcGFyYXRvclN0eWxlIGFzIGFueX1cbiAgICAgICAgICAgIGlkPXtjb21wYXJhdG9yRWxtSWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2BudW1iZXItZmlsdGVyLWNvbXBhcmF0b3IgZm9ybS1jb250cm9sICR7Y29tcGFyYXRvckNsYXNzTmFtZX1gfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2VDb21wYXJhdG9yfVxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXt0aGlzLmdldERlZmF1bHRDb21wYXJhdG9yKCl9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm51bWJlci1maWx0ZXItY29tcGFyYXRvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKX1cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAge29wdGlvbnMgPyAoXG4gICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZpbHRlci1sYWJlbFwiIGh0bWxGb3I9e2lucHV0RWxtSWR9PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPntgU2VsZWN0ICR7Y29sdW1uLnRleHR9YH08L3NwYW4+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIHJlZj17KG4pID0+IHsgdGhpcy5udW1iZXJGaWx0ZXIgPSBuOyB9fVxuICAgICAgICAgICAgICBpZD17aW5wdXRFbG1JZH1cbiAgICAgICAgICAgICAgc3R5bGU9e251bWJlclN0eWxlIGFzIGFueX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzZWxlY3RDbGFzc31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2VOdW1iZXJTZXR9XG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5nZXREZWZhdWx0VmFsdWUoKX1cbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJudW1iZXItZmlsdGVyLXNlbGVjdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0aGlzLmdldE51bWJlck9wdGlvbnMoKX1cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGxhYmVsIGh0bWxGb3I9e2lucHV0RWxtSWR9PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPntgRW50ZXIgJHtjb2x1bW4udGV4dH1gfTwvc3Bhbj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMubnVtYmVyRmlsdGVyID0gbjsgfX1cbiAgICAgICAgICAgICAgaWQ9e2lucHV0RWxtSWR9XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBzdHlsZT17bnVtYmVyU3R5bGUgYXMgYW55fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BudW1iZXItZmlsdGVyLWlucHV0IGZvcm0tY29udHJvbCAke251bWJlckNsYXNzTmFtZX1gfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXIgfHwgYEVudGVyICR7Y29sdW1uLnRleHR9Li4uYH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2VOdW1iZXJ9XG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5nZXREZWZhdWx0VmFsdWUoKX1cbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJudW1iZXItZmlsdGVyLWlucHV0XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGRlbGF5OiBGSUxURVJfREVMQVksXG4gICAgb3B0aW9uczogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZToge1xuICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICBjb21wYXJhdG9yOiBcIlwiLFxuICAgIH0sXG4gICAgZmlsdGVyU3RhdGU6IHt9LFxuICAgIHdpdGhvdXRFbXB0eUNvbXBhcmF0b3JPcHRpb246IGZhbHNlLFxuICAgIHdpdGhvdXRFbXB0eU51bWJlck9wdGlvbjogZmFsc2UsXG4gICAgY29tcGFyYXRvcnM6IGxlZ2FsQ29tcGFyYXRvcnMsXG4gICAgcGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgICBzdHlsZTogdW5kZWZpbmVkLFxuICAgIGNsYXNzTmFtZTogXCJcIixcbiAgICBjb21wYXJhdG9yU3R5bGU6IHVuZGVmaW5lZCxcbiAgICBjb21wYXJhdG9yQ2xhc3NOYW1lOiBcIlwiLFxuICAgIG51bWJlclN0eWxlOiB1bmRlZmluZWQsXG4gICAgbnVtYmVyQ2xhc3NOYW1lOiBcIlwiLFxuICAgIGlkOiBudWxsLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBOdW1iZXJGaWx0ZXI7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY4NCk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwicmVxdWlyZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXyIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiZSIsInIiLCJ0IiwibGVuZ3RoIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJUeXBlRXJyb3IiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiYXBwbHkiLCJCb29sZWFuIiwidmFsdWVPZiIsImNhbGwiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiYmluZCIsIl9fcHJvdG9fXyIsIl9zZXRQcm90b3R5cGVPZiIsIl9kZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3RvUHJpbWl0aXZlIiwiX19pbXBvcnREZWZhdWx0IiwibW9kIiwiX19lc01vZHVsZSIsInJlYWN0XzEiLCJfXzEiLCJmaWx0ZXJfMSIsIl8iLCJpc1JlbW90ZUZpbHRlcmluZyIsImhhbmRsZUZpbHRlckNoYW5nZSIsIkZpbHRlckNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiRmlsdGVyUHJvdmlkZXIiLCJfcmVhY3RfMSRkZWZhdWx0JENvbXAiLCJwcm9wcyIsIl90aGlzIiwiYSIsIm4iLCJfY2xhc3NDYWxsQ2hlY2siLCJ0aGlzIiwiY3VyckZpbHRlcnMiLCJjbGVhckZpbHRlcnMiLCJvbkZpbHRlciIsImRvRmlsdGVyIiwib25FeHRlcm5hbEZpbHRlciIsImRhdGEiLCJpc0VtaXREYXRhQ2hhbmdlIiwiY3JlYXRlIiwiX2luaGVyaXRzIiwia2V5cyIsImNvbHVtbiIsImZpbHRlclR5cGUiLCJfdGhpczIiLCJpbml0aWFsaXplIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZmlsdGVyVmFsIiwiYXNzaWduIiwiZGF0YUZpZWxkIiwiZmlsdGVyIiwiaXNEZWZpbmVkIiwiX2ZpbHRlciRwcm9wcyIsIl9maWx0ZXIkcHJvcHMkY29tcGFyYSIsImNvbXBhcmF0b3IiLCJGSUxURVJfVFlQRVMiLCJTRUxFQ1QiLCJFUSIsIkxJS0UiLCJfZmlsdGVyJHByb3BzJGNhc2VTZW4iLCJjYXNlU2Vuc2l0aXZlIiwiY2xlYXIiLCJmb3JjZVVwZGF0ZSIsIl90aGlzMyIsIm5leHRQcm9wcyIsIm5leHRTdGF0ZSIsIm5leHRDb250ZXh0IiwiaXNFcXVhbCIsImlnbm9yZUVtaXREYXRhQ2hhbmdlIiwiZGF0YUNoYW5nZUxpc3RlbmVyIiwiY29sdW1ucyIsInJlc3VsdCIsImZpbHRlcnMiLCJhZnRlckZpbHRlciIsImVtaXQiLCJjcmVhdGVFbGVtZW50IiwiUHJvdmlkZXIiLCJjaGlsZHJlbiIsIkNvbXBvbmVudCIsIkNvbnN1bWVyIiwiX2V4Y2x1ZGVkIiwib3duS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiZm9yRWFjaCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX293bktleXMiLCJfX2NyZWF0ZUJpbmRpbmciLCJtIiwiayIsImsyIiwiZGVzYyIsImdldCIsIl9fc2V0TW9kdWxlRGVmYXVsdCIsInYiLCJfX2ltcG9ydFN0YXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiYXIiLCJoYXNPd25Qcm9wZXJ0eSIsIlNlbGVjdEZpbHRlciIsIl9yZWFjdF8xJENvbXBvbmVudCIsIm9wdGlvbnMiLCJnZXRPcHRpb25zIiwiaXNTZWxlY3RlZCIsImdldERlZmF1bHRWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsIl9yZWYiLCJsYWJlbCIsIm1hcCIsIl9yZWYyIiwic3RhdGUiLCJfdGhpcyRwcm9wcyIsImdldEZpbHRlciIsInNlbGVjdElucHV0Iiwic2V0U3RhdGUiLCJwcmV2UHJvcHMiLCJuZWVkRmlsdGVyIiwiX3RoaXMkcHJvcHMyIiwiZGVmYXVsdFZhbHVlIiwibmV4dE9wdGlvbnMiLCJjdXJyT3B0cyIsInByZXZPcHRzIiwiX2kiLCJvcHRpb25zRXF1YWxzIiwiX3RoaXMkcHJvcHMzIiwiZmlsdGVyU3RhdGUiLCJ0YXJnZXQiLCJvcHRpb25UYWdzIiwiX3RoaXMkcHJvcHM0IiwicGxhY2Vob2xkZXIiLCJ3aXRob3V0RW1wdHlPcHRpb24iLCJjb25jYXQiLCJ0ZXh0IiwiX3JlZjMiLCJfdGhpcyRwcm9wczUiLCJpZCIsInN0eWxlIiwiY2xhc3NOYW1lIiwicmVzdCIsImluZGV4T2YiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwic2VsZWN0Q2xhc3MiLCJlbG1JZCIsImh0bWxGb3IiLCJyZWYiLCJvbkNoYW5nZSIsIm9uQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJyZW5kZXJPcHRpb25zIiwiZmlsdGVyRmFjdG9yeSIsImZpbHRlckJ5QXJyYXkiLCJmaWx0ZXJCeURhdGUiLCJmaWx0ZXJCeU51bWJlciIsImZpbHRlckJ5VGV4dCIsImN1c3RvbUZpbHRlclZhbHVlIiwiX3JlZiRmaWx0ZXJWYWwiLCJ1c2VySW5wdXQiLCJfcmVmJGNvbXBhcmF0b3IiLCJ0b1N0cmluZyIsInJvdyIsImNlbGwiLCJjZWxsU3RyIiwiaW5jbHVkZXMiLCJ0b0xvY2FsZVVwcGVyQ2FzZSIsIl9yZWYyJGZpbHRlclZhbCIsIm51bWJlciIsIkdUIiwiR0UiLCJMVCIsIkxFIiwiTkUiLCJjb25zb2xlIiwiZXJyb3IiLCJfcmVmMyRmaWx0ZXJWYWwiLCJkYXRlIiwiZmlsdGVyRGF0ZSIsImdldFVUQ0RhdGUiLCJmaWx0ZXJNb250aCIsImdldFVUQ01vbnRoIiwiZmlsdGVyWWVhciIsImdldFVUQ0Z1bGxZZWFyIiwidmFsaWQiLCJEYXRlIiwidGFyZ2V0RGF0ZSIsInRhcmdldE1vbnRoIiwidGFyZ2V0WWVhciIsIl9yZWY0IiwicmVmaW5lZEZpbHRlclZhbCIsIngiLCJzb21lIiwiaXRlbSIsIk1VTFRJU0VMRUNUIiwiTlVNQkVSIiwiREFURSIsIlRFWFQiLCJmaWx0ZXJGbiIsImN1cnJlbnRSZXN1bHQiLCJmaWx0ZXJWYWx1ZSIsImN1c3RvbUZpbHRlciIsImZpbHRlck9iaiIsImdldFNlbGVjdGlvbnMiLCJjb250YWluZXIiLCJzZWxlY3RlZE9wdGlvbnMiLCJmcm9tIiwic2VsZWN0aW9ucyIsInRvdGFsTGVuIiwib3B0aW9uIiwic2VsZWN0ZWQiLCJNdWx0aVNlbGVjdEZpbHRlciIsInN1cGVyIiwiYXBwbHlGaWx0ZXIiLCJjb21wb25lbnREaWRNb3VudCIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNsZWFuRmlsdGVyZWQiLCJyZW5kZXIiLCJtdWx0aXBsZSIsInN0YXRpYyIsImRhdGVGaWx0ZXIiLCJudW1iZXJGaWx0ZXIiLCJtdWx0aVNlbGVjdEZpbHRlciIsInNlbGVjdEZpbHRlciIsInRleHRGaWx0ZXIiLCJDb21wYXJhdG9yTnVtYmVyIiwiRklMVEVSX0RFTEFZIiwiZGF0ZV8xIiwibXVsdGlzZWxlY3RfMSIsIm51bWJlcl8xIiwic2VsZWN0XzEiLCJ0ZXh0XzEiLCJjb250ZXh0XzEiLCJGaWx0ZXIiLCJnZXRPcHRpb25WYWx1ZSIsIlRleHRGaWx0ZXIiLCJpbnB1dCIsInRpbWVvdXQiLCJoYW5kbGVDbGljayIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY2xlYW5UaW1lciIsIm5leHRWYWx1ZSIsInNldFRpbWVvdXQiLCJkZWxheSIsImNsZWFyVGltZW91dCIsImZpbHRlclRleHQiLCJ0eXBlIiwiX3Byb3BzJGRlZmF1bHRWYWx1ZSIsIl90aGlzJHByb3BzJGZpbHRlclN0YSIsIl90aGlzJHByb3BzJGRlZmF1bHRWYSIsIl90aGlzJHByb3BzMiR3aXRob3V0RSIsIl90aGlzJHByb3BzMiRkZWZhdWx0ViIsIl90aGlzJHByb3BzMyRpZCIsIl90aGlzJHByb3BzMyRjbGFzc05hbSIsIl90aGlzJHByb3BzMyRjb21wYXJhdCIsImdldEZpbHRlcmVkIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwiX3RoaXM0IiwiX3RoaXMkcHJvcHMkZGVmYXVsdFZhMiIsIl90aGlzNSIsIl90aGlzJHByb3BzMiRpZCIsIl90aGlzJHByb3BzMiRjb2x1bW4iLCJsZWdhbENvbXBhcmF0b3JzIiwiZGF0ZVBhcnNlciIsImQiLCJzbGljZSIsIkRhdGVGaWx0ZXIiLCJjb21wYXJhdG9ycyIsIm9uQ2hhbmdlRGF0ZSIsIm9uQ2hhbmdlQ29tcGFyYXRvciIsImRhdGVGaWx0ZXJDb21wYXJhdG9yIiwiaW5wdXREYXRlIiwibnVsbGFibGVGaWx0ZXJWYWwiLCJfdGhpcyRwcm9wcyR3aXRob3V0RW0iLCJ3aXRob3V0RW1wdHlDb21wYXJhdG9yT3B0aW9uIiwiX3RoaXMkcHJvcHMyJGZpbHRlclN0IiwiaXNJbml0aWFsIiwiX3RoaXMkcHJvcHMzJGRlbGF5IiwiZXhlY3V0ZSIsIl90aGlzJHByb3BzNCRpZCIsIl90aGlzJHByb3BzNCRjb2x1bW4iLCJjb21wYXJhdG9yU3R5bGUiLCJkYXRlU3R5bGUiLCJfdGhpcyRwcm9wczQkY2xhc3NOYW0iLCJfdGhpcyRwcm9wczQkY29tcGFyYXQiLCJjb21wYXJhdG9yQ2xhc3NOYW1lIiwiX3RoaXMkcHJvcHM0JGRhdGVDbGFzIiwiZGF0ZUNsYXNzTmFtZSIsImNvbXBhcmF0b3JFbG1JZCIsImlucHV0RWxtSWQiLCJnZXREZWZhdWx0Q29tcGFyYXRvciIsImdldENvbXBhcmF0b3JPcHRpb25zIiwiZ2V0RGVmYXVsdERhdGUiLCJOdW1iZXJGaWx0ZXIiLCJvbkNoYW5nZU51bWJlciIsIm9uQ2hhbmdlTnVtYmVyU2V0IiwibnVtYmVyRmlsdGVyQ29tcGFyYXRvciIsImZuIiwiZmMiLCJfdGhpcyRwcm9wczIkZGVsYXkiLCJfdGhpcyRwcm9wczUkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczUkZmlsdGVyU3QiLCJfdGhpcyRwcm9wczYiLCJfdGhpcyRwcm9wczYkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczYkZmlsdGVyU3QiLCJfdGhpcyRwcm9wczciLCJfdGhpcyRwcm9wczckd2l0aG91dEUiLCJ3aXRob3V0RW1wdHlOdW1iZXJPcHRpb24iLCJfdGhpcyRwcm9wczgiLCJfdGhpcyRwcm9wczkiLCJfdGhpcyRwcm9wczkkZGVmYXVsdFYiLCJfdGhpcyRwcm9wczAiLCJfdGhpcyRwcm9wczAkaWQiLCJfdGhpcyRwcm9wczAkY2xhc3NOYW0iLCJudW1iZXJTdHlsZSIsIl90aGlzJHByb3BzMCRudW1iZXJDbCIsIm51bWJlckNsYXNzTmFtZSIsIl90aGlzJHByb3BzMCRjb21wYXJhdCIsImdldE51bWJlck9wdGlvbnMiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9