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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgToolkit=t(require("react")):e.ReactBootstrapTableNgToolkit=t(e.React)}(self,e=>(()=>{var t={40(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(556)),a=r(o(442)),n={className:"",style:{}},l=e=>{const{onExport:t,children:o,className:r,...s}={...n,...e};return a.default.createElement("button",{type:"button",className:`react-bs-table-csv-btn btn btn-default ${r}`,onClick:()=>t(),...s},o)};l.propTypes={children:s.default.node.isRequired,onExport:s.default.func.isRequired,className:s.default.string,style:s.default.object},t.default=l},68(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(556)),a=r(o(442)),n=({onClear:e,text:t="Clear",className:o=""})=>a.default.createElement("button",{className:`btn btn-default ${o}`,onClick:e},t);n.propTypes={onClear:s.default.func.isRequired,className:s.default.string,text:s.default.string},t.default=n},140(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(556)),a=r(o(442)),n=({columns:e,onColumnToggle:t,toggles:o,btnClassName:r="",className:s="",contextual:n="primary"})=>a.default.createElement("div",{className:`btn-group btn-group-toggle ${s}`,"data-toggle":"buttons"},e.map(e=>({...e,toggle:o[e.dataField]})).map(e=>a.default.createElement("button",{type:"button",key:e.dataField,className:`${r} btn btn-${n} ${e.toggle?"active":""}`,"data-toggle":"button","aria-pressed":e.toggle?"true":"false",onClick:()=>t(e.dataField)},e.text)));n.propTypes={columns:s.default.array.isRequired,toggles:s.default.object.isRequired,onColumnToggle:s.default.func.isRequired,btnClassName:s.default.string,className:s.default.string,contextual:s.default.string},t.default=n},213(e,t,o){var r,s,a;s=[],void 0===(a="function"==typeof(r=function(){"use strict";function t(e,t){return void 0===t?t={autoBom:!1}:"object"!=typeof t&&(console.warn("Deprecated: Expected third argument to be a object"),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\ufeff",e],{type:e.type}):e}function r(e,t,o){var r=new XMLHttpRequest;r.open("GET",e),r.responseType="blob",r.onload=function(){i(r.response,t,o)},r.onerror=function(){console.error("could not download file")},r.send()}function s(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function a(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(o){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var n="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof o.g&&o.g.global===o.g?o.g:void 0,l=n.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),i=n.saveAs||("object"!=typeof window||window!==n?function(){}:"download"in HTMLAnchorElement.prototype&&!l?function(e,t,o){var l=n.URL||n.webkitURL,i=document.createElement("a");t=t||e.name||"download",i.download=t,i.rel="noopener","string"==typeof e?(i.href=e,i.origin===location.origin?a(i):s(i.href)?r(e,t,o):a(i,i.target="_blank")):(i.href=l.createObjectURL(e),setTimeout(function(){l.revokeObjectURL(i.href)},4e4),setTimeout(function(){a(i)},0))}:"msSaveOrOpenBlob"in navigator?function(e,o,n){if(o=o||e.name||"download","string"!=typeof e)navigator.msSaveOrOpenBlob(t(e,n),o);else if(s(e))r(e,o,n);else{var l=document.createElement("a");l.href=e,l.target="_blank",setTimeout(function(){a(l)})}}:function(e,t,o,s){if((s=s||open("","_blank"))&&(s.document.title=s.document.body.innerText="downloading..."),"string"==typeof e)return r(e,t,o);var a="application/octet-stream"===e.type,i=/constructor/i.test(n.HTMLElement)||n.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent);if((u||a&&i||l)&&"undefined"!=typeof FileReader){var c=new FileReader;c.onloadend=function(){var e=c.result;e=u?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),s?s.location.href=e:location=e,s=null},c.readAsDataURL(e)}else{var d=n.URL||n.webkitURL,p=d.createObjectURL(e);s?s.location=p:location.href=p,s=null,setTimeout(function(){d.revokeObjectURL(p)},4e4)}});n.saveAs=i.saveAs=i,e.exports=i})?r.apply(t,s):r)||(e.exports=a)},282(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(40));t.default={ExportCSVButton:s.default}},442(t){"use strict";t.exports=e},457(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.save=t.transform=t.getMetaInfo=void 0;const s=r(o(213));t.getMetaInfo=e=>e.map(e=>({field:e.dataField,type:e.csvType||String,formatter:e.csvFormatter,formatExtraData:e.formatExtraData,header:e.csvText||e.text,export:!1!==e.csvExport,row:Number(e.row)||0,rowSpan:Number(e.rowSpan)||1,colSpan:Number(e.colSpan)||1,footer:e.footer,footerFormatter:e.footerFormatter})).filter(e=>e.export);t.transform=(e,t,o,r,{separator:s,ignoreHeader:a,ignoreFooter:n})=>{const l=t.filter(e=>e.export);let i="";return a||(i+=l.map(e=>`"${e.header}"`).join(s),i+="\n"),0===e.length||(i+=e.map((e,t)=>l.map(o=>{let s=r.get(e,o.field);return o.formatter&&(s=o.formatter(s,e,t,o.formatExtraData)),o.type===String?`"${`${s}`.replace(/"/g,'""')}"`:s}).join(s)).join("\n"),n||(i+="\n",i+=l.map((t,s)=>{if("function"==typeof t.footer){const a=r.pluck(e,o[s].dataField);return`"${t.footer(a,o[s],s)}"`}return t.footerFormatter?`"${t.footerFormatter(o[s],s)}"`:`"${t.footer}"`}).join(s))),i};t.save=(e,{noAutoBOM:t,fileName:o,blobType:r})=>{s.default.saveAs(new Blob([e],{type:r}),o,t)}},469(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(881));t.default={csvOperation:s.default}},470(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(801)),a=r(o(68));t.default={SearchBar:s.default,ClearSearchButton:a.default}},499(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(442));t.default=(e={searchFormatted:!1,afterSearch:void 0,onColumnMatch:()=>!1})=>(t,o,r)=>{const a=s.default.createContext(null);class n extends s.default.Component{constructor(e){super(e);let t=e.data;o()&&""!==this.props.searchText?r(this.props.searchText):(t=this.search(e),this.triggerListener(t,!0)),this.state={data:t}}getSearched(){return this.state.data}triggerListener(t,o){e.afterSearch&&!o&&e.afterSearch(t),this.props.dataChangeListener&&this.props.dataChangeListener.emit("filterChanged",t.length)}componentDidUpdate(e){if(e.searchText!==this.props.searchText)if(o())r(this.props.searchText);else{const e=this.search(this.props);this.triggerListener(e),this.setState({data:e})}else if(o())t.isEqual(this.state.data,this.props.data)||this.setState({data:this.props.data});else if(!t.isEqual(e.data,this.props.data)){const e=this.search(this.props);this.triggerListener(e),this.setState({data:e})}}search(o){const{data:r,columns:s}=o,a=o.searchText.toLowerCase();return r.filter((o,r)=>{for(let n=0;n<s.length;n+=1){const l=s[n];if(!1===l.searchable)continue;let i=t.get(o,l.dataField);if(l.formatter&&e.searchFormatted?i=l.formatter(i,o,r,l.formatExtraData):l.filterValue&&(i=l.filterValue(i,o)),e.onColumnMatch){if(e.onColumnMatch({searchText:a,value:i,column:l,row:o}))return!0}else if(null!=i&&(i=i.toString().toLowerCase(),i.indexOf(a)>-1))return!0}return!1})}render(){return s.default.createElement(a.Provider,{value:{data:this.state.data}},this.props.children)}}return{Provider:n,Consumer:a.Consumer}}},555(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(140));t.default={ToggleList:s.default}},556(e,t,o){e.exports=o(694)()},633(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(442)),a=r(o(499)),n=r(o(880)),l=s.default.createContext({searchProps:{searchText:"",onSearch:e=>{},onClear:()=>{}},csvProps:{onExport:()=>{}},columnToggleProps:{columns:[],toggles:[],onColumnToggle:e=>{}},baseProps:{keyField:void 0,columns:[],data:[],bootstrap4:void 0}});class i extends((0,n.default)(s.default.Component)){constructor(e){super(e);const t={columnToggle:{},searchText:"object"==typeof e.search&&e.search.defaultSearch||""};this._=null,this.onClear=this.onClear.bind(this),this.onSearch=this.onSearch.bind(this),this.onColumnToggle=this.onColumnToggle.bind(this),this.setDependencyModules=this.setDependencyModules.bind(this),e.columnToggle&&(t.columnToggle=e.columns.reduce((e,t)=>(e[t.dataField]=!t.hidden,e),{})),t.searchText="object"==typeof e.search&&e.search.defaultSearch||"",this.state=t}static getDerivedStateFromProps(e,t){const o=t.columnToggle;let r;return r=e.columnToggle?e.columns.reduce((e,t)=>(e[t.dataField]=!t.hidden,e),{}):{},o?{...t,currColumnToggle:o}:{...t,propsColumnToggle:r}}onSearch(e){e!==this.state.searchText&&this.setState({searchText:e})}onClear(){this.setState({searchText:""})}onColumnToggle(e){const{columnToggle:t}=this.state;t[e]=!t[e],this.setState({...this.state,columnToggle:t})}setDependencyModules(e){this._=e}render(){const e={keyField:this.props.keyField,columns:this.props.columns,data:this.props.data,search:this.props.search??!1,exportCSV:this.props.exportCSV??!1,bootstrap4:this.props.bootstrap4??!1,children:this.props.children,setDependencyModules:this.setDependencyModules,registerExposedAPI:this.registerExposedAPI};return this.props.search&&(e.search={searchContext:(0,a.default)(this.props.search),searchText:this.state.searchText}),this.props.columnToggle&&(e.columnToggle={toggles:this.state.columnToggle}),s.default.createElement(l.Provider,{value:{searchProps:{searchText:this.state.searchText,onSearch:this.onSearch,onClear:this.onClear},csvProps:{onExport:this.handleExportCSV},columnToggleProps:{columns:this.props.columns,toggles:this.state.columnToggle,onColumnToggle:this.onColumnToggle},baseProps:e}},this.props.children)}}t.default={Provider:i,Consumer:l.Consumer}},688(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Search=t.CSVExport=t.ColumnToggle=t.ToolkitContext=void 0;const s=r(o(633)),a=r(o(921));t.default=a.default,t.ToolkitContext=s.default;var n=o(555);Object.defineProperty(t,"ColumnToggle",{enumerable:!0,get:function(){return r(n).default}});var l=o(282);Object.defineProperty(t,"CSVExport",{enumerable:!0,get:function(){return r(l).default}});var i=o(470);Object.defineProperty(t,"Search",{enumerable:!0,get:function(){return r(i).default}})},694(e,t,o){"use strict";var r=o(925);function s(){}function a(){}a.resetWarningCache=s,e.exports=function(){function e(e,t,o,s,a,n){if(n!==r){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 t(){return e}e.isRequired=e;var o={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:s};return o.PropTypes=o,o}},801(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(442)),a=(e,t,o)=>{let r;return(...s)=>{const a=o&&!r;clearTimeout(r),r=setTimeout(()=>{r=void 0,o||e.apply(this,s)},t||0),a&&e.apply(this,s)}};class n extends s.default.Component{constructor(e){super(e),this.input=null,this.onChangeValue=e=>{this.setState({value:e.target.value})},this.onKeyup=()=>{const{delay:e=250,onSearch:t}=this.props;a(()=>{t(this.input?.value??"")},e)()},this.state={value:e.searchText??""}}componentDidUpdate(e){this.props.searchText!==e.searchText&&this.setState({value:this.props.searchText||""})}render(){const{className:e="",style:t={},placeholder:o="Search",tableId:r="0",searchText:a="Search this table"}=this.props;return s.default.createElement("label",{htmlFor:`search-bar-${r}`,className:"search-label"},s.default.createElement("span",{id:`search-bar-${r}-label`,className:"sr-only"},a),s.default.createElement("input",{ref:e=>{this.input=e},id:`search-bar-${r}`,type:"text",style:t,"aria-labelledby":`search-bar-${r}-label`,onKeyUp:()=>this.onKeyup(),onChange:this.onChangeValue,className:`form-control ${e}`,value:this.state.value,placeholder:o}))}}t.default=n},880(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(469));t.default=e=>class extends(s.default.csvOperation(e)){constructor(){super(...arguments),this.registerExposedAPI=e=>{this.tableExposedAPIEmitter=e}}}},881(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(442)),a=o(457),n={fileName:"spreadsheet.csv",separator:",",ignoreHeader:!1,ignoreFooter:!0,noAutoBOM:!0,blobType:"text/plain;charset=utf-8",exportAll:!0,onlyExportSelection:!1};t.default=e=>class extends s.default.Component{constructor(){super(...arguments),this.handleExportCSV=e=>{const{columns:t,exportCSV:o,keyField:r}=this.props,s=(0,a.getMetaInfo)(t),l=!0===o?n:{...n,...o};let i;if(void 0!==e)i=e;else if(l.exportAll)i=this.props.data;else if(l.onlyExportFiltered){const e={result:void 0};this.tableExposedAPIEmitter.emit("get.filtered.rows",e),i=e.result}else{const e={result:void 0};this.tableExposedAPIEmitter.emit("get.table.data",e),i=e.result}if(l.onlyExportSelection){const e={result:void 0};this.tableExposedAPIEmitter.emit("get.selected.rows",e);const t=e.result??[];i=i.filter(e=>t.includes(e[r]))}const u=(0,a.transform)(i,s,t,this._,l);(0,a.save)(u,l)}}}},921(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(556)),a=r(o(442)),n=r(o(633)),l=e=>a.default.createElement(n.default.Provider,{...e},a.default.createElement(n.default.Consumer,null,t=>e.children(t)));l.propTypes={children:s.default.func.isRequired},t.default=l},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"}},o={};function r(e){var s=o[e];if(void 0!==s)return s.exports;var a=o[e]={exports:{}};return t[e].call(a.exports,a,a.exports,r),a.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r(688)})());
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC5qcyIsIm1hcHBpbmdzIjoiQ0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxVQUNSLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxTQUFVSixHQUNRLGlCQUFaQyxRQUNkQSxRQUFzQyw2QkFBSUQsRUFBUUcsUUFBUSxVQUUxREosRUFBbUMsNkJBQUlDLEVBQVFELEVBQVksTUFDNUQsQ0FURCxDQVNHTyxLQUFPQyxHLHlLQ1RWLGtCQUNBLFlBSU1DLEVBQThCLENBQ2xDQyxVQUFXLEdBQ1hDLE1BQU8sQ0FBQyxHQUdKQyxFQUNKQyxJQUVBLE1BQU0sU0FBRUMsRUFBUSxTQUFFQyxFQUFRLFVBQUVMLEtBQWNNLEdBQVMsSUFBS1AsS0FBZ0NJLEdBRXhGLE9BQ0Usa0NBQ0VJLEtBQUssU0FDTFAsVUFBVywwQ0FBMENBLElBQ3JEUSxRQUFTLElBQU1KLE9BQ1hFLEdBRUhELElBS1BILEVBQWdCTyxVQUFZLENBQzFCSixTQUFVLFVBQVVLLEtBQUtDLFdBQ3pCUCxTQUFVLFVBQVVRLEtBQUtELFdBQ3pCWCxVQUFXLFVBQVVhLE9BQ3JCWixNQUFPLFVBQVVhLFFBR25CLFVBQWVaLEMsOEpDbENmLGtCQUNBLFlBR01hLEVBQWMsRUFDbEJDLFVBQ0FDLE9BQU8sUUFDUGpCLFlBQVksTUFFWixrQ0FBUUEsVUFBVyxtQkFBbUJBLElBQWFRLFFBQVNRLEdBQ3pEQyxHQUlMRixFQUFZTixVQUFZLENBQ3RCTyxRQUFTLFVBQVVKLEtBQUtELFdBQ3hCWCxVQUFXLFVBQVVhLE9BQ3JCSSxLQUFNLFVBQVVKLFFBUWxCLFVBQWVFLEMsK0pDekJmLGtCQUNBLFlBSU1HLEVBQWEsRUFDakJDLFVBQ0FDLGlCQUNBQyxVQUNBQyxlQUFlLEdBQ2Z0QixZQUFZLEdB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QUEwQixpQkFBZmdPLFdBQXlCLE9BQU9BLFdBQzNDLElBQ0MsT0FBT3ZILE1BQVEsSUFBSXdILFNBQVMsY0FBYixFQUNoQixDQUFFLE1BQU8zTixHQUNSLEdBQXNCLGlCQUFYTSxPQUFxQixPQUFPQSxNQUN4QyxDQUNBLENBUHVCLEdDR0UrTSxFQUFvQixJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY3N2L2J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9jbGVhci1idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jb2x1bW4tdG9nZ2xlL3RvZ2dsZS1saXN0LnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmlsZS1zYXZlci9kaXN0L0ZpbGVTYXZlci5taW4uanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9pbmRleC50cyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9leHBvcnRlci50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvb3AvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvc2VhcmNoL2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jb2x1bW4tdG9nZ2xlL2luZGV4LnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L2luZGV4LnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvc2VhcmNoL1NlYXJjaEJhci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3RhdGVsZXNzT3AudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL29wL2Nzdi50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9wcm92aWRlci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1Rvb2xraXRcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZU5nVG9vbGtpdFwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRXhwb3J0Q1NWQnV0dG9uUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgZXhwb3J0Q1NWQnV0dG9uRGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IFwiXCIsXG4gIHN0eWxlOiB7fSxcbn07XG5cbmNvbnN0IEV4cG9ydENTVkJ1dHRvbiA9IChcbiAgcHJvcHM6IEV4cG9ydENTVkJ1dHRvblByb3BzXG4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsID0+IHtcbiAgY29uc3QgeyBvbkV4cG9ydCwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgLi4ucmVzdCB9ID0geyAuLi5leHBvcnRDU1ZCdXR0b25EZWZhdWx0UHJvcHMsIC4uLnByb3BzIH07XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17YHJlYWN0LWJzLXRhYmxlLWNzdi1idG4gYnRuIGJ0bi1kZWZhdWx0ICR7Y2xhc3NOYW1lfWB9XG4gICAgICBvbkNsaWNrPXsoKSA9PiBvbkV4cG9ydCgpfVxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcblxuRXhwb3J0Q1NWQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIG9uRXhwb3J0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXhwb3J0Q1NWQnV0dG9uO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ2xlYXJTZWFyY2hCdXR0b25Qcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5jb25zdCBDbGVhckJ1dHRvbiA9ICh7XG4gIG9uQ2xlYXIsXG4gIHRleHQgPSBcIkNsZWFyXCIsXG4gIGNsYXNzTmFtZSA9IFwiXCIsXG59OiBDbGVhclNlYXJjaEJ1dHRvblByb3BzKTogUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbCA9PiAoXG4gIDxidXR0b24gY2xhc3NOYW1lPXtgYnRuIGJ0bi1kZWZhdWx0ICR7Y2xhc3NOYW1lfWB9IG9uQ2xpY2s9e29uQ2xlYXJ9PlxuICAgIHt0ZXh0fVxuICA8L2J1dHRvbj5cbik7XG5cbkNsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuLy8gQ2xlYXJCdXR0b24uZGVmYXVsdFByb3BzID0ge1xuLy8gICB0ZXh0OiBcIkNsZWFyXCIsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IENsZWFyQnV0dG9uO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ29sdW1uRGVzY3JpcHRpb24gfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5pbXBvcnQgeyBUb2dnbGVMaXN0UHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgVG9nZ2xlTGlzdCA9ICh7XG4gIGNvbHVtbnMsXG4gIG9uQ29sdW1uVG9nZ2xlLFxuICB0b2dnbGVzLFxuICBidG5DbGFzc05hbWUgPSBcIlwiLFxuICBjbGFzc05hbWUgPSBcIlwiLFxuICBjb250ZXh0dWFsID0gXCJwcmltYXJ5XCJcbn06IFRvZ2dsZUxpc3RQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGwgPT4gKFxuICA8ZGl2XG4gICAgY2xhc3NOYW1lPXtgYnRuLWdyb3VwIGJ0bi1ncm91cC10b2dnbGUgJHtjbGFzc05hbWV9YH1cbiAgICBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIlxuICA+XG4gICAge2NvbHVtbnNcbiAgICAgIC5tYXAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb24pID0+ICh7XG4gICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgdG9nZ2xlOiB0b2dnbGVzW2NvbHVtbi5kYXRhRmllbGRdLFxuICAgICAgfSkpXG4gICAgICAubWFwKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uKSA9PiAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBrZXk9e2NvbHVtbi5kYXRhRmllbGR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtidG5DbGFzc05hbWV9IGJ0biBidG4tJHtjb250ZXh0dWFsfSAke1xuICAgICAgICAgICAgY29sdW1uLnRvZ2dsZSA/IFwiYWN0aXZlXCIgOiBcIlwiXG4gICAgICAgICAgfWB9XG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJidXR0b25cIlxuICAgICAgICAgIGFyaWEtcHJlc3NlZD17Y29sdW1uLnRvZ2dsZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ29sdW1uVG9nZ2xlKGNvbHVtbi5kYXRhRmllbGQpfVxuICAgICAgICA+XG4gICAgICAgICAge2NvbHVtbi50ZXh0fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICkpfVxuICA8L2Rpdj5cbik7XG5cblRvZ2dsZUxpc3QucHJvcFR5cGVzID0ge1xuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgdG9nZ2xlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBvbkNvbHVtblRvZ2dsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYnRuQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbnRleHR1YWw6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG4vLyBUb2dnbGVMaXN0LmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgYnRuQ2xhc3NOYW1lOiBcIlwiLFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIGNvbnRleHR1YWw6IFwicHJpbWFyeVwiLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgVG9nZ2xlTGlzdDtcbiIsIihmdW5jdGlvbihhLGIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYik7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgZXhwb3J0cyliKCk7ZWxzZXtiKCksYS5GaWxlU2F2ZXI9e2V4cG9ydHM6e319LmV4cG9ydHN9fSkodGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSxiKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgYj9iPXthdXRvQm9tOiExfTpcIm9iamVjdFwiIT10eXBlb2YgYiYmKGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IEV4cGVjdGVkIHRoaXJkIGFyZ3VtZW50IHRvIGJlIGEgb2JqZWN0XCIpLGI9e2F1dG9Cb206IWJ9KSxiLmF1dG9Cb20mJi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1wiXFx1RkVGRlwiLGFdLHt0eXBlOmEudHlwZX0pOmF9ZnVuY3Rpb24gYyhhLGIsYyl7dmFyIGQ9bmV3IFhNTEh0dHBSZXF1ZXN0O2Qub3BlbihcIkdFVFwiLGEpLGQucmVzcG9uc2VUeXBlPVwiYmxvYlwiLGQub25sb2FkPWZ1bmN0aW9uKCl7ZyhkLnJlc3BvbnNlLGIsYyl9LGQub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJjb3VsZCBub3QgZG93bmxvYWQgZmlsZVwiKX0sZC5zZW5kKCl9ZnVuY3Rpb24gZChhKXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiSEVBRFwiLGEsITEpO3RyeXtiLnNlbmQoKX1jYXRjaChhKXt9cmV0dXJuIDIwMDw9Yi5zdGF0dXMmJjI5OT49Yi5zdGF0dXN9ZnVuY3Rpb24gZShhKXt0cnl7YS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIikpfWNhdGNoKGMpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIik7Yi5pbml0TW91c2VFdmVudChcImNsaWNrXCIsITAsITAsd2luZG93LDAsMCwwLDgwLDIwLCExLCExLCExLCExLDAsbnVsbCksYS5kaXNwYXRjaEV2ZW50KGIpfX12YXIgZj1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZi5zZWxmPT09c2VsZj9zZWxmOlwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbC5nbG9iYWw9PT1nbG9iYWw/Z2xvYmFsOnZvaWQgMCxhPWYubmF2aWdhdG9yJiYvTWFjaW50b3NoLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGc9Zi5zYXZlQXN8fChcIm9iamVjdFwiIT10eXBlb2Ygd2luZG93fHx3aW5kb3chPT1mP2Z1bmN0aW9uKCl7fTpcImRvd25sb2FkXCJpbiBIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUmJiFhP2Z1bmN0aW9uKGIsZyxoKXt2YXIgaT1mLlVSTHx8Zi53ZWJraXRVUkwsaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtnPWd8fGIubmFtZXx8XCJkb3dubG9hZFwiLGouZG93bmxvYWQ9ZyxqLnJlbD1cIm5vb3BlbmVyXCIsXCJzdHJpbmdcIj09dHlwZW9mIGI/KGouaHJlZj1iLGoub3JpZ2luPT09bG9jYXRpb24ub3JpZ2luP2Uoaik6ZChqLmhyZWYpP2MoYixnLGgpOmUoaixqLnRhcmdldD1cIl9ibGFua1wiKSk6KGouaHJlZj1pLmNyZWF0ZU9iamVjdFVSTChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5yZXZva2VPYmplY3RVUkwoai5ocmVmKX0sNEU0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShqKX0sMCkpfTpcIm1zU2F2ZU9yT3BlbkJsb2JcImluIG5hdmlnYXRvcj9mdW5jdGlvbihmLGcsaCl7aWYoZz1nfHxmLm5hbWV8fFwiZG93bmxvYWRcIixcInN0cmluZ1wiIT10eXBlb2YgZiluYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihiKGYsaCksZyk7ZWxzZSBpZihkKGYpKWMoZixnLGgpO2Vsc2V7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7aS5ocmVmPWYsaS50YXJnZXQ9XCJfYmxhbmtcIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShpKX0pfX06ZnVuY3Rpb24oYixkLGUsZyl7aWYoZz1nfHxvcGVuKFwiXCIsXCJfYmxhbmtcIiksZyYmKGcuZG9jdW1lbnQudGl0bGU9Zy5kb2N1bWVudC5ib2R5LmlubmVyVGV4dD1cImRvd25sb2FkaW5nLi4uXCIpLFwic3RyaW5nXCI9PXR5cGVvZiBiKXJldHVybiBjKGIsZCxlKTt2YXIgaD1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiPT09Yi50eXBlLGk9L2NvbnN0cnVjdG9yL2kudGVzdChmLkhUTUxFbGVtZW50KXx8Zi5zYWZhcmksaj0vQ3JpT1NcXC9bXFxkXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7aWYoKGp8fGgmJml8fGEpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgRmlsZVJlYWRlcil7dmFyIGs9bmV3IEZpbGVSZWFkZXI7ay5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgYT1rLnJlc3VsdDthPWo/YTphLnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIiksZz9nLmxvY2F0aW9uLmhyZWY9YTpsb2NhdGlvbj1hLGc9bnVsbH0say5yZWFkQXNEYXRhVVJMKGIpfWVsc2V7dmFyIGw9Zi5VUkx8fGYud2Via2l0VVJMLG09bC5jcmVhdGVPYmplY3RVUkwoYik7Zz9nLmxvY2F0aW9uPW06bG9jYXRpb24uaHJlZj1tLGc9bnVsbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bC5yZXZva2VPYmplY3RVUkwobSl9LDRFNCl9fSk7Zi5zYXZlQXM9Zy5zYXZlQXM9ZyxcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9Zyl9KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RmlsZVNhdmVyLm1pbi5qcy5tYXAiLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBFeHBvcnRDU1ZCdXR0b24gZnJvbSAnLi9idXR0b24nO1xuXG5leHBvcnQgZGVmYXVsdCB7IEV4cG9ydENTVkJ1dHRvbiB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvKiBlc2xpbnQgbm8tdW5uZWVkZWQtdGVybmFyeTogMCAqL1xuaW1wb3J0IEZpbGVTYXZlciBmcm9tIFwiZmlsZS1zYXZlclwiO1xuXG5leHBvcnQgY29uc3QgZ2V0TWV0YUluZm8gPSAoY29sdW1uczogYW55KSA9PlxuICBjb2x1bW5zXG4gICAgLm1hcCgoY29sdW1uOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZDogY29sdW1uLmRhdGFGaWVsZCxcbiAgICAgIHR5cGU6IGNvbHVtbi5jc3ZUeXBlIHx8IFN0cmluZyxcbiAgICAgIGZvcm1hdHRlcjogY29sdW1uLmNzdkZvcm1hdHRlcixcbiAgICAgIGZvcm1hdEV4dHJhRGF0YTogY29sdW1uLmZvcm1hdEV4dHJhRGF0YSxcbiAgICAgIGhlYWRlcjogY29sdW1uLmNzdlRleHQgfHwgY29sdW1uLnRleHQsXG4gICAgICBleHBvcnQ6IGNvbHVtbi5jc3ZFeHBvcnQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxuICAgICAgcm93OiBOdW1iZXIoY29sdW1uLnJvdykgfHwgMCxcbiAgICAgIHJvd1NwYW46IE51bWJlcihjb2x1bW4ucm93U3BhbikgfHwgMSxcbiAgICAgIGNvbFNwYW46IE51bWJlcihjb2x1bW4uY29sU3BhbikgfHwgMSxcbiAgICAgIGZvb3RlcjogY29sdW1uLmZvb3RlcixcbiAgICAgIGZvb3RlckZvcm1hdHRlcjogY29sdW1uLmZvb3RlckZvcm1hdHRlcixcbiAgICB9KSlcbiAgICAuZmlsdGVyKChfOiBhbnkpID0+IF8uZXhwb3J0KTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybSA9IChcbiAgZGF0YTogYW55LFxuICBtZXRhOiBhbnksXG4gIGNvbHVtbnM6IGFueSxcbiAgXzogYW55LFxuICB7IHNlcGFyYXRvciwgaWdub3JlSGVhZGVyLCBpZ25vcmVGb290ZXIgfTogYW55XG4pID0+IHtcbiAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBtZXRhLmZpbHRlcigobTogYW55KSA9PiBtLmV4cG9ydCk7XG4gIGxldCBjb250ZW50ID0gXCJcIjtcbiAgLy8gZXh0cmFjdCBjc3YgaGVhZGVyXG4gIGlmICghaWdub3JlSGVhZGVyKSB7XG4gICAgY29udGVudCArPSB2aXNpYmxlQ29sdW1ucy5tYXAoKG06IGFueSkgPT4gYFwiJHttLmhlYWRlcn1cImApLmpvaW4oc2VwYXJhdG9yKTtcbiAgICBjb250ZW50ICs9IFwiXFxuXCI7XG4gIH1cbiAgLy8gZXh0cmFjdCBjc3YgYm9keVxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBjb250ZW50O1xuICBjb250ZW50ICs9IGRhdGFcbiAgICAubWFwKChyb3c6IGFueSwgcm93SW5kZXg6IGFueSkgPT5cbiAgICAgIHZpc2libGVDb2x1bW5zXG4gICAgICAgIC5tYXAoKG06IGFueSkgPT4ge1xuICAgICAgICAgIGxldCBjZWxsQ29udGVudCA9IF8uZ2V0KHJvdywgbS5maWVsZCk7XG4gICAgICAgICAgaWYgKG0uZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBjZWxsQ29udGVudCA9IG0uZm9ybWF0dGVyKFxuICAgICAgICAgICAgICBjZWxsQ29udGVudCxcbiAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgbS5mb3JtYXRFeHRyYURhdGFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtLnR5cGUgPT09IFN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGBcIiR7YCR7Y2VsbENvbnRlbnR9YC5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNlbGxDb250ZW50O1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihzZXBhcmF0b3IpXG4gICAgKVxuICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gIGlmICghaWdub3JlRm9vdGVyKSB7XG4gICAgY29udGVudCArPSBcIlxcblwiO1xuICAgIGNvbnRlbnQgKz0gdmlzaWJsZUNvbHVtbnNcbiAgICAgIC5tYXAoKG06IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbS5mb290ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBfLnBsdWNrKGRhdGEsIGNvbHVtbnNbaV0uZGF0YUZpZWxkKTtcbiAgICAgICAgICByZXR1cm4gYFwiJHttLmZvb3Rlcihjb2x1bW5EYXRhLCBjb2x1bW5zW2ldLCBpKX1cImA7XG4gICAgICAgIH0gZWxzZSBpZiAobS5mb290ZXJGb3JtYXR0ZXIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHttLmZvb3RlckZvcm1hdHRlcihjb2x1bW5zW2ldLCBpKX1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcIiR7bS5mb290ZXJ9XCJgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKHNlcGFyYXRvcik7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZSA9IChjb250ZW50OiBhbnksIHsgbm9BdXRvQk9NLCBmaWxlTmFtZSwgYmxvYlR5cGUgfTogYW55KSA9PiB7XG4gIEZpbGVTYXZlci5zYXZlQXMoXG4gICAgbmV3IEJsb2IoW2NvbnRlbnRdLCB7IHR5cGU6IGJsb2JUeXBlIH0pLFxuICAgIGZpbGVOYW1lLFxuICAgIG5vQXV0b0JPTVxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNzdk9wZXJhdGlvbiBmcm9tICcuL2Nzdic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3N2T3BlcmF0aW9uXG59O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgU2VhcmNoQmFyIGZyb20gJy4vU2VhcmNoQmFyJztcbmltcG9ydCBDbGVhclNlYXJjaEJ1dHRvbiBmcm9tICcuL2NsZWFyLWJ1dHRvbic7XG5cbmV4cG9ydCBkZWZhdWx0IHsgU2VhcmNoQmFyLCBDbGVhclNlYXJjaEJ1dHRvbiB9O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1jb250aW51ZTogMCAqL1xuLyogZXNsaW50IG5vLWxvbmVseS1pZjogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNlYXJjaE1hdGNoUHJvcHMsIFRhYmxlU2VhcmNoUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuaW50ZXJmYWNlIERhdGFDaGFuZ2VMaXN0ZW5lciB7XG4gIGVtaXQ6IChldmVudDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUHJvdmlkZXJQcm9wcyBleHRlbmRzIFNlYXJjaE1hdGNoUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgZGF0YUNoYW5nZUxpc3RlbmVyPzogRGF0YUNoYW5nZUxpc3RlbmVyO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUHJvdmlkZXJTdGF0ZSB7XG4gIGRhdGE6IGFueVtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoXG4gICAgb3B0aW9uczogVGFibGVTZWFyY2hQcm9wcyA9IHtcbiAgICAgIHNlYXJjaEZvcm1hdHRlZDogZmFsc2UsXG4gICAgICBhZnRlclNlYXJjaDogdW5kZWZpbmVkLFxuICAgICAgb25Db2x1bW5NYXRjaDogKCkgPT4gZmFsc2UsXG4gICAgfVxuICApID0+XG4gIChcbiAgICBfOiBhbnksXG4gICAgaXNSZW1vdGVTZWFyY2g6ICgpID0+IGJvb2xlYW4sXG4gICAgaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlOiAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB2b2lkXG4gICkgPT4ge1xuICAgIGNvbnN0IFNlYXJjaENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4obnVsbCk7XG5cbiAgICBjbGFzcyBTZWFyY2hQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgICAgIFNlYXJjaFByb3ZpZGVyUHJvcHMsXG4gICAgICBTZWFyY2hQcm92aWRlclN0YXRlXG4gICAgPiB7XG4gICAgICBjb25zdHJ1Y3Rvcihwcm9wczogU2VhcmNoUHJvdmlkZXJQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIGxldCBpbml0aWFsRGF0YSA9IHByb3BzLmRhdGE7XG4gICAgICAgIGlmIChpc1JlbW90ZVNlYXJjaCgpICYmIHRoaXMucHJvcHMuc2VhcmNoVGV4dCAhPT0gXCJcIikge1xuICAgICAgICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSh0aGlzLnByb3BzLnNlYXJjaFRleHQhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbml0aWFsRGF0YSA9IHRoaXMuc2VhcmNoKHByb3BzKTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMaXN0ZW5lcihpbml0aWFsRGF0YSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgZGF0YTogaW5pdGlhbERhdGEgfTtcbiAgICAgIH1cblxuICAgICAgZ2V0U2VhcmNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIHRyaWdnZXJMaXN0ZW5lcihyZXN1bHQ6IGFueSwgc2tpcEluaXQ/OiBhbnkpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJTZWFyY2ggJiYgIXNraXBJbml0KSB7XG4gICAgICAgICAgb3B0aW9ucy5hZnRlclNlYXJjaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lcikge1xuICAgICAgICAgIHRoaXMucHJvcHMuZGF0YUNoYW5nZUxpc3RlbmVyLmVtaXQoXCJmaWx0ZXJDaGFuZ2VkXCIsIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFNlYXJjaFByb3ZpZGVyUHJvcHMpIHtcbiAgICAgICAgaWYgKHByZXZQcm9wcy5zZWFyY2hUZXh0ICE9PSB0aGlzLnByb3BzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgICBpZiAoaXNSZW1vdGVTZWFyY2goKSkge1xuICAgICAgICAgICAgaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlKHRoaXMucHJvcHMuc2VhcmNoVGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoKHRoaXMucHJvcHMpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTGlzdGVuZXIocmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzUmVtb3RlU2VhcmNoKCkpIHtcbiAgICAgICAgICAgIGlmICghXy5pc0VxdWFsKHRoaXMuc3RhdGUuZGF0YSwgdGhpcy5wcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGF0YTogdGhpcy5wcm9wcy5kYXRhIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIV8uaXNFcXVhbChwcmV2UHJvcHMuZGF0YSwgdGhpcy5wcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWFyY2godGhpcy5wcm9wcyk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMaXN0ZW5lcihyZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZWFyY2gocHJvcHM6IGFueSkge1xuICAgICAgICBjb25zdCB7IGRhdGEsIGNvbHVtbnMgfSA9IHByb3BzO1xuICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gcHJvcHMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55LCByaWR4OiBhbnkpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBjaWR4ID0gMDsgY2lkeCA8IGNvbHVtbnMubGVuZ3RoOyBjaWR4ICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY2lkeF07XG4gICAgICAgICAgICBpZiAoY29sdW1uLnNlYXJjaGFibGUgPT09IGZhbHNlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBvcHRpb25zLnNlYXJjaEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA9IGNvbHVtbi5mb3JtYXR0ZXIoXG4gICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUsXG4gICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgIHJpZHgsXG4gICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdEV4dHJhRGF0YVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZmlsdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgPSBjb2x1bW4uZmlsdGVyVmFsdWUodGFyZ2V0VmFsdWUsIHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5vbkNvbHVtbk1hdGNoKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ29sdW1uTWF0Y2goe1xuICAgICAgICAgICAgICAgICAgc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB0YXJnZXRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRhcmdldFZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB0YXJnZXRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlID0gdGFyZ2V0VmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZS5pbmRleE9mKHNlYXJjaFRleHQpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFNlYXJjaENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgZGF0YTogdGhpcy5zdGF0ZS5kYXRhIH19PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgPC9TZWFyY2hDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm92aWRlcjogU2VhcmNoUHJvdmlkZXIsXG4gICAgICBDb25zdW1lcjogU2VhcmNoQ29udGV4dC5Db25zdW1lcixcbiAgICB9O1xuICB9O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgVG9nZ2xlTGlzdCBmcm9tICcuL3RvZ2dsZS1saXN0JztcblxuZXhwb3J0IGRlZmF1bHQgeyBUb2dnbGVMaXN0IH07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgVGFibGVUb29sa2l0UHJvcHMsIFRvb2xraXRDb250ZXh0VHlwZSB9IGZyb20gXCIuXCI7XG5pbXBvcnQgY3JlYXRlU2VhcmNoQ29udGV4dCBmcm9tIFwiLi9zcmMvc2VhcmNoL2NvbnRleHRcIjtcbmltcG9ydCBzdGF0ZWxlc3NEZWNvcmF0b3IgZnJvbSBcIi4vc3RhdGVsZXNzT3BcIjtcblxuY29uc3QgVG9vbGtpdENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFRvb2xraXRDb250ZXh0VHlwZT4oe1xuICBzZWFyY2hQcm9wczoge1xuICAgIHNlYXJjaFRleHQ6IFwiXCIsXG4gICAgb25TZWFyY2g6ICh2YWw6IHN0cmluZykgPT4ge30sXG4gICAgb25DbGVhcjogKCkgPT4ge30sXG4gIH0sXG4gIGNzdlByb3BzOiB7XG4gICAgb25FeHBvcnQ6ICgpID0+IHt9LFxuICB9LFxuICBjb2x1bW5Ub2dnbGVQcm9wczoge1xuICAgIGNvbHVtbnM6IFtdLFxuICAgIHRvZ2dsZXM6IFtdLFxuICAgIG9uQ29sdW1uVG9nZ2xlOiAoZGF0YUZpZWxkOiBzdHJpbmcpID0+IHt9LFxuICB9LFxuICBiYXNlUHJvcHM6IHtcbiAgICBrZXlGaWVsZDogdW5kZWZpbmVkLFxuICAgIGNvbHVtbnM6IFtdLFxuICAgIGRhdGE6IFtdLFxuICAgIGJvb3RzdHJhcDQ6IHVuZGVmaW5lZCxcbiAgfSxcbn0pO1xuXG5jbGFzcyBUb29sa2l0UHJvdmlkZXIgZXh0ZW5kcyBzdGF0ZWxlc3NEZWNvcmF0b3IoUmVhY3QuQ29tcG9uZW50KSB7XG4gIC8vIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gIC8vICAga2V5RmllbGQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLy8gICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgLy8gICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgLy8gICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLy8gICBib290c3RyYXA0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICBzZWFyY2g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAvLyAgICAgUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAvLyAgICAgICBkZWZhdWx0U2VhcmNoOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvLyAgICAgICBzZWFyY2hGb3JtYXR0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgfSksXG4gIC8vICAgXSksXG4gIC8vICAgZXhwb3J0Q1NWOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgLy8gICAgIFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgLy8gICAgICAgZmlsZU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8vICAgICAgIHNlcGFyYXRvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLy8gICAgICAgaWdub3JlSGVhZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgICAgaWdub3JlRm9vdGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgICAgbm9BdXRvQk9NOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgICAgYmxvYlR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8vICAgICAgIGV4cG9ydEFsbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICAgIG9ubHlFeHBvcnRGaWx0ZXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICAgIG9ubHlFeHBvcnRTZWxlY3Rpb246IFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgfSksXG4gIC8vICAgXSksXG4gIC8vIH07XG5cbiAgLy8gc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgLy8gICBzZWFyY2g6IGZhbHNlLFxuICAvLyAgIGV4cG9ydENTVjogZmFsc2UsXG4gIC8vICAgYm9vdHN0cmFwNDogZmFsc2UsXG4gIC8vIH07XG5cbiAgXzogYW55O1xuICBzdGF0ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUYWJsZVRvb2xraXRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBjb2x1bW5Ub2dnbGU6IHt9LFxuICAgICAgc2VhcmNoVGV4dDpcbiAgICAgICAgdHlwZW9mIHByb3BzLnNlYXJjaCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgID8gcHJvcHMuc2VhcmNoLmRlZmF1bHRTZWFyY2ggfHwgXCJcIlxuICAgICAgICAgIDogXCJcIixcbiAgICB9O1xuICAgIHRoaXMuXyA9IG51bGw7XG4gICAgdGhpcy5vbkNsZWFyID0gdGhpcy5vbkNsZWFyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vblNlYXJjaCA9IHRoaXMub25TZWFyY2guYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ29sdW1uVG9nZ2xlID0gdGhpcy5vbkNvbHVtblRvZ2dsZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2V0RGVwZW5kZW5jeU1vZHVsZXMgPSB0aGlzLnNldERlcGVuZGVuY3lNb2R1bGVzLmJpbmQodGhpcyk7XG5cbiAgICBpZiAocHJvcHMuY29sdW1uVG9nZ2xlKSB7XG4gICAgICBpbml0aWFsU3RhdGUuY29sdW1uVG9nZ2xlID0gcHJvcHMuY29sdW1ucy5yZWR1Y2UoXG4gICAgICAgIChvYmo6IGFueSwgY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgICBvYmpbY29sdW1uLmRhdGFGaWVsZF0gPSAhY29sdW1uLmhpZGRlbjtcbiAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgICB9XG4gICAgaW5pdGlhbFN0YXRlLnNlYXJjaFRleHQgPVxuICAgICAgdHlwZW9mIHByb3BzLnNlYXJjaCA9PT0gXCJvYmplY3RcIiA/IHByb3BzLnNlYXJjaC5kZWZhdWx0U2VhcmNoIHx8IFwiXCIgOiBcIlwiO1xuICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzOiBUYWJsZVRvb2xraXRQcm9wcywgc3RhdGU6IGFueSkge1xuICAgIGNvbnN0IGN1cnJDb2x1bW5Ub2dnbGUgPSBzdGF0ZS5jb2x1bW5Ub2dnbGU7XG4gICAgbGV0IHByb3BzQ29sdW1uVG9nZ2xlO1xuICAgIGlmIChwcm9wcy5jb2x1bW5Ub2dnbGUpIHtcbiAgICAgIHByb3BzQ29sdW1uVG9nZ2xlID0gcHJvcHMuY29sdW1ucy5yZWR1Y2UoKG9iajogYW55LCBjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBvYmpbY29sdW1uLmRhdGFGaWVsZF0gPSAhY29sdW1uLmhpZGRlbjtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0sIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcHNDb2x1bW5Ub2dnbGUgPSB7fTtcbiAgICB9XG4gICAgaWYgKGN1cnJDb2x1bW5Ub2dnbGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjdXJyQ29sdW1uVG9nZ2xlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHByb3BzQ29sdW1uVG9nZ2xlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaChzZWFyY2hUZXh0OiBhbnkpIHtcbiAgICBpZiAoc2VhcmNoVGV4dCAhPT0gdGhpcy5zdGF0ZS5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgc2VhcmNoVGV4dCB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNsZWFyKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2hUZXh0OiBcIlwiIH0pO1xuICB9XG5cbiAgb25Db2x1bW5Ub2dnbGUoZGF0YUZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCB7IGNvbHVtblRvZ2dsZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb2x1bW5Ub2dnbGVbZGF0YUZpZWxkXSA9ICFjb2x1bW5Ub2dnbGVbZGF0YUZpZWxkXTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICBjb2x1bW5Ub2dnbGUsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gX1xuICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9ubHkgb25lIHRpbWUgd2hlbiB0YWJsZSByZW5kZXJcbiAgICogcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0L2luZGV4LmpzIHdpbGwgY2FsbCB0aGlzIGNiIGZvciBwYXNzaW5nIHRoZSBfIG1vZHVsZVxuICAgKiBQbGVhc2UgY29uc2lkZXIgdG8gZXh0cmFjdCBhIGNvbW1vbiBtb2R1bGUgdG8gaGFuZGxlIF8gbW9kdWxlLlxuICAgKiB0aGlzIGlzIGp1c3QgYSBxdWljayBmaXhcbiAgICovXG4gIHNldERlcGVuZGVuY3lNb2R1bGVzKF86IGFueSkge1xuICAgIHRoaXMuXyA9IF87XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgYmFzZVByb3BzOiBUYWJsZVRvb2xraXRQcm9wcyA9IHtcbiAgICAgIGtleUZpZWxkOiB0aGlzLnByb3BzLmtleUZpZWxkLFxuICAgICAgY29sdW1uczogdGhpcy5wcm9wcy5jb2x1bW5zLFxuICAgICAgZGF0YTogdGhpcy5wcm9wcy5kYXRhLFxuICAgICAgc2VhcmNoOiB0aGlzLnByb3BzLnNlYXJjaCA/PyBmYWxzZSxcbiAgICAgIGV4cG9ydENTVjogdGhpcy5wcm9wcy5leHBvcnRDU1YgPz8gZmFsc2UsXG4gICAgICBib290c3RyYXA0OiB0aGlzLnByb3BzLmJvb3RzdHJhcDQgPz8gZmFsc2UsXG4gICAgICBjaGlsZHJlbjogdGhpcy5wcm9wcy5jaGlsZHJlbixcbiAgICAgIHNldERlcGVuZGVuY3lNb2R1bGVzOiB0aGlzLnNldERlcGVuZGVuY3lNb2R1bGVzLFxuICAgICAgcmVnaXN0ZXJFeHBvc2VkQVBJOiB0aGlzLnJlZ2lzdGVyRXhwb3NlZEFQSSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByb3BzLnNlYXJjaCkge1xuICAgICAgYmFzZVByb3BzLnNlYXJjaCA9IHtcbiAgICAgICAgc2VhcmNoQ29udGV4dDogY3JlYXRlU2VhcmNoQ29udGV4dCh0aGlzLnByb3BzLnNlYXJjaCksXG4gICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmNvbHVtblRvZ2dsZSkge1xuICAgICAgYmFzZVByb3BzLmNvbHVtblRvZ2dsZSA9IHtcbiAgICAgICAgdG9nZ2xlczogdGhpcy5zdGF0ZS5jb2x1bW5Ub2dnbGUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPFRvb2xraXRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgc2VhcmNoUHJvcHM6IHtcbiAgICAgICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIG9uU2VhcmNoOiB0aGlzLm9uU2VhcmNoLFxuICAgICAgICAgICAgb25DbGVhcjogdGhpcy5vbkNsZWFyLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY3N2UHJvcHM6IHtcbiAgICAgICAgICAgIG9uRXhwb3J0OiB0aGlzLmhhbmRsZUV4cG9ydENTVixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbHVtblRvZ2dsZVByb3BzOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLnByb3BzLmNvbHVtbnMsXG4gICAgICAgICAgICB0b2dnbGVzOiB0aGlzLnN0YXRlLmNvbHVtblRvZ2dsZSxcbiAgICAgICAgICAgIG9uQ29sdW1uVG9nZ2xlOiB0aGlzLm9uQ29sdW1uVG9nZ2xlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmFzZVByb3BzLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvVG9vbGtpdENvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFByb3ZpZGVyOiBUb29sa2l0UHJvdmlkZXIsXG4gIENvbnN1bWVyOiBUb29sa2l0Q29udGV4dC5Db25zdW1lcixcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDb2x1bW5EZXNjcmlwdGlvbiwgU2VhcmNoUHJvcHMgfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCBUb29sa2l0UHJvdmlkZXIgZnJvbSBcIi4vcHJvdmlkZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgVG9vbGtpdFByb3ZpZGVyO1xuZXhwb3J0IGNvbnN0IFRvb2xraXRDb250ZXh0ID0gQ29udGV4dDtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2x1bW5Ub2dnbGUgfSBmcm9tIFwiLi9zcmMvY29sdW1uLXRvZ2dsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1ZFeHBvcnQgfSBmcm9tIFwiLi9zcmMvY3N2XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gXCIuL3NyYy9zZWFyY2hcIjtcblxuLyoqXG4gKiBkZWNsYXJhdGlvbiBmb3IgdGFibGUgdG9vbGtpdCBzdWIgbW9kdWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0ZWRTZWFyY2hQcm9wcyB7XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgb25TZWFyY2g6ICh2YWw6IHN0cmluZykgPT4gdm9pZDtcbiAgb25DbGVhcjogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hNYXRjaFByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQ+O1xuICByb3c6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTZWFyY2hQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gIHNlYXJjaEZvcm1hdHRlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRTZWFyY2g/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvbkNvbHVtbk1hdGNoPzogKHByb3BzOiBTZWFyY2hNYXRjaFByb3BzPFQ+KSA9PiBib29sZWFuO1xuICBjdXN0b21NYXRjaEZ1bmM/OiAoKHByb3BzOiBTZWFyY2hNYXRjaFByb3BzPFQ+KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZDtcbiAgYWZ0ZXJTZWFyY2g/OiAobmV3UmVzdWx0OiBUW10pID0+IHZvaWQgfCB1bmRlZmluZWQ7XG4gIHNlYXJjaENvbnRleHQ/OiBGdW5jdGlvbjtcbiAgc2VhcmNoVGV4dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU1ZQcm9wcyB7XG4gIGZpbGVOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzZXBhcmF0b3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlnbm9yZUhlYWRlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlnbm9yZUZvb3Rlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG5vQXV0b0JPTT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBkZWZhdWx0IGlzIHRleHQvcGxhaW47Y2hhcnNldD11dGYtOFxuICAgKi9cbiAgYmxvYlR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGV4cG9ydEFsbD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG9ubHlFeHBvcnRTZWxlY3Rpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBvbmx5RXhwb3J0RmlsdGVyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlVG9vbGtpdFByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHNlYXJjaD86IFRhYmxlU2VhcmNoUHJvcHM8VD4gfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBrZXlGaWVsZDoga2V5b2YgVCB8IHN0cmluZztcbiAgZGF0YTogVFtdO1xuICByZWY/OiBhbnk7XG4gIGNvbHVtbnM6IEFycmF5PENvbHVtbkRlc2NyaXB0aW9uPFQ+PjtcbiAgY2hpbGRyZW46IChwcm9wczogVG9vbGtpdENvbnRleHRUeXBlKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIGV4cG9ydENTVj86IGJvb2xlYW4gfCBDU1ZQcm9wcyB8IHVuZGVmaW5lZDtcbiAgY29sdW1uVG9nZ2xlPzogeyBbZGF0YUZpZWxkOiBzdHJpbmddOiBib29sZWFuIH0gfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzZXREZXBlbmRlbmN5TW9kdWxlcz86IEZ1bmN0aW9uO1xuICByZWdpc3RlckV4cG9zZWRBUEk/OiBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb29sa2l0Q29udGV4dFR5cGUge1xuICBzZWFyY2hQcm9wczogSW5qZWN0ZWRTZWFyY2hQcm9wcztcbiAgY3N2UHJvcHM6IHtcbiAgICBvbkV4cG9ydDogKHNvdXJjZT86IGFueSkgPT4gdm9pZDtcbiAgfTtcbiAgY29sdW1uVG9nZ2xlUHJvcHM6IHtcbiAgICBjb2x1bW5zOiBDb2x1bW5EZXNjcmlwdGlvbltdO1xuICAgIC8qKlxuICAgICAqIGFycmF5IG9mIHRvZ2dsZWQgY29sdW1uc1xuICAgICAqL1xuICAgIHRvZ2dsZXM6IGJvb2xlYW5bXTtcbiAgICBvbkNvbHVtblRvZ2dsZTogKGRhdGFGaWVsZDogc3RyaW5nKSA9PiB2b2lkO1xuICB9O1xuICBiYXNlUHJvcHM6IHtcbiAgICAvKipcbiAgICAgKiB0YWJsZSBrZXkgZmllbGRcbiAgICAgKi9cbiAgICBrZXlGaWVsZDogYW55O1xuICAgIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gICAgZGF0YTogYW55W107XG4gICAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9nZ2xlTGlzdFByb3BzIHtcbiAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgLyoqXG4gICAqIGFycmF5IG9mIHRvZ2dsZWQgY29sdW1uc1xuICAgKi9cbiAgdG9nZ2xlczogYm9vbGVhbltdO1xuICBvbkNvbHVtblRvZ2dsZTogKGRhdGFGaWVsZDogc3RyaW5nKSA9PiB2b2lkO1xuICBidG5DbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29udGV4dHVhbD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDU1ZCdXR0b25Qcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9uRXhwb3J0OiAoKSA9PiB2b2lkO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hCYXJQcm9wczxUID0gYW55PiBleHRlbmRzIFNlYXJjaFByb3BzPFQ+IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIGRlbGF5PzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBzZWFyY2hUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0YWJsZUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWY/OiBSZWFjdC5SZWZPYmplY3Q8UmVhY3QuQ29tcG9uZW50PFNlYXJjaFByb3BzPFQ+Pj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYXJTZWFyY2hCdXR0b25Qcm9wcyB7XG4gIG9uQ2xlYXI/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTZWFyY2hCYXJQcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5jb25zdCBoYW5kbGVEZWJvdW5jZSA9IDxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPihcbiAgZnVuYzogVCxcbiAgd2FpdDogbnVtYmVyLFxuICBpbW1lZGlhdGU/OiBib29sZWFuXG4pID0+IHtcbiAgbGV0IHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuXG4gIHJldHVybiAoLi4uYXJnczogUGFyYW1ldGVyczxUPikgPT4ge1xuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgdGltZW91dCA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcblxuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblxuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IHx8IDApO1xuXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9O1xufTtcblxuaW50ZXJmYWNlIFNlYXJjaEJhclN0YXRlIHtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuY2xhc3MgU2VhcmNoQmFyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFNlYXJjaEJhclByb3BzLCBTZWFyY2hCYXJTdGF0ZT4ge1xuICBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTZWFyY2hCYXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWU6IHByb3BzLnNlYXJjaFRleHQgPz8gXCJcIixcbiAgICB9O1xuICB9XG5cbiAgb25DaGFuZ2VWYWx1ZSA9IChlOiBhbnkpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IGUudGFyZ2V0LnZhbHVlIH0pO1xuICB9O1xuXG4gIG9uS2V5dXAgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBkZWxheSA9IDI1MCwgb25TZWFyY2ggfSA9IHRoaXMucHJvcHMgYXMgYW55O1xuICAgIGNvbnN0IGRlYm91bmNlQ2FsbGJhY2sgPSBoYW5kbGVEZWJvdW5jZSgoKSA9PiB7XG4gICAgICBvblNlYXJjaCEodGhpcy5pbnB1dD8udmFsdWUgPz8gXCJcIik7XG4gICAgfSwgZGVsYXkpO1xuICAgIGRlYm91bmNlQ2FsbGJhY2soKTtcbiAgfTtcblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBTZWFyY2hCYXJQcm9wcykge1xuICAgIGlmICh0aGlzLnByb3BzLnNlYXJjaFRleHQgIT09IHByZXZQcm9wcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucHJvcHMuc2VhcmNoVGV4dCB8fCBcIlwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgc3R5bGUgPSB7fSxcbiAgICAgIHBsYWNlaG9sZGVyID0gXCJTZWFyY2hcIixcbiAgICAgIHRhYmxlSWQgPSBcIjBcIixcbiAgICAgIHNlYXJjaFRleHQgPSBcIlNlYXJjaCB0aGlzIHRhYmxlXCIsXG4gICAgfSA9IHRoaXMucHJvcHMgYXMgYW55O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbCBodG1sRm9yPXtgc2VhcmNoLWJhci0ke3RhYmxlSWR9YH0gY2xhc3NOYW1lPVwic2VhcmNoLWxhYmVsXCI+XG4gICAgICAgIDxzcGFuIGlkPXtgc2VhcmNoLWJhci0ke3RhYmxlSWR9LWxhYmVsYH0gY2xhc3NOYW1lPVwic3Itb25seVwiPlxuICAgICAgICAgIHtzZWFyY2hUZXh0fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHJlZj17KG4pID0+IHsgdGhpcy5pbnB1dCA9IG47IH19XG4gICAgICAgICAgaWQ9e2BzZWFyY2gtYmFyLSR7dGFibGVJZH1gfVxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBzdHlsZT17c3R5bGUgYXMgYW55fVxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT17YHNlYXJjaC1iYXItJHt0YWJsZUlkfS1sYWJlbGB9XG4gICAgICAgICAgb25LZXlVcD17KCkgPT4gdGhpcy5vbktleXVwKCl9XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2VWYWx1ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e2Bmb3JtLWNvbnRyb2wgJHtjbGFzc05hbWV9YH1cbiAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbn1cblxuLy8gU2VhcmNoQmFyLnByb3BUeXBlcyA9IHtcbi8vICAgb25TZWFyY2g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbi8vICAgc2VhcmNoVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgdGFibGVJZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3JUZXh0OiBQcm9wVHlwZXMuc3RyaW5nXG4vLyB9O1xuXG4vLyBTZWFyY2hCYXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBzdHlsZToge30sXG4vLyAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoJyxcbi8vICAgZGVsYXk6IDI1MCxcbi8vICAgc2VhcmNoVGV4dDogJycsXG4vLyAgIHRhYmxlSWQ6ICcwJyxcbi8vICAgc3JUZXh0OiAnU2VhcmNoIHRoaXMgdGFibGUnXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBTZWFyY2hCYXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBPcGVyYXRpb24gZnJvbSBcIi4vc3JjL29wXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChCYXNlOiBhbnkpID0+XG4gIGNsYXNzIFN0YXRlbGVzc09wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvbi5jc3ZPcGVyYXRpb24oQmFzZSkge1xuICAgIHJlZ2lzdGVyRXhwb3NlZEFQSSA9ICh0YWJsZUV4cG9zZWRBUElFbWl0dGVyOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlciA9IHRhYmxlRXhwb3NlZEFQSUVtaXR0ZXI7XG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgZ2V0TWV0YUluZm8sIHNhdmUsIHRyYW5zZm9ybSB9IGZyb20gXCIuLi9jc3YvZXhwb3J0ZXJcIjtcblxuY29uc3QgY3N2RGVmYXVsdE9wdGlvbnMgPSB7XG4gIGZpbGVOYW1lOiBcInNwcmVhZHNoZWV0LmNzdlwiLFxuICBzZXBhcmF0b3I6IFwiLFwiLFxuICBpZ25vcmVIZWFkZXI6IGZhbHNlLFxuICBpZ25vcmVGb290ZXI6IHRydWUsXG4gIG5vQXV0b0JPTTogdHJ1ZSxcbiAgYmxvYlR5cGU6IFwidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04XCIsXG4gIGV4cG9ydEFsbDogdHJ1ZSxcbiAgb25seUV4cG9ydFNlbGVjdGlvbjogZmFsc2UsXG59O1xuXG5leHBvcnQgZGVmYXVsdCAoQmFzZTogYW55KSA9PlxuICBjbGFzcyBDU1ZPcGVyYXRpb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8dHlwZW9mIEJhc2U+IHtcbiAgICBfOiBhbnk7XG4gICAgdGFibGVFeHBvc2VkQVBJRW1pdHRlcjogYW55O1xuXG4gICAgaGFuZGxlRXhwb3J0Q1NWID0gKHNvdXJjZTogYW55KSA9PiB7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIGV4cG9ydENTViwga2V5RmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBtZXRhID0gZ2V0TWV0YUluZm8oY29sdW1ucyk7XG4gICAgICBjb25zdCBvcHRpb25zID1cbiAgICAgICAgZXhwb3J0Q1NWID09PSB0cnVlXG4gICAgICAgICAgPyBjc3ZEZWZhdWx0T3B0aW9uc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAuLi5jc3ZEZWZhdWx0T3B0aW9ucyxcbiAgICAgICAgICAgICAgLi4uZXhwb3J0Q1NWLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gZ2V0IGRhdGEgZm9yIGNzdiBleHBvcnRcbiAgICAgIGxldCBkYXRhOiBhbnk7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBkYXRhID0gc291cmNlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmV4cG9ydEFsbCkge1xuICAgICAgICBkYXRhID0gdGhpcy5wcm9wcy5kYXRhO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm9ubHlFeHBvcnRGaWx0ZXJlZCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiB7IHJlc3VsdDogYW55IH0gPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlci5lbWl0KFwiZ2V0LmZpbHRlcmVkLnJvd3NcIiwgcGF5bG9hZCk7XG4gICAgICAgIGRhdGEgPSBwYXlsb2FkLnJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlci5lbWl0KFwiZ2V0LnRhYmxlLmRhdGFcIiwgcGF5bG9hZCk7XG4gICAgICAgIGRhdGEgPSBwYXlsb2FkLnJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgLy8gZmlsdGVyIGRhdGEgYnkgcm93IHNlbGVjdGlvblxuICAgICAgaWYgKG9wdGlvbnMub25seUV4cG9ydFNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0geyByZXN1bHQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICB0aGlzLnRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIuZW1pdChcImdldC5zZWxlY3RlZC5yb3dzXCIsIHBheWxvYWQpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gcGF5bG9hZC5yZXN1bHQgPz8gW107XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4gc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dba2V5RmllbGRdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0cmFuc2Zvcm0oZGF0YSwgbWV0YSwgY29sdW1ucywgdGhpcy5fLCBvcHRpb25zKTtcbiAgICAgIHNhdmUoY29udGVudCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgVGFibGVUb29sa2l0UHJvcHMgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IFRvb2xraXRDb250ZXh0IGZyb20gXCIuL2NvbnRleHRcIjtcblxuY29uc3QgVG9vbGtpdHByb3ZpZGVyID0gKFxuICBwcm9wczogVGFibGVUb29sa2l0UHJvcHNcbik6IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGwgPT4gKFxuICA8VG9vbGtpdENvbnRleHQuUHJvdmlkZXIgey4uLnByb3BzfT5cbiAgICA8VG9vbGtpdENvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHRvb2tLaXRQcm9wcykgPT4gcHJvcHMuY2hpbGRyZW4odG9va0tpdFByb3BzKX1cbiAgICA8L1Rvb2xraXRDb250ZXh0LkNvbnN1bWVyPlxuICA8L1Rvb2xraXRDb250ZXh0LlByb3ZpZGVyPlxuKTtcblxuVG9vbGtpdHByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUb29sa2l0cHJvdmlkZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2ODgpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJleHBvcnRDU1ZCdXR0b25EZWZhdWx0UHJvcHMiLCJjbGFzc05hbWUiLCJzdHlsZSIsIkV4cG9ydENTVkJ1dHRvbiIsInByb3BzIiwib25FeHBvcnQiLCJjaGlsZHJlbiIsInJlc3QiLCJ0eXBlIiwib25DbGljayIsInByb3BUeXBlcyIsIm5vZGUiLCJpc1JlcXVpcmVkIiwiZnVuYyIsInN0cmluZyIsIm9iamVjdCIsIkNsZWFyQnV0dG9uIiwib25DbGVhciIsInRleHQiLCJUb2dnbGVMaXN0IiwiY29sdW1ucyIsIm9uQ29sdW1uVG9nZ2xlIiwidG9nZ2xlcyIsImJ0bkNsYXNzTmFtZSIsImNvbnRleHR1YWwiLCJtYXAiLCJjb2x1bW4iLCJ0b2dnbGUiLCJkYXRhRmllbGQiLCJrZXkiLCJhcnJheSIsImIiLCJhIiwiYXV0b0JvbSIsImNvbnNvbGUiLCJ3YXJuIiwidGVzdCIsIkJsb2IiLCJjIiwiZCIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsIm9ubG9hZCIsImciLCJyZXNwb25zZSIsIm9uZXJyb3IiLCJlcnJvciIsInNlbmQiLCJzdGF0dXMiLCJlIiwiZGlzcGF0Y2hFdmVudCIsIk1vdXNlRXZlbnQiLCJkb2N1bWVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdE1vdXNlRXZlbnQiLCJ3aW5kb3ciLCJmIiwiZ2xvYmFsIiwibmF2aWdhdG9yIiwidXNlckFnZW50Iiwic2F2ZUFzIiwiSFRNTEFuY2hvckVsZW1lbnQiLCJwcm90b3R5cGUiLCJoIiwiaSIsIlVSTCIsIndlYmtpdFVSTCIsImoiLCJjcmVhdGVFbGVtZW50IiwibmFtZSIsImRvd25sb2FkIiwicmVsIiwiaHJlZiIsIm9yaWdpbiIsImxvY2F0aW9uIiwidGFyZ2V0IiwiY3JlYXRlT2JqZWN0VVJMIiwic2V0VGltZW91dCIsInJldm9rZU9iamVjdFVSTCIsIm1zU2F2ZU9yT3BlbkJsb2IiLCJ0aXRsZSIsImJvZHkiLCJpbm5lclRleHQiLCJIVE1MRWxlbWVudCIsInNhZmFyaSIsIkZpbGVSZWFkZXIiLCJrIiwib25sb2FkZW5kIiwicmVzdWx0IiwicmVwbGFjZSIsInJlYWRBc0RhdGFVUkwiLCJsIiwibSIsImdldE1ldGFJbmZvIiwiZmllbGQiLCJjc3ZUeXBlIiwiU3RyaW5nIiwiZm9ybWF0dGVyIiwiY3N2Rm9ybWF0dGVyIiwiZm9ybWF0RXh0cmFEYXRhIiwiaGVhZGVyIiwiY3N2VGV4dCIsImV4cG9ydCIsImNzdkV4cG9ydCIsInJvdyIsIk51bWJlciIsInJvd1NwYW4iLCJjb2xTcGFuIiwiZm9vdGVyIiwiZm9vdGVyRm9ybWF0dGVyIiwiZmlsdGVyIiwiXyIsInRyYW5zZm9ybSIsImRhdGEiLCJtZXRhIiwic2VwYXJhdG9yIiwiaWdub3JlSGVhZGVyIiwiaWdub3JlRm9vdGVyIiwidmlzaWJsZUNvbHVtbnMiLCJjb250ZW50Iiwiam9pbiIsImxlbmd0aCIsInJvd0luZGV4IiwiY2VsbENvbnRlbnQiLCJnZXQiLCJjb2x1bW5EYXRhIiwicGx1Y2siLCJzYXZlIiwibm9BdXRvQk9NIiwiZmlsZU5hbWUiLCJibG9iVHlwZSIsImNzdk9wZXJhdGlvbiIsIlNlYXJjaEJhciIsIkNsZWFyU2VhcmNoQnV0dG9uIiwib3B0aW9ucyIsInNlYXJjaEZvcm1hdHRlZCIsImFmdGVyU2VhcmNoIiwidW5kZWZpbmVkIiwib25Db2x1bW5NYXRjaCIsImlzUmVtb3RlU2VhcmNoIiwiaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlIiwiU2VhcmNoQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJTZWFyY2hQcm92aWRlciIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwic3VwZXIiLCJpbml0aWFsRGF0YSIsInRoaXMiLCJzZWFyY2hUZXh0Iiwic2VhcmNoIiwidHJpZ2dlckxpc3RlbmVyIiwic3RhdGUiLCJnZXRTZWFyY2hlZCIsInNraXBJbml0IiwiZGF0YUNoYW5nZUxpc3RlbmVyIiwiZW1pdCIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInNldFN0YXRlIiwiaXNFcXVhbCIsInRvTG93ZXJDYXNlIiwicmlkeCIsImNpZHgiLCJzZWFyY2hhYmxlIiwidGFyZ2V0VmFsdWUiLCJmaWx0ZXJWYWx1ZSIsInZhbHVlIiwidG9TdHJpbmciLCJpbmRleE9mIiwicmVuZGVyIiwiUHJvdmlkZXIiLCJDb25zdW1lciIsIlRvb2xraXRDb250ZXh0Iiwic2VhcmNoUHJvcHMiLCJvblNlYXJjaCIsInZhbCIsImNzdlByb3BzIiwiY29sdW1uVG9nZ2xlUHJvcHMiLCJiYXNlUHJvcHMiLCJrZXlGaWVsZCIsImJvb3RzdHJhcDQiLCJUb29sa2l0UHJvdmlkZXIiLCJpbml0aWFsU3RhdGUiLCJjb2x1bW5Ub2dnbGUiLCJkZWZhdWx0U2VhcmNoIiwiYmluZCIsInNldERlcGVuZGVuY3lNb2R1bGVzIiwicmVkdWNlIiwib2JqIiwiaGlkZGVuIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiY3VyckNvbHVtblRvZ2dsZSIsInByb3BzQ29sdW1uVG9nZ2xlIiwiZXhwb3J0Q1NWIiwicmVnaXN0ZXJFeHBvc2VkQVBJIiwic2VhcmNoQ29udGV4dCIsImhhbmRsZUV4cG9ydENTViIsImRlZmF1bHQiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwicHJvcEZ1bGxOYW1lIiwic2VjcmV0IiwiZXJyIiwiRXJyb3IiLCJnZXRTaGltIiwiUmVhY3RQcm9wVHlwZXMiLCJiaWdpbnQiLCJib29sIiwibnVtYmVyIiwic3ltYm9sIiwiYW55IiwiYXJyYXlPZiIsImVsZW1lbnQiLCJlbGVtZW50VHlwZSIsImluc3RhbmNlT2YiLCJvYmplY3RPZiIsIm9uZU9mIiwib25lT2ZUeXBlIiwic2hhcGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaGFuZGxlRGVib3VuY2UiLCJ3YWl0IiwiaW1tZWRpYXRlIiwidGltZW91dCIsImFyZ3MiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0IiwiYXBwbHkiLCJpbnB1dCIsIm9uQ2hhbmdlVmFsdWUiLCJvbktleXVwIiwiZGVsYXkiLCJkZWJvdW5jZUNhbGxiYWNrIiwicGxhY2Vob2xkZXIiLCJ0YWJsZUlkIiwiaHRtbEZvciIsImlkIiwicmVmIiwibiIsIm9uS2V5VXAiLCJvbkNoYW5nZSIsIkJhc2UiLCJ0YWJsZUV4cG9zZWRBUElFbWl0dGVyIiwiY3N2RGVmYXVsdE9wdGlvbnMiLCJleHBvcnRBbGwiLCJvbmx5RXhwb3J0U2VsZWN0aW9uIiwic291cmNlIiwib25seUV4cG9ydEZpbHRlcmVkIiwicGF5bG9hZCIsInNlbGVjdGlvbnMiLCJpbmNsdWRlcyIsIlRvb2xraXRwcm92aWRlciIsInRvb2tLaXRQcm9wcyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJjYWxsIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgToolkit=t(require("react")):e.ReactBootstrapTableNgToolkit=t(e.React)}(self,e=>(()=>{var t={40(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442)),s={className:"",style:{}};t.default=e=>{const{onExport:t,children:o,className:r,...n}={...s,...e};return a.default.createElement("button",{type:"button",className:`react-bs-table-csv-btn btn btn-default ${r}`,onClick:()=>t(),...n},o)}},68(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442));t.default=({onClear:e,text:t="Clear",className:o=""})=>a.default.createElement("button",{className:`btn btn-default ${o}`,onClick:e},t)},140(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442));t.default=({columns:e,onColumnToggle:t,toggles:o,btnClassName:r="",className:s="",contextual:n="primary"})=>a.default.createElement("div",{className:`btn-group btn-group-toggle ${s}`,"data-toggle":"buttons"},e.map(e=>({...e,toggle:o[e.dataField]})).map(e=>a.default.createElement("button",{type:"button",key:e.dataField,className:`${r} btn btn-${n} ${e.toggle?"active":""}`,"data-toggle":"button","aria-pressed":e.toggle?"true":"false",onClick:()=>t(e.dataField)},e.text)))},213(e,t,o){var r,a,s;a=[],void 0===(s="function"==typeof(r=function(){"use strict";function t(e,t){return void 0===t?t={autoBom:!1}:"object"!=typeof t&&(console.warn("Deprecated: Expected third argument to be a object"),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\ufeff",e],{type:e.type}):e}function r(e,t,o){var r=new XMLHttpRequest;r.open("GET",e),r.responseType="blob",r.onload=function(){i(r.response,t,o)},r.onerror=function(){console.error("could not download file")},r.send()}function a(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function s(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(o){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var n="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof o.g&&o.g.global===o.g?o.g:void 0,l=n.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),i=n.saveAs||("object"!=typeof window||window!==n?function(){}:"download"in HTMLAnchorElement.prototype&&!l?function(e,t,o){var l=n.URL||n.webkitURL,i=document.createElement("a");t=t||e.name||"download",i.download=t,i.rel="noopener","string"==typeof e?(i.href=e,i.origin===location.origin?s(i):a(i.href)?r(e,t,o):s(i,i.target="_blank")):(i.href=l.createObjectURL(e),setTimeout(function(){l.revokeObjectURL(i.href)},4e4),setTimeout(function(){s(i)},0))}:"msSaveOrOpenBlob"in navigator?function(e,o,n){if(o=o||e.name||"download","string"!=typeof e)navigator.msSaveOrOpenBlob(t(e,n),o);else if(a(e))r(e,o,n);else{var l=document.createElement("a");l.href=e,l.target="_blank",setTimeout(function(){s(l)})}}:function(e,t,o,a){if((a=a||open("","_blank"))&&(a.document.title=a.document.body.innerText="downloading..."),"string"==typeof e)return r(e,t,o);var s="application/octet-stream"===e.type,i=/constructor/i.test(n.HTMLElement)||n.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent);if((u||s&&i||l)&&"undefined"!=typeof FileReader){var c=new FileReader;c.onloadend=function(){var e=c.result;e=u?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=e:location=e,a=null},c.readAsDataURL(e)}else{var d=n.URL||n.webkitURL,p=d.createObjectURL(e);a?a.location=p:location.href=p,a=null,setTimeout(function(){d.revokeObjectURL(p)},4e4)}});n.saveAs=i.saveAs=i,e.exports=i})?r.apply(t,a):r)||(e.exports=s)},282(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(40));t.default={ExportCSVButton:a.default}},442(t){"use strict";t.exports=e},457(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.save=t.transform=t.getMetaInfo=void 0;const a=r(o(213));t.getMetaInfo=e=>e.map(e=>({field:e.dataField,type:e.csvType||String,formatter:e.csvFormatter,formatExtraData:e.formatExtraData,header:e.csvText||e.text,export:!1!==e.csvExport,row:Number(e.row)||0,rowSpan:Number(e.rowSpan)||1,colSpan:Number(e.colSpan)||1,footer:e.footer,footerFormatter:e.footerFormatter})).filter(e=>e.export);t.transform=(e,t,o,r,{separator:a,ignoreHeader:s,ignoreFooter:n})=>{const l=t.filter(e=>e.export);let i="";return s||(i+=l.map(e=>`"${e.header}"`).join(a),i+="\n"),0===e.length||(i+=e.map((e,t)=>l.map(o=>{let a=r.get(e,o.field);return o.formatter&&(a=o.formatter(a,e,t,o.formatExtraData)),o.type===String?`"${`${a}`.replace(/"/g,'""')}"`:a}).join(a)).join("\n"),n||(i+="\n",i+=l.map((t,a)=>{if("function"==typeof t.footer){const s=r.pluck(e,o[a].dataField);return`"${t.footer(s,o[a],a)}"`}return t.footerFormatter?`"${t.footerFormatter(o[a],a)}"`:`"${t.footer}"`}).join(a))),i};t.save=(e,{noAutoBOM:t,fileName:o,blobType:r})=>{a.default.saveAs(new Blob([e],{type:r}),o,t)}},469(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(881));t.default={csvOperation:a.default}},470(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(801)),s=r(o(68));t.default={SearchBar:a.default,ClearSearchButton:s.default}},499(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442));t.default=(e={searchFormatted:!1,afterSearch:void 0,onColumnMatch:()=>!1})=>(t,o,r)=>{const s=a.default.createContext(null);class n extends a.default.Component{constructor(e){super(e);let t=e.data;o()&&""!==this.props.searchText?r(this.props.searchText):(t=this.search(e),this.triggerListener(t,!0)),this.state={data:t}}getSearched(){return this.state.data}triggerListener(t,o){e.afterSearch&&!o&&e.afterSearch(t),this.props.dataChangeListener&&this.props.dataChangeListener.emit("filterChanged",t.length)}componentDidUpdate(e){if(e.searchText!==this.props.searchText)if(o())r(this.props.searchText);else{const e=this.search(this.props);this.triggerListener(e),this.setState({data:e})}else if(o())t.isEqual(this.state.data,this.props.data)||this.setState({data:this.props.data});else if(!t.isEqual(e.data,this.props.data)){const e=this.search(this.props);this.triggerListener(e),this.setState({data:e})}}search(o){const{data:r,columns:a}=o,s=o.searchText.toLowerCase();return r.filter((o,r)=>{for(let n=0;n<a.length;n+=1){const l=a[n];if(!1===l.searchable)continue;let i=t.get(o,l.dataField);if(l.formatter&&e.searchFormatted?i=l.formatter(i,o,r,l.formatExtraData):l.filterValue&&(i=l.filterValue(i,o)),e.onColumnMatch){if(e.onColumnMatch({searchText:s,value:i,column:l,row:o}))return!0}else if(null!=i&&(i=i.toString().toLowerCase(),i.indexOf(s)>-1))return!0}return!1})}render(){return a.default.createElement(s.Provider,{value:{data:this.state.data}},this.props.children)}}return{Provider:n,Consumer:s.Consumer}}},555(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(140));t.default={ToggleList:a.default}},633(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442)),s=r(o(499)),n=r(o(880)),l=a.default.createContext({searchProps:{searchText:"",onSearch:e=>{},onClear:()=>{}},csvProps:{onExport:()=>{}},columnToggleProps:{columns:[],toggles:[],onColumnToggle:e=>{}},baseProps:{keyField:void 0,columns:[],data:[],bootstrap4:void 0}});class i extends((0,n.default)(a.default.Component)){static defaultProps={search:!1,exportCSV:!1,bootstrap4:!1};_;state;constructor(e){super(e);const t={columnToggle:{},searchText:"object"==typeof e.search&&e.search.defaultSearch||""};this._=null,this.onClear=this.onClear.bind(this),this.onSearch=this.onSearch.bind(this),this.onColumnToggle=this.onColumnToggle.bind(this),this.setDependencyModules=this.setDependencyModules.bind(this),e.columnToggle&&(t.columnToggle=e.columns.reduce((e,t)=>(e[t.dataField]=!t.hidden,e),{})),t.searchText="object"==typeof e.search&&e.search.defaultSearch||"",this.state=t}static getDerivedStateFromProps(e,t){const o=t.columnToggle;let r;return r=e.columnToggle?e.columns.reduce((e,t)=>(e[t.dataField]=!t.hidden,e),{}):{},o?{...t,currColumnToggle:o}:{...t,propsColumnToggle:r}}onSearch(e){e!==this.state.searchText&&this.setState({searchText:e})}onClear(){this.setState({searchText:""})}onColumnToggle(e){const{columnToggle:t}=this.state;t[e]=!t[e],this.setState({...this.state,columnToggle:t})}setDependencyModules(e){this._=e}render(){const e={keyField:this.props.keyField,columns:this.props.columns,data:this.props.data,search:this.props.search??!1,exportCSV:this.props.exportCSV??!1,bootstrap4:this.props.bootstrap4??!1,children:this.props.children,setDependencyModules:this.setDependencyModules,registerExposedAPI:this.registerExposedAPI};return this.props.search&&(e.search={searchContext:(0,s.default)(this.props.search),searchText:this.state.searchText}),this.props.columnToggle&&(e.columnToggle={toggles:this.state.columnToggle}),a.default.createElement(l.Provider,{value:{searchProps:{searchText:this.state.searchText,onSearch:this.onSearch,onClear:this.onClear},csvProps:{onExport:this.handleExportCSV},columnToggleProps:{columns:this.props.columns,toggles:this.state.columnToggle,onColumnToggle:this.onColumnToggle},baseProps:e}},this.props.children)}}t.default={Provider:i,Consumer:l.Consumer}},688(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Search=t.CSVExport=t.ColumnToggle=t.ToolkitContext=void 0;const a=r(o(633)),s=r(o(921));t.default=s.default,t.ToolkitContext=a.default;var n=o(555);Object.defineProperty(t,"ColumnToggle",{enumerable:!0,get:function(){return r(n).default}});var l=o(282);Object.defineProperty(t,"CSVExport",{enumerable:!0,get:function(){return r(l).default}});var i=o(470);Object.defineProperty(t,"Search",{enumerable:!0,get:function(){return r(i).default}})},801(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442)),s=(e,t,o)=>{let r;return(...a)=>{const s=o&&!r;clearTimeout(r),r=setTimeout(()=>{r=void 0,o||e.apply(this,a)},t||0),s&&e.apply(this,a)}};class n extends a.default.Component{input=null;constructor(e){super(e),this.state={value:e.searchText??""}}onChangeValue=e=>{this.setState({value:e.target.value})};onKeyup=()=>{const{delay:e=250,onSearch:t}=this.props;s(()=>{t(this.input?.value??"")},e)()};componentDidUpdate(e){this.props.searchText!==e.searchText&&this.setState({value:this.props.searchText||""})}render(){const{className:e="",style:t={},placeholder:o="Search",tableId:r="0",searchText:s="Search this table"}=this.props;return a.default.createElement("label",{htmlFor:`search-bar-${r}`,className:"search-label"},a.default.createElement("span",{id:`search-bar-${r}-label`,className:"sr-only"},s),a.default.createElement("input",{ref:e=>{this.input=e},id:`search-bar-${r}`,type:"text",style:t,"aria-labelledby":`search-bar-${r}-label`,onKeyUp:()=>this.onKeyup(),onChange:this.onChangeValue,className:`form-control ${e}`,value:this.state.value,placeholder:o}))}static defaultProps={className:"",style:{},placeholder:"Search",delay:250,searchText:"",tableId:"0",srText:"Search this table"}}t.default=n},880(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(469));t.default=e=>class extends(a.default.csvOperation(e)){registerExposedAPI=e=>{this.tableExposedAPIEmitter=e}}},881(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442)),s=o(457),n={fileName:"spreadsheet.csv",separator:",",ignoreHeader:!1,ignoreFooter:!0,noAutoBOM:!0,blobType:"text/plain;charset=utf-8",exportAll:!0,onlyExportSelection:!1};t.default=e=>class extends a.default.Component{_;tableExposedAPIEmitter;handleExportCSV=e=>{const{columns:t,exportCSV:o,keyField:r}=this.props,a=(0,s.getMetaInfo)(t),l=!0===o?n:{...n,...o};let i;if(void 0!==e)i=e;else if(l.exportAll)i=this.props.data;else if(l.onlyExportFiltered){const e={result:void 0};this.tableExposedAPIEmitter.emit("get.filtered.rows",e),i=e.result}else{const e={result:void 0};this.tableExposedAPIEmitter.emit("get.table.data",e),i=e.result}if(l.onlyExportSelection){const e={result:void 0};this.tableExposedAPIEmitter.emit("get.selected.rows",e);const t=e.result??[];i=i.filter(e=>t.includes(e[r]))}const u=(0,s.transform)(i,a,t,this._,l);(0,s.save)(u,l)}}},921(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442)),s=r(o(633));t.default=e=>a.default.createElement(s.default.Provider,{...e},a.default.createElement(s.default.Consumer,null,t=>e.children(t)))}},o={};function r(e){var a=o[e];if(void 0!==a)return a.exports;var s=o[e]={exports:{}};return t[e].call(s.exports,s,s.exports,r),s.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r(688)})());
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC5qcyIsIm1hcHBpbmdzIjoiQ0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxVQUNSLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxTQUFVSixHQUNRLGlCQUFaQyxRQUNkQSxRQUFzQyw2QkFBSUQsRUFBUUcsUUFBUSxVQUUxREosRUFBbUMsNkJBQUlDLEVBQVFELEVBQVksTUFDNUQsQ0FURCxDQVNHTyxLQUFPQyxHLHlLQ1RWLGtCQUlNQyxFQUE4QixDQUNsQ0MsVUFBVyxHQUNYQyxNQUFPLENBQUMsR0FzQlYsVUFsQkVDLElBRUEsTUFBTSxTQUFFQyxFQUFRLFNBQUVDLEVBQVEsVUFBRUosS0FBY0ssR0FBUyxJQUFLTixLQUFnQ0csR0FFeEYsT0FDRSxrQ0FDRUksS0FBSyxTQUNMTixVQUFXLDBDQUEwQ0EsSUFDckRPLFFBQVMsSUFBTUosT0FDWEUsR0FFSEQsRyw4SkNyQlAsa0JBb0JBLFVBakJvQixFQUNsQkksVUFDQUMsT0FBTyxRQUNQVCxZQUFZLE1BRVosa0NBQVFBLFVBQVcsbUJBQW1CQSxJQUFhTyxRQUFTQyxHQUN6REMsRSwrSkNUTCxrQkE4Q0EsVUExQ21CLEVBQ2pCQyxVQUNBQyxpQkFDQUMsVUFDQUMsZUFBZSxHQUNmYixZQUFZLEdBQ1pjLGFBQWEsYUFFYiwrQkFDRWQsVUFBVyw4QkFBOEJBLElBQVcsY0FDeEMsV0FFWFUsRUFDRUssSUFBS0MsSUFBOEIsSUFDL0JBLEVBQ0hDLE9BQVFMLEVBQVFJLEVBQU9FLGNBRXhCSCxJQUFLQyxHQUNKLGtDQUNFVixLQUFLLFNBQ0xhLElBQUtILEVBQU9FLFVBQ1psQixVQUFXLEdBQUdhLGFBQXdCQyxLQUNwQ0UsRUFBT0MsT0FBUyxTQUFXLEtBQzNCLGNBQ1UsU0FBUSxlQUNO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LE1BQ3hDLENBQ0EsQ0FQdUIsR0NHRXNMLEVBQW9CLEkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jc3YvYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvc2VhcmNoL2NsZWFyLWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2NvbHVtbi10b2dnbGUvdG9nZ2xlLWxpc3QudHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9maWxlLXNhdmVyL2Rpc3QvRmlsZVNhdmVyLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY3N2L2luZGV4LnRzIiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY3N2L2V4cG9ydGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9vcC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvc2VhcmNoL2luZGV4LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9zZWFyY2gvY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2NvbHVtbi10b2dnbGUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9TZWFyY2hCYXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3N0YXRlbGVzc09wLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9vcC9jc3YudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvcHJvdmlkZXIudHN4Iiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1Rvb2xraXRcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZU5nVG9vbGtpdFwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRXhwb3J0Q1NWQnV0dG9uUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgZXhwb3J0Q1NWQnV0dG9uRGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IFwiXCIsXG4gIHN0eWxlOiB7fSxcbn07XG5cbmNvbnN0IEV4cG9ydENTVkJ1dHRvbiA9IChcbiAgcHJvcHM6IEV4cG9ydENTVkJ1dHRvblByb3BzXG4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsID0+IHtcbiAgY29uc3QgeyBvbkV4cG9ydCwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgLi4ucmVzdCB9ID0geyAuLi5leHBvcnRDU1ZCdXR0b25EZWZhdWx0UHJvcHMsIC4uLnByb3BzIH07XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17YHJlYWN0LWJzLXRhYmxlLWNzdi1idG4gYnRuIGJ0bi1kZWZhdWx0ICR7Y2xhc3NOYW1lfWB9XG4gICAgICBvbkNsaWNrPXsoKSA9PiBvbkV4cG9ydCgpfVxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IEV4cG9ydENTVkJ1dHRvbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENsZWFyU2VhcmNoQnV0dG9uUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgQ2xlYXJCdXR0b24gPSAoe1xuICBvbkNsZWFyLFxuICB0ZXh0ID0gXCJDbGVhclwiLFxuICBjbGFzc05hbWUgPSBcIlwiLFxufTogQ2xlYXJTZWFyY2hCdXR0b25Qcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGwgPT4gKFxuICA8YnV0dG9uIGNsYXNzTmFtZT17YGJ0biBidG4tZGVmYXVsdCAke2NsYXNzTmFtZX1gfSBvbkNsaWNrPXtvbkNsZWFyfT5cbiAgICB7dGV4dH1cbiAgPC9idXR0b24+XG4pO1xuXG5cblxuLy8gQ2xlYXJCdXR0b24uZGVmYXVsdFByb3BzID0ge1xuLy8gICB0ZXh0OiBcIkNsZWFyXCIsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IENsZWFyQnV0dG9uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ29sdW1uRGVzY3JpcHRpb24gfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5pbXBvcnQgeyBUb2dnbGVMaXN0UHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgVG9nZ2xlTGlzdCA9ICh7XG4gIGNvbHVtbnMsXG4gIG9uQ29sdW1uVG9nZ2xlLFxuICB0b2dnbGVzLFxuICBidG5DbGFzc05hbWUgPSBcIlwiLFxuICBjbGFzc05hbWUgPSBcIlwiLFxuICBjb250ZXh0dWFsID0gXCJwcmltYXJ5XCJcbn06IFRvZ2dsZUxpc3RQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGwgPT4gKFxuICA8ZGl2XG4gICAgY2xhc3NOYW1lPXtgYnRuLWdyb3VwIGJ0bi1ncm91cC10b2dnbGUgJHtjbGFzc05hbWV9YH1cbiAgICBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIlxuICA+XG4gICAge2NvbHVtbnNcbiAgICAgIC5tYXAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb24pID0+ICh7XG4gICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgdG9nZ2xlOiB0b2dnbGVzW2NvbHVtbi5kYXRhRmllbGRdLFxuICAgICAgfSkpXG4gICAgICAubWFwKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uKSA9PiAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBrZXk9e2NvbHVtbi5kYXRhRmllbGR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtidG5DbGFzc05hbWV9IGJ0biBidG4tJHtjb250ZXh0dWFsfSAke1xuICAgICAgICAgICAgY29sdW1uLnRvZ2dsZSA/IFwiYWN0aXZlXCIgOiBcIlwiXG4gICAgICAgICAgfWB9XG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJidXR0b25cIlxuICAgICAgICAgIGFyaWEtcHJlc3NlZD17Y29sdW1uLnRvZ2dsZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ29sdW1uVG9nZ2xlKGNvbHVtbi5kYXRhRmllbGQpfVxuICAgICAgICA+XG4gICAgICAgICAge2NvbHVtbi50ZXh0fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICkpfVxuICA8L2Rpdj5cbik7XG5cblxuXG4vLyBUb2dnbGVMaXN0LmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgYnRuQ2xhc3NOYW1lOiBcIlwiLFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIGNvbnRleHR1YWw6IFwicHJpbWFyeVwiLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgVG9nZ2xlTGlzdDtcbiIsIihmdW5jdGlvbihhLGIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYik7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgZXhwb3J0cyliKCk7ZWxzZXtiKCksYS5GaWxlU2F2ZXI9e2V4cG9ydHM6e319LmV4cG9ydHN9fSkodGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSxiKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgYj9iPXthdXRvQm9tOiExfTpcIm9iamVjdFwiIT10eXBlb2YgYiYmKGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IEV4cGVjdGVkIHRoaXJkIGFyZ3VtZW50IHRvIGJlIGEgb2JqZWN0XCIpLGI9e2F1dG9Cb206IWJ9KSxiLmF1dG9Cb20mJi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1wiXFx1RkVGRlwiLGFdLHt0eXBlOmEudHlwZX0pOmF9ZnVuY3Rpb24gYyhhLGIsYyl7dmFyIGQ9bmV3IFhNTEh0dHBSZXF1ZXN0O2Qub3BlbihcIkdFVFwiLGEpLGQucmVzcG9uc2VUeXBlPVwiYmxvYlwiLGQub25sb2FkPWZ1bmN0aW9uKCl7ZyhkLnJlc3BvbnNlLGIsYyl9LGQub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJjb3VsZCBub3QgZG93bmxvYWQgZmlsZVwiKX0sZC5zZW5kKCl9ZnVuY3Rpb24gZChhKXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiSEVBRFwiLGEsITEpO3RyeXtiLnNlbmQoKX1jYXRjaChhKXt9cmV0dXJuIDIwMDw9Yi5zdGF0dXMmJjI5OT49Yi5zdGF0dXN9ZnVuY3Rpb24gZShhKXt0cnl7YS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIikpfWNhdGNoKGMpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIik7Yi5pbml0TW91c2VFdmVudChcImNsaWNrXCIsITAsITAsd2luZG93LDAsMCwwLDgwLDIwLCExLCExLCExLCExLDAsbnVsbCksYS5kaXNwYXRjaEV2ZW50KGIpfX12YXIgZj1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZi5zZWxmPT09c2VsZj9zZWxmOlwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbC5nbG9iYWw9PT1nbG9iYWw/Z2xvYmFsOnZvaWQgMCxhPWYubmF2aWdhdG9yJiYvTWFjaW50b3NoLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGc9Zi5zYXZlQXN8fChcIm9iamVjdFwiIT10eXBlb2Ygd2luZG93fHx3aW5kb3chPT1mP2Z1bmN0aW9uKCl7fTpcImRvd25sb2FkXCJpbiBIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUmJiFhP2Z1bmN0aW9uKGIsZyxoKXt2YXIgaT1mLlVSTHx8Zi53ZWJraXRVUkwsaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtnPWd8fGIubmFtZXx8XCJkb3dubG9hZFwiLGouZG93bmxvYWQ9ZyxqLnJlbD1cIm5vb3BlbmVyXCIsXCJzdHJpbmdcIj09dHlwZW9mIGI/KGouaHJlZj1iLGoub3JpZ2luPT09bG9jYXRpb24ub3JpZ2luP2Uoaik6ZChqLmhyZWYpP2MoYixnLGgpOmUoaixqLnRhcmdldD1cIl9ibGFua1wiKSk6KGouaHJlZj1pLmNyZWF0ZU9iamVjdFVSTChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5yZXZva2VPYmplY3RVUkwoai5ocmVmKX0sNEU0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShqKX0sMCkpfTpcIm1zU2F2ZU9yT3BlbkJsb2JcImluIG5hdmlnYXRvcj9mdW5jdGlvbihmLGcsaCl7aWYoZz1nfHxmLm5hbWV8fFwiZG93bmxvYWRcIixcInN0cmluZ1wiIT10eXBlb2YgZiluYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihiKGYsaCksZyk7ZWxzZSBpZihkKGYpKWMoZixnLGgpO2Vsc2V7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7aS5ocmVmPWYsaS50YXJnZXQ9XCJfYmxhbmtcIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShpKX0pfX06ZnVuY3Rpb24oYixkLGUsZyl7aWYoZz1nfHxvcGVuKFwiXCIsXCJfYmxhbmtcIiksZyYmKGcuZG9jdW1lbnQudGl0bGU9Zy5kb2N1bWVudC5ib2R5LmlubmVyVGV4dD1cImRvd25sb2FkaW5nLi4uXCIpLFwic3RyaW5nXCI9PXR5cGVvZiBiKXJldHVybiBjKGIsZCxlKTt2YXIgaD1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiPT09Yi50eXBlLGk9L2NvbnN0cnVjdG9yL2kudGVzdChmLkhUTUxFbGVtZW50KXx8Zi5zYWZhcmksaj0vQ3JpT1NcXC9bXFxkXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7aWYoKGp8fGgmJml8fGEpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgRmlsZVJlYWRlcil7dmFyIGs9bmV3IEZpbGVSZWFkZXI7ay5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgYT1rLnJlc3VsdDthPWo/YTphLnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIiksZz9nLmxvY2F0aW9uLmhyZWY9YTpsb2NhdGlvbj1hLGc9bnVsbH0say5yZWFkQXNEYXRhVVJMKGIpfWVsc2V7dmFyIGw9Zi5VUkx8fGYud2Via2l0VVJMLG09bC5jcmVhdGVPYmplY3RVUkwoYik7Zz9nLmxvY2F0aW9uPW06bG9jYXRpb24uaHJlZj1tLGc9bnVsbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bC5yZXZva2VPYmplY3RVUkwobSl9LDRFNCl9fSk7Zi5zYXZlQXM9Zy5zYXZlQXM9ZyxcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9Zyl9KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RmlsZVNhdmVyLm1pbi5qcy5tYXAiLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBFeHBvcnRDU1ZCdXR0b24gZnJvbSAnLi9idXR0b24nO1xuXG5leHBvcnQgZGVmYXVsdCB7IEV4cG9ydENTVkJ1dHRvbiB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvKiBlc2xpbnQgbm8tdW5uZWVkZWQtdGVybmFyeTogMCAqL1xuaW1wb3J0IEZpbGVTYXZlciBmcm9tIFwiZmlsZS1zYXZlclwiO1xuXG5leHBvcnQgY29uc3QgZ2V0TWV0YUluZm8gPSAoY29sdW1uczogYW55KSA9PlxuICBjb2x1bW5zXG4gICAgLm1hcCgoY29sdW1uOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZDogY29sdW1uLmRhdGFGaWVsZCxcbiAgICAgIHR5cGU6IGNvbHVtbi5jc3ZUeXBlIHx8IFN0cmluZyxcbiAgICAgIGZvcm1hdHRlcjogY29sdW1uLmNzdkZvcm1hdHRlcixcbiAgICAgIGZvcm1hdEV4dHJhRGF0YTogY29sdW1uLmZvcm1hdEV4dHJhRGF0YSxcbiAgICAgIGhlYWRlcjogY29sdW1uLmNzdlRleHQgfHwgY29sdW1uLnRleHQsXG4gICAgICBleHBvcnQ6IGNvbHVtbi5jc3ZFeHBvcnQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxuICAgICAgcm93OiBOdW1iZXIoY29sdW1uLnJvdykgfHwgMCxcbiAgICAgIHJvd1NwYW46IE51bWJlcihjb2x1bW4ucm93U3BhbikgfHwgMSxcbiAgICAgIGNvbFNwYW46IE51bWJlcihjb2x1bW4uY29sU3BhbikgfHwgMSxcbiAgICAgIGZvb3RlcjogY29sdW1uLmZvb3RlcixcbiAgICAgIGZvb3RlckZvcm1hdHRlcjogY29sdW1uLmZvb3RlckZvcm1hdHRlcixcbiAgICB9KSlcbiAgICAuZmlsdGVyKChfOiBhbnkpID0+IF8uZXhwb3J0KTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybSA9IChcbiAgZGF0YTogYW55LFxuICBtZXRhOiBhbnksXG4gIGNvbHVtbnM6IGFueSxcbiAgXzogYW55LFxuICB7IHNlcGFyYXRvciwgaWdub3JlSGVhZGVyLCBpZ25vcmVGb290ZXIgfTogYW55XG4pID0+IHtcbiAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBtZXRhLmZpbHRlcigobTogYW55KSA9PiBtLmV4cG9ydCk7XG4gIGxldCBjb250ZW50ID0gXCJcIjtcbiAgLy8gZXh0cmFjdCBjc3YgaGVhZGVyXG4gIGlmICghaWdub3JlSGVhZGVyKSB7XG4gICAgY29udGVudCArPSB2aXNpYmxlQ29sdW1ucy5tYXAoKG06IGFueSkgPT4gYFwiJHttLmhlYWRlcn1cImApLmpvaW4oc2VwYXJhdG9yKTtcbiAgICBjb250ZW50ICs9IFwiXFxuXCI7XG4gIH1cbiAgLy8gZXh0cmFjdCBjc3YgYm9keVxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBjb250ZW50O1xuICBjb250ZW50ICs9IGRhdGFcbiAgICAubWFwKChyb3c6IGFueSwgcm93SW5kZXg6IGFueSkgPT5cbiAgICAgIHZpc2libGVDb2x1bW5zXG4gICAgICAgIC5tYXAoKG06IGFueSkgPT4ge1xuICAgICAgICAgIGxldCBjZWxsQ29udGVudCA9IF8uZ2V0KHJvdywgbS5maWVsZCk7XG4gICAgICAgICAgaWYgKG0uZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBjZWxsQ29udGVudCA9IG0uZm9ybWF0dGVyKFxuICAgICAgICAgICAgICBjZWxsQ29udGVudCxcbiAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgbS5mb3JtYXRFeHRyYURhdGFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtLnR5cGUgPT09IFN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGBcIiR7YCR7Y2VsbENvbnRlbnR9YC5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNlbGxDb250ZW50O1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihzZXBhcmF0b3IpXG4gICAgKVxuICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gIGlmICghaWdub3JlRm9vdGVyKSB7XG4gICAgY29udGVudCArPSBcIlxcblwiO1xuICAgIGNvbnRlbnQgKz0gdmlzaWJsZUNvbHVtbnNcbiAgICAgIC5tYXAoKG06IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbS5mb290ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBfLnBsdWNrKGRhdGEsIGNvbHVtbnNbaV0uZGF0YUZpZWxkKTtcbiAgICAgICAgICByZXR1cm4gYFwiJHttLmZvb3Rlcihjb2x1bW5EYXRhLCBjb2x1bW5zW2ldLCBpKX1cImA7XG4gICAgICAgIH0gZWxzZSBpZiAobS5mb290ZXJGb3JtYXR0ZXIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHttLmZvb3RlckZvcm1hdHRlcihjb2x1bW5zW2ldLCBpKX1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcIiR7bS5mb290ZXJ9XCJgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKHNlcGFyYXRvcik7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZSA9IChjb250ZW50OiBhbnksIHsgbm9BdXRvQk9NLCBmaWxlTmFtZSwgYmxvYlR5cGUgfTogYW55KSA9PiB7XG4gIEZpbGVTYXZlci5zYXZlQXMoXG4gICAgbmV3IEJsb2IoW2NvbnRlbnRdLCB7IHR5cGU6IGJsb2JUeXBlIH0pLFxuICAgIGZpbGVOYW1lLFxuICAgIG5vQXV0b0JPTVxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNzdk9wZXJhdGlvbiBmcm9tICcuL2Nzdic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3N2T3BlcmF0aW9uXG59O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgU2VhcmNoQmFyIGZyb20gJy4vU2VhcmNoQmFyJztcbmltcG9ydCBDbGVhclNlYXJjaEJ1dHRvbiBmcm9tICcuL2NsZWFyLWJ1dHRvbic7XG5cbmV4cG9ydCBkZWZhdWx0IHsgU2VhcmNoQmFyLCBDbGVhclNlYXJjaEJ1dHRvbiB9O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1jb250aW51ZTogMCAqL1xuLyogZXNsaW50IG5vLWxvbmVseS1pZjogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNlYXJjaE1hdGNoUHJvcHMsIFRhYmxlU2VhcmNoUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuaW50ZXJmYWNlIERhdGFDaGFuZ2VMaXN0ZW5lciB7XG4gIGVtaXQ6IChldmVudDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUHJvdmlkZXJQcm9wcyBleHRlbmRzIFNlYXJjaE1hdGNoUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgZGF0YUNoYW5nZUxpc3RlbmVyPzogRGF0YUNoYW5nZUxpc3RlbmVyO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUHJvdmlkZXJTdGF0ZSB7XG4gIGRhdGE6IGFueVtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoXG4gICAgb3B0aW9uczogVGFibGVTZWFyY2hQcm9wcyA9IHtcbiAgICAgIHNlYXJjaEZvcm1hdHRlZDogZmFsc2UsXG4gICAgICBhZnRlclNlYXJjaDogdW5kZWZpbmVkLFxuICAgICAgb25Db2x1bW5NYXRjaDogKCkgPT4gZmFsc2UsXG4gICAgfVxuICApID0+XG4gIChcbiAgICBfOiBhbnksXG4gICAgaXNSZW1vdGVTZWFyY2g6ICgpID0+IGJvb2xlYW4sXG4gICAgaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlOiAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB2b2lkXG4gICkgPT4ge1xuICAgIGNvbnN0IFNlYXJjaENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4obnVsbCk7XG5cbiAgICBjbGFzcyBTZWFyY2hQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgICAgIFNlYXJjaFByb3ZpZGVyUHJvcHMsXG4gICAgICBTZWFyY2hQcm92aWRlclN0YXRlXG4gICAgPiB7XG4gICAgICBjb25zdHJ1Y3Rvcihwcm9wczogU2VhcmNoUHJvdmlkZXJQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIGxldCBpbml0aWFsRGF0YSA9IHByb3BzLmRhdGE7XG4gICAgICAgIGlmIChpc1JlbW90ZVNlYXJjaCgpICYmIHRoaXMucHJvcHMuc2VhcmNoVGV4dCAhPT0gXCJcIikge1xuICAgICAgICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSh0aGlzLnByb3BzLnNlYXJjaFRleHQhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbml0aWFsRGF0YSA9IHRoaXMuc2VhcmNoKHByb3BzKTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMaXN0ZW5lcihpbml0aWFsRGF0YSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgZGF0YTogaW5pdGlhbERhdGEgfTtcbiAgICAgIH1cblxuICAgICAgZ2V0U2VhcmNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIHRyaWdnZXJMaXN0ZW5lcihyZXN1bHQ6IGFueSwgc2tpcEluaXQ/OiBhbnkpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJTZWFyY2ggJiYgIXNraXBJbml0KSB7XG4gICAgICAgICAgb3B0aW9ucy5hZnRlclNlYXJjaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lcikge1xuICAgICAgICAgIHRoaXMucHJvcHMuZGF0YUNoYW5nZUxpc3RlbmVyLmVtaXQoXCJmaWx0ZXJDaGFuZ2VkXCIsIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFNlYXJjaFByb3ZpZGVyUHJvcHMpIHtcbiAgICAgICAgaWYgKHByZXZQcm9wcy5zZWFyY2hUZXh0ICE9PSB0aGlzLnByb3BzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgICBpZiAoaXNSZW1vdGVTZWFyY2goKSkge1xuICAgICAgICAgICAgaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlKHRoaXMucHJvcHMuc2VhcmNoVGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoKHRoaXMucHJvcHMpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTGlzdGVuZXIocmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzUmVtb3RlU2VhcmNoKCkpIHtcbiAgICAgICAgICAgIGlmICghXy5pc0VxdWFsKHRoaXMuc3RhdGUuZGF0YSwgdGhpcy5wcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGF0YTogdGhpcy5wcm9wcy5kYXRhIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIV8uaXNFcXVhbChwcmV2UHJvcHMuZGF0YSwgdGhpcy5wcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWFyY2godGhpcy5wcm9wcyk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMaXN0ZW5lcihyZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZWFyY2gocHJvcHM6IGFueSkge1xuICAgICAgICBjb25zdCB7IGRhdGEsIGNvbHVtbnMgfSA9IHByb3BzO1xuICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gcHJvcHMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55LCByaWR4OiBhbnkpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBjaWR4ID0gMDsgY2lkeCA8IGNvbHVtbnMubGVuZ3RoOyBjaWR4ICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY2lkeF07XG4gICAgICAgICAgICBpZiAoY29sdW1uLnNlYXJjaGFibGUgPT09IGZhbHNlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBvcHRpb25zLnNlYXJjaEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA9IGNvbHVtbi5mb3JtYXR0ZXIoXG4gICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUsXG4gICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgIHJpZHgsXG4gICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdEV4dHJhRGF0YVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZmlsdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgPSBjb2x1bW4uZmlsdGVyVmFsdWUodGFyZ2V0VmFsdWUsIHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5vbkNvbHVtbk1hdGNoKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ29sdW1uTWF0Y2goe1xuICAgICAgICAgICAgICAgICAgc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB0YXJnZXRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRhcmdldFZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB0YXJnZXRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlID0gdGFyZ2V0VmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZS5pbmRleE9mKHNlYXJjaFRleHQpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFNlYXJjaENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgZGF0YTogdGhpcy5zdGF0ZS5kYXRhIH19PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgPC9TZWFyY2hDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm92aWRlcjogU2VhcmNoUHJvdmlkZXIsXG4gICAgICBDb25zdW1lcjogU2VhcmNoQ29udGV4dC5Db25zdW1lcixcbiAgICB9O1xuICB9O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgVG9nZ2xlTGlzdCBmcm9tICcuL3RvZ2dsZS1saXN0JztcblxuZXhwb3J0IGRlZmF1bHQgeyBUb2dnbGVMaXN0IH07XG4iLCIvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgVGFibGVUb29sa2l0UHJvcHMsIFRvb2xraXRDb250ZXh0VHlwZSB9IGZyb20gXCIuXCI7XG5pbXBvcnQgY3JlYXRlU2VhcmNoQ29udGV4dCBmcm9tIFwiLi9zcmMvc2VhcmNoL2NvbnRleHRcIjtcbmltcG9ydCBzdGF0ZWxlc3NEZWNvcmF0b3IgZnJvbSBcIi4vc3RhdGVsZXNzT3BcIjtcblxuY29uc3QgVG9vbGtpdENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFRvb2xraXRDb250ZXh0VHlwZT4oe1xuICBzZWFyY2hQcm9wczoge1xuICAgIHNlYXJjaFRleHQ6IFwiXCIsXG4gICAgb25TZWFyY2g6ICh2YWw6IHN0cmluZykgPT4ge30sXG4gICAgb25DbGVhcjogKCkgPT4ge30sXG4gIH0sXG4gIGNzdlByb3BzOiB7XG4gICAgb25FeHBvcnQ6ICgpID0+IHt9LFxuICB9LFxuICBjb2x1bW5Ub2dnbGVQcm9wczoge1xuICAgIGNvbHVtbnM6IFtdLFxuICAgIHRvZ2dsZXM6IFtdLFxuICAgIG9uQ29sdW1uVG9nZ2xlOiAoZGF0YUZpZWxkOiBzdHJpbmcpID0+IHt9LFxuICB9LFxuICBiYXNlUHJvcHM6IHtcbiAgICBrZXlGaWVsZDogdW5kZWZpbmVkLFxuICAgIGNvbHVtbnM6IFtdLFxuICAgIGRhdGE6IFtdLFxuICAgIGJvb3RzdHJhcDQ6IHVuZGVmaW5lZCxcbiAgfSxcbn0pO1xuXG5jbGFzcyBUb29sa2l0UHJvdmlkZXIgZXh0ZW5kcyBzdGF0ZWxlc3NEZWNvcmF0b3IoUmVhY3QuQ29tcG9uZW50KSB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgc2VhcmNoOiBmYWxzZSxcbiAgICBleHBvcnRDU1Y6IGZhbHNlLFxuICAgIGJvb3RzdHJhcDQ6IGZhbHNlLFxuICB9O1xuXG4gIF86IGFueTtcbiAgc3RhdGU6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogVGFibGVUb29sa2l0UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgY29sdW1uVG9nZ2xlOiB7fSxcbiAgICAgIHNlYXJjaFRleHQ6XG4gICAgICAgIHR5cGVvZiBwcm9wcy5zZWFyY2ggPT09IFwib2JqZWN0XCJcbiAgICAgICAgICA/IHByb3BzLnNlYXJjaC5kZWZhdWx0U2VhcmNoIHx8IFwiXCJcbiAgICAgICAgICA6IFwiXCIsXG4gICAgfTtcbiAgICB0aGlzLl8gPSBudWxsO1xuICAgIHRoaXMub25DbGVhciA9IHRoaXMub25DbGVhci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25TZWFyY2ggPSB0aGlzLm9uU2VhcmNoLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNvbHVtblRvZ2dsZSA9IHRoaXMub25Db2x1bW5Ub2dnbGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNldERlcGVuZGVuY3lNb2R1bGVzID0gdGhpcy5zZXREZXBlbmRlbmN5TW9kdWxlcy5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKHByb3BzLmNvbHVtblRvZ2dsZSkge1xuICAgICAgaW5pdGlhbFN0YXRlLmNvbHVtblRvZ2dsZSA9IHByb3BzLmNvbHVtbnMucmVkdWNlKFxuICAgICAgICAob2JqOiBhbnksIGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5kYXRhRmllbGRdID0gIWNvbHVtbi5oaWRkZW47XG4gICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSxcbiAgICAgICAge31cbiAgICAgICk7XG4gICAgfVxuICAgIGluaXRpYWxTdGF0ZS5zZWFyY2hUZXh0ID1cbiAgICAgIHR5cGVvZiBwcm9wcy5zZWFyY2ggPT09IFwib2JqZWN0XCIgPyBwcm9wcy5zZWFyY2guZGVmYXVsdFNlYXJjaCB8fCBcIlwiIDogXCJcIjtcbiAgICB0aGlzLnN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wczogVGFibGVUb29sa2l0UHJvcHMsIHN0YXRlOiBhbnkpIHtcbiAgICBjb25zdCBjdXJyQ29sdW1uVG9nZ2xlID0gc3RhdGUuY29sdW1uVG9nZ2xlO1xuICAgIGxldCBwcm9wc0NvbHVtblRvZ2dsZTtcbiAgICBpZiAocHJvcHMuY29sdW1uVG9nZ2xlKSB7XG4gICAgICBwcm9wc0NvbHVtblRvZ2dsZSA9IHByb3BzLmNvbHVtbnMucmVkdWNlKChvYmo6IGFueSwgY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgb2JqW2NvbHVtbi5kYXRhRmllbGRdID0gIWNvbHVtbi5oaWRkZW47XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9LCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BzQ29sdW1uVG9nZ2xlID0ge307XG4gICAgfVxuICAgIGlmIChjdXJyQ29sdW1uVG9nZ2xlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY3VyckNvbHVtblRvZ2dsZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBwcm9wc0NvbHVtblRvZ2dsZSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2goc2VhcmNoVGV4dDogYW55KSB7XG4gICAgaWYgKHNlYXJjaFRleHQgIT09IHRoaXMuc3RhdGUuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNlYXJjaFRleHQgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DbGVhcigpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgc2VhcmNoVGV4dDogXCJcIiB9KTtcbiAgfVxuXG4gIG9uQ29sdW1uVG9nZ2xlKGRhdGFGaWVsZDogYW55KSB7XG4gICAgY29uc3QgeyBjb2x1bW5Ub2dnbGUgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29sdW1uVG9nZ2xlW2RhdGFGaWVsZF0gPSAhY29sdW1uVG9nZ2xlW2RhdGFGaWVsZF07XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgY29sdW1uVG9nZ2xlLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyp9IF9cbiAgICogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uZSB0aW1lIHdoZW4gdGFibGUgcmVuZGVyXG4gICAqIHJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29udGV4dC9pbmRleC5qcyB3aWxsIGNhbGwgdGhpcyBjYiBmb3IgcGFzc2luZyB0aGUgXyBtb2R1bGVcbiAgICogUGxlYXNlIGNvbnNpZGVyIHRvIGV4dHJhY3QgYSBjb21tb24gbW9kdWxlIHRvIGhhbmRsZSBfIG1vZHVsZS5cbiAgICogdGhpcyBpcyBqdXN0IGEgcXVpY2sgZml4XG4gICAqL1xuICBzZXREZXBlbmRlbmN5TW9kdWxlcyhfOiBhbnkpIHtcbiAgICB0aGlzLl8gPSBfO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGJhc2VQcm9wczogVGFibGVUb29sa2l0UHJvcHMgPSB7XG4gICAgICBrZXlGaWVsZDogdGhpcy5wcm9wcy5rZXlGaWVsZCxcbiAgICAgIGNvbHVtbnM6IHRoaXMucHJvcHMuY29sdW1ucyxcbiAgICAgIGRhdGE6IHRoaXMucHJvcHMuZGF0YSxcbiAgICAgIHNlYXJjaDogdGhpcy5wcm9wcy5zZWFyY2ggPz8gZmFsc2UsXG4gICAgICBleHBvcnRDU1Y6IHRoaXMucHJvcHMuZXhwb3J0Q1NWID8/IGZhbHNlLFxuICAgICAgYm9vdHN0cmFwNDogdGhpcy5wcm9wcy5ib290c3RyYXA0ID8/IGZhbHNlLFxuICAgICAgY2hpbGRyZW46IHRoaXMucHJvcHMuY2hpbGRyZW4sXG4gICAgICBzZXREZXBlbmRlbmN5TW9kdWxlczogdGhpcy5zZXREZXBlbmRlbmN5TW9kdWxlcyxcbiAgICAgIHJlZ2lzdGVyRXhwb3NlZEFQSTogdGhpcy5yZWdpc3RlckV4cG9zZWRBUEksXG4gICAgfTtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWFyY2gpIHtcbiAgICAgIGJhc2VQcm9wcy5zZWFyY2ggPSB7XG4gICAgICAgIHNlYXJjaENvbnRleHQ6IGNyZWF0ZVNlYXJjaENvbnRleHQodGhpcy5wcm9wcy5zZWFyY2gpLFxuICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnN0YXRlLnNlYXJjaFRleHQsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUpIHtcbiAgICAgIGJhc2VQcm9wcy5jb2x1bW5Ub2dnbGUgPSB7XG4gICAgICAgIHRvZ2dsZXM6IHRoaXMuc3RhdGUuY29sdW1uVG9nZ2xlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb29sa2l0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgIHNlYXJjaFByb3BzOiB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnN0YXRlLnNlYXJjaFRleHQsXG4gICAgICAgICAgICBvblNlYXJjaDogdGhpcy5vblNlYXJjaCxcbiAgICAgICAgICAgIG9uQ2xlYXI6IHRoaXMub25DbGVhcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNzdlByb3BzOiB7XG4gICAgICAgICAgICBvbkV4cG9ydDogdGhpcy5oYW5kbGVFeHBvcnRDU1YsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2x1bW5Ub2dnbGVQcm9wczoge1xuICAgICAgICAgICAgY29sdW1uczogdGhpcy5wcm9wcy5jb2x1bW5zLFxuICAgICAgICAgICAgdG9nZ2xlczogdGhpcy5zdGF0ZS5jb2x1bW5Ub2dnbGUsXG4gICAgICAgICAgICBvbkNvbHVtblRvZ2dsZTogdGhpcy5vbkNvbHVtblRvZ2dsZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhc2VQcm9wcyxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1Rvb2xraXRDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBQcm92aWRlcjogVG9vbGtpdFByb3ZpZGVyLFxuICBDb25zdW1lcjogVG9vbGtpdENvbnRleHQuQ29uc3VtZXIsXG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ29sdW1uRGVzY3JpcHRpb24sIFNlYXJjaFByb3BzIH0gZnJvbSBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZ1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgVG9vbGtpdFByb3ZpZGVyIGZyb20gXCIuL3Byb3ZpZGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFRvb2xraXRQcm92aWRlcjtcbmV4cG9ydCBjb25zdCBUb29sa2l0Q29udGV4dCA9IENvbnRleHQ7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sdW1uVG9nZ2xlIH0gZnJvbSBcIi4vc3JjL2NvbHVtbi10b2dnbGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NWRXhwb3J0IH0gZnJvbSBcIi4vc3JjL2NzdlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWFyY2ggfSBmcm9tIFwiLi9zcmMvc2VhcmNoXCI7XG5cbi8qKlxuICogZGVjbGFyYXRpb24gZm9yIHRhYmxlIHRvb2xraXQgc3ViIG1vZHVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluamVjdGVkU2VhcmNoUHJvcHMge1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIG9uU2VhcmNoOiAodmFsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQ2xlYXI6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoTWF0Y2hQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxUPjtcbiAgcm93OiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlU2VhcmNoUHJvcHM8VCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xuICBzZWFyY2hGb3JtYXR0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0U2VhcmNoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgb25Db2x1bW5NYXRjaD86IChwcm9wczogU2VhcmNoTWF0Y2hQcm9wczxUPikgPT4gYm9vbGVhbjtcbiAgY3VzdG9tTWF0Y2hGdW5jPzogKChwcm9wczogU2VhcmNoTWF0Y2hQcm9wczxUPikgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQ7XG4gIGFmdGVyU2VhcmNoPzogKG5ld1Jlc3VsdDogVFtdKSA9PiB2b2lkIHwgdW5kZWZpbmVkO1xuICBzZWFyY2hDb250ZXh0PzogRnVuY3Rpb247XG4gIHNlYXJjaFRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NWUHJvcHMge1xuICBmaWxlTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc2VwYXJhdG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZ25vcmVIZWFkZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpZ25vcmVGb290ZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBub0F1dG9CT00/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogZGVmYXVsdCBpcyB0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLThcbiAgICovXG4gIGJsb2JUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBleHBvcnRBbGw/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBvbmx5RXhwb3J0U2VsZWN0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgb25seUV4cG9ydEZpbHRlcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZVRvb2xraXRQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzZWFyY2g/OiBUYWJsZVNlYXJjaFByb3BzPFQ+IHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAga2V5RmllbGQ6IGtleW9mIFQgfCBzdHJpbmc7XG4gIGRhdGE6IFRbXTtcbiAgcmVmPzogYW55O1xuICBjb2x1bW5zOiBBcnJheTxDb2x1bW5EZXNjcmlwdGlvbjxUPj47XG4gIGNoaWxkcmVuOiAocHJvcHM6IFRvb2xraXRDb250ZXh0VHlwZSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50O1xuICBleHBvcnRDU1Y/OiBib29sZWFuIHwgQ1NWUHJvcHMgfCB1bmRlZmluZWQ7XG4gIGNvbHVtblRvZ2dsZT86IHsgW2RhdGFGaWVsZDogc3RyaW5nXTogYm9vbGVhbiB9IHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc2V0RGVwZW5kZW5jeU1vZHVsZXM/OiBGdW5jdGlvbjtcbiAgcmVnaXN0ZXJFeHBvc2VkQVBJPzogRnVuY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbGtpdENvbnRleHRUeXBlIHtcbiAgc2VhcmNoUHJvcHM6IEluamVjdGVkU2VhcmNoUHJvcHM7XG4gIGNzdlByb3BzOiB7XG4gICAgb25FeHBvcnQ6IChzb3VyY2U/OiBhbnkpID0+IHZvaWQ7XG4gIH07XG4gIGNvbHVtblRvZ2dsZVByb3BzOiB7XG4gICAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgICAvKipcbiAgICAgKiBhcnJheSBvZiB0b2dnbGVkIGNvbHVtbnNcbiAgICAgKi9cbiAgICB0b2dnbGVzOiBib29sZWFuW107XG4gICAgb25Db2x1bW5Ub2dnbGU6IChkYXRhRmllbGQ6IHN0cmluZykgPT4gdm9pZDtcbiAgfTtcbiAgYmFzZVByb3BzOiB7XG4gICAgLyoqXG4gICAgICogdGFibGUga2V5IGZpZWxkXG4gICAgICovXG4gICAga2V5RmllbGQ6IGFueTtcbiAgICBjb2x1bW5zOiBDb2x1bW5EZXNjcmlwdGlvbltdO1xuICAgIGRhdGE6IGFueVtdO1xuICAgIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvZ2dsZUxpc3RQcm9wcyB7XG4gIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gIC8qKlxuICAgKiBhcnJheSBvZiB0b2dnbGVkIGNvbHVtbnNcbiAgICovXG4gIHRvZ2dsZXM6IGJvb2xlYW5bXTtcbiAgb25Db2x1bW5Ub2dnbGU6IChkYXRhRmllbGQ6IHN0cmluZykgPT4gdm9pZDtcbiAgYnRuQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnRleHR1YWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0Q1NWQnV0dG9uUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBvbkV4cG9ydDogKCkgPT4gdm9pZDtcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoQmFyUHJvcHM8VCA9IGFueT4gZXh0ZW5kcyBTZWFyY2hQcm9wczxUPiB7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBkZWxheT86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoVGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdGFibGVJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVmPzogUmVhY3QuUmVmT2JqZWN0PFJlYWN0LkNvbXBvbmVudDxTZWFyY2hQcm9wczxUPj4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsZWFyU2VhcmNoQnV0dG9uUHJvcHMge1xuICBvbkNsZWFyPzogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG4iLCIvKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgaGFuZGxlRGVib3VuY2UgPSA8VCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD4oXG4gIGZ1bmM6IFQsXG4gIHdhaXQ6IG51bWJlcixcbiAgaW1tZWRpYXRlPzogYm9vbGVhblxuKSA9PiB7XG4gIGxldCB0aW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcblxuICByZXR1cm4gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IHtcbiAgICBjb25zdCBsYXRlciA9ICgpID0+IHtcbiAgICAgIHRpbWVvdXQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG5cbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG5cbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCB8fCAwKTtcblxuICAgIGlmIChjYWxsTm93KSB7XG4gICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfTtcbn07XG5cbmludGVyZmFjZSBTZWFyY2hCYXJTdGF0ZSB7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmNsYXNzIFNlYXJjaEJhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxTZWFyY2hCYXJQcm9wcywgU2VhcmNoQmFyU3RhdGU+IHtcbiAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU2VhcmNoQmFyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBwcm9wcy5zZWFyY2hUZXh0ID8/IFwiXCIsXG4gICAgfTtcbiAgfVxuXG4gIG9uQ2hhbmdlVmFsdWUgPSAoZTogYW55KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBlLnRhcmdldC52YWx1ZSB9KTtcbiAgfTtcblxuICBvbktleXVwID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZGVsYXkgPSAyNTAsIG9uU2VhcmNoIH0gPSB0aGlzLnByb3BzIGFzIGFueTtcbiAgICBjb25zdCBkZWJvdW5jZUNhbGxiYWNrID0gaGFuZGxlRGVib3VuY2UoKCkgPT4ge1xuICAgICAgb25TZWFyY2ghKHRoaXMuaW5wdXQ/LnZhbHVlID8/IFwiXCIpO1xuICAgIH0sIGRlbGF5KTtcbiAgICBkZWJvdW5jZUNhbGxiYWNrKCk7XG4gIH07XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogU2VhcmNoQmFyUHJvcHMpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWFyY2hUZXh0ICE9PSBwcmV2UHJvcHMuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnByb3BzLnNlYXJjaFRleHQgfHwgXCJcIiB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIHN0eWxlID0ge30sXG4gICAgICBwbGFjZWhvbGRlciA9IFwiU2VhcmNoXCIsXG4gICAgICB0YWJsZUlkID0gXCIwXCIsXG4gICAgICBzZWFyY2hUZXh0ID0gXCJTZWFyY2ggdGhpcyB0YWJsZVwiLFxuICAgIH0gPSB0aGlzLnByb3BzIGFzIGFueTtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwgaHRtbEZvcj17YHNlYXJjaC1iYXItJHt0YWJsZUlkfWB9IGNsYXNzTmFtZT1cInNlYXJjaC1sYWJlbFwiPlxuICAgICAgICA8c3BhbiBpZD17YHNlYXJjaC1iYXItJHt0YWJsZUlkfS1sYWJlbGB9IGNsYXNzTmFtZT1cInNyLW9ubHlcIj5cbiAgICAgICAgICB7c2VhcmNoVGV4dH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMuaW5wdXQgPSBuOyB9fVxuICAgICAgICAgIGlkPXtgc2VhcmNoLWJhci0ke3RhYmxlSWR9YH1cbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgc3R5bGU9e3N0eWxlIGFzIGFueX1cbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2BzZWFyY2gtYmFyLSR7dGFibGVJZH0tbGFiZWxgfVxuICAgICAgICAgIG9uS2V5VXA9eygpID0+IHRoaXMub25LZXl1cCgpfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlVmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgZm9ybS1jb250cm9sICR7Y2xhc3NOYW1lfWB9XG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAvPlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBzdHlsZToge30sXG4gICAgcGxhY2Vob2xkZXI6ICdTZWFyY2gnLFxuICAgIGRlbGF5OiAyNTAsXG4gICAgc2VhcmNoVGV4dDogJycsXG4gICAgdGFibGVJZDogJzAnLFxuICAgIHNyVGV4dDogJ1NlYXJjaCB0aGlzIHRhYmxlJ1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWFyY2hCYXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBPcGVyYXRpb24gZnJvbSBcIi4vc3JjL29wXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChCYXNlOiBhbnkpID0+XG4gIGNsYXNzIFN0YXRlbGVzc09wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvbi5jc3ZPcGVyYXRpb24oQmFzZSkge1xuICAgIHJlZ2lzdGVyRXhwb3NlZEFQSSA9ICh0YWJsZUV4cG9zZWRBUElFbWl0dGVyOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlciA9IHRhYmxlRXhwb3NlZEFQSUVtaXR0ZXI7XG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgZ2V0TWV0YUluZm8sIHNhdmUsIHRyYW5zZm9ybSB9IGZyb20gXCIuLi9jc3YvZXhwb3J0ZXJcIjtcblxuY29uc3QgY3N2RGVmYXVsdE9wdGlvbnMgPSB7XG4gIGZpbGVOYW1lOiBcInNwcmVhZHNoZWV0LmNzdlwiLFxuICBzZXBhcmF0b3I6IFwiLFwiLFxuICBpZ25vcmVIZWFkZXI6IGZhbHNlLFxuICBpZ25vcmVGb290ZXI6IHRydWUsXG4gIG5vQXV0b0JPTTogdHJ1ZSxcbiAgYmxvYlR5cGU6IFwidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04XCIsXG4gIGV4cG9ydEFsbDogdHJ1ZSxcbiAgb25seUV4cG9ydFNlbGVjdGlvbjogZmFsc2UsXG59O1xuXG5leHBvcnQgZGVmYXVsdCAoQmFzZTogYW55KSA9PlxuICBjbGFzcyBDU1ZPcGVyYXRpb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8dHlwZW9mIEJhc2U+IHtcbiAgICBfOiBhbnk7XG4gICAgdGFibGVFeHBvc2VkQVBJRW1pdHRlcjogYW55O1xuXG4gICAgaGFuZGxlRXhwb3J0Q1NWID0gKHNvdXJjZTogYW55KSA9PiB7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIGV4cG9ydENTViwga2V5RmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBtZXRhID0gZ2V0TWV0YUluZm8oY29sdW1ucyk7XG4gICAgICBjb25zdCBvcHRpb25zID1cbiAgICAgICAgZXhwb3J0Q1NWID09PSB0cnVlXG4gICAgICAgICAgPyBjc3ZEZWZhdWx0T3B0aW9uc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAuLi5jc3ZEZWZhdWx0T3B0aW9ucyxcbiAgICAgICAgICAgICAgLi4uZXhwb3J0Q1NWLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gZ2V0IGRhdGEgZm9yIGNzdiBleHBvcnRcbiAgICAgIGxldCBkYXRhOiBhbnk7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBkYXRhID0gc291cmNlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmV4cG9ydEFsbCkge1xuICAgICAgICBkYXRhID0gdGhpcy5wcm9wcy5kYXRhO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm9ubHlFeHBvcnRGaWx0ZXJlZCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiB7IHJlc3VsdDogYW55IH0gPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlci5lbWl0KFwiZ2V0LmZpbHRlcmVkLnJvd3NcIiwgcGF5bG9hZCk7XG4gICAgICAgIGRhdGEgPSBwYXlsb2FkLnJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlci5lbWl0KFwiZ2V0LnRhYmxlLmRhdGFcIiwgcGF5bG9hZCk7XG4gICAgICAgIGRhdGEgPSBwYXlsb2FkLnJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgLy8gZmlsdGVyIGRhdGEgYnkgcm93IHNlbGVjdGlvblxuICAgICAgaWYgKG9wdGlvbnMub25seUV4cG9ydFNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0geyByZXN1bHQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICB0aGlzLnRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIuZW1pdChcImdldC5zZWxlY3RlZC5yb3dzXCIsIHBheWxvYWQpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gcGF5bG9hZC5yZXN1bHQgPz8gW107XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4gc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dba2V5RmllbGRdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0cmFuc2Zvcm0oZGF0YSwgbWV0YSwgY29sdW1ucywgdGhpcy5fLCBvcHRpb25zKTtcbiAgICAgIHNhdmUoY29udGVudCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgVGFibGVUb29sa2l0UHJvcHMgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IFRvb2xraXRDb250ZXh0IGZyb20gXCIuL2NvbnRleHRcIjtcblxuY29uc3QgVG9vbGtpdHByb3ZpZGVyID0gKFxuICBwcm9wczogVGFibGVUb29sa2l0UHJvcHNcbik6IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGwgPT4gKFxuICA8VG9vbGtpdENvbnRleHQuUHJvdmlkZXIgey4uLnByb3BzfT5cbiAgICA8VG9vbGtpdENvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHRvb2tLaXRQcm9wcykgPT4gcHJvcHMuY2hpbGRyZW4odG9va0tpdFByb3BzKX1cbiAgICA8L1Rvb2xraXRDb250ZXh0LkNvbnN1bWVyPlxuICA8L1Rvb2xraXRDb250ZXh0LlByb3ZpZGVyPlxuKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IFRvb2xraXRwcm92aWRlcjtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2ODgpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJleHBvcnRDU1ZCdXR0b25EZWZhdWx0UHJvcHMiLCJjbGFzc05hbWUiLCJzdHlsZSIsInByb3BzIiwib25FeHBvcnQiLCJjaGlsZHJlbiIsInJlc3QiLCJ0eXBlIiwib25DbGljayIsIm9uQ2xlYXIiLCJ0ZXh0IiwiY29sdW1ucyIsIm9uQ29sdW1uVG9nZ2xlIiwidG9nZ2xlcyIsImJ0bkNsYXNzTmFtZSIsImNvbnRleHR1YWwiLCJtYXAiLCJjb2x1bW4iLCJ0b2dnbGUiLCJkYXRhRmllbGQiLCJrZXkiLCJiIiwiYSIsImF1dG9Cb20iLCJjb25zb2xlIiwid2FybiIsInRlc3QiLCJCbG9iIiwiYyIsImQiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJyZXNwb25zZVR5cGUiLCJvbmxvYWQiLCJnIiwicmVzcG9uc2UiLCJvbmVycm9yIiwiZXJyb3IiLCJzZW5kIiwic3RhdHVzIiwiZSIsImRpc3BhdGNoRXZlbnQiLCJNb3VzZUV2ZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFdmVudCIsImluaXRNb3VzZUV2ZW50Iiwid2luZG93IiwiZiIsImdsb2JhbCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInNhdmVBcyIsIkhUTUxBbmNob3JFbGVtZW50IiwicHJvdG90eXBlIiwiaCIsImkiLCJVUkwiLCJ3ZWJraXRVUkwiLCJqIiwiY3JlYXRlRWxlbWVudCIsIm5hbWUiLCJkb3dubG9hZCIsInJlbCIsImhyZWYiLCJvcmlnaW4iLCJsb2NhdGlvbiIsInRhcmdldCIsImNyZWF0ZU9iamVjdFVSTCIsInNldFRpbWVvdXQiLCJyZXZva2VPYmplY3RVUkwiLCJtc1NhdmVPck9wZW5CbG9iIiwidGl0bGUiLCJib2R5IiwiaW5uZXJUZXh0IiwiSFRNTEVsZW1lbnQiLCJzYWZhcmkiLCJGaWxlUmVhZGVyIiwiayIsIm9ubG9hZGVuZCIsInJlc3VsdCIsInJlcGxhY2UiLCJyZWFkQXNEYXRhVVJMIiwibCIsIm0iLCJFeHBvcnRDU1ZCdXR0b24iLCJnZXRNZXRhSW5mbyIsImZpZWxkIiwiY3N2VHlwZSIsIlN0cmluZyIsImZvcm1hdHRlciIsImNzdkZvcm1hdHRlciIsImZvcm1hdEV4dHJhRGF0YSIsImhlYWRlciIsImNzdlRleHQiLCJleHBvcnQiLCJjc3ZFeHBvcnQiLCJyb3ciLCJOdW1iZXIiLCJyb3dTcGFuIiwiY29sU3BhbiIsImZvb3RlciIsImZvb3RlckZvcm1hdHRlciIsImZpbHRlciIsIl8iLCJ0cmFuc2Zvcm0iLCJkYXRhIiwibWV0YSIsInNlcGFyYXRvciIsImlnbm9yZUhlYWRlciIsImlnbm9yZUZvb3RlciIsInZpc2libGVDb2x1bW5zIiwiY29udGVudCIsImpvaW4iLCJsZW5ndGgiLCJyb3dJbmRleCIsImNlbGxDb250ZW50IiwiZ2V0IiwiY29sdW1uRGF0YSIsInBsdWNrIiwic2F2ZSIsIm5vQXV0b0JPTSIsImZpbGVOYW1lIiwiYmxvYlR5cGUiLCJjc3ZPcGVyYXRpb24iLCJTZWFyY2hCYXIiLCJDbGVhclNlYXJjaEJ1dHRvbiIsIm9wdGlvbnMiLCJzZWFyY2hGb3JtYXR0ZWQiLCJhZnRlclNlYXJjaCIsInVuZGVmaW5lZCIsIm9uQ29sdW1uTWF0Y2giLCJpc1JlbW90ZVNlYXJjaCIsImhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSIsIlNlYXJjaENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiU2VhcmNoUHJvdmlkZXIiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInN1cGVyIiwiaW5pdGlhbERhdGEiLCJ0aGlzIiwic2VhcmNoVGV4dCIsInNlYXJjaCIsInRyaWdnZXJMaXN0ZW5lciIsInN0YXRlIiwiZ2V0U2VhcmNoZWQiLCJza2lwSW5pdCIsImRhdGFDaGFuZ2VMaXN0ZW5lciIsImVtaXQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJzZXRTdGF0ZSIsImlzRXF1YWwiLCJ0b0xvd2VyQ2FzZSIsInJpZHgiLCJjaWR4Iiwic2VhcmNoYWJsZSIsInRhcmdldFZhbHVlIiwiZmlsdGVyVmFsdWUiLCJ2YWx1ZSIsInRvU3RyaW5nIiwiaW5kZXhPZiIsInJlbmRlciIsIlByb3ZpZGVyIiwiQ29uc3VtZXIiLCJUb2dnbGVMaXN0IiwiVG9vbGtpdENvbnRleHQiLCJzZWFyY2hQcm9wcyIsIm9uU2VhcmNoIiwidmFsIiwiY3N2UHJvcHMiLCJjb2x1bW5Ub2dnbGVQcm9wcyIsImJhc2VQcm9wcyIsImtleUZpZWxkIiwiYm9vdHN0cmFwNCIsIlRvb2xraXRQcm92aWRlciIsInN0YXRpYyIsImV4cG9ydENTViIsImluaXRpYWxTdGF0ZSIsImNvbHVtblRvZ2dsZSIsImRlZmF1bHRTZWFyY2giLCJiaW5kIiwic2V0RGVwZW5kZW5jeU1vZHVsZXMiLCJyZWR1Y2UiLCJvYmoiLCJoaWRkZW4iLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJjdXJyQ29sdW1uVG9nZ2xlIiwicHJvcHNDb2x1bW5Ub2dnbGUiLCJyZWdpc3RlckV4cG9zZWRBUEkiLCJzZWFyY2hDb250ZXh0IiwiaGFuZGxlRXhwb3J0Q1NWIiwiZGVmYXVsdCIsImhhbmRsZURlYm91bmNlIiwiZnVuYyIsIndhaXQiLCJpbW1lZGlhdGUiLCJ0aW1lb3V0IiwiYXJncyIsImNhbGxOb3ciLCJjbGVhclRpbWVvdXQiLCJhcHBseSIsImlucHV0Iiwib25DaGFuZ2VWYWx1ZSIsIm9uS2V5dXAiLCJkZWxheSIsImRlYm91bmNlQ2FsbGJhY2siLCJwbGFjZWhvbGRlciIsInRhYmxlSWQiLCJodG1sRm9yIiwiaWQiLCJyZWYiLCJuIiwib25LZXlVcCIsIm9uQ2hhbmdlIiwic3JUZXh0IiwiQmFzZSIsInRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIiLCJjc3ZEZWZhdWx0T3B0aW9ucyIsImV4cG9ydEFsbCIsIm9ubHlFeHBvcnRTZWxlY3Rpb24iLCJzb3VyY2UiLCJvbmx5RXhwb3J0RmlsdGVyZWQiLCJwYXlsb2FkIiwic2VsZWN0aW9ucyIsImluY2x1ZGVzIiwidG9va0tpdFByb3BzIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImNhbGwiLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==