react-bootstrap-table-ng 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.
- package/README.md +57 -9
- package/dist/react-bootstrap-table-ng.js +2 -2
- package/dist/react-bootstrap-table-ng.min.js +2 -2
- package/lib/index.d.ts +8 -12
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/src/body.js +5 -3
- package/lib/src/body.js.map +1 -1
- package/lib/src/bootstrap-table.js +5 -5
- package/lib/src/bootstrap-table.js.map +1 -1
- package/lib/src/caption.js +0 -7
- package/lib/src/caption.js.map +1 -1
- package/lib/src/contexts/data-context.js +5 -4
- package/lib/src/contexts/data-context.js.map +1 -1
- package/lib/src/contexts/row-expand-context.js +15 -12
- package/lib/src/contexts/row-expand-context.js.map +1 -1
- package/lib/src/contexts/selection-context.js +9 -7
- package/lib/src/contexts/selection-context.js.map +1 -1
- package/lib/src/contexts/sort-context.js +13 -13
- package/lib/src/contexts/sort-context.js.map +1 -1
- package/lib/src/props-resolver/remote-resolver.js +46 -25
- package/lib/src/props-resolver/remote-resolver.js.map +1 -1
- package/lib/src/row/aggregate-row.js +6 -6
- package/lib/src/row/aggregate-row.js.map +1 -1
- package/lib/src/row/event-delegater.js +4 -4
- package/lib/src/row/event-delegater.js.map +1 -1
- package/lib/src/row/simple-row.js +9 -6
- package/lib/src/row/simple-row.js.map +1 -1
- package/lib/src/row-expand/expand-cell.js +9 -6
- package/lib/src/row-expand/expand-cell.js.map +1 -1
- package/lib/src/row-expand/expand-row.js +6 -16
- package/lib/src/row-expand/expand-row.js.map +1 -1
- package/lib/src/types.d.ts +2 -2
- package/package.json +3 -4
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see react-bootstrap-table-ng.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTableNg=t(require("react"),require("react-dom")):e.ReactBootstrapTableNg=t(e.React,e.ReactDOM)}(self,(e,t)=>(()=>{var n={105(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6310);class s extends i.default.Component{constructor(e){super(e),this.nodeRef=i.default.createRef()}render(){const{children:e,expanded:t=!1,onClosed:n,className:r="",...s}=this.props;return i.default.createElement("tr",null,i.default.createElement("td",{className:(0,o.default)("reset-expansion-style",r),...s},i.default.createElement(a.CSSTransition,{appear:!0,in:t,timeout:400,classNames:"row-expand-slide",onExited:n,nodeRef:this.nodeRef},i.default.createElement("div",{ref:this.nodeRef},i.default.createElement("div",{className:"row-expansion-style"},e)))))}}t.default=s},184(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6561),s=n(3761);t.default=({order:e})=>{const t=(0,o.default)("react-bootstrap-table-sort-order",{dropup:e===a.SORT_ASC});return i.default.createElement(s.BootstrapContext.Consumer,null,({bootstrap4:n})=>n?i.default.createElement("span",{className:`caret-4-${e}`,"data-testid":"sort-caret"}):i.default.createElement("span",{className:t,"data-testid":"sort-caret"},i.default.createElement("span",{className:"caret"})))}},285(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442));t.default=({content:e=null,colSpan:t=1})=>o.default.createElement("tr",null,o.default.createElement("td",{"data-toggle":"collapse",colSpan:t,className:"react-bs-table-no-data"},e))},286(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=r(n(3955));t.default=e=>{const{index:t,column:n,currFilters:r,onExternalFilter:a=()=>{},onFilter:s=()=>{}}=e,{filter:l}=n;let u;const c={},d={};if(c.style=d,n.headerAlign&&(d.textAlign=i.default.isFunction(n.headerAlign)?n.headerAlign(n,t):n.headerAlign),n.filterRenderer){const e=a(n,l?.props.type||"");u=n.filterRenderer(e,n)}else l&&(u=o.default.createElement(l.Filter,{...l.props,filterState:r[n.dataField],onFilter:s,column:n}));return o.default.createElement("th",c,u)}},338(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return class extends e{shouldUpdateByCellEditing(e){return!(!this.props.clickToEdit&&!this.props.dbclickToEdit)&&(e.editingRowIdx===e.rowIndex||this.props.editingRowIdx===e.rowIndex&&null===e.editingRowIdx||this.props.editingRowIdx===e.rowIndex)}shouldUpdatedBySelfProps(e){return this.props.className!==e.className||!o.default.isEqual(this.props.style,e.style)||!o.default.isEqual(this.props.attrs,e.attrs)}shouldUpdateByColumnsForSimpleCheck(e){if(this.props.columns.length!==e.columns.length)return!0;for(let t=0;t<this.props.columns.length;t+=1)if(!o.default.isEqual(this.props.columns[t],e.columns[t]))return!0;return!1}shouldUpdatedByNormalProps(e){return this.props.rowIndex!==e.rowIndex||this.props.editable!==e.editable||!o.default.isEqual(this.props.row,e.row)||this.props.columns.length!==e.columns.length}shouldUpdateChild(e){return this.shouldUpdateByCellEditing(e)||this.shouldUpdatedByNormalProps(e)}shouldRowContentUpdate(e){return this.shouldUpdateChild(e)||this.shouldUpdateByColumnsForSimpleCheck(e)}}};const o=r(n(3955))},355(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getRowByRowId=t.matchRow=void 0;const o=r(n(3955));t.matchRow=(e,t)=>n=>o.default.get(n,e)===t;t.getRowByRowId=(e,n,r)=>e.find((0,t.matchRow)(n,r))},629(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(885)),d=s(n(1439)),f=s(n(3955)),p=n(7351),h=s(n(3196)),m=s(n(338));class v extends((0,m.default)((0,p.RowEventDelegater)(l.Component))){constructor(e){super(e),this.clickNum=0,this.shouldUpdateRowContent=!1,this.createClickEventHandler=this.createClickEventHandler.bind(this)}shouldComponentUpdate(e){return this.props.selected!==e.selected||this.props.expanded!==e.expanded||this.props.expandable!==e.expandable||this.props.selectable!==e.selectable||this.props.selectRow.hideSelectColumn!==e.selectRow.hideSelectColumn||this.shouldUpdatedBySelfProps(e)?(this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),!0):(this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),this.shouldUpdateRowContent)}isRenderFunctionColumnInLeft(e=u.INDICATOR_POSITION_LEFT){return e===u.INDICATOR_POSITION_LEFT}render(){const{row:e,columns:t,keyField:n,rowIndex:r,style:o,className:i,attrs:a,selectRow:s,expandRow:u,expanded:p,expandable:m,selected:v,selectable:g,visibleColumnSize:E,tabIndexCell:_,...y}=this.props,b=f.default.get(e,n),{hideSelectColumn:x,selectColumnPosition:C,clickToSelect:O}=s,{showExpandColumn:w,expandColumnPosition:S}=u??{},R=this.delegate({...a});(O||u&&u.renderer)&&(R.onClick=this.createClickEventHandler(R.onClick));let P=r*E+1;const j=[l.default.createElement(h.default,{key:"row",row:e,columns:t,keyField:n,rowIndex:r,shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:_?P:-1,...y})];if(!x){const e=l.default.createElement(d.default,{...s,key:"selection-cell",rowKey:b,rowIndex:r,selected:v,disabled:!g,tabIndex:_?P+=1:-1});this.isRenderFunctionColumnInLeft(C)?j.unshift(e):j.push(e)}if(w){const e=l.default.createElement(c.default,{...u,key:"expand-cell",rowKey:b,rowIndex:r,expanded:p,expandable:m,tabIndex:_?P+=1:-1});this.isRenderFunctionColumnInLeft(S)?j.unshift(e):j.push(e)}return l.default.createElement("tr",{style:o,className:i,...R},j)}}t.default=v},885(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442));class l extends s.Component{constructor(){super(...arguments),this.handleClick=e=>{const{rowKey:t,expanded:n,onRowExpand:r,rowIndex:o}=this.props;e.stopPropagation(),r(t,!n,o,e)}}shouldComponentUpdate(e){return this.props.rowIndex!==e.rowIndex||this.props.expanded!==e.expanded||this.props.rowKey!==e.rowKey||this.props.tabIndex!==e.tabIndex}render(){const{expanded:e,expandable:t,expandColumnRenderer:n,tabIndex:r,rowKey:o}=this.props,i={};return void 0!==r&&-1!==r&&(i.tabIndex=r),s.default.createElement("td",{className:"expand-cell",onClick:this.handleClick,"data-testid":"expand-cell",...i},n?n({expandable:t,expanded:e,rowKey:o}):t?e?"(-)":"(+)":"")}}t.default=l},1031(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6561),s=r(n(6032)),l=r(n(1632)),u=r(n(9435)),c=r(n(7701)),d=r(n(5191)),f=r(n(4652)),p=r(n(3955));class h extends((0,f.default)(i.default.Component)){constructor(e){super(e),this.getData=()=>this.visibleRows(),this.validateProps()}componentDidUpdate(e){e.onDataSizeChange&&!e.pagination&&e.data.length!==this.props.data.length&&e.onDataSizeChange({dataSize:this.props.data.length})}render(){const{loading:e,overlay:t}=this.props;if(t){const n=t(e);return i.default.createElement(n,null,this.renderTable())}return this.renderTable()}renderTable(){const{columns:e,keyField:t,tabIndexCell:n,id:r,classes:f,bootstrap4:h=!1,striped:m=!1,hover:v=!1,bordered:g=!0,condensed:E=!1,noDataIndication:_=null,caption:y,rowStyle:b,rowClasses:x,wrapperClasses:C,rowEvents:O,selectRow:w={mode:a.ROW_SELECT_DISABLED,selected:[],hideSelectColumn:!0},expandRow:S={renderer:void 0,expanded:[],nonExpandable:[]},cellEdit:R={mode:null,nonEditableRows:[]},filterPosition:P=a.FILTERS_POSITION_INLINE}=this.props,j=(0,o.default)("react-bootstrap-table",C),N=(0,o.default)("table",{"table-striped":m,"table-hover":v,"table-bordered":g,[h?"table-sm":"table-condensed"]:E},f),D=e.some(e=>e.filter||e.filterRenderer),T=p.default.filter(e,e=>p.default.has(e,"footer")).length>0,I=y&&i.default.createElement(l.default,{bootstrap4:h},y);return i.default.createElement("div",{className:j},i.default.createElement("table",{id:r,className:N},I,i.default.createElement(d.default,{columns:e,className:this.props.headerClasses,wrapperClasses:this.props.headerWrapperClasses,sortField:this.props.sortField,sortOrder:this.props.sortOrder,onSort:this.props.onSort,globalSortCaret:this.props.sort&&this.props.sort.sortCaret,onFilter:this.props.onFilter,currFilters:this.props.currFilters,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S,filterPosition:P}),D&&P!==a.FILTERS_POSITION_INLINE&&i.default.createElement(u.default,{columns:e,className:this.props.filtersClasses,onSort:this.props.onSort,onFilter:this.props.onFilter,currFilters:this.props.currFilters,filterPosition:this.props.filterPosition,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S}),i.default.createElement(s.default,{className:this.props.bodyClasses,data:this.getData(),keyField:t,tabIndexCell:n,columns:e,isEmpty:this.isEmpty(),visibleColumnSize:this.visibleColumnSize(),noDataIndication:_,cellEdit:R,selectRow:w,expandRow:S,rowStyle:b,rowClasses:x,rowEvents:O}),T&&i.default.createElement(c.default,{data:this.getData(),columns:e,selectRow:w,expandRow:S,className:this.props.footerClasses})))}}t.default=h},1400(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561);t.default=e=>{const{renderContent:t,selectRow:n,expandRow:r,cellEl:a,...s}=e,l=(e=i.INDICATOR_POSITION_LEFT)=>e===i.INDICATOR_POSITION_LEFT,u=t()||[];return n&&!0!==n.hideSelectColumn&&(l(n.selectColumnPosition)?u.unshift(o.default.createElement(a,{key:"selection"})):u.push(o.default.createElement(a,{key:"selection"}))),r&&r.showExpandColumn&&(l(r.expandColumnPosition)?u.unshift(o.default.createElement(a,{key:"expansion"})):u.push(o.default.createElement(a,{key:"expansion"}))),o.default.createElement("tr",{...s},u)}},1439(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(3955)),d=n(3761);class f extends l.Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}shouldComponentUpdate(e){return this.props.rowIndex!==e.rowIndex||this.props.selected!==e.selected||this.props.disabled!==e.disabled||this.props.rowKey!==e.rowKey||this.props.tabIndex!==e.tabIndex||this.props.selectColumnStyle!==e.selectColumnStyle}handleClick(e){const{mode:t,rowKey:n,selected:r,onRowSelect:o,disabled:i,rowIndex:a=-1}=this.props;if(e.stopPropagation(),i)return;o(n,t===u.ROW_SELECT_SINGLE||!r,a,e)}render(){const{rowKey:e,mode:t,selected:n,disabled:r,tabIndex:o=-1,rowIndex:i,selectionRenderer:a,selectColumnStyle:s}=this.props,u={};return-1!==o&&(u.tabIndex=o),u.style=c.default.isFunction(s)?s({checked:n,disabled:r,rowindex:i,rowkey:e}):s,l.default.createElement(d.BootstrapContext.Consumer,null,({bootstrap4:o})=>l.default.createElement("td",{className:"selection-cell",onClick:this.handleClick,"data-testid":"selection-cell",...u},a?a({mode:t,checked:n,disabled:r??!1,rowindex:i,rowkey:e}):l.default.createElement("input",{type:t,checked:n,disabled:r??!1,className:o?"selection-input-4":"",onChange:()=>{}})))}}t.default=f},1590(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getExpandedRows=t.expandableKeys=t.isAnyExpands=void 0;const o=r(n(3955)),i=n(355);t.isAnyExpands=(e,t,n=[])=>{for(let r=0;r<e.length;r+=1){const i=o.default.get(e[r],t);if(void 0!==n.find(e=>e===i))return!0}return!1};t.expandableKeys=(e,t,n=[])=>0===n.length?e.map(e=>o.default.get(e,t)):e.filter(e=>!o.default.contains(n,o.default.get(e,t))).map(e=>o.default.get(e,t));t.getExpandedRows=(e,t,n)=>n.map(n=>(0,i.getRowByRowId)(e,t,n))},1630(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(6645)),c=s(n(3955)),d=l.default.createContext({expanded:[],isClosing:[],onClosed:()=>{},isAnyExpands:!1,onRowExpand:()=>{},onAllRowExpand:()=>{}});class f extends l.Component{constructor(){super(...arguments),this.state={expanded:this.props.expandRow.expanded||[],isClosing:this.props.expandRow.isClosing||[]},this.onClosed=e=>{this.setState({isClosing:this.state.isClosing.filter(t=>t!==e)})},this.handleRowExpand=(e,t,n,r)=>{const{data:o,keyField:i,expandRow:{onExpand:a,onlyOneExpanding:s,nonExpandable:l}}=this.props;if(l&&c.default.contains(l,e))return;let d=[...this.state.expanded],f=[...this.state.isClosing];if(t?s?(f=f.concat(d),d=[e]):d.push(e):(f.push(e),d=d.filter(t=>t!==e)),a){a(u.default.getRowByRowId(o,i,e),t,n,r)}this.setState(()=>({expanded:d,isClosing:f}))},this.handleAllRowExpand=(e,t)=>{const{data:n,keyField:r,expandRow:{onExpandAll:o,nonExpandable:i}}=this.props,{expanded:a}=this.state;let s;s=t?a.concat(u.default.expandableKeys(n,r,i)):a.filter(e=>void 0===n.find(t=>c.default.get(t,r)===e)),o&&o(t,u.default.getExpandedRows(n,r,s),e),this.setState(()=>({expanded:s}))}}static getDerivedStateFromProps(e,t){const{expandRow:n}=e;if(n){const{nonExpandable:e=[]}=n;let r=[...n.expanded||t.expanded];r=r.filter(t=>!c.default.contains(e,t));const o=t.expanded.reduce((e,t)=>(c.default.contains(r,t)||e.push(t),e),[]);return{expanded:r,isClosing:o}}return t}render(){const{data:e,keyField:t}=this.props;return l.default.createElement(d.Provider,{value:{...this.props.expandRow,nonExpandable:this.props.expandRow.nonExpandable,expanded:this.state.expanded,isClosing:this.state.isClosing,onClosed:this.onClosed,isAnyExpands:u.default.isAnyExpands(e,t,this.state.expanded),onRowExpand:this.handleRowExpand,onAllRowExpand:this.handleAllRowExpand}},this.props.children)}}t.default=()=>({Provider:f,Consumer:d.Consumer})},1632(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442));t.default=e=>{if(!e.children)return null;return e.bootstrap4?o.default.createElement("caption",{style:{captionSide:"top"}},e.children):o.default.createElement("caption",null,e.children)}},1859(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CellEventDelegater=void 0;const o=r(n(3955)),i=["onClick","onDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","onAuxClick"];t.CellEventDelegater=e=>class extends e{constructor(...e){super(...e),this.createDefaultEventHandler=this.createDefaultEventHandler.bind(this)}createDefaultEventHandler(e){return t=>{const{column:n,columnIndex:r,index:o}=this.props;e(t,n,void 0!==r?r:o)}}delegate(e={}){const t={...e};return Object.keys(e).forEach(n=>{o.default.includes(i,n)&&(t[n]=this.createDefaultEventHandler(e[n]))}),t}}},1965(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(3761);t.default=()=>o.default.createElement(i.BootstrapContext.Consumer,null,({bootstrap4:e})=>e?o.default.createElement("span",{className:"order-4"}):o.default.createElement("span",{className:"order"},o.default.createElement("span",{className:"dropdown"},o.default.createElement("span",{className:"caret"})),o.default.createElement("span",{className:"dropup"},o.default.createElement("span",{className:"caret"}))))},2190(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeConvert=void 0;const r=n(6561);t.typeConvert=(e,t)=>e===r.TYPE_STRING?String(t):e===r.TYPE_NUMBER?Number(t):e===r.TYPE_BOOLEAN?"boolean"==typeof t?t:"true"===t:e===r.TYPE_DATE?new Date(t):t},3196(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(8232)),c=s(n(3955));class d extends l.Component{shouldComponentUpdate(e){return void 0===e.shouldUpdate||e.shouldUpdate}render(){const{row:e,keyField:t,columns:n,rowIndex:r,isEditable:o,editingRowIdx:i,editingColIdx:a,atstart:s,clickToEdit:d,dbclickToEdit:f,EditingCellComponent:p,tabIndexStart:h}=this.props;let m=h;return n?.map((n,v)=>{const{dataField:g}=n,E=c.default.get(e,g);if(r===i&&v===a&&p)return l.default.createElement(p,{key:`${E}-${v}-editing`,row:e,rowIndex:r,column:n,columnIndex:v});let _,y={},b={};if("function"==typeof n.attrs?b={...n.attrs(E,e,r,v)}:"object"==typeof n.attrs&&null!==n.attrs&&(b={...n.attrs}),n.events){const t={...n.events};Object.keys(t).forEach(n=>{const o=t[n];t[n]=(...t)=>o(...t,e,r)}),b={...b,...t}}const x=c.default.isFunction(n.classes)?n.classes(E,e,r,v):n.classes;n.style&&(y=c.default.isFunction(n.style)?n.style(E,e,r,v):n.style,y={...y}),n.title&&(_=c.default.isFunction(n.title)?n.title(E,e,r,v):E,b.title=_),n.align&&(y.textAlign=c.default.isFunction(n.align)?n.align(E,e,r,v):n.align),x&&(b.className=x),c.default.isEmptyObject(y)||(b.style=y);let C=!c.default.isDefined(n.editable)||n.editable;return n.dataField!==t&&o||(C=!1),c.default.isFunction(n.editable)&&(C=n.editable(E,e,r,v)),"number"==typeof h&&-1!==h&&(b.tabIndex=m,m+=1),l.default.createElement(u.default,{key:`${E}-${v}`,row:e,editable:C.toString(),rowindex:r??0,columnindex:v,column:n,atstart:s,clicktoedit:d?d.toString():"false",dbclicktoedit:f?f.toString():"false",...b})})}}t.default=d},3285(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i={columns:[],toggles:void 0},a=o.default.createContext(i),s=({columns:e,toggles:t,children:n})=>{let r;return r=t?e.filter(e=>t[e.dataField]):e.filter(e=>!e.hidden),o.default.createElement(a.Provider,{value:{columns:r}},n)};t.default=()=>({Provider:s,Consumer:a.Consumer})},3502(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(7351),c=s(n(3196)),d=s(n(338));class f extends((0,d.default)((0,u.RowEventDelegater)(l.Component))){constructor(){super(...arguments),this.shouldUpdateRowContent=!1}shouldComponentUpdate(e){return this.shouldUpdateRowContent=!1,this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),!!this.shouldUpdateRowContent||this.shouldUpdatedBySelfProps(e)}render(){const{editable:e=!0,className:t,style:n={},attrs:r={},visibleColumnSize:o,tabIndexCell:i,...a}=this.props,s=this.delegate(r),u=this.props.rowIndex*o+1;return l.default.createElement("tr",{style:n,className:t,...s},l.default.createElement(c.default,{shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:i?u:-1,...a}))}}t.default=f},3519(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(3955)),c=l.default.createContext({data:[],getData:()=>[]});class d extends l.Component{constructor(e){super(e),this.getData=(e,t,n,r)=>r?r.data:n?n.data:t?t.data:e&&e.data.length<this.props.data.length&&!u.default.isEmpty(Object.keys(e.currFilters))?e.data:this.props.data,this.state={data:e.data}}render(){return l.default.createElement(c.Provider,{value:{data:this.state.data,getData:this.getData}},this.props.children)}}t.default=()=>({Provider:d,Consumer:c.Consumer})},3689(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=t=>i.default.createElement(l.Consumer,null,n=>((t,n)=>{const r=t.value,a=s.default.contains(n.selected,r),l=!n.nonSelectable||!s.default.contains(n.nonSelectable,r),u=s.default.contains(n.nonSelectable,r);let{style:c,className:d}=t;if(a){const e=s.default.isFunction(n.style)?n.style(t.row,t.rowIndex):n.style,r=s.default.isFunction(n.classes)?n.classes(t.row,t.rowIndex):n.classes;c={...c,...e},d=(0,o.default)(d,r)||void 0,n.bgColor&&(c=c||{},c.backgroundColor=s.default.isFunction(n.bgColor)?n.bgColor(t.row,t.rowIndex):n.bgColor)}if(u){const e=s.default.isFunction(n.nonSelectableStyle)?n.nonSelectableStyle(t.row,t.rowIndex):n.nonSelectableStyle,r=s.default.isFunction(n.nonSelectableClasses)?n.nonSelectableClasses(t.row,t.rowIndex):n.nonSelectableClasses;c={...c,...e},d=(0,o.default)(d,r)||void 0}return i.default.createElement(e,{...t,style:c,className:d,selectRow:n,selected:a,selectable:l})})(t,n));return t.displayName="WithSelectionRowConsumer",t};const o=r(n(6942)),i=r(n(5442)),a=n(8145),s=r(n(3955)),l=(0,a.createSelectionContext)()},3742(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.nextOrder=t.sort=void 0;const o=n(6561),i=r(n(3955));function a(e,t){let n;return n="string"==typeof t?t.localeCompare(e):e>t?-1:e<t?1:0,n}t.sort=(e,t,{dataField:n,sortFunc:r,sortValue:s})=>{const l=[...e];return l.sort((e,l)=>{let u,c=i.default.get(e,n),d=i.default.get(l,n);return s?(c=s(c,e),d=s(d,l)):(c=i.default.isDefined(c)?c:"",d=i.default.isDefined(d)?d:""),u=r?r(c,d,t,n,e,l):t===o.SORT_DESC?a(c,d):a(d,c),u}),l};t.nextOrder=(e,{sortOrder:t,sortColumn:n},r=o.SORT_DESC)=>n&&e.dataField===n.dataField?t===o.SORT_DESC?o.SORT_ASC:o.SORT_DESC:r},3761(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.BootstrapContext=void 0;const o=r(n(5442));t.BootstrapContext=o.default.createContext({bootstrap4:!0})},3955(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(4523));function i(e){return[e].join(".").replace(/\[/g,".").replace(/\]/g,"").split(".")}t.default=Object.assign(o.default,{get:function(e,t){const n=e[t];if(null!=n)return n;const r=i(t);let o;try{o=r.reduce((e,t)=>e[t],e)}catch(e){}return o},set:function(e,t,n,r=!1){const o=i(t);let a=0;o.reduce((e,t)=>{if(a+=1,void 0===e[t]){if(!r)throw new Error(`${e}.${t} is undefined`);return e[t]={},e[t]}return a===o.length?(e[t]=n,n):e[t]},e)},isDefined:function(e){return null!=e},isEmptyObject:function(e){if(!o.default.isObject(e))return!1;const t=Object.prototype.hasOwnProperty,n=Object.keys(e);for(let r=0;r<n.length;r+=1)if(t.call(e,n[r]))return!1;return!0},sleep:function(e,t){return setTimeout(()=>e(),t)},debounce:function(e,t,n){let r;return()=>{const o=n&&!r;clearTimeout(r),r=setTimeout(()=>{r=null,n||e.apply(this,arguments)},t||0),o&&e.apply(this,arguments)}},contains:function(e,t){return o.default.includes?o.default.includes(e,t):e.indexOf(t)>-1}})},3997(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442));class l extends s.Component{constructor(e){super(e),this.handleCheckBoxClick=this.handleCheckBoxClick.bind(this)}handleCheckBoxClick(e){const{isAnyExpands:t,onAllRowExpand:n}=this.props;n(e,!t)}render(){const{isAnyExpands:e,expandHeaderColumnRenderer:t}=this.props,n={onClick:this.handleCheckBoxClick};return s.default.createElement("th",{className:"expand-cell-header","data-row-selection":!0,...n},t?t({isAnyExpands:e??!1}):e?"(-)":"(+)")}}t.default=l},4130(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getSelectedRows=t.unSelectableKeys=t.selectableKeys=t.getSelectionSummary=void 0;const o=r(n(3955)),i=n(355);t.getSelectionSummary=(e=[],t,n=[])=>{let r=e.length>0,i=!0;const a=e.map(e=>o.default.get(e,t));for(let e=0;e<a.length;e+=1){const t=a[e];void 0===n.find(e=>e===t)?r=!1:i=!1}return{allRowsSelected:r,allRowsNotSelected:i}};t.selectableKeys=(e=[],t,n=[])=>0===n.length?e.map(e=>o.default.get(e,t)):e.filter(e=>!o.default.contains(n,o.default.get(e,t))).map(e=>o.default.get(e,t));t.unSelectableKeys=(e,t=[])=>0===t?.length?[]:e.filter(e=>o.default.contains(t,e));t.getSelectedRows=(e=[],t,n)=>n.map(n=>(0,i.getRowByRowId)(e,t,n)).filter(e=>!!e)},4523(e,t,n){"use strict";n.r(t),n.d(t,{VERSION:()=>o,after:()=>Mt,all:()=>en,allKeys:()=>ve,any:()=>tn,assign:()=>Me,before:()=>Ft,bind:()=>xt,bindAll:()=>wt,chain:()=>Et,chunk:()=>Ln,clone:()=>Le,collect:()=>Xt,compact:()=>Rn,compose:()=>It,constant:()=>Q,contains:()=>nn,countBy:()=>gn,create:()=>Ae,debounce:()=>Nt,default:()=>Wn,defaults:()=>Fe,defer:()=>Pt,delay:()=>Rt,detect:()=>Vt,difference:()=>jn,drop:()=>wn,each:()=>$t,escape:()=>at,every:()=>en,extend:()=>Ie,extendOwn:()=>Me,filter:()=>Qt,find:()=>Vt,findIndex:()=>Bt,findKey:()=>At,findLastIndex:()=>Ut,findWhere:()=>qt,first:()=>On,flatten:()=>Pn,foldl:()=>Yt,foldr:()=>Jt,forEach:()=>$t,functions:()=>De,get:()=>We,groupBy:()=>mn,has:()=>ze,head:()=>On,identity:()=>Ve,include:()=>nn,includes:()=>nn,indexBy:()=>vn,indexOf:()=>Wt,initial:()=>Cn,inject:()=>Yt,intersection:()=>In,invert:()=>Ne,invoke:()=>rn,isArguments:()=>G,isArray:()=>q,isArrayBuffer:()=>A,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>le,isEqual:()=>me,isError:()=>F,isFinite:()=>Y,isFunction:()=>U,isMap:()=>Oe,isMatch:()=>ue,isNaN:()=>J,isNull:()=>S,isNumber:()=>T,isObject:()=>w,isRegExp:()=>M,isSet:()=>Se,isString:()=>D,isSymbol:()=>k,isTypedArray:()=>oe,isUndefined:()=>R,isWeakMap:()=>we,isWeakSet:()=>Re,iteratee:()=>Ye,keys:()=>se,last:()=>Sn,lastIndexOf:()=>zt,map:()=>Xt,mapObject:()=>Qe,matcher:()=>qe,matches:()=>qe,max:()=>sn,memoize:()=>St,methods:()=>De,min:()=>ln,mixin:()=>Un,negate:()=>Tt,noop:()=>Ze,now:()=>rt,object:()=>kn,omit:()=>xn,once:()=>kt,pairs:()=>je,partial:()=>bt,partition:()=>En,pick:()=>bn,pluck:()=>on,property:()=>$e,propertyOf:()=>et,random:()=>nt,range:()=>An,reduce:()=>Yt,reduceRight:()=>Jt,reject:()=>Zt,rest:()=>wn,restArguments:()=>O,result:()=>mt,sample:()=>dn,select:()=>Qt,shuffle:()=>fn,size:()=>_n,some:()=>tn,sortBy:()=>pn,sortedIndex:()=>Ht,tail:()=>wn,take:()=>On,tap:()=>Be,template:()=>ht,templateSettings:()=>lt,throttle:()=>jt,times:()=>tt,toArray:()=>cn,toPath:()=>Ue,transpose:()=>Mn,unescape:()=>st,union:()=>Tn,uniq:()=>Dn,unique:()=>Dn,uniqueId:()=>gt,unzip:()=>Mn,values:()=>Pe,where:()=>an,without:()=>Nn,wrap:()=>Dt,zip:()=>Fn});var r={};n.r(r),n.d(r,{VERSION:()=>o,after:()=>Mt,all:()=>en,allKeys:()=>ve,any:()=>tn,assign:()=>Me,before:()=>Ft,bind:()=>xt,bindAll:()=>wt,chain:()=>Et,chunk:()=>Ln,clone:()=>Le,collect:()=>Xt,compact:()=>Rn,compose:()=>It,constant:()=>Q,contains:()=>nn,countBy:()=>gn,create:()=>Ae,debounce:()=>Nt,default:()=>Hn,defaults:()=>Fe,defer:()=>Pt,delay:()=>Rt,detect:()=>Vt,difference:()=>jn,drop:()=>wn,each:()=>$t,escape:()=>at,every:()=>en,extend:()=>Ie,extendOwn:()=>Me,filter:()=>Qt,find:()=>Vt,findIndex:()=>Bt,findKey:()=>At,findLastIndex:()=>Ut,findWhere:()=>qt,first:()=>On,flatten:()=>Pn,foldl:()=>Yt,foldr:()=>Jt,forEach:()=>$t,functions:()=>De,get:()=>We,groupBy:()=>mn,has:()=>ze,head:()=>On,identity:()=>Ve,include:()=>nn,includes:()=>nn,indexBy:()=>vn,indexOf:()=>Wt,initial:()=>Cn,inject:()=>Yt,intersection:()=>In,invert:()=>Ne,invoke:()=>rn,isArguments:()=>G,isArray:()=>q,isArrayBuffer:()=>A,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>le,isEqual:()=>me,isError:()=>F,isFinite:()=>Y,isFunction:()=>U,isMap:()=>Oe,isMatch:()=>ue,isNaN:()=>J,isNull:()=>S,isNumber:()=>T,isObject:()=>w,isRegExp:()=>M,isSet:()=>Se,isString:()=>D,isSymbol:()=>k,isTypedArray:()=>oe,isUndefined:()=>R,isWeakMap:()=>we,isWeakSet:()=>Re,iteratee:()=>Ye,keys:()=>se,last:()=>Sn,lastIndexOf:()=>zt,map:()=>Xt,mapObject:()=>Qe,matcher:()=>qe,matches:()=>qe,max:()=>sn,memoize:()=>St,methods:()=>De,min:()=>ln,mixin:()=>Un,negate:()=>Tt,noop:()=>Ze,now:()=>rt,object:()=>kn,omit:()=>xn,once:()=>kt,pairs:()=>je,partial:()=>bt,partition:()=>En,pick:()=>bn,pluck:()=>on,property:()=>$e,propertyOf:()=>et,random:()=>nt,range:()=>An,reduce:()=>Yt,reduceRight:()=>Jt,reject:()=>Zt,rest:()=>wn,restArguments:()=>O,result:()=>mt,sample:()=>dn,select:()=>Qt,shuffle:()=>fn,size:()=>_n,some:()=>tn,sortBy:()=>pn,sortedIndex:()=>Ht,tail:()=>wn,take:()=>On,tap:()=>Be,template:()=>ht,templateSettings:()=>lt,throttle:()=>jt,times:()=>tt,toArray:()=>cn,toPath:()=>Ue,transpose:()=>Mn,unescape:()=>st,union:()=>Tn,uniq:()=>Dn,unique:()=>Dn,uniqueId:()=>gt,unzip:()=>Mn,values:()=>Pe,where:()=>an,without:()=>Nn,wrap:()=>Dt,zip:()=>Fn});var o="1.13.7",i="object"==typeof self&&self.self===self&&self||"object"==typeof n.g&&n.g.global===n.g&&n.g||Function("return this")()||{},a=Array.prototype,s=Object.prototype,l="undefined"!=typeof Symbol?Symbol.prototype:null,u=a.push,c=a.slice,d=s.toString,f=s.hasOwnProperty,p="undefined"!=typeof ArrayBuffer,h="undefined"!=typeof DataView,m=Array.isArray,v=Object.keys,g=Object.create,E=p&&ArrayBuffer.isView,_=isNaN,y=isFinite,b=!{toString:null}.propertyIsEnumerable("toString"),x=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],C=Math.pow(2,53)-1;function O(e,t){return t=null==t?e.length-1:+t,function(){for(var n=Math.max(arguments.length-t,0),r=Array(n),o=0;o<n;o++)r[o]=arguments[o+t];switch(t){case 0:return e.call(this,r);case 1:return e.call(this,arguments[0],r);case 2:return e.call(this,arguments[0],arguments[1],r)}var i=Array(t+1);for(o=0;o<t;o++)i[o]=arguments[o];return i[t]=r,e.apply(this,i)}}function w(e){var t=typeof e;return"function"===t||"object"===t&&!!e}function S(e){return null===e}function R(e){return void 0===e}function P(e){return!0===e||!1===e||"[object Boolean]"===d.call(e)}function j(e){return!(!e||1!==e.nodeType)}function N(e){var t="[object "+e+"]";return function(e){return d.call(e)===t}}const D=N("String"),T=N("Number"),I=N("Date"),M=N("RegExp"),F=N("Error"),k=N("Symbol"),A=N("ArrayBuffer");var L=N("Function"),B=i.document&&i.document.childNodes;"object"!=typeof Int8Array&&"function"!=typeof B&&(L=function(e){return"function"==typeof e||!1});const U=L,H=N("Object");var K=h&&(!/\[native code\]/.test(String(DataView))||H(new DataView(new ArrayBuffer(8)))),W="undefined"!=typeof Map&&H(new Map),z=N("DataView");const V=K?function(e){return null!=e&&U(e.getInt8)&&A(e.buffer)}:z,q=m||N("Array");function $(e,t){return null!=e&&f.call(e,t)}var X=N("Arguments");!function(){X(arguments)||(X=function(e){return $(e,"callee")})}();const G=X;function Y(e){return!k(e)&&y(e)&&!isNaN(parseFloat(e))}function J(e){return T(e)&&_(e)}function Q(e){return function(){return e}}function Z(e){return function(t){var n=e(t);return"number"==typeof n&&n>=0&&n<=C}}function ee(e){return function(t){return null==t?void 0:t[e]}}const te=ee("byteLength"),ne=Z(te);var re=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;const oe=p?function(e){return E?E(e)&&!V(e):ne(e)&&re.test(d.call(e))}:Q(!1),ie=ee("length");function ae(e,t){t=function(e){for(var t={},n=e.length,r=0;r<n;++r)t[e[r]]=!0;return{contains:function(e){return!0===t[e]},push:function(n){return t[n]=!0,e.push(n)}}}(t);var n=x.length,r=e.constructor,o=U(r)&&r.prototype||s,i="constructor";for($(e,i)&&!t.contains(i)&&t.push(i);n--;)(i=x[n])in e&&e[i]!==o[i]&&!t.contains(i)&&t.push(i)}function se(e){if(!w(e))return[];if(v)return v(e);var t=[];for(var n in e)$(e,n)&&t.push(n);return b&&ae(e,t),t}function le(e){if(null==e)return!0;var t=ie(e);return"number"==typeof t&&(q(e)||D(e)||G(e))?0===t:0===ie(se(e))}function ue(e,t){var n=se(t),r=n.length;if(null==e)return!r;for(var o=Object(e),i=0;i<r;i++){var a=n[i];if(t[a]!==o[a]||!(a in o))return!1}return!0}function ce(e){return e instanceof ce?e:this instanceof ce?void(this._wrapped=e):new ce(e)}function de(e){return new Uint8Array(e.buffer||e,e.byteOffset||0,te(e))}ce.VERSION=o,ce.prototype.value=function(){return this._wrapped},ce.prototype.valueOf=ce.prototype.toJSON=ce.prototype.value,ce.prototype.toString=function(){return String(this._wrapped)};var fe="[object DataView]";function pe(e,t,n,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return!1;if(e!=e)return t!=t;var o=typeof e;return("function"===o||"object"===o||"object"==typeof t)&&he(e,t,n,r)}function he(e,t,n,r){e instanceof ce&&(e=e._wrapped),t instanceof ce&&(t=t._wrapped);var o=d.call(e);if(o!==d.call(t))return!1;if(K&&"[object Object]"==o&&V(e)){if(!V(t))return!1;o=fe}switch(o){case"[object RegExp]":case"[object String]":return""+e==""+t;case"[object Number]":return+e!=+e?+t!=+t:0===+e?1/+e==1/t:+e===+t;case"[object Date]":case"[object Boolean]":return+e===+t;case"[object Symbol]":return l.valueOf.call(e)===l.valueOf.call(t);case"[object ArrayBuffer]":case fe:return he(de(e),de(t),n,r)}var i="[object Array]"===o;if(!i&&oe(e)){if(te(e)!==te(t))return!1;if(e.buffer===t.buffer&&e.byteOffset===t.byteOffset)return!0;i=!0}if(!i){if("object"!=typeof e||"object"!=typeof t)return!1;var a=e.constructor,s=t.constructor;if(a!==s&&!(U(a)&&a instanceof a&&U(s)&&s instanceof s)&&"constructor"in e&&"constructor"in t)return!1}r=r||[];for(var u=(n=n||[]).length;u--;)if(n[u]===e)return r[u]===t;if(n.push(e),r.push(t),i){if((u=e.length)!==t.length)return!1;for(;u--;)if(!pe(e[u],t[u],n,r))return!1}else{var c,f=se(e);if(u=f.length,se(t).length!==u)return!1;for(;u--;)if(!$(t,c=f[u])||!pe(e[c],t[c],n,r))return!1}return n.pop(),r.pop(),!0}function me(e,t){return pe(e,t)}function ve(e){if(!w(e))return[];var t=[];for(var n in e)t.push(n);return b&&ae(e,t),t}function ge(e){var t=ie(e);return function(n){if(null==n)return!1;var r=ve(n);if(ie(r))return!1;for(var o=0;o<t;o++)if(!U(n[e[o]]))return!1;return e!==xe||!U(n[Ee])}}var Ee="forEach",_e=["clear","delete"],ye=["get","has","set"],be=_e.concat(Ee,ye),xe=_e.concat(ye),Ce=["add"].concat(_e,Ee,"has");const Oe=W?ge(be):N("Map"),we=W?ge(xe):N("WeakMap"),Se=W?ge(Ce):N("Set"),Re=N("WeakSet");function Pe(e){for(var t=se(e),n=t.length,r=Array(n),o=0;o<n;o++)r[o]=e[t[o]];return r}function je(e){for(var t=se(e),n=t.length,r=Array(n),o=0;o<n;o++)r[o]=[t[o],e[t[o]]];return r}function Ne(e){for(var t={},n=se(e),r=0,o=n.length;r<o;r++)t[e[n[r]]]=n[r];return t}function De(e){var t=[];for(var n in e)U(e[n])&&t.push(n);return t.sort()}function Te(e,t){return function(n){var r=arguments.length;if(t&&(n=Object(n)),r<2||null==n)return n;for(var o=1;o<r;o++)for(var i=arguments[o],a=e(i),s=a.length,l=0;l<s;l++){var u=a[l];t&&void 0!==n[u]||(n[u]=i[u])}return n}}const Ie=Te(ve),Me=Te(se),Fe=Te(ve,!0);function ke(e){if(!w(e))return{};if(g)return g(e);var t=function(){};t.prototype=e;var n=new t;return t.prototype=null,n}function Ae(e,t){var n=ke(e);return t&&Me(n,t),n}function Le(e){return w(e)?q(e)?e.slice():Ie({},e):e}function Be(e,t){return t(e),e}function Ue(e){return q(e)?e:[e]}function He(e){return ce.toPath(e)}function Ke(e,t){for(var n=t.length,r=0;r<n;r++){if(null==e)return;e=e[t[r]]}return n?e:void 0}function We(e,t,n){var r=Ke(e,He(t));return R(r)?n:r}function ze(e,t){for(var n=(t=He(t)).length,r=0;r<n;r++){var o=t[r];if(!$(e,o))return!1;e=e[o]}return!!n}function Ve(e){return e}function qe(e){return e=Me({},e),function(t){return ue(t,e)}}function $e(e){return e=He(e),function(t){return Ke(t,e)}}function Xe(e,t,n){if(void 0===t)return e;switch(null==n?3:n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,o){return e.call(t,n,r,o)};case 4:return function(n,r,o,i){return e.call(t,n,r,o,i)}}return function(){return e.apply(t,arguments)}}function Ge(e,t,n){return null==e?Ve:U(e)?Xe(e,t,n):w(e)&&!q(e)?qe(e):$e(e)}function Ye(e,t){return Ge(e,t,1/0)}function Je(e,t,n){return ce.iteratee!==Ye?ce.iteratee(e,t):Ge(e,t,n)}function Qe(e,t,n){t=Je(t,n);for(var r=se(e),o=r.length,i={},a=0;a<o;a++){var s=r[a];i[s]=t(e[s],s,e)}return i}function Ze(){}function et(e){return null==e?Ze:function(t){return We(e,t)}}function tt(e,t,n){var r=Array(Math.max(0,e));t=Xe(t,n,1);for(var o=0;o<e;o++)r[o]=t(o);return r}function nt(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))}ce.toPath=Ue,ce.iteratee=Ye;const rt=Date.now||function(){return(new Date).getTime()};function ot(e){var t=function(t){return e[t]},n="(?:"+se(e).join("|")+")",r=RegExp(n),o=RegExp(n,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(o,t):e}}const it={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},at=ot(it),st=ot(Ne(it)),lt=ce.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ut=/(.)^/,ct={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},dt=/\\|'|\r|\n|\u2028|\u2029/g;function ft(e){return"\\"+ct[e]}var pt=/^\s*(\w|\$)+\s*$/;function ht(e,t,n){!t&&n&&(t=n),t=Fe({},t,ce.templateSettings);var r=RegExp([(t.escape||ut).source,(t.interpolate||ut).source,(t.evaluate||ut).source].join("|")+"|$","g"),o=0,i="__p+='";e.replace(r,function(t,n,r,a,s){return i+=e.slice(o,s).replace(dt,ft),o=s+t.length,n?i+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?i+="'+\n((__t=("+r+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n";var a,s=t.variable;if(s){if(!pt.test(s))throw new Error("variable is not a bare identifier: "+s)}else i="with(obj||{}){\n"+i+"}\n",s="obj";i="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{a=new Function(s,"_",i)}catch(e){throw e.source=i,e}var l=function(e){return a.call(this,e,ce)};return l.source="function("+s+"){\n"+i+"}",l}function mt(e,t,n){var r=(t=He(t)).length;if(!r)return U(n)?n.call(e):n;for(var o=0;o<r;o++){var i=null==e?void 0:e[t[o]];void 0===i&&(i=n,o=r),e=U(i)?i.call(e):i}return e}var vt=0;function gt(e){var t=++vt+"";return e?e+t:t}function Et(e){var t=ce(e);return t._chain=!0,t}function _t(e,t,n,r,o){if(!(r instanceof t))return e.apply(n,o);var i=ke(e.prototype),a=e.apply(i,o);return w(a)?a:i}var yt=O(function(e,t){var n=yt.placeholder,r=function(){for(var o=0,i=t.length,a=Array(i),s=0;s<i;s++)a[s]=t[s]===n?arguments[o++]:t[s];for(;o<arguments.length;)a.push(arguments[o++]);return _t(e,r,this,this,a)};return r});yt.placeholder=ce;const bt=yt,xt=O(function(e,t,n){if(!U(e))throw new TypeError("Bind must be called on a function");var r=O(function(o){return _t(e,r,t,this,n.concat(o))});return r}),Ct=Z(ie);function Ot(e,t,n,r){if(r=r||[],t||0===t){if(t<=0)return r.concat(e)}else t=1/0;for(var o=r.length,i=0,a=ie(e);i<a;i++){var s=e[i];if(Ct(s)&&(q(s)||G(s)))if(t>1)Ot(s,t-1,n,r),o=r.length;else for(var l=0,u=s.length;l<u;)r[o++]=s[l++];else n||(r[o++]=s)}return r}const wt=O(function(e,t){var n=(t=Ot(t,!1,!1)).length;if(n<1)throw new Error("bindAll must be passed function names");for(;n--;){var r=t[n];e[r]=xt(e[r],e)}return e});function St(e,t){var n=function(r){var o=n.cache,i=""+(t?t.apply(this,arguments):r);return $(o,i)||(o[i]=e.apply(this,arguments)),o[i]};return n.cache={},n}const Rt=O(function(e,t,n){return setTimeout(function(){return e.apply(null,n)},t)}),Pt=bt(Rt,ce,1);function jt(e,t,n){var r,o,i,a,s=0;n||(n={});var l=function(){s=!1===n.leading?0:rt(),r=null,a=e.apply(o,i),r||(o=i=null)},u=function(){var u=rt();s||!1!==n.leading||(s=u);var c=t-(u-s);return o=this,i=arguments,c<=0||c>t?(r&&(clearTimeout(r),r=null),s=u,a=e.apply(o,i),r||(o=i=null)):r||!1===n.trailing||(r=setTimeout(l,c)),a};return u.cancel=function(){clearTimeout(r),s=0,r=o=i=null},u}function Nt(e,t,n){var r,o,i,a,s,l=function(){var u=rt()-o;t>u?r=setTimeout(l,t-u):(r=null,n||(a=e.apply(s,i)),r||(i=s=null))},u=O(function(u){return s=this,i=u,o=rt(),r||(r=setTimeout(l,t),n&&(a=e.apply(s,i))),a});return u.cancel=function(){clearTimeout(r),r=i=s=null},u}function Dt(e,t){return bt(t,e)}function Tt(e){return function(){return!e.apply(this,arguments)}}function It(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}}function Mt(e,t){return function(){if(--e<1)return t.apply(this,arguments)}}function Ft(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}}const kt=bt(Ft,2);function At(e,t,n){t=Je(t,n);for(var r,o=se(e),i=0,a=o.length;i<a;i++)if(t(e[r=o[i]],r,e))return r}function Lt(e){return function(t,n,r){n=Je(n,r);for(var o=ie(t),i=e>0?0:o-1;i>=0&&i<o;i+=e)if(n(t[i],i,t))return i;return-1}}const Bt=Lt(1),Ut=Lt(-1);function Ht(e,t,n,r){for(var o=(n=Je(n,r,1))(t),i=0,a=ie(e);i<a;){var s=Math.floor((i+a)/2);n(e[s])<o?i=s+1:a=s}return i}function Kt(e,t,n){return function(r,o,i){var a=0,s=ie(r);if("number"==typeof i)e>0?a=i>=0?i:Math.max(i+s,a):s=i>=0?Math.min(i+1,s):i+s+1;else if(n&&i&&s)return r[i=n(r,o)]===o?i:-1;if(o!=o)return(i=t(c.call(r,a,s),J))>=0?i+a:-1;for(i=e>0?a:s-1;i>=0&&i<s;i+=e)if(r[i]===o)return i;return-1}}const Wt=Kt(1,Bt,Ht),zt=Kt(-1,Ut);function Vt(e,t,n){var r=(Ct(e)?Bt:At)(e,t,n);if(void 0!==r&&-1!==r)return e[r]}function qt(e,t){return Vt(e,qe(t))}function $t(e,t,n){var r,o;if(t=Xe(t,n),Ct(e))for(r=0,o=e.length;r<o;r++)t(e[r],r,e);else{var i=se(e);for(r=0,o=i.length;r<o;r++)t(e[i[r]],i[r],e)}return e}function Xt(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=Array(o),a=0;a<o;a++){var s=r?r[a]:a;i[a]=t(e[s],s,e)}return i}function Gt(e){return function(t,n,r,o){var i=arguments.length>=3;return function(t,n,r,o){var i=!Ct(t)&&se(t),a=(i||t).length,s=e>0?0:a-1;for(o||(r=t[i?i[s]:s],s+=e);s>=0&&s<a;s+=e){var l=i?i[s]:s;r=n(r,t[l],l,t)}return r}(t,Xe(n,o,4),r,i)}}const Yt=Gt(1),Jt=Gt(-1);function Qt(e,t,n){var r=[];return t=Je(t,n),$t(e,function(e,n,o){t(e,n,o)&&r.push(e)}),r}function Zt(e,t,n){return Qt(e,Tt(Je(t)),n)}function en(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=0;i<o;i++){var a=r?r[i]:i;if(!t(e[a],a,e))return!1}return!0}function tn(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=0;i<o;i++){var a=r?r[i]:i;if(t(e[a],a,e))return!0}return!1}function nn(e,t,n,r){return Ct(e)||(e=Pe(e)),("number"!=typeof n||r)&&(n=0),Wt(e,t,n)>=0}const rn=O(function(e,t,n){var r,o;return U(t)?o=t:(t=He(t),r=t.slice(0,-1),t=t[t.length-1]),Xt(e,function(e){var i=o;if(!i){if(r&&r.length&&(e=Ke(e,r)),null==e)return;i=e[t]}return null==i?i:i.apply(e,n)})});function on(e,t){return Xt(e,$e(t))}function an(e,t){return Qt(e,qe(t))}function sn(e,t,n){var r,o,i=-1/0,a=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=Ct(e)?e:Pe(e)).length;s<l;s++)null!=(r=e[s])&&r>i&&(i=r);else t=Je(t,n),$t(e,function(e,n,r){((o=t(e,n,r))>a||o===-1/0&&i===-1/0)&&(i=e,a=o)});return i}function ln(e,t,n){var r,o,i=1/0,a=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=Ct(e)?e:Pe(e)).length;s<l;s++)null!=(r=e[s])&&r<i&&(i=r);else t=Je(t,n),$t(e,function(e,n,r){((o=t(e,n,r))<a||o===1/0&&i===1/0)&&(i=e,a=o)});return i}var un=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function cn(e){return e?q(e)?c.call(e):D(e)?e.match(un):Ct(e)?Xt(e,Ve):Pe(e):[]}function dn(e,t,n){if(null==t||n)return Ct(e)||(e=Pe(e)),e[nt(e.length-1)];var r=cn(e),o=ie(r);t=Math.max(Math.min(t,o),0);for(var i=o-1,a=0;a<t;a++){var s=nt(a,i),l=r[a];r[a]=r[s],r[s]=l}return r.slice(0,t)}function fn(e){return dn(e,1/0)}function pn(e,t,n){var r=0;return t=Je(t,n),on(Xt(e,function(e,n,o){return{value:e,index:r++,criteria:t(e,n,o)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index-t.index}),"value")}function hn(e,t){return function(n,r,o){var i=t?[[],[]]:{};return r=Je(r,o),$t(n,function(t,o){var a=r(t,o,n);e(i,t,a)}),i}}const mn=hn(function(e,t,n){$(e,n)?e[n].push(t):e[n]=[t]}),vn=hn(function(e,t,n){e[n]=t}),gn=hn(function(e,t,n){$(e,n)?e[n]++:e[n]=1}),En=hn(function(e,t,n){e[n?0:1].push(t)},!0);function _n(e){return null==e?0:Ct(e)?e.length:se(e).length}function yn(e,t,n){return t in n}const bn=O(function(e,t){var n={},r=t[0];if(null==e)return n;U(r)?(t.length>1&&(r=Xe(r,t[1])),t=ve(e)):(r=yn,t=Ot(t,!1,!1),e=Object(e));for(var o=0,i=t.length;o<i;o++){var a=t[o],s=e[a];r(s,a,e)&&(n[a]=s)}return n}),xn=O(function(e,t){var n,r=t[0];return U(r)?(r=Tt(r),t.length>1&&(n=t[1])):(t=Xt(Ot(t,!1,!1),String),r=function(e,n){return!nn(t,n)}),bn(e,r,n)});function Cn(e,t,n){return c.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))}function On(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[0]:Cn(e,e.length-t)}function wn(e,t,n){return c.call(e,null==t||n?1:t)}function Sn(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[e.length-1]:wn(e,Math.max(0,e.length-t))}function Rn(e){return Qt(e,Boolean)}function Pn(e,t){return Ot(e,t,!1)}const jn=O(function(e,t){return t=Ot(t,!0,!0),Qt(e,function(e){return!nn(t,e)})}),Nn=O(function(e,t){return jn(e,t)});function Dn(e,t,n,r){P(t)||(r=n,n=t,t=!1),null!=n&&(n=Je(n,r));for(var o=[],i=[],a=0,s=ie(e);a<s;a++){var l=e[a],u=n?n(l,a,e):l;t&&!n?(a&&i===u||o.push(l),i=u):n?nn(i,u)||(i.push(u),o.push(l)):nn(o,l)||o.push(l)}return o}const Tn=O(function(e){return Dn(Ot(e,!0,!0))});function In(e){for(var t=[],n=arguments.length,r=0,o=ie(e);r<o;r++){var i=e[r];if(!nn(t,i)){var a;for(a=1;a<n&&nn(arguments[a],i);a++);a===n&&t.push(i)}}return t}function Mn(e){for(var t=e&&sn(e,ie).length||0,n=Array(t),r=0;r<t;r++)n[r]=on(e,r);return n}const Fn=O(Mn);function kn(e,t){for(var n={},r=0,o=ie(e);r<o;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n}function An(e,t,n){null==t&&(t=e||0,e=0),n||(n=t<e?-1:1);for(var r=Math.max(Math.ceil((t-e)/n),0),o=Array(r),i=0;i<r;i++,e+=n)o[i]=e;return o}function Ln(e,t){if(null==t||t<1)return[];for(var n=[],r=0,o=e.length;r<o;)n.push(c.call(e,r,r+=t));return n}function Bn(e,t){return e._chain?ce(t).chain():t}function Un(e){return $t(De(e),function(t){var n=ce[t]=e[t];ce.prototype[t]=function(){var e=[this._wrapped];return u.apply(e,arguments),Bn(this,n.apply(ce,e))}}),ce}$t(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=a[e];ce.prototype[e]=function(){var n=this._wrapped;return null!=n&&(t.apply(n,arguments),"shift"!==e&&"splice"!==e||0!==n.length||delete n[0]),Bn(this,n)}}),$t(["concat","join","slice"],function(e){var t=a[e];ce.prototype[e]=function(){var e=this._wrapped;return null!=e&&(e=t.apply(e,arguments)),Bn(this,e)}});const Hn=ce;var Kn=Un(r);Kn._=Kn;const Wn=Kn},4607(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442)),l=n(6561);t.default=(e,t,n)=>{const r={data:[],sortOrder:void 0,onSort:()=>{},sortField:null},o=s.default.createContext(r);class i extends s.Component{constructor(r){super(r),this.state={sortOrder:l.SORT_ASC,sortColumn:{dataField:"id",text:"ID",onSort:()=>{},sortFunc:()=>{}}},this.handleSort=r=>{const o=e.nextOrder(r,this.state,this.props.defaultSortDirection);r.onSort&&r.onSort(r.dataField,o),t()&&n(r.dataField,o),this.setState(()=>({sortOrder:o,sortColumn:r}))};const{defaultSorted:o,defaultSortDirection:i,sort:a}=r;let s,u;o&&o.length>0?(s=o[0].order||i,u=this.initSort(o[0].dataField,s)):a&&a.dataField&&a.order&&(s=a.order,u=this.initSort(a.dataField,s)),this.state={sortOrder:s,sortColumn:u}}componentDidMount(){const{sortOrder:e,sortColumn:r}=this.state;t()&&e&&r&&n(r.dataField,e)}static getDerivedStateFromProps(e,t){const{sort:n,columns:r}=e;return n&&n.dataField&&n.order?{sortOrder:n.order,sortColumn:r.find(e=>e.dataField===n.dataField)}:null}initSort(e,t){const{columns:n}=this.props,r=n.filter(t=>t.dataField===e);let o;return r.length>0&&(o=r[0],o.onSort&&o.onSort(e,t)),o}render(){const{sort:n}=this.props,{sortOrder:r,sortColumn:i}=this.state;let{data:a}=this.props;if(!t()&&i){const t=i.sortFunc?i.sortFunc:n&&n.sortFunc;a=e.sort(a,r,{...i,sortFunc:t})}return s.default.createElement(o.Provider,{value:{data:a,sortOrder:r,onSort:this.handleSort,sortField:i?i.dataField:null}},this.props.children)}}return{Provider:i,Consumer:o.Consumer}}},4652(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(3955)),i=r(n(9603));t.default=e=>class extends((0,i.default)(e)){validateProps(){const{keyField:e}=this.props;if(!e)throw new Error("Please specify a field as key via keyField");if(this.visibleColumnSize(!1)<=0)throw new Error("No visible columns detected")}isEmpty(){return 0===this.props.data.length}visibleRows(){const{data:e,hiddenRows:t,keyField:n}=this.props;return t&&0!==t.length?e.filter(e=>{const r=o.default.get(e,n);return!o.default.contains(t,r)}):e}}},5191(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561),a=r(n(8610)),s=r(n(3997)),l=r(n(6572)),u=r(n(7572)),c=r(n(6510));t.default=e=>{const{className:t,columns:n,onSort:r,onFilter:d,sortField:f,sortOrder:p,selectRow:h,expandRow:m,currFilters:v,onExternalFilter:g,filterPosition:E,globalSortCaret:_,wrapperClasses:y}=e;let b=()=>null,x=()=>null;m?.showExpandColumn&&(x=(0,l.default)(s.default)),h&&(b=(0,c.default)(u.default));const C=(e=i.INDICATOR_POSITION_LEFT)=>e===i.INDICATOR_POSITION_LEFT,O=n.map((e,t)=>{const n=e.dataField===f,i=e.dataField===f;return o.default.createElement(a.default,{index:t,key:e.dataField,column:e,onSort:r,sorting:n,sortOrder:p,globalSortCaret:_,isLastSorting:i,onFilter:d,currFilters:v,onExternalFilter:g,filterPosition:E})});return h&&!h.hideSelectColumn&&(C(h.selectColumnPosition)?O.unshift(o.default.createElement(b,{key:"selection"})):O.push(o.default.createElement(b,{key:"selection"}))),m?.showExpandColumn&&(C(m.expandColumnPosition)?O.unshift(o.default.createElement(x,{key:"expansion"})):O.push(o.default.createElement(x,{key:"expansion"}))),o.default.createElement("thead",{className:y},o.default.createElement("tr",{className:t},O))}},5442(t){"use strict";t.exports=e},6003(e){"use strict";e.exports=t},6023(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=r(n(1630)),s=r(n(3955)),l=r(n(105)),u=(0,a.default)();t.default=e=>t=>i.default.createElement(u.Consumer,null,n=>((t,n)=>{if(!n)return[];let r="",a="";const u=t.value,c=s.default.contains(n.expanded,u),d=s.default.contains(n.isClosing,u),f=!n.nonExpandable||!s.default.contains(n.nonExpandable,u);return c&&(r=s.default.isFunction(n.parentClassName)?n.parentClassName(c,t.row,t.rowIndex):n.parentClassName||"",a=s.default.isFunction(n.className)?n.className(c,t.row,t.rowIndex):n.className||""),[i.default.createElement(e,{...t,key:u,expanded:c,expandable:f,expandRow:{...n},className:(0,o.default)(t.className,r)}),c||d?i.default.createElement(l.default,{key:`${u}-expanding`,colSpan:t.visibleColumnSize,expanded:c,onClosed:()=>n.onClosed(u),className:a},n.renderer(t.row,t.rowIndex)):null]})(t,n))},6032(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(6023)),d=s(n(3689)),f=s(n(629)),p=s(n(285)),h=s(n(3502)),m=s(n(3955));class v extends l.Component{constructor(e){super(e);const{keyField:t,cellEdit:n,selectRow:r,expandRow:o}=e;n?.createContext&&(this.EditingCell=n.createEditingCell(m.default,n.options.onStartEdit));let i=h.default;const a=r?.mode!==u.ROW_SELECT_DISABLED,s=!!o.renderer;s&&(i=(0,c.default)(f.default)),a&&(i=(0,d.default)(s?i:f.default)),n?.createContext&&(i=n.withRowLevelCellEdit(i,a,t,m.default)),this.RowComponent=i}render(){const{columns:e,data:t,tabIndexCell:n,keyField:r,isEmpty:o,noDataIndication:i,visibleColumnSize:a,cellEdit:s,selectRow:c,rowStyle:d,rowClasses:f,rowEvents:h,expandRow:v,className:g}=this.props;let E;if(o){const e=m.default.isFunction(i)?i():i;if(!e)return null;E=l.default.createElement(p.default,{content:e,colSpan:a})}else{const o=c?.mode!==u.ROW_SELECT_DISABLED,i=!!v.renderer,p={};s?.createContext&&(p.EditingCellComponent=this.EditingCell),(o||i)&&(p.expandRow=v,p.selectRow=c),E=t.map((t,o)=>{if(t){const i=m.default.get(t,r),u={key:i,row:t,tabIndexCell:n,columns:e,keyField:r,cellEdit:s,value:i,rowIndex:o,visibleColumnSize:a,attrs:h||{},...p};return u.style=m.default.isFunction(d)?d(t,o):d,u.className=m.default.isFunction(f)?f(t,o):f,l.default.createElement(this.RowComponent,{...u})}return null})}return l.default.createElement("tbody",{className:g},E)}}t.default=v},6310(e,t,n){"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}function o(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,i(e,t)}function s(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}n.r(t),n.d(t,{CSSTransition:()=>w,ReplaceTransition:()=>I,SwitchTransition:()=>K,Transition:()=>x,TransitionGroup:()=>D,config:()=>f});var l=n(5442),u=n.n(l),c=n(6003),d=n.n(c);const f={disabled:!1},p=u().createContext(null);var h=function(e){return e.scrollTop},m="unmounted",v="exited",g="entering",E="entered",_="exiting",y=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o=v,r.appearStatus=g):o=E:o=t.unmountOnExit||t.mountOnEnter?m:v,r.state={status:o},r.nextCallback=null,r}a(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===m?{status:v}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==g&&n!==E&&(t=g):n!==g&&n!==E||(t=_)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===g){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this);n&&h(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===v&&this.setState({status:m})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[d().findDOMNode(this),r],i=o[0],a=o[1],s=this.getTimeouts(),l=r?s.appear:s.enter;!e&&!n||f.disabled?this.safeSetState({status:E},function(){t.props.onEntered(i)}):(this.props.onEnter(i,a),this.safeSetState({status:g},function(){t.props.onEntering(i,a),t.onTransitionEnd(l,function(){t.safeSetState({status:E},function(){t.props.onEntered(i,a)})})}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:d().findDOMNode(this);t&&!f.disabled?(this.props.onExit(r),this.safeSetState({status:_},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:v},function(){e.props.onExited(r)})})})):this.safeSetState({status:v},function(){e.props.onExited(r)})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=o[0],a=o[1];this.props.addEndListener(i,a)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===m)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,o(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return u().createElement(p.Provider,{value:null},"function"==typeof n?n(e,r):u().cloneElement(u().Children.only(n),r))},t}(u().Component);function b(){}y.contextType=p,y.propTypes={},y.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:b,onEntering:b,onEntered:b,onExit:b,onExiting:b,onExited:b},y.UNMOUNTED=m,y.EXITED=v,y.ENTERING=g,y.ENTERED=E,y.EXITING=_;const x=y;var C=function(e,t){return e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=s(n.className,r):n.setAttribute("class",s(n.className&&n.className.baseVal||"",r)));var n,r})},O=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1];t.removeClasses(o,"exit"),t.addClass(o,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.addClass(o,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.removeClasses(o,i),t.addClass(o,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}a(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&h(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r})}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,i=n.done;this.appliedClasses[t]={},r&&C(e,r),o&&C(e,o),i&&C(e,i)},n.render=function(){var e=this.props,t=(e.classNames,o(e,["classNames"]));return u().createElement(x,r({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(u().Component);O.defaultProps={classNames:""},O.propTypes={};const w=O;function S(e,t){var n=Object.create(null);return e&&l.Children.map(e,function(e){return e}).forEach(function(e){n[e.key]=function(e){return t&&(0,l.isValidElement)(e)?t(e):e}(e)}),n}function R(e,t,n){return null!=n[t]?n[t]:e.props[t]}function P(e,t,n){var r=S(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var a in e)a in t?i.length&&(o[a]=i,i=[]):i.push(a);var s={};for(var l in t){if(o[l])for(r=0;r<o[l].length;r++){var u=o[l][r];s[o[l][r]]=n(u)}s[l]=n(l)}for(r=0;r<i.length;r++)s[i[r]]=n(i[r]);return s}(t,r);return Object.keys(o).forEach(function(i){var a=o[i];if((0,l.isValidElement)(a)){var s=i in t,u=i in r,c=t[i],d=(0,l.isValidElement)(c)&&!c.props.in;!u||s&&!d?u||!s||d?u&&s&&(0,l.isValidElement)(c)&&(o[i]=(0,l.cloneElement)(a,{onExited:n.bind(null,a),in:c.props.in,exit:R(a,"exit",e),enter:R(a,"enter",e)})):o[i]=(0,l.cloneElement)(a,{in:!1}):o[i]=(0,l.cloneElement)(a,{onExited:n.bind(null,a),in:!0,exit:R(a,"exit",e),enter:R(a,"enter",e)})}}),o}var j=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},N=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}a(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,i=t.handleExited;return{children:t.firstRender?(n=e,r=i,S(n.children,function(e){return(0,l.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:R(e,"appear",n),enter:R(e,"enter",n),exit:R(e,"exit",n)})})):P(e,o,i),firstRender:!1}},n.handleExited=function(e,t){var n=S(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState(function(t){var n=r({},t.children);return delete n[e.key],{children:n}}))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=o(e,["component","childFactory"]),i=this.state.contextValue,a=j(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?u().createElement(p.Provider,{value:i},a):u().createElement(p.Provider,{value:i},u().createElement(t,r,a))},t}(u().Component);N.propTypes={},N.defaultProps={component:"div",childFactory:function(e){return e}};const D=N;var T=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}a(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,o=this.props.children,i=u().Children.toArray(o)[t];if(i.props[e]&&(r=i.props)[e].apply(r,n),this.props[e]){var a=i.props.nodeRef?void 0:d().findDOMNode(this);this.props[e](a)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=o(e,["children","in"]),i=u().Children.toArray(t),a=i[0],s=i[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,u().createElement(D,r,n?u().cloneElement(a,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):u().cloneElement(s,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(u().Component);T.propTypes={};const I=T;var M,F;var k="out-in",A="in-out",L=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},B=((M={})[k]=function(e){var t=e.current,n=e.changeState;return u().cloneElement(t,{in:!1,onExited:L(t,"onExited",function(){n(g,null)})})},M[A]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,u().cloneElement(r,{in:!0,onEntered:L(r,"onEntered",function(){n(g)})})]},M),U=((F={})[k]=function(e){var t=e.children,n=e.changeState;return u().cloneElement(t,{in:!0,onEntered:L(t,"onEntered",function(){n(E,u().cloneElement(t,{in:!0}))})})},F[A]=function(e){var t=e.current,n=e.children,r=e.changeState;return[u().cloneElement(t,{in:!1,onExited:L(t,"onExited",function(){r(E,u().cloneElement(n,{in:!0}))})}),u().cloneElement(n,{in:!0})]},F),H=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:E,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}a(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===g&&e.mode===A?{status:g}:!t.current||(n=t.current,r=e.children,n===r||u().isValidElement(n)&&u().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:u().cloneElement(e.children,{in:!0})}:{status:_};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,o=this.state,i=o.status,a=o.current,s={children:n,current:a,changeState:this.changeState,status:i};switch(i){case g:e=U[r](s);break;case _:e=B[r](s);break;case E:e=a}return u().createElement(p.Provider,{value:{isMounting:!this.appeared}},e)},t}(u().Component);H.propTypes={},H.defaultProps={mode:k};const K=H},6510(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=(0,n(8145).createSelectionContext)();t.default=e=>t=>o.default.createElement(i.Consumer,null,n=>o.default.createElement(e,{...t,...n}))},6561(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TYPE_DATE=t.TYPE_BOOLEAN=t.TYPE_NUMBER=t.TYPE_STRING=t.INDICATOR_POSITION_RIGHT=t.INDICATOR_POSITION_LEFT=t.SORT_DESC=t.SORT_ASC=t.FILTERS_POSITION_BOTTOM=t.FILTERS_POSITION_TOP=t.FILTERS_POSITION_INLINE=t.CHECKBOX_STATUS_UNCHECKED=t.CHECKBOX_STATUS_CHECKED=t.CHECKBOX_STATUS_INDETERMINATE=t.ROW_SELECT_DISABLED=t.ROW_SELECT_MULTIPLE=t.ROW_SELECT_SINGLE=void 0,t.ROW_SELECT_SINGLE="radio",t.ROW_SELECT_MULTIPLE="checkbox",t.ROW_SELECT_DISABLED="ROW_SELECT_DISABLED",t.CHECKBOX_STATUS_INDETERMINATE="indeterminate",t.CHECKBOX_STATUS_CHECKED="checked",t.CHECKBOX_STATUS_UNCHECKED="unchecked",t.FILTERS_POSITION_INLINE="inline",t.FILTERS_POSITION_TOP="top",t.FILTERS_POSITION_BOTTOM="bottom",t.SORT_ASC="asc",t.SORT_DESC="desc",t.INDICATOR_POSITION_LEFT="left",t.INDICATOR_POSITION_RIGHT="right",t.TYPE_STRING="string",t.TYPE_NUMBER="number",t.TYPE_BOOLEAN="bool",t.TYPE_DATE="date"},6572(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=(0,r(n(1630)).default)();t.default=e=>()=>o.default.createElement(i.Consumer,null,t=>o.default.createElement(e,{...t}))},6645(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(1590)),l=a(n(8476)),u=a(n(355)),c=a(n(4130)),d=a(n(3742)),f=a(n(2190));t.default={...u,...c,...s,...l,...d,...f}},6942(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=a(e,i(n)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=a(t,n));return t}function a(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},7007(e){"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise(function(n,r){function o(n){e.removeListener(t,i),r(n)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",o),n([].slice.call(arguments))}m(e,t,i,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,o,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,n,r){var o,i,a,u;if(s(n),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),i=e._events),a=i[t]),void 0===a)a=i[t]=n,++e._eventsCount;else if("function"==typeof a?a=i[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(o=l(e))>0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=c.bind(r);return o.listener=n,r.wrapFn=o,o}function f(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(o):h(o,o.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function h(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function m(e,t,n,r){if("function"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function o(i){r.once&&e.removeEventListener(t,o),n(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o="error"===e,i=this._events;if(void 0!==i)o=o&&void 0===i.error;else if(!o)return!1;if(o){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)r(l,this,t);else{var u=l.length,c=h(l,u);for(n=0;n<u;++n)r(c[n],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return s(t),this.on(e,d(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,d(this,e,t)),this},i.prototype.removeListener=function(e,t){var n,r,o,i,a;if(s(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(o=-1,i=n.length-1;i>=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,o),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,a||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var o,i=Object.keys(n);for(r=0;r<i.length;++r)"removeListener"!==(o=i[r])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},i.prototype.listeners=function(e){return f(this,e,!0)},i.prototype.rawListeners=function(e){return f(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},i.prototype.listenerCount=p,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},7351(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RowEventDelegater=void 0;const o=n(6561),i=r(n(3955)),a=["onClick","onDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","onAuxClick"];t.RowEventDelegater=e=>class extends e{constructor(...e){super(...e),this.clickNum=0,this.createDefaultEventHandler=this.createDefaultEventHandler.bind(this),this.createClickEventHandler=this.createClickEventHandler.bind(this)}createClickEventHandler(e){return t=>{const{row:n,selected:r,keyField:a,selectable:s,expandable:l,rowIndex:u,expanded:c,expandRow:d,selectRow:f,DELAY_FOR_DBCLICK:p}=this.props,h=()=>{e&&e(t,n,u);const p=i.default.get(n,a);d&&l&&!d.expandByColumnOnly&&(f.mode!==o.ROW_SELECT_DISABLED&&f.clickToExpand||f.mode===o.ROW_SELECT_DISABLED)&&d.onRowExpand(p,!c,u,t),f.clickToSelect&&s&&f.onRowSelect(p,!r,u,t)};p?(this.clickNum+=1,i.default.debounce(()=>{1===this.clickNum&&h(),this.clickNum=0},p)()):h()}}createDefaultEventHandler(e){return t=>{const{row:n,rowIndex:r}=this.props;e(t,n,r)}}delegate(e={}){const t={...e};return Object.keys(e).forEach(n=>{i.default.includes(a,n)&&(t[n]=this.createDefaultEventHandler(e[n]))}),t}}},7572(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CheckBox=void 0;const l=a(n(5442)),u=n(6561),c=s(n(3955)),d=n(3761);t.CheckBox=({className:e,checked:t,indeterminate:n})=>l.default.createElement("input",{type:"checkbox",checked:t,className:e,ref:e=>{e&&(e.indeterminate=n)},onChange:()=>{}});class f extends l.Component{constructor(e){super(e),this.handleCheckBoxClick=this.handleCheckBoxClick.bind(this)}shouldComponentUpdate(e){const{mode:t,checkedStatus:n}=this.props;return t!==u.ROW_SELECT_SINGLE&&e.checkedStatus!==n}handleCheckBoxClick(e){const{onAllRowsSelect:t,checkedStatus:n}=this.props;t(e,n===u.CHECKBOX_STATUS_CHECKED||n===u.CHECKBOX_STATUS_INDETERMINATE)}render(){const{mode:e,checkedStatus:n,selectionHeaderRenderer:r,hideSelectAll:o,headerColumnStyle:i}=this.props;if(o)return l.default.createElement("th",{"data-row-selection":!0});const a=n===u.CHECKBOX_STATUS_CHECKED,s=n===u.CHECKBOX_STATUS_INDETERMINATE,f={};let p;return(r||e===u.ROW_SELECT_MULTIPLE)&&(f.onClick=this.handleCheckBoxClick),f.style=c.default.isFunction(i)?i(n):i,l.default.createElement(d.BootstrapContext.Consumer,null,({bootstrap4:n})=>(r?p=r({mode:e,checked:a,indeterminate:s}):e===u.ROW_SELECT_MULTIPLE&&(p=l.default.createElement(t.CheckBox,{...this.props,checked:a,className:n?"selection-input-4":"",indeterminate:s})),l.default.createElement("th",{className:"selection-cell-header","data-row-selection":!0,...f},p)))}}t.default=f},7701(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=r(n(7920)),a=r(n(1400)),s=r(n(3955));t.default=e=>{const{data:t=[],className:n,columns:r=[],selectRow:l,expandRow:u}=e;return o.default.createElement("tfoot",null,o.default.createElement(a.default,{renderContent:function(){return r.map((e,n)=>{if(void 0===e.footer||null===e.footer)return!1;const r=s.default.pluck(t,e.dataField);return o.default.createElement(i.default,{index:n,key:e.dataField,column:e,columnData:r})})},selectRow:l,expandRow:u,className:n,cellEl:"th"}))}},7723(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=i(n(1031)),s=i(n(9421));t.default=(0,s.default)(a.default),o(n(6561),t)},7920(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(n(6942)),u=a(n(5442)),c=n(1859),d=s(n(3955));class f extends((0,c.CellEventDelegater)(u.Component)){render(){const{index:e,column:t,columnData:n}=this.props,{footer:r,footerTitle:o,footerAlign:i,footerFormatter:a,footerEvents:s,footerClasses:c,footerStyle:f,footerAttrs:p}=t,h=this.delegate(s),m={...d.default.isFunction(p)?p(t,e):p,...h};let v="";d.default.isString(r)?v=r:d.default.isFunction(r)&&(v=r(n||[],t,e||0));let g={};const E=d.default.isFunction(c)?c(t,e||0):c;f&&(g=d.default.isFunction(f)?f(t,e||0):f,g=g?{...g}:g),o&&(m.title=d.default.isFunction(o)?o(t,e||0):v),i&&(g.textAlign=d.default.isFunction(i)?i(t,e||0):i),E&&(m.className=(0,l.default)(m.className,E)),d.default.isEmptyObject(g)||(m.style=g);const _=a?a(t,e||0,{text:v}):v;return u.default.createElement("th",m,_)}}t.default=f},8145(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionContext=void 0;const l=a(n(5442)),u=s(n(3955)),c=n(6561),d=s(n(6645)),f=n(4130),p=l.default.createContext({});class h extends l.Component{constructor(e){super(e),this.handleRowSelect=(e,t,n,r)=>{const{data:o,keyField:i,selectRow:{mode:a,onSelect:s}}=this.props;let l=[...this.selected],u=!0;if(s){u=s(d.default.getRowByRowId(o,i,e),t,n,r)}!0!==u&&void 0!==u||(a===c.ROW_SELECT_SINGLE?l=[e]:t?l.push(e):l=l.filter(t=>t!==e)),this.selected=l,this.isHandleRowSelect=!0,this.forceUpdate()},this.handleAllRowsSelect=(e,t)=>{const{data:n,keyField:r,selectRow:{onSelectAll:o,nonSelectable:i}}=this.props,{selected:a}=this;let s,l;s=t?a.filter(e=>void 0===n.find(t=>u.default.get(t,r)===e)):a.concat(d.default.selectableKeys(n,r,i)),o&&(l=o(!t,d.default.getSelectedRows(n,r,t?a:s),e),Array.isArray(l)&&(s=l)),this.selected=s,this.isHandleRowSelect=!0,this.forceUpdate()},this.selected=e.selectRow.selected||[],this.isHandleRowSelect=!1}getSelected(){return this.selected}componentDidUpdate(e){this.isHandleRowSelect?this.isHandleRowSelect=!1:e.selectRow&&e.selectRow.selected&&!u.default.isEqual(e.selectRow.selected,this.selected)&&(this.selected=e.selectRow.selected,this.forceUpdate())}render(){const{allRowsSelected:e,allRowsNotSelected:t}=(0,f.getSelectionSummary)(this.props.data,this.props.keyField,this.selected);let n;return n=e?c.CHECKBOX_STATUS_CHECKED:t?c.CHECKBOX_STATUS_UNCHECKED:c.CHECKBOX_STATUS_INDETERMINATE,l.default.createElement(p.Provider,{value:{...this.props.selectRow,selected:this.selected,onRowSelect:this.handleRowSelect,onAllRowsSelect:this.handleAllRowsSelect,allRowsSelected:e,allRowsNotSelected:t,checkedStatus:n}},this.props.children)}}t.createSelectionContext=()=>({Provider:h,Consumer:p.Consumer})},8232(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(1859),c=s(n(3955));class d extends((0,u.CellEventDelegater)(l.Component)){constructor(e){super(e),this.createHandleEditingCell=this.createHandleEditingCell.bind(this)}shouldComponentUpdate(e){let t=!1;return t=e.column.isDummyField?!c.default.isEqual(this.props.row,e.row):c.default.get(this.props.row,this.props.column.dataField)!==c.default.get(e.row,e.column.dataField),!!t||(t=!((!e.column.formatter||c.default.isEqual(this.props.row,e.row))&&this.props.column.hidden===e.column.hidden&&this.props.column.isDummyField===e.column.isDummyField&&this.props.rowindex===e.rowindex&&this.props.columnindex===e.columnindex&&this.props.className===e.className&&this.props.title===e.title&&this.props.editable===e.editable&&this.props.clicktoedit===e.clicktoedit&&this.props.dbclicktoedit===e.dbclicktoedit&&c.default.isEqual(this.props.style,e.style)&&c.default.isEqual(this.props.column.formatExtraData,e.column.formatExtraData)&&c.default.isEqual(this.props.column.events,e.column.events)&&c.default.isEqual(this.props.column.attrs,e.column.attrs)&&this.props.tabIndex===e.tabIndex),t)}createHandleEditingCell(e){return t=>{const{atstart:n,rowindex:r,columnindex:o,clicktoedit:i,dbclicktoedit:a}=this.props;(i||a)&&c.default.isFunction(e)&&e(t),n&&n(r,o)}}render(){const{row:e,column:t,atstart:n,rowindex:r,columnindex:o,editable:i,clicktoedit:a,dbclicktoedit:s,...u}=this.props,{dataField:d,formatter:f,formatExtraData:p}=t,h=this.delegate({...u});let m=t.isDummyField?null:c.default.get(e,d);return f&&(m=t.formatter(m,e,r,p)),"true"===a&&"true"===i?h.onClick=this.createHandleEditingCell(h.onClick):"true"===s&&"true"===i&&(h.onDoubleClick=this.createHandleEditingCell(h.onDoubleClick)),l.default.createElement("td",{...h},"boolean"==typeof m?`${m}`:m)}}t.default=d},8476(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.editCell=void 0;const o=r(n(3955)),i=n(355);t.editCell=(e,t,n,r,a)=>{const s=(0,i.getRowByRowId)(e,t,n);s&&o.default.set(s,r,a)}},8610(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(n(6942)),u=a(n(5442)),c=n(6561),d=n(1859),f=s(n(184)),p=s(n(1965)),h=s(n(3955));class m extends((0,d.CellEventDelegater)(u.Component)){render(){const{column:e,index:t,onSort:n,sorting:r,sortOrder:o,isLastSorting:i,onFilter:a,currFilters:s,filterPosition:d,onExternalFilter:m,globalSortCaret:v}=this.props,{text:g,sort:E,sortCaret:_,filter:y,filterRenderer:b,headerTitle:x,headerAlign:C,headerFormatter:O,headerEvents:w,headerClasses:S,headerStyle:R,headerAttrs:P,headerSortingClasses:j,headerSortingStyle:N}=e,D=_||v,T=this.delegate(w),I=h.default.isFunction(P)?P(e,t):P||{},M={...I,...T,tabIndex:h.default.isDefined(I.tabIndex)?I.tabIndex:0};let F,k,A={},L=h.default.isFunction(S)?S(e,t):S;if(R&&(A=h.default.isFunction(R)?R(e,t):R,A=A?{...A}:A),x&&(M.title=h.default.isFunction(x)?x(e,t):g),C&&(A.textAlign=h.default.isFunction(C)?C(e,t):C),E){const a=M.onClick,s=M.onKeyDown;M["aria-label"]=r?`${g} sort ${o}`:`${g} sortable`,M.onKeyUp=t=>{"Enter"===t.key&&(n?.(e),h.default.isFunction(s)&&s(t))},M.onClick=t=>{n?.(e),h.default.isFunction(a)&&a(t)},M.className=(0,l.default)(M.className,"sortable"),r?(F=D?D(o||c.SORT_DESC,e):u.default.createElement(f.default,{order:o}),L=(0,l.default)(L,h.default.isFunction(j)?j(e,o,i,t):j),A={...A,...h.default.isFunction(N)?N(e,o,i,t):N}):F=D?D(void 0,e):u.default.createElement(p.default,null)}if(L&&(M.className=(0,l.default)(M.className,L)),h.default.isEmptyObject(A)||(M.style=A),d===c.FILTERS_POSITION_INLINE)if(b){const t=m?.(e,y?.props.type||"");k=b(t,e)}else y&&(k=u.default.createElement(y.Filter,{...y.props,filterState:s?.[e.dataField],onFilter:a,column:e}));const B=O?O(e,t,{sortElement:F,filterElement:k}):g;return O?u.default.createElement("th",M,B):u.default.createElement("th",M,B,F,k)}}t.default=m},9421(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(7007)),i=r(n(5442)),a=r(n(9459)),s=r(n(6645)),l=r(n(3955)),u=n(3761),c=r(n(3285)),d=r(n(3519)),f=r(n(1630)),p=n(8145),h=r(n(4607));t.default=e=>class extends((0,a.default)(e)){constructor(e){if(super(e),this.DataContext=(0,d.default)(),e.registerExposedAPI){const t=new o.default;t.on("get.table.data",e=>e.result=this.table.getData()),t.on("get.selected.rows",e=>e.result=this.selectionContext.getSelected()),t.on("get.filtered.rows",e=>{this.searchContext?e.result=this.searchContext.getSearched():this.filterContext?e.result=this.filterContext.getFiltered():e.result=this.table.getData()}),e.registerExposedAPI(t)}e.columns.filter(e=>e.sort).length>0&&(this.SortContext=(0,h.default)(s.default,this.isRemoteSort,this.handleRemoteSortChange)),(e.columnToggle||e.columns.filter(e=>e.hidden).length>0)&&(this.ColumnContext=(0,c.default)()),e.selectRow&&(this.SelectionContext=(0,p.createSelectionContext)()),e.expandRow&&(this.RowExpandContext=(0,f.default)()),e.cellEdit&&e.cellEdit.createContext&&(this.CellEditContext=e.cellEdit.createContext(l.default,s.default,this.isRemoteCellEdit,this.handleRemoteCellChange)),e.filter&&(this.FilterContext=e.filter.createContext(l.default,this.isRemoteFiltering,this.handleRemoteFilterChange)),e.pagination&&(this.PaginationContext=e.pagination.createContext()),e.search&&e.search.searchContext&&(this.SearchContext=e.search.searchContext(l.default,this.isRemoteSearch,this.handleRemoteSearchChange)),e.setDependencyModules&&e.setDependencyModules(l.default),e.setPaginationRemoteEmitter&&e.setPaginationRemoteEmitter(this.remoteEmitter)}componentDidUpdate(e){e.columns.filter(e=>e.sort).length<=0?this.SortContext=null:this.SortContext||(this.SortContext=(0,h.default)(s.default,this.isRemoteSort,this.handleRemoteSortChange)),!e.pagination&&this.props.pagination&&(this.PaginationContext=null),e.pagination&&!this.props.pagination&&(this.PaginationContext=e.pagination.createContext(this.isRemotePagination,this.handleRemotePageChange)),!e.cellEdit&&this.props.cellEdit&&(this.CellEditContext=null),e.cellEdit&&!this.props.cellEdit&&(this.CellEditContext=e.cellEdit.createContext(l.default,s.default,this.isRemoteCellEdit,this.handleRemoteCellChange))}renderBase(){return(t,n,r,o,a,s)=>i.default.createElement(e,{ref:e=>{this.table=e},...this.props,...o,...n,...r,...a,...s,data:t.getData(n,r,o,a)})}renderWithColumnContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.ColumnContext.Provider,{...t,toggles:this.props.columnToggle?this.props.columnToggle.toggles:null},i.default.createElement(this.ColumnContext.Consumer,null,t=>e(n,r,o,a,s,t)))}renderWithSelectionContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.SelectionContext.Provider,{...t,ref:e=>{this.selectionContext=e},selectRow:this.props.selectRow,data:n.getData(r,o,a,s)},e(n,r,o,a,s))}renderWithRowExpandContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.RowExpandContext.Provider,{...t,ref:e=>{this.rowExpandContext=e},expandRow:this.props.expandRow,data:n.getData(r,o,a,s)},e(n,r,o,a,s))}renderWithPaginationContext(e){return(t,n,r,o)=>i.default.createElement(this.PaginationContext.Provider,{ref:e=>{this.paginationContext=e},pagination:this.props.pagination,data:t.getData(n,r,o),bootstrap4:this.props.bootstrap4,isRemotePagination:this.isRemotePagination,remoteEmitter:this.remoteEmitter,onDataSizeChange:this.props.onDataSizeChange,tableId:this.props.id},i.default.createElement(this.PaginationContext.Consumer,null,i=>e(t,n,r,o,i)))}renderWithSortContext(e,t){return(n,r,o)=>i.default.createElement(this.SortContext.Provider,{...t,ref:e=>{this.sortContext=e},defaultSorted:this.props.defaultSorted,defaultSortDirection:this.props.defaultSortDirection,sort:this.props.sort,data:n.getData(r,o)},i.default.createElement(this.SortContext.Consumer,null,t=>e(n,r,o,t)))}renderWithSearchContext(e,t){return(n,r)=>i.default.createElement(this.SearchContext.Provider,{...t,ref:e=>{this.searchContext=e},data:n.getData(r),searchText:this.props.search.searchText,dataChangeListener:this.props.dataChangeListener},i.default.createElement(this.SearchContext.Consumer,null,t=>e(n,r,t)))}renderWithFilterContext(e,t){return n=>i.default.createElement(this.FilterContext.Provider,{...t,ref:e=>{this.filterContext=e},data:n.getData(),filter:this.props.filter.options||{},dataChangeListener:this.props.dataChangeListener},i.default.createElement(this.FilterContext.Consumer,null,t=>e(n,t)))}renderWithCellEditContext(e,t){return n=>i.default.createElement(this.CellEditContext.Provider,{...t,ref:e=>{this.cellEditContext=e},selectRow:this.props.selectRow,cellEdit:this.props.cellEdit,data:n.getData()},e(n))}render(){const{keyField:e,columns:t,bootstrap4:n}=this.props,r={keyField:e,columns:t};let o=this.renderBase();return this.ColumnContext&&(o=this.renderWithColumnContext(o,r)),this.SelectionContext&&(o=this.renderWithSelectionContext(o,r)),this.RowExpandContext&&(o=this.renderWithRowExpandContext(o,r)),this.PaginationContext&&(o=this.renderWithPaginationContext(o)),this.SortContext&&(o=this.renderWithSortContext(o,r)),this.SearchContext&&(o=this.renderWithSearchContext(o,r)),this.FilterContext&&(o=this.renderWithFilterContext(o,r)),this.CellEditContext&&(o=this.renderWithCellEditContext(o,r)),i.default.createElement(u.BootstrapContext.Provider,{value:{bootstrap4:n}},i.default.createElement(this.DataContext.Provider,{...r,data:this.props.data},i.default.createElement(this.DataContext.Consumer,null,o)))}}},9435(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561),a=r(n(286)),s=r(n(1400));t.default=e=>{const{columns:t,onFilter:n,currFilters:r,filterPosition:l=i.FILTERS_POSITION_TOP,onExternalFilter:u,className:c,selectRow:d,expandRow:f}=e;return o.default.createElement("tbody",{className:c,style:{display:l===i.FILTERS_POSITION_TOP?"table-header-group":"table-footer-group"}},o.default.createElement(s.default,{renderContent:function(){const e=[];let i=!1;return t.forEach((t,s)=>{e.push(o.default.createElement(a.default,{index:s,key:t.dataField,column:t,currFilters:r,onExternalFilter:u,onFilter:n})),(t.filterRenderer||t.filter)&&(i||(i=!0))}),e},selectRow:d,expandRow:f,cellEl:"td"}))}},9459(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(7007)),i=n(5442),a=r(n(3955));t.default=e=>class extends i.Component{constructor(e){super(e),this.getNewestState=(e={})=>{let t,n,r,o,i,a={};return this.sortContext&&(t=this.sortContext.state.sortOrder,n=this.sortContext.state.sortColumn?this.sortContext.state.sortColumn.dataField:null),this.filterContext&&(a=this.filterContext.currFilters),this.paginationContext&&(r=this.paginationContext.currPage,o=this.paginationContext.currSizePerPage),this.searchContext&&(i=this.props.search.searchText),{sortOrder:t,sortField:n,filters:a,page:r,sizePerPage:o,searchText:i,...e,data:this.props.data}},this.isRemoteSearch=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.search||this.isRemotePagination()},this.isRemotePagination=(e={})=>{const{remote:t}=this.props;return e.result=!0===t||a.default.isObject(t)&&t.pagination,e.result},this.isRemoteFiltering=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.filter||this.isRemotePagination()},this.isRemoteSort=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.sort||this.isRemotePagination()},this.isRemoteCellEdit=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.cellEdit},this.handleRemotePageChange=(e,t)=>{this.props.onTableChange("pagination",this.getNewestState({page:e,sizePerPage:t}))},this.handleRemoteFilterChange=e=>{const t={filters:e};if(this.isRemotePagination()){const e=this.props.pagination.options||{};t.page=a.default.isDefined(e.pageStartIndex)?e.pageStartIndex:1}this.props.onTableChange("filter",this.getNewestState(t))},this.handleRemoteSortChange=(e,t)=>{this.props.onTableChange("sort",this.getNewestState({sortField:e,sortOrder:t}))},this.handleRemoteCellChange=(e,t,n)=>{const r={rowId:e,dataField:t,newValue:n};this.props.onTableChange("cellEdit",this.getNewestState({cellEdit:r}))},this.handleRemoteSearchChange=e=>{this.props.onTableChange("search",this.getNewestState({searchText:e}))},this.remoteEmitter=new o.default,this.remoteEmitter.on("paginationChange",this.handleRemotePageChange),this.remoteEmitter.on("isRemotePagination",this.isRemotePagination)}}},9603(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(5442);t.default=e=>class extends r.Component{visibleColumnSize(e=!0){let t;if(this.props.columnToggle&&this.props.columnToggle.toggles){const e=this.props.columnToggle.toggles;t=Object.keys(e).filter(t=>e[t]).length}else t=this.props.columns.filter(e=>!e.hidden).length;return e?(this.props.selectRow&&!this.props.selectRow.hideSelectColumn&&(t+=1),this.props.expandRow&&this.props.expandRow.showExpandColumn&&(t+=1),t):t}}}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var i=r[e]={exports:{}};return n[e].call(i.exports,i,i.exports,o),i.exports}return o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o(7723)})());
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL2Rpc3QvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLmpzIiwibWFwcGluZ3MiOiI7Q0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxTQUFVQSxRQUFRLGNBQzFCLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxRQUFTLGFBQWNKLEdBQ0wsaUJBQVpDLFFBQ2RBLFFBQStCLHNCQUFJRCxFQUFRRyxRQUFRLFNBQVVBLFFBQVEsY0FFckVKLEVBQTRCLHNCQUFJQyxFQUFRRCxFQUFZLE1BQUdBLEVBQWUsU0FDdkUsQ0FURCxDQVNHTyxLQUFNLENBQUNDLEVBQW1DQyxJLDBLQ1Q3QyxtQkFDQSxhQUNBLFVBVUEsTUFBTUMsVUFBa0IsVUFBTUMsVUFHNUIsV0FBQUMsQ0FBWUMsR0FDVkMsTUFBTUQsR0FDTkUsS0FBS0MsUUFBVSxVQUFNQyxXQUN2QixDQUVBLE1BQUFDLEdBQ0UsTUFBTSxTQUNKQyxFQUFRLFNBQ1JDLEdBQVcsRUFBSyxTQUNoQkMsRUFBUSxVQUNSQyxFQUFZLE1BQ1RDLEdBQ0RSLEtBQUtGLE1BRVQsT0FDRSxrQ0FDRSw4QkFBSVMsV0FBVyxhQUFHLHdCQUF5QkEsTUFBZ0JDLEdBQ3pELHdCQUFDLEVBQUFDLGNBQWEsQ0FDWkMsUUFBTSxFQUNOQyxHQUFJTixFQUNKTyxRQUFTLElBQ1RDLFdBQVcsbUJBQ1hDLFNBQVVSLEVBQ1ZMLFFBQVNELEtBQUtDLFNBRWQsK0JBQUtjLElBQUtmLEtBQUtDLFNBQ2IsK0JBQUtNLFVBQVUsdUJBQXVCSCxNQU1sRCxFQWlCRixVQUFlVCxDLCtKQ2hFZixtQkFDQSxhQUNBLFVBQ0EsVUEwQkEsVUFwQjRDLEVBQUdxQixZQUM3QyxNQUFNQyxHQUFhLGFBQUcsbUNBQW9DLENBQ3hEQyxPQUFRRixJQUFVLEVBQUFHLFdBR3BCLE9BQ0Usd0JBQUMsRUFBQUMsaUJBQWlCQyxTQUFR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QyxHQUFVQSxFQUFPZ2pDLFdBQzdCLElBQU9oakMsRUFBaUIsUUFDeEIsSUFBTSxFQUVQLE9BREEyaUMsRUFBb0JsMUIsRUFBRXMxQixFQUFRLENBQUUzd0IsRUFBRzJ3QixJQUM1QkEsR0NMUkosRUFBb0JsMUIsRUFBSSxDQUFDMU4sRUFBU2tqQyxLQUNqQyxJQUFJLElBQUk1OEIsS0FBTzQ4QixFQUNYTixFQUFvQnJZLEVBQUUyWSxFQUFZNThCLEtBQVNzOEIsRUFBb0JyWSxFQUFFdnFCLEVBQVNzRyxJQUM1RW1JLE9BQU9xckIsZUFBZTk1QixFQUFTc0csRUFBSyxDQUFFeXpCLFlBQVksRUFBTS8wQixJQUFLaytCLEVBQVc1OEIsTUNKM0VzOEIsRUFBb0Izc0IsRUFBSSxXQUN2QixHQUEwQixpQkFBZmt0QixXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU90aUMsTUFBUSxJQUFJc1YsU0FBUyxjQUFiLEVBQ2hCLENBQUUsTUFBT3hPLEdBQ1IsR0FBc0IsaUJBQVh5N0IsT0FBcUIsT0FBT0EsTUFDeEMsQ0FDQSxDQVB1QixHQ0F4QlIsRUFBb0JyWSxFQUFJLENBQUNwVyxFQUFLcUcsSUFBVS9MLE9BQU82RixVQUFVRCxlQUFlRSxLQUFLSixFQUFLcUcsR0NDbEZvb0IsRUFBb0IzWSxFQUFLanFCLElBQ0gsb0JBQVh3VyxRQUEwQkEsT0FBTzZzQixhQUMxQzUwQixPQUFPcXJCLGVBQWU5NUIsRUFBU3dXLE9BQU82c0IsWUFBYSxDQUFFdjJCLE1BQU8sV0FFN0QyQixPQUFPcXJCLGVBQWU5NUIsRUFBUyxhQUFjLENBQUU4TSxPQUFPLEtDRjdCODFCLEVBQW9CLEsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LWV4cGFuZC9leHBhbmQtcm93LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3NvcnQvY2FyZXQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L3Jvdy1zZWN0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2ZpbHRlcnMtY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3cvc2hvdWxkLXVwZGF0ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9yb3dzLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L2FnZ3JlZ2F0ZS1yb3cudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LWV4cGFuZC9leHBhbmQtY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9ib290c3RyYXAtdGFibGUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L3Jvdy10ZW1wbGF0ZS50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3N0b3JlL2V4cGFuZC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL3Jvdy1leHBhbmQtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jYXB0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NlbGwtZXZlbnQtZGVsZWdhdGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc29ydC9zeW1ib2wudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvdHlwZS50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9yb3ctcHVyZS1jb250ZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL2NvbHVtbi1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9zaW1wbGUtcm93LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL2RhdGEtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctc2VsZWN0aW9uL3Jvdy1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9zb3J0LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29udGV4dHMvYm9vdHN0cmFwLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9zZWxlY3Rpb24udHMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fc2V0dXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZXN0QXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc051bGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc1VuZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzQm9vbGVhbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL190YWdUZXN0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzTnVtYmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNEYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNSZWdFeHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0Vycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0FycmF5QnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19oYXNPYmplY3RUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fc3RyaW5nVGFnQnVnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNEYXRhVmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzTmFOLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fc2hhbGxvd1Byb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2dldEJ5dGVMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9faXNCdWZmZXJMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2dldExlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jb2xsZWN0Tm9uRW51bVByb3BzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRW1wdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc01hdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5kZXJzY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL190b0J1ZmZlclZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0VxdWFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvYWxsS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19tZXRob2RGaW5nZXJwcmludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNXZWFrTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc1dlYWtTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wYWlycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ludmVydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2Z1bmN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jcmVhdGVBc3NpZ25lci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2V4dGVuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2V4dGVuZE93bi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlZmF1bHRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RvUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL190b1BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fZGVlcEdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2dldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWF0Y2hlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3Byb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX29wdGltaXplQ2IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fYmFzZUl0ZXJhdGVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXRlcmF0ZWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY2IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9tYXBPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9ub29wLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcHJvcGVydHlPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RpbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmFuZG9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZUVzY2FwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fZXNjYXBlTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fdW5lc2NhcGVNYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZXN1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy91bmlxdWVJZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NoYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2V4ZWN1dGVCb3VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3BhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9iaW5kQWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWVtb2l6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlbGF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90aHJvdHRsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlYm91bmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvd3JhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL25lZ2F0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NvbXBvc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9hZnRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2JlZm9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL29uY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maW5kS2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZEluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZExhc3RJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NvcnRlZEluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZUluZGV4RmluZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2xhc3RJbmRleE9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZpbmRXaGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2VhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY3JlYXRlUmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVkdWNlUmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZWplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9ldmVyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ludm9rZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3BsdWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvd2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9tYXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9taW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90b0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvc2FtcGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvc2h1ZmZsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NvcnRCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19ncm91cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2dyb3VwQnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbmRleEJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY291bnRCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3BhcnRpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NpemUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fa2V5SW5PYmouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9waWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvb21pdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2luaXRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maXJzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3Jlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9sYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY29tcGFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9kaWZmZXJlbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvd2l0aG91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuaXEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy91bmlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ludGVyc2VjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuemlwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvemlwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jaHVuay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jaGFpblJlc3VsdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL21peGluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5kZXJzY29yZS1hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaW5kZXgtZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL3NvcnQtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9wcm9wcy1yZXNvbHZlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2hlYWRlci50c3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1leHBhbmQvcm93LWNvbnN1bWVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2JvZHkudHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL3JlbW92ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL3JlZmxvdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vQ1NTVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL2FkZENsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vaGFzQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL0NoaWxkTWFwcGluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1JlcGxhY2VUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9Td2l0Y2hUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGwtY29uc3VtZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29uc3QudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9vcGVyYXRvcnMudHMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3cvZXZlbnQtZGVsZWdhdGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvZm9vdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9mb290ZXItY2VsbC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvbXV0YXRlLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvaGVhZGVyLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29udGV4dHMvaW5kZXgudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvZmlsdGVycy50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9wcm9wcy1yZXNvbHZlci9yZW1vdGUtcmVzb2x2ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9wcm9wcy1yZXNvbHZlci9jb2x1bW4tcmVzb2x2ZXIudHMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1wiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0pO1xufSkoc2VsZiwgKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzU0NDJfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNjAwM19fKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDU1NUcmFuc2l0aW9uIH0gZnJvbSBcInJlYWN0LXRyYW5zaXRpb24tZ3JvdXBcIjtcblxuaW50ZXJmYWNlIEV4cGFuZFJvd1Byb3BzIHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgb25DbG9zZWQ/OiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbFNwYW46IG51bWJlcjtcbn1cblxuY2xhc3MgRXhwYW5kUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEV4cGFuZFJvd1Byb3BzPiB7XG4gIG5vZGVSZWY6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRXhwYW5kUm93UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5ub2RlUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBleHBhbmRlZCA9IGZhbHNlLFxuICAgICAgb25DbG9zZWQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3MoXCJyZXNldC1leHBhbnNpb24tc3R5bGVcIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PlxuICAgICAgICAgIDxDU1NUcmFuc2l0aW9uXG4gICAgICAgICAgICBhcHBlYXJcbiAgICAgICAgICAgIGluPXtleHBhbmRlZH1cbiAgICAgICAgICAgIHRpbWVvdXQ9ezQwMH1cbiAgICAgICAgICAgIGNsYXNzTmFtZXM9XCJyb3ctZXhwYW5kLXNsaWRlXCJcbiAgICAgICAgICAgIG9uRXhpdGVkPXtvbkNsb3NlZH1cbiAgICAgICAgICAgIG5vZGVSZWY9e3RoaXMubm9kZVJlZn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IHJlZj17dGhpcy5ub2RlUmVmfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3ctZXhwYW5zaW9uLXN0eWxlXCI+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cbi8vIEV4cGFuZFJvdy5wcm9wVHlwZXMgPSB7XG4vLyAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbi8vICAgZXhwYW5kZWQ6IFByb3BUeXBlcy5ib29sLFxuLy8gICBvbkNsb3NlZDogUHJvcFR5cGVzLmZ1bmMsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vIH07XG5cbi8vIEV4cGFuZFJvdy5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGNoaWxkcmVuOiBudWxsLFxuLy8gICBleHBhbmRlZDogZmFsc2UsXG4vLyAgIG9uQ2xvc2VkOiB1bmRlZmluZWQsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IEV4cGFuZFJvdztcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU09SVF9BU0MgfSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dHMvYm9vdHN0cmFwXCI7XG5cbmludGVyZmFjZSBTb3J0Q2FyZXRQcm9wcyB7XG4gIG9yZGVyOiBzdHJpbmc7XG59XG5cbmNvbnN0IFNvcnRDYXJldDogUmVhY3QuRkM8U29ydENhcmV0UHJvcHM+ID0gKHsgb3JkZXIgfSkgPT4ge1xuICBjb25zdCBvcmRlckNsYXNzID0gY3MoXCJyZWFjdC1ib290c3RyYXAtdGFibGUtc29ydC1vcmRlclwiLCB7XG4gICAgZHJvcHVwOiBvcmRlciA9PT0gU09SVF9BU0MsXG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHsgYm9vdHN0cmFwNCB9KSA9PlxuICAgICAgICBib290c3RyYXA0ID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGNhcmV0LTQtJHtvcmRlcn1gfSBkYXRhLXRlc3RpZD1cInNvcnQtY2FyZXRcIiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17b3JkZXJDbGFzc30gZGF0YS10ZXN0aWQ9XCJzb3J0LWNhcmV0XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApXG4gICAgICB9XG4gICAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU29ydENhcmV0O1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZDIH0gZnJvbSBcInJlYWN0XCI7XG5cbnR5cGUgUm93U2VjdGlvblByb3BzID0ge1xuICBjb250ZW50PzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb2xTcGFuPzogbnVtYmVyO1xufTtcblxuY29uc3QgUm93U2VjdGlvbjogRkM8Um93U2VjdGlvblByb3BzPiA9ICh7IGNvbnRlbnQgPSBudWxsLCBjb2xTcGFuID0gMSB9KSA9PiAoXG4gIDx0cj5cbiAgICA8dGRcbiAgICAgIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIlxuICAgICAgY29sU3Bhbj17IGNvbFNwYW4gfVxuICAgICAgY2xhc3NOYW1lPVwicmVhY3QtYnMtdGFibGUtbm8tZGF0YVwiXG4gICAgPlxuICAgICAge2NvbnRlbnR9XG4gICAgPC90ZD5cbiAgPC90cj5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFJvd1NlY3Rpb247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgRmlsdGVyUHJvcHMge1xuICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgRmlsdGVyOiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT47XG59XG5cbmludGVyZmFjZSBGaWx0ZXJzQ2VsbFByb3BzIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY29sdW1uOiB7XG4gICAgZmlsdGVyUmVuZGVyZXI/OiAoZmlsdGVySGFuZGxlcjogRnVuY3Rpb24sIGNvbHVtbjogYW55KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgZmlsdGVyPzogRmlsdGVyUHJvcHM7XG4gICAgaGVhZGVyQWxpZ24/OiBzdHJpbmcgfCBGdW5jdGlvbjtcbiAgICBkYXRhRmllbGQ6IHN0cmluZztcbiAgfTtcbiAgY3VyckZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbkZpbHRlcj86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiAoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+IEZ1bmN0aW9uO1xufVxuXG5jb25zdCBGaWx0ZXJzQ2VsbDogUmVhY3QuRkM8RmlsdGVyc0NlbGxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBpbmRleCwgY29sdW1uLCBjdXJyRmlsdGVycywgb25FeHRlcm5hbEZpbHRlciA9ICgpID0+IHt9LCBvbkZpbHRlciA9ICgpID0+IHt9IH0gPSBwcm9wcztcbiAgY29uc3QgeyBmaWx0ZXIgfSA9IGNvbHVtbjtcblxuICBsZXQgZmlsdGVyRWxtOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNvbnN0IGNlbGxBdHRyczogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+ID0ge307XG4gIGNvbnN0IGNlbGxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHt9O1xuXG4gIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICBpZiAoY29sdW1uLmhlYWRlckFsaWduKSB7XG4gICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihjb2x1bW4uaGVhZGVyQWxpZ24pXG4gICAgICA/IGNvbHVtbi5oZWFkZXJBbGlnbihjb2x1bW4sIGluZGV4KVxuICAgICAgOiBjb2x1bW4uaGVhZGVyQWxpZ247XG4gIH1cblxuICBpZiAoY29sdW1uLmZpbHRlclJlbmRlcmVyKSB7XG4gICAgY29uc3Qgb25DdXN0b21GaWx0ZXIgPSBvbkV4dGVybmFsRmlsdGVyKGNvbHVtbiwgZmlsdGVyPy5wcm9wcy50eXBlIHx8IFwiXCIpO1xuICAgIGZpbHRlckVsbSA9IGNvbHVtbi5maWx0ZXJSZW5kZXJlcihvbkN1c3RvbUZpbHRlciEsIGNvbHVtbik7XG4gIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgZmlsdGVyRWxtID0gKFxuICAgICAgPGZpbHRlci5GaWx0ZXJcbiAgICAgICAgey4uLmZpbHRlci5wcm9wc31cbiAgICAgICAgZmlsdGVyU3RhdGU9e2N1cnJGaWx0ZXJzIVtjb2x1bW4uZGF0YUZpZWxkXX1cbiAgICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGhcIiwgY2VsbEF0dHJzLCBmaWx0ZXJFbG0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyc0NlbGw7XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSb3dQcm9wcyB7XG4gIGNsaWNrVG9FZGl0Pzogc3RyaW5nO1xuICBkYmNsaWNrVG9FZGl0Pzogc3RyaW5nO1xuICBlZGl0YWJsZT86IGJvb2xlYW47XG4gIGVkaXRpbmdSb3dJZHg/OiBudW1iZXIgfCBudWxsO1xuICBlZGl0aW5nQ29sSWR4PzogbnVtYmVyO1xuICBFZGl0aW5nQ2VsbENvbXBvbmVudD86IGFueTtcbiAgdGFiSW5kZXhTdGFydD86IG51bWJlcjtcbiAgdGFiSW5kZXhDZWxsPzogYm9vbGVhbjtcbiAgcm93SW5kZXg/OiBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBhdHRycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGNvbHVtbnM/OiBhbnlbXTtcbiAgcm93PzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc2VsZWN0Um93PzogYW55O1xuICBzZWxlY3RlZD86IGJvb2xlYW47XG4gIHNlbGVjdGFibGU/OiBib29sZWFuO1xuICBleHBhbmRSb3c/OiBhbnk7XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgZXhwYW5kYWJsZT86IGJvb2xlYW47XG4gIHZpc2libGVDb2x1bW5TaXplPzogbnVtYmVyO1xuICBrZXlGaWVsZD86IHN0cmluZztcbiAgdmFsdWU/OiBhbnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJvd1Nob3VsZFVwZGF0ZXI8VCBleHRlbmRzIG5ldyguLi5hcmdzOiBhbnlbXSkgPT4gYW55PihcbiAgRXh0ZW5kQmFzZTogVFxuKSB7XG4gIHJldHVybiBjbGFzcyBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIHNob3VsZFVwZGF0ZUJ5Q2VsbEVkaXRpbmcobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgaWYgKCEodGhpcy5wcm9wcy5jbGlja1RvRWRpdCB8fCB0aGlzLnByb3BzLmRiY2xpY2tUb0VkaXQpKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBuZXh0UHJvcHMuZWRpdGluZ1Jvd0lkeCA9PT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICAgICh0aGlzLnByb3BzLmVkaXRpbmdSb3dJZHggPT09IG5leHRQcm9wcy5yb3dJbmRleCAmJlxuICAgICAgICAgIG5leHRQcm9wcy5lZGl0aW5nUm93SWR4ID09PSBudWxsKSB8fFxuICAgICAgICB0aGlzLnByb3BzLmVkaXRpbmdSb3dJZHggPT09IG5leHRQcm9wcy5yb3dJbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5wcm9wcy5jbGFzc05hbWUgIT09IG5leHRQcm9wcy5jbGFzc05hbWUgfHxcbiAgICAgICAgIV8uaXNFcXVhbCh0aGlzLnByb3BzLnN0eWxlLCBuZXh0UHJvcHMuc3R5bGUpIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5hdHRycywgbmV4dFByb3BzLmF0dHJzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHVzZSBmb3Igc2ltcGxlLXJvd1xuICAgIHNob3VsZFVwZGF0ZUJ5Q29sdW1uc0ZvclNpbXBsZUNoZWNrKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoICE9PSBuZXh0UHJvcHMuY29sdW1ucyEubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKCFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW5zW2ldLCBuZXh0UHJvcHMuY29sdW1ucyFbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzaG91bGRVcGRhdGVkQnlOb3JtYWxQcm9wcyhuZXh0UHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgICB0aGlzLnByb3BzLnJvd0luZGV4ICE9PSBuZXh0UHJvcHMucm93SW5kZXggfHxcbiAgICAgICAgdGhpcy5wcm9wcy5lZGl0YWJsZSAhPT0gbmV4dFByb3BzLmVkaXRhYmxlIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5yb3csIG5leHRQcm9wcy5yb3cpIHx8XG4gICAgICAgIHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggIT09IG5leHRQcm9wcy5jb2x1bW5zIS5sZW5ndGg7XG5cbiAgICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gICAgfVxuXG4gICAgc2hvdWxkVXBkYXRlQ2hpbGQobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVCeUNlbGxFZGl0aW5nKG5leHRQcm9wcykgfHxcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVkQnlOb3JtYWxQcm9wcyhuZXh0UHJvcHMpXG4gICAgICApO1xuICAgIH1cblxuICAgIHNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVDaGlsZChuZXh0UHJvcHMpIHx8XG4gICAgICAgIHRoaXMuc2hvdWxkVXBkYXRlQnlDb2x1bW5zRm9yU2ltcGxlQ2hlY2sobmV4dFByb3BzKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IG1hdGNoUm93ID0gKGtleUZpZWxkOiBhbnksIGlkOiBhbnkpID0+IChyb3c6IGFueSkgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkgPT09IGlkO1xuXG5leHBvcnQgY29uc3QgZ2V0Um93QnlSb3dJZCA9IChkYXRhOiBhbnksIGtleUZpZWxkOiBhbnksIGlkOiBhbnkpID0+IGRhdGEuZmluZChtYXRjaFJvdyhrZXlGaWVsZCwgaWQpKTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElORElDQVRPUl9QT1NJVElPTl9MRUZUIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgRXhwYW5kQ2VsbCBmcm9tIFwiLi4vcm93LWV4cGFuZC9leHBhbmQtY2VsbFwiO1xuaW1wb3J0IFNlbGVjdGlvbkNlbGwgZnJvbSBcIi4uL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWNlbGxcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgUm93RXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBSb3dQdXJlQ29udGVudCBmcm9tIFwiLi9yb3ctcHVyZS1jb250ZW50XCI7XG5pbXBvcnQgc2hvdWxkVXBkYXRlciwgeyBSb3dQcm9wcyB9IGZyb20gXCIuL3Nob3VsZC11cGRhdGVyXCI7XG5cbmNsYXNzIFJvd0FnZ3JlZ2F0b3IgZXh0ZW5kcyBzaG91bGRVcGRhdGVyKFJvd0V2ZW50RGVsZWdhdGVyKENvbXBvbmVudDxSb3dQcm9wcz4pKSB7XG4gIGNsaWNrTnVtOiBudW1iZXIgPSAwO1xuICBzaG91bGRVcGRhdGVSb3dDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIgPSB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0ZWQgIT09IG5leHRQcm9wcy5zZWxlY3RlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5leHBhbmRlZCAhPT0gbmV4dFByb3BzLmV4cGFuZGVkIHx8XG4gICAgICB0aGlzLnByb3BzLmV4cGFuZGFibGUgIT09IG5leHRQcm9wcy5leHBhbmRhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGFibGUgIT09IG5leHRQcm9wcy5zZWxlY3RhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uICE9PVxuICAgICAgbmV4dFByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uIHx8XG4gICAgICB0aGlzLnNob3VsZFVwZGF0ZWRCeVNlbGZQcm9wcyhuZXh0UHJvcHMpXG4gICAgKSB7XG4gICAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSB0aGlzLnNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSB0aGlzLnNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzKTtcblxuICAgIHJldHVybiB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQ7XG4gIH1cblxuICBpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHBvc2l0aW9uID0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcG9zaXRpb24gPT09IElORElDQVRPUl9QT1NJVElPTl9MRUZUO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc3R5bGUsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBhdHRycyxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGV4cGFuZGVkLFxuICAgICAgZXhwYW5kYWJsZSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgc2VsZWN0YWJsZSxcbiAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgIGNvbnN0IHsgaGlkZVNlbGVjdENvbHVtbiwgc2VsZWN0Q29sdW1uUG9zaXRpb24sIGNsaWNrVG9TZWxlY3QgfSA9IHNlbGVjdFJvdztcbiAgICBjb25zdCB7IHNob3dFeHBhbmRDb2x1bW4gPSB1bmRlZmluZWQsIGV4cGFuZENvbHVtblBvc2l0aW9uID0gdW5kZWZpbmVkIH0gPVxuICAgICAgZXhwYW5kUm93ID8/IHt9O1xuXG4gICAgY29uc3QgbmV3QXR0cnMgPSB0aGlzLmRlbGVnYXRlKHsgLi4uYXR0cnMgfSk7XG4gICAgaWYgKGNsaWNrVG9TZWxlY3QgfHwgKGV4cGFuZFJvdyAmJiAhIWV4cGFuZFJvdy5yZW5kZXJlcikpIHtcbiAgICAgIG5ld0F0dHJzLm9uQ2xpY2sgPSB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyKG5ld0F0dHJzLm9uQ2xpY2spO1xuICAgIH1cblxuICAgIGxldCB0YWJJbmRleFN0YXJ0ID0gcm93SW5kZXghICogdmlzaWJsZUNvbHVtblNpemUhICsgMTtcblxuICAgIGNvbnN0IGNoaWxkcmVucyA9IFtcbiAgICAgIDxSb3dQdXJlQ29udGVudFxuICAgICAgICBrZXk9XCJyb3dcIlxuICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAga2V5RmllbGQ9e2tleUZpZWxkfVxuICAgICAgICByb3dJbmRleD17cm93SW5kZXh9XG4gICAgICAgIHNob3VsZFVwZGF0ZT17dGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50fVxuICAgICAgICB0YWJJbmRleFN0YXJ0PXt0YWJJbmRleENlbGwgPyB0YWJJbmRleFN0YXJ0IDogLTF9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgLz4sXG4gICAgXTtcblxuICAgIGlmICghaGlkZVNlbGVjdENvbHVtbikge1xuICAgICAgY29uc3Qgc2VsZWN0Q2VsbCA9IChcbiAgICAgICAgPFNlbGVjdGlvbkNlbGxcbiAgICAgICAgICB7Li4uc2VsZWN0Um93fVxuICAgICAgICAgIGtleT1cInNlbGVjdGlvbi1jZWxsXCJcbiAgICAgICAgICByb3dLZXk9e2tleX1cbiAgICAgICAgICByb3dJbmRleD17cm93SW5kZXh9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkfVxuICAgICAgICAgIGRpc2FibGVkPXshc2VsZWN0YWJsZX1cbiAgICAgICAgICB0YWJJbmRleD17dGFiSW5kZXhDZWxsID8gKHRhYkluZGV4U3RhcnQgKz0gMSkgOiAtMX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHNlbGVjdENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgICBjaGlsZHJlbnMudW5zaGlmdChzZWxlY3RDZWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVucy5wdXNoKHNlbGVjdENlbGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgICBjb25zdCBleHBhbmRDZWxsID0gKFxuICAgICAgICA8RXhwYW5kQ2VsbFxuICAgICAgICAgIHsuLi5leHBhbmRSb3d9XG4gICAgICAgICAga2V5PVwiZXhwYW5kLWNlbGxcIlxuICAgICAgICAgIHJvd0tleT17a2V5fVxuICAgICAgICAgIHJvd0luZGV4PXtyb3dJbmRleH1cbiAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgZXhwYW5kYWJsZT17ZXhwYW5kYWJsZX1cbiAgICAgICAgICB0YWJJbmRleD17dGFiSW5kZXhDZWxsID8gKHRhYkluZGV4U3RhcnQgKz0gMSkgOiAtMX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KGV4cGFuZENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgICBjaGlsZHJlbnMudW5zaGlmdChleHBhbmRDZWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVucy5wdXNoKGV4cGFuZENlbGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dHIgc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gey4uLm5ld0F0dHJzfT5cbiAgICAgICAge2NoaWxkcmVuc31cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3dBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgTW91c2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgRXhwYW5kQ2VsbFByb3BzIHtcbiAgcm93S2V5OiBhbnk7XG4gIGV4cGFuZGVkOiBib29sZWFuO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBvblJvd0V4cGFuZDogKFxuICAgIHJvd0tleTogYW55LFxuICAgIGV4cGFuZGVkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgZTogTW91c2VFdmVudFxuICApID0+IHZvaWQ7XG4gIGV4cGFuZENvbHVtblJlbmRlcmVyPzogKHBhcmFtczoge1xuICAgIGV4cGFuZGFibGU6IGJvb2xlYW47XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgcm93S2V5OiBhbnk7XG4gIH0pID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgcm93SW5kZXg/OiBudW1iZXI7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbmRDZWxsIGV4dGVuZHMgQ29tcG9uZW50PEV4cGFuZENlbGxQcm9wcz4ge1xuICBoYW5kbGVDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB7IHJvd0tleSwgZXhwYW5kZWQsIG9uUm93RXhwYW5kLCByb3dJbmRleCB9ID0gdGhpcy5wcm9wcztcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIG9uUm93RXhwYW5kKHJvd0tleSwgIWV4cGFuZGVkLCByb3dJbmRleCwgZSk7XG4gIH07XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogRXhwYW5kQ2VsbFByb3BzKSB7XG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIHRoaXMucHJvcHMucm93SW5kZXggIT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5leHBhbmRlZCAhPT0gbmV4dFByb3BzLmV4cGFuZGVkIHx8XG4gICAgICB0aGlzLnByb3BzLnJvd0tleSAhPT0gbmV4dFByb3BzLnJvd0tleSB8fFxuICAgICAgdGhpcy5wcm9wcy50YWJJbmRleCAhPT0gbmV4dFByb3BzLnRhYkluZGV4O1xuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGV4cGFuZGVkLCBleHBhbmRhYmxlLCBleHBhbmRDb2x1bW5SZW5kZXJlciwgdGFiSW5kZXgsIHJvd0tleSB9ID1cbiAgICAgIHRoaXMucHJvcHM7XG4gICAgY29uc3QgYXR0cnM6IHsgdGFiSW5kZXg/OiBudW1iZXIgfSA9IHt9O1xuICAgIGlmICh0YWJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhYkluZGV4ICE9PSAtMSkgYXR0cnMudGFiSW5kZXggPSB0YWJJbmRleDtcblxuICAgIHJldHVybiAoXG4gICAgICA8dGQgY2xhc3NOYW1lPVwiZXhwYW5kLWNlbGxcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBkYXRhLXRlc3RpZD1cImV4cGFuZC1jZWxsXCIgey4uLmF0dHJzfT5cbiAgICAgICAge2V4cGFuZENvbHVtblJlbmRlcmVyXG4gICAgICAgICAgPyBleHBhbmRDb2x1bW5SZW5kZXJlcih7XG4gICAgICAgICAgICBleHBhbmRhYmxlLFxuICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICByb3dLZXlcbiAgICAgICAgICB9KVxuICAgICAgICAgIDogZXhwYW5kYWJsZVxuICAgICAgICAgICAgPyBleHBhbmRlZFxuICAgICAgICAgICAgICA/IFwiKC0pXCJcbiAgICAgICAgICAgICAgOiBcIigrKVwiXG4gICAgICAgICAgICA6IFwiXCJ9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQge1xuICBCb290c3RyYXBUYWJsZVByb3BzLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG5pbXBvcnQge1xuICBGSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgUk9XX1NFTEVDVF9ESVNBQkxFRCxcbn0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCBCb2R5IGZyb20gXCIuL2JvZHlcIjtcbmltcG9ydCBDYXB0aW9uIGZyb20gXCIuL2NhcHRpb25cIjtcbmltcG9ydCBGaWx0ZXJzIGZyb20gXCIuL2ZpbHRlcnNcIjtcbmltcG9ydCBGb290ZXIgZnJvbSBcIi4vZm9vdGVyXCI7XG5pbXBvcnQgSGVhZGVyIGZyb20gXCIuL2hlYWRlclwiO1xuaW1wb3J0IFByb3BzQmFzZVJlc29sdmVyIGZyb20gXCIuL3Byb3BzLXJlc29sdmVyXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jbGFzcyBCb290c3RyYXBUYWJsZSBleHRlbmRzIFByb3BzQmFzZVJlc29sdmVyKFxuICBSZWFjdC5Db21wb25lbnQ8Qm9vdHN0cmFwVGFibGVQcm9wcz5cbikge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogQm9vdHN0cmFwVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMudmFsaWRhdGVQcm9wcygpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogQm9vdHN0cmFwVGFibGVQcm9wcykge1xuICAgIGlmIChuZXh0UHJvcHMub25EYXRhU2l6ZUNoYW5nZSAmJiAhbmV4dFByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuZGF0YS5sZW5ndGggIT09IHRoaXMucHJvcHMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgbmV4dFByb3BzLm9uRGF0YVNpemVDaGFuZ2UoeyBkYXRhU2l6ZTogdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBFeHBvc2VkIEFQSXNcbiAgZ2V0RGF0YSA9ICgpID0+IHRoaXMudmlzaWJsZVJvd3MoKTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBsb2FkaW5nLCBvdmVybGF5IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChvdmVybGF5KSB7XG4gICAgICBjb25zdCBMb2FkaW5nT3ZlcmxheSA9IG92ZXJsYXkobG9hZGluZyEpO1xuICAgICAgcmV0dXJuIDxMb2FkaW5nT3ZlcmxheT57dGhpcy5yZW5kZXJUYWJsZSgpfTwvTG9hZGluZ092ZXJsYXk+O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUYWJsZSgpO1xuICB9XG5cbiAgcmVuZGVyVGFibGUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1ucyxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgaWQsXG4gICAgICBjbGFzc2VzLFxuICAgICAgYm9vdHN0cmFwNCA9IGZhbHNlLFxuICAgICAgc3RyaXBlZCA9IGZhbHNlLFxuICAgICAgaG92ZXIgPSBmYWxzZSxcbiAgICAgIGJvcmRlcmVkID0gdHJ1ZSxcbiAgICAgIGNvbmRlbnNlZCA9IGZhbHNlLFxuICAgICAgbm9EYXRhSW5kaWNhdGlvbiA9IG51bGwsXG4gICAgICBjYXB0aW9uLFxuICAgICAgcm93U3R5bGUsXG4gICAgICByb3dDbGFzc2VzLFxuICAgICAgd3JhcHBlckNsYXNzZXMsXG4gICAgICByb3dFdmVudHMsXG4gICAgICBzZWxlY3RSb3cgPSB7XG4gICAgICAgIG1vZGU6IFJPV19TRUxFQ1RfRElTQUJMRUQsXG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgaGlkZVNlbGVjdENvbHVtbjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBleHBhbmRSb3cgPSB7XG4gICAgICAgIHJlbmRlcmVyOiB1bmRlZmluZWQsXG4gICAgICAgIGV4cGFuZGVkOiBbXSxcbiAgICAgICAgbm9uRXhwYW5kYWJsZTogW10sXG4gICAgICB9LFxuICAgICAgY2VsbEVkaXQgPSB7XG4gICAgICAgIG1vZGU6IG51bGwsXG4gICAgICAgIG5vbkVkaXRhYmxlUm93czogW10sXG4gICAgICB9LFxuICAgICAgZmlsdGVyUG9zaXRpb24gPSBGSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHRhYmxlV3JhcHBlckNsYXNzID0gY3MoXCJyZWFjdC1ib290c3RyYXAtdGFibGVcIiwgd3JhcHBlckNsYXNzZXMpO1xuXG4gICAgY29uc3QgdGFibGVDbGFzcyA9IGNzKFxuICAgICAgXCJ0YWJsZVwiLFxuICAgICAge1xuICAgICAgICBcInRhYmxlLXN0cmlwZWRcIjogc3RyaXBlZCxcbiAgICAgICAgXCJ0YWJsZS1ob3ZlclwiOiBob3ZlcixcbiAgICAgICAgXCJ0YWJsZS1ib3JkZXJlZFwiOiBib3JkZXJlZCxcbiAgICAgICAgW2Jvb3RzdHJhcDQgPyBcInRhYmxlLXNtXCIgOiBcInRhYmxlLWNvbmRlbnNlZFwiXTogY29uZGVuc2VkLFxuICAgICAgfSxcbiAgICAgIGNsYXNzZXNcbiAgICApO1xuXG4gICAgY29uc3QgaGFzRmlsdGVycyA9IGNvbHVtbnMuc29tZShcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmZpbHRlciB8fCBjb2wuZmlsdGVyUmVuZGVyZXJcbiAgICApO1xuXG4gICAgY29uc3QgaGFzRm9vdGVyID1cbiAgICAgIF8uZmlsdGVyKGNvbHVtbnMsIChjb2wpID0+IF8uaGFzKGNvbCwgXCJmb290ZXJcIikpLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zdCB0YWJsZUNhcHRpb24gPSBjYXB0aW9uICYmIChcbiAgICAgIDxDYXB0aW9uIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9PntjYXB0aW9ufTwvQ2FwdGlvbj5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0YWJsZVdyYXBwZXJDbGFzc30+XG4gICAgICAgIDx0YWJsZSBpZD17aWR9IGNsYXNzTmFtZT17dGFibGVDbGFzc30+XG4gICAgICAgICAge3RhYmxlQ2FwdGlvbn1cbiAgICAgICAgICA8SGVhZGVyXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmhlYWRlckNsYXNzZXN9XG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3Nlcz17dGhpcy5wcm9wcy5oZWFkZXJXcmFwcGVyQ2xhc3Nlc31cbiAgICAgICAgICAgIHNvcnRGaWVsZD17dGhpcy5wcm9wcy5zb3J0RmllbGR9XG4gICAgICAgICAgICBzb3J0T3JkZXI9e3RoaXMucHJvcHMuc29ydE9yZGVyfVxuICAgICAgICAgICAgb25Tb3J0PXt0aGlzLnByb3BzLm9uU29ydH1cbiAgICAgICAgICAgIGdsb2JhbFNvcnRDYXJldD17dGhpcy5wcm9wcy5zb3J0ICYmIHRoaXMucHJvcHMuc29ydC5zb3J0Q2FyZXR9XG4gICAgICAgICAgICBvbkZpbHRlcj17dGhpcy5wcm9wcy5vbkZpbHRlcn1cbiAgICAgICAgICAgIGN1cnJGaWx0ZXJzPXt0aGlzLnByb3BzLmN1cnJGaWx0ZXJzfVxuICAgICAgICAgICAgb25FeHRlcm5hbEZpbHRlcj17dGhpcy5wcm9wcy5vbkV4dGVybmFsRmlsdGVyfVxuICAgICAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgICAgICBleHBhbmRSb3c9e2V4cGFuZFJvd31cbiAgICAgICAgICAgIGZpbHRlclBvc2l0aW9uPXtmaWx0ZXJQb3NpdGlvbn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtoYXNGaWx0ZXJzICYmIGZpbHRlclBvc2l0aW9uICE9PSBGSUxURVJTX1BPU0lUSU9OX0lOTElORSAmJiAoXG4gICAgICAgICAgICA8RmlsdGVyc1xuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuZmlsdGVyc0NsYXNzZXN9XG4gICAgICAgICAgICAgIG9uU29ydD17dGhpcy5wcm9wcy5vblNvcnR9XG4gICAgICAgICAgICAgIG9uRmlsdGVyPXt0aGlzLnByb3BzLm9uRmlsdGVyfVxuICAgICAgICAgICAgICBjdXJyRmlsdGVycz17dGhpcy5wcm9wcy5jdXJyRmlsdGVyc31cbiAgICAgICAgICAgICAgZmlsdGVyUG9zaXRpb249e3RoaXMucHJvcHMuZmlsdGVyUG9zaXRpb259XG4gICAgICAgICAgICAgIG9uRXh0ZXJuYWxGaWx0ZXI9e3RoaXMucHJvcHMub25FeHRlcm5hbEZpbHRlcn1cbiAgICAgICAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxCb2R5XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuYm9keUNsYXNzZXN9XG4gICAgICAgICAgICBkYXRhPXt0aGlzLmdldERhdGEoKX1cbiAgICAgICAgICAgIGtleUZpZWxkPXtrZXlGaWVsZH1cbiAgICAgICAgICAgIHRhYkluZGV4Q2VsbD17dGFiSW5kZXhDZWxsfVxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIGlzRW1wdHk9e3RoaXMuaXNFbXB0eSgpfVxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblNpemU9e3RoaXMudmlzaWJsZUNvbHVtblNpemUoKX1cbiAgICAgICAgICAgIG5vRGF0YUluZGljYXRpb249e25vRGF0YUluZGljYXRpb259XG4gICAgICAgICAgICBjZWxsRWRpdD17Y2VsbEVkaXR9XG4gICAgICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICAgICAgcm93U3R5bGU9e3Jvd1N0eWxlfVxuICAgICAgICAgICAgcm93Q2xhc3Nlcz17cm93Q2xhc3Nlc31cbiAgICAgICAgICAgIHJvd0V2ZW50cz17cm93RXZlbnRzfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2hhc0Zvb3RlciAmJiAoXG4gICAgICAgICAgICA8Rm9vdGVyXG4gICAgICAgICAgICAgIGRhdGE9e3RoaXMuZ2V0RGF0YSgpfVxuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgICAgICAgZXhwYW5kUm93PXtleHBhbmRSb3d9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5mb290ZXJDbGFzc2VzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb290c3RyYXBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgU2VsZWN0Um93UHJvcHMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IElORElDQVRPUl9QT1NJVElPTl9MRUZUIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5kUm93IHtcbiAgc2hvd0V4cGFuZENvbHVtbj86IGJvb2xlYW47XG4gIGV4cGFuZENvbHVtblBvc2l0aW9uPzogc3RyaW5nO1xuICBub25FeHBhbmRhYmxlPzogYW55W107XG59XG5cbmludGVyZmFjZSBSb3dUZW1wbGF0ZVByb3BzIHtcbiAgcmVuZGVyQ29udGVudDogKCkgPT4gYW55O1xuICBjZWxsRWw6IHN0cmluZztcbiAgc2VsZWN0Um93PzogU2VsZWN0Um93UHJvcHM8YW55PiB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kUm93PzogRXhwYW5kUm93O1xuICBba2V5OiBzdHJpbmddOiBhbnk7IC8vIEZvciBhbnkgb3RoZXIgcHJvcHMgeW91IG1pZ2h0IGhhdmVcbn1cblxuY29uc3QgUm93VGVtcGxhdGU6IFJlYWN0LkZDPFJvd1RlbXBsYXRlUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgcmVuZGVyQ29udGVudCwgc2VsZWN0Um93LCBleHBhbmRSb3csIGNlbGxFbCwgLi4ucmVzdCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdCA9IChcbiAgICBwb3NpdGlvbjogc3RyaW5nID0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlRcbiAgKTogYm9vbGVhbiA9PiBwb3NpdGlvbiA9PT0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQ7XG5cbiAgY29uc3QgY2hpbGRyZW5zID0gcmVuZGVyQ29udGVudCgpIHx8IFtdO1xuXG4gIGlmIChzZWxlY3RSb3cgJiYgc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4gIT09IHRydWUpIHtcbiAgICBpZiAoaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChzZWxlY3RSb3cuc2VsZWN0Q29sdW1uUG9zaXRpb24pKSB7XG4gICAgICBjaGlsZHJlbnMudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwic2VsZWN0aW9uXCIgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbnMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwic2VsZWN0aW9uXCIgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleHBhbmRSb3cgJiYgZXhwYW5kUm93LnNob3dFeHBhbmRDb2x1bW4pIHtcbiAgICBpZiAoaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChleHBhbmRSb3cuZXhwYW5kQ29sdW1uUG9zaXRpb24pKSB7XG4gICAgICBjaGlsZHJlbnMudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwiZXhwYW5zaW9uXCIgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbnMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwiZXhwYW5zaW9uXCIgfSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiA8dHIgey4uLnJlc3R9PntjaGlsZHJlbnN9PC90cj47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3dUZW1wbGF0ZTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIE1vdXNlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJPV19TRUxFQ1RfU0lOR0xFIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dHMvYm9vdHN0cmFwXCI7XG5cbmludGVyZmFjZSBTZWxlY3Rpb25DZWxsUHJvcHMge1xuICBtb2RlPzogc3RyaW5nO1xuICByb3dLZXk6IGFueTtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIG9uUm93U2VsZWN0PzogKFxuICAgIHJvd0tleTogYW55LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBNb3VzZUV2ZW50XG4gICkgPT4gdm9pZDtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByb3dJbmRleD86IG51bWJlcjtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGNsaWNrVG9TZWxlY3Q/OiBib29sZWFuO1xuICBzZWxlY3Rpb25SZW5kZXJlcj86IChhcmdzOiB7XG4gICAgbW9kZTogc3RyaW5nO1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHJvd2luZGV4PzogbnVtYmVyO1xuICAgIHJvd2tleTogYW55O1xuICB9KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNlbGVjdENvbHVtblN0eWxlPzpcbiAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gIHwgKChhcmdzOiB7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgcm93aW5kZXg/OiBudW1iZXI7XG4gICAgcm93a2V5OiBhbnk7XG4gIH0pID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3Rpb25DZWxsIGV4dGVuZHMgQ29tcG9uZW50PFNlbGVjdGlvbkNlbGxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogU2VsZWN0aW9uQ2VsbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBTZWxlY3Rpb25DZWxsUHJvcHMpIHtcbiAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgdGhpcy5wcm9wcy5yb3dJbmRleCAhPT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGVkICE9PSBuZXh0UHJvcHMuc2VsZWN0ZWQgfHxcbiAgICAgIHRoaXMucHJvcHMuZGlzYWJsZWQgIT09IG5leHRQcm9wcy5kaXNhYmxlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5yb3dLZXkgIT09IG5leHRQcm9wcy5yb3dLZXkgfHxcbiAgICAgIHRoaXMucHJvcHMudGFiSW5kZXggIT09IG5leHRQcm9wcy50YWJJbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RDb2x1bW5TdHlsZSAhPT0gbmV4dFByb3BzLnNlbGVjdENvbHVtblN0eWxlO1xuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKGU6IE1vdXNlRXZlbnQ8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KSB7XG4gICAgY29uc3Qge1xuICAgICAgbW9kZTogaW5wdXRUeXBlLFxuICAgICAgcm93S2V5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBvblJvd1NlbGVjdCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgcm93SW5kZXggPSAtMSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2hlY2tlZCA9IGlucHV0VHlwZSA9PT0gUk9XX1NFTEVDVF9TSU5HTEUgPyB0cnVlIDogIXNlbGVjdGVkO1xuXG4gICAgb25Sb3dTZWxlY3QhKHJvd0tleSwgY2hlY2tlZCwgcm93SW5kZXgsIGUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd0tleSxcbiAgICAgIG1vZGU6IGlucHV0VHlwZSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICB0YWJJbmRleCA9IC0xLFxuICAgICAgcm93SW5kZXgsXG4gICAgICBzZWxlY3Rpb25SZW5kZXJlcixcbiAgICAgIHNlbGVjdENvbHVtblN0eWxlLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgYXR0cnM6IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNlbGxFbGVtZW50PiA9IHt9O1xuICAgIGlmICh0YWJJbmRleCAhPT0gLTEpIGF0dHJzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG5cbiAgICBhdHRycy5zdHlsZSA9IChfLmlzRnVuY3Rpb24oc2VsZWN0Q29sdW1uU3R5bGUpXG4gICAgICA/IHNlbGVjdENvbHVtblN0eWxlKHtcbiAgICAgICAgY2hlY2tlZDogc2VsZWN0ZWQsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByb3dpbmRleDogcm93SW5kZXgsXG4gICAgICAgIHJvd2tleTogcm93S2V5LFxuICAgICAgfSlcbiAgICAgIDogc2VsZWN0Q29sdW1uU3R5bGUpIGFzIGFueTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Qm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IGJvb3RzdHJhcDQgfSkgPT4gKFxuICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJzZWxlY3Rpb24tY2VsbFwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9IGRhdGEtdGVzdGlkPVwic2VsZWN0aW9uLWNlbGxcIiB7Li4uYXR0cnMgYXMgYW55fT5cbiAgICAgICAgICAgIHtzZWxlY3Rpb25SZW5kZXJlciA/IChcbiAgICAgICAgICAgICAgc2VsZWN0aW9uUmVuZGVyZXIoe1xuICAgICAgICAgICAgICAgIG1vZGU6IGlucHV0VHlwZSEsXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJvd2luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICByb3drZXk6IHJvd0tleSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9e2lucHV0VHlwZX1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgPz8gZmFsc2V9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtib290c3RyYXA0ID8gXCJzZWxlY3Rpb24taW5wdXQtNFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4geyB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICApfVxuICAgICAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gXCIuL3Jvd3NcIjtcblxuZXhwb3J0IGNvbnN0IGlzQW55RXhwYW5kcyA9IChcbiAgZGF0YTogYW55LFxuICBrZXlGaWVsZDogYW55LFxuICBleHBhbmRlZDogYW55W10gPSBbXVxuKSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IHJvd0tleSA9IF8uZ2V0KGRhdGFbaV0sIGtleUZpZWxkKTtcbiAgICBpZiAodHlwZW9mIGV4cGFuZGVkLmZpbmQoeCA9PiB4ID09PSByb3dLZXkpICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cGFuZGFibGVLZXlzID0gKGRhdGE6IGFueSwga2V5RmllbGQ6IGFueSwgc2tpcHM6IGFueVtdID0gW10pID0+IHtcbiAgaWYgKHNraXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkYXRhLm1hcCgocm93OiBhbnkpID0+IF8uZ2V0KHJvdywga2V5RmllbGQpKTtcbiAgfVxuICByZXR1cm4gZGF0YVxuICAgIC5maWx0ZXIoKHJvdzogYW55KSA9PiAhXy5jb250YWlucyhza2lwcywgXy5nZXQocm93LCBrZXlGaWVsZCkpKVxuICAgIC5tYXAoKHJvdzogYW55KSA9PiBfLmdldChyb3csIGtleUZpZWxkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRSb3dzID0gKGRhdGE6IGFueSwga2V5RmllbGQ6IGFueSwgZXhwYW5kZWQ6IGFueSkgPT5cbiAgZXhwYW5kZWQubWFwKChrOiBhbnkpID0+IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIGspKTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGRhdGFPcGVyYXRvciBmcm9tIFwiLi4vc3RvcmUvb3BlcmF0b3JzXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIFJvd0V4cGFuZFByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBkYXRhOiBhbnlbXTtcbiAga2V5RmllbGQ6IHN0cmluZztcbiAgZXhwYW5kUm93OiB7XG4gICAgZXhwYW5kZWQ/OiBhbnlbXTtcbiAgICBpc0Nsb3Npbmc/OiBhbnlbXTtcbiAgICBvbkV4cGFuZD86IChyb3c6IGFueSwgZXhwYW5kZWQ6IGJvb2xlYW4sIHJvd0luZGV4OiBudW1iZXIsIGU6IGFueSkgPT4gdm9pZDtcbiAgICBvbkV4cGFuZEFsbD86IChleHBhbmRBbGw6IGJvb2xlYW4sIGV4cGFuZGVkUm93czogYW55W10sIGU6IGFueSkgPT4gdm9pZDtcbiAgICBvbmx5T25lRXhwYW5kaW5nPzogYm9vbGVhbjtcbiAgICBub25FeHBhbmRhYmxlPzogYW55W107XG4gICAgcmVuZGVyZXI/OiAoKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvd0V4cGFuZENvbnRleHRWYWx1ZSB7XG4gIGV4cGFuZGVkOiBhbnlbXTtcbiAgaXNDbG9zaW5nOiBhbnlbXTtcbiAgbm9uRXhwYW5kYWJsZT86IGFueVtdO1xuICBvbkNsb3NlZDogKGNsb3NlZFJvdzogYW55KSA9PiB2b2lkO1xuICBpc0FueUV4cGFuZHM6IGJvb2xlYW47XG4gIG9uUm93RXhwYW5kOiAoXG4gICAgcm93S2V5OiBhbnksXG4gICAgZXhwYW5kZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiB2b2lkO1xuICBvbkFsbFJvd0V4cGFuZDogKGU6IGFueSwgZXhwYW5kQWxsOiBib29sZWFuKSA9PiB2b2lkO1xuICBvbkV4cGFuZD86IChyb3c6IGFueSwgZXhwYW5kZWQ6IGJvb2xlYW4sIHJvd0luZGV4OiBudW1iZXIsIGU6IGFueSkgPT4gdm9pZDtcbiAgb25FeHBhbmRBbGw/OiAoZXhwYW5kQWxsOiBib29sZWFuLCBleHBhbmRlZFJvd3M6IGFueVtdLCBlOiBhbnkpID0+IHZvaWQ7XG4gIG9ubHlPbmVFeHBhbmRpbmc/OiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0Um93RXhwYW5kQ29udGV4dCA9IHtcbiAgZXhwYW5kZWQ6IFtdLFxuICBpc0Nsb3Npbmc6IFtdLFxuICBvbkNsb3NlZDogKCkgPT4ge30sXG4gIGlzQW55RXhwYW5kczogZmFsc2UsXG4gIG9uUm93RXhwYW5kOiAoKSA9PiB7fSxcbiAgb25BbGxSb3dFeHBhbmQ6ICgpID0+IHt9LFxufTtcbmNvbnN0IFJvd0V4cGFuZENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFJvd0V4cGFuZENvbnRleHRWYWx1ZT4oXG4gIGRlZmF1bHRSb3dFeHBhbmRDb250ZXh0XG4pO1xuXG5jbGFzcyBSb3dFeHBhbmRQcm92aWRlciBleHRlbmRzIENvbXBvbmVudDxSb3dFeHBhbmRQcm92aWRlclByb3BzPiB7XG4gIHN0YXRlID0ge1xuICAgIGV4cGFuZGVkOiB0aGlzLnByb3BzLmV4cGFuZFJvdy5leHBhbmRlZCB8fCBbXSxcbiAgICBpc0Nsb3Npbmc6IHRoaXMucHJvcHMuZXhwYW5kUm93LmlzQ2xvc2luZyB8fCBbXSxcbiAgfTtcblxuICBvbkNsb3NlZCA9IChjbG9zZWRSb3c6IGFueSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNDbG9zaW5nOiB0aGlzLnN0YXRlLmlzQ2xvc2luZy5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gY2xvc2VkUm93KSxcbiAgICB9KTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgIG5leHRQcm9wczogUm93RXhwYW5kUHJvdmlkZXJQcm9wcyxcbiAgICBwcmV2U3RhdGU6IHsgZXhwYW5kZWQ6IGFueVtdOyBpc0Nsb3Npbmc6IGFueVtdIH1cbiAgKSB7XG4gICAgY29uc3QgeyBleHBhbmRSb3cgfSA9IG5leHRQcm9wcztcblxuICAgIGlmIChleHBhbmRSb3cpIHtcbiAgICAgIGNvbnN0IHsgbm9uRXhwYW5kYWJsZSA9IFtdIH0gPSBleHBhbmRSb3c7XG5cbiAgICAgIGxldCBuZXh0RXhwYW5kZWQgPSBbLi4uKGV4cGFuZFJvdy5leHBhbmRlZCB8fCBwcmV2U3RhdGUuZXhwYW5kZWQpXTtcbiAgICAgIG5leHRFeHBhbmRlZCA9IG5leHRFeHBhbmRlZC5maWx0ZXIoXG4gICAgICAgIChyb3dJZCkgPT4gIV8uY29udGFpbnMobm9uRXhwYW5kYWJsZSwgcm93SWQpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBpc0Nsb3NpbmcgPSBwcmV2U3RhdGUuZXhwYW5kZWQucmVkdWNlKChhY2M6IGFueSwgY3VyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKG5leHRFeHBhbmRlZCwgY3VyKSkge1xuICAgICAgICAgIGFjYy5wdXNoKGN1cik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwYW5kZWQ6IG5leHRFeHBhbmRlZCxcbiAgICAgICAgaXNDbG9zaW5nLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dFeHBhbmQgPSAoXG4gICAgcm93S2V5OiBhbnksXG4gICAgaXNFeHBhbmRlZDogYm9vbGVhbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGU6IGFueVxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhLFxuICAgICAga2V5RmllbGQsXG4gICAgICBleHBhbmRSb3c6IHsgb25FeHBhbmQsIG9ubHlPbmVFeHBhbmRpbmcsIG5vbkV4cGFuZGFibGUgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChub25FeHBhbmRhYmxlICYmIF8uY29udGFpbnMobm9uRXhwYW5kYWJsZSwgcm93S2V5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjdXJyRXhwYW5kZWQgPSBbLi4udGhpcy5zdGF0ZS5leHBhbmRlZF07XG4gICAgbGV0IGN1cnJJc0Nsb3NpbmcgPSBbLi4udGhpcy5zdGF0ZS5pc0Nsb3NpbmddO1xuXG4gICAgaWYgKGlzRXhwYW5kZWQpIHtcbiAgICAgIGlmIChvbmx5T25lRXhwYW5kaW5nKSB7XG4gICAgICAgIGN1cnJJc0Nsb3NpbmcgPSBjdXJySXNDbG9zaW5nLmNvbmNhdChjdXJyRXhwYW5kZWQpO1xuICAgICAgICBjdXJyRXhwYW5kZWQgPSBbcm93S2V5XTtcbiAgICAgIH0gZWxzZSBjdXJyRXhwYW5kZWQucHVzaChyb3dLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJySXNDbG9zaW5nLnB1c2gocm93S2V5KTtcbiAgICAgIGN1cnJFeHBhbmRlZCA9IGN1cnJFeHBhbmRlZC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gcm93S2V5KTtcbiAgICB9XG5cbiAgICBpZiAob25FeHBhbmQpIHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFPcGVyYXRvci5nZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCByb3dLZXkpO1xuICAgICAgb25FeHBhbmQocm93LCBpc0V4cGFuZGVkLCByb3dJbmRleCwgZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBleHBhbmRlZDogY3VyckV4cGFuZGVkLCBpc0Nsb3Npbmc6IGN1cnJJc0Nsb3NpbmcgfSkpO1xuICB9O1xuXG4gIGhhbmRsZUFsbFJvd0V4cGFuZCA9IChlOiBhbnksIGV4cGFuZEFsbDogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGV4cGFuZFJvdzogeyBvbkV4cGFuZEFsbCwgbm9uRXhwYW5kYWJsZSB9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBleHBhbmRlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGxldCBjdXJyRXhwYW5kZWQ6IGFueVtdO1xuXG4gICAgaWYgKGV4cGFuZEFsbCkge1xuICAgICAgY3VyckV4cGFuZGVkID0gZXhwYW5kZWQuY29uY2F0KFxuICAgICAgICBkYXRhT3BlcmF0b3IuZXhwYW5kYWJsZUtleXMoZGF0YSwga2V5RmllbGQsIG5vbkV4cGFuZGFibGUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyRXhwYW5kZWQgPSBleHBhbmRlZC5maWx0ZXIoXG4gICAgICAgIChzKSA9PiB0eXBlb2YgZGF0YS5maW5kKChkKSA9PiBfLmdldChkLCBrZXlGaWVsZCkgPT09IHMpID09PSBcInVuZGVmaW5lZFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvbkV4cGFuZEFsbCkge1xuICAgICAgb25FeHBhbmRBbGwoXG4gICAgICAgIGV4cGFuZEFsbCxcbiAgICAgICAgZGF0YU9wZXJhdG9yLmdldEV4cGFuZGVkUm93cyhkYXRhLCBrZXlGaWVsZCwgY3VyckV4cGFuZGVkKSxcbiAgICAgICAgZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGV4cGFuZGVkOiBjdXJyRXhwYW5kZWQgfSkpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGRhdGEsIGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgLi4udGhpcy5wcm9wcy5leHBhbmRSb3csXG4gICAgICAgICAgbm9uRXhwYW5kYWJsZTogdGhpcy5wcm9wcy5leHBhbmRSb3cubm9uRXhwYW5kYWJsZSxcbiAgICAgICAgICBleHBhbmRlZDogdGhpcy5zdGF0ZS5leHBhbmRlZCxcbiAgICAgICAgICBpc0Nsb3Npbmc6IHRoaXMuc3RhdGUuaXNDbG9zaW5nLFxuICAgICAgICAgIG9uQ2xvc2VkOiB0aGlzLm9uQ2xvc2VkLFxuICAgICAgICAgIGlzQW55RXhwYW5kczogZGF0YU9wZXJhdG9yLmlzQW55RXhwYW5kcyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uUm93RXhwYW5kOiB0aGlzLmhhbmRsZVJvd0V4cGFuZCxcbiAgICAgICAgICBvbkFsbFJvd0V4cGFuZDogdGhpcy5oYW5kbGVBbGxSb3dFeHBhbmQsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKHtcbiAgUHJvdmlkZXI6IFJvd0V4cGFuZFByb3ZpZGVyLFxuICBDb25zdW1lcjogUm93RXhwYW5kQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZDLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIENhcHRpb25Qcm9wcyB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBib290c3RyYXA0PzogYm9vbGVhbjtcbn1cblxuY29uc3QgQ2FwdGlvbjogRkM8Q2FwdGlvblByb3BzPiA9IChwcm9wcykgPT4ge1xuICBpZiAoIXByb3BzLmNoaWxkcmVuKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjYXB0aW9uID0gcHJvcHMuYm9vdHN0cmFwNCA/IChcbiAgICA8Y2FwdGlvbiBzdHlsZT17IHsgY2FwdGlvblNpZGU6IFwidG9wXCIgfSB9Pntwcm9wcy5jaGlsZHJlbn08L2NhcHRpb24+XG4gICkgOiAoXG4gICAgPGNhcHRpb24+e3Byb3BzLmNoaWxkcmVufTwvY2FwdGlvbj5cbiAgKTtcblxuICByZXR1cm4gY2FwdGlvbjtcbn07XG5cbi8vIENhcHRpb24ucHJvcFR5cGVzID0ge1xuLy8gICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4vLyAgICAgUHJvcFR5cGVzLm5vZGUsXG4vLyAgICAgUHJvcFR5cGVzLnN0cmluZ1xuLy8gICBdKSxcbi8vICAgYm9vdHN0cmFwNDogUHJvcFR5cGVzLmJvb2xcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IENhcHRpb247XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBldmVudHM6IHN0cmluZ1tdID0gW1xuICBcIm9uQ2xpY2tcIixcbiAgXCJvbkRvdWJsZUNsaWNrXCIsXG4gIFwib25Nb3VzZUVudGVyXCIsXG4gIFwib25Nb3VzZUxlYXZlXCIsXG4gIFwib25Db250ZXh0TWVudVwiLFxuICBcIm9uQXV4Q2xpY2tcIlxuXTtcblxuaW50ZXJmYWNlIENlbGxFdmVudERlbGVnYXRlclByb3BzIHtcbiAgY29sdW1uOiBhbnk7XG4gIGNvbHVtbkluZGV4PzogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgQ2VsbEV2ZW50RGVsZWdhdGVyID0gPFxuICBUIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55XG4+KEV4dGVuZEJhc2U6IFQpID0+IHtcbiAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgRXh0ZW5kQmFzZSB7XG4gICAgY29uc3RydWN0b3IoLi4ucHJvcHM6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5wcm9wcyk7XG4gICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIgPVxuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKFxuICAgICAgY2I6IChlOiBhbnksIGNvbHVtbjogYW55LCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICByZXR1cm4gKGU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbHVtbiwgY29sdW1uSW5kZXgsIGluZGV4IH06IENlbGxFdmVudERlbGVnYXRlclByb3BzID1cbiAgICAgICAgICB0aGlzLnByb3BzO1xuICAgICAgICBjYihlLCBjb2x1bW4sIHR5cGVvZiBjb2x1bW5JbmRleCAhPT0gXCJ1bmRlZmluZWRcIiA/IGNvbHVtbkluZGV4IDogaW5kZXgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBkZWxlZ2F0ZShhdHRyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICBjb25zdCBuZXdBdHRyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHsgLi4uYXR0cnMgfTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgIGlmIChfLmluY2x1ZGVzKGV2ZW50cywgYXR0cikpIHtcbiAgICAgICAgICBuZXdBdHRyc1thdHRyXSA9IHRoaXMuY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlcihhdHRyc1thdHRyXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ld0F0dHJzO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBGQyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0cy9ib290c3RyYXBcIjtcblxuY29uc3QgU29ydFN5bWJvbDogRkMgPSAoKSA9PiAoXG4gIDxCb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgIHsoeyBib290c3RyYXA0IH0pID0+XG4gICAgICBib290c3RyYXA0ID8gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvcmRlci00XCIgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9yZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCIgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZHJvcHVwXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApXG4gICAgfVxuICA8L0Jvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBTb3J0U3ltYm9sO1xuIiwiaW1wb3J0IHsgVFlQRV9CT09MRUFOLCBUWVBFX0RBVEUsIFRZUEVfTlVNQkVSLCBUWVBFX1NUUklORyB9IGZyb20gXCIuLi9jb25zdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZUNvbnZlcnQgPSAodHlwZTogYW55LCB2YWx1ZTogYW55KSA9PiB7XG4gIGlmICh0eXBlID09PSBUWVBFX1NUUklORykge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRZUEVfTlVNQkVSKSB7XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVFlQRV9CT09MRUFOKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlID09PSBcInRydWVcIjtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUWVBFX0RBVEUpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBDZWxsIGZyb20gXCIuLi9jZWxsXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFJvd1Byb3BzIH0gZnJvbSBcIi4vc2hvdWxkLXVwZGF0ZXJcIjtcblxuaW50ZXJmYWNlIFJvd1B1cmVDb250ZW50UHJvcHMgZXh0ZW5kcyBSb3dQcm9wcyB7XG4gIGF0c3RhcnQ/OiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgc2hvdWxkVXBkYXRlPzogYm9vbGVhbjtcbiAgaXNFZGl0YWJsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvd1B1cmVDb250ZW50IGV4dGVuZHMgQ29tcG9uZW50PFJvd1B1cmVDb250ZW50UHJvcHM+IHtcbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogUm93UHVyZUNvbnRlbnRQcm9wcykge1xuICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnNob3VsZFVwZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmV0dXJuIG5leHRQcm9wcy5zaG91bGRVcGRhdGU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgaXNFZGl0YWJsZSxcbiAgICAgIGVkaXRpbmdSb3dJZHgsXG4gICAgICBlZGl0aW5nQ29sSWR4LFxuICAgICAgYXRzdGFydCxcbiAgICAgIGNsaWNrVG9FZGl0LFxuICAgICAgZGJjbGlja1RvRWRpdCxcbiAgICAgIEVkaXRpbmdDZWxsQ29tcG9uZW50LFxuICAgICAgdGFiSW5kZXhTdGFydCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGxldCB0YWJJbmRleCA9IHRhYkluZGV4U3RhcnQ7XG5cbiAgICByZXR1cm4gY29sdW1ucz8ubWFwKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB7IGRhdGFGaWVsZCB9ID0gY29sdW1uO1xuICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChcbiAgICAgICAgcm93SW5kZXggPT09IGVkaXRpbmdSb3dJZHggJiZcbiAgICAgICAgaW5kZXggPT09IGVkaXRpbmdDb2xJZHggJiZcbiAgICAgICAgRWRpdGluZ0NlbGxDb21wb25lbnRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxFZGl0aW5nQ2VsbENvbXBvbmVudFxuICAgICAgICAgICAga2V5PXtgJHtjb250ZW50fS0ke2luZGV4fS1lZGl0aW5nYH1cbiAgICAgICAgICAgIHJvdz17cm93fVxuICAgICAgICAgICAgcm93SW5kZXg9e3Jvd0luZGV4fVxuICAgICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgICBjb2x1bW5JbmRleD17aW5kZXh9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlbmRlciBjZWxsXG4gICAgICBsZXQgY2VsbFRpdGxlO1xuICAgICAgbGV0IGNlbGxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHt9O1xuICAgICAgbGV0IGNlbGxBdHRyczogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+ID0ge307XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbi5hdHRycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNlbGxBdHRycyA9IHsgLi4uY29sdW1uLmF0dHJzKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KSB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29sdW1uLmF0dHJzID09PSBcIm9iamVjdFwiICYmIGNvbHVtbi5hdHRycyAhPT0gbnVsbCkge1xuICAgICAgICBjZWxsQXR0cnMgPSB7IC4uLmNvbHVtbi5hdHRycyB9O1xuICAgICAgfVxuXG5cbiAgICAgIGlmIChjb2x1bW4uZXZlbnRzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHsgLi4uY29sdW1uLmV2ZW50cyB9O1xuICAgICAgICBPYmplY3Qua2V5cyhldmVudHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbkZuID0gZXZlbnRzW2tleV07XG4gICAgICAgICAgZXZlbnRzW2tleV0gPSAoLi4ucmVzdDogYW55W10pID0+IG9yaWdpbkZuKC4uLnJlc3QsIHJvdywgcm93SW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY2VsbEF0dHJzID0geyAuLi5jZWxsQXR0cnMsIC4uLmV2ZW50cyB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZWxsQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihjb2x1bW4uY2xhc3NlcylcbiAgICAgICAgPyBjb2x1bW4uY2xhc3Nlcyhjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleClcbiAgICAgICAgOiBjb2x1bW4uY2xhc3NlcztcblxuICAgICAgaWYgKGNvbHVtbi5zdHlsZSkge1xuICAgICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oY29sdW1uLnN0eWxlKVxuICAgICAgICAgID8gY29sdW1uLnN0eWxlKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KVxuICAgICAgICAgIDogY29sdW1uLnN0eWxlO1xuICAgICAgICBjZWxsU3R5bGUgPSB7IC4uLmNlbGxTdHlsZSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLnRpdGxlKSB7XG4gICAgICAgIGNlbGxUaXRsZSA9IF8uaXNGdW5jdGlvbihjb2x1bW4udGl0bGUpXG4gICAgICAgICAgPyBjb2x1bW4udGl0bGUoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgICAgOiBjb250ZW50O1xuICAgICAgICBjZWxsQXR0cnMudGl0bGUgPSBjZWxsVGl0bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW4uYWxpZ24pIHtcbiAgICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihjb2x1bW4uYWxpZ24pXG4gICAgICAgICAgPyBjb2x1bW4uYWxpZ24oY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgICAgOiBjb2x1bW4uYWxpZ247XG4gICAgICB9XG5cbiAgICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNlbGxDbGFzc2VzO1xuICAgICAgaWYgKCFfLmlzRW1wdHlPYmplY3QoY2VsbFN0eWxlKSkgY2VsbEF0dHJzLnN0eWxlID0gY2VsbFN0eWxlO1xuXG4gICAgICBsZXQgZWRpdGFibGVDZWxsID0gXy5pc0RlZmluZWQoY29sdW1uLmVkaXRhYmxlKSA/IGNvbHVtbi5lZGl0YWJsZSA6IHRydWU7XG4gICAgICBpZiAoY29sdW1uLmRhdGFGaWVsZCA9PT0ga2V5RmllbGQgfHwgIWlzRWRpdGFibGUpIGVkaXRhYmxlQ2VsbCA9IGZhbHNlO1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdGFibGUpKSB7XG4gICAgICAgIGVkaXRhYmxlQ2VsbCA9IGNvbHVtbi5lZGl0YWJsZShjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGFiSW5kZXhTdGFydCA9PT0gJ251bWJlcicgJiYgdGFiSW5kZXhTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgY2VsbEF0dHJzLnRhYkluZGV4ID0gdGFiSW5kZXghO1xuICAgICAgICB0YWJJbmRleCA9IHRhYkluZGV4ISArIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDZWxsXG4gICAgICAgICAga2V5PXtgJHtjb250ZW50fS0ke2luZGV4fWB9XG4gICAgICAgICAgcm93PXtyb3d9XG4gICAgICAgICAgZWRpdGFibGU9e2VkaXRhYmxlQ2VsbC50b1N0cmluZygpfVxuICAgICAgICAgIHJvd2luZGV4PXtyb3dJbmRleCA/PyAwfVxuICAgICAgICAgIGNvbHVtbmluZGV4PXtpbmRleH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICBhdHN0YXJ0PXthdHN0YXJ0fVxuICAgICAgICAgIGNsaWNrdG9lZGl0PXtjbGlja1RvRWRpdCA/IGNsaWNrVG9FZGl0LnRvU3RyaW5nKCkgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgZGJjbGlja3RvZWRpdD17ZGJjbGlja1RvRWRpdCA/IGRiY2xpY2tUb0VkaXQudG9TdHJpbmcoKSA6IFwiZmFsc2VcIn1cbiAgICAgICAgICB7Li4uY2VsbEF0dHJzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgQ29sdW1uUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueTtcbiAgY29sdW1uczogYW55W107XG4gIHRvZ2dsZXM/OiB7IFtkYXRhRmllbGQ6IHN0cmluZ106IGJvb2xlYW4gfTtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuaW50ZXJmYWNlIENvbHVtbkNvbnRleHRWYWx1ZSB7XG4gIGNvbHVtbnM6IGFueVtdO1xuICB0b2dnbGVzPzogeyBbZGF0YUZpZWxkOiBzdHJpbmddOiBib29sZWFuIH07XG59XG5cbmNvbnN0IGRlZmF1bHRDb2x1bW5Db250ZXh0ID0geyBjb2x1bW5zOiBbXSwgdG9nZ2xlczogdW5kZWZpbmVkIH07XG5jb25zdCBDb2x1bW5Db250ZXh0ID1cbiAgUmVhY3QuY3JlYXRlQ29udGV4dDxDb2x1bW5Db250ZXh0VmFsdWU+KGRlZmF1bHRDb2x1bW5Db250ZXh0KTtcblxuY29uc3QgQ29sdW1uUHJvdmlkZXI6IFJlYWN0LkZDPENvbHVtblByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY29sdW1ucyxcbiAgdG9nZ2xlcyxcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGxldCB0b2dnbGVDb2x1bW5zO1xuXG4gIGlmICh0b2dnbGVzKSB7XG4gICAgdG9nZ2xlQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IHRvZ2dsZXNbY29sdW1uLmRhdGFGaWVsZF0pO1xuICB9IGVsc2Uge1xuICAgIHRvZ2dsZUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiAhY29sdW1uLmhpZGRlbik7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8Q29sdW1uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyBjb2x1bW5zOiB0b2dnbGVDb2x1bW5zIH19PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29sdW1uQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBDb2x1bW5Qcm92aWRlcixcbiAgQ29uc3VtZXI6IENvbHVtbkNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUm93RXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBSb3dQdXJlQ29udGVudCBmcm9tIFwiLi9yb3ctcHVyZS1jb250ZW50XCI7XG5pbXBvcnQgc2hvdWxkVXBkYXRlciwgeyBSb3dQcm9wcyB9IGZyb20gXCIuL3Nob3VsZC11cGRhdGVyXCI7XG5cbmNsYXNzIFNpbXBsZVJvdyBleHRlbmRzIHNob3VsZFVwZGF0ZXIoXG4gIFJvd0V2ZW50RGVsZWdhdGVyKENvbXBvbmVudDxSb3dQcm9wcz4pXG4pIHtcbiAgc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IGZhbHNlO1xuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50ID0gZmFsc2U7XG4gICAgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50ID0gdGhpcy5zaG91bGRSb3dDb250ZW50VXBkYXRlKG5leHRQcm9wcyk7XG4gICAgaWYgKHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCkgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5zaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMobmV4dFByb3BzKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBlZGl0YWJsZSA9IHRydWUsXG4gICAgICBjbGFzc05hbWUgPSB1bmRlZmluZWQsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgYXR0cnMgPSB7fSxcbiAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHRyQXR0cnMgPSB0aGlzLmRlbGVnYXRlKGF0dHJzKTtcbiAgICBjb25zdCB0YWJJbmRleFN0YXJ0ID0gdGhpcy5wcm9wcy5yb3dJbmRleCEgKiB2aXNpYmxlQ29sdW1uU2l6ZSEgKyAxO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSB7Li4udHJBdHRyc30+XG4gICAgICAgIDxSb3dQdXJlQ29udGVudFxuICAgICAgICAgIHNob3VsZFVwZGF0ZT17dGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50fVxuICAgICAgICAgIHRhYkluZGV4U3RhcnQ9e3RhYkluZGV4Q2VsbCA/IHRhYkluZGV4U3RhcnQgOiAtMX1cbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgLz5cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVSb3c7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgRmlsdGVyUHJvcHMge1xuICBkYXRhOiBhbnk7XG4gIGN1cnJGaWx0ZXJzOiBhbnk7XG59XG5cbmludGVyZmFjZSBTZWFyY2hQcm9wcyB7XG4gIGRhdGE6IGFueTtcbn1cblxuaW50ZXJmYWNlIFNvcnRQcm9wcyB7XG4gIGRhdGE6IGFueTtcbn1cblxuaW50ZXJmYWNlIFBhZ2luYXRpb25Qcm9wcyB7XG4gIGRhdGE6IGFueTtcbn1cblxuLy9cbmludGVyZmFjZSBEYXRhUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueVtdO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufVxuXG5pbnRlcmZhY2UgRGF0YVByb3ZpZGVyU3RhdGUge1xuICBkYXRhOiBhbnlbXTtcbn1cblxuaW50ZXJmYWNlIERhdGFDb250ZXh0VmFsdWUge1xuICBkYXRhOiBhbnlbXTtcbiAgZ2V0RGF0YTogKFxuICAgIGZpbHRlclByb3BzPzogRmlsdGVyUHJvcHMsXG4gICAgc2VhcmNoUHJvcHM/OiBTZWFyY2hQcm9wcyxcbiAgICBzb3J0UHJvcHM/OiBTb3J0UHJvcHMsXG4gICAgcGFnaW5hdGlvblByb3BzPzogUGFnaW5hdGlvblByb3BzXG4gICkgPT4gYW55W107XG59XG5cbmNvbnN0IGRlZmF1bHREYXRhQ29udGV4dCA9IHsgZGF0YTogW10sIGdldERhdGE6ICgpID0+IFtdIH07XG5jb25zdCBEYXRhQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8RGF0YUNvbnRleHRWYWx1ZT4oZGVmYXVsdERhdGFDb250ZXh0KTtcblxuY2xhc3MgRGF0YVByb3ZpZGVyIGV4dGVuZHMgQ29tcG9uZW50PERhdGFQcm92aWRlclByb3BzLCBEYXRhUHJvdmlkZXJTdGF0ZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRGF0YVByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgZGF0YTogcHJvcHMuZGF0YSB9O1xuICB9XG5cbiAgZ2V0RGF0YSA9IChcbiAgICBmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzLFxuICAgIHNlYXJjaFByb3BzPzogU2VhcmNoUHJvcHMsXG4gICAgc29ydFByb3BzPzogU29ydFByb3BzLFxuICAgIHBhZ2luYXRpb25Qcm9wcz86IFBhZ2luYXRpb25Qcm9wc1xuICApID0+IHtcbiAgICBpZiAocGFnaW5hdGlvblByb3BzKSB7XG4gICAgICByZXR1cm4gcGFnaW5hdGlvblByb3BzLmRhdGE7XG4gICAgfSBlbHNlIGlmIChzb3J0UHJvcHMpIHtcbiAgICAgIHJldHVybiBzb3J0UHJvcHMuZGF0YTtcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFByb3BzKSB7XG4gICAgICByZXR1cm4gc2VhcmNoUHJvcHMuZGF0YTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlclByb3BzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpbHRlclByb3BzLmRhdGEubGVuZ3RoIDwgdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCAmJlxuICAgICAgICAhXy5pc0VtcHR5KE9iamVjdC5rZXlzKGZpbHRlclByb3BzLmN1cnJGaWx0ZXJzKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmlsdGVyUHJvcHMuZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEYXRhQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgICBnZXREYXRhOiB0aGlzLmdldERhdGEsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9EYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBEYXRhUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBEYXRhQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3Rpb25Db250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgU2VsZWN0aW9uQ29udGV4dCA9IGNyZWF0ZVNlbGVjdGlvbkNvbnRleHQoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2l0aFJvd1NlbGVjdGlvbjxUIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+PihcbiAgQ29tcG9uZW50OiBUXG4pOiBSZWFjdC5GQzxSZWFjdC5Db21wb25lbnRQcm9wczxUPj4ge1xuICBjb25zdCByZW5kZXJXaXRoU2VsZWN0aW9uID0gKHByb3BzOiBhbnksIHNlbGVjdFJvdzogYW55KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gcHJvcHMudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBfLmNvbnRhaW5zKHNlbGVjdFJvdy5zZWxlY3RlZCwga2V5KTtcbiAgICBjb25zdCBzZWxlY3RhYmxlID1cbiAgICAgICFzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSB8fCAhXy5jb250YWlucyhzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSwga2V5KTtcbiAgICBjb25zdCBub3RTZWxlY3RhYmxlID0gXy5jb250YWlucyhzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSwga2V5KTtcblxuICAgIGxldCB7IHN0eWxlLCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFN0eWxlID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5zdHlsZSlcbiAgICAgICAgPyBzZWxlY3RSb3cuc3R5bGUocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cuc3R5bGU7XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuY2xhc3NlcylcbiAgICAgICAgPyBzZWxlY3RSb3cuY2xhc3Nlcyhwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICA6IHNlbGVjdFJvdy5jbGFzc2VzO1xuXG4gICAgICBzdHlsZSA9IHtcbiAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgIC4uLnNlbGVjdGVkU3R5bGUsXG4gICAgICB9O1xuICAgICAgY2xhc3NOYW1lID0gY3MoY2xhc3NOYW1lLCBzZWxlY3RlZENsYXNzZXMpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHNlbGVjdFJvdy5iZ0NvbG9yKSB7XG4gICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG4gICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuYmdDb2xvcilcbiAgICAgICAgICA/IHNlbGVjdFJvdy5iZ0NvbG9yKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgICAgOiBzZWxlY3RSb3cuYmdDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm90U2VsZWN0YWJsZSkge1xuICAgICAgY29uc3Qgbm90U2VsZWN0YWJsZVN0eWxlID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGUpXG4gICAgICAgID8gc2VsZWN0Um93Lm5vblNlbGVjdGFibGVTdHlsZShwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICA6IHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGU7XG5cbiAgICAgIGNvbnN0IG5vdFNlbGVjdGFibGVDbGFzc2VzID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlQ2xhc3NlcylcbiAgICAgICAgPyBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXMocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXM7XG5cbiAgICAgIHN0eWxlID0ge1xuICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgLi4ubm90U2VsZWN0YWJsZVN0eWxlLFxuICAgICAgfTtcbiAgICAgIGNsYXNzTmFtZSA9IGNzKGNsYXNzTmFtZSwgbm90U2VsZWN0YWJsZUNsYXNzZXMpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHNlbGVjdFJvdz17c2VsZWN0Um93fVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWR9XG4gICAgICAgIHNlbGVjdGFibGU9e3NlbGVjdGFibGV9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyOiBSZWFjdC5GQzxSZWFjdC5Db21wb25lbnRQcm9wczxUPj4gPSAoXG4gICAgcHJvcHNcbiAgKSA9PiAoXG4gICAgPFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHNlbGVjdFJvdykgPT4gcmVuZGVyV2l0aFNlbGVjdGlvbihwcm9wcywgc2VsZWN0Um93KX1cbiAgICA8L1NlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICk7XG5cbiAgV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyLmRpc3BsYXlOYW1lID0gXCJXaXRoU2VsZWN0aW9uUm93Q29uc3VtZXJcIjtcbiAgcmV0dXJuIFdpdGhTZWxlY3Rpb25Sb3dDb25zdW1lcjtcbn1cbiIsIi8qIGVzbGludCBuby1uZXN0ZWQtdGVybmFyeTogMCAqL1xuLyogZXNsaW50IG5vLWxvbmVseS1pZjogMCAqL1xuLyogZXNsaW50IG5vLXVuZGVyc2NvcmUtZGFuZ2xlOiAwICovXG5pbXBvcnQgeyBTT1JUX0FTQywgU09SVF9ERVNDIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gY29tcGFyYXRvcihhOiBhbnksIGI6IGFueSkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAodHlwZW9mIGIgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXN1bHQgPSBiLmxvY2FsZUNvbXBhcmUoYSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gYSA+IGIgPyAtMSA6IGEgPCBiID8gMSA6IDA7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IHNvcnQgPSAoXG4gIGRhdGE6IGFueSxcbiAgc29ydE9yZGVyOiBhbnksXG4gIHsgZGF0YUZpZWxkLCBzb3J0RnVuYywgc29ydFZhbHVlIH06IGFueVxuKSA9PiB7XG4gIGNvbnN0IF9kYXRhID0gWy4uLmRhdGFdO1xuICBfZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgdmFsdWVBID0gXy5nZXQoYSwgZGF0YUZpZWxkKTtcbiAgICBsZXQgdmFsdWVCID0gXy5nZXQoYiwgZGF0YUZpZWxkKTtcbiAgICBpZiAoc29ydFZhbHVlKSB7XG4gICAgICB2YWx1ZUEgPSBzb3J0VmFsdWUodmFsdWVBLCBhKTtcbiAgICAgIHZhbHVlQiA9IHNvcnRWYWx1ZSh2YWx1ZUIsIGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZUEgPSBfLmlzRGVmaW5lZCh2YWx1ZUEpID8gdmFsdWVBIDogXCJcIjtcbiAgICAgIHZhbHVlQiA9IF8uaXNEZWZpbmVkKHZhbHVlQikgPyB2YWx1ZUIgOiBcIlwiO1xuICAgIH1cblxuICAgIGlmIChzb3J0RnVuYykge1xuICAgICAgcmVzdWx0ID0gc29ydEZ1bmModmFsdWVBLCB2YWx1ZUIsIHNvcnRPcmRlciwgZGF0YUZpZWxkLCBhLCBiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNvcnRPcmRlciA9PT0gU09SVF9ERVNDKSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWVBLCB2YWx1ZUIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZUIsIHZhbHVlQSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICByZXR1cm4gX2RhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgbmV4dE9yZGVyID0gKFxuICBjdXJyZW50U29ydENvbHVtbjogYW55LFxuICB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9OiBhbnksXG4gIGRlZmF1bHRPcmRlciA9IFNPUlRfREVTQ1xuKSA9PiB7XG4gIGlmICghc29ydENvbHVtbiB8fCBjdXJyZW50U29ydENvbHVtbi5kYXRhRmllbGQgIT09IHNvcnRDb2x1bW4uZGF0YUZpZWxkKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRPcmRlcjtcbiAgfVxuICByZXR1cm4gc29ydE9yZGVyID09PSBTT1JUX0RFU0MgPyBTT1JUX0FTQyA6IFNPUlRfREVTQztcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBCb290c3RyYXBDb250ZXh0VmFsdWUge1xuICBib290c3RyYXA0OiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0Qm9vdHN0cmFwQ29udGV4dCA9IHsgYm9vdHN0cmFwNDogdHJ1ZSB9O1xuXG5leHBvcnQgY29uc3QgQm9vdHN0cmFwQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8Qm9vdHN0cmFwQ29udGV4dFZhbHVlPihcbiAgZGVmYXVsdEJvb3RzdHJhcENvbnRleHRcbik7XG4iLCIvKiBlc2xpbnQgbm8tZW1wdHk6IDAgKi9cbi8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogMCAqL1xuLyogZXNsaW50IHByZWZlci1yZXN0LXBhcmFtczogMCAqL1xuaW1wb3J0IF8gZnJvbSBcInVuZGVyc2NvcmVcIjtcblxuZnVuY3Rpb24gc3BsaXROZXN0ZWQoc3RyOiBhbnkpIHtcbiAgcmV0dXJuIFtzdHJdLmpvaW4oXCIuXCIpLnJlcGxhY2UoL1xcWy9nLCBcIi5cIikucmVwbGFjZSgvXFxdL2csIFwiXCIpLnNwbGl0KFwiLlwiKTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnMobGlzdDogYW55LCB2YWx1ZTogYW55KSB7XG4gIGlmIChfLmluY2x1ZGVzKSB7XG4gICAgcmV0dXJuIF8uaW5jbHVkZXMobGlzdCwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3QuaW5kZXhPZih2YWx1ZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0KHRhcmdldDogYW55LCBmaWVsZDogYW55KSB7XG4gIGNvbnN0IGRpcmVjdEdldCA9IHRhcmdldFtmaWVsZF07XG4gIGlmIChkaXJlY3RHZXQgIT09IHVuZGVmaW5lZCAmJiBkaXJlY3RHZXQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZGlyZWN0R2V0O1xuICB9XG5cbiAgY29uc3QgcGF0aEFycmF5ID0gc3BsaXROZXN0ZWQoZmllbGQpO1xuICBsZXQgcmVzdWx0O1xuICB0cnkge1xuICAgIHJlc3VsdCA9IHBhdGhBcnJheS5yZWR1Y2UoKGN1cnIsIHBhdGgpID0+IGN1cnJbcGF0aF0sIHRhcmdldCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQ6IGFueSwgZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgc2FmZSA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGhBcnJheSA9IHNwbGl0TmVzdGVkKGZpZWxkKTtcbiAgbGV0IGxldmVsID0gMDtcbiAgcGF0aEFycmF5LnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIGxldmVsICs9IDE7XG4gICAgaWYgKHR5cGVvZiBhW2JdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoIXNhZmUpIHRocm93IG5ldyBFcnJvcihgJHthfS4ke2J9IGlzIHVuZGVmaW5lZGApO1xuICAgICAgYVtiXSA9IHt9O1xuICAgICAgcmV0dXJuIGFbYl07XG4gICAgfVxuXG4gICAgaWYgKGxldmVsID09PSBwYXRoQXJyYXkubGVuZ3RoKSB7XG4gICAgICBhW2JdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhW2JdO1xuICB9LCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5T2JqZWN0KG9iajogYW55KSB7XG4gIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2xlZXAoZm46IGFueSwgbXM6IGFueSkge1xuICByZXR1cm4gc2V0VGltZW91dCgoKSA9PiBmbigpLCBtcyk7XG59XG5cbmZ1bmN0aW9uIGRlYm91bmNlKHRoaXM6IGFueSwgZnVuYzogYW55LCB3YWl0OiBhbnksIGltbWVkaWF0ZTogYW55KSB7XG4gIGxldCB0aW1lb3V0OiBhbnk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjb25zdCBsYXRlciA9ICgpID0+IHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG5cbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgfHwgMCk7XG5cbiAgICBpZiAoY2FsbE5vdykge1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmFzc2lnbihfLCB7XG4gIGdldCxcbiAgc2V0LFxuICBpc0RlZmluZWQsXG4gIGlzRW1wdHlPYmplY3QsXG4gIHNsZWVwLFxuICBkZWJvdW5jZSxcbiAgY29udGFpbnNcbn0pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5zaW9uSGVhZGVyQ2VsbFByb3BzIHtcbiAgaXNBbnlFeHBhbmRzPzogYm9vbGVhbjtcbiAgb25BbGxSb3dFeHBhbmQ/OiAoXG4gICAgZTogUmVhY3QuTW91c2VFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sXG4gICAgZXhwYW5kQWxsOiBib29sZWFuXG4gICkgPT4gdm9pZDtcbiAgZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXI/OiAoYXJnczogeyBpc0FueUV4cGFuZHM6IGJvb2xlYW4gfSkgPT4gUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbnNpb25IZWFkZXJDZWxsIGV4dGVuZHMgQ29tcG9uZW50PEV4cGFuc2lvbkhlYWRlckNlbGxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRXhwYW5zaW9uSGVhZGVyQ2VsbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ2hlY2tCb3hDbGljayhlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50Pikge1xuICAgIGNvbnN0IHsgaXNBbnlFeHBhbmRzLCBvbkFsbFJvd0V4cGFuZCB9ID0gdGhpcy5wcm9wcztcbiAgICBvbkFsbFJvd0V4cGFuZCEoZSwgIWlzQW55RXhwYW5kcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc0FueUV4cGFuZHMsIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGF0dHJzID0ge1xuICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDaGVja0JveENsaWNrLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRoIGNsYXNzTmFtZT1cImV4cGFuZC1jZWxsLWhlYWRlclwiIGRhdGEtcm93LXNlbGVjdGlvbiB7Li4uYXR0cnN9PlxuICAgICAgICB7ZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXJcbiAgICAgICAgICA/IGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyKHsgaXNBbnlFeHBhbmRzOiBpc0FueUV4cGFuZHMgPz8gZmFsc2UgfSlcbiAgICAgICAgICA6IGlzQW55RXhwYW5kc1xuICAgICAgICAgID8gXCIoLSlcIlxuICAgICAgICAgIDogXCIoKylcIn1cbiAgICAgIDwvdGg+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRSb3dCeVJvd0lkIH0gZnJvbSBcIi4vcm93c1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uU3VtbWFyeSA9IChcbiAgZGF0YTogYW55W10gPSBbXSxcbiAga2V5RmllbGQ6IGFueSxcbiAgc2VsZWN0ZWQ6IGFueVtdID0gW11cbikgPT4ge1xuICBsZXQgYWxsUm93c1NlbGVjdGVkID0gZGF0YS5sZW5ndGggPiAwO1xuICBsZXQgYWxsUm93c05vdFNlbGVjdGVkID0gdHJ1ZTtcblxuICBjb25zdCByb3dLZXlzID0gZGF0YS5tYXAoKGQpID0+IF8uZ2V0KGQsIGtleUZpZWxkKSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93S2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGN1cnIgPSByb3dLZXlzW2ldO1xuICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWQuZmluZCgoeCkgPT4geCA9PT0gY3VycikgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGFsbFJvd3NTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGxSb3dzTm90U2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhbGxSb3dzU2VsZWN0ZWQsXG4gICAgYWxsUm93c05vdFNlbGVjdGVkLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGFibGVLZXlzID0gKFxuICBkYXRhOiBhbnlbXSA9IFtdLFxuICBrZXlGaWVsZDogYW55LFxuICBza2lwczogYW55W10gPSBbXVxuKSA9PiB7XG4gIGlmIChza2lwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xuICB9XG4gIHJldHVybiBkYXRhXG4gICAgLmZpbHRlcigocm93KSA9PiAhXy5jb250YWlucyhza2lwcywgXy5nZXQocm93LCBrZXlGaWVsZCkpKVxuICAgIC5tYXAoKHJvdykgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVuU2VsZWN0YWJsZUtleXMgPSAoc2VsZWN0ZWQ/OiBhbnksIHNraXBzOiBhbnlbXSA9IFtdKSA9PiB7XG4gIGlmIChza2lwcz8ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBzZWxlY3RlZC5maWx0ZXIoKHg6IGFueSkgPT4gXy5jb250YWlucyhza2lwcywgeCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkUm93cyA9IChcbiAgZGF0YTogYW55W10gPSBbXSxcbiAga2V5RmllbGQ6IGFueSxcbiAgc2VsZWN0ZWQ6IGFueVxuKSA9PlxuICBzZWxlY3RlZFxuICAgIC5tYXAoKGs6IGFueSkgPT4gZ2V0Um93QnlSb3dJZChkYXRhLCBrZXlGaWVsZCwgaykpXG4gICAgLmZpbHRlcigoeDogYW55KSA9PiAhIXgpO1xuIiwiLy8gQ3VycmVudCB2ZXJzaW9uLlxuZXhwb3J0IHZhciBWRVJTSU9OID0gJzEuMTMuNyc7XG5cbi8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuLy8gb24gdGhlIHNlcnZlciwgb3IgYHRoaXNgIGluIHNvbWUgdmlydHVhbCBtYWNoaW5lcy4gV2UgdXNlIGBzZWxmYFxuLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbmV4cG9ydCB2YXIgcm9vdCA9ICh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZikgfHxcbiAgICAgICAgICAodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCkgfHxcbiAgICAgICAgICB7fTtcblxuLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbmV4cG9ydCB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuZXhwb3J0IHZhciBTeW1ib2xQcm90byA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnID8gU3ltYm9sLnByb3RvdHlwZSA6IG51bGw7XG5cbi8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuZXhwb3J0IHZhciBwdXNoID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNlID0gQXJyYXlQcm90by5zbGljZSxcbiAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8vIE1vZGVybiBmZWF0dXJlIGRldGVjdGlvbi5cbmV4cG9ydCB2YXIgc3VwcG9ydHNBcnJheUJ1ZmZlciA9IHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgc3VwcG9ydHNEYXRhVmlldyA9IHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8vIEFsbCAqKkVDTUFTY3JpcHQgNSsqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2Vcbi8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuZXhwb3J0IHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICBuYXRpdmVLZXlzID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcbiAgICBuYXRpdmVJc1ZpZXcgPSBzdXBwb3J0c0FycmF5QnVmZmVyICYmIEFycmF5QnVmZmVyLmlzVmlldztcblxuLy8gQ3JlYXRlIHJlZmVyZW5jZXMgdG8gdGhlc2UgYnVpbHRpbiBmdW5jdGlvbnMgYmVjYXVzZSB3ZSBvdmVycmlkZSB0aGVtLlxuZXhwb3J0IHZhciBfaXNOYU4gPSBpc05hTixcbiAgICBfaXNGaW5pdGUgPSBpc0Zpbml0ZTtcblxuLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbmV4cG9ydCB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuZXhwb3J0IHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4vLyBUaGUgbGFyZ2VzdCBpbnRlZ2VyIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuXG5leHBvcnQgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4iLCIvLyBTb21lIGZ1bmN0aW9ucyB0YWtlIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgb3IgYSBmZXcgZXhwZWN0ZWRcbi8vIGFyZ3VtZW50cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIHZhbHVlcyB0byBvcGVyYXRlXG4vLyBvbi4gVGhpcyBoZWxwZXIgYWNjdW11bGF0ZXMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgcGFzdCB0aGUgZnVuY3Rpb27igJlzXG4vLyBhcmd1bWVudCBsZW5ndGggKG9yIGFuIGV4cGxpY2l0IGBzdGFydEluZGV4YCksIGludG8gYW4gYXJyYXkgdGhhdCBiZWNvbWVzXG4vLyB0aGUgbGFzdCBhcmd1bWVudC4gU2ltaWxhciB0byBFUzbigJlzIFwicmVzdCBwYXJhbWV0ZXJcIi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3RBcmd1bWVudHMoZnVuYywgc3RhcnRJbmRleCkge1xuICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLFxuICAgICAgICByZXN0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICB9XG4gICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gQXJyYXkoc3RhcnRJbmRleCArIDEpO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iaik7XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc051bGwob2JqKSB7XG4gIHJldHVybiBvYmogPT09IG51bGw7XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iaikge1xuICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG59XG4iLCJpbXBvcnQgeyB0b1N0cmluZyB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztcbn1cbiIsIi8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xufVxuIiwiaW1wb3J0IHsgdG9TdHJpbmcgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIGB0b1N0cmluZ2AtYmFzZWQgdHlwZSB0ZXN0ZXIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0YWdUZXN0ZXIobmFtZSkge1xuICB2YXIgdGFnID0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSB0YWc7XG4gIH07XG59XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignU3RyaW5nJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignTnVtYmVyJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignRGF0ZScpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ1JlZ0V4cCcpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ0Vycm9yJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignU3ltYm9sJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignQXJyYXlCdWZmZXInKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcbmltcG9ydCB7IHJvb3QgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbnZhciBpc0Z1bmN0aW9uID0gdGFnVGVzdGVyKCdGdW5jdGlvbicpO1xuXG4vLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgYHR5cGVvZmAgYnVncyBpbiBvbGRcbi8vIHY4LCBJRSAxMSAoIzE2MjEpLCBTYWZhcmkgOCAoIzE5MjkpLCBhbmQgUGhhbnRvbUpTICgjMjIzNikuXG52YXIgbm9kZWxpc3QgPSByb290LmRvY3VtZW50ICYmIHJvb3QuZG9jdW1lbnQuY2hpbGROb2RlcztcbmlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICBpc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgdGFnVGVzdGVyKCdPYmplY3QnKTtcbiIsImltcG9ydCB7IHN1cHBvcnRzRGF0YVZpZXcgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaGFzT2JqZWN0VGFnIGZyb20gJy4vX2hhc09iamVjdFRhZy5qcyc7XG5cbi8vIEluIElFIDEwIC0gRWRnZSAxMywgYERhdGFWaWV3YCBoYXMgc3RyaW5nIHRhZyBgJ1tvYmplY3QgT2JqZWN0XSdgLlxuLy8gSW4gSUUgMTEsIHRoZSBtb3N0IGNvbW1vbiBhbW9uZyB0aGVtLCB0aGlzIHByb2JsZW0gYWxzbyBhcHBsaWVzIHRvXG4vLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YC5cbi8vIEFsc28sIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBhbiBhcHBsaWNhdGlvbiBjYW4gb3ZlcnJpZGUgdGhlIG5hdGl2ZVxuLy8gYERhdGFWaWV3YCBvYmplY3QsIGluIGNhc2VzIGxpa2UgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIGNvbnN0cnVjdG9yXG4vLyBzYWZlbHkgYW5kIHNob3VsZCBqdXN0IHJlbHkgb24gYWx0ZXJuYXRlIGBEYXRhVmlld2AgY2hlY2tzXG5leHBvcnQgdmFyIGhhc0RhdGFWaWV3QnVnID0gKFxuICAgICAgc3VwcG9ydHNEYXRhVmlldyAmJiAoIS9cXFtuYXRpdmUgY29kZVxcXS8udGVzdChTdHJpbmcoRGF0YVZpZXcpKSB8fCBoYXNPYmplY3RUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkpKVxuICAgICksXG4gICAgaXNJRTExID0gKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnICYmIGhhc09iamVjdFRhZyhuZXcgTWFwKSk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzQXJyYXlCdWZmZXIgZnJvbSAnLi9pc0FycmF5QnVmZmVyLmpzJztcbmltcG9ydCB7IGhhc0RhdGFWaWV3QnVnIH0gZnJvbSAnLi9fc3RyaW5nVGFnQnVnLmpzJztcblxudmFyIGlzRGF0YVZpZXcgPSB0YWdUZXN0ZXIoJ0RhdGFWaWV3Jyk7XG5cbi8vIEluIElFIDEwIC0gRWRnZSAxMywgd2UgbmVlZCBhIGRpZmZlcmVudCBoZXVyaXN0aWNcbi8vIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIGBEYXRhVmlld2AuXG4vLyBBbHNvLCBpbiBjYXNlcyB3aGVyZSB0aGUgbmF0aXZlIGBEYXRhVmlld2AgaXNcbi8vIG92ZXJyaWRkZW4gd2UgY2FuJ3QgcmVseSBvbiB0aGUgdGFnIGl0c2VsZi5cbmZ1bmN0aW9uIGFsdGVybmF0ZUlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBpc0Z1bmN0aW9uKG9iai5nZXRJbnQ4KSAmJiBpc0FycmF5QnVmZmVyKG9iai5idWZmZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoaGFzRGF0YVZpZXdCdWcgPyBhbHRlcm5hdGVJc0RhdGFWaWV3IDogaXNEYXRhVmlldyk7XG4iLCJpbXBvcnQgeyBuYXRpdmVJc0FycmF5IH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG4vLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuLy8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIGBBcnJheS5pc0FycmF5YC5cbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZUlzQXJyYXkgfHwgdGFnVGVzdGVyKCdBcnJheScpO1xuIiwiaW1wb3J0IHsgaGFzT3duUHJvcGVydHkgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYGtleWAgaXMgYW4gb3duIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXMob2JqLCBrZXkpIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xufVxuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuaW1wb3J0IGhhcyBmcm9tICcuL19oYXMuanMnO1xuXG52YXIgaXNBcmd1bWVudHMgPSB0YWdUZXN0ZXIoJ0FyZ3VtZW50cycpO1xuXG4vLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4vLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuKGZ1bmN0aW9uKCkge1xuICBpZiAoIWlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICBpc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGhhcyhvYmosICdjYWxsZWUnKTtcbiAgICB9O1xuICB9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsImltcG9ydCB7IF9pc0Zpbml0ZSB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNGaW5pdGUob2JqKSB7XG4gIHJldHVybiAhaXNTeW1ib2wob2JqKSAmJiBfaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbn1cbiIsImltcG9ydCB7IF9pc05hTiB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBpc051bWJlciBmcm9tICcuL2lzTnVtYmVyLmpzJztcblxuLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gP1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNOYU4ob2JqKSB7XG4gIHJldHVybiBpc051bWJlcihvYmopICYmIF9pc05hTihvYmopO1xufVxuIiwiLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuIiwiaW1wb3J0IHsgTUFYX0FSUkFZX0lOREVYIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuXG4vLyBDb21tb24gaW50ZXJuYWwgbG9naWMgZm9yIGBpc0FycmF5TGlrZWAgYW5kIGBpc0J1ZmZlckxpa2VgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0U2l6ZVByb3BlcnR5KSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uKSB7XG4gICAgdmFyIHNpemVQcm9wZXJ0eSA9IGdldFNpemVQcm9wZXJ0eShjb2xsZWN0aW9uKTtcbiAgICByZXR1cm4gdHlwZW9mIHNpemVQcm9wZXJ0eSA9PSAnbnVtYmVyJyAmJiBzaXplUHJvcGVydHkgPj0gMCAmJiBzaXplUHJvcGVydHkgPD0gTUFYX0FSUkFZX0lOREVYO1xuICB9XG59XG4iLCIvLyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiB0byBvYnRhaW4gcHJvcGVydHkgYGtleWAgZnJvbSBgb2JqYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYWxsb3dQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICB9O1xufVxuIiwiaW1wb3J0IHNoYWxsb3dQcm9wZXJ0eSBmcm9tICcuL19zaGFsbG93UHJvcGVydHkuanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgYnl0ZUxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgc2hhbGxvd1Byb3BlcnR5KCdieXRlTGVuZ3RoJyk7XG4iLCJpbXBvcnQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2sgZnJvbSAnLi9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMnO1xuaW1wb3J0IGdldEJ5dGVMZW5ndGggZnJvbSAnLi9fZ2V0Qnl0ZUxlbmd0aC5qcyc7XG5cbi8vIEludGVybmFsIGhlbHBlciB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgc3BlbmQgZXh0ZW5zaXZlIGNoZWNrcyBhZ2FpbnN0XG4vLyBgQXJyYXlCdWZmZXJgIGV0IGFsLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0Qnl0ZUxlbmd0aCk7XG4iLCJpbXBvcnQgeyBzdXBwb3J0c0FycmF5QnVmZmVyLCBuYXRpdmVJc1ZpZXcsIHRvU3RyaW5nIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGlzRGF0YVZpZXcgZnJvbSAnLi9pc0RhdGFWaWV3LmpzJztcbmltcG9ydCBjb25zdGFudCBmcm9tICcuL2NvbnN0YW50LmpzJztcbmltcG9ydCBpc0J1ZmZlckxpa2UgZnJvbSAnLi9faXNCdWZmZXJMaWtlLmpzJztcblxuLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIHR5cGVkIGFycmF5P1xudmFyIHR5cGVkQXJyYXlQYXR0ZXJuID0gL1xcW29iamVjdCAoKEl8VWkpbnQoOHwxNnwzMil8RmxvYXQoMzJ8NjQpfFVpbnQ4Q2xhbXBlZHxCaWcoSXxVaSludDY0KUFycmF5XFxdLztcbmZ1bmN0aW9uIGlzVHlwZWRBcnJheShvYmopIHtcbiAgLy8gYEFycmF5QnVmZmVyLmlzVmlld2AgaXMgdGhlIG1vc3QgZnV0dXJlLXByb29mLCBzbyB1c2UgaXQgd2hlbiBhdmFpbGFibGUuXG4gIC8vIE90aGVyd2lzZSwgZmFsbCBiYWNrIG9uIHRoZSBhYm92ZSByZWd1bGFyIGV4cHJlc3Npb24uXG4gIHJldHVybiBuYXRpdmVJc1ZpZXcgPyAobmF0aXZlSXNWaWV3KG9iaikgJiYgIWlzRGF0YVZpZXcob2JqKSkgOlxuICAgICAgICAgICAgICAgIGlzQnVmZmVyTGlrZShvYmopICYmIHR5cGVkQXJyYXlQYXR0ZXJuLnRlc3QodG9TdHJpbmcuY2FsbChvYmopKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3VwcG9ydHNBcnJheUJ1ZmZlciA/IGlzVHlwZWRBcnJheSA6IGNvbnN0YW50KGZhbHNlKTtcbiIsImltcG9ydCBzaGFsbG93UHJvcGVydHkgZnJvbSAnLi9fc2hhbGxvd1Byb3BlcnR5LmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgc2hhbGxvd1Byb3BlcnR5KCdsZW5ndGgnKTtcbiIsImltcG9ydCB7IG5vbkVudW1lcmFibGVQcm9wcywgT2JqUHJvdG8gfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGhhcyBmcm9tICcuL19oYXMuanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gY3JlYXRlIGEgc2ltcGxlIGxvb2t1cCBzdHJ1Y3R1cmUuXG4vLyBgY29sbGVjdE5vbkVudW1Qcm9wc2AgdXNlZCB0byBkZXBlbmQgb24gYF8uY29udGFpbnNgLCBidXQgdGhpcyBsZWQgdG9cbi8vIGNpcmN1bGFyIGltcG9ydHMuIGBlbXVsYXRlZFNldGAgaXMgYSBvbmUtb2ZmIHNvbHV0aW9uIHRoYXQgb25seSB3b3JrcyBmb3Jcbi8vIGFycmF5cyBvZiBzdHJpbmdzLlxuZnVuY3Rpb24gZW11bGF0ZWRTZXQoa2V5cykge1xuICB2YXIgaGFzaCA9IHt9O1xuICBmb3IgKHZhciBsID0ga2V5cy5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgKytpKSBoYXNoW2tleXNbaV1dID0gdHJ1ZTtcbiAgcmV0dXJuIHtcbiAgICBjb250YWluczogZnVuY3Rpb24oa2V5KSB7IHJldHVybiBoYXNoW2tleV0gPT09IHRydWU7IH0sXG4gICAgcHVzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICBoYXNoW2tleV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyLiBDaGVja3MgYGtleXNgIGZvciB0aGUgcHJlc2VuY2Ugb2Yga2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndFxuLy8gYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuIEV4dGVuZHMgYGtleXNgIGluIHBsYWNlIGlmXG4vLyBuZWVkZWQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cykge1xuICBrZXlzID0gZW11bGF0ZWRTZXQoa2V5cyk7XG4gIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICB2YXIgcHJvdG8gPSAoaXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bztcblxuICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICBpZiAoaGFzKG9iaiwgcHJvcCkgJiYgIWtleXMuY29udGFpbnMocHJvcCkpIGtleXMucHVzaChwcm9wKTtcblxuICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAgICBpZiAocHJvcCBpbiBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAha2V5cy5jb250YWlucyhwcm9wKSkge1xuICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHsgbmF0aXZlS2V5cywgaGFzRW51bUJ1ZyB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcbmltcG9ydCBjb2xsZWN0Tm9uRW51bVByb3BzIGZyb20gJy4vX2NvbGxlY3ROb25FbnVtUHJvcHMuanMnO1xuXG4vLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4vLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ga2V5cyhvYmopIHtcbiAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107XG4gIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIC8vIEFoZW0sIElFIDwgOS5cbiAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgcmV0dXJuIGtleXM7XG59XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzU3RyaW5nIGZyb20gJy4vaXNTdHJpbmcuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/XG4vLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgLy8gU2tpcCB0aGUgbW9yZSBleHBlbnNpdmUgYHRvU3RyaW5nYC1iYXNlZCB0eXBlIGNoZWNrcyBpZiBgb2JqYCBoYXMgbm9cbiAgLy8gYC5sZW5ndGhgLlxuICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKG9iaik7XG4gIGlmICh0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIChcbiAgICBpc0FycmF5KG9iaikgfHwgaXNTdHJpbmcob2JqKSB8fCBpc0FyZ3VtZW50cyhvYmopXG4gICkpIHJldHVybiBsZW5ndGggPT09IDA7XG4gIHJldHVybiBnZXRMZW5ndGgoa2V5cyhvYmopKSA9PT0gMDtcbn1cbiIsImltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybnMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIGF0dHJzKSB7XG4gIHZhciBfa2V5cyA9IGtleXMoYXR0cnMpLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBfa2V5c1tpXTtcbiAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXQgY2FuXG4vLyBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgZnVuY3Rpb25zIGFkZGVkXG4vLyB0aHJvdWdoIGBfLm1peGluYC4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gXyhvYmopIHtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG59XG5cbl8uVkVSU0lPTiA9IFZFUlNJT047XG5cbi8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LlxuXy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG59O1xuXG4vLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveGllcyBmb3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbi8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG5fLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbl8ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBTdHJpbmcodGhpcy5fd3JhcHBlZCk7XG59O1xuIiwiaW1wb3J0IGdldEJ5dGVMZW5ndGggZnJvbSAnLi9fZ2V0Qnl0ZUxlbmd0aC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIHdyYXAgb3Igc2hhbGxvdy1jb3B5IGFuIEFycmF5QnVmZmVyLFxuLy8gdHlwZWQgYXJyYXkgb3IgRGF0YVZpZXcgdG8gYSBuZXcgdmlldywgcmV1c2luZyB0aGUgYnVmZmVyLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9CdWZmZXJWaWV3KGJ1ZmZlclNvdXJjZSkge1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoXG4gICAgYnVmZmVyU291cmNlLmJ1ZmZlciB8fCBidWZmZXJTb3VyY2UsXG4gICAgYnVmZmVyU291cmNlLmJ5dGVPZmZzZXQgfHwgMCxcbiAgICBnZXRCeXRlTGVuZ3RoKGJ1ZmZlclNvdXJjZSlcbiAgKTtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgeyB0b1N0cmluZywgU3ltYm9sUHJvdG8gfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgZ2V0Qnl0ZUxlbmd0aCBmcm9tICcuL19nZXRCeXRlTGVuZ3RoLmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCB7IGhhc0RhdGFWaWV3QnVnIH0gIGZyb20gJy4vX3N0cmluZ1RhZ0J1Zy5qcyc7XG5pbXBvcnQgaXNEYXRhVmlldyBmcm9tICcuL2lzRGF0YVZpZXcuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcbmltcG9ydCB0b0J1ZmZlclZpZXcgZnJvbSAnLi9fdG9CdWZmZXJWaWV3LmpzJztcblxuLy8gV2UgdXNlIHRoaXMgc3RyaW5nIHR3aWNlLCBzbyBnaXZlIGl0IGEgbmFtZSBmb3IgbWluaWZpY2F0aW9uLlxudmFyIHRhZ0RhdGFWaWV3ID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLlxuZnVuY3Rpb24gZXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cHM6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gIC8vIEV4aGF1c3QgcHJpbWl0aXZlIGNoZWNrc1xuICB2YXIgdHlwZSA9IHR5cGVvZiBhO1xuICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKTtcbn1cblxuLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLlxuZnVuY3Rpb24gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLlxuICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBJRSAxMCAtIEVkZ2UgMTMuXG4gIGlmIChoYXNEYXRhVmlld0J1ZyAmJiBjbGFzc05hbWUgPT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgaXNEYXRhVmlldyhhKSkge1xuICAgIGlmICghaXNEYXRhVmlldyhiKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNsYXNzTmFtZSA9IHRhZ0RhdGFWaWV3O1xuICB9XG4gIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgLy8gVGhlc2UgdHlwZXMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU4uXG4gICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6XG4gICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgY2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuICAgIGNhc2UgdGFnRGF0YVZpZXc6XG4gICAgICAvLyBDb2VyY2UgdG8gdHlwZWQgYXJyYXkgc28gd2UgY2FuIGZhbGwgdGhyb3VnaC5cbiAgICAgIHJldHVybiBkZWVwRXEodG9CdWZmZXJWaWV3KGEpLCB0b0J1ZmZlclZpZXcoYiksIGFTdGFjaywgYlN0YWNrKTtcbiAgfVxuXG4gIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIGlmICghYXJlQXJyYXlzICYmIGlzVHlwZWRBcnJheShhKSkge1xuICAgICAgdmFyIGJ5dGVMZW5ndGggPSBnZXRCeXRlTGVuZ3RoKGEpO1xuICAgICAgaWYgKGJ5dGVMZW5ndGggIT09IGdldEJ5dGVMZW5ndGgoYikpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChhLmJ1ZmZlciA9PT0gYi5idWZmZXIgJiYgYS5ieXRlT2Zmc2V0ID09PSBiLmJ5dGVPZmZzZXQpIHJldHVybiB0cnVlO1xuICAgICAgYXJlQXJyYXlzID0gdHJ1ZTtcbiAgfVxuICBpZiAoIWFyZUFycmF5cykge1xuICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKGlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0gYjtcbiAgfVxuXG4gIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgYVN0YWNrLnB1c2goYSk7XG4gIGJTdGFjay5wdXNoKGIpO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgIHZhciBfa2V5cyA9IGtleXMoYSksIGtleTtcbiAgICBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgIGlmIChrZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgIGtleSA9IF9rZXlzW2xlbmd0aF07XG4gICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgYVN0YWNrLnBvcCgpO1xuICBiU3RhY2sucG9wKCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xuICByZXR1cm4gZXEoYSwgYik7XG59XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgeyBoYXNFbnVtQnVnIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGNvbGxlY3ROb25FbnVtUHJvcHMgZnJvbSAnLi9fY29sbGVjdE5vbkVudW1Qcm9wcy5qcyc7XG5cbi8vIFJldHJpZXZlIGFsbCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbGxLZXlzKG9iaikge1xuICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIC8vIEFoZW0sIElFIDwgOS5cbiAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgcmV0dXJuIGtleXM7XG59XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGFsbEtleXMgZnJvbSAnLi9hbGxLZXlzLmpzJztcblxuLy8gU2luY2UgdGhlIHJlZ3VsYXIgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIHR5cGUgdGVzdHMgZG9uJ3Qgd29yayBmb3Jcbi8vIHNvbWUgdHlwZXMgaW4gSUUgMTEsIHdlIHVzZSBhIGZpbmdlcnByaW50aW5nIGhldXJpc3RpYyBpbnN0ZWFkLCBiYXNlZFxuLy8gb24gdGhlIG1ldGhvZHMuIEl0J3Mgbm90IGdyZWF0LCBidXQgaXQncyB0aGUgYmVzdCB3ZSBnb3QuXG4vLyBUaGUgZmluZ2VycHJpbnQgbWV0aG9kIGxpc3RzIGFyZSBkZWZpbmVkIGJlbG93LlxuZXhwb3J0IGZ1bmN0aW9uIGllMTFmaW5nZXJwcmludChtZXRob2RzKSB7XG4gIHZhciBsZW5ndGggPSBnZXRMZW5ndGgobWV0aG9kcyk7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBoYXZlIG5vIGVudW1lcmFibGUga2V5cy5cbiAgICB2YXIga2V5cyA9IGFsbEtleXMob2JqKTtcbiAgICBpZiAoZ2V0TGVuZ3RoKGtleXMpKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFpc0Z1bmN0aW9uKG9ialttZXRob2RzW2ldXSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIHRlc3RpbmcgYWdhaW5zdCBgV2Vha01hcGAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXRcbiAgICAvLyBgb2JqYCBkb2Vzbid0IGhhdmUgYSBgZm9yRWFjaGAgbWV0aG9kIGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoXG4gICAgLy8gaXQgZnJvbSBhIHJlZ3VsYXIgYE1hcGAuXG4gICAgcmV0dXJuIG1ldGhvZHMgIT09IHdlYWtNYXBNZXRob2RzIHx8ICFpc0Z1bmN0aW9uKG9ialtmb3JFYWNoTmFtZV0pO1xuICB9O1xufVxuXG4vLyBJbiB0aGUgaW50ZXJlc3Qgb2YgY29tcGFjdCBtaW5pZmljYXRpb24sIHdlIHdyaXRlXG4vLyBlYWNoIHN0cmluZyBpbiB0aGUgZmluZ2VycHJpbnRzIG9ubHkgb25jZS5cbnZhciBmb3JFYWNoTmFtZSA9ICdmb3JFYWNoJyxcbiAgICBoYXNOYW1lID0gJ2hhcycsXG4gICAgY29tbW9uSW5pdCA9IFsnY2xlYXInLCAnZGVsZXRlJ10sXG4gICAgbWFwVGFpbCA9IFsnZ2V0JywgaGFzTmFtZSwgJ3NldCddO1xuXG4vLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBlYWNoIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50XG4vLyBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlIHN1Ymxpc3RzLlxuZXhwb3J0IHZhciBtYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQoZm9yRWFjaE5hbWUsIG1hcFRhaWwpLFxuICAgIHdlYWtNYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQobWFwVGFpbCksXG4gICAgc2V0TWV0aG9kcyA9IFsnYWRkJ10uY29uY2F0KGNvbW1vbkluaXQsIGZvckVhY2hOYW1lLCBoYXNOYW1lKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcbmltcG9ydCB7IGlzSUUxMSB9IGZyb20gJy4vX3N0cmluZ1RhZ0J1Zy5qcyc7XG5pbXBvcnQgeyBpZTExZmluZ2VycHJpbnQsIG1hcE1ldGhvZHMgfSAgZnJvbSAnLi9fbWV0aG9kRmluZ2VycHJpbnQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQobWFwTWV0aG9kcykgOiB0YWdUZXN0ZXIoJ01hcCcpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuaW1wb3J0IHsgaXNJRTExIH0gZnJvbSAnLi9fc3RyaW5nVGFnQnVnLmpzJztcbmltcG9ydCB7IGllMTFmaW5nZXJwcmludCwgd2Vha01hcE1ldGhvZHMgfSAgZnJvbSAnLi9fbWV0aG9kRmluZ2VycHJpbnQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQod2Vha01hcE1ldGhvZHMpIDogdGFnVGVzdGVyKCdXZWFrTWFwJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5pbXBvcnQgeyBpc0lFMTEgfSBmcm9tICcuL19zdHJpbmdUYWdCdWcuanMnO1xuaW1wb3J0IHsgaWUxMWZpbmdlcnByaW50LCBzZXRNZXRob2RzIH0gIGZyb20gJy4vX21ldGhvZEZpbmdlcnByaW50LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHNldE1ldGhvZHMpIDogdGFnVGVzdGVyKCdTZXQnKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgdGFnVGVzdGVyKCdXZWFrU2V0Jyk7XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWx1ZXMob2JqKSB7XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgdmFyIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZXNbaV0gPSBvYmpbX2tleXNbaV1dO1xuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbi8vIFRoZSBvcHBvc2l0ZSBvZiBgXy5vYmplY3RgIHdpdGggb25lIGFyZ3VtZW50LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFpcnMob2JqKSB7XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgdmFyIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHBhaXJzW2ldID0gW19rZXlzW2ldLCBvYmpbX2tleXNbaV1dXTtcbiAgfVxuICByZXR1cm4gcGFpcnM7XG59XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbnZlcnQob2JqKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHRbb2JqW19rZXlzW2ldXV0gPSBfa2V5c1tpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcblxuLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZnVuY3Rpb25zKG9iaikge1xuICB2YXIgbmFtZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBuYW1lcy5zb3J0KCk7XG59XG4iLCIvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoa2V5c0Z1bmMsIGRlZmF1bHRzKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoZGVmYXVsdHMpIG9iaiA9IE9iamVjdChvYmopO1xuICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG59XG4iLCJpbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGFsbEtleXMgZnJvbSAnLi9hbGxLZXlzLmpzJztcblxuLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcihhbGxLZXlzKTtcbiIsImltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJvcGVydGllcyBpbiB0aGUgcGFzc2VkLWluXG4vLyBvYmplY3QocykuXG4vLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFzc2lnbmVyKGtleXMpO1xuIiwiaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcbmltcG9ydCBhbGxLZXlzIGZyb20gJy4vYWxsS2V5cy5qcyc7XG5cbi8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcihhbGxLZXlzLCB0cnVlKTtcbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB7IG5hdGl2ZUNyZWF0ZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gQ3JlYXRlIGEgbmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuZnVuY3Rpb24gY3RvcigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCl7fTtcbn1cblxuLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJhc2VDcmVhdGUocHJvdG90eXBlKSB7XG4gIGlmICghaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gIHZhciBDdG9yID0gY3RvcigpO1xuICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBleHRlbmRPd24gZnJvbSAnLi9leHRlbmRPd24uanMnO1xuXG4vLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4vLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gY3JlYXRlZCBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wcykge1xuICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICBpZiAocHJvcHMpIGV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4vZXh0ZW5kLmpzJztcblxuLy8gQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xvbmUob2JqKSB7XG4gIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgcmV0dXJuIGlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogZXh0ZW5kKHt9LCBvYmopO1xufVxuIiwiLy8gSW52b2tlcyBgaW50ZXJjZXB0b3JgIHdpdGggdGhlIGBvYmpgIGFuZCB0aGVuIHJldHVybnMgYG9iamAuXG4vLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbi8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGFwKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgaW50ZXJjZXB0b3Iob2JqKTtcbiAgcmV0dXJuIG9iajtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vLyBOb3JtYWxpemUgYSAoZGVlcCkgcHJvcGVydHkgYHBhdGhgIHRvIGFycmF5LlxuLy8gTGlrZSBgXy5pdGVyYXRlZWAsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGN1c3RvbWl6ZWQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1BhdGgocGF0aCkge1xuICByZXR1cm4gaXNBcnJheShwYXRoKSA/IHBhdGggOiBbcGF0aF07XG59XG5fLnRvUGF0aCA9IHRvUGF0aDtcbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgJy4vdG9QYXRoLmpzJztcblxuLy8gSW50ZXJuYWwgd3JhcHBlciBmb3IgYF8udG9QYXRoYCB0byBlbmFibGUgbWluaWZpY2F0aW9uLlxuLy8gU2ltaWxhciB0byBgY2JgIGZvciBgXy5pdGVyYXRlZWAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1BhdGgocGF0aCkge1xuICByZXR1cm4gXy50b1BhdGgocGF0aCk7XG59XG4iLCIvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBvYnRhaW4gYSBuZXN0ZWQgcHJvcGVydHkgaW4gYG9iamAgYWxvbmcgYHBhdGhgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVlcEdldChvYmosIHBhdGgpIHtcbiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIG9iaiA9IG9ialtwYXRoW2ldXTtcbiAgfVxuICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xufVxuIiwiaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuaW1wb3J0IGRlZXBHZXQgZnJvbSAnLi9fZGVlcEdldC5qcyc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnLi9pc1VuZGVmaW5lZC5qcyc7XG5cbi8vIEdldCB0aGUgdmFsdWUgb2YgdGhlIChkZWVwKSBwcm9wZXJ0eSBvbiBgcGF0aGAgZnJvbSBgb2JqZWN0YC5cbi8vIElmIGFueSBwcm9wZXJ0eSBpbiBgcGF0aGAgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlIHZhbHVlIGlzXG4vLyBgdW5kZWZpbmVkYCwgcmV0dXJuIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQuXG4vLyBUaGUgYHBhdGhgIGlzIG5vcm1hbGl6ZWQgdGhyb3VnaCBgXy50b1BhdGhgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciB2YWx1ZSA9IGRlZXBHZXQob2JqZWN0LCB0b1BhdGgocGF0aCkpO1xuICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG59XG4iLCJpbXBvcnQgX2hhcyBmcm9tICcuL19oYXMuanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuXG4vLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3BlcnR5IGRpcmVjdGx5IG9uXG4vLyBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLiBVbmxpa2UgdGhlIGludGVybmFsIGBoYXNgXG4vLyBmdW5jdGlvbiwgdGhpcyBwdWJsaWMgdmVyc2lvbiBjYW4gYWxzbyB0cmF2ZXJzZSBuZXN0ZWQgcHJvcGVydGllcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhcyhvYmosIHBhdGgpIHtcbiAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgaWYgKCFfaGFzKG9iaiwga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIG9iaiA9IG9ialtrZXldO1xuICB9XG4gIHJldHVybiAhIWxlbmd0aDtcbn1cbiIsIi8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG4iLCJpbXBvcnQgZXh0ZW5kT3duIGZyb20gJy4vZXh0ZW5kT3duLmpzJztcbmltcG9ydCBpc01hdGNoIGZyb20gJy4vaXNNYXRjaC5qcyc7XG5cbi8vIFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZlxuLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXRjaGVyKGF0dHJzKSB7XG4gIGF0dHJzID0gZXh0ZW5kT3duKHt9LCBhdHRycyk7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gaXNNYXRjaChvYmosIGF0dHJzKTtcbiAgfTtcbn1cbiIsImltcG9ydCBkZWVwR2V0IGZyb20gJy4vX2RlZXBHZXQuanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuXG4vLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuLy8gcHJvcGVydGllcyBkb3duIHRoZSBnaXZlbiBgcGF0aGAsIHNwZWNpZmllZCBhcyBhbiBhcnJheSBvZiBrZXlzIG9yIGluZGljZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gZGVlcEdldChvYmosIHBhdGgpO1xuICB9O1xufVxuIiwiLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbi8vIGZ1bmN0aW9ucy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9wdGltaXplQ2IoZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICB9O1xuICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LlxuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgIH07XG4gICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgbWF0Y2hlciBmcm9tICcuL21hdGNoZXIuanMnO1xuaW1wb3J0IHByb3BlcnR5IGZyb20gJy4vcHJvcGVydHkuanMnO1xuaW1wb3J0IG9wdGltaXplQ2IgZnJvbSAnLi9fb3B0aW1pemVDYi5qcyc7XG5cbi8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGVhY2hcbi8vIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXIgYF8uaWRlbnRpdHlgLFxuLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkpIHJldHVybiBtYXRjaGVyKHZhbHVlKTtcbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5cbi8vIEV4dGVybmFsIHdyYXBwZXIgZm9yIG91ciBjYWxsYmFjayBnZW5lcmF0b3IuIFVzZXJzIG1heSBjdXN0b21pemVcbi8vIGBfLml0ZXJhdGVlYCBpZiB0aGV5IHdhbnQgYWRkaXRpb25hbCBwcmVkaWNhdGUvaXRlcmF0ZWUgc2hvcnRoYW5kIHN0eWxlcy5cbi8vIFRoaXMgYWJzdHJhY3Rpb24gaGlkZXMgdGhlIGludGVybmFsLW9ubHkgYGFyZ0NvdW50YCBhcmd1bWVudC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KSB7XG4gIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbn1cbl8uaXRlcmF0ZWUgPSBpdGVyYXRlZTtcbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgaXRlcmF0ZWUgZnJvbSAnLi9pdGVyYXRlZS5qcyc7XG5cbi8vIFRoZSBmdW5jdGlvbiB3ZSBjYWxsIGludGVybmFsbHkgdG8gZ2VuZXJhdGUgYSBjYWxsYmFjay4gSXQgaW52b2tlc1xuLy8gYF8uaXRlcmF0ZWVgIGlmIG92ZXJyaWRkZW4sIG90aGVyd2lzZSBgYmFzZUl0ZXJhdGVlYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICBpZiAoXy5pdGVyYXRlZSAhPT0gaXRlcmF0ZWUpIHJldHVybiBfLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTtcbiAgcmV0dXJuIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBlbGVtZW50IG9mIGBvYmpgLlxuLy8gSW4gY29udHJhc3QgdG8gYF8ubWFwYCBpdCByZXR1cm5zIGFuIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1hcE9iamVjdChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB2YXIgX2tleXMgPSBrZXlzKG9iaiksXG4gICAgICBsZW5ndGggPSBfa2V5cy5sZW5ndGgsXG4gICAgICByZXN1bHRzID0ge307XG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzW2luZGV4XTtcbiAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuIiwiLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub29wKCl7fVxuIiwiaW1wb3J0IG5vb3AgZnJvbSAnLi9ub29wLmpzJztcbmltcG9ydCBnZXQgZnJvbSAnLi9nZXQuanMnO1xuXG4vLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9wZXJ0eU9mKG9iaikge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiBub29wO1xuICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgIHJldHVybiBnZXQob2JqLCBwYXRoKTtcbiAgfTtcbn1cbiIsImltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuXG4vLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpbWVzKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gIHJldHVybiBhY2N1bTtcbn1cbiIsIi8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgIChpbmNsdXNpdmUpLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7XG4gIGlmIChtYXggPT0gbnVsbCkge1xuICAgIG1heCA9IG1pbjtcbiAgICBtaW4gPSAwO1xuICB9XG4gIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xufVxuIiwiLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuZXhwb3J0IGRlZmF1bHQgRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn07XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2VuZXJhdGUgZnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzXG4vLyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUVzY2FwZXIobWFwKSB7XG4gIHZhciBlc2NhcGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgfTtcbiAgLy8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkLlxuICB2YXIgc291cmNlID0gJyg/OicgKyBrZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICB2YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gIH07XG59XG4iLCIvLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuZXhwb3J0IGRlZmF1bHQge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7J1xufTtcbiIsImltcG9ydCBjcmVhdGVFc2NhcGVyIGZyb20gJy4vX2NyZWF0ZUVzY2FwZXIuanMnO1xuaW1wb3J0IGVzY2FwZU1hcCBmcm9tICcuL19lc2NhcGVNYXAuanMnO1xuXG4vLyBGdW5jdGlvbiBmb3IgZXNjYXBpbmcgc3RyaW5ncyB0byBIVE1MIGludGVycG9sYXRpb24uXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4iLCJpbXBvcnQgY3JlYXRlRXNjYXBlciBmcm9tICcuL19jcmVhdGVFc2NhcGVyLmpzJztcbmltcG9ydCB1bmVzY2FwZU1hcCBmcm9tICcuL191bmVzY2FwZU1hcC5qcyc7XG5cbi8vIEZ1bmN0aW9uIGZvciB1bmVzY2FwaW5nIHN0cmluZ3MgZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcbiIsImltcG9ydCBpbnZlcnQgZnJvbSAnLi9pbnZlcnQuanMnO1xuaW1wb3J0IGVzY2FwZU1hcCBmcm9tICcuL19lc2NhcGVNYXAuanMnO1xuXG4vLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIHVuZXNjYXBpbmcuXG5leHBvcnQgZGVmYXVsdCBpbnZlcnQoZXNjYXBlTWFwKTtcbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5cbi8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycy4gQ2hhbmdlIHRoZVxuLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuZXhwb3J0IGRlZmF1bHQgXy50ZW1wbGF0ZVNldHRpbmdzID0ge1xuICBldmFsdWF0ZTogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICBlc2NhcGU6IC88JS0oW1xcc1xcU10rPyklPi9nXG59O1xuIiwiaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMuanMnO1xuaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcbmltcG9ydCAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcblxuLy8gV2hlbiBjdXN0b21pemluZyBgXy50ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4vLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4vLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbnZhciBub01hdGNoID0gLyguKV4vO1xuXG4vLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuLy8gc3RyaW5nIGxpdGVyYWwuXG52YXIgZXNjYXBlcyA9IHtcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxcXCc6ICdcXFxcJyxcbiAgJ1xccic6ICdyJyxcbiAgJ1xcbic6ICduJyxcbiAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAnXFx1MjAyOSc6ICd1MjAyOSdcbn07XG5cbnZhciBlc2NhcGVSZWdFeHAgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXIobWF0Y2gpIHtcbiAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xufVxuXG4vLyBJbiBvcmRlciB0byBwcmV2ZW50IHRoaXJkLXBhcnR5IGNvZGUgaW5qZWN0aW9uIHRocm91Z2hcbi8vIGBfLnRlbXBsYXRlU2V0dGluZ3MudmFyaWFibGVgLCB3ZSB0ZXN0IGl0IGFnYWluc3QgdGhlIGZvbGxvd2luZyByZWd1bGFyXG4vLyBleHByZXNzaW9uLiBJdCBpcyBpbnRlbnRpb25hbGx5IGEgYml0IG1vcmUgbGliZXJhbCB0aGFuIGp1c3QgbWF0Y2hpbmcgdmFsaWRcbi8vIGlkZW50aWZpZXJzLCBidXQgc3RpbGwgcHJldmVudHMgcG9zc2libGUgbG9vcGhvbGVzIHRocm91Z2ggZGVmYXVsdHMgb3Jcbi8vIGRlc3RydWN0dXJpbmcgYXNzaWdubWVudC5cbnZhciBiYXJlSWRlbnRpZmllciA9IC9eXFxzKihcXHd8XFwkKStcXHMqJC87XG5cbi8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4vLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4vLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbi8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRlbXBsYXRlKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICBzZXR0aW5ncyA9IGRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgIGlmIChlc2NhcGUpIHtcbiAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICB9XG5cbiAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9KTtcbiAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZTtcbiAgaWYgKGFyZ3VtZW50KSB7XG4gICAgLy8gSW5zdXJlIGFnYWluc3QgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24uIChDVkUtMjAyMS0yMzM1OClcbiAgICBpZiAoIWJhcmVJZGVudGlmaWVyLnRlc3QoYXJndW1lbnQpKSB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndmFyaWFibGUgaXMgbm90IGEgYmFyZSBpZGVudGlmaWVyOiAnICsgYXJndW1lbnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcbiAgICBhcmd1bWVudCA9ICdvYmonO1xuICB9XG5cbiAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICB2YXIgcmVuZGVyO1xuICB0cnkge1xuICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihhcmd1bWVudCwgJ18nLCBzb3VyY2UpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICByZXR1cm4gdGVtcGxhdGU7XG59XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuXG4vLyBUcmF2ZXJzZXMgdGhlIGNoaWxkcmVuIG9mIGBvYmpgIGFsb25nIGBwYXRoYC4gSWYgYSBjaGlsZCBpcyBhIGZ1bmN0aW9uLCBpdFxuLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4vLyBjaGlsZCwgb3IgYGZhbGxiYWNrYCBpZiBhbnkgY2hpbGQgaXMgdW5kZWZpbmVkLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzdWx0KG9iaiwgcGF0aCwgZmFsbGJhY2spIHtcbiAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGZhbGxiYWNrKSA/IGZhbGxiYWNrLmNhbGwob2JqKSA6IGZhbGxiYWNrO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJvcCA9IG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW3BhdGhbaV1dO1xuICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgIHByb3AgPSBmYWxsYmFjaztcbiAgICAgIGkgPSBsZW5ndGg7IC8vIEVuc3VyZSB3ZSBkb24ndCBjb250aW51ZSBpdGVyYXRpbmcuXG4gICAgfVxuICAgIG9iaiA9IGlzRnVuY3Rpb24ocHJvcCkgPyBwcm9wLmNhbGwob2JqKSA6IHByb3A7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbiIsIi8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4vLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLlxudmFyIGlkQ291bnRlciA9IDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuXG4vLyBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaGFpbihvYmopIHtcbiAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG4iLCJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBgc291cmNlRnVuY2AgYm91bmQgdG8gYGNvbnRleHRgIHdpdGggb3B0aW9uYWxcbi8vIGBhcmdzYC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yIG9yIGFzIGFcbi8vIG5vcm1hbCBmdW5jdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4ZWN1dGVCb3VuZChzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gIHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICBpZiAoaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgcmV0dXJuIHNlbGY7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGV4ZWN1dGVCb3VuZCBmcm9tICcuL19leGVjdXRlQm91bmQuanMnO1xuaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcblxuLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIGBfYCBhY3RzXG4vLyBhcyBhIHBsYWNlaG9sZGVyIGJ5IGRlZmF1bHQsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmVcbi8vIHByZS1maWxsZWQuIFNldCBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCBmb3IgYSBjdXN0b20gcGxhY2Vob2xkZXIgYXJndW1lbnQuXG52YXIgcGFydGlhbCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgYm91bmRBcmdzKSB7XG4gIHZhciBwbGFjZWhvbGRlciA9IHBhcnRpYWwucGxhY2Vob2xkZXI7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgIH1cbiAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgfTtcbiAgcmV0dXJuIGJvdW5kO1xufSk7XG5cbnBhcnRpYWwucGxhY2Vob2xkZXIgPSBfO1xuZXhwb3J0IGRlZmF1bHQgcGFydGlhbDtcbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGV4ZWN1dGVCb3VuZCBmcm9tICcuL19leGVjdXRlQm91bmQuanMnO1xuXG4vLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbi8vIG9wdGlvbmFsbHkpLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdzKSB7XG4gIGlmICghaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gIHZhciBib3VuZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oY2FsbEFyZ3MpIHtcbiAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChjYWxsQXJncykpO1xuICB9KTtcbiAgcmV0dXJuIGJvdW5kO1xufSk7XG4iLCJpbXBvcnQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2sgZnJvbSAnLi9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbi8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3QuXG4vLyBSZWxhdGVkOiBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbi8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTaXplUHJvcGVydHlDaGVjayhnZXRMZW5ndGgpO1xuIiwiaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5cbi8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsYXR0ZW4oaW5wdXQsIGRlcHRoLCBzdHJpY3QsIG91dHB1dCkge1xuICBvdXRwdXQgPSBvdXRwdXQgfHwgW107XG4gIGlmICghZGVwdGggJiYgZGVwdGggIT09IDApIHtcbiAgICBkZXB0aCA9IEluZmluaXR5O1xuICB9IGVsc2UgaWYgKGRlcHRoIDw9IDApIHtcbiAgICByZXR1cm4gb3V0cHV0LmNvbmNhdChpbnB1dCk7XG4gIH1cbiAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgZmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBzdHJpY3QsIG91dHB1dCk7XG4gICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGogPCBsZW4pIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtqKytdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJy4vX2ZsYXR0ZW4uanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9iaW5kLmpzJztcblxuLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4vLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3Ncbi8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gIGtleXMgPSBmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSk7XG4gIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICBpZiAoaW5kZXggPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgb2JqW2tleV0gPSBiaW5kKG9ialtrZXldLCBvYmopO1xuICB9XG4gIHJldHVybiBvYmo7XG59KTtcbiIsImltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcblxuLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lbW9pemUoZnVuYywgaGFzaGVyKSB7XG4gIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICBpZiAoIWhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgfTtcbiAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICByZXR1cm4gbWVtb2l6ZTtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5cbi8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbi8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgd2FpdCwgYXJncykge1xuICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgfSwgd2FpdCk7XG59KTtcbiIsImltcG9ydCBwYXJ0aWFsIGZyb20gJy4vcGFydGlhbC5qcyc7XG5pbXBvcnQgZGVsYXkgZnJvbSAnLi9kZWxheS5qcyc7XG5pbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuXG4vLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbi8vIGNsZWFyZWQuXG5leHBvcnQgZGVmYXVsdCBwYXJ0aWFsKGRlbGF5LCBfLCAxKTtcbiIsImltcG9ydCBub3cgZnJvbSAnLi9ub3cuanMnO1xuXG4vLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2Vcbi8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuLy8gYXMgbXVjaCBhcyBpdCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0aW9uO1xuLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3Ncbi8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgdGltZW91dCwgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogbm93KCk7XG4gICAgdGltZW91dCA9IG51bGw7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcblxuICB2YXIgdGhyb3R0bGVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIF9ub3cgPSBub3coKTtcbiAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gX25vdztcbiAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChfbm93IC0gcHJldmlvdXMpO1xuICAgIGNvbnRleHQgPSB0aGlzO1xuICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBwcmV2aW91cyA9IF9ub3c7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdGhyb3R0bGVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICBwcmV2aW91cyA9IDA7XG4gICAgdGltZW91dCA9IGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gdGhyb3R0bGVkO1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBub3cgZnJvbSAnLi9ub3cuanMnO1xuXG4vLyBXaGVuIGEgc2VxdWVuY2Ugb2YgY2FsbHMgb2YgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGVuZHMsIHRoZSBhcmd1bWVudFxuLy8gZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBUaGUgZW5kIG9mIGEgc2VxdWVuY2UgaXMgZGVmaW5lZCBieSB0aGUgYHdhaXRgXG4vLyBwYXJhbWV0ZXIuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uIHdpbGwgYmVcbi8vIHRyaWdnZXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZSBpbnN0ZWFkIG9mIGF0IHRoZSBlbmQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgdmFyIHRpbWVvdXQsIHByZXZpb3VzLCBhcmdzLCByZXN1bHQsIGNvbnRleHQ7XG5cbiAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhc3NlZCA9IG5vdygpIC0gcHJldmlvdXM7XG4gICAgaWYgKHdhaXQgPiBwYXNzZWQpIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gcGFzc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBpZiAoIWltbWVkaWF0ZSkgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIGJlY2F1c2UgYGZ1bmNgIGNhbiByZWN1cnNpdmVseSBpbnZva2UgYGRlYm91bmNlZGAuXG4gICAgICBpZiAoIXRpbWVvdXQpIGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlYm91bmNlZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oX2FyZ3MpIHtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gX2FyZ3M7XG4gICAgcHJldmlvdXMgPSBub3coKTtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIGRlYm91bmNlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gZGVib3VuY2VkO1xufVxuIiwiaW1wb3J0IHBhcnRpYWwgZnJvbSAnLi9wYXJ0aWFsLmpzJztcblxuLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4vLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4vLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd3JhcChmdW5jLCB3cmFwcGVyKSB7XG4gIHJldHVybiBwYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xufVxuIiwiLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5lZ2F0ZShwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaSA9IHN0YXJ0O1xuICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG4iLCIvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFmdGVyKHRpbWVzLCBmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlXG4vLyBOdGggY2FsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJlZm9yZSh0aW1lcywgZnVuYykge1xuICB2YXIgbWVtbztcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgIHJldHVybiBtZW1vO1xuICB9O1xufVxuIiwiaW1wb3J0IHBhcnRpYWwgZnJvbSAnLi9wYXJ0aWFsLmpzJztcbmltcG9ydCBiZWZvcmUgZnJvbSAnLi9iZWZvcmUuanMnO1xuXG4vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbi8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG5leHBvcnQgZGVmYXVsdCBwYXJ0aWFsKGJlZm9yZSwgMik7XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKSwga2V5O1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBfa2V5c1tpXTtcbiAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7XG4gIH1cbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9O1xufVxuIiwiaW1wb3J0IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyIGZyb20gJy4vX2NyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyLmpzJztcblxuLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiIsImltcG9ydCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlciBmcm9tICcuL19jcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlci5qcyc7XG5cbi8vIFJldHVybnMgdGhlIGxhc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuXG4vLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4vLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzb3J0ZWRJbmRleChhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gIH1cbiAgcmV0dXJuIGxvdztcbn1cbiIsImltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGlzTmFOIGZyb20gJy4vaXNOYU4uanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgYF8uaW5kZXhPZmAgYW5kIGBfLmxhc3RJbmRleE9mYCBmdW5jdGlvbnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgfVxuICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIGlzTmFOKTtcbiAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICB9XG4gICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfTtcbn1cbiIsImltcG9ydCBzb3J0ZWRJbmRleCBmcm9tICcuL3NvcnRlZEluZGV4LmpzJztcbmltcG9ydCBmaW5kSW5kZXggZnJvbSAnLi9maW5kSW5kZXguanMnO1xuaW1wb3J0IGNyZWF0ZUluZGV4RmluZGVyIGZyb20gJy4vX2NyZWF0ZUluZGV4RmluZGVyLmpzJztcblxuLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbi8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUluZGV4RmluZGVyKDEsIGZpbmRJbmRleCwgc29ydGVkSW5kZXgpO1xuIiwiaW1wb3J0IGZpbmRMYXN0SW5kZXggZnJvbSAnLi9maW5kTGFzdEluZGV4LmpzJztcbmltcG9ydCBjcmVhdGVJbmRleEZpbmRlciBmcm9tICcuL19jcmVhdGVJbmRleEZpbmRlci5qcyc7XG5cbi8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBmaW5kTGFzdEluZGV4KTtcbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgZmluZEluZGV4IGZyb20gJy4vZmluZEluZGV4LmpzJztcbmltcG9ydCBmaW5kS2V5IGZyb20gJy4vZmluZEtleS5qcyc7XG5cbi8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbmQob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgdmFyIGtleUZpbmRlciA9IGlzQXJyYXlMaWtlKG9iaikgPyBmaW5kSW5kZXggOiBmaW5kS2V5O1xuICB2YXIga2V5ID0ga2V5RmluZGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbn1cbiIsImltcG9ydCBmaW5kIGZyb20gJy4vZmluZC5qcyc7XG5pbXBvcnQgbWF0Y2hlciBmcm9tICcuL21hdGNoZXIuanMnO1xuXG4vLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLmZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdFxuLy8gb2JqZWN0IGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaW5kV2hlcmUob2JqLCBhdHRycykge1xuICByZXR1cm4gZmluZChvYmosIG1hdGNoZXIoYXR0cnMpKTtcbn1cbiIsImltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFRoZSBjb3JuZXJzdG9uZSBmb3IgY29sbGVjdGlvbiBmdW5jdGlvbnMsIGFuIGBlYWNoYFxuLy8gaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4vLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4vLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4gIHZhciBpLCBsZW5ndGg7XG4gIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaXRlcmF0ZWUob2JqW19rZXlzW2ldXSwgX2tleXNbaV0sIG9iaik7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFwKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQgb3B0aW1pemVDYiBmcm9tICcuL19vcHRpbWl6ZUNiLmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uLCBpdGVyYXRpbmcgbGVmdCBvciByaWdodC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgLy8gdGhlIG9uZSB0aGF0IGFjY2Vzc2VzIGBhcmd1bWVudHMubGVuZ3RoYCB0byBhdm9pZCBhIHBlcmYgaGl0LiAoIzE5OTEpXG4gIHZhciByZWR1Y2VyID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgaW5pdGlhbCkge1xuICAgIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgIG1lbW8gPSBvYmpbX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICBpbmRleCArPSBkaXI7XG4gICAgfVxuICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgcmV0dXJuIHJlZHVjZXIob2JqLCBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KSwgbWVtbywgaW5pdGlhbCk7XG4gIH07XG59XG4iLCJpbXBvcnQgY3JlYXRlUmVkdWNlIGZyb20gJy4vX2NyZWF0ZVJlZHVjZS5qcyc7XG5cbi8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbi8vIG9yIGBmb2xkbGAuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVSZWR1Y2UoMSk7XG4iLCJpbXBvcnQgY3JlYXRlUmVkdWNlIGZyb20gJy4vX2NyZWF0ZVJlZHVjZS5qcyc7XG5cbi8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUmVkdWNlKC0xKTtcbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuXG4vLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsImltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IG5lZ2F0ZSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5pbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuXG4vLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVqZWN0KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHJldHVybiBmaWx0ZXIob2JqLCBuZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIHBhc3MgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXZlcnkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29tZShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGg7XG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCBpbmRleE9mIGZyb20gJy4vaW5kZXhPZi5qcyc7XG5cbi8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gdmFsdWVzKG9iaik7XG4gIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwO1xuICByZXR1cm4gaW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgZGVlcEdldCBmcm9tICcuL19kZWVwR2V0LmpzJztcbmltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcblxuLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwgcGF0aCwgYXJncykge1xuICB2YXIgY29udGV4dFBhdGgsIGZ1bmM7XG4gIGlmIChpc0Z1bmN0aW9uKHBhdGgpKSB7XG4gICAgZnVuYyA9IHBhdGg7XG4gIH0gZWxzZSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgIHBhdGggPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIG1hcChvYmosIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZnVuYztcbiAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgaWYgKGNvbnRleHRQYXRoICYmIGNvbnRleHRQYXRoLmxlbmd0aCkge1xuICAgICAgICBjb250ZXh0ID0gZGVlcEdldChjb250ZXh0LCBjb250ZXh0UGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGV4dCA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgbWV0aG9kID0gY29udGV4dFtwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZCA9PSBudWxsID8gbWV0aG9kIDogbWV0aG9kLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICB9KTtcbn0pO1xuIiwiaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgcHJvcGVydHkgZnJvbSAnLi9wcm9wZXJ0eS5qcyc7XG5cbi8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8ubWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBsdWNrKG9iaiwga2V5KSB7XG4gIHJldHVybiBtYXAob2JqLCBwcm9wZXJ0eShrZXkpKTtcbn1cbiIsImltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSAnLi9tYXRjaGVyLmpzJztcblxuLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5maWx0ZXJgOiBzZWxlY3Rpbmcgb25seVxuLy8gb2JqZWN0cyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2hlcmUob2JqLCBhdHRycykge1xuICByZXR1cm4gZmlsdGVyKG9iaiwgbWF0Y2hlcihhdHRycykpO1xufVxuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5cbi8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1heChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgKHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSkge1xuICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiB2YWx1ZXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odiwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IChjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSkge1xuICAgICAgICByZXN1bHQgPSB2O1xuICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5cbi8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8ICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkpIHtcbiAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCAoY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpKSB7XG4gICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi9pc1N0cmluZy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcblxuLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbnZhciByZVN0clN5bWJvbCA9IC9bXlxcdWQ4MDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXXxbXFx1ZDgwMC1cXHVkZmZmXS9nO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgaWYgKGlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgaWYgKGlzU3RyaW5nKG9iaikpIHtcbiAgICAvLyBLZWVwIHN1cnJvZ2F0ZSBwYWlyIGNoYXJhY3RlcnMgdG9nZXRoZXIuXG4gICAgcmV0dXJuIG9iai5tYXRjaChyZVN0clN5bWJvbCk7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBtYXAob2JqLCBpZGVudGl0eSk7XG4gIHJldHVybiB2YWx1ZXMob2JqKTtcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xuaW1wb3J0IHRvQXJyYXkgZnJvbSAnLi90b0FycmF5LmpzJztcblxuLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24gdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbi8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4vLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzYW1wbGUob2JqLCBuLCBndWFyZCkge1xuICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSB2YWx1ZXMob2JqKTtcbiAgICByZXR1cm4gb2JqW3JhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICB9XG4gIHZhciBzYW1wbGUgPSB0b0FycmF5KG9iaik7XG4gIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoc2FtcGxlKTtcbiAgbiA9IE1hdGgubWF4KE1hdGgubWluKG4sIGxlbmd0aCksIDApO1xuICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKSB7XG4gICAgdmFyIHJhbmQgPSByYW5kb20oaW5kZXgsIGxhc3QpO1xuICAgIHZhciB0ZW1wID0gc2FtcGxlW2luZGV4XTtcbiAgICBzYW1wbGVbaW5kZXhdID0gc2FtcGxlW3JhbmRdO1xuICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7XG4gIH1cbiAgcmV0dXJuIHNhbXBsZS5zbGljZSgwLCBuKTtcbn1cbiIsImltcG9ydCBzYW1wbGUgZnJvbSAnLi9zYW1wbGUuanMnO1xuXG4vLyBTaHVmZmxlIGEgY29sbGVjdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNodWZmbGUob2JqKSB7XG4gIHJldHVybiBzYW1wbGUob2JqLCBJbmZpbml0eSk7XG59XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IHBsdWNrIGZyb20gJy4vcGx1Y2suanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5cbi8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNvcnRCeShvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciBpbmRleCA9IDA7XG4gIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICByZXR1cm4gcGx1Y2sobWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwga2V5LCBsaXN0KVxuICAgIH07XG4gIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gIH0pLCAndmFsdWUnKTtcbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuXG4vLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBncm91cChiZWhhdmlvciwgcGFydGl0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHBhcnRpdGlvbiA/IFtbXSwgW11dIDoge307XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cbiIsImltcG9ydCBncm91cCBmcm9tICcuL19ncm91cC5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5cbi8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbi8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuZXhwb3J0IGRlZmF1bHQgZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG59KTtcbiIsImltcG9ydCBncm91cCBmcm9tICcuL19ncm91cC5qcyc7XG5cbi8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgXy5ncm91cEJ5YCwgYnV0IGZvclxuLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuZXhwb3J0IGRlZmF1bHQgZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIHJlc3VsdFtrZXldID0gdmFsdWU7XG59KTtcbiIsImltcG9ydCBncm91cCBmcm9tICcuL19ncm91cC5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5cbi8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4vLyBjcml0ZXJpb24uXG5leHBvcnQgZGVmYXVsdCBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgaWYgKGhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xufSk7XG4iLCJpbXBvcnQgZ3JvdXAgZnJvbSAnLi9fZ3JvdXAuanMnO1xuXG4vLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHBhc3MgdGhlIGdpdmVuXG4vLyB0cnV0aCB0ZXN0LCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3QgcGFzcyB0aGUgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIHBhc3MpIHtcbiAgcmVzdWx0W3Bhc3MgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG59LCB0cnVlKTtcbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIGNvbGxlY3Rpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaXplKG9iaikge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBrZXlzKG9iaikubGVuZ3RoO1xufVxuIiwiLy8gSW50ZXJuYWwgYF8ucGlja2AgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGBrZXlgIGlzIGFuIGVudW1lcmFibGVcbi8vIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBrZXlJbk9iaih2YWx1ZSwga2V5LCBvYmopIHtcbiAgcmV0dXJuIGtleSBpbiBvYmo7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuaW1wb3J0IGFsbEtleXMgZnJvbSAnLi9hbGxLZXlzLmpzJztcbmltcG9ydCBrZXlJbk9iaiBmcm9tICcuL19rZXlJbk9iai5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcblxuLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgYWxsb3dlZCBwcm9wZXJ0aWVzLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9LCBpdGVyYXRlZSA9IGtleXNbMF07XG4gIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgaWYgKGlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgaWYgKGtleXMubGVuZ3RoID4gMSkgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBrZXlzWzFdKTtcbiAgICBrZXlzID0gYWxsS2V5cyhvYmopO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAga2V5cyA9IGZsYXR0ZW4oa2V5cywgZmFsc2UsIGZhbHNlKTtcbiAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IG5lZ2F0ZSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5pbXBvcnQgbWFwIGZyb20gJy4vbWFwLmpzJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJy4vX2ZsYXR0ZW4uanMnO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gJy4vY29udGFpbnMuanMnO1xuaW1wb3J0IHBpY2sgZnJvbSAnLi9waWNrLmpzJztcblxuLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGRpc2FsbG93ZWQgcHJvcGVydGllcy5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gIGlmIChpc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgIGl0ZXJhdGVlID0gbmVnYXRlKGl0ZXJhdGVlKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSBjb250ZXh0ID0ga2V5c1sxXTtcbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gbWFwKGZsYXR0ZW4oa2V5cywgZmFsc2UsIGZhbHNlKSwgU3RyaW5nKTtcbiAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgIHJldHVybiAhY29udGFpbnMoa2V5cywga2V5KTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBwaWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xufSk7XG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4vLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWwoYXJyYXksIG4sIGd1YXJkKSB7XG4gIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG59XG4iLCJpbXBvcnQgaW5pdGlhbCBmcm9tICcuL2luaXRpYWwuanMnO1xuXG4vLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbi8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIFRoZSAqKmd1YXJkKiogY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlyc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgfHwgZ3VhcmQgPyB2b2lkIDAgOiBbXTtcbiAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xuICByZXR1cm4gaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG59XG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGBhcnJheWAuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4vLyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZVxuLy8gYGFycmF5YC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG59XG4iLCJpbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QuanMnO1xuXG4vLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4vLyB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFzdChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCB8fCBndWFyZCA/IHZvaWQgMCA6IFtdO1xuICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gIHJldHVybiByZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG59XG4iLCJpbXBvcnQgZmlsdGVyIGZyb20gJy4vZmlsdGVyLmpzJztcblxuLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICByZXR1cm4gZmlsdGVyKGFycmF5LCBCb29sZWFuKTtcbn1cbiIsImltcG9ydCBfZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcblxuLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIHVwIHRvIGBkZXB0aGAuXG4vLyBQYXNzaW5nIGB0cnVlYCBvciBgZmFsc2VgIGFzIGBkZXB0aGAgbWVhbnMgYDFgIG9yIGBJbmZpbml0eWAsIHJlc3BlY3RpdmVseS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXksIGRlcHRoKSB7XG4gIHJldHVybiBfZmxhdHRlbihhcnJheSwgZGVwdGgsIGZhbHNlKTtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcbmltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gJy4vY29udGFpbnMuanMnO1xuXG4vLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4vLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgcmVzdCkge1xuICByZXN0ID0gZmxhdHRlbihyZXN0LCB0cnVlLCB0cnVlKTtcbiAgcmV0dXJuIGZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgIHJldHVybiAhY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICB9KTtcbn0pO1xuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBkaWZmZXJlbmNlIGZyb20gJy4vZGlmZmVyZW5jZS5qcyc7XG5cbi8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgb3RoZXJBcnJheXMpIHtcbiAgcmV0dXJuIGRpZmZlcmVuY2UoYXJyYXksIG90aGVyQXJyYXlzKTtcbn0pO1xuIiwiaW1wb3J0IGlzQm9vbGVhbiBmcm9tICcuL2lzQm9vbGVhbi5qcyc7XG5pbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gJy4vY29udGFpbnMuanMnO1xuXG4vLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuLy8gVGhlIGZhc3RlciBhbGdvcml0aG0gd2lsbCBub3Qgd29yayB3aXRoIGFuIGl0ZXJhdGVlIGlmIHRoZSBpdGVyYXRlZVxuLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuLy8gdGhlIGZhc3RlciBhbGdvcml0aG0uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgaWYgKCFpc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIHNlZW4gPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgc2VlbiA9IGNvbXB1dGVkO1xuICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgIGlmICghY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFjb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCB1bmlxIGZyb20gJy4vdW5pcS5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcblxuLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4vLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiB1bmlxKGZsYXR0ZW4oYXJyYXlzLCB0cnVlLCB0cnVlKSk7XG59KTtcbiIsImltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCBjb250YWlucyBmcm9tICcuL2NvbnRhaW5zLmpzJztcblxuLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuLy8gcGFzc2VkLWluIGFycmF5cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGludGVyc2VjdGlvbihhcnJheSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgaWYgKGNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgIHZhciBqO1xuICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmICghY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgfVxuICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IG1heCBmcm9tICcuL21heC5qcyc7XG5pbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgcGx1Y2sgZnJvbSAnLi9wbHVjay5qcyc7XG5cbi8vIENvbXBsZW1lbnQgb2YgemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4vLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bnppcChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gKGFycmF5ICYmIG1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGgpIHx8IDA7XG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICByZXN1bHRbaW5kZXhdID0gcGx1Y2soYXJyYXksIGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCB1bnppcCBmcm9tICcuL3VuemlwLmpzJztcblxuLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKHVuemlwKTtcbiIsImltcG9ydCBnZXRMZW5ndGggIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5cbi8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbi8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBQYXNzaW5nIGJ5IHBhaXJzIGlzIHRoZSByZXZlcnNlIG9mIGBfLnBhaXJzYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9iamVjdChsaXN0LCB2YWx1ZXMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodmFsdWVzKSB7XG4gICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCIvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4vLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByYW5nZShzdGFydCwgc3RvcCwgc3RlcCkge1xuICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgc3RhcnQgPSAwO1xuICB9XG4gIGlmICghc3RlcCkge1xuICAgIHN0ZXAgPSBzdG9wIDwgc3RhcnQgPyAtMSA6IDE7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gIH1cblxuICByZXR1cm4gcmFuZ2U7XG59XG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gQ2h1bmsgYSBzaW5nbGUgYXJyYXkgaW50byBtdWx0aXBsZSBhcnJheXMsIGVhY2ggY29udGFpbmluZyBgY291bnRgIG9yIGZld2VyXG4vLyBpdGVtcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNodW5rKGFycmF5LCBjb3VudCkge1xuICBpZiAoY291bnQgPT0gbnVsbCB8fCBjb3VudCA8IDEpIHJldHVybiBbXTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICByZXN1bHQucHVzaChzbGljZS5jYWxsKGFycmF5LCBpLCBpICs9IGNvdW50KSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNoYWluUmVzdWx0KGluc3RhbmNlLCBvYmopIHtcbiAgcmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5pbXBvcnQgZnVuY3Rpb25zIGZyb20gJy4vZnVuY3Rpb25zLmpzJztcbmltcG9ydCB7IHB1c2ggfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgY2hhaW5SZXN1bHQgZnJvbSAnLi9fY2hhaW5SZXN1bHQuanMnO1xuXG4vLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaXhpbihvYmopIHtcbiAgZWFjaChmdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBfO1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5pbXBvcnQgeyBBcnJheVByb3RvIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGNoYWluUmVzdWx0IGZyb20gJy4vX2NoYWluUmVzdWx0LmpzJztcblxuLy8gQWRkIGFsbCBtdXRhdG9yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgIGlmIChvYmogIT0gbnVsbCkge1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgb2JqWzBdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTtcbiAgfTtcbn0pO1xuXG4vLyBBZGQgYWxsIGFjY2Vzc29yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgaWYgKG9iaiAhPSBudWxsKSBvYmogPSBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICB9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IF87XG4iLCIvLyBEZWZhdWx0IEV4cG9ydFxuLy8gPT09PT09PT09PT09PT1cbi8vIEluIHRoaXMgbW9kdWxlLCB3ZSBtaXggb3VyIGJ1bmRsZWQgZXhwb3J0cyBpbnRvIHRoZSBgX2Agb2JqZWN0IGFuZCBleHBvcnRcbi8vIHRoZSByZXN1bHQuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHNldHRpbmcgYG1vZHVsZS5leHBvcnRzID0gX2AgaW4gQ29tbW9uSlMuXG4vLyBIZW5jZSwgdGhpcyBtb2R1bGUgaXMgYWxzbyB0aGUgZW50cnkgcG9pbnQgb2Ygb3VyIFVNRCBidW5kbGUgYW5kIHRoZSBwYWNrYWdlXG4vLyBlbnRyeSBwb2ludCBmb3IgQ29tbW9uSlMgYW5kIEFNRCB1c2Vycy4gSW4gb3RoZXIgd29yZHMsIHRoaXMgaXMgKHRoZSBzb3VyY2Vcbi8vIG9mKSB0aGUgbW9kdWxlIHlvdSBhcmUgaW50ZXJmYWNpbmcgd2l0aCB3aGVuIHlvdSBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZzpcbi8vXG4vLyBgYGBqc1xuLy8gLy8gQ29tbW9uSlNcbi8vIHZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9cbi8vIC8vIEFNRFxuLy8gZGVmaW5lKFsndW5kZXJzY29yZSddLCBmdW5jdGlvbihfKSB7Li4ufSk7XG4vL1xuLy8gLy8gVU1EIGluIHRoZSBicm93c2VyXG4vLyAvLyBfIGlzIGF2YWlsYWJsZSBhcyBhIGdsb2JhbCB2YXJpYWJsZVxuLy8gYGBgXG5pbXBvcnQgKiBhcyBhbGxFeHBvcnRzIGZyb20gJy4vaW5kZXguanMnO1xuaW1wb3J0IHsgbWl4aW4gfSBmcm9tICcuL2luZGV4LmpzJztcblxuLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxudmFyIF8gPSBtaXhpbihhbGxFeHBvcnRzKTtcbi8vIExlZ2FjeSBOb2RlLmpzIEFQSS5cbl8uXyA9IF87XG4vLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgQVBJLlxuZXhwb3J0IGRlZmF1bHQgXztcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU09SVF9BU0MsIFNPUlRfREVTQyB9IGZyb20gXCIuLi9jb25zdFwiO1xuXG50eXBlIERhdGFPcGVyYXRvciA9IHtcbiAgbmV4dE9yZGVyOiAoXG4gICAgY29sdW1uOiBhbnksXG4gICAgc3RhdGU6IHsgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHNvcnRDb2x1bW46IGFueSB8IHVuZGVmaW5lZCB9LFxuICAgIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBzdHJpbmdcbiAgKSA9PiBzdHJpbmc7XG4gIHNvcnQ6IChcbiAgICBkYXRhOiBhbnlbXSxcbiAgICBvcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHNvcnRDb2x1bW46IGFueSB8IHVuZGVmaW5lZFxuICApID0+IGFueVtdO1xufTtcblxudHlwZSBIYW5kbGVTb3J0Q2hhbmdlID0gKFxuICBkYXRhRmllbGQ6IHN0cmluZyxcbiAgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWRcbikgPT4gdm9pZDtcblxuLy9cbmludGVyZmFjZSBTb3J0Q29udGV4dFZhbHVlIHtcbiAgZGF0YTogYW55W107XG4gIHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvblNvcnQ6IChjb2x1bW46IGFueSkgPT4gdm9pZDtcbiAgc29ydEZpZWxkOiBzdHJpbmcgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgU29ydFByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgY29sdW1uczogYW55W107XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGRlZmF1bHRTb3J0ZWQ/OiBBcnJheTx7XG4gICAgZGF0YUZpZWxkOiBzdHJpbmc7XG4gICAgb3JkZXI6IHR5cGVvZiBTT1JUX0FTQyB8IHR5cGVvZiBTT1JUX0RFU0M7XG4gIH0+O1xuICBzb3J0Pzoge1xuICAgIGRhdGFGaWVsZDogc3RyaW5nO1xuICAgIG9yZGVyOiB0eXBlb2YgU09SVF9BU0MgfCB0eXBlb2YgU09SVF9ERVNDO1xuICAgIHNvcnRGdW5jOiAoYTogYW55LCBiOiBhbnksIG9yZGVyOiBzdHJpbmcsIGRhdGFGaWVsZDogc3RyaW5nKSA9PiBudW1iZXI7XG4gIH07XG4gIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiB0eXBlb2YgU09SVF9BU0MgfCB0eXBlb2YgU09SVF9ERVNDO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoXG4gIGRhdGFPcGVyYXRvcjogRGF0YU9wZXJhdG9yLFxuICBpc1JlbW90ZVNvcnQ6ICgpID0+IGJvb2xlYW4sXG4gIGhhbmRsZVNvcnRDaGFuZ2U6IEhhbmRsZVNvcnRDaGFuZ2VcbikgPT4ge1xuICBjb25zdCBkZWZhdWx0U29ydENvbnRleHQgPSB7XG4gICAgZGF0YTogW10sXG4gICAgc29ydE9yZGVyOiB1bmRlZmluZWQsXG4gICAgb25Tb3J0OiAoKSA9PiB7IH0sXG4gICAgc29ydEZpZWxkOiBudWxsLFxuICB9O1xuICBjb25zdCBTb3J0Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8U29ydENvbnRleHRWYWx1ZT4oZGVmYXVsdFNvcnRDb250ZXh0KTtcblxuICBjbGFzcyBTb3J0UHJvdmlkZXIgZXh0ZW5kcyBDb21wb25lbnQ8U29ydFByb3ZpZGVyUHJvcHM+IHtcbiAgICBzdGF0ZToge1xuICAgICAgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBzb3J0Q29sdW1uOlxuICAgICAgfCB7XG4gICAgICAgIGRhdGFGaWVsZDogc3RyaW5nO1xuICAgICAgICB0ZXh0OiBzdHJpbmc7XG4gICAgICAgIG9uU29ydDogRnVuY3Rpb247XG4gICAgICAgIHNvcnRGdW5jOiBGdW5jdGlvbjtcbiAgICAgIH1cbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIH0gPSB7XG4gICAgICAgIHNvcnRPcmRlcjogU09SVF9BU0MsXG4gICAgICAgIHNvcnRDb2x1bW46IHtcbiAgICAgICAgICBkYXRhRmllbGQ6IFwiaWRcIixcbiAgICAgICAgICB0ZXh0OiBcIklEXCIsXG4gICAgICAgICAgb25Tb3J0OiAoKSA9PiB7IH0sXG4gICAgICAgICAgc29ydEZ1bmM6ICgpID0+IHsgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogU29ydFByb3ZpZGVyUHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnRlZCwgZGVmYXVsdFNvcnREaXJlY3Rpb24sIHNvcnQgfSA9IHByb3BzO1xuXG4gICAgICBsZXQgc29ydE9yZGVyOiBhbnk7XG4gICAgICBsZXQgc29ydENvbHVtbjogYW55O1xuXG4gICAgICBpZiAoZGVmYXVsdFNvcnRlZCAmJiBkZWZhdWx0U29ydGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc29ydE9yZGVyID0gZGVmYXVsdFNvcnRlZFswXS5vcmRlciB8fCBkZWZhdWx0U29ydERpcmVjdGlvbjtcbiAgICAgICAgc29ydENvbHVtbiA9IHRoaXMuaW5pdFNvcnQoZGVmYXVsdFNvcnRlZFswXS5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9IGVsc2UgaWYgKHNvcnQgJiYgc29ydC5kYXRhRmllbGQgJiYgc29ydC5vcmRlcikge1xuICAgICAgICBzb3J0T3JkZXIgPSBzb3J0Lm9yZGVyO1xuICAgICAgICBzb3J0Q29sdW1uID0gdGhpcy5pbml0U29ydChzb3J0LmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0ZSA9IHsgc29ydE9yZGVyLCBzb3J0Q29sdW1uIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKGlzUmVtb3RlU29ydCgpICYmIHNvcnRPcmRlciAmJiBzb3J0Q29sdW1uKSB7XG4gICAgICAgIGhhbmRsZVNvcnRDaGFuZ2Uoc29ydENvbHVtbi5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgIG5leHRQcm9wczogU29ydFByb3ZpZGVyUHJvcHMsXG4gICAgICBwcmV2U3RhdGU6IGFueVxuICAgICkge1xuICAgICAgY29uc3QgeyBzb3J0LCBjb2x1bW5zIH0gPSBuZXh0UHJvcHM7XG5cbiAgICAgIGlmIChzb3J0ICYmIHNvcnQuZGF0YUZpZWxkICYmIHNvcnQub3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3J0T3JkZXI6IHNvcnQub3JkZXIsXG4gICAgICAgICAgc29ydENvbHVtbjogY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5kYXRhRmllbGQgPT09IHNvcnQuZGF0YUZpZWxkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluaXRTb3J0KHNvcnRGaWVsZDogc3RyaW5nLCBzb3J0T3JkZXI6IHN0cmluZykge1xuICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qgc29ydENvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wuZGF0YUZpZWxkID09PSBzb3J0RmllbGQpO1xuXG4gICAgICBsZXQgc29ydENvbHVtbjogYW55O1xuXG4gICAgICBpZiAoc29ydENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBzb3J0Q29sdW1uID0gc29ydENvbHVtbnNbMF07XG4gICAgICAgIGlmIChzb3J0Q29sdW1uLm9uU29ydCkge1xuICAgICAgICAgIHNvcnRDb2x1bW4ub25Tb3J0KHNvcnRGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc29ydENvbHVtbjtcbiAgICB9XG5cbiAgICBoYW5kbGVTb3J0ID0gKGNvbHVtbjogeyBkYXRhRmllbGQ6IHN0cmluZzsgb25Tb3J0OiBGdW5jdGlvbiB9KSA9PiB7XG4gICAgICBjb25zdCBzb3J0T3JkZXIgPSBkYXRhT3BlcmF0b3IubmV4dE9yZGVyKFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIHRoaXMuc3RhdGUsXG4gICAgICAgIHRoaXMucHJvcHMuZGVmYXVsdFNvcnREaXJlY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGlmIChjb2x1bW4ub25Tb3J0KSB7XG4gICAgICAgIGNvbHVtbi5vblNvcnQoY29sdW1uLmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzUmVtb3RlU29ydCgpKSB7XG4gICAgICAgIGhhbmRsZVNvcnRDaGFuZ2UoY29sdW1uLmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgc29ydE9yZGVyLFxuICAgICAgICBzb3J0Q29sdW1uOiBjb2x1bW4sXG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHsgc29ydCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc29ydE9yZGVyLCBzb3J0Q29sdW1uIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBsZXQgeyBkYXRhIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAoIWlzUmVtb3RlU29ydCgpICYmIHNvcnRDb2x1bW4pIHtcbiAgICAgICAgY29uc3Qgc29ydEZ1bmMgPSBzb3J0Q29sdW1uLnNvcnRGdW5jXG4gICAgICAgICAgPyBzb3J0Q29sdW1uLnNvcnRGdW5jXG4gICAgICAgICAgOiBzb3J0ICYmIHNvcnQuc29ydEZ1bmM7XG4gICAgICAgIGRhdGEgPSBkYXRhT3BlcmF0b3Iuc29ydChkYXRhLCBzb3J0T3JkZXIsIHsgLi4uc29ydENvbHVtbiwgc29ydEZ1bmMgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTb3J0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgc29ydE9yZGVyLFxuICAgICAgICAgICAgb25Tb3J0OiB0aGlzLmhhbmRsZVNvcnQsXG4gICAgICAgICAgICBzb3J0RmllbGQ6IHNvcnRDb2x1bW4gPyBzb3J0Q29sdW1uLmRhdGFGaWVsZCA6IG51bGwsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8L1NvcnRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFByb3ZpZGVyOiBTb3J0UHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IFNvcnRDb250ZXh0LkNvbnN1bWVyLFxuICB9O1xufTtcbiIsImltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IENvbHVtblJlc29sdmVyIGZyb20gXCIuL2NvbHVtbi1yZXNvbHZlclwiO1xuXG5leHBvcnQgZGVmYXVsdCAoRXh0ZW5kQmFzZTogYW55KSA9PlxuICBjbGFzcyBUYWJsZVJlc29sdmVyIGV4dGVuZHMgQ29sdW1uUmVzb2x2ZXIoRXh0ZW5kQmFzZSkge1xuICAgIHZhbGlkYXRlUHJvcHMoKSB7XG4gICAgICBjb25zdCB7IGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKCFrZXlGaWVsZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugc3BlY2lmeSBhIGZpZWxkIGFzIGtleSB2aWEga2V5RmllbGRcIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52aXNpYmxlQ29sdW1uU2l6ZShmYWxzZSkgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2aXNpYmxlIGNvbHVtbnMgZGV0ZWN0ZWRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHZpc2libGVSb3dzKCkge1xuICAgICAgY29uc3QgeyBkYXRhLCBoaWRkZW5Sb3dzLCBrZXlGaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICghaGlkZGVuUm93cyB8fCBoaWRkZW5Sb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRhdGE7XG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoaGlkZGVuUm93cywga2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQgfSBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IEhlYWRlckNlbGwgZnJvbSBcIi4vaGVhZGVyLWNlbGxcIjtcbmltcG9ydCBFeHBhbmRIZWFkZXJDZWxsIGZyb20gXCIuL3Jvdy1leHBhbmQvZXhwYW5kLWhlYWRlci1jZWxsXCI7XG5pbXBvcnQgd2l0aEhlYWRlckV4cGFuc2lvbiBmcm9tIFwiLi9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC1jb25zdW1lclwiO1xuaW1wb3J0IFNlbGVjdGlvbkhlYWRlckNlbGwgZnJvbSBcIi4vcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGxcIjtcbmltcG9ydCB3aXRoSGVhZGVyU2VsZWN0aW9uIGZyb20gXCIuL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLWNvbnN1bWVyXCI7XG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG4gIGNvbHVtbnM6IGFueVtdO1xuICBvblNvcnQ/OiAoY29sdW1uOiBhbnkpID0+IHZvaWQ7XG4gIG9uRmlsdGVyPzogKGZpbHRlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIHNvcnRGaWVsZD86IHN0cmluZztcbiAgc29ydE9yZGVyPzogc3RyaW5nO1xuICBzZWxlY3RSb3c/OiBhbnk7XG4gIGN1cnJGaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgb25FeHRlcm5hbEZpbHRlcj86IChjb2x1bW46IGFueSwgZmlsdGVyVHlwZTogc3RyaW5nKSA9PiAodmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgZ2xvYmFsU29ydENhcmV0PzogKG9yZGVyOiBzdHJpbmcsIGNvbHVtbjogYW55KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgd3JhcHBlckNsYXNzZXM/OiBzdHJpbmc7XG4gIGV4cGFuZFJvdz86IGFueTtcbiAgZmlsdGVyUG9zaXRpb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IEhlYWRlcjogUmVhY3QuRkM8SGVhZGVyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY29sdW1ucyxcbiAgICBvblNvcnQsXG4gICAgb25GaWx0ZXIsXG4gICAgc29ydEZpZWxkLFxuICAgIHNvcnRPcmRlcixcbiAgICBzZWxlY3RSb3csXG4gICAgZXhwYW5kUm93LFxuICAgIGN1cnJGaWx0ZXJzLFxuICAgIG9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgZmlsdGVyUG9zaXRpb24sXG4gICAgZ2xvYmFsU29ydENhcmV0LFxuICAgIHdyYXBwZXJDbGFzc2VzLFxuICB9ID0gcHJvcHM7XG5cbiAgbGV0IFNlbGVjdGlvbkhlYWRlckNlbGxDb21wOiBSZWFjdC5GQyA9ICgpID0+IG51bGw7XG4gIGxldCBFeHBhbnNpb25IZWFkZXJDZWxsQ29tcDogUmVhY3QuRkMgPSAoKSA9PiBudWxsO1xuXG4gIGlmIChleHBhbmRSb3c/LnNob3dFeHBhbmRDb2x1bW4pIHtcbiAgICBFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCA9IHdpdGhIZWFkZXJFeHBhbnNpb24oRXhwYW5kSGVhZGVyQ2VsbCk7XG4gIH1cblxuICBpZiAoc2VsZWN0Um93KSB7XG4gICAgU2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAgPSB3aXRoSGVhZGVyU2VsZWN0aW9uKFNlbGVjdGlvbkhlYWRlckNlbGwpO1xuICB9XG5cbiAgY29uc3QgaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdCA9IChwb3NpdGlvbiA9IElORElDQVRPUl9QT1NJVElPTl9MRUZUKSA9PlxuICAgIHBvc2l0aW9uID09PSBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVDtcblxuICBjb25zdCBjaGlsZHJlbnMgPSBjb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgY29uc3QgY3VyclNvcnQgPSBjb2x1bW4uZGF0YUZpZWxkID09PSBzb3J0RmllbGQ7XG4gICAgY29uc3QgaXNMYXN0U29ydGluZyA9IGNvbHVtbi5kYXRhRmllbGQgPT09IHNvcnRGaWVsZDtcblxuICAgIHJldHVybiAoXG4gICAgICA8SGVhZGVyQ2VsbFxuICAgICAgICBpbmRleD17aX1cbiAgICAgICAga2V5PXtjb2x1bW4uZGF0YUZpZWxkfVxuICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgb25Tb3J0PXtvblNvcnR9XG4gICAgICAgIHNvcnRpbmc9e2N1cnJTb3J0fVxuICAgICAgICBzb3J0T3JkZXI9e3NvcnRPcmRlcn1cbiAgICAgICAgZ2xvYmFsU29ydENhcmV0PXtnbG9iYWxTb3J0Q2FyZXR9XG4gICAgICAgIGlzTGFzdFNvcnRpbmc9e2lzTGFzdFNvcnRpbmd9XG4gICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgY3VyckZpbHRlcnM9e2N1cnJGaWx0ZXJzfVxuICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXtvbkV4dGVybmFsRmlsdGVyfVxuICAgICAgICBmaWx0ZXJQb3NpdGlvbj17ZmlsdGVyUG9zaXRpb259XG4gICAgICAvPlxuICAgICk7XG4gIH0pO1xuXG4gIGlmIChzZWxlY3RSb3cgJiYgIXNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uKSB7XG4gICAgaWYgKGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoc2VsZWN0Um93LnNlbGVjdENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoPFNlbGVjdGlvbkhlYWRlckNlbGxDb21wIGtleT1cInNlbGVjdGlvblwiIC8+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goPFNlbGVjdGlvbkhlYWRlckNlbGxDb21wIGtleT1cInNlbGVjdGlvblwiIC8+KTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhwYW5kUm93Py5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgaWYgKGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoZXhwYW5kUm93LmV4cGFuZENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoPEV4cGFuc2lvbkhlYWRlckNlbGxDb21wIGtleT1cImV4cGFuc2lvblwiIC8+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goPEV4cGFuc2lvbkhlYWRlckNlbGxDb21wIGtleT1cImV4cGFuc2lvblwiIC8+KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0aGVhZCBjbGFzc05hbWU9e3dyYXBwZXJDbGFzc2VzfT5cbiAgICAgIDx0ciBjbGFzc05hbWU9e2NsYXNzTmFtZX0+e2NoaWxkcmVuc308L3RyPlxuICAgIDwvdGhlYWQ+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzU0NDJfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzYwMDNfXzsiLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjcmVhdGVFeHBhbnNpb25Db250ZXh0IGZyb20gXCIuLi9jb250ZXh0cy9yb3ctZXhwYW5kLWNvbnRleHRcIjtcbmltcG9ydCB7IFJvd1Byb3BzIH0gZnJvbSBcIi4uL3Jvdy9zaG91bGQtdXBkYXRlclwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgRXhwYW5kUm93IGZyb20gXCIuL2V4cGFuZC1yb3dcIjtcblxuY29uc3QgRXhwYW5zaW9uQ29udGV4dCA9IGNyZWF0ZUV4cGFuc2lvbkNvbnRleHQoKTtcblxuZXhwb3J0IGRlZmF1bHQgKFxuICBDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8Um93UHJvcHM+XG4pOiBSZWFjdC5GQzxSb3dQcm9wcz4gPT4ge1xuICBjb25zdCByZW5kZXJXaXRoRXhwYW5zaW9uID0gKFxuICAgIHByb3BzOiBSb3dQcm9wcyxcbiAgICBleHBhbmRSb3c6IGFueVxuICApOiBSZWFjdC5SZWFjdE5vZGVbXSA9PiB7XG4gICAgaWYgKCFleHBhbmRSb3cpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50Q2xhc3NOYW1lID0gXCJcIjtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICBjb25zdCBrZXkgPSBwcm9wcy52YWx1ZTtcblxuICAgIGNvbnN0IGV4cGFuZGVkID0gXy5jb250YWlucyhleHBhbmRSb3cuZXhwYW5kZWQsIGtleSk7XG4gICAgY29uc3QgaXNDbG9zaW5nID0gXy5jb250YWlucyhleHBhbmRSb3cuaXNDbG9zaW5nLCBrZXkpO1xuICAgIGNvbnN0IGV4cGFuZGFibGUgPVxuICAgICAgIWV4cGFuZFJvdy5ub25FeHBhbmRhYmxlIHx8ICFfLmNvbnRhaW5zKGV4cGFuZFJvdy5ub25FeHBhbmRhYmxlLCBrZXkpO1xuICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgcGFyZW50Q2xhc3NOYW1lID0gXy5pc0Z1bmN0aW9uKGV4cGFuZFJvdy5wYXJlbnRDbGFzc05hbWUpXG4gICAgICAgID8gZXhwYW5kUm93LnBhcmVudENsYXNzTmFtZShleHBhbmRlZCwgcHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBleHBhbmRSb3cucGFyZW50Q2xhc3NOYW1lIHx8IFwiXCI7XG5cbiAgICAgIGNsYXNzTmFtZSA9IF8uaXNGdW5jdGlvbihleHBhbmRSb3cuY2xhc3NOYW1lKVxuICAgICAgICA/IGV4cGFuZFJvdy5jbGFzc05hbWUoZXhwYW5kZWQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogZXhwYW5kUm93LmNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgZXhwYW5kYWJsZT17ZXhwYW5kYWJsZX1cbiAgICAgICAgZXhwYW5kUm93PXt7IC4uLmV4cGFuZFJvdyB9fVxuICAgICAgICBjbGFzc05hbWU9e2NzKHByb3BzLmNsYXNzTmFtZSwgcGFyZW50Q2xhc3NOYW1lKX1cbiAgICAgIC8+LFxuICAgICAgZXhwYW5kZWQgfHwgaXNDbG9zaW5nID8gKFxuICAgICAgICA8RXhwYW5kUm93XG4gICAgICAgICAga2V5PXtgJHtrZXl9LWV4cGFuZGluZ2B9XG4gICAgICAgICAgY29sU3Bhbj17cHJvcHMudmlzaWJsZUNvbHVtblNpemUhfVxuICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBvbkNsb3NlZD17KCkgPT4gZXhwYW5kUm93Lm9uQ2xvc2VkKGtleSl9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgID5cbiAgICAgICAgICB7ZXhwYW5kUm93LnJlbmRlcmVyKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpfVxuICAgICAgICA8L0V4cGFuZFJvdz5cbiAgICAgICkgOiBudWxsLFxuICAgIF07XG4gIH07XG5cbiAgcmV0dXJuIChwcm9wcykgPT4gKFxuICAgIDxFeHBhbnNpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyhleHBhbmRSb3cpID0+IHJlbmRlcldpdGhFeHBhbnNpb24ocHJvcHMsIGV4cGFuZFJvdyl9XG4gICAgPC9FeHBhbnNpb25Db250ZXh0LkNvbnN1bWVyPlxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBFeHBhbmRSb3dQcm9wcywgU2VsZWN0Um93UHJvcHMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUk9XX1NFTEVDVF9ESVNBQkxFRCB9IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgd2l0aFJvd0V4cGFuc2lvbiBmcm9tIFwiLi9yb3ctZXhwYW5kL3Jvdy1jb25zdW1lclwiO1xuaW1wb3J0IHdpdGhSb3dTZWxlY3Rpb24gZnJvbSBcIi4vcm93LXNlbGVjdGlvbi9yb3ctY29uc3VtZXJcIjtcbmltcG9ydCBSb3dBZ2dyZWdhdG9yIGZyb20gXCIuL3Jvdy9hZ2dyZWdhdGUtcm93XCI7XG5pbXBvcnQgUm93U2VjdGlvbiBmcm9tIFwiLi9yb3cvcm93LXNlY3Rpb25cIjtcbmltcG9ydCB7IFJvd1Byb3BzIH0gZnJvbSBcIi4vcm93L3Nob3VsZC11cGRhdGVyXCI7XG5pbXBvcnQgU2ltcGxlUm93IGZyb20gXCIuL3Jvdy9zaW1wbGUtcm93XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgQm9keVByb3BzIHtcbiAga2V5RmllbGQ6IHN0cmluZztcbiAgZGF0YTogYW55W107XG4gIGNvbHVtbnM6IGFueVtdO1xuICBzZWxlY3RSb3c/OiBTZWxlY3RSb3dQcm9wczxhbnk+IHwgdW5kZWZpbmVkO1xuICBjZWxsRWRpdDogYW55O1xuICB0YWJJbmRleENlbGw/OiBib29sZWFuO1xuICBpc0VtcHR5PzogYm9vbGVhbjtcbiAgbm9EYXRhSW5kaWNhdGlvbj86XG4gIHwgKCgpID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IHN0cmluZylcbiAgfCBSZWFjdC5SZWFjdEVsZW1lbnRcbiAgfCBzdHJpbmdcbiAgfCB1bmRlZmluZWQ7XG4gIHZpc2libGVDb2x1bW5TaXplPzogbnVtYmVyO1xuICByb3dTdHlsZT86XG4gIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICB8ICgocm93OiBhbnksIGluZGV4OiBudW1iZXIpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xuICByb3dDbGFzc2VzPzogc3RyaW5nIHwgKChyb3c6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKTtcbiAgcm93RXZlbnRzPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGw7XG4gIGV4cGFuZFJvdz86IEV4cGFuZFJvd1Byb3BzPGFueSwgYW55PiB8IHVuZGVmaW5lZDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG5jbGFzcyBCb2R5IGV4dGVuZHMgQ29tcG9uZW50PEJvZHlQcm9wcz4ge1xuICBFZGl0aW5nQ2VsbDogYW55O1xuICBSb3dDb21wb25lbnQ6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQm9keVByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHsga2V5RmllbGQsIGNlbGxFZGl0LCBzZWxlY3RSb3csIGV4cGFuZFJvdyB9ID0gcHJvcHM7XG5cbiAgICAvLyBDb25zdHJ1Y3QgRWRpdGluZyBDZWxsIENvbXBvbmVudFxuICAgIGlmIChjZWxsRWRpdD8uY3JlYXRlQ29udGV4dCkge1xuICAgICAgdGhpcy5FZGl0aW5nQ2VsbCA9IGNlbGxFZGl0LmNyZWF0ZUVkaXRpbmdDZWxsKFxuICAgICAgICBfLFxuICAgICAgICBjZWxsRWRpdC5vcHRpb25zLm9uU3RhcnRFZGl0XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBSb3cgQ29tcG9uZW50XG4gICAgbGV0IFJvd0NvbXBvbmVudDogYW55ID0gU2ltcGxlUm93O1xuXG4gICAgY29uc3Qgc2VsZWN0Um93RW5hYmxlZCA9IHNlbGVjdFJvdz8ubW9kZSAhPT0gUk9XX1NFTEVDVF9ESVNBQkxFRDtcbiAgICBjb25zdCBleHBhbmRSb3dFbmFibGVkID0gISFleHBhbmRSb3chLnJlbmRlcmVyO1xuXG4gICAgaWYgKGV4cGFuZFJvd0VuYWJsZWQpIHtcbiAgICAgIFJvd0NvbXBvbmVudCA9IHdpdGhSb3dFeHBhbnNpb24oUm93QWdncmVnYXRvcik7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdFJvd0VuYWJsZWQpIHtcbiAgICAgIFJvd0NvbXBvbmVudCA9IHdpdGhSb3dTZWxlY3Rpb24oXG4gICAgICAgIGV4cGFuZFJvd0VuYWJsZWQgPyBSb3dDb21wb25lbnQgOiBSb3dBZ2dyZWdhdG9yXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChjZWxsRWRpdD8uY3JlYXRlQ29udGV4dCkge1xuICAgICAgUm93Q29tcG9uZW50ID0gY2VsbEVkaXQud2l0aFJvd0xldmVsQ2VsbEVkaXQoXG4gICAgICAgIFJvd0NvbXBvbmVudCxcbiAgICAgICAgc2VsZWN0Um93RW5hYmxlZCxcbiAgICAgICAga2V5RmllbGQsXG4gICAgICAgIF9cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5Sb3dDb21wb25lbnQgPSBSb3dDb21wb25lbnQ7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1ucyxcbiAgICAgIGRhdGEsXG4gICAgICB0YWJJbmRleENlbGwsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGlzRW1wdHksXG4gICAgICBub0RhdGFJbmRpY2F0aW9uLFxuICAgICAgdmlzaWJsZUNvbHVtblNpemUsXG4gICAgICBjZWxsRWRpdCxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIHJvd1N0eWxlLFxuICAgICAgcm93Q2xhc3NlcyxcbiAgICAgIHJvd0V2ZW50cyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGxldCBjb250ZW50OiBSZWFjdE5vZGU7XG5cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgY29uc3QgaW5kaWNhdGlvbiA9IF8uaXNGdW5jdGlvbihub0RhdGFJbmRpY2F0aW9uKVxuICAgICAgICA/IG5vRGF0YUluZGljYXRpb24oKVxuICAgICAgICA6IG5vRGF0YUluZGljYXRpb247XG4gICAgICBpZiAoIWluZGljYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb250ZW50ID0gPFJvd1NlY3Rpb24gY29udGVudD17aW5kaWNhdGlvbn0gY29sU3Bhbj17dmlzaWJsZUNvbHVtblNpemV9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3RSb3dFbmFibGVkID0gc2VsZWN0Um93Py5tb2RlICE9PSBST1dfU0VMRUNUX0RJU0FCTEVEO1xuICAgICAgY29uc3QgZXhwYW5kUm93RW5hYmxlZCA9ICEhZXhwYW5kUm93IS5yZW5kZXJlcjtcblxuICAgICAgY29uc3QgYWRkaXRpb25hbFJvd1Byb3BzOiBSb3dQcm9wcyA9IHt9O1xuXG4gICAgICBpZiAoY2VsbEVkaXQ/LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgICAgYWRkaXRpb25hbFJvd1Byb3BzLkVkaXRpbmdDZWxsQ29tcG9uZW50ID0gdGhpcy5FZGl0aW5nQ2VsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdFJvd0VuYWJsZWQgfHwgZXhwYW5kUm93RW5hYmxlZCkge1xuICAgICAgICBhZGRpdGlvbmFsUm93UHJvcHMuZXhwYW5kUm93ID0gZXhwYW5kUm93O1xuICAgICAgICBhZGRpdGlvbmFsUm93UHJvcHMuc2VsZWN0Um93ID0gc2VsZWN0Um93O1xuICAgICAgfVxuXG4gICAgICBjb250ZW50ID0gZGF0YS5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgICAgIGNvbnN0IGJhc2VSb3dQcm9wcyA9IHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICAgIGNlbGxFZGl0LFxuICAgICAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgICAgIHJvd0luZGV4OiBpbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgICAgICAgYXR0cnM6IHJvd0V2ZW50cyB8fCB7fSxcbiAgICAgICAgICAgIC4uLmFkZGl0aW9uYWxSb3dQcm9wcyxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgYmFzZVJvd1Byb3BzLnN0eWxlID0gXy5pc0Z1bmN0aW9uKHJvd1N0eWxlKVxuICAgICAgICAgICAgPyAocm93U3R5bGUocm93LCBpbmRleCkgYXMgYW55KVxuICAgICAgICAgICAgOiAocm93U3R5bGUgYXMgYW55KTtcbiAgICAgICAgICBiYXNlUm93UHJvcHMuY2xhc3NOYW1lID0gXy5pc0Z1bmN0aW9uKHJvd0NsYXNzZXMpXG4gICAgICAgICAgICA/IHJvd0NsYXNzZXMocm93LCBpbmRleClcbiAgICAgICAgICAgIDogcm93Q2xhc3NlcztcblxuICAgICAgICAgIHJldHVybiA8dGhpcy5Sb3dDb21wb25lbnQgey4uLmJhc2VSb3dQcm9wc30gLz47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiA8dGJvZHkgY2xhc3NOYW1lPXtjbGFzc05hbWV9Pntjb250ZW50fTwvdGJvZHk+O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvZHk7XG4iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHtcbiAgICBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykge1xuICAgICAgdmFyIHQgPSBhcmd1bWVudHNbZV07XG4gICAgICBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cbmV4cG9ydCB7IF9leHRlbmRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkge1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX3NldFByb3RvdHlwZU9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHQsIG8pIHtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSwgdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSB0LCBzZXRQcm90b3R5cGVPZih0LCBvKTtcbn1cbmV4cG9ydCB7IF9pbmhlcml0c0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiByZXBsYWNlQ2xhc3NOYW1lKG9yaWdDbGFzcywgY2xhc3NUb1JlbW92ZSkge1xuICByZXR1cm4gb3JpZ0NsYXNzLnJlcGxhY2UobmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xhc3NUb1JlbW92ZSArIFwiKD86XFxcXHN8JClcIiwgJ2cnKSwgJyQxJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbn1cbi8qKlxuICogUmVtb3ZlcyBhIENTUyBjbGFzcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSwgY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycsIGNsYXNzTmFtZSkpO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQge1xuICBkaXNhYmxlZDogZmFsc2Vcbn07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7IiwiZXhwb3J0IHZhciBmb3JjZVJlZmxvdyA9IGZ1bmN0aW9uIGZvcmNlUmVmbG93KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsVG9wO1xufTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgdGltZW91dHNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcbmV4cG9ydCB2YXIgVU5NT1VOVEVEID0gJ3VubW91bnRlZCc7XG5leHBvcnQgdmFyIEVYSVRFRCA9ICdleGl0ZWQnO1xuZXhwb3J0IHZhciBFTlRFUklORyA9ICdlbnRlcmluZyc7XG5leHBvcnQgdmFyIEVOVEVSRUQgPSAnZW50ZXJlZCc7XG5leHBvcnQgdmFyIEVYSVRJTkcgPSAnZXhpdGluZyc7XG4vKipcbiAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudCBsZXRzIHlvdSBkZXNjcmliZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgY29tcG9uZW50XG4gKiBzdGF0ZSB0byBhbm90aGVyIF9vdmVyIHRpbWVfIHdpdGggYSBzaW1wbGUgZGVjbGFyYXRpdmUgQVBJLiBNb3N0IGNvbW1vbmx5XG4gKiBpdCdzIHVzZWQgdG8gYW5pbWF0ZSB0aGUgbW91bnRpbmcgYW5kIHVubW91bnRpbmcgb2YgYSBjb21wb25lbnQsIGJ1dCBjYW4gYWxzb1xuICogYmUgdXNlZCB0byBkZXNjcmliZSBpbi1wbGFjZSB0cmFuc2l0aW9uIHN0YXRlcyBhcyB3ZWxsLlxuICpcbiAqIC0tLVxuICpcbiAqICoqTm90ZSoqOiBgVHJhbnNpdGlvbmAgaXMgYSBwbGF0Zm9ybS1hZ25vc3RpYyBiYXNlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nXG4gKiB0cmFuc2l0aW9ucyBpbiBDU1MsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZVxuICogW2BDU1NUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9jc3MtdHJhbnNpdGlvbilcbiAqIGluc3RlYWQuIEl0IGluaGVyaXRzIGFsbCB0aGUgZmVhdHVyZXMgb2YgYFRyYW5zaXRpb25gLCBidXQgY29udGFpbnNcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMgbmVjZXNzYXJ5IHRvIHBsYXkgbmljZSB3aXRoIENTUyB0cmFuc2l0aW9ucyAoaGVuY2UgdGhlXG4gKiBuYW1lIG9mIHRoZSBjb21wb25lbnQpLlxuICpcbiAqIC0tLVxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGBUcmFuc2l0aW9uYCBjb21wb25lbnQgZG9lcyBub3QgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHRoZVxuICogY29tcG9uZW50IGl0IHJlbmRlcnMsIGl0IG9ubHkgdHJhY2tzIFwiZW50ZXJcIiBhbmQgXCJleGl0XCIgc3RhdGVzIGZvciB0aGVcbiAqIGNvbXBvbmVudHMuIEl0J3MgdXAgdG8geW91IHRvIGdpdmUgbWVhbmluZyBhbmQgZWZmZWN0IHRvIHRob3NlIHN0YXRlcy4gRm9yXG4gKiBleGFtcGxlIHdlIGNhbiBhZGQgc3R5bGVzIHRvIGEgY29tcG9uZW50IHdoZW4gaXQgZW50ZXJzIG9yIGV4aXRzOlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuICpcbiAqIGNvbnN0IGR1cmF0aW9uID0gMzAwO1xuICpcbiAqIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAqICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtkdXJhdGlvbn1tcyBlYXNlLWluLW91dGAsXG4gKiAgIG9wYWNpdHk6IDAsXG4gKiB9XG4gKlxuICogY29uc3QgdHJhbnNpdGlvblN0eWxlcyA9IHtcbiAqICAgZW50ZXJpbmc6IHsgb3BhY2l0eTogMSB9LFxuICogICBlbnRlcmVkOiAgeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGV4aXRpbmc6ICB7IG9wYWNpdHk6IDAgfSxcbiAqICAgZXhpdGVkOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IEZhZGUgPSAoeyBpbjogaW5Qcm9wIH0pID0+IChcbiAqICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17ZHVyYXRpb259PlxuICogICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICA8ZGl2IHN0eWxlPXt7XG4gKiAgICAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAqICAgICAgICAgLi4udHJhbnNpdGlvblN0eWxlc1tzdGF0ZV1cbiAqICAgICAgIH19PlxuICogICAgICAgICBJJ20gYSBmYWRlIFRyYW5zaXRpb24hXG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICApfVxuICogICA8L1RyYW5zaXRpb24+XG4gKiApO1xuICogYGBgXG4gKlxuICogVGhlcmUgYXJlIDQgbWFpbiBzdGF0ZXMgYSBUcmFuc2l0aW9uIGNhbiBiZSBpbjpcbiAqICAtIGAnZW50ZXJpbmcnYFxuICogIC0gYCdlbnRlcmVkJ2BcbiAqICAtIGAnZXhpdGluZydgXG4gKiAgLSBgJ2V4aXRlZCdgXG4gKlxuICogVHJhbnNpdGlvbiBzdGF0ZSBpcyB0b2dnbGVkIHZpYSB0aGUgYGluYCBwcm9wLiBXaGVuIGB0cnVlYCB0aGUgY29tcG9uZW50XG4gKiBiZWdpbnMgdGhlIFwiRW50ZXJcIiBzdGFnZS4gRHVyaW5nIHRoaXMgc3RhZ2UsIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCBmcm9tXG4gKiBpdHMgY3VycmVudCB0cmFuc2l0aW9uIHN0YXRlLCB0byBgJ2VudGVyaW5nJ2AgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGVcbiAqIHRyYW5zaXRpb24gYW5kIHRoZW4gdG8gdGhlIGAnZW50ZXJlZCdgIHN0YWdlIG9uY2UgaXQncyBjb21wbGV0ZS4gTGV0J3MgdGFrZVxuICogdGhlIGZvbGxvd2luZyBleGFtcGxlICh3ZSdsbCB1c2UgdGhlXG4gKiBbdXNlU3RhdGVdKGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VzdGF0ZSkgaG9vayk6XG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezUwMH0+XG4gKiAgICAgICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICAgICAgLy8gLi4uXG4gKiAgICAgICAgICl9XG4gKiAgICAgICA8L1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCB0byB0aGUgYCdlbnRlcmluZydgIHN0YXRlXG4gKiBhbmQgc3RheSB0aGVyZSBmb3IgNTAwbXMgKHRoZSB2YWx1ZSBvZiBgdGltZW91dGApIGJlZm9yZSBpdCBmaW5hbGx5IHN3aXRjaGVzXG4gKiB0byBgJ2VudGVyZWQnYC5cbiAqXG4gKiBXaGVuIGBpbmAgaXMgYGZhbHNlYCB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIGV4Y2VwdCB0aGUgc3RhdGUgbW92ZXMgZnJvbVxuICogYCdleGl0aW5nJ2AgdG8gYCdleGl0ZWQnYC5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG4gICAgdmFyIHBhcmVudEdyb3VwID0gY29udGV4dDsgLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBUcmFuc2l0aW9uR3JvdXAgYWxsIGVudGVycyBhcmUgcmVhbGx5IGFwcGVhcnNcblxuICAgIHZhciBhcHBlYXIgPSBwYXJlbnRHcm91cCAmJiAhcGFyZW50R3JvdXAuaXNNb3VudGluZyA/IHByb3BzLmVudGVyIDogcHJvcHMuYXBwZWFyO1xuICAgIHZhciBpbml0aWFsU3RhdHVzO1xuICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJvcHMuaW4pIHtcbiAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gRU5URVJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRU5URVJFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BzLnVubW91bnRPbkV4aXQgfHwgcHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBVTk1PVU5URUQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBpbml0aWFsU3RhdHVzXG4gICAgfTtcbiAgICBfdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF9yZWYsIHByZXZTdGF0ZSkge1xuICAgIHZhciBuZXh0SW4gPSBfcmVmLmluO1xuXG4gICAgaWYgKG5leHRJbiAmJiBwcmV2U3RhdGUuc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuICA7XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcblxuICAgICAgaWYgKG5leHRTdGF0dXMgPT09IEVOVEVSSU5HKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgfHwgdGhpcy5wcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvcHVsbC83NDlcbiAgICAgICAgICAvLyBXaXRoIHVubW91bnRPbkV4aXQgb3IgbW91bnRPbkVudGVyLCB0aGUgZW50ZXIgYW5pbWF0aW9uIHNob3VsZCBoYXBwZW4gYXQgdGhlIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhpdGVkYCBhbmQgYGVudGVyaW5nYC5cbiAgICAgICAgICAvLyBUbyBtYWtlIHRoZSBhbmltYXRpb24gaGFwcGVuLCAgd2UgaGF2ZSB0byBzZXBhcmF0ZSBlYWNoIHJlbmRlcmluZyBhbmQgYXZvaWQgYmVpbmcgcHJvY2Vzc2VkIGFzIGJhdGNoZWQuXG5cbiAgICAgICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBlcmZvcm1FbnRlcihtb3VudGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcmZvcm1FeGl0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgJiYgdGhpcy5zdGF0ZS5zdGF0dXMgPT09IEVYSVRFRCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogVU5NT1VOVEVEXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FbnRlciA9IGZ1bmN0aW9uIHBlcmZvcm1FbnRlcihtb3VudGluZykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGVudGVyID0gdGhpcy5wcm9wcy5lbnRlcjtcbiAgICB2YXIgYXBwZWFyaW5nID0gdGhpcy5jb250ZXh0ID8gdGhpcy5jb250ZXh0LmlzTW91bnRpbmcgOiBtb3VudGluZztcblxuICAgIHZhciBfcmVmMiA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFthcHBlYXJpbmddIDogW1JlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpLCBhcHBlYXJpbmddLFxuICAgICAgICBtYXliZU5vZGUgPSBfcmVmMlswXSxcbiAgICAgICAgbWF5YmVBcHBlYXJpbmcgPSBfcmVmMlsxXTtcblxuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgZW50ZXJUaW1lb3V0ID0gYXBwZWFyaW5nID8gdGltZW91dHMuYXBwZWFyIDogdGltZW91dHMuZW50ZXI7IC8vIG5vIGVudGVyIGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVOVEVSRURcbiAgICAvLyBpZiB3ZSBhcmUgbW91bnRpbmcgYW5kIHJ1bm5pbmcgdGhpcyBpdCBtZWFucyBhcHBlYXIgX211c3RfIGJlIHNldFxuXG4gICAgaWYgKCFtb3VudGluZyAmJiAhZW50ZXIgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuXG4gICAgICBfdGhpczIub25UcmFuc2l0aW9uRW5kKGVudGVyVGltZW91dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FeGl0ID0gZnVuY3Rpb24gcGVyZm9ybUV4aXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgZXhpdCA9IHRoaXMucHJvcHMuZXhpdDtcbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIG1heWJlTm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBubyBleGl0IGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVYSVRFRFxuXG4gICAgaWYgKCFleGl0IHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuXG4gICAgICBfdGhpczMub25UcmFuc2l0aW9uRW5kKHRpbWVvdXRzLmV4aXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxOZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBjYW5jZWxOZXh0Q2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMubmV4dENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwoKTtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNhZmVTZXRTdGF0ZSA9IGZ1bmN0aW9uIHNhZmVTZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgdGhlcmUgYXJlIHdlaXJkIHJhY2UgY29uZGl0aW9ucyB3aXRoXG4gICAgLy8gc2V0U3RhdGUgY2FsbGJhY2tzIGFuZCB1bm1vdW50aW5nIGluIHRlc3RpbmcsIHNvIGFsd2F5cyBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIHdlIGNhbiBjYW5jZWwgYW55IHBlbmRpbmcgc2V0U3RhdGUgY2FsbGJhY2tzIGFmdGVyIHdlIHVubW91bnQuXG4gICAgY2FsbGJhY2sgPSB0aGlzLnNldE5leHRDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0TmV4dENhbGxiYWNrID0gZnVuY3Rpb24gc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpczQubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMubmV4dENhbGxiYWNrO1xuICB9O1xuXG4gIF9wcm90by5vblRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQodGltZW91dCwgaGFuZGxlcikge1xuICAgIHRoaXMuc2V0TmV4dENhbGxiYWNrKGhhbmRsZXIpO1xuICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB2YXIgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciA9IHRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcjtcblxuICAgIGlmICghbm9kZSB8fCBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcikge1xuICAgICAgdmFyIF9yZWYzID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW3RoaXMubmV4dENhbGxiYWNrXSA6IFtub2RlLCB0aGlzLm5leHRDYWxsYmFja10sXG4gICAgICAgICAgbWF5YmVOb2RlID0gX3JlZjNbMF0sXG4gICAgICAgICAgbWF5YmVOZXh0Q2FsbGJhY2sgPSBfcmVmM1sxXTtcblxuICAgICAgdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcihtYXliZU5vZGUsIG1heWJlTmV4dENhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICBpZiAoc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIF9pbiA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBfbW91bnRPbkVudGVyID0gX3RoaXMkcHJvcHMubW91bnRPbkVudGVyLFxuICAgICAgICBfdW5tb3VudE9uRXhpdCA9IF90aGlzJHByb3BzLnVubW91bnRPbkV4aXQsXG4gICAgICAgIF9hcHBlYXIgPSBfdGhpcyRwcm9wcy5hcHBlYXIsXG4gICAgICAgIF9lbnRlciA9IF90aGlzJHByb3BzLmVudGVyLFxuICAgICAgICBfZXhpdCA9IF90aGlzJHByb3BzLmV4aXQsXG4gICAgICAgIF90aW1lb3V0ID0gX3RoaXMkcHJvcHMudGltZW91dCxcbiAgICAgICAgX2FkZEVuZExpc3RlbmVyID0gX3RoaXMkcHJvcHMuYWRkRW5kTGlzdGVuZXIsXG4gICAgICAgIF9vbkVudGVyID0gX3RoaXMkcHJvcHMub25FbnRlcixcbiAgICAgICAgX29uRW50ZXJpbmcgPSBfdGhpcyRwcm9wcy5vbkVudGVyaW5nLFxuICAgICAgICBfb25FbnRlcmVkID0gX3RoaXMkcHJvcHMub25FbnRlcmVkLFxuICAgICAgICBfb25FeGl0ID0gX3RoaXMkcHJvcHMub25FeGl0LFxuICAgICAgICBfb25FeGl0aW5nID0gX3RoaXMkcHJvcHMub25FeGl0aW5nLFxuICAgICAgICBfb25FeGl0ZWQgPSBfdGhpcyRwcm9wcy5vbkV4aXRlZCxcbiAgICAgICAgX25vZGVSZWYgPSBfdGhpcyRwcm9wcy5ub2RlUmVmLFxuICAgICAgICBjaGlsZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIiwgXCJtb3VudE9uRW50ZXJcIiwgXCJ1bm1vdW50T25FeGl0XCIsIFwiYXBwZWFyXCIsIFwiZW50ZXJcIiwgXCJleGl0XCIsIFwidGltZW91dFwiLCBcImFkZEVuZExpc3RlbmVyXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRpbmdcIiwgXCJvbkV4aXRlZFwiLCBcIm5vZGVSZWZcIl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHN0YXR1cywgY2hpbGRQcm9wcykgOiBSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbiksIGNoaWxkUHJvcHMpKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb24uY29udGV4dFR5cGUgPSBUcmFuc2l0aW9uR3JvdXBDb250ZXh0O1xuVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBBIFJlYWN0IHJlZmVyZW5jZSB0byBET00gZWxlbWVudCB0aGF0IG5lZWQgdG8gdHJhbnNpdGlvbjpcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxMTI3MTMwLzQ2NzE5MzJcbiAgICpcbiAgICogICAtIFdoZW4gYG5vZGVSZWZgIHByb3AgaXMgdXNlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb25zXG4gICAqICAgICAgKGUuZy4gYG9uRW50ZXJgKSBiZWNhdXNlIHVzZXIgYWxyZWFkeSBoYXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgbm9kZS5cbiAgICogICAtIFdoZW4gY2hhbmdpbmcgYGtleWAgcHJvcCBvZiBgVHJhbnNpdGlvbmAgaW4gYSBgVHJhbnNpdGlvbkdyb3VwYCBhIG5ld1xuICAgKiAgICAgYG5vZGVSZWZgIG5lZWQgdG8gYmUgcHJvdmlkZWQgdG8gYFRyYW5zaXRpb25gIHdpdGggY2hhbmdlZCBga2V5YCBwcm9wXG4gICAqICAgICAoc2VlXG4gICAqICAgICBbdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi8xMzQzNWY4OTdiM2FiNzFmNmUxOWQ3MjRmMTQ1NTk2ZjU5MTA1ODFjL3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzI0wzNjItTDQzNykpLlxuICAgKi9cbiAgbm9kZVJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBQcm9wVHlwZXMuYW55IDogZnVuY3Rpb24gKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BWYWx1ZVtrZXldO1xuICAgICAgcmV0dXJuIFByb3BUeXBlcy5pbnN0YW5jZU9mKHZhbHVlICYmICdvd25lckRvY3VtZW50JyBpbiB2YWx1ZSA/IHZhbHVlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuRWxlbWVudCA6IEVsZW1lbnQpKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpO1xuICAgIH1cbiAgfSksXG5cbiAgLyoqXG4gICAqIEEgYGZ1bmN0aW9uYCBjaGlsZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgUmVhY3QgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpc1xuICAgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIHN0YXR1cyAoYCdlbnRlcmluZydgLCBgJ2VudGVyZWQnYCxcbiAgICogYCdleGl0aW5nJ2AsIGAnZXhpdGVkJ2ApLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBseSBjb250ZXh0XG4gICAqIHNwZWNpZmljIHByb3BzIHRvIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogPFRyYW5zaXRpb24gaW49e3RoaXMuc3RhdGUuaW59IHRpbWVvdXQ9ezE1MH0+XG4gICAqICAge3N0YXRlID0+IChcbiAgICogICAgIDxNeUNvbXBvbmVudCBjbGFzc05hbWU9e2BmYWRlIGZhZGUtJHtzdGF0ZX1gfSAvPlxuICAgKiAgICl9XG4gICAqIDwvVHJhbnNpdGlvbj5cbiAgICogYGBgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIGNvbXBvbmVudDsgdHJpZ2dlcnMgdGhlIGVudGVyIG9yIGV4aXQgc3RhdGVzXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBtb3VudGVkIGltbWVkaWF0ZWx5IGFsb25nIHdpdGhcbiAgICogdGhlIHBhcmVudCBgVHJhbnNpdGlvbmAgY29tcG9uZW50LiBJZiB5b3Ugd2FudCB0byBcImxhenkgbW91bnRcIiB0aGUgY29tcG9uZW50IG9uIHRoZVxuICAgKiBmaXJzdCBgaW49e3RydWV9YCB5b3UgY2FuIHNldCBgbW91bnRPbkVudGVyYC4gQWZ0ZXIgdGhlIGZpcnN0IGVudGVyIHRyYW5zaXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHN0YXlcbiAgICogbW91bnRlZCwgZXZlbiBvbiBcImV4aXRlZFwiLCB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBgdW5tb3VudE9uRXhpdGAuXG4gICAqL1xuICBtb3VudE9uRW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgc3RheXMgbW91bnRlZCBhZnRlciBpdCByZWFjaGVzIHRoZSBgJ2V4aXRlZCdgIHN0YXRlLlxuICAgKiBTZXQgYHVubW91bnRPbkV4aXRgIGlmIHlvdSdkIHByZWZlciB0byB1bm1vdW50IHRoZSBjb21wb25lbnQgYWZ0ZXIgaXQgZmluaXNoZXMgZXhpdGluZy5cbiAgICovXG4gIHVubW91bnRPbkV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgZG9lcyBub3QgcGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuXG4gICAqIGl0IGZpcnN0IG1vdW50cywgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgYGluYC4gSWYgeW91IHdhbnQgdGhpc1xuICAgKiBiZWhhdmlvciwgc2V0IGJvdGggYGFwcGVhcmAgYW5kIGBpbmAgdG8gYHRydWVgLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiB0aGVyZSBhcmUgbm8gc3BlY2lhbCBhcHBlYXIgc3RhdGVzIGxpa2UgYGFwcGVhcmluZ2AvYGFwcGVhcmVkYCwgdGhpcyBwcm9wXG4gICAqID4gb25seSBhZGRzIGFuIGFkZGl0aW9uYWwgZW50ZXIgdHJhbnNpdGlvbi4gSG93ZXZlciwgaW4gdGhlXG4gICAqID4gYDxDU1NUcmFuc2l0aW9uPmAgY29tcG9uZW50IHRoYXQgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiBkb2VzIHJlc3VsdCBpblxuICAgKiA+IGFkZGl0aW9uYWwgYC5hcHBlYXItKmAgY2xhc3NlcywgdGhhdCB3YXkgeW91IGNhbiBjaG9vc2UgdG8gc3R5bGUgaXRcbiAgICogPiBkaWZmZXJlbnRseS5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVudGVyIHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBleGl0IHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBSZXF1aXJlZCB1bmxlc3MgYGFkZEVuZExpc3RlbmVyYCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9uczpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9ezUwMH1cbiAgICogYGBgXG4gICAqXG4gICAqIG9yIGluZGl2aWR1YWxseTpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9e3tcbiAgICogIGFwcGVhcjogNTAwLFxuICAgKiAgZW50ZXI6IDMwMCxcbiAgICogIGV4aXQ6IDUwMCxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIC0gYGFwcGVhcmAgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBlbnRlcmBcbiAgICogLSBgZW50ZXJgIGRlZmF1bHRzIHRvIGAwYFxuICAgKiAtIGBleGl0YCBkZWZhdWx0cyB0byBgMGBcbiAgICpcbiAgICogQHR5cGUge251bWJlciB8IHsgZW50ZXI/OiBudW1iZXIsIGV4aXQ/OiBudW1iZXIsIGFwcGVhcj86IG51bWJlciB9fVxuICAgKi9cbiAgdGltZW91dDogZnVuY3Rpb24gdGltZW91dChwcm9wcykge1xuICAgIHZhciBwdCA9IHRpbWVvdXRzU2hhcGU7XG4gICAgaWYgKCFwcm9wcy5hZGRFbmRMaXN0ZW5lcikgcHQgPSBwdC5pc1JlcXVpcmVkO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHB0LmFwcGx5KHZvaWQgMCwgW3Byb3BzXS5jb25jYXQoYXJncykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmdcbiAgICogRE9NIG5vZGUgYW5kIGEgYGRvbmVgIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiB7XG4gICAqICAgLy8gdXNlIHRoZSBjc3MgdHJhbnNpdGlvbmVuZCBldmVudCB0byBtYXJrIHRoZSBmaW5pc2ggb2YgYSB0cmFuc2l0aW9uXG4gICAqICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZG9uZSwgZmFsc2UpO1xuICAgKiB9fVxuICAgKiBgYGBcbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTsgLy8gTmFtZSB0aGUgZnVuY3Rpb24gc28gaXQgaXMgY2xlYXJlciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuXG5mdW5jdGlvbiBub29wKCkge31cblxuVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGluOiBmYWxzZSxcbiAgbW91bnRPbkVudGVyOiBmYWxzZSxcbiAgdW5tb3VudE9uRXhpdDogZmFsc2UsXG4gIGFwcGVhcjogZmFsc2UsXG4gIGVudGVyOiB0cnVlLFxuICBleGl0OiB0cnVlLFxuICBvbkVudGVyOiBub29wLFxuICBvbkVudGVyaW5nOiBub29wLFxuICBvbkVudGVyZWQ6IG5vb3AsXG4gIG9uRXhpdDogbm9vcCxcbiAgb25FeGl0aW5nOiBub29wLFxuICBvbkV4aXRlZDogbm9vcFxufTtcblRyYW5zaXRpb24uVU5NT1VOVEVEID0gVU5NT1VOVEVEO1xuVHJhbnNpdGlvbi5FWElURUQgPSBFWElURUQ7XG5UcmFuc2l0aW9uLkVOVEVSSU5HID0gRU5URVJJTkc7XG5UcmFuc2l0aW9uLkVOVEVSRUQgPSBFTlRFUkVEO1xuVHJhbnNpdGlvbi5FWElUSU5HID0gRVhJVElORztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBhZGRPbmVDbGFzcyBmcm9tICdkb20taGVscGVycy9hZGRDbGFzcyc7XG5pbXBvcnQgcmVtb3ZlT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvcmVtb3ZlQ2xhc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uIGZyb20gJy4vVHJhbnNpdGlvbic7XG5pbXBvcnQgeyBjbGFzc05hbWVzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcblxudmFyIF9hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBhZGRPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuXG52YXIgcmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbiByZW1vdmVDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gcmVtb3ZlT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcbi8qKlxuICogQSB0cmFuc2l0aW9uIGNvbXBvbmVudCBpbnNwaXJlZCBieSB0aGUgZXhjZWxsZW50XG4gKiBbbmctYW5pbWF0ZV0oaHR0cHM6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nQW5pbWF0ZSkgbGlicmFyeSwgeW91IHNob3VsZFxuICogdXNlIGl0IGlmIHlvdSdyZSB1c2luZyBDU1MgdHJhbnNpdGlvbnMgb3IgYW5pbWF0aW9ucy4gSXQncyBidWlsdCB1cG9uIHRoZVxuICogW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uKVxuICogY29tcG9uZW50LCBzbyBpdCBpbmhlcml0cyBhbGwgb2YgaXRzIHByb3BzLlxuICpcbiAqIGBDU1NUcmFuc2l0aW9uYCBhcHBsaWVzIGEgcGFpciBvZiBjbGFzcyBuYW1lcyBkdXJpbmcgdGhlIGBhcHBlYXJgLCBgZW50ZXJgLFxuICogYW5kIGBleGl0YCBzdGF0ZXMgb2YgdGhlIHRyYW5zaXRpb24uIFRoZSBmaXJzdCBjbGFzcyBpcyBhcHBsaWVkIGFuZCB0aGVuIGFcbiAqIHNlY29uZCBgKi1hY3RpdmVgIGNsYXNzIGluIG9yZGVyIHRvIGFjdGl2YXRlIHRoZSBDU1MgdHJhbnNpdGlvbi4gQWZ0ZXIgdGhlXG4gKiB0cmFuc2l0aW9uLCBtYXRjaGluZyBgKi1kb25lYCBjbGFzcyBuYW1lcyBhcmUgYXBwbGllZCB0byBwZXJzaXN0IHRoZVxuICogdHJhbnNpdGlvbiBzdGF0ZS5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPENTU1RyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17MjAwfSBjbGFzc05hbWVzPVwibXktbm9kZVwiPlxuICogICAgICAgICA8ZGl2PlxuICogICAgICAgICAgIHtcIkknbGwgcmVjZWl2ZSBteS1ub2RlLSogY2xhc3Nlc1wifVxuICogICAgICAgICA8L2Rpdj5cbiAqICAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGBpbmAgcHJvcCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2hpbGQgY29tcG9uZW50IHdpbGwgZmlyc3QgcmVjZWl2ZVxuICogdGhlIGNsYXNzIGBleGFtcGxlLWVudGVyYCwgdGhlbiB0aGUgYGV4YW1wbGUtZW50ZXItYWN0aXZlYCB3aWxsIGJlIGFkZGVkIGluXG4gKiB0aGUgbmV4dCB0aWNrLiBgQ1NTVHJhbnNpdGlvbmAgW2ZvcmNlcyBhXG4gKiByZWZsb3ddKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi81MDA3MzAzZTcyOWE3NGJlNjZhMjFjM2UyMjA1ZTQ5MTY4MjE1MjRiL3NyYy9DU1NUcmFuc2l0aW9uLmpzI0wyMDgtTDIxNSlcbiAqIGJldHdlZW4gYmVmb3JlIGFkZGluZyB0aGUgYGV4YW1wbGUtZW50ZXItYWN0aXZlYC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgdHJpY2tcbiAqIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhhbXBsZS1lbnRlcmAgYW5kXG4gKiBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIGV2ZW4gdGhvdWdoIHRoZXkgd2VyZSBhZGRlZCBpbW1lZGlhdGVseSBvbmUgYWZ0ZXJcbiAqIGFub3RoZXIuIE1vc3Qgbm90YWJseSwgdGhpcyBpcyB3aGF0IG1ha2VzIGl0IHBvc3NpYmxlIGZvciB1cyB0byBhbmltYXRlXG4gKiBfYXBwZWFyYW5jZV8uXG4gKlxuICogYGBgY3NzXG4gKiAubXktbm9kZS1lbnRlciB7XG4gKiAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAubXktbm9kZS1lbnRlci1hY3RpdmUge1xuICogICBvcGFjaXR5OiAxO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogLm15LW5vZGUtZXhpdCB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0LWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDA7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgKi1hY3RpdmVgIGNsYXNzZXMgcmVwcmVzZW50IHdoaWNoIHN0eWxlcyB5b3Ugd2FudCB0byBhbmltYXRlICoqdG8qKiwgc28gaXQnc1xuICogaW1wb3J0YW50IHRvIGFkZCBgdHJhbnNpdGlvbmAgZGVjbGFyYXRpb24gb25seSB0byB0aGVtLCBvdGhlcndpc2UgdHJhbnNpdGlvbnNcbiAqIG1pZ2h0IG5vdCBiZWhhdmUgYXMgaW50ZW5kZWQhIFRoaXMgbWlnaHQgbm90IGJlIG9idmlvdXMgd2hlbiB0aGUgdHJhbnNpdGlvbnNcbiAqIGFyZSBzeW1tZXRyaWNhbCwgaS5lLiB3aGVuIGAqLWVudGVyLWFjdGl2ZWAgaXMgdGhlIHNhbWUgYXMgYCotZXhpdGAsIGxpa2UgaW5cbiAqIHRoZSBleGFtcGxlIGFib3ZlIChtaW51cyBgdHJhbnNpdGlvbmApLCBidXQgaXQgYmVjb21lcyBhcHBhcmVudCBpbiBtb3JlXG4gKiBjb21wbGV4IHRyYW5zaXRpb25zLlxuICpcbiAqICoqTm90ZSoqOiBJZiB5b3UncmUgdXNpbmcgdGhlXG4gKiBbYGFwcGVhcmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uI1RyYW5zaXRpb24tcHJvcC1hcHBlYXIpXG4gKiBwcm9wLCBtYWtlIHN1cmUgdG8gZGVmaW5lIHN0eWxlcyBmb3IgYC5hcHBlYXItKmAgY2xhc3NlcyBhcyB3ZWxsLlxuICovXG5cblxudmFyIENTU1RyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoQ1NTVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQ1NTVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5hcHBsaWVkQ2xhc3NlcyA9IHtcbiAgICAgIGFwcGVhcjoge30sXG4gICAgICBlbnRlcjoge30sXG4gICAgICBleGl0OiB7fVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnRbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzFdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmluZyA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MiA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MlsxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdhY3RpdmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXJpbmcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmVkID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQzID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1swXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQzWzFdO1xuXG4gICAgICB2YXIgdHlwZSA9IGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJztcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgdHlwZSwgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXJlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ0ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ0WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdhcHBlYXInKTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZW50ZXInKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NSA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NVswXTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRpbmcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdGVkID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDYgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDZbMF07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2V4aXQnKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnZG9uZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMubm9kZVJlZiA/IFtfdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQsIG1heWJlTm9kZV0gLy8gaGVyZSBgbWF5YmVOb2RlYCBpcyBhY3R1YWxseSBgYXBwZWFyaW5nYFxuICAgICAgOiBbbWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZ107XG4gICAgfTtcblxuICAgIF90aGlzLmdldENsYXNzTmFtZXMgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgdmFyIGNsYXNzTmFtZXMgPSBfdGhpcy5wcm9wcy5jbGFzc05hbWVzO1xuICAgICAgdmFyIGlzU3RyaW5nQ2xhc3NOYW1lcyA9IHR5cGVvZiBjbGFzc05hbWVzID09PSAnc3RyaW5nJztcbiAgICAgIHZhciBwcmVmaXggPSBpc1N0cmluZ0NsYXNzTmFtZXMgJiYgY2xhc3NOYW1lcyA/IGNsYXNzTmFtZXMgKyBcIi1cIiA6ICcnO1xuICAgICAgdmFyIGJhc2VDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBcIlwiICsgcHJlZml4ICsgdHlwZSA6IGNsYXNzTmFtZXNbdHlwZV07XG4gICAgICB2YXIgYWN0aXZlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJBY3RpdmVcIl07XG4gICAgICB2YXIgZG9uZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1kb25lXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkRvbmVcIl07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlQ2xhc3NOYW1lOiBiYXNlQ2xhc3NOYW1lLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWU6IGFjdGl2ZUNsYXNzTmFtZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZTogZG9uZUNsYXNzTmFtZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IENTU1RyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIHR5cGUsIHBoYXNlKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lcyh0eXBlKVtwaGFzZSArIFwiQ2xhc3NOYW1lXCJdO1xuXG4gICAgdmFyIF90aGlzJGdldENsYXNzTmFtZXMgPSB0aGlzLmdldENsYXNzTmFtZXMoJ2VudGVyJyksXG4gICAgICAgIGRvbmVDbGFzc05hbWUgPSBfdGhpcyRnZXRDbGFzc05hbWVzLmRvbmVDbGFzc05hbWU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2FwcGVhcicgJiYgcGhhc2UgPT09ICdkb25lJyAmJiBkb25lQ2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBkb25lQ2xhc3NOYW1lO1xuICAgIH0gLy8gVGhpcyBpcyB0byBmb3JjZSBhIHJlcGFpbnQsXG4gICAgLy8gd2hpY2ggaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHRyYW5zaXRpb24gc3R5bGVzIHdoZW4gYWRkaW5nIGEgY2xhc3MgbmFtZS5cblxuXG4gICAgaWYgKHBoYXNlID09PSAnYWN0aXZlJykge1xuICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgIH1cblxuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV1bcGhhc2VdID0gY2xhc3NOYW1lO1xuXG4gICAgICBfYWRkQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZUNsYXNzZXMgPSBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpIHtcbiAgICB2YXIgX3RoaXMkYXBwbGllZENsYXNzZXMkID0gdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSxcbiAgICAgICAgYmFzZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5iYXNlLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYWN0aXZlLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmRvbmU7XG4gICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSA9IHt9O1xuXG4gICAgaWYgKGJhc2VDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGJhc2VDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGRvbmVDbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF8gPSBfdGhpcyRwcm9wcy5jbGFzc05hbWVzLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVzXCJdKTtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIG9uRW50ZXI6IHRoaXMub25FbnRlcixcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5vbkVudGVyZWQsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLm9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQ6IHRoaXMub25FeGl0LFxuICAgICAgb25FeGl0aW5nOiB0aGlzLm9uRXhpdGluZyxcbiAgICAgIG9uRXhpdGVkOiB0aGlzLm9uRXhpdGVkXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBDU1NUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5DU1NUcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lczogJydcbn07XG5DU1NUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IF9leHRlbmRzKHt9LCBUcmFuc2l0aW9uLnByb3BUeXBlcywge1xuICAvKipcbiAgICogVGhlIGFuaW1hdGlvbiBjbGFzc05hbWVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudCBhcyBpdCBhcHBlYXJzLCBlbnRlcnMsXG4gICAqIGV4aXRzIG9yIGhhcyBmaW5pc2hlZCB0aGUgdHJhbnNpdGlvbi4gQSBzaW5nbGUgbmFtZSBjYW4gYmUgcHJvdmlkZWQsIHdoaWNoXG4gICAqIHdpbGwgYmUgc3VmZml4ZWQgZm9yIGVhY2ggc3RhZ2UsIGUuZy4gYGNsYXNzTmFtZXM9XCJmYWRlXCJgIGFwcGxpZXM6XG4gICAqXG4gICAqIC0gYGZhZGUtYXBwZWFyYCwgYGZhZGUtYXBwZWFyLWFjdGl2ZWAsIGBmYWRlLWFwcGVhci1kb25lYFxuICAgKiAtIGBmYWRlLWVudGVyYCwgYGZhZGUtZW50ZXItYWN0aXZlYCwgYGZhZGUtZW50ZXItZG9uZWBcbiAgICogLSBgZmFkZS1leGl0YCwgYGZhZGUtZXhpdC1hY3RpdmVgLCBgZmFkZS1leGl0LWRvbmVgXG4gICAqXG4gICAqIEEgZmV3IGRldGFpbHMgdG8gbm90ZSBhYm91dCBob3cgdGhlc2UgY2xhc3NlcyBhcmUgYXBwbGllZDpcbiAgICpcbiAgICogMS4gVGhleSBhcmUgX2pvaW5lZF8gd2l0aCB0aGUgb25lcyB0aGF0IGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlIGNoaWxkXG4gICAqICAgIGNvbXBvbmVudCwgc28gaWYgeW91IHdhbnQgdG8gYWRkIHNvbWUgYmFzZSBzdHlsZXMsIHlvdSBjYW4gdXNlXG4gICAqICAgIGBjbGFzc05hbWVgIHdpdGhvdXQgd29ycnlpbmcgdGhhdCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAqXG4gICAqIDIuIElmIHRoZSB0cmFuc2l0aW9uIGNvbXBvbmVudCBtb3VudHMgd2l0aCBgaW49e2ZhbHNlfWAsIG5vIGNsYXNzZXMgYXJlXG4gICAqICAgIGFwcGxpZWQgeWV0LiBZb3UgbWlnaHQgYmUgZXhwZWN0aW5nIGAqLWV4aXQtZG9uZWAsIGJ1dCBpZiB5b3UgdGhpbmtcbiAgICogICAgYWJvdXQgaXQsIGEgY29tcG9uZW50IGNhbm5vdCBmaW5pc2ggZXhpdGluZyBpZiBpdCBoYXNuJ3QgZW50ZXJlZCB5ZXQuXG4gICAqXG4gICAqIDIuIGBmYWRlLWFwcGVhci1kb25lYCBhbmQgYGZhZGUtZW50ZXItZG9uZWAgd2lsbCBfYm90aF8gYmUgYXBwbGllZC4gVGhpc1xuICAgKiAgICBhbGxvd3MgeW91IHRvIGRlZmluZSBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIHdoZW4gYXBwZWFyaW5nIGlzIGRvbmUgYW5kXG4gICAqICAgIHdoZW4gcmVndWxhciBlbnRlcmluZyBpcyBkb25lLCB1c2luZyBzZWxlY3RvcnMgbGlrZVxuICAgKiAgICBgLmZhZGUtZW50ZXItZG9uZTpub3QoLmZhZGUtYXBwZWFyLWRvbmUpYC4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBhcHBseVxuICAgKiAgICBhbiBlcGljIGVudHJhbmNlIGFuaW1hdGlvbiB3aGVuIGVsZW1lbnQgZmlyc3QgYXBwZWFycyBpbiB0aGUgRE9NIHVzaW5nXG4gICAqICAgIFtBbmltYXRlLmNzc10oaHR0cHM6Ly9kYW5lZGVuLmdpdGh1Yi5pby9hbmltYXRlLmNzcy8pLiBPdGhlcndpc2UgeW91IGNhblxuICAgKiAgICBzaW1wbHkgdXNlIGBmYWRlLWVudGVyLWRvbmVgIGZvciBkZWZpbmluZyBib3RoIGNhc2VzLlxuICAgKlxuICAgKiBFYWNoIGluZGl2aWR1YWwgY2xhc3NOYW1lcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW5kZXBlbmRlbnRseSBsaWtlOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7XG4gICAqICBhcHBlYXI6ICdteS1hcHBlYXInLFxuICAgKiAgYXBwZWFyQWN0aXZlOiAnbXktYWN0aXZlLWFwcGVhcicsXG4gICAqICBhcHBlYXJEb25lOiAnbXktZG9uZS1hcHBlYXInLFxuICAgKiAgZW50ZXI6ICdteS1lbnRlcicsXG4gICAqICBlbnRlckFjdGl2ZTogJ215LWFjdGl2ZS1lbnRlcicsXG4gICAqICBlbnRlckRvbmU6ICdteS1kb25lLWVudGVyJyxcbiAgICogIGV4aXQ6ICdteS1leGl0JyxcbiAgICogIGV4aXRBY3RpdmU6ICdteS1hY3RpdmUtZXhpdCcsXG4gICAqICBleGl0RG9uZTogJ215LWRvbmUtZXhpdCcsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBzZXQgdGhlc2UgY2xhc3NlcyB1c2luZyBDU1MgTW9kdWxlczpcbiAgICpcbiAgICogYGBganNcbiAgICogaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuICAgKiBgYGBcbiAgICpcbiAgICogeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGNhbWVsQ2FzZSBpbiB5b3VyIENTUyBmaWxlLCB0aGF0IHdheSBjb3VsZCBzaW1wbHlcbiAgICogc3ByZWFkIHRoZW0gaW5zdGVhZCBvZiBsaXN0aW5nIHRoZW0gb25lIGJ5IG9uZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17eyAuLi5zdHlsZXMgfX1cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB7XG4gICAqICBhcHBlYXI/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJEb25lPzogc3RyaW5nLFxuICAgKiAgZW50ZXI/OiBzdHJpbmcsXG4gICAqICBlbnRlckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGVudGVyRG9uZT86IHN0cmluZyxcbiAgICogIGV4aXQ/OiBzdHJpbmcsXG4gICAqICBleGl0QWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZXhpdERvbmU/OiBzdHJpbmcsXG4gICAqIH19XG4gICAqL1xuICBjbGFzc05hbWVzOiBjbGFzc05hbWVzU2hhcGUsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3IgJ2FwcGVhcicgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlci1hY3RpdmUnIG9yXG4gICAqICdhcHBlYXItYWN0aXZlJyBjbGFzcyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvclxuICAgKiAnYXBwZWFyJyBjbGFzc2VzIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBkb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQtYWN0aXZlJyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQnIGNsYXNzZXNcbiAgICogYXJlICoqcmVtb3ZlZCoqIGFuZCB0aGUgYGV4aXQtZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59KSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgQ1NTVHJhbnNpdGlvbjsiLCJpbXBvcnQgaGFzQ2xhc3MgZnJvbSAnLi9oYXNDbGFzcyc7XG4vKipcbiAqIEFkZHMgYSBDU1MgY2xhc3MgdG8gYSBnaXZlbiBlbGVtZW50LlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtlbHNlIGlmICghaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSkgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUgKyBcIiBcIiArIGNsYXNzTmFtZTtlbHNlIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIChlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnKSArIFwiIFwiICsgY2xhc3NOYW1lKTtcbn0iLCIvKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIGVsZW1lbnQgaGFzIGEgQ1NTIGNsYXNzLlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuICEhY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXCIgXCIgKyAoZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCBlbGVtZW50LmNsYXNzTmFtZSkgKyBcIiBcIikuaW5kZXhPZihcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiKSAhPT0gLTE7XG59IiwiaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEdpdmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYCwgcmV0dXJuIGFuIG9iamVjdCBtYXBwaW5nIGtleSB0byBjaGlsZC5cbiAqXG4gKiBAcGFyYW0geyp9IGNoaWxkcmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYFxuICogQHJldHVybiB7b2JqZWN0fSBNYXBwaW5nIG9mIGtleSB0byBjaGlsZFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZE1hcHBpbmcoY2hpbGRyZW4sIG1hcEZuKSB7XG4gIHZhciBtYXBwZXIgPSBmdW5jdGlvbiBtYXBwZXIoY2hpbGQpIHtcbiAgICByZXR1cm4gbWFwRm4gJiYgaXNWYWxpZEVsZW1lbnQoY2hpbGQpID8gbWFwRm4oY2hpbGQpIDogY2hpbGQ7XG4gIH07XG5cbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmIChjaGlsZHJlbikgQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjO1xuICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIC8vIHJ1biB0aGUgbWFwIGZ1bmN0aW9uIGhlcmUgaW5zdGVhZCBzbyB0aGF0IHRoZSBrZXkgaXMgdGhlIGNvbXB1dGVkIG9uZVxuICAgIHJlc3VsdFtjaGlsZC5rZXldID0gbWFwcGVyKGNoaWxkKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFdoZW4geW91J3JlIGFkZGluZyBvciByZW1vdmluZyBjaGlsZHJlbiBzb21lIG1heSBiZSBhZGRlZCBvciByZW1vdmVkIGluIHRoZVxuICogc2FtZSByZW5kZXIgcGFzcy4gV2Ugd2FudCB0byBzaG93ICpib3RoKiBzaW5jZSB3ZSB3YW50IHRvIHNpbXVsdGFuZW91c2x5XG4gKiBhbmltYXRlIGVsZW1lbnRzIGluIGFuZCBvdXQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBwcmV2aW91cyBzZXQgb2Yga2V5c1xuICogYW5kIGEgbmV3IHNldCBvZiBrZXlzIGFuZCBtZXJnZXMgdGhlbSB3aXRoIGl0cyBiZXN0IGd1ZXNzIG9mIHRoZSBjb3JyZWN0XG4gKiBvcmRlcmluZy4gSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZXhwb3NlIHNvbWUgb2YgdGhlIHV0aWxpdGllcyBpblxuICogUmVhY3RNdWx0aUNoaWxkIHRvIG1ha2UgdGhpcyBlYXN5LCBidXQgZm9yIG5vdyBSZWFjdCBpdHNlbGYgZG9lcyBub3RcbiAqIGRpcmVjdGx5IGhhdmUgdGhpcyBjb25jZXB0IG9mIHRoZSB1bmlvbiBvZiBwcmV2Q2hpbGRyZW4gYW5kIG5leHRDaGlsZHJlblxuICogc28gd2UgaW1wbGVtZW50IGl0IGhlcmUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHByZXYgcHJldiBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0IG5leHQgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcmV0dXJuIHtvYmplY3R9IGEga2V5IHNldCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzIGluIGBwcmV2YCBhbmQgYWxsIGtleXNcbiAqIGluIGBuZXh0YCBpbiBhIHJlYXNvbmFibGUgb3JkZXIuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2LCBuZXh0KSB7XG4gIHByZXYgPSBwcmV2IHx8IHt9O1xuICBuZXh0ID0gbmV4dCB8fCB7fTtcblxuICBmdW5jdGlvbiBnZXRWYWx1ZUZvcktleShrZXkpIHtcbiAgICByZXR1cm4ga2V5IGluIG5leHQgPyBuZXh0W2tleV0gOiBwcmV2W2tleV07XG4gIH0gLy8gRm9yIGVhY2gga2V5IG9mIGBuZXh0YCwgdGhlIGxpc3Qgb2Yga2V5cyB0byBpbnNlcnQgYmVmb3JlIHRoYXQga2V5IGluXG4gIC8vIHRoZSBjb21iaW5lZCBsaXN0XG5cblxuICB2YXIgbmV4dEtleXNQZW5kaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHBlbmRpbmdLZXlzID0gW107XG5cbiAgZm9yICh2YXIgcHJldktleSBpbiBwcmV2KSB7XG4gICAgaWYgKHByZXZLZXkgaW4gbmV4dCkge1xuICAgICAgaWYgKHBlbmRpbmdLZXlzLmxlbmd0aCkge1xuICAgICAgICBuZXh0S2V5c1BlbmRpbmdbcHJldktleV0gPSBwZW5kaW5nS2V5cztcbiAgICAgICAgcGVuZGluZ0tleXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0tleXMucHVzaChwcmV2S2V5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIGNoaWxkTWFwcGluZyA9IHt9O1xuXG4gIGZvciAodmFyIG5leHRLZXkgaW4gbmV4dCkge1xuICAgIGlmIChuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0pIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBlbmRpbmdOZXh0S2V5ID0gbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldO1xuICAgICAgICBjaGlsZE1hcHBpbmdbbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdOZXh0S2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZE1hcHBpbmdbbmV4dEtleV0gPSBnZXRWYWx1ZUZvcktleShuZXh0S2V5KTtcbiAgfSAvLyBGaW5hbGx5LCBhZGQgdGhlIGtleXMgd2hpY2ggZGlkbid0IGFwcGVhciBiZWZvcmUgYW55IGtleSBpbiBgbmV4dGBcblxuXG4gIGZvciAoaSA9IDA7IGkgPCBwZW5kaW5nS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNoaWxkTWFwcGluZ1twZW5kaW5nS2V5c1tpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nS2V5c1tpXSk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wKGNoaWxkLCBwcm9wLCBwcm9wcykge1xuICByZXR1cm4gcHJvcHNbcHJvcF0gIT0gbnVsbCA/IHByb3BzW3Byb3BdIDogY2hpbGQucHJvcHNbcHJvcF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKHByb3BzLCBvbkV4aXRlZCkge1xuICByZXR1cm4gZ2V0Q2hpbGRNYXBwaW5nKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICBpbjogdHJ1ZSxcbiAgICAgIGFwcGVhcjogZ2V0UHJvcChjaGlsZCwgJ2FwcGVhcicsIHByb3BzKSxcbiAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBwcm9wcyksXG4gICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIHByb3BzKVxuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgb25FeGl0ZWQpIHtcbiAgdmFyIG5leHRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcobmV4dFByb3BzLmNoaWxkcmVuKTtcbiAgdmFyIGNoaWxkcmVuID0gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXZDaGlsZE1hcHBpbmcsIG5leHRDaGlsZE1hcHBpbmcpO1xuICBPYmplY3Qua2V5cyhjaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5ba2V5XTtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkKSkgcmV0dXJuO1xuICAgIHZhciBoYXNQcmV2ID0gKGtleSBpbiBwcmV2Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgaGFzTmV4dCA9IChrZXkgaW4gbmV4dENoaWxkTWFwcGluZyk7XG4gICAgdmFyIHByZXZDaGlsZCA9IHByZXZDaGlsZE1hcHBpbmdba2V5XTtcbiAgICB2YXIgaXNMZWF2aW5nID0gaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSAmJiAhcHJldkNoaWxkLnByb3BzLmluOyAvLyBpdGVtIGlzIG5ldyAoZW50ZXJpbmcpXG5cbiAgICBpZiAoaGFzTmV4dCAmJiAoIWhhc1ByZXYgfHwgaXNMZWF2aW5nKSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ2VudGVyaW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiB0cnVlLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFoYXNOZXh0ICYmIGhhc1ByZXYgJiYgIWlzTGVhdmluZykge1xuICAgICAgLy8gaXRlbSBpcyBvbGQgKGV4aXRpbmcpXG4gICAgICAvLyBjb25zb2xlLmxvZygnbGVhdmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgaW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGhhc05leHQgJiYgaGFzUHJldiAmJiBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpKSB7XG4gICAgICAvLyBpdGVtIGhhc24ndCBjaGFuZ2VkIHRyYW5zaXRpb24gc3RhdGVzXG4gICAgICAvLyBjb3B5IG92ZXIgdGhlIGxhc3QgdHJhbnNpdGlvbiBwcm9wcztcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd1bmNoYW5nZWQnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHByZXZDaGlsZC5wcm9wcy5pbixcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGdldENoaWxkTWFwcGluZywgZ2V0SW5pdGlhbENoaWxkTWFwcGluZywgZ2V0TmV4dENoaWxkTWFwcGluZyB9IGZyb20gJy4vdXRpbHMvQ2hpbGRNYXBwaW5nJztcblxudmFyIHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gb2JqW2tdO1xuICB9KTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGNvbXBvbmVudDogJ2RpdicsXG4gIGNoaWxkRmFjdG9yeTogZnVuY3Rpb24gY2hpbGRGYWN0b3J5KGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59O1xuLyoqXG4gKiBUaGUgYDxUcmFuc2l0aW9uR3JvdXA+YCBjb21wb25lbnQgbWFuYWdlcyBhIHNldCBvZiB0cmFuc2l0aW9uIGNvbXBvbmVudHNcbiAqIChgPFRyYW5zaXRpb24+YCBhbmQgYDxDU1NUcmFuc2l0aW9uPmApIGluIGEgbGlzdC4gTGlrZSB3aXRoIHRoZSB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnRzLCBgPFRyYW5zaXRpb25Hcm91cD5gIGlzIGEgc3RhdGUgbWFjaGluZSBmb3IgbWFuYWdpbmcgdGhlIG1vdW50aW5nXG4gKiBhbmQgdW5tb3VudGluZyBvZiBjb21wb25lbnRzIG92ZXIgdGltZS5cbiAqXG4gKiBDb25zaWRlciB0aGUgZXhhbXBsZSBiZWxvdy4gQXMgaXRlbXMgYXJlIHJlbW92ZWQgb3IgYWRkZWQgdG8gdGhlIFRvZG9MaXN0IHRoZVxuICogYGluYCBwcm9wIGlzIHRvZ2dsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YC5cbiAqXG4gKiBOb3RlIHRoYXQgYDxUcmFuc2l0aW9uR3JvdXA+YCAgZG9lcyBub3QgZGVmaW5lIGFueSBhbmltYXRpb24gYmVoYXZpb3IhXG4gKiBFeGFjdGx5IF9ob3dfIGEgbGlzdCBpdGVtIGFuaW1hdGVzIGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudC4gVGhpcyBtZWFucyB5b3UgY2FuIG1peCBhbmQgbWF0Y2ggYW5pbWF0aW9ucyBhY3Jvc3MgZGlmZmVyZW50IGxpc3RcbiAqIGl0ZW1zLlxuICovXG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uR3JvdXAocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcblxuICAgIHZhciBoYW5kbGVFeGl0ZWQgPSBfdGhpcy5oYW5kbGVFeGl0ZWQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7IC8vIEluaXRpYWwgY2hpbGRyZW4gc2hvdWxkIGFsbCBiZSBlbnRlcmluZywgZGVwZW5kZW50IG9uIGFwcGVhclxuXG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgaGFuZGxlRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIFRyYW5zaXRpb25Hcm91cC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBfcmVmKSB7XG4gICAgdmFyIHByZXZDaGlsZE1hcHBpbmcgPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBoYW5kbGVFeGl0ZWQgPSBfcmVmLmhhbmRsZUV4aXRlZCxcbiAgICAgICAgZmlyc3RSZW5kZXIgPSBfcmVmLmZpcnN0UmVuZGVyO1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogZmlyc3RSZW5kZXIgPyBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKG5leHRQcm9wcywgaGFuZGxlRXhpdGVkKSA6IGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBoYW5kbGVFeGl0ZWQpLFxuICAgICAgZmlyc3RSZW5kZXI6IGZhbHNlXG4gICAgfTtcbiAgfSAvLyBub2RlIGlzIGB1bmRlZmluZWRgIHdoZW4gdXNlciBwcm92aWRlZCBgbm9kZVJlZmAgcHJvcFxuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uIGhhbmRsZUV4aXRlZChjaGlsZCwgbm9kZSkge1xuICAgIHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmIChjaGlsZC5rZXkgaW4gY3VycmVudENoaWxkTWFwcGluZykgcmV0dXJuO1xuXG4gICAgaWYgKGNoaWxkLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICBjaGlsZC5wcm9wcy5vbkV4aXRlZChub2RlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb3VudGVkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBfZXh0ZW5kcyh7fSwgc3RhdGUuY2hpbGRyZW4pO1xuXG4gICAgICAgIGRlbGV0ZSBjaGlsZHJlbltjaGlsZC5rZXldO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgQ29tcG9uZW50ID0gX3RoaXMkcHJvcHMuY29tcG9uZW50LFxuICAgICAgICBjaGlsZEZhY3RvcnkgPSBfdGhpcyRwcm9wcy5jaGlsZEZhY3RvcnksXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNvbXBvbmVudFwiLCBcImNoaWxkRmFjdG9yeVwiXSk7XG5cbiAgICB2YXIgY29udGV4dFZhbHVlID0gdGhpcy5zdGF0ZS5jb250ZXh0VmFsdWU7XG4gICAgdmFyIGNoaWxkcmVuID0gdmFsdWVzKHRoaXMuc3RhdGUuY2hpbGRyZW4pLm1hcChjaGlsZEZhY3RvcnkpO1xuICAgIGRlbGV0ZSBwcm9wcy5hcHBlYXI7XG4gICAgZGVsZXRlIHByb3BzLmVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5leGl0O1xuXG4gICAgaWYgKENvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbkdyb3VwO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uR3JvdXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogYDxUcmFuc2l0aW9uR3JvdXA+YCByZW5kZXJzIGEgYDxkaXY+YCBieSBkZWZhdWx0LiBZb3UgY2FuIGNoYW5nZSB0aGlzXG4gICAqIGJlaGF2aW9yIGJ5IHByb3ZpZGluZyBhIGBjb21wb25lbnRgIHByb3AuXG4gICAqIElmIHlvdSB1c2UgUmVhY3QgdjE2KyBhbmQgd291bGQgbGlrZSB0byBhdm9pZCBhIHdyYXBwaW5nIGA8ZGl2PmAgZWxlbWVudFxuICAgKiB5b3UgY2FuIHBhc3MgaW4gYGNvbXBvbmVudD17bnVsbH1gLiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgd3JhcHBpbmcgZGl2XG4gICAqIGJvcmtzIHlvdXIgY3NzIHN0eWxlcy5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogQSBzZXQgb2YgYDxUcmFuc2l0aW9uPmAgY29tcG9uZW50cywgdGhhdCBhcmUgdG9nZ2xlZCBgaW5gIGFuZCBvdXQgYXMgdGhleVxuICAgKiBsZWF2ZS4gdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgd2lsbCBpbmplY3Qgc3BlY2lmaWMgdHJhbnNpdGlvbiBwcm9wcywgc29cbiAgICogcmVtZW1iZXIgdG8gc3ByZWFkIHRoZW0gdGhyb3VnaCBpZiB5b3UgYXJlIHdyYXBwaW5nIHRoZSBgPFRyYW5zaXRpb24+YCBhc1xuICAgKiB3aXRoIG91ciBgPEZhZGU+YCBleGFtcGxlLlxuICAgKlxuICAgKiBXaGlsZSB0aGlzIGNvbXBvbmVudCBpcyBtZWFudCBmb3IgbXVsdGlwbGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYFxuICAgKiBjaGlsZHJlbiwgc29tZXRpbWVzIHlvdSBtYXkgd2FudCB0byBoYXZlIGEgc2luZ2xlIHRyYW5zaXRpb24gY2hpbGQgd2l0aFxuICAgKiBjb250ZW50IHRoYXQgeW91IHdhbnQgdG8gYmUgdHJhbnNpdGlvbmVkIG91dCBhbmQgaW4gd2hlbiB5b3UgY2hhbmdlIGl0XG4gICAqIChlLmcuIHJvdXRlcywgaW1hZ2VzIGV0Yy4pIEluIHRoYXQgY2FzZSB5b3UgY2FuIGNoYW5nZSB0aGUgYGtleWAgcHJvcCBvZlxuICAgKiB0aGUgdHJhbnNpdGlvbiBjaGlsZCBhcyB5b3UgY2hhbmdlIGl0cyBjb250ZW50LCB0aGlzIHdpbGwgY2F1c2VcbiAgICogYFRyYW5zaXRpb25Hcm91cGAgdG8gdHJhbnNpdGlvbiB0aGUgY2hpbGQgb3V0IGFuZCBiYWNrIGluLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGFwcGVhciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGVudGVyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBleGl0IGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBZb3UgbWF5IG5lZWQgdG8gYXBwbHkgcmVhY3RpdmUgdXBkYXRlcyB0byBhIGNoaWxkIGFzIGl0IGlzIGV4aXRpbmcuXG4gICAqIFRoaXMgaXMgZ2VuZXJhbGx5IGRvbmUgYnkgdXNpbmcgYGNsb25lRWxlbWVudGAgaG93ZXZlciBpbiB0aGUgY2FzZSBvZiBhbiBleGl0aW5nXG4gICAqIGNoaWxkIHRoZSBlbGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBhbmQgbm90IGFjY2Vzc2libGUgdG8gdGhlIGNvbnN1bWVyLlxuICAgKlxuICAgKiBJZiB5b3UgZG8gbmVlZCB0byB1cGRhdGUgYSBjaGlsZCBhcyBpdCBsZWF2ZXMgeW91IGNhbiBwcm92aWRlIGEgYGNoaWxkRmFjdG9yeWBcbiAgICogdG8gd3JhcCBldmVyeSBjaGlsZCwgZXZlbiB0aGUgb25lcyB0aGF0IGFyZSBsZWF2aW5nLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihjaGlsZDogUmVhY3RFbGVtZW50KSAtPiBSZWFjdEVsZW1lbnRcbiAgICovXG4gIGNoaWxkRmFjdG9yeTogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTtcblRyYW5zaXRpb25Hcm91cC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uR3JvdXA7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXAgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXAnO1xuLyoqXG4gKiBUaGUgYDxSZXBsYWNlVHJhbnNpdGlvbj5gIGNvbXBvbmVudCBpcyBhIHNwZWNpYWxpemVkIGBUcmFuc2l0aW9uYCBjb21wb25lbnRcbiAqIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiB0d28gY2hpbGRyZW4uXG4gKlxuICogYGBganN4XG4gKiA8UmVwbGFjZVRyYW5zaXRpb24gaW4+XG4gKiAgIDxGYWRlPjxkaXY+SSBhcHBlYXIgZmlyc3Q8L2Rpdj48L0ZhZGU+XG4gKiAgIDxGYWRlPjxkaXY+SSByZXBsYWNlIHRoZSBhYm92ZTwvZGl2PjwvRmFkZT5cbiAqIDwvUmVwbGFjZVRyYW5zaXRpb24+XG4gKiBgYGBcbiAqL1xuXG52YXIgUmVwbGFjZVRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUmVwbGFjZVRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJlcGxhY2VUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBfYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIF9hcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoX2FyZ3MpKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmluZycsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmVkJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW42ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNiksIF9rZXk2ID0gMDsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgICAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGluZycsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjcpLCBfa2V5NyA9IDA7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRlZCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUmVwbGFjZVRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVMaWZlY3ljbGUgPSBmdW5jdGlvbiBoYW5kbGVMaWZlY3ljbGUoaGFuZGxlciwgaWR4LCBvcmlnaW5hbEFyZ3MpIHtcbiAgICB2YXIgX2NoaWxkJHByb3BzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgY2hpbGQgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKVtpZHhdO1xuICAgIGlmIChjaGlsZC5wcm9wc1toYW5kbGVyXSkgKF9jaGlsZCRwcm9wcyA9IGNoaWxkLnByb3BzKVtoYW5kbGVyXS5hcHBseShfY2hpbGQkcHJvcHMsIG9yaWdpbmFsQXJncyk7XG5cbiAgICBpZiAodGhpcy5wcm9wc1toYW5kbGVyXSkge1xuICAgICAgdmFyIG1heWJlTm9kZSA9IGNoaWxkLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgIHRoaXMucHJvcHNbaGFuZGxlcl0obWF5YmVOb2RlKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBpblByb3AgPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJpblwiXSk7XG5cbiAgICB2YXIgX1JlYWN0JENoaWxkcmVuJHRvQXJyID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbiksXG4gICAgICAgIGZpcnN0ID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzBdLFxuICAgICAgICBzZWNvbmQgPSBfUmVhY3QkQ2hpbGRyZW4kdG9BcnJbMV07XG5cbiAgICBkZWxldGUgcHJvcHMub25FbnRlcjtcbiAgICBkZWxldGUgcHJvcHMub25FbnRlcmluZztcbiAgICBkZWxldGUgcHJvcHMub25FbnRlcmVkO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXQ7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGluZztcbiAgICBkZWxldGUgcHJvcHMub25FeGl0ZWQ7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cCwgcHJvcHMsIGluUHJvcCA/IFJlYWN0LmNsb25lRWxlbWVudChmaXJzdCwge1xuICAgICAga2V5OiAnZmlyc3QnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFbnRlcixcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRW50ZXJpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRW50ZXJlZFxuICAgIH0pIDogUmVhY3QuY2xvbmVFbGVtZW50KHNlY29uZCwge1xuICAgICAga2V5OiAnc2Vjb25kJyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRXhpdCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRXhpdGluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIFJlcGxhY2VUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5SZXBsYWNlVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGluOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBjaGlsZHJlbjogZnVuY3Rpb24gY2hpbGRyZW4ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKFJlYWN0LkNoaWxkcmVuLmNvdW50KHByb3BzW3Byb3BOYW1lXSkgIT09IDIpIHJldHVybiBuZXcgRXJyb3IoXCJcXFwiXCIgKyBwcm9wTmFtZSArIFwiXFxcIiBtdXN0IGJlIGV4YWN0bHkgdHdvIHRyYW5zaXRpb24gY29tcG9uZW50cy5cIik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IFJlcGxhY2VUcmFuc2l0aW9uOyIsImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuXG52YXIgX2xlYXZlUmVuZGVycywgX2VudGVyUmVuZGVycztcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBFTlRFUkVELCBFTlRFUklORywgRVhJVElORyB9IGZyb20gJy4vVHJhbnNpdGlvbic7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuXG5mdW5jdGlvbiBhcmVDaGlsZHJlbkRpZmZlcmVudChvbGRDaGlsZHJlbiwgbmV3Q2hpbGRyZW4pIHtcbiAgaWYgKG9sZENoaWxkcmVuID09PSBuZXdDaGlsZHJlbikgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChvbGRDaGlsZHJlbikgJiYgUmVhY3QuaXNWYWxpZEVsZW1lbnQobmV3Q2hpbGRyZW4pICYmIG9sZENoaWxkcmVuLmtleSAhPSBudWxsICYmIG9sZENoaWxkcmVuLmtleSA9PT0gbmV3Q2hpbGRyZW4ua2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEVudW0gb2YgbW9kZXMgZm9yIFN3aXRjaFRyYW5zaXRpb24gY29tcG9uZW50XG4gKiBAZW51bSB7IHN0cmluZyB9XG4gKi9cblxuXG5leHBvcnQgdmFyIG1vZGVzID0ge1xuICBvdXQ6ICdvdXQtaW4nLFxuICBpbjogJ2luLW91dCdcbn07XG5cbnZhciBjYWxsSG9vayA9IGZ1bmN0aW9uIGNhbGxIb29rKGVsZW1lbnQsIG5hbWUsIGNiKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9lbGVtZW50JHByb3BzO1xuXG4gICAgZWxlbWVudC5wcm9wc1tuYW1lXSAmJiAoX2VsZW1lbnQkcHJvcHMgPSBlbGVtZW50LnByb3BzKVtuYW1lXS5hcHBseShfZWxlbWVudCRwcm9wcywgYXJndW1lbnRzKTtcbiAgICBjYigpO1xuICB9O1xufTtcblxudmFyIGxlYXZlUmVuZGVycyA9IChfbGVhdmVSZW5kZXJzID0ge30sIF9sZWF2ZVJlbmRlcnNbbW9kZXMub3V0XSA9IGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZi5jdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmLmNoYW5nZVN0YXRlO1xuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGN1cnJlbnQsIHtcbiAgICBpbjogZmFsc2UsXG4gICAgb25FeGl0ZWQ6IGNhbGxIb29rKGN1cnJlbnQsICdvbkV4aXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSSU5HLCBudWxsKTtcbiAgICB9KVxuICB9KTtcbn0sIF9sZWF2ZVJlbmRlcnNbbW9kZXMuaW5dID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZjIuY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjIuY2hhbmdlU3RhdGUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICByZXR1cm4gW2N1cnJlbnQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlLFxuICAgIG9uRW50ZXJlZDogY2FsbEhvb2soY2hpbGRyZW4sICdvbkVudGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUklORyk7XG4gICAgfSlcbiAgfSldO1xufSwgX2xlYXZlUmVuZGVycyk7XG52YXIgZW50ZXJSZW5kZXJzID0gKF9lbnRlclJlbmRlcnMgPSB7fSwgX2VudGVyUmVuZGVyc1ttb2Rlcy5vdXRdID0gZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYzLmNoaWxkcmVuLFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmMy5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlLFxuICAgIG9uRW50ZXJlZDogY2FsbEhvb2soY2hpbGRyZW4sICdvbkVudGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUkVELCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KVxuICB9KTtcbn0sIF9lbnRlclJlbmRlcnNbbW9kZXMuaW5dID0gZnVuY3Rpb24gKF9yZWY0KSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZjQuY3VycmVudCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjQuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWY0LmNoYW5nZVN0YXRlO1xuICByZXR1cm4gW1JlYWN0LmNsb25lRWxlbWVudChjdXJyZW50LCB7XG4gICAgaW46IGZhbHNlLFxuICAgIG9uRXhpdGVkOiBjYWxsSG9vayhjdXJyZW50LCAnb25FeGl0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUkVELCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KVxuICB9KSwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWVcbiAgfSldO1xufSwgX2VudGVyUmVuZGVycyk7XG4vKipcbiAqIEEgdHJhbnNpdGlvbiBjb21wb25lbnQgaW5zcGlyZWQgYnkgdGhlIFt2dWUgdHJhbnNpdGlvbiBtb2Rlc10oaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvdHJhbnNpdGlvbnMuaHRtbCNUcmFuc2l0aW9uLU1vZGVzKS5cbiAqIFlvdSBjYW4gdXNlIGl0IHdoZW4geW91IHdhbnQgdG8gY29udHJvbCB0aGUgcmVuZGVyIGJldHdlZW4gc3RhdGUgdHJhbnNpdGlvbnMuXG4gKiBCYXNlZCBvbiB0aGUgc2VsZWN0ZWQgbW9kZSBhbmQgdGhlIGNoaWxkJ3Mga2V5IHdoaWNoIGlzIHRoZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gIGNvbXBvbmVudCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCBtYWtlcyBhIGNvbnNpc3RlbnQgdHJhbnNpdGlvbiBiZXR3ZWVuIHRoZW0uXG4gKlxuICogSWYgdGhlIGBvdXQtaW5gIG1vZGUgaXMgc2VsZWN0ZWQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgd2FpdHMgdW50aWwgdGhlIG9sZCBjaGlsZCBsZWF2ZXMgYW5kIHRoZW4gaW5zZXJ0cyBhIG5ldyBjaGlsZC5cbiAqIElmIHRoZSBgaW4tb3V0YCBtb2RlIGlzIHNlbGVjdGVkLCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIGluc2VydHMgYSBuZXcgY2hpbGQgZmlyc3QsIHdhaXRzIGZvciB0aGUgbmV3IGNoaWxkIHRvIGVudGVyIGFuZCB0aGVuIHJlbW92ZXMgdGhlIG9sZCBjaGlsZC5cbiAqXG4gKiAqKk5vdGUqKjogSWYgeW91IHdhbnQgdGhlIGFuaW1hdGlvbiB0byBoYXBwZW4gc2ltdWx0YW5lb3VzbHlcbiAqICh0aGF0IGlzLCB0byBoYXZlIHRoZSBvbGQgY2hpbGQgcmVtb3ZlZCBhbmQgYSBuZXcgY2hpbGQgaW5zZXJ0ZWQgKiphdCB0aGUgc2FtZSB0aW1lKiopLFxuICogeW91IHNob3VsZCB1c2VcbiAqIFtgVHJhbnNpdGlvbkdyb3VwYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLWdyb3VwKVxuICogaW5zdGVhZC5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICByZXR1cm4gKFxuICogICAgPFN3aXRjaFRyYW5zaXRpb24+XG4gKiAgICAgIDxDU1NUcmFuc2l0aW9uXG4gKiAgICAgICAga2V5PXtzdGF0ZSA/IFwiR29vZGJ5ZSwgd29ybGQhXCIgOiBcIkhlbGxvLCB3b3JsZCFcIn1cbiAqICAgICAgICBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgZG9uZSwgZmFsc2UpfVxuICogICAgICAgIGNsYXNzTmFtZXM9J2ZhZGUnXG4gKiAgICAgID5cbiAqICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldFN0YXRlKHN0YXRlID0+ICFzdGF0ZSl9PlxuICogICAgICAgICAge3N0YXRlID8gXCJHb29kYnllLCB3b3JsZCFcIiA6IFwiSGVsbG8sIHdvcmxkIVwifVxuICogICAgICAgIDwvYnV0dG9uPlxuICogICAgICA8L0NTU1RyYW5zaXRpb24+XG4gKiAgICA8L1N3aXRjaFRyYW5zaXRpb24+XG4gKiAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGBgYGNzc1xuICogLmZhZGUtZW50ZXJ7XG4gKiAgICBvcGFjaXR5OiAwO1xuICogfVxuICogLmZhZGUtZXhpdHtcbiAqICAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAuZmFkZS1lbnRlci1hY3RpdmV7XG4gKiAgICBvcGFjaXR5OiAxO1xuICogfVxuICogLmZhZGUtZXhpdC1hY3RpdmV7XG4gKiAgICBvcGFjaXR5OiAwO1xuICogfVxuICogLmZhZGUtZW50ZXItYWN0aXZlLFxuICogLmZhZGUtZXhpdC1hY3RpdmV7XG4gKiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDUwMG1zO1xuICogfVxuICogYGBgXG4gKi9cblxudmFyIFN3aXRjaFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpdGNoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3dpdGNoVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogRU5URVJFRCxcbiAgICAgIGN1cnJlbnQ6IG51bGxcbiAgICB9O1xuICAgIF90aGlzLmFwcGVhcmVkID0gZmFsc2U7XG5cbiAgICBfdGhpcy5jaGFuZ2VTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0dXMsIGN1cnJlbnQpIHtcbiAgICAgIGlmIChjdXJyZW50ID09PSB2b2lkIDApIHtcbiAgICAgICAgY3VycmVudCA9IF90aGlzLnN0YXRlLmN1cnJlbnQ7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgIGN1cnJlbnQ6IGN1cnJlbnRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpdGNoVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5hcHBlYXJlZCA9IHRydWU7XG4gIH07XG5cbiAgU3dpdGNoVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgaWYgKHByb3BzLmNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnQ6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gRU5URVJJTkcgJiYgcHJvcHMubW9kZSA9PT0gbW9kZXMuaW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmN1cnJlbnQgJiYgYXJlQ2hpbGRyZW5EaWZmZXJlbnQoc3RhdGUuY3VycmVudCwgcHJvcHMuY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnQ6IFJlYWN0LmNsb25lRWxlbWVudChwcm9wcy5jaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSlcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgbW9kZSA9IF90aGlzJHByb3BzLm1vZGUsXG4gICAgICAgIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgc3RhdHVzID0gX3RoaXMkc3RhdGUuc3RhdHVzLFxuICAgICAgICBjdXJyZW50ID0gX3RoaXMkc3RhdGUuY3VycmVudDtcbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgIGN1cnJlbnQ6IGN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZTogdGhpcy5jaGFuZ2VTdGF0ZSxcbiAgICAgIHN0YXR1czogc3RhdHVzXG4gICAgfTtcbiAgICB2YXIgY29tcG9uZW50O1xuXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgRU5URVJJTkc6XG4gICAgICAgIGNvbXBvbmVudCA9IGVudGVyUmVuZGVyc1ttb2RlXShkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRVhJVElORzpcbiAgICAgICAgY29tcG9uZW50ID0gbGVhdmVSZW5kZXJzW21vZGVdKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBFTlRFUkVEOlxuICAgICAgICBjb21wb25lbnQgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiAhdGhpcy5hcHBlYXJlZFxuICAgICAgfVxuICAgIH0sIGNvbXBvbmVudCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXRjaFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblN3aXRjaFRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogVHJhbnNpdGlvbiBtb2Rlcy5cbiAgICogYG91dC1pbmA6IEN1cnJlbnQgZWxlbWVudCB0cmFuc2l0aW9ucyBvdXQgZmlyc3QsIHRoZW4gd2hlbiBjb21wbGV0ZSwgdGhlIG5ldyBlbGVtZW50IHRyYW5zaXRpb25zIGluLlxuICAgKiBgaW4tb3V0YDogTmV3IGVsZW1lbnQgdHJhbnNpdGlvbnMgaW4gZmlyc3QsIHRoZW4gd2hlbiBjb21wbGV0ZSwgdGhlIGN1cnJlbnQgZWxlbWVudCB0cmFuc2l0aW9ucyBvdXQuXG4gICAqXG4gICAqIEB0eXBlIHsnb3V0LWluJ3wnaW4tb3V0J31cbiAgICovXG4gIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbbW9kZXMuaW4sIG1vZGVzLm91dF0pLFxuXG4gIC8qKlxuICAgKiBBbnkgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYCBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pXG59IDoge307XG5Td2l0Y2hUcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgbW9kZTogbW9kZXMub3V0XG59O1xuZXhwb3J0IGRlZmF1bHQgU3dpdGNoVHJhbnNpdGlvbjsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBjcmVhdGVTZWxlY3Rpb25Db250ZXh0LFxuICBTZWxlY3Rpb25Db250ZXh0VmFsdWUsXG59IGZyb20gXCIuLi9jb250ZXh0cy9zZWxlY3Rpb24tY29udGV4dFwiO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBTZWxlY3Rpb25Db250ZXh0VmFsdWUgeyB9XG5cbmNvbnN0IFNlbGVjdGlvbkNvbnRleHQgPSBjcmVhdGVTZWxlY3Rpb25Db250ZXh0KCk7XG5cbmNvbnN0IHdpdGhTZWxlY3Rpb25Db250ZXh0ID1cbiAgKENvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZTxQcm9wcz4pID0+IChwcm9wczogYW55KSA9PiAoXG4gICAgPFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHNlbGVjdFJvdykgPT4gPENvbXBvbmVudCB7Li4ucHJvcHN9IHsuLi5zZWxlY3RSb3d9IC8+fVxuICAgIDwvU2VsZWN0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFNlbGVjdGlvbkNvbnRleHQ7XG4iLCJleHBvcnQgY29uc3QgUk9XX1NFTEVDVF9TSU5HTEUgPSBcInJhZGlvXCI7XG5leHBvcnQgY29uc3QgUk9XX1NFTEVDVF9NVUxUSVBMRSA9IFwiY2hlY2tib3hcIjtcbmV4cG9ydCBjb25zdCBST1dfU0VMRUNUX0RJU0FCTEVEID0gXCJST1dfU0VMRUNUX0RJU0FCTEVEXCI7XG5leHBvcnQgY29uc3QgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUgPSBcImluZGV0ZXJtaW5hdGVcIjtcbmV4cG9ydCBjb25zdCBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCA9IFwiY2hlY2tlZFwiO1xuZXhwb3J0IGNvbnN0IENIRUNLQk9YX1NUQVRVU19VTkNIRUNLRUQgPSBcInVuY2hlY2tlZFwiO1xuZXhwb3J0IGNvbnN0IEZJTFRFUlNfUE9TSVRJT05fSU5MSU5FID0gXCJpbmxpbmVcIjtcbmV4cG9ydCBjb25zdCBGSUxURVJTX1BPU0lUSU9OX1RPUCA9IFwidG9wXCI7XG5leHBvcnQgY29uc3QgRklMVEVSU19QT1NJVElPTl9CT1RUT00gPSBcImJvdHRvbVwiO1xuXG5leHBvcnQgY29uc3QgU09SVF9BU0MgPSBcImFzY1wiO1xuZXhwb3J0IGNvbnN0IFNPUlRfREVTQyA9IFwiZGVzY1wiO1xuZXhwb3J0IGNvbnN0IElORElDQVRPUl9QT1NJVElPTl9MRUZUID0gXCJsZWZ0XCI7XG5leHBvcnQgY29uc3QgSU5ESUNBVE9SX1BPU0lUSU9OX1JJR0hUID0gXCJyaWdodFwiO1xuZXhwb3J0IGNvbnN0IFRZUEVfU1RSSU5HID0gXCJzdHJpbmdcIjtcbmV4cG9ydCBjb25zdCBUWVBFX05VTUJFUiA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgVFlQRV9CT09MRUFOID0gXCJib29sXCI7XG5leHBvcnQgY29uc3QgVFlQRV9EQVRFID0gXCJkYXRlXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY3JlYXRlRXhwYW5zaW9uQ29udGV4dCwge1xuICBSb3dFeHBhbmRDb250ZXh0VmFsdWUsXG59IGZyb20gXCIuLi9jb250ZXh0cy9yb3ctZXhwYW5kLWNvbnRleHRcIjtcbmltcG9ydCB7IEV4cGFuc2lvbkhlYWRlckNlbGxQcm9wcyB9IGZyb20gXCIuL2V4cGFuZC1oZWFkZXItY2VsbFwiO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBFeHBhbnNpb25IZWFkZXJDZWxsUHJvcHMge1xuICBleHBhbmRSb3c/OiBSb3dFeHBhbmRDb250ZXh0VmFsdWU7XG59XG5cbmNvbnN0IEV4cGFuc2lvbkNvbnRleHQgPSBjcmVhdGVFeHBhbnNpb25Db250ZXh0KCk7XG5cbmNvbnN0IHdpdGhFeHBhbmRDb250ZXh0ID0gKENvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZTxQcm9wcz4pID0+ICgpID0+XG4gIChcbiAgICA8RXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgIHsoZXhwYW5kUm93KSA9PiA8Q29tcG9uZW50IHsgLi4uIGV4cGFuZFJvdyB9IC8+fVxuICAgIDwvRXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV4cGFuZENvbnRleHQ7XG4iLCJpbXBvcnQgKiBhcyBleHBhbmQgZnJvbSBcIi4vZXhwYW5kXCI7XG5pbXBvcnQgKiBhcyBtdXRhdGUgZnJvbSBcIi4vbXV0YXRlXCI7XG5pbXBvcnQgKiBhcyByb3dzIGZyb20gXCIuL3Jvd3NcIjtcbmltcG9ydCAqIGFzIHNlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCAqIGFzIHNvcnQgZnJvbSBcIi4vc29ydFwiO1xuaW1wb3J0ICogYXMgdHlwZSBmcm9tIFwiLi90eXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4ucm93cyxcbiAgLi4uc2VsZWN0aW9uLFxuICAuLi5leHBhbmQsXG4gIC4uLm11dGF0ZSxcbiAgLi4uc29ydCxcbiAgLi4udHlwZSxcbn07XG4iLCIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUk9XX1NFTEVDVF9ESVNBQkxFRCB9IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IGV2ZW50czogc3RyaW5nW10gPSBbXG4gIFwib25DbGlja1wiLFxuICBcIm9uRG91YmxlQ2xpY2tcIixcbiAgXCJvbk1vdXNlRW50ZXJcIixcbiAgXCJvbk1vdXNlTGVhdmVcIixcbiAgXCJvbkNvbnRleHRNZW51XCIsXG4gIFwib25BdXhDbGlja1wiLFxuXTtcblxuaW50ZXJmYWNlIFJvd0V2ZW50RGVsZWdhdGVyUHJvcHMge1xuICByb3c6IGFueTtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGtleUZpZWxkOiBzdHJpbmc7XG4gIHNlbGVjdGFibGU6IGJvb2xlYW47XG4gIGV4cGFuZGFibGU6IGJvb2xlYW47XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIGV4cGFuZGVkOiBib29sZWFuO1xuICBleHBhbmRSb3c6IGFueTtcbiAgc2VsZWN0Um93OiBhbnk7XG4gIERFTEFZX0ZPUl9EQkNMSUNLOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBSb3dFdmVudERlbGVnYXRlciA9IDxcbiAgVCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueVxuPihFeHRlbmRCYXNlOiBUKSA9PiB7XG4gIHJldHVybiBjbGFzcyBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIGNsaWNrTnVtOiBudW1iZXIgPSAwO1xuXG4gICAgY29uc3RydWN0b3IoLi4ucHJvcHM6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5wcm9wcyk7XG4gICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIgPVxuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIgPSB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIoXG4gICAgICBjYjogKGU6IEV2ZW50LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICAgICkge1xuICAgICAgcmV0dXJuIChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcm93LFxuICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgIHNlbGVjdGFibGUsXG4gICAgICAgICAgZXhwYW5kYWJsZSxcbiAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICBleHBhbmRlZCxcbiAgICAgICAgICBleHBhbmRSb3csXG4gICAgICAgICAgc2VsZWN0Um93LFxuICAgICAgICAgIERFTEFZX0ZPUl9EQkNMSUNLLFxuICAgICAgICB9OiBSb3dFdmVudERlbGVnYXRlclByb3BzID0gdGhpcy5wcm9wcztcblxuICAgICAgICBjb25zdCBjbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgY2IoZSwgcm93LCByb3dJbmRleCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qga2V5ID0gXy5nZXQocm93LCBrZXlGaWVsZCk7XG5cbiAgICAgICAgICBpZiAoZXhwYW5kUm93ICYmIGV4cGFuZGFibGUgJiYgIWV4cGFuZFJvdy5leHBhbmRCeUNvbHVtbk9ubHkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHNlbGVjdFJvdy5tb2RlICE9PSBST1dfU0VMRUNUX0RJU0FCTEVEICYmXG4gICAgICAgICAgICAgICAgc2VsZWN0Um93LmNsaWNrVG9FeHBhbmQpIHx8XG4gICAgICAgICAgICAgIHNlbGVjdFJvdy5tb2RlID09PSBST1dfU0VMRUNUX0RJU0FCTEVEXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZXhwYW5kUm93Lm9uUm93RXhwYW5kKGtleSwgIWV4cGFuZGVkLCByb3dJbmRleCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlbGVjdFJvdy5jbGlja1RvU2VsZWN0ICYmIHNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHNlbGVjdFJvdy5vblJvd1NlbGVjdChrZXksICFzZWxlY3RlZCwgcm93SW5kZXgsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoREVMQVlfRk9SX0RCQ0xJQ0spIHtcbiAgICAgICAgICB0aGlzLmNsaWNrTnVtICs9IDE7XG4gICAgICAgICAgXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbGlja051bSA9PT0gMSkge1xuICAgICAgICAgICAgICBjbGlja0ZuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsaWNrTnVtID0gMDtcbiAgICAgICAgICB9LCBERUxBWV9GT1JfREJDTElDSykoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGlja0ZuKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlcihcbiAgICAgIGNiOiAoZTogRXZlbnQsIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICByZXR1cm4gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcm93LCByb3dJbmRleCB9OiBSb3dFdmVudERlbGVnYXRlclByb3BzID0gdGhpcy5wcm9wcztcbiAgICAgICAgY2IoZSwgcm93LCByb3dJbmRleCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGRlbGVnYXRlKGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgIGNvbnN0IG5ld0F0dHJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0geyAuLi5hdHRycyB9O1xuICAgICAgT2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgaWYgKF8uaW5jbHVkZXMoZXZlbnRzLCBhdHRyKSkge1xuICAgICAgICAgIG5ld0F0dHJzW2F0dHJdID0gdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKGF0dHJzW2F0dHJdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3QXR0cnM7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCxcbiAgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUsXG4gIFJPV19TRUxFQ1RfTVVMVElQTEUsXG4gIFJPV19TRUxFQ1RfU0lOR0xFLFxufSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0cy9ib290c3RyYXBcIjtcblxuaW50ZXJmYWNlIENoZWNrQm94UHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoZWNrZWQ6IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBDaGVja0JveDogUmVhY3QuRkM8Q2hlY2tCb3hQcm9wcz4gPSAoe1xuICBjbGFzc05hbWUsXG4gIGNoZWNrZWQsXG4gIGluZGV0ZXJtaW5hdGUsXG59KSA9PiAoXG4gIDxpbnB1dFxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICByZWY9eyhpbnB1dCkgPT4ge1xuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIGlucHV0LmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgfVxuICAgIH19XG4gICAgb25DaGFuZ2U9eygpID0+IHsgfX1cbiAgLz5cbik7XG5cbmludGVyZmFjZSBTZWxlY3Rpb25IZWFkZXJDZWxsUHJvcHMge1xuICBtb2RlPzogc3RyaW5nO1xuICBjaGVja2VkU3RhdHVzPzogc3RyaW5nO1xuICBvbkFsbFJvd3NTZWxlY3Q/OiAoXG4gICAgZTogUmVhY3QuTW91c2VFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sXG4gICAgaXNVblNlbGVjdDogYm9vbGVhblxuICApID0+IHZvaWQ7XG4gIGhpZGVTZWxlY3RBbGw/OiBib29sZWFuO1xuICBzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcj86IChhcmdzOiB7XG4gICAgbW9kZT86IHN0cmluZztcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICAgIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG4gIH0pID0+IFJlYWN0Tm9kZTtcbiAgaGVhZGVyQ29sdW1uU3R5bGU/OlxuICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgfCAoKGNoZWNrZWRTdGF0dXM6IHN0cmluZykgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGlvbkhlYWRlckNlbGwgZXh0ZW5kcyBDb21wb25lbnQ8U2VsZWN0aW9uSGVhZGVyQ2VsbFByb3BzPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTZWxlY3Rpb25IZWFkZXJDZWxsUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVDaGVja0JveENsaWNrID0gdGhpcy5oYW5kbGVDaGVja0JveENsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBTZWxlY3Rpb25IZWFkZXJDZWxsUHJvcHMpIHtcbiAgICBjb25zdCB7IG1vZGUsIGNoZWNrZWRTdGF0dXMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAobW9kZSA9PT0gUk9XX1NFTEVDVF9TSU5HTEUpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBuZXh0UHJvcHMuY2hlY2tlZFN0YXR1cyAhPT0gY2hlY2tlZFN0YXR1cztcbiAgfVxuXG4gIGhhbmRsZUNoZWNrQm94Q2xpY2soZTogUmVhY3QuTW91c2VFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4pIHtcbiAgICBjb25zdCB7IG9uQWxsUm93c1NlbGVjdCwgY2hlY2tlZFN0YXR1cyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBpc1VuU2VsZWN0ID1cbiAgICAgIGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19DSEVDS0VEIHx8XG4gICAgICBjaGVja2VkU3RhdHVzID09PSBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURTtcblxuICAgIG9uQWxsUm93c1NlbGVjdCEoZSwgaXNVblNlbGVjdCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbW9kZSxcbiAgICAgIGNoZWNrZWRTdGF0dXMsXG4gICAgICBzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcixcbiAgICAgIGhpZGVTZWxlY3RBbGwsXG4gICAgICBoZWFkZXJDb2x1bW5TdHlsZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoaGlkZVNlbGVjdEFsbCkge1xuICAgICAgcmV0dXJuIDx0aCBkYXRhLXJvdy1zZWxlY3Rpb24gLz47XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tlZCA9IGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19DSEVDS0VEO1xuXG4gICAgY29uc3QgaW5kZXRlcm1pbmF0ZSA9IGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFO1xuXG4gICAgY29uc3QgYXR0cnM6IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PiA9IHt9O1xuICAgIGxldCBjb250ZW50OiBSZWFjdE5vZGUgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyIHx8IG1vZGUgPT09IFJPV19TRUxFQ1RfTVVMVElQTEUpIHtcbiAgICAgIGF0dHJzLm9uQ2xpY2sgPSB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2s7XG4gICAgfVxuXG4gICAgYXR0cnMuc3R5bGUgPSAoXy5pc0Z1bmN0aW9uKGhlYWRlckNvbHVtblN0eWxlKVxuICAgICAgPyBoZWFkZXJDb2x1bW5TdHlsZShjaGVja2VkU3RhdHVzISlcbiAgICAgIDogaGVhZGVyQ29sdW1uU3R5bGUpIGFzIGFueTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Qm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IGJvb3RzdHJhcDQgfSkgPT4ge1xuICAgICAgICAgIGlmIChzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcikge1xuICAgICAgICAgICAgY29udGVudCA9IHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gUk9XX1NFTEVDVF9NVUxUSVBMRSkge1xuICAgICAgICAgICAgY29udGVudCA9IChcbiAgICAgICAgICAgICAgPENoZWNrQm94XG4gICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Jvb3RzdHJhcDQgPyBcInNlbGVjdGlvbi1pbnB1dC00XCIgOiBcIlwifVxuICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9e2luZGV0ZXJtaW5hdGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInNlbGVjdGlvbi1jZWxsLWhlYWRlclwiIGRhdGEtcm93LXNlbGVjdGlvbiB7Li4uYXR0cnMgYXMgYW55fT5cbiAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICk7XG4gICAgICAgIH19XG4gICAgICA8L0Jvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBDb2x1bW5EZXNjcmlwdGlvbiwgU2VsZWN0Um93UHJvcHMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IEZvb3RlckNlbGwgZnJvbSBcIi4vZm9vdGVyLWNlbGxcIjtcbmltcG9ydCBSb3dUZW1wbGF0ZSwgeyBFeHBhbmRSb3cgfSBmcm9tIFwiLi9yb3cvcm93LXRlbXBsYXRlXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgRm9vdGVyUHJvcHMge1xuICBkYXRhPzogYW55W107XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgc2VsZWN0Um93PzogU2VsZWN0Um93UHJvcHM8YW55PiB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kUm93PzogRXhwYW5kUm93O1xufVxuXG5jb25zdCBGb290ZXI6IFJlYWN0LkZDPEZvb3RlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGRhdGEgPSBbXSwgY2xhc3NOYW1lLCBjb2x1bW5zID0gW10sIHNlbGVjdFJvdywgZXhwYW5kUm93IH0gPSBwcm9wcztcblxuICBmdW5jdGlvbiByZW5kZXJDb250ZW50KCk6IFJlYWN0Tm9kZSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGlmIChjb2x1bW4uZm9vdGVyID09PSB1bmRlZmluZWQgfHwgY29sdW1uLmZvb3RlciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBfLnBsdWNrKGRhdGEsIGNvbHVtbi5kYXRhRmllbGQpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Rm9vdGVyQ2VsbFxuICAgICAgICAgIGluZGV4PXtpfVxuICAgICAgICAgIGtleT17Y29sdW1uLmRhdGFGaWVsZH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICBjb2x1bW5EYXRhPXtjb2x1bW5EYXRhfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPHRmb290PlxuICAgICAgPFJvd1RlbXBsYXRlXG4gICAgICAgIHJlbmRlckNvbnRlbnQ9e3JlbmRlckNvbnRlbnR9XG4gICAgICAgIHNlbGVjdFJvdz17c2VsZWN0Um93fVxuICAgICAgICBleHBhbmRSb3c9e2V4cGFuZFJvd31cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIGNlbGxFbD1cInRoXCJcbiAgICAgIC8+XG4gICAgPC90Zm9vdD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvb3RlcjtcbiIsImltcG9ydCBSZWFjdCwgeyBDU1NQcm9wZXJ0aWVzLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgQm9vdHN0cmFwVGFibGUgZnJvbSBcIi4vc3JjL2Jvb3RzdHJhcC10YWJsZVwiO1xuaW1wb3J0IHdpdGhDb250ZXh0IGZyb20gXCIuL3NyYy9jb250ZXh0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoQ29udGV4dChCb290c3RyYXBUYWJsZSk7XG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZXh0IDQuMFxuLy8gUHJvamVjdDogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9yZWFjdC1ib290c3RyYXAtdGFibGUyI3JlYWRtZVxuLy8gRGVmaW5pdGlvbnMgYnk6IFdsYWQgTWVpeG5lciA8aHR0cHM6Ly9naXRodWIuY29tL2dvc3RpY2tzPlxuLy8gICAgICAgICAgICAgICAgVmFsZW50aW4gU2xvYm96YW5pbiA8aHR0cHM6Ly9naXRodWIuY29tL2lnbmVmb2xpbz5cbi8vICAgICAgICAgICAgICAgIEpha3ViIFLDs8W8Ymlja2kgPGh0dHBzOi8vZ2l0aHViLmNvbS9qcm96Ymlja2k+XG4vLyBEZWZpbml0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWRcbi8vIFR5cGVTY3JpcHQgVmVyc2lvbjogMy4wXG5cbi8vIGRvY3VtZW50YXRpb24gdGFrZW4gZnJvbSBodHRwczovL3JlYWN0LWJvb3RzdHJhcC10YWJsZS5naXRodWIuaW8vcmVhY3QtYm9vdHN0cmFwLXRhYmxlMi9kb2NzL3RhYmxlLXByb3BzLmh0bWxcblxuZXhwb3J0ICogZnJvbSBcIi4vc3JjL2NvbnN0XCI7XG5pbXBvcnQge1xuICBST1dfU0VMRUNUX1NJTkdMRSxcbiAgUk9XX1NFTEVDVF9NVUxUSVBMRSxcbiAgUk9XX1NFTEVDVF9ESVNBQkxFRCxcbiAgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUsXG4gIENIRUNLQk9YX1NUQVRVU19DSEVDS0VELFxuICBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VELFxuICBGSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgRklMVEVSU19QT1NJVElPTl9UT1AsXG4gIEZJTFRFUlNfUE9TSVRJT05fQk9UVE9NLFxufSBmcm9tIFwiLi9zcmMvY29uc3RcIjtcblxuZXhwb3J0IHR5cGUgUm93U2VsZWN0aW9uVHlwZSA9XG4gIHwgdHlwZW9mIFJPV19TRUxFQ1RfU0lOR0xFXG4gIHwgdHlwZW9mIFJPV19TRUxFQ1RfTVVMVElQTEVcbiAgfCB0eXBlb2YgUk9XX1NFTEVDVF9ESVNBQkxFRDtcbmV4cG9ydCB0eXBlIFRhYmxlQ2hlY2tib3hTdGF0dXMgPVxuICB8IHR5cGVvZiBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURVxuICB8IHR5cGVvZiBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRFxuICB8IHR5cGVvZiBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VEO1xuZXhwb3J0IHR5cGUgRmlsdGVyUG9zaXRpb24gPVxuICB8IHR5cGVvZiBGSUxURVJTX1BPU0lUSU9OX0lOTElORVxuICB8IHR5cGVvZiBGSUxURVJTX1BPU0lUSU9OX1RPUFxuICB8IHR5cGVvZiBGSUxURVJTX1BPU0lUSU9OX0JPVFRPTTtcblxuLyoqXG4gKiBUYWJsZSBjaGFuZ2UgZXZlbnQgdHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgVGFibGVDaGFuZ2VUeXBlID0gXCJmaWx0ZXJcIiB8IFwicGFnaW5hdGlvblwiIHwgXCJzb3J0XCIgfCBcImNlbGxFZGl0XCI7XG5cbi8qKlxuICogVXNlZCB0byBzcGVjaWZ5IHRoZSB0ZXh0IGFsaWdubWVudCBmb3IgYSBjb2x1bW4uXG4gKi9cbmV4cG9ydCB0eXBlIENlbGxBbGlnbm1lbnQgPVxuICB8IChcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCIgfCBcInN0YXJ0XCIgfCBcImVuZFwiKVxuICB8IHN0cmluZztcblxuLyoqXG4gKiBGaWx0ZXIgY29tcGFyYXRvcnMgdXNlZCBmb3IgdGFibGUgZmlsdGVyc1xuICovXG5kZWNsYXJlIGVudW0gRmlsdGVyQ29tcGFyYXRvciB7XG4gIExJS0UgPSBcIkxJS0VcIixcbiAgRVEgPSBcIj1cIixcbiAgTkUgPSBcIiE9XCIsXG4gIEdUID0gXCI+XCIsXG4gIEdFID0gXCI+PVwiLFxuICBMVCA9IFwiPFwiLFxuICBMRSA9IFwiPD1cIixcbn1cblxuLyoqXG4gKiBTb3J0IE9yZGVyIHZhbHVlcy4gJ2FzYycgPSBhc2NlbmRpbmcsICdkZXNjJyA9IGRlc2NlbmRpbmcuXG4gKi9cbmV4cG9ydCB0eXBlIFNvcnRPcmRlciA9IFwiYXNjXCIgfCBcImRlc2NcIjtcblxuZXhwb3J0IHR5cGUgQ29sdW1uU29ydFZhbHVlPFIsIEMgPSBhbnk+ID0gKFxuICBjZWxsOiBDLFxuICByb3c6IFJcbikgPT4gYm9vbGVhbiB8IHN0cmluZyB8IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgQ29sdW1uU29ydEZ1bmM8VCwgRSBleHRlbmRzIGtleW9mIFQgPSBhbnk+ID0gKFxuICBhOiBUW0VdLFxuICBiOiBUW0VdLFxuICBvcmRlcjogXCJhc2NcIiB8IFwiZGVzY1wiLFxuICBkYXRhRmllbGQ6IGFueSxcbiAgcm93QTogVCxcbiAgcm93QjogVFxuKSA9PiBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENvbHVtblNvcnRDYXJldDxUIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBFID0gYW55PiA9IChcbiAgb3JkZXI6IFwiYXNjXCIgfCBcImRlc2NcIiB8IHVuZGVmaW5lZCxcbiAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPlxuKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBzdHJpbmcgfCBudWxsO1xuXG5leHBvcnQgdHlwZSBIZWFkZXJTb3J0aW5nQ2xhc3NlczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBFID0gYW55PiA9XG4gIHwgc3RyaW5nXG4gIHwgKChcbiAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LFxuICAgIHNvcnRPcmRlcjogXCJhc2NcIiB8IFwiZGVzY1wiLFxuICAgIGlzTGFzdFNvcnRpbmc6IGJvb2xlYW4sXG4gICAgY29sSW5kZXg6IG51bWJlclxuICApID0+IHN0cmluZyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDaGFuZ2VTdGF0ZTxUPiB7XG4gIHBhZ2U6IG51bWJlcjtcbiAgc2l6ZVBlclBhZ2U6IG51bWJlcjtcbiAgc29ydEZpZWxkOiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogXCJhc2NcIiB8IFwiZGVzY1wiO1xuICBmaWx0ZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBmaWx0ZXJWYWw6IGFueTsgZmlsdGVyVHlwZTogXCJURVhUXCI7IGNvbXBhcmF0b3I6IGFueSB9O1xuICB9O1xuICBkYXRhOiBUW107XG4gIGNlbGxFZGl0OiB7XG4gICAgcm93SWQ6IHN0cmluZztcbiAgICBkYXRhRmllbGQ6IGFueTtcbiAgICBuZXdWYWx1ZTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBIZWFkZXJGb3JtYXR0ZXI8VCBleHRlbmRzIG9iamVjdCA9IGFueT4gPSAoXG4gIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VD4sXG4gIGNvbEluZGV4OiBudW1iZXIsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBzb3J0RWxlbWVudDogUmVhY3QuUmVhY3RFbGVtZW50O1xuICAgIGZpbHRlckVsZW1lbnQ6IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgfVxuKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG5cbmV4cG9ydCB0eXBlIENvbHVtbkZvcm1hdHRlcjxSLCBFID0gYW55LCBDID0gYW55PiA9IChcbiAgY2VsbDogQyxcbiAgcm93OiBSLFxuICByb3dJbmRleDogbnVtYmVyLFxuICBmb3JtYXRFeHRyYURhdGE/OiBFXG4pID0+IFJlYWN0LlJlYWN0Tm9kZTtcblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgYXN5bmM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB2YWxpZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uRGVzY3JpcHRpb248VCBleHRlbmRzIG9iamVjdCA9IGFueSwgRSA9IGFueT4ge1xuICAvKipcbiAgICogSWYgc2V0IHRoZSBjb2x1bW4gd2lsbCBub3QgdXNlIGNlbGwgdmFsdWVzXG4gICAqL1xuICBpc0R1bW15RmllbGQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBkYXRhRmllbGQ6IGFueTtcbiAgZm9ybWF0dGVyPzogQ29sdW1uRm9ybWF0dGVyPFQsIEU+IHwgdW5kZWZpbmVkO1xuICBoaWRkZW4/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQ29sdW1uIGhlYWRlciBmaWVsZFxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xuICBjbGFzc2VzPzpcbiAgfCBzdHJpbmdcbiAgfCAoKGNlbGw6IFRba2V5b2YgVF0sIHJvdzogVCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyQ2xhc3Nlcz86XG4gIHwgc3RyaW5nXG4gIHwgKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LCBjb2xJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpXG4gIHwgdW5kZWZpbmVkO1xuICBzdHlsZT86XG4gIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICB8ICgoXG4gICAgY2VsbDogVFtrZXlvZiBUXSxcbiAgICByb3c6IFQsXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyXG4gICkgPT4gUmVhY3QuQ1NTUHJvcGVydGllcylcbiAgfCB1bmRlZmluZWQ7XG4gIHNvcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzb3J0VmFsdWU/OiBDb2x1bW5Tb3J0VmFsdWU8VD4gfCB1bmRlZmluZWQ7XG4gIHNvcnRGdW5jPzogQ29sdW1uU29ydEZ1bmM8VD4gfCB1bmRlZmluZWQ7XG4gIHNvcnRDYXJldD86IENvbHVtblNvcnRDYXJldDxULCBFPiB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGFsaWduPzpcbiAgfCBDZWxsQWxpZ25tZW50XG4gIHwgKChcbiAgICBjZWxsOiBUW2tleW9mIFRdLFxuICAgIHJvdzogVCxcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbEluZGV4OiBudW1iZXJcbiAgKSA9PiBDZWxsQWxpZ25tZW50KVxuICB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyU3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgKCgpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpIHwgdW5kZWZpbmVkO1xuXG4gIHRvb2x0aXBEYXRhRmllbGQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGVkaXRhYmxlPzpcbiAgfCBib29sZWFuXG4gIHwgKChjZWxsOiBhbnksIHJvdzogVCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbilcbiAgfCB1bmRlZmluZWQ7XG4gIGVkaXRvcj86XG4gIHwge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBvcHRpb25zPzogQXJyYXk8eyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+IHwgdW5kZWZpbmVkO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXI/OiBib29sZWFuIHwgVGFibGVDb2x1bW5GaWx0ZXJQcm9wcyB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyVmFsdWU/OiAoKGNlbGw6IFRba2V5b2YgVF0sIHJvdzogVCkgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyUmVuZGVyZXI/OiAoKGZpbHRlckhhbmRsZXI6IEZ1bmN0aW9uLCBjb2x1bW46IGFueSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50KSB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyQWxpZ24/OiBDZWxsQWxpZ25tZW50IHwgdW5kZWZpbmVkO1xuICBoZWFkZXJGb3JtYXR0ZXI/OiBIZWFkZXJGb3JtYXR0ZXI8VD4gfCB1bmRlZmluZWQ7XG4gIGhlYWRlclNvcnRpbmdDbGFzc2VzPzogSGVhZGVyU29ydGluZ0NsYXNzZXM8VCwgRT4gfCB1bmRlZmluZWQ7XG4gIGZvcm1hdEV4dHJhRGF0YT86XG4gIHwgKHtcbiAgICB0b29sdGlwRm9ybWF0dGVyPzogKChyb3c6IFQpID0+IFJlYWN0LlJlYWN0RWxlbWVudCkgfCB1bmRlZmluZWQ7XG4gIH0gJiBFKVxuICB8IHVuZGVmaW5lZDtcbiAgd2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGZvb3Rlcj86XG4gIHwgYm9vbGVhblxuICB8IG51bWJlclxuICB8IHN0cmluZ1xuICB8ICgoXG4gICAgY29sdW1uRGF0YTogYW55LFxuICAgIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sXG4gICAgY29sdW1uSW5kZXg6IG51bWJlclxuICApID0+IHN0cmluZylcbiAgfCB1bmRlZmluZWQ7XG4gIC8vIFRPRE9cbiAgZm9vdGVyRm9ybWF0dGVyPzpcbiAgfCAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sIGNvbHVtbkluZGV4OiBudW1iZXIsIHRleHQ6IGFueSkgPT4gdm9pZClcbiAgfCB1bmRlZmluZWQ7XG4gIGZvb3RlckNsYXNzZXM/OlxuICB8IHN0cmluZ1xuICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPiwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyU3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBmb290ZXJUaXRsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGZvb3RlckV2ZW50cz86XG4gIHwge1xuICAgIG9uQ2xpY2s6IChcbiAgICAgIGU6IGFueSxcbiAgICAgIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sXG4gICAgICBjb2x1bW5JbmRleDogbnVtYmVyXG4gICAgKSA9PiB2b2lkO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBmb290ZXJBbGlnbj86XG4gIHwgQ2VsbEFsaWdubWVudFxuICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPiwgY29sSW5kZXg6IG51bWJlcikgPT4gQ2VsbEFsaWdubWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIGZvb3RlckF0dHJzPzpcbiAgfCBvYmplY3RcbiAgfCAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IG9iamVjdClcbiAgfCB1bmRlZmluZWQ7XG4gIHZhbGlkYXRvcj86XG4gIHwgKChcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIHJvdzogVCxcbiAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LFxuICAgIGRvbmU6IChyZXN1bHQ/OiBWYWxpZGF0aW9uUmVzdWx0KSA9PiBhbnlcbiAgKSA9PiBib29sZWFuIHwgVmFsaWRhdGlvblJlc3VsdClcbiAgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIENTViBDb2x1bW4gb3B0aW9ucyBvbmx5IHVzZWQgd2l0aCB0aGUgdG9vbGtpdCBwcm92aWRlclxuICAgKi9cblxuICAvKipcbiAgICogZXhwb3J0IGNzdiBjZWxsIHR5cGUgY2FuIGJlIE51bWJlciBvciBTdHJpbmdcbiAgICovXG4gIGNzdlR5cGU/OiBvYmplY3QgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBDdXN0b20gY3N2IGNlbGwgZm9ybWF0dGVyIHVzZWQgd2hlbiBleHBvcnRpbmcgY3N2XG4gICAqL1xuICBjc3ZGb3JtYXR0ZXI/OiBDb2x1bW5Gb3JtYXR0ZXI8VCwgRT4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBjc3ZUZXh0IGRlZmF1bHRzIHRvIGNvbHVtbi50ZXh0XG4gICAqL1xuICBjc3ZUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVG9nZ2xlIGNvbHVtbiBkaXNwbGF5IGluIENTViBleHBvcnRcbiAgICovXG4gIGNzdkV4cG9ydD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBDb2x1bW4gdG9nZ2xlIGxpc3QgdXNlZCBieSBUb29sa2l0IHByb3ZpZGVyXG4gICAqL1xuICB0b2dnbGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgcm93IGV2ZW50IGhhbmRsZXJcbiAqL1xuZXhwb3J0IHR5cGUgUm93RXZlbnRIYW5kbGVyPFQ+ID0gKFxuICBlOiBTeW50aGV0aWNFdmVudCxcbiAgcm93OiBULFxuICByb3dJbmRleDogbnVtYmVyXG4pID0+IHZvaWQ7XG5cbi8qKlxuICogUm93IGxldmVsIGV2ZW50IGhhbmRsZXJzXG4gKi9cbmV4cG9ydCB0eXBlIFJvd0V2ZW50SGFuZGxlclByb3BzPFQgPSBhbnk+ID0gUGFydGlhbDx7XG4gIG9uQ2xpY2s6IFJvd0V2ZW50SGFuZGxlcjxUPjtcbiAgb25Eb3VibGVDbGljazogUm93RXZlbnRIYW5kbGVyPFQ+O1xuICBvbk1vdXNlRW50ZXI6IFJvd0V2ZW50SGFuZGxlcjxUPjtcbiAgb25Nb3VzZUxlYXZlOiBSb3dFdmVudEhhbmRsZXI8VD47XG4gIG9uQ29udGV4dE1lbnU6IFJvd0V2ZW50SGFuZGxlcjxUPjtcbn0+O1xuXG4vKipcbiAqIFRhYmxlIGNoYW5nZSBjYWxsYmFjayBtZXRob2RcbiAqL1xuZXhwb3J0IHR5cGUgVGFibGVDaGFuZ2VIYW5kbGVyPFQ+ID0gKFxuICB0eXBlOiBUYWJsZUNoYW5nZVR5cGUsXG4gIG5ld1N0YXRlOiBUYWJsZUNoYW5nZVN0YXRlPFQ+XG4pID0+IHZvaWQ7XG5cbi8qKlxuICogQWxsIHBvc3NpYmxlIHBhZ2luYXRpb24gb3B0aW9ucyBoYW5kbGVkIGJ5IHRoZSBwYWdpbmF0aW9uIHBsdWdpblxuICpcbiAqIENvbnN1bHQgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vcmVhY3QtYm9vdHN0cmFwLXRhYmxlLmdpdGh1Yi5pby9yZWFjdC1ib290c3RyYXAtdGFibGUyL2RvY3MvcGFnaW5hdGlvbi1wcm9wcy5odG1sKVxuICovXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uT3B0aW9ucyA9IFBhcnRpYWw8e1xuICBjdXN0b206IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBjdXJyZW50IHBhZ2UuIEl0J3MgbmVjZXNzYXJ5IHdoZW4gcmVtb3RlIGlzIGVuYWJsZWRcbiAgICovXG4gIHBhZ2U6IG51bWJlcjtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIHNpemUgcGVyIHBhZ2UuIEl0J3MgbmVjZXNzYXJ5IHdoZW4gcmVtb3RlIGlzIGVuYWJsZWRcbiAgICovXG4gIHNpemVQZXJQYWdlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUb3RhbCBkYXRhIHNpemUuIEl0J3MgbmVjZXNzYXJ5IHdoZW4gcmVtb3RlIGlzIGVuYWJsZWRcbiAgICovXG4gIHRvdGFsU2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICogZmlyc3QgcGFnZSB3aWxsIGJlIDAsIGRlZmF1bHQgaXMgMVxuICAgKi9cbiAgcGFnZVN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgLyoqXG4gICAqIHRoZSBwYWdpbmF0aW9uIGJhciBzaXplLCBkZWZhdWx0IGlzIDVcbiAgICovXG4gIHBhZ2luYXRpb25TaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiBkaXNwbGF5IHBhZ2luYXRpb24gaW5mb3JtYXRpb25cbiAgICovXG4gIHNob3dUb3RhbDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgbnVtZXJpYyBhcnJheSBpcyBhbHNvIGF2YWlsYWJsZTogWzUsIDEwXS4gdGhlIHB1cnBvc2Ugb2YgYWJvdmUgZXhhbXBsZSBpcyBjdXN0b20gdGhlIHRleHRcbiAgICovXG4gIHNpemVQZXJQYWdlTGlzdDogbnVtYmVyW10gfCBBcnJheTx7IHRleHQ6IHN0cmluZzsgdmFsdWU6IG51bWJlciB9PjtcbiAgLyoqXG4gICAqIGhpZGUgdGhlIGdvaW5nIHRvIGZpcnN0IGFuZCBsYXN0IHBhZ2UgYnV0dG9uXG4gICAqL1xuICB3aXRoRmlyc3RBbmRMYXN0OiBib29sZWFuO1xuICAvKipcbiAgICogYWx3YXlzIHNob3cgdGhlIG5leHQgYW5kIHByZXZpb3VzIHBhZ2UgYnV0dG9uXG4gICAqL1xuICBhbHdheXNTaG93QWxsQnRuczogYm9vbGVhbjtcbiAgLyoqXG4gICAqIHRoZSB0ZXh0IG9mIGZpcnN0IHBhZ2UgYnV0dG9uXG4gICAqL1xuICBmaXJzdFBhZ2VUZXh0OiBzdHJpbmcgfCBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiB0aGUgdGV4dCBvZiBwcmV2aW91cyBwYWdlIGJ1dHRvblxuICAgKi9cbiAgcHJlUGFnZVRleHQ6IHN0cmluZyB8IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIHRoZSB0ZXh0IG9mIG5leHQgcGFnZSBidXR0b25cbiAgICovXG4gIG5leHRQYWdlVGV4dDogc3RyaW5nIHwgUmVhY3QuUmVhY3RFbGVtZW50O1xuICAvKipcbiAgICogdGhlIHRleHQgb2YgbGFzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgbGFzdFBhZ2VUZXh0OiBzdHJpbmcgfCBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiB0aGUgdGl0bGUgb2YgbmV4dCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgbmV4dFBhZ2VUaXRsZTogc3RyaW5nO1xuICAvKipcbiAgICogdGhlIHRpdGxlIG9mIHByZXZpb3VzIHBhZ2UgYnV0dG9uXG4gICAqL1xuICBwcmVQYWdlVGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIHRoZSB0aXRsZSBvZiBmaXJzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgZmlyc3RQYWdlVGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIHRoZSB0aXRsZSBvZiBsYXN0IHBhZ2UgYnV0dG9uXG4gICAqL1xuICBsYXN0UGFnZVRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBoaWRlIHRoZSBzaXplIHBlciBwYWdlIGRyb3Bkb3duXG4gICAqL1xuICBoaWRlU2l6ZVBlclBhZ2U6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBoaWRlIHBhZ2luYXRpb24gYmFyIHdoZW4gb25seSBvbmUgcGFnZSwgZGVmYXVsdCBpcyBmYWxzZVxuICAgKi9cbiAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2U6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBjdXN0b20gcGFnZSBidXR0b24gaW5zaWRlIHRoZSBwYWdpbmF0aW9uIGxpc3RcbiAgICovXG4gIHBhZ2VCdXR0b25SZW5kZXJlcjogKG9wdGlvbnM6IFBhZ2VCdXR0b25SZW5kZXJlck9wdGlvbnMpID0+IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gcGFnZSB3YXMgY2hhbmdpbmdcbiAgICovXG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gcGFnZSBzaXplIHdhcyBjaGFuZ2luZ1xuICAgKi9cbiAgb25TaXplUGVyUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIGN1c3RvbSBwYWdpbmF0aW9uIGxpc3QgY29tcG9uZW50XG4gICAqL1xuICBwYWdlTGlzdFJlbmRlcmVyOiAob3B0aW9uczogUGFnZUxpc3RSZW5kZXJlck9wdGlvbnMpID0+IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIGN1c3RvbSBzaXplIHBlciBwYWdlXG4gICAqL1xuICBzaXplUGVyUGFnZVJlbmRlcmVyOiAob3B0aW9uczogU2l6ZVBlclBhZ2VSZW5kZXJlck9wdGlvbnMpID0+IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIGN1c3RvbSBzaXplIHBlciBwYWdlIGRyb3Bkb3duIGNvbXBvbmVudFxuICAgKi9cbiAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcjogKFxuICAgIG9wdGlvbnM6IFNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXJPcHRpb25zXG4gICkgPT4gUmVhY3QuUmVhY3RFbGVtZW50O1xuICAvKipcbiAgICogY3VzdG9tIHRoZSBwYWdpbmF0aW9uIHRvdGFsXG4gICAqL1xuICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcjogKFxuICAgIGZyb206IG51bWJlcixcbiAgICB0bzogbnVtYmVyLFxuICAgIHNpemU6IG51bWJlclxuICApID0+IFJlYWN0LlJlYWN0RWxlbWVudDtcbn0+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIHRleHQgb2YgdGhlIG9wdGlvblxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKipcbiAgICogc2l6ZSBvZiBwZXIgcGFnZSBvcHRpb25cbiAgICovXG4gIHBhZ2U6IG51bWJlcjtcbiAgLyoqXG4gICAqIGNhbGwgaXQgd2hlbiB5b3UgbmVlZCB0byBjaGFuZ2Ugc2l6ZSBwZXIgcGFnZVxuICAgKi9cbiAgb25TaXplUGVyUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlTGlzdFJlbmRlcmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBjdXJyZW50IHBhZ2VcbiAgICovXG4gIHBhZ2VzOiBBcnJheTx7XG4gICAgYWN0aXZlOiBib29sZWFuO1xuICAgIGRpc2FibGVkOiBib29sZWFuO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICB0aXRsZTogc3RyaW5nO1xuICB9PjtcbiAgLyoqXG4gICAqIGNhbGwgaXQgd2hlbiB5b3UgbmVlZCB0byBjaGFuZ2UgcGFnZVxuICAgKi9cbiAgb25QYWdlQ2hhbmdlOiAocGFnZTogbnVtYmVyLCBzaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VCdXR0b25SZW5kZXJlck9wdGlvbnMge1xuICAvKipcbiAgICogcGFnZSBudW1iZXJcbiAgICovXG4gIHBhZ2U6IG51bWJlciB8IHN0cmluZztcbiAgLyoqXG4gICAqIGlzIHRoaXMgcGFnZSB0aGUgY3VycmVudCBwYWdlIG9yIG5vdFxuICAgKi9cbiAgYWN0aXZlOiBib29sZWFuO1xuICAvKipcbiAgICogIGlzIHRoaXMgcGFnZSBkaXNhYmxlZCBvciBub3RcbiAgICovXG4gIGRpc2FibGVkOiBib29sZWFuO1xuICAvKipcbiAgICogcGFnZSB0aXRsZVxuICAgKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIGNhbGwgaXQgd2hlbiB5b3UgbmVlZCB0byBjaGFuZ2UgcGFnZVxuICAgKi9cbiAgb25QYWdlQ2hhbmdlOiAocGFnZTogbnVtYmVyLCBzaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpemVQZXJQYWdlUmVuZGVyZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIGRyb3Bkb3duIG9wdGlvbnNcbiAgICovXG4gIG9wdGlvbnM6IEFycmF5PHsgdGV4dDogc3RyaW5nOyBwYWdlOiBudW1iZXIgfT47XG4gIC8qKlxuICAgKiBjdXJyZW50IHNpemUgcGVyIHBhZ2VcbiAgICovXG4gIGN1cnJTaXplUGVyUGFnZTogc3RyaW5nO1xuICAvKipcbiAgICogY2FsbCBpdCB3aGVuIHlvdSBuZWVkIHRvIGNoYW5nZSBzaXplIHBlciBwYWdlXG4gICAqL1xuICBvblNpemVQZXJQYWdlQ2hhbmdlOiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdFJvd1Byb3BzPFQ+IHtcbiAgbW9kZTogc3RyaW5nO1xuICBjbGlja1RvU2VsZWN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY2xpY2tUb0V4cGFuZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNsaWNrVG9FZGl0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaGlkZVNlbGVjdEFsbD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHNlbGVjdGVkPzogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPiB8IHVuZGVmaW5lZDtcbiAgb25TZWxlY3Q/OlxuICB8ICgoXG4gICAgcm93OiBULFxuICAgIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBTeW50aGV0aWNFdmVudFxuICApID0+IHZvaWQgfCBib29sZWFuKVxuICB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBzZWxlY3QvdW5zZWxlY3QgYWxsIGFuZCBpdCBvbmx5IHdvcmsgd2hlbiB5b3UgY29uZmlndXJlIHNlbGVjdFJvdy5tb2RlIGFzIGNoZWNrYm94LlxuICAgKi9cbiAgb25TZWxlY3RBbGw/OlxuICB8ICgoXG4gICAgaXNTZWxlY3Q6IGJvb2xlYW4sXG4gICAgcm93czogVFtdLFxuICAgIGU6IFJlYWN0LlN5bnRoZXRpY0V2ZW50XG4gICkgPT4gdm9pZCB8IG51bWJlcltdKVxuICB8IHVuZGVmaW5lZDtcbiAgc3R5bGU/OlxuICB8ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkKVxuICB8IENTU1Byb3BlcnRpZXNcbiAgfCB1bmRlZmluZWQ7XG4gIGNsYXNzZXM/OlxuICB8ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpXG4gIHwgc3RyaW5nXG4gIHwgdW5kZWZpbmVkO1xuICBub25TZWxlY3RhYmxlPzogbnVtYmVyW10gfCB1bmRlZmluZWQ7XG4gIG5vblNlbGVjdGFibGVTdHlsZT86XG4gIHwgKChyb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IENTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQpXG4gIHwgQ1NTUHJvcGVydGllc1xuICB8IHVuZGVmaW5lZDtcbiAgbm9uU2VsZWN0YWJsZUNsYXNzZXM/OlxuICB8ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpXG4gIHwgc3RyaW5nXG4gIHwgdW5kZWZpbmVkO1xuICBiZ0NvbG9yPzogKChyb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZykgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhpZGVTZWxlY3RDb2x1bW4/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzZWxlY3Rpb25SZW5kZXJlcj86XG4gIHwgKChvcHRpb25zOiB7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBtb2RlOiBzdHJpbmc7XG4gICAgcm93SW5kZXg6IG51bWJlcjtcbiAgICByb3dLZXk6IHN0cmluZztcbiAgfSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50KVxuICB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXI/OlxuICB8ICgob3B0aW9uczoge1xuICAgIG1vZGU6IHN0cmluZztcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICAgIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG4gIH0pID0+IFJlYWN0LlJlYWN0RWxlbWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIGhlYWRlckNvbHVtblN0eWxlPzpcbiAgfCAoKHN0YXR1czogc3RyaW5nKSA9PiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkKVxuICB8IENTU1Byb3BlcnRpZXNcbiAgfCB1bmRlZmluZWQ7XG4gIHNlbGVjdENvbHVtblN0eWxlPzpcbiAgfCAoKHByb3BzOiB7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICByb3dJbmRleDogbnVtYmVyO1xuICAgIHJvd0tleTogc3RyaW5nO1xuICB9KSA9PiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkKVxuICB8IENTU1Byb3BlcnRpZXNcbiAgfCB1bmRlZmluZWQ7XG4gIHNlbGVjdENvbHVtblBvc2l0aW9uPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwVGFibGVSZWY8VCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xuICB0YWJsZToge1xuICAgIHByb3BzOiB7XG4gICAgICBkYXRhOiBUW107XG4gICAgfTtcbiAgfTtcbiAgc2VsZWN0aW9uQ29udGV4dD86XG4gIHwge1xuICAgIHNlbGVjdGVkPzogYW55W10gfCB1bmRlZmluZWQ7XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIHJvd0V4cGFuZENvbnRleHQ/OlxuICB8IHtcbiAgICBzdGF0ZToge1xuICAgICAgZXhwYW5kZWQ/OiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBwYWdpbmF0aW9uQ29udGV4dD86XG4gIHwge1xuICAgIGN1cnJQYWdlOiBudW1iZXI7XG4gICAgY3VyclNpemVQZXJQYWdlOiBudW1iZXI7XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIHNvcnRDb250ZXh0PzpcbiAgfCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIHNvcnRDb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQ+O1xuICAgICAgc29ydE9yZGVyOiBTb3J0T3JkZXI7XG4gICAgfTtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyQ29udGV4dD86XG4gIHwge1xuICAgIGN1cnJGaWx0ZXJzOiBhbnk7XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIGNlbGxFZGl0Q29udGV4dD86XG4gIHwge1xuICAgIHN0YXJ0RWRpdGluZzogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwVGFibGVQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBLID0gbnVtYmVyPiB7XG4gIC8qKlxuICAgKiBUZWxscyByZWFjdC1ib290c3RyYXAtdGFibGUtbmcgd2hpY2ggY29sdW1uIGlzIHVuaXF1ZS5cbiAgICovXG4gIGtleUZpZWxkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiAgUHJvdmlkZXMgZGF0YSBmb3IgeW91ciB0YWJsZS4gSXQgYWNjZXB0cyBhIHNpbmdsZSBBcnJheSBvYmplY3QuXG4gICAqL1xuICBkYXRhOiBhbnlbXTtcbiAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHJlbW90ZT86XG4gIHwgYm9vbGVhblxuICB8IFBhcnRpYWw8e1xuICAgIHBhZ2luYXRpb246IGJvb2xlYW47XG4gICAgZmlsdGVyOiBib29sZWFuO1xuICAgIHNvcnQ6IGJvb2xlYW47XG4gICAgY2VsbEVkaXQ6IGJvb2xlYW47XG4gICAgc2VhcmNoOiBib29sZWFuO1xuICB9PlxuICB8IHVuZGVmaW5lZDtcbiAgbm9EYXRhSW5kaWNhdGlvbj86XG4gIHwgKCgpID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IHN0cmluZylcbiAgfCBSZWFjdC5SZWFjdEVsZW1lbnRcbiAgfCBzdHJpbmdcbiAgfCB1bmRlZmluZWQ7XG4gIHN0cmlwZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBib3JkZXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGhvdmVyPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgdGFiSW5kZXhDZWxsPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhlYWRlckNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGJvZHlDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB3cmFwcGVyQ2xhc3Nlcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyV3JhcHBlckNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbmRlbnNlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBTYW1lIGFzIEhUTUwgY2FwdGlvbiB0YWcsIHlvdSBjYW4gc2V0IGl0IGFzIFN0cmluZyBvciBhIFJlYWN0IEpTWC5cbiAgICovXG4gIGNhcHRpb24/OiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBhZ2luYXRpb24/OiB7IG9wdGlvbnM/OiBQYWdpbmF0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkO1xuICBmaWx0ZXI/OiB1bmtub3duIHwgdW5kZWZpbmVkO1xuICBjZWxsRWRpdD86IGFueTtcbiAgc2VsZWN0Um93PzogU2VsZWN0Um93UHJvcHM8VD4gfCB1bmRlZmluZWQ7XG4gIGV4cGFuZFJvdz86IEV4cGFuZFJvd1Byb3BzPFQsIEs+IHwgdW5kZWZpbmVkO1xuICBwYXJlbnRDbGFzc05hbWU/OlxuICB8IHN0cmluZ1xuICB8ICgoaXNFeHBhbmQ6IGJvb2xlYW4sIHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbiAgcm93U3R5bGU/OlxuICB8ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBDU1NQcm9wZXJ0aWVzKVxuICB8IENTU1Byb3BlcnRpZXNcbiAgfCB1bmRlZmluZWQ7XG4gIHJvd0V2ZW50cz86IFJvd0V2ZW50SGFuZGxlclByb3BzIHwgdW5kZWZpbmVkO1xuICByb3dDbGFzc2VzPzogKChyb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZykgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbHRlcnNDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJQb3NpdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyQ2xhc3Nlcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdFNvcnRlZD86IFt7IGRhdGFGaWVsZDogYW55OyBvcmRlcjogU29ydE9yZGVyIH1dIHwgdW5kZWZpbmVkO1xuICBzb3J0PzpcbiAgfCB7XG4gICAgZGF0YUZpZWxkPzogYW55O1xuICAgIG9yZGVyOiBTb3J0T3JkZXI7XG4gICAgc29ydEZ1bmM/OiBhbnk7XG4gICAgc29ydENhcmV0PzogYW55O1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0U29ydERpcmVjdGlvbj86IFNvcnRPcmRlciB8IHVuZGVmaW5lZDtcbiAgb3ZlcmxheT86IGFueTtcbiAgb25UYWJsZUNoYW5nZT86IFRhYmxlQ2hhbmdlSGFuZGxlcjxUPiB8IHVuZGVmaW5lZDtcbiAgb25Tb3J0PzogYW55O1xuICBvbkZpbHRlcj86IGFueTtcbiAgb25FeHRlcm5hbEZpbHRlcj86IGFueTtcbiAgLyoqXG4gICAqIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb25seSB3aGVuIGRhdGEgc2l6ZSBjaGFuZ2UgYnkgc2VhcmNoL2ZpbHRlciBldGMuXG4gICAqL1xuICBvbkRhdGFTaXplQ2hhbmdlPzogKChwcm9wczogeyBkYXRhU2l6ZTogbnVtYmVyIH0pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBzZWFyY2g/OiBTZWFyY2hQcm9wczxUPiB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8vIFRPRE8gQWRkZWQgT25cbiAgbG9hZGluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHNvcnRGaWVsZD86IHN0cmluZztcbiAgc29ydE9yZGVyPzogc3RyaW5nO1xuICBjdXJyRmlsdGVycz86IG9iamVjdDtcbn1cblxuLy8gZGVjbGFyZSBjbGFzcyBCb290c3RyYXBUYWJsZTxcbi8vICAgVCBleHRlbmRzIG9iamVjdCA9IGFueSxcbi8vICAgSyA9IG51bWJlclxuLy8gPiBleHRlbmRzIENvbXBvbmVudDxCb290c3RyYXBUYWJsZVByb3BzPFQsIEs+PiB7fVxuLy8gZXhwb3J0IGRlZmF1bHQgQm9vdHN0cmFwVGFibGU7XG5cbi8qKlxuICogU2VhcmNoIHByb3BzXG4gKlxuICogQ29uc3VsdCBbZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9yZWFjdC1ib290c3RyYXAtdGFibGUuZ2l0aHViLmlvL3JlYWN0LWJvb3RzdHJhcC10YWJsZTIvZG9jcy9zZWFyY2gtcHJvcHMuaHRtbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hQcm9wczxUPiB7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzZWFyY2hUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0U2VhcmNoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKiBjdXN0b20gc2VhcmNoIG1ldGhvZCwgcmV0dXJuIHRydWUgaWYgbWF0Y2hlZCBhbmQgZmFsc2UgaWYgbm90ICovXG4gIG9uQ29sdW1uTWF0Y2g/OlxuICB8ICgoc2VhcmNoUHJvcHM6IHtcbiAgICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gICAgdmFsdWU6IGFueTtcbiAgICBjb2x1bW46IGFueTtcbiAgICByb3c6IFQ7XG4gIH0pID0+IGJvb2xlYW4pXG4gIHwgdW5kZWZpbmVkO1xuICBvbkNsZWFyPzogKCkgPT4gdm9pZDtcbiAgb25TZWFyY2g/OiAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB2b2lkO1xufVxuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRDb2x1bW5SZW5kZXJlclByb3BzIHtcbiAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gIHJvd0tleTogc3RyaW5nO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlciB7XG4gIGlzQW55RXhwYW5kczogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5kUm93UHJvcHM8VCwgSyA9IG51bWJlcj4ge1xuICByZW5kZXJlcjogKChyb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IFJlYWN0LlJlYWN0RWxlbWVudCkgfCB1bmRlZmluZWQ7XG4gIGV4cGFuZGVkPzogS1tdIHwgdW5kZWZpbmVkO1xuICBvbkV4cGFuZD86XG4gIHwgKChyb3c6IFQsIGlzRXhwYW5kOiBib29sZWFuLCByb3dJbmRleDogbnVtYmVyLCBlOiBTeW50aGV0aWNFdmVudCkgPT4gdm9pZClcbiAgfCB1bmRlZmluZWQ7XG4gIG9uRXhwYW5kQWxsPzpcbiAgfCAoKGlzRXhwYW5kQWxsOiBib29sZWFuLCByZXN1bHRzOiBUW10sIGU6IFN5bnRoZXRpY0V2ZW50KSA9PiB2b2lkKVxuICB8IHVuZGVmaW5lZDtcbiAgbm9uRXhwYW5kYWJsZT86IEtbXSB8IHVuZGVmaW5lZDtcbiAgc2hvd0V4cGFuZENvbHVtbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG9ubHlPbmVFeHBhbmRpbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBleHBhbmRCeUNvbHVtbk9ubHk/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBleHBhbmRDb2x1bW5SZW5kZXJlcj86XG4gIHwgKChwcm9wczogRXhwYW5kQ29sdW1uUmVuZGVyZXJQcm9wcykgPT4gUmVhY3QuUmVhY3RFbGVtZW50KVxuICB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXI/OlxuICB8ICgocHJvcHM6IEV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQpXG4gIHwgdW5kZWZpbmVkO1xuICBleHBhbmRDb2x1bW5Qb3NpdGlvbj86IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgdW5kZWZpbmVkO1xuICBjbGFzc05hbWU/OlxuICB8IHN0cmluZ1xuICB8ICgoaXNFeHBhbmQ6IGJvb2xlYW4sIHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCB0eXBlIFRhYmxlQ29sdW1uRmlsdGVyUHJvcHM8RlYgPSBhbnksIFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+ID0gUGFydGlhbDx7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiAgY3VzdG9tIHRoZSBpbnB1dCBwbGFjZWhvbGRlclxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgLyoqXG4gICAqICBjdXN0b20gY2xhc3NuYW1lIG9uIGlucHV0XG4gICAqL1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqICBkZWZhdWx0IGZpbHRlcmluZyB2YWx1ZVxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBhbnk7XG4gIC8qKlxuICAgKiAgeW91ciBjdXN0b20gc3R5bGVzIG9uIGlucHV0XG4gICAqL1xuICBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgLyoqXG4gICAqICBob3cgbG9uZyB3aWxsIHRyaWdnZXIgZmlsdGVyaW5nIGFmdGVyIHVzZXIgdHlwaW5nLCBkZWZhdWx0IGlzIDUwMCBtc1xuICAgKi9cbiAgZGVsYXk6IG51bWJlcjtcbiAgLypcbiAgICogZXhwb3J0IGZpbHRlciBmdW5jdGlvbiB0byBhbGxvdyB1c2VycyB0byBhY2Nlc3MgZmlsdGVyIG1ldGhvZCBleHRlcm5hbGx5LlxuICAgKi9cbiAgZ2V0RmlsdGVyOiAoZmlsdGVyOiAodmFsdWU6IEZWKSA9PiB2b2lkIHwgVFtdKSA9PiB2b2lkO1xuICAvKipcbiAgICogUmVnaXN0ZXIgYSBsaXN0ZW5lciB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIGNvbHVtbiBmaWx0ZXIgYmVpbmcgdHJpZ2dlcmVkLiBJZiB5b3UgcmV0dXJuIGFuIGFycmF5IHZhbHVlLCByZWFjdC1ib290c3RyYXAtdGFibGUtbmcgd2lsbCBhZG9wdCB0aGlzIHZhbHVlIGFzIHRoZSBmaW5hbCBmaWx0ZXJlZCByZXN1bHQuXG4gICAqL1xuICBvbkZpbHRlcjogKGZpbHRlclZhbHVlOiBGVikgPT4gdm9pZCB8IFRbXTtcbn0+O1xuIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQ29sdW1uRGVzY3JpcHRpb24gfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQ2VsbEV2ZW50RGVsZWdhdGVyIGFzIGV2ZW50RGVsZWdhdGVyIH0gZnJvbSBcIi4vY2VsbC1ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBfIGZyb20gXCIuL3V0aWxzXCI7XG5cbmludGVyZmFjZSBGb290ZXJDZWxsUHJvcHMge1xuICBjb2x1bW5EYXRhPzogYW55W107XG4gIGluZGV4PzogbnVtYmVyO1xuICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uO1xufVxuXG5jbGFzcyBGb290ZXJDZWxsIGV4dGVuZHMgZXZlbnREZWxlZ2F0ZXIoQ29tcG9uZW50KTxGb290ZXJDZWxsUHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgaW5kZXgsIGNvbHVtbiwgY29sdW1uRGF0YSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHtcbiAgICAgIGZvb3RlcixcbiAgICAgIGZvb3RlclRpdGxlLFxuICAgICAgZm9vdGVyQWxpZ24sXG4gICAgICBmb290ZXJGb3JtYXR0ZXIsXG4gICAgICBmb290ZXJFdmVudHMsXG4gICAgICBmb290ZXJDbGFzc2VzLFxuICAgICAgZm9vdGVyU3R5bGUsXG4gICAgICBmb290ZXJBdHRycyxcbiAgICB9ID0gY29sdW1uO1xuXG4gICAgY29uc3QgZGVsZWdhdGVFdmVudHMgPSB0aGlzLmRlbGVnYXRlKGZvb3RlckV2ZW50cyk7XG4gICAgY29uc3QgY2VsbEF0dHJzID0ge1xuICAgICAgLi4uKF8uaXNGdW5jdGlvbihmb290ZXJBdHRycylcbiAgICAgICAgPyBmb290ZXJBdHRycyhjb2x1bW4sIGluZGV4ISlcbiAgICAgICAgOiBmb290ZXJBdHRycyksXG4gICAgICAuLi5kZWxlZ2F0ZUV2ZW50cyxcbiAgICB9O1xuXG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIGlmIChfLmlzU3RyaW5nKGZvb3RlcikpIHtcbiAgICAgIHRleHQgPSBmb290ZXI7XG4gICAgfSBlbHNlIGlmIChfLmlzRnVuY3Rpb24oZm9vdGVyKSkge1xuICAgICAgdGV4dCA9IGZvb3Rlcihjb2x1bW5EYXRhIHx8IFtdLCBjb2x1bW4sIGluZGV4IHx8IDApO1xuICAgIH1cblxuICAgIGxldCBjZWxsU3R5bGU6IGFueSA9IHt9O1xuICAgIGNvbnN0IGNlbGxDbGFzc2VzID0gXy5pc0Z1bmN0aW9uKGZvb3RlckNsYXNzZXMpXG4gICAgICA/IGZvb3RlckNsYXNzZXMoY29sdW1uLCBpbmRleCB8fCAwKVxuICAgICAgOiBmb290ZXJDbGFzc2VzO1xuXG4gICAgaWYgKGZvb3RlclN0eWxlKSB7XG4gICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oZm9vdGVyU3R5bGUpXG4gICAgICAgID8gZm9vdGVyU3R5bGUoY29sdW1uLCBpbmRleCB8fCAwKVxuICAgICAgICA6IGZvb3RlclN0eWxlO1xuICAgICAgY2VsbFN0eWxlID0gY2VsbFN0eWxlID8geyAuLi5jZWxsU3R5bGUgfSA6IGNlbGxTdHlsZTtcbiAgICB9XG5cbiAgICBpZiAoZm9vdGVyVGl0bGUpIHtcbiAgICAgIGNlbGxBdHRycy50aXRsZSA9IF8uaXNGdW5jdGlvbihmb290ZXJUaXRsZSlcbiAgICAgICAgPyBmb290ZXJUaXRsZShjb2x1bW4sIGluZGV4IHx8IDApXG4gICAgICAgIDogdGV4dDtcbiAgICB9XG5cbiAgICBpZiAoZm9vdGVyQWxpZ24pIHtcbiAgICAgIGNlbGxTdHlsZS50ZXh0QWxpZ24gPSBfLmlzRnVuY3Rpb24oZm9vdGVyQWxpZ24pXG4gICAgICAgID8gZm9vdGVyQWxpZ24oY29sdW1uLCBpbmRleCB8fCAwKVxuICAgICAgICA6IGZvb3RlckFsaWduO1xuICAgIH1cblxuICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsIGNlbGxDbGFzc2VzKTtcbiAgICBpZiAoIV8uaXNFbXB0eU9iamVjdChjZWxsU3R5bGUpKSBjZWxsQXR0cnMuc3R5bGUgPSBjZWxsU3R5bGU7XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IGZvb3RlckZvcm1hdHRlclxuICAgICAgPyBmb290ZXJGb3JtYXR0ZXIoY29sdW1uLCBpbmRleCB8fCAwLCB7IHRleHQgfSlcbiAgICAgIDogdGV4dDtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGhcIiwgY2VsbEF0dHJzLCBjaGlsZHJlbiBhcyBSZWFjdE5vZGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvb3RlckNlbGw7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuXG5pbXBvcnQge1xuICBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCxcbiAgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUsXG4gIENIRUNLQk9YX1NUQVRVU19VTkNIRUNLRUQsXG4gIFJPV19TRUxFQ1RfU0lOR0xFLFxufSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCBkYXRhT3BlcmF0b3IgZnJvbSBcIi4uL3N0b3JlL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uU3VtbWFyeSB9IGZyb20gXCIuLi9zdG9yZS9zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25Db250ZXh0VmFsdWUge1xuICBzZWxlY3RlZD86IGFueVtdO1xuICBvblJvd1NlbGVjdD86IChcbiAgICByb3dLZXk6IGFueSxcbiAgICBjaGVja2VkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogYW55XG4gICkgPT4gdm9pZDtcbiAgb25BbGxSb3dzU2VsZWN0PzogKGU6IGFueSwgaXNVblNlbGVjdDogYm9vbGVhbikgPT4gdm9pZDtcbiAgYWxsUm93c1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgYWxsUm93c05vdFNlbGVjdGVkPzogYm9vbGVhbjtcbiAgY2hlY2tlZFN0YXR1cz86IHN0cmluZztcbiAgbW9kZT86IHN0cmluZztcbiAgaGlkZVNlbGVjdENvbHVtbj86IGJvb2xlYW47XG4gIGNsaWNrVG9TZWxlY3Q/OiBib29sZWFuO1xuICBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGw/OiBib29sZWFuO1xuICBvblNlbGVjdD86IChcbiAgICByb3c6IGFueSxcbiAgICBjaGVja2VkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogYW55XG4gICkgPT4gYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgb25TZWxlY3RBbGw/OiAoY2hlY2tlZDogYm9vbGVhbiwgc2VsZWN0ZWRSb3dzOiBhbnlbXSwgZTogYW55KSA9PiB2b2lkIHwgYW55W107XG4gIG5vblNlbGVjdGFibGU/OiBhbnlbXTtcbiAgaGlkZVNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyPzogKGFyZ3M6IHtcbiAgICBtb2RlPzogc3RyaW5nO1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgaW5kZXRlcm1pbmF0ZTogYm9vbGVhbjtcbiAgfSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBoZWFkZXJDb2x1bW5TdHlsZT86XG4gIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICB8ICgoY2hlY2tlZFN0YXR1czogc3RyaW5nKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbn1cblxuaW50ZXJmYWNlIFNlbGVjdGlvblByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBkYXRhOiBhbnlbXTtcbiAga2V5RmllbGQ6IHN0cmluZztcbiAgc2VsZWN0Um93OiB7XG4gICAgc2VsZWN0ZWQ/OiBhbnlbXTtcbiAgICBtb2RlPzogc3RyaW5nO1xuICAgIGhpZGVTZWxlY3RDb2x1bW4/OiBib29sZWFuO1xuICAgIGNsaWNrVG9TZWxlY3Q/OiBib29sZWFuO1xuICAgIGNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbD86IGJvb2xlYW47XG4gICAgb25TZWxlY3Q/OiAoXG4gICAgICByb3c6IGFueSxcbiAgICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgICByb3dJbmRleDogbnVtYmVyLFxuICAgICAgZTogYW55XG4gICAgKSA9PiBib29sZWFuO1xuICAgIG9uU2VsZWN0QWxsPzogKFxuICAgICAgY2hlY2tlZDogYm9vbGVhbixcbiAgICAgIHNlbGVjdGVkUm93czogYW55W10sXG4gICAgICBlOiBhbnlcbiAgICApID0+IHZvaWQgfCBhbnlbXTtcbiAgICBub25TZWxlY3RhYmxlPzogYW55W107XG4gICAgaGlkZVNlbGVjdEFsbD86IGJvb2xlYW47XG4gICAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXI/OiAoYXJnczoge1xuICAgICAgbW9kZT86IHN0cmluZztcbiAgICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgICBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICAgIH0pID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICBoZWFkZXJDb2x1bW5TdHlsZT86XG4gICAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgfCAoKGNoZWNrZWRTdGF0dXM6IHN0cmluZykgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRTZWxlY3Rpb25Db250ZXh0ID0ge307XG5jb25zdCBTZWxlY3Rpb25Db250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxTZWxlY3Rpb25Db250ZXh0VmFsdWU+KFxuICBkZWZhdWx0U2VsZWN0aW9uQ29udGV4dFxuKTtcblxuY2xhc3MgU2VsZWN0aW9uUHJvdmlkZXIgZXh0ZW5kcyBDb21wb25lbnQ8U2VsZWN0aW9uUHJvdmlkZXJQcm9wcz4ge1xuICBzZWxlY3RlZDogYW55W107XG4gIGlzSGFuZGxlUm93U2VsZWN0OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTZWxlY3Rpb25Qcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBwcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQgfHwgW107XG4gICAgdGhpcy5pc0hhbmRsZVJvd1NlbGVjdCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gZXhwb3NlZCBBUElcbiAgZ2V0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUobmV4dFByb3BzOiBTZWxlY3Rpb25Qcm92aWRlclByb3BzKSB7XG4gICAgaWYgKHRoaXMuaXNIYW5kbGVSb3dTZWxlY3QpIHtcbiAgICAgIHRoaXMuaXNIYW5kbGVSb3dTZWxlY3QgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbmV4dFByb3BzLnNlbGVjdFJvdyAmJlxuICAgICAgbmV4dFByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCAmJlxuICAgICAgIV8uaXNFcXVhbChuZXh0UHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkLCB0aGlzLnNlbGVjdGVkKVxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQ7XG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93U2VsZWN0ID0gKFxuICAgIHJvd0tleTogYW55LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YSxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgc2VsZWN0Um93OiB7IG1vZGUsIG9uU2VsZWN0IH0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBsZXQgY3VyclNlbGVjdGVkID0gWy4uLnRoaXMuc2VsZWN0ZWRdO1xuXG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgaWYgKG9uU2VsZWN0KSB7XG4gICAgICBjb25zdCByb3cgPSBkYXRhT3BlcmF0b3IuZ2V0Um93QnlSb3dJZChkYXRhLCBrZXlGaWVsZCwgcm93S2V5KTtcbiAgICAgIHJlc3VsdCA9IG9uU2VsZWN0KHJvdywgY2hlY2tlZCwgcm93SW5kZXgsIGUpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQgPT09IHRydWUgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChtb2RlID09PSBST1dfU0VMRUNUX1NJTkdMRSkge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSBbcm93S2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoY2hlY2tlZCkge1xuICAgICAgICBjdXJyU2VsZWN0ZWQucHVzaChyb3dLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VyclNlbGVjdGVkID0gY3VyclNlbGVjdGVkLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSByb3dLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkID0gY3VyclNlbGVjdGVkO1xuICAgIHRoaXMuaXNIYW5kbGVSb3dTZWxlY3QgPSB0cnVlO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfTtcblxuICBoYW5kbGVBbGxSb3dzU2VsZWN0ID0gKGU6IGFueSwgaXNVblNlbGVjdDogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHNlbGVjdFJvdzogeyBvblNlbGVjdEFsbCwgbm9uU2VsZWN0YWJsZSB9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2VsZWN0ZWQgfSA9IHRoaXM7XG5cbiAgICBsZXQgY3VyclNlbGVjdGVkOiBhbnk7XG5cbiAgICBpZiAoIWlzVW5TZWxlY3QpIHtcbiAgICAgIGN1cnJTZWxlY3RlZCA9IHNlbGVjdGVkLmNvbmNhdChcbiAgICAgICAgZGF0YU9wZXJhdG9yLnNlbGVjdGFibGVLZXlzKGRhdGEsIGtleUZpZWxkLCBub25TZWxlY3RhYmxlKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VyclNlbGVjdGVkID0gc2VsZWN0ZWQuZmlsdGVyKFxuICAgICAgICAocykgPT4gdHlwZW9mIGRhdGEuZmluZCgoZCkgPT4gXy5nZXQoZCwga2V5RmllbGQpID09PSBzKSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgaWYgKG9uU2VsZWN0QWxsKSB7XG4gICAgICByZXN1bHQgPSBvblNlbGVjdEFsbChcbiAgICAgICAgIWlzVW5TZWxlY3QsXG4gICAgICAgIGRhdGFPcGVyYXRvci5nZXRTZWxlY3RlZFJvd3MoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICBpc1VuU2VsZWN0ID8gc2VsZWN0ZWQgOiBjdXJyU2VsZWN0ZWRcbiAgICAgICAgKSxcbiAgICAgICAgZVxuICAgICAgKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgY3VyclNlbGVjdGVkID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkID0gY3VyclNlbGVjdGVkO1xuICAgIHRoaXMuaXNIYW5kbGVSb3dTZWxlY3QgPSB0cnVlO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBhbGxSb3dzU2VsZWN0ZWQsIGFsbFJvd3NOb3RTZWxlY3RlZCB9ID0gZ2V0U2VsZWN0aW9uU3VtbWFyeShcbiAgICAgIHRoaXMucHJvcHMuZGF0YSxcbiAgICAgIHRoaXMucHJvcHMua2V5RmllbGQsXG4gICAgICB0aGlzLnNlbGVjdGVkXG4gICAgKTtcblxuICAgIGxldCBjaGVja2VkU3RhdHVzOiBzdHJpbmc7XG5cbiAgICBpZiAoYWxsUm93c1NlbGVjdGVkKSB7XG4gICAgICBjaGVja2VkU3RhdHVzID0gQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQ7XG4gICAgfSBlbHNlIGlmIChhbGxSb3dzTm90U2VsZWN0ZWQpIHtcbiAgICAgIGNoZWNrZWRTdGF0dXMgPSBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VEO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja2VkU3RhdHVzID0gQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEU7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTZWxlY3Rpb25Db250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgLi4udGhpcy5wcm9wcy5zZWxlY3RSb3csXG4gICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgICAgb25Sb3dTZWxlY3Q6IHRoaXMuaGFuZGxlUm93U2VsZWN0LFxuICAgICAgICAgIG9uQWxsUm93c1NlbGVjdDogdGhpcy5oYW5kbGVBbGxSb3dzU2VsZWN0LFxuICAgICAgICAgIGFsbFJvd3NTZWxlY3RlZCxcbiAgICAgICAgICBhbGxSb3dzTm90U2VsZWN0ZWQsXG4gICAgICAgICAgY2hlY2tlZFN0YXR1cyxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1NlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlU2VsZWN0aW9uQ29udGV4dCA9ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBTZWxlY3Rpb25Qcm92aWRlcixcbiAgQ29uc3VtZXI6IFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIE1vdXNlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQ2VsbEV2ZW50RGVsZWdhdGVyIGFzIGV2ZW50RGVsZWdhdGVyIH0gZnJvbSBcIi4vY2VsbC1ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBfIGZyb20gXCIuL3V0aWxzXCI7XG5cbmludGVyZmFjZSBDZWxsUHJvcHMge1xuICByb3c6IGFueTtcbiAgcm93aW5kZXg6IG51bWJlcjtcbiAgY29sdW1uOiBhbnk7XG4gIGNvbHVtbmluZGV4OiBudW1iZXI7XG4gIGF0c3RhcnQ/OiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgZWRpdGFibGU/OiBzdHJpbmc7XG4gIGNsaWNrdG9lZGl0Pzogc3RyaW5nO1xuICBkYmNsaWNrdG9lZGl0Pzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xufVxuXG5jbGFzcyBDZWxsIGV4dGVuZHMgZXZlbnREZWxlZ2F0ZXIoQ29tcG9uZW50KTxDZWxsUHJvcHM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IENlbGxQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsID0gdGhpcy5jcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogQ2VsbFByb3BzKSB7XG4gICAgbGV0IHNob3VsZFVwZGF0ZSA9IGZhbHNlO1xuICAgIGlmIChuZXh0UHJvcHMuY29sdW1uLmlzRHVtbXlGaWVsZCkge1xuICAgICAgc2hvdWxkVXBkYXRlID0gIV8uaXNFcXVhbCh0aGlzLnByb3BzLnJvdywgbmV4dFByb3BzLnJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3VsZFVwZGF0ZSA9XG4gICAgICAgIF8uZ2V0KHRoaXMucHJvcHMucm93LCB0aGlzLnByb3BzLmNvbHVtbi5kYXRhRmllbGQpICE9PVxuICAgICAgICBfLmdldChuZXh0UHJvcHMucm93LCBuZXh0UHJvcHMuY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBpZiAobmV4dFByb3BzLmZvcm1hdHRlcilcblxuICAgIHNob3VsZFVwZGF0ZSA9XG4gICAgICAobmV4dFByb3BzLmNvbHVtbi5mb3JtYXR0ZXJcbiAgICAgICAgPyAhXy5pc0VxdWFsKHRoaXMucHJvcHMucm93LCBuZXh0UHJvcHMucm93KVxuICAgICAgICA6IGZhbHNlKSB8fFxuICAgICAgdGhpcy5wcm9wcy5jb2x1bW4uaGlkZGVuICE9PSBuZXh0UHJvcHMuY29sdW1uLmhpZGRlbiB8fFxuICAgICAgdGhpcy5wcm9wcy5jb2x1bW4uaXNEdW1teUZpZWxkICE9PSBuZXh0UHJvcHMuY29sdW1uLmlzRHVtbXlGaWVsZCB8fFxuICAgICAgdGhpcy5wcm9wcy5yb3dpbmRleCAhPT0gbmV4dFByb3BzLnJvd2luZGV4IHx8XG4gICAgICB0aGlzLnByb3BzLmNvbHVtbmluZGV4ICE9PSBuZXh0UHJvcHMuY29sdW1uaW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuY2xhc3NOYW1lICE9PSBuZXh0UHJvcHMuY2xhc3NOYW1lIHx8XG4gICAgICB0aGlzLnByb3BzLnRpdGxlICE9PSBuZXh0UHJvcHMudGl0bGUgfHxcbiAgICAgIHRoaXMucHJvcHMuZWRpdGFibGUgIT09IG5leHRQcm9wcy5lZGl0YWJsZSB8fFxuICAgICAgdGhpcy5wcm9wcy5jbGlja3RvZWRpdCAhPT0gbmV4dFByb3BzLmNsaWNrdG9lZGl0IHx8XG4gICAgICB0aGlzLnByb3BzLmRiY2xpY2t0b2VkaXQgIT09IG5leHRQcm9wcy5kYmNsaWNrdG9lZGl0IHx8XG4gICAgICAhXy5pc0VxdWFsKHRoaXMucHJvcHMuc3R5bGUsIG5leHRQcm9wcy5zdHlsZSkgfHxcbiAgICAgICFfLmlzRXF1YWwoXG4gICAgICAgIHRoaXMucHJvcHMuY29sdW1uLmZvcm1hdEV4dHJhRGF0YSxcbiAgICAgICAgbmV4dFByb3BzLmNvbHVtbi5mb3JtYXRFeHRyYURhdGFcbiAgICAgICkgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW4uZXZlbnRzLCBuZXh0UHJvcHMuY29sdW1uLmV2ZW50cykgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW4uYXR0cnMsIG5leHRQcm9wcy5jb2x1bW4uYXR0cnMpIHx8XG4gICAgICB0aGlzLnByb3BzLnRhYkluZGV4ICE9PSBuZXh0UHJvcHMudGFiSW5kZXg7XG5cbiAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICB9XG5cbiAgY3JlYXRlSGFuZGxlRWRpdGluZ0NlbGwob3JpZ2luRnVuYzogKGU6IE1vdXNlRXZlbnQpID0+IHZvaWQpIHtcbiAgICByZXR1cm4gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYXRzdGFydCwgcm93aW5kZXgsIGNvbHVtbmluZGV4LCBjbGlja3RvZWRpdCwgZGJjbGlja3RvZWRpdCB9ID1cbiAgICAgICAgdGhpcy5wcm9wcztcbiAgICAgIGlmICgoY2xpY2t0b2VkaXQgfHwgZGJjbGlja3RvZWRpdCkgJiYgXy5pc0Z1bmN0aW9uKG9yaWdpbkZ1bmMpKSB7XG4gICAgICAgIG9yaWdpbkZ1bmMoZSk7XG4gICAgICB9XG4gICAgICBpZiAoYXRzdGFydCkge1xuICAgICAgICBhdHN0YXJ0KHJvd2luZGV4LCBjb2x1bW5pbmRleCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3csXG4gICAgICBjb2x1bW4sXG4gICAgICBhdHN0YXJ0LFxuICAgICAgcm93aW5kZXgsXG4gICAgICBjb2x1bW5pbmRleCxcbiAgICAgIGVkaXRhYmxlLFxuICAgICAgY2xpY2t0b2VkaXQsXG4gICAgICBkYmNsaWNrdG9lZGl0LFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZGF0YUZpZWxkLCBmb3JtYXR0ZXIsIGZvcm1hdEV4dHJhRGF0YSB9ID0gY29sdW1uO1xuICAgIGNvbnN0IGF0dHJzID0gdGhpcy5kZWxlZ2F0ZSh7IC4uLnJlc3QgfSk7XG4gICAgbGV0IGNvbnRlbnQgPSBjb2x1bW4uaXNEdW1teUZpZWxkID8gbnVsbCA6IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcblxuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGNvbnRlbnQgPSBjb2x1bW4uZm9ybWF0dGVyKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICByb3csXG4gICAgICAgIHJvd2luZGV4LFxuICAgICAgICBmb3JtYXRFeHRyYURhdGFcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNsaWNrdG9lZGl0ID09PSBcInRydWVcIiAmJiBlZGl0YWJsZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIGF0dHJzLm9uQ2xpY2sgPSB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsKGF0dHJzLm9uQ2xpY2spO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBkYmNsaWNrdG9lZGl0ID09PSBcInRydWVcIiAmJlxuICAgICAgZWRpdGFibGUgPT09IFwidHJ1ZVwiXG4gICAgKSB7XG4gICAgICBhdHRycy5vbkRvdWJsZUNsaWNrID0gdGhpcy5jcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbChhdHRycy5vbkRvdWJsZUNsaWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRkIHsuLi5hdHRyc30+XG4gICAgICAgIHt0eXBlb2YgY29udGVudCA9PT0gXCJib29sZWFuXCIgPyBgJHtjb250ZW50fWAgOiBjb250ZW50fVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENlbGw7XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IGdldFJvd0J5Um93SWQgfSBmcm9tIFwiLi9yb3dzXCI7XG5cbmV4cG9ydCBjb25zdCBlZGl0Q2VsbCA9IChkYXRhOiBhbnksIGtleUZpZWxkOiBhbnksIHJvd0lkOiBhbnksIGRhdGFGaWVsZDogYW55LCBuZXdWYWx1ZTogYW55KSA9PiB7XG4gIGNvbnN0IHJvdyA9IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIHJvd0lkKTtcbiAgaWYgKHJvdykgXy5zZXQocm93LCBkYXRhRmllbGQsIG5ld1ZhbHVlKTtcbn07XG4iLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tIFwiY3NzdHlwZVwiO1xuaW1wb3J0IHsgRklMVEVSU19QT1NJVElPTl9JTkxJTkUsIFNPUlRfREVTQyB9IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgeyBDZWxsRXZlbnREZWxlZ2F0ZXIgYXMgZXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9jZWxsLWV2ZW50LWRlbGVnYXRlclwiO1xuaW1wb3J0IFNvcnRDYXJldCBmcm9tIFwiLi9zb3J0L2NhcmV0XCI7XG5pbXBvcnQgU29ydFN5bWJvbCBmcm9tIFwiLi9zb3J0L3N5bWJvbFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEhlYWRlckNlbGxQcm9wcyB7XG4gIGNvbHVtbjoge1xuICAgIGRhdGFGaWVsZDogc3RyaW5nO1xuICAgIHRleHQ6IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIGlzRHVtbXlGaWVsZD86IGJvb2xlYW47XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICBoZWFkZXJGb3JtYXR0ZXI/OiAoXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICBleHRyYURhdGE6IGFueVxuICAgICkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIGZvcm1hdHRlcj86IChcbiAgICAgIGNlbGw6IGFueSxcbiAgICAgIHJvdzogYW55LFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIGZvcm1hdEV4dHJhRGF0YTogYW55XG4gICAgKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgZm9ybWF0RXh0cmFEYXRhPzogYW55O1xuICAgIGhlYWRlckNsYXNzZXM/OiBzdHJpbmcgfCAoKGNvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpO1xuICAgIGNsYXNzZXM/OiBzdHJpbmcgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gICAgaGVhZGVyU3R5bGU/OlxuICAgIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgIHwgKChjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcikgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgaGVhZGVyU29ydGluZ0NsYXNzZXM/OlxuICAgIHwgc3RyaW5nXG4gICAgfCAoKFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBzb3J0T3JkZXI6IHN0cmluZyxcbiAgICAgIGlzTGFzdFNvcnRpbmc6IGJvb2xlYW4sXG4gICAgICBpbmRleDogbnVtYmVyXG4gICAgKSA9PiBzdHJpbmcpO1xuICAgIGhlYWRlclNvcnRpbmdTdHlsZT86XG4gICAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgfCAoKFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBzb3J0T3JkZXI6IHN0cmluZyxcbiAgICAgIGlzTGFzdFNvcnRpbmc6IGJvb2xlYW4sXG4gICAgICBpbmRleDogbnVtYmVyXG4gICAgKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICBzdHlsZT86XG4gICAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xuICAgIGhlYWRlclRpdGxlPzogYm9vbGVhbiB8ICgoY29sdW1uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4gfCBzdHJpbmcpO1xuICAgIHRpdGxlPzpcbiAgICB8IGJvb2xlYW5cbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbiB8IHN0cmluZyk7XG4gICAgaGVhZGVyRXZlbnRzPzogUmVjb3JkPHN0cmluZywgKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHZvaWQ+O1xuICAgIGV2ZW50cz86IFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyLCBlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkXG4gICAgPjtcbiAgICBoZWFkZXJBbGlnbj86XG4gICAgfCBQcm9wZXJ0eS5UZXh0QWxpZ25cbiAgICB8ICgoY29sdW1uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IFByb3BlcnR5LlRleHRBbGlnbik7XG4gICAgYWxpZ24/OiBzdHJpbmcgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gICAgaGVhZGVyQXR0cnM/OlxuICAgIHwgUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+XG4gICAgfCAoKFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBpbmRleDogbnVtYmVyXG4gICAgKSA9PiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4pO1xuICAgIGF0dHJzPzpcbiAgICB8IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNlbGxFbGVtZW50PlxuICAgIHwgKChcbiAgICAgIGNlbGw6IGFueSxcbiAgICAgIHJvdzogYW55LFxuICAgICAgcm93SW5kZXg6IG51bWJlclxuICAgICkgPT4gUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KTtcbiAgICBzb3J0PzogYm9vbGVhbjtcbiAgICBzb3J0RnVuYz86IChhOiBhbnksIGI6IGFueSwgb3JkZXI6IHN0cmluZywgY29sdW1uOiBhbnkpID0+IG51bWJlcjtcbiAgICBvblNvcnQ/OiAoY29sdW1uOiBhbnksIHNvcnRPcmRlcjogc3RyaW5nKSA9PiB2b2lkO1xuICAgIHNvcnRDYXJldD86IGFueTtcbiAgICBlZGl0b3I/OiBvYmplY3Q7XG4gICAgZWRpdGFibGU/OiBib29sZWFuIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTtcbiAgICBlZGl0Q2VsbFN0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgZWRpdENlbGxDbGFzc2VzPzpcbiAgICB8IHN0cmluZ1xuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpO1xuICAgIGVkaXRvclN0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgZWRpdG9yQ2xhc3Nlcz86XG4gICAgfCBzdHJpbmdcbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKTtcbiAgICBlZGl0b3JSZW5kZXJlcj86IChcbiAgICAgIGVkaXRvclByb3BzOiBhbnksXG4gICAgICB2YWx1ZTogYW55LFxuICAgICAgcm93OiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgICBjb2x1bW5JbmRleDogbnVtYmVyXG4gICAgKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgdmFsaWRhdG9yPzogKG5ld1ZhbHVlOiBhbnksIHJvdzogYW55LCBjb2x1bW46IGFueSkgPT4gYm9vbGVhbiB8IHN0cmluZztcbiAgICBmaWx0ZXI/OiBhbnk7XG4gICAgZmlsdGVyUmVuZGVyZXI/OiAoXG4gICAgICBvbkN1c3RvbUZpbHRlcjogKHZhbHVlOiBhbnkpID0+IHZvaWQsXG4gICAgICBjb2x1bW46IGFueVxuICAgICkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIGZpbHRlclZhbHVlPzogKGNlbGw6IGFueSwgcm93OiBhbnkpID0+IHN0cmluZztcbiAgICBzZWFyY2hhYmxlPzogYm9vbGVhbjtcbiAgfTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgb25Tb3J0PzogKGNvbHVtbjogYW55KSA9PiB2b2lkO1xuICBzb3J0aW5nPzogYm9vbGVhbjtcbiAgc29ydE9yZGVyPzogc3RyaW5nO1xuICBzb3J0Q2FyZXQ/OiBhbnk7XG4gIGlzTGFzdFNvcnRpbmc/OiBib29sZWFuO1xuICBvbkZpbHRlcj86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBmaWx0ZXJQb3NpdGlvbj86IHN0cmluZztcbiAgY3VyckZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbkV4dGVybmFsRmlsdGVyPzogKGNvbHVtbjogYW55LCBmaWx0ZXJUeXBlOiBzdHJpbmcpID0+ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuICBnbG9iYWxTb3J0Q2FyZXQ/OiAob3JkZXI6IHN0cmluZywgY29sdW1uOiBhbnkpID0+IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuY2xhc3MgSGVhZGVyQ2VsbCBleHRlbmRzIGV2ZW50RGVsZWdhdGVyKENvbXBvbmVudCk8SGVhZGVyQ2VsbFByb3BzPiB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb2x1bW4sXG4gICAgICBpbmRleCxcbiAgICAgIG9uU29ydCxcbiAgICAgIHNvcnRpbmcsXG4gICAgICBzb3J0T3JkZXIsXG4gICAgICBpc0xhc3RTb3J0aW5nLFxuICAgICAgb25GaWx0ZXIsXG4gICAgICBjdXJyRmlsdGVycyxcbiAgICAgIGZpbHRlclBvc2l0aW9uLFxuICAgICAgb25FeHRlcm5hbEZpbHRlcixcbiAgICAgIGdsb2JhbFNvcnRDYXJldCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHtcbiAgICAgIHRleHQsXG4gICAgICBzb3J0LFxuICAgICAgc29ydENhcmV0LFxuICAgICAgZmlsdGVyLFxuICAgICAgZmlsdGVyUmVuZGVyZXIsXG4gICAgICBoZWFkZXJUaXRsZSxcbiAgICAgIGhlYWRlckFsaWduLFxuICAgICAgaGVhZGVyRm9ybWF0dGVyLFxuICAgICAgaGVhZGVyRXZlbnRzLFxuICAgICAgaGVhZGVyQ2xhc3NlcyxcbiAgICAgIGhlYWRlclN0eWxlLFxuICAgICAgaGVhZGVyQXR0cnMsXG4gICAgICBoZWFkZXJTb3J0aW5nQ2xhc3NlcyxcbiAgICAgIGhlYWRlclNvcnRpbmdTdHlsZSxcbiAgICB9ID0gY29sdW1uO1xuXG4gICAgY29uc3Qgc29ydENhcmV0ZnVuYyA9IHNvcnRDYXJldCB8fCBnbG9iYWxTb3J0Q2FyZXQ7XG5cbiAgICBjb25zdCBkZWxlZ2F0ZUV2ZW50cyA9IHRoaXMuZGVsZWdhdGUoaGVhZGVyRXZlbnRzKTtcblxuICAgIGNvbnN0IGN1c3RvbUF0dHJzID0gXy5pc0Z1bmN0aW9uKGhlYWRlckF0dHJzKVxuICAgICAgPyBoZWFkZXJBdHRycyhjb2x1bW4sIGluZGV4KVxuICAgICAgOiBoZWFkZXJBdHRycyB8fCB7fTtcblxuICAgIGNvbnN0IGNlbGxBdHRyczogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+ID0ge1xuICAgICAgLi4uY3VzdG9tQXR0cnMsXG4gICAgICAuLi5kZWxlZ2F0ZUV2ZW50cyxcbiAgICAgIHRhYkluZGV4OiBfLmlzRGVmaW5lZChjdXN0b21BdHRycy50YWJJbmRleCkgPyBjdXN0b21BdHRycy50YWJJbmRleCA6IDAsXG4gICAgfTtcblxuICAgIGxldCBzb3J0U3ltYm9sOiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgbGV0IGZpbHRlckVsZW1lbnQ6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICBsZXQgY2VsbFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge307XG4gICAgbGV0IGNlbGxDbGFzc2VzID0gXy5pc0Z1bmN0aW9uKGhlYWRlckNsYXNzZXMpXG4gICAgICA/IGhlYWRlckNsYXNzZXMoY29sdW1uLCBpbmRleClcbiAgICAgIDogaGVhZGVyQ2xhc3NlcztcblxuICAgIGlmIChoZWFkZXJTdHlsZSkge1xuICAgICAgY2VsbFN0eWxlID0gXy5pc0Z1bmN0aW9uKGhlYWRlclN0eWxlKVxuICAgICAgICA/IGhlYWRlclN0eWxlKGNvbHVtbiwgaW5kZXgpXG4gICAgICAgIDogaGVhZGVyU3R5bGU7XG4gICAgICBjZWxsU3R5bGUgPSBjZWxsU3R5bGUgPyB7IC4uLmNlbGxTdHlsZSB9IDogY2VsbFN0eWxlO1xuICAgIH1cblxuICAgIGlmIChoZWFkZXJUaXRsZSkge1xuICAgICAgY2VsbEF0dHJzLnRpdGxlID0gXy5pc0Z1bmN0aW9uKGhlYWRlclRpdGxlKVxuICAgICAgICA/IChoZWFkZXJUaXRsZShjb2x1bW4sIGluZGV4KSBhcyBzdHJpbmcpXG4gICAgICAgIDogdGV4dDtcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyQWxpZ24pIHtcbiAgICAgIGNlbGxTdHlsZS50ZXh0QWxpZ24gPSBfLmlzRnVuY3Rpb24oaGVhZGVyQWxpZ24pXG4gICAgICAgID8gaGVhZGVyQWxpZ24oY29sdW1uLCBpbmRleClcbiAgICAgICAgOiBoZWFkZXJBbGlnbjtcbiAgICB9XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgY29uc3QgY3VzdG9tQ2xpY2sgPSBjZWxsQXR0cnMub25DbGljaztcbiAgICAgIGNvbnN0IGN1c3RvbUtleURvd24gPSBjZWxsQXR0cnMub25LZXlEb3duO1xuICAgICAgY2VsbEF0dHJzW1wiYXJpYS1sYWJlbFwiXSA9IHNvcnRpbmdcbiAgICAgICAgPyBgJHt0ZXh0fSBzb3J0ICR7c29ydE9yZGVyfWBcbiAgICAgICAgOiBgJHt0ZXh0fSBzb3J0YWJsZWA7XG4gICAgICBjZWxsQXR0cnMub25LZXlVcCA9IChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICAgICAgb25Tb3J0Py4oY29sdW1uKTtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgLy8gRXJyb3I6IEFyZ3VtZW50IG9mIHR5cGUgJ0tleWJvYXJkRXZlbnQ8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+JyBpcyBub3QgYXNzaWduYWJsZSB0b1xuICAgICAgICAgIC8vIHBhcmFtZXRlciBvZiB0eXBlICdNb3VzZUV2ZW50PEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LCBNb3VzZUV2ZW50PicuXG4gICAgICAgICAgLy8gaWYgKF8uaXNGdW5jdGlvbihjdXN0b21DbGljaykpIGN1c3RvbUNsaWNrKGUpO1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY3VzdG9tS2V5RG93bikpIGN1c3RvbUtleURvd24oZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjZWxsQXR0cnMub25DbGljayA9IChlKSA9PiB7XG4gICAgICAgIG9uU29ydD8uKGNvbHVtbik7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oY3VzdG9tQ2xpY2spKSBjdXN0b21DbGljayhlKTtcbiAgICAgIH07XG4gICAgICBjZWxsQXR0cnMuY2xhc3NOYW1lID0gY3MoY2VsbEF0dHJzLmNsYXNzTmFtZSwgXCJzb3J0YWJsZVwiKTtcblxuICAgICAgaWYgKHNvcnRpbmcpIHtcbiAgICAgICAgc29ydFN5bWJvbCA9IHNvcnRDYXJldGZ1bmMgPyAoXG4gICAgICAgICAgc29ydENhcmV0ZnVuYyhzb3J0T3JkZXIgfHwgU09SVF9ERVNDLCBjb2x1bW4pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFNvcnRDYXJldCBvcmRlcj17c29ydE9yZGVyIX0gLz5cbiAgICAgICAgKTtcblxuICAgICAgICBjZWxsQ2xhc3NlcyA9IGNzKFxuICAgICAgICAgIGNlbGxDbGFzc2VzLFxuICAgICAgICAgIF8uaXNGdW5jdGlvbihoZWFkZXJTb3J0aW5nQ2xhc3NlcylcbiAgICAgICAgICAgID8gaGVhZGVyU29ydGluZ0NsYXNzZXMoY29sdW1uLCBzb3J0T3JkZXIhLCBpc0xhc3RTb3J0aW5nISwgaW5kZXgpXG4gICAgICAgICAgICA6IGhlYWRlclNvcnRpbmdDbGFzc2VzXG4gICAgICAgICk7XG5cbiAgICAgICAgY2VsbFN0eWxlID0ge1xuICAgICAgICAgIC4uLmNlbGxTdHlsZSxcbiAgICAgICAgICAuLi4oXy5pc0Z1bmN0aW9uKGhlYWRlclNvcnRpbmdTdHlsZSlcbiAgICAgICAgICAgID8gaGVhZGVyU29ydGluZ1N0eWxlKGNvbHVtbiwgc29ydE9yZGVyISwgaXNMYXN0U29ydGluZyEsIGluZGV4KVxuICAgICAgICAgICAgOiBoZWFkZXJTb3J0aW5nU3R5bGUpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ydFN5bWJvbCA9IHNvcnRDYXJldGZ1bmMgPyAoXG4gICAgICAgICAgc29ydENhcmV0ZnVuYyh1bmRlZmluZWQsIGNvbHVtbilcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U29ydFN5bWJvbCAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNzKGNlbGxBdHRycy5jbGFzc05hbWUsIGNlbGxDbGFzc2VzKTtcbiAgICBpZiAoIV8uaXNFbXB0eU9iamVjdChjZWxsU3R5bGUpKSBjZWxsQXR0cnMuc3R5bGUgPSBjZWxsU3R5bGU7XG5cbiAgICBpZiAoZmlsdGVyUG9zaXRpb24gPT09IEZJTFRFUlNfUE9TSVRJT05fSU5MSU5FKSB7XG4gICAgICBpZiAoZmlsdGVyUmVuZGVyZXIpIHtcbiAgICAgICAgY29uc3Qgb25DdXN0b21GaWx0ZXIgPSBvbkV4dGVybmFsRmlsdGVyPy4oXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIGZpbHRlcj8ucHJvcHMudHlwZSB8fCBcIlwiXG4gICAgICAgICk7XG4gICAgICAgIGZpbHRlckVsZW1lbnQgPSBmaWx0ZXJSZW5kZXJlcihvbkN1c3RvbUZpbHRlciEsIGNvbHVtbik7XG4gICAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xuICAgICAgICBmaWx0ZXJFbGVtZW50ID0gKFxuICAgICAgICAgIDxmaWx0ZXIuRmlsdGVyXG4gICAgICAgICAgICB7Li4uZmlsdGVyLnByb3BzfVxuICAgICAgICAgICAgZmlsdGVyU3RhdGU9e2N1cnJGaWx0ZXJzPy5bY29sdW1uLmRhdGFGaWVsZF19XG4gICAgICAgICAgICBvbkZpbHRlcj17b25GaWx0ZXJ9XG4gICAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgPSBoZWFkZXJGb3JtYXR0ZXJcbiAgICAgID8gaGVhZGVyRm9ybWF0dGVyKGNvbHVtbiwgaW5kZXgsIHtcbiAgICAgICAgc29ydEVsZW1lbnQ6IHNvcnRTeW1ib2wsXG4gICAgICAgIGZpbHRlckVsZW1lbnQsXG4gICAgICB9KVxuICAgICAgOiB0ZXh0O1xuXG4gICAgaWYgKGhlYWRlckZvcm1hdHRlcikge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0aFwiLCBjZWxsQXR0cnMsIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgIFwidGhcIixcbiAgICAgIGNlbGxBdHRycyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgc29ydFN5bWJvbCxcbiAgICAgIGZpbHRlckVsZW1lbnRcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlckNlbGw7XG4iLCJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZW1vdGVSZXNvbHZlciBmcm9tIFwiLi4vcHJvcHMtcmVzb2x2ZXIvcmVtb3RlLXJlc29sdmVyXCI7XG5pbXBvcnQgZGF0YU9wZXJhdG9yIGZyb20gXCIuLi9zdG9yZS9vcGVyYXRvcnNcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gXCIuL2Jvb3RzdHJhcFwiO1xuaW1wb3J0IGNyZWF0ZUNvbHVtbkNvbnRleHQgZnJvbSBcIi4vY29sdW1uLWNvbnRleHRcIjtcbmltcG9ydCBjcmVhdGVEYXRhQ29udGV4dCBmcm9tIFwiLi9kYXRhLWNvbnRleHRcIjtcbmltcG9ydCBjcmVhdGVSb3dFeHBhbmRDb250ZXh0IGZyb20gXCIuL3Jvdy1leHBhbmQtY29udGV4dFwiO1xuaW1wb3J0IHsgY3JlYXRlU2VsZWN0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NlbGVjdGlvbi1jb250ZXh0XCI7XG5pbXBvcnQgY3JlYXRlU29ydENvbnRleHQgZnJvbSBcIi4vc29ydC1jb250ZXh0XCI7XG5cbmNvbnN0IHdpdGhDb250ZXh0ID0gKEJhc2U6IGFueSkgPT5cbiAgY2xhc3MgQm9vdHN0cmFwVGFibGVDb250YWluZXIgZXh0ZW5kcyBSZW1vdGVSZXNvbHZlcihCYXNlKSB7XG4gICAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5EYXRhQ29udGV4dCA9IGNyZWF0ZURhdGFDb250ZXh0KCk7XG5cbiAgICAgIGlmIChwcm9wcy5yZWdpc3RlckV4cG9zZWRBUEkpIHtcbiAgICAgICAgY29uc3QgZXhwb3NlZEFQSUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIGV4cG9zZWRBUElFbWl0dGVyLm9uKFxuICAgICAgICAgIFwiZ2V0LnRhYmxlLmRhdGFcIixcbiAgICAgICAgICAocGF5bG9hZCkgPT4gKHBheWxvYWQucmVzdWx0ID0gdGhpcy50YWJsZS5nZXREYXRhKCkpXG4gICAgICAgICk7XG4gICAgICAgIGV4cG9zZWRBUElFbWl0dGVyLm9uKFxuICAgICAgICAgIFwiZ2V0LnNlbGVjdGVkLnJvd3NcIixcbiAgICAgICAgICAocGF5bG9hZCkgPT4gKHBheWxvYWQucmVzdWx0ID0gdGhpcy5zZWxlY3Rpb25Db250ZXh0LmdldFNlbGVjdGVkKCkpXG4gICAgICAgICk7XG4gICAgICAgIGV4cG9zZWRBUElFbWl0dGVyLm9uKFwiZ2V0LmZpbHRlcmVkLnJvd3NcIiwgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hDb250ZXh0KSB7XG4gICAgICAgICAgICBwYXlsb2FkLnJlc3VsdCA9IHRoaXMuc2VhcmNoQ29udGV4dC5nZXRTZWFyY2hlZCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJDb250ZXh0KSB7XG4gICAgICAgICAgICBwYXlsb2FkLnJlc3VsdCA9IHRoaXMuZmlsdGVyQ29udGV4dC5nZXRGaWx0ZXJlZCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXlsb2FkLnJlc3VsdCA9IHRoaXMudGFibGUuZ2V0RGF0YSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHByb3BzLnJlZ2lzdGVyRXhwb3NlZEFQSShleHBvc2VkQVBJRW1pdHRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5jb2x1bW5zLmZpbHRlcigoY29sOiBhbnkpID0+IGNvbC5zb3J0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuU29ydENvbnRleHQgPSBjcmVhdGVTb3J0Q29udGV4dChcbiAgICAgICAgICBkYXRhT3BlcmF0b3IsXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZVNvcnQsXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVTb3J0Q2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgcHJvcHMuY29sdW1uVG9nZ2xlIHx8XG4gICAgICAgIHByb3BzLmNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4gY29sLmhpZGRlbikubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuQ29sdW1uQ29udGV4dCA9IGNyZWF0ZUNvbHVtbkNvbnRleHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNlbGVjdFJvdykge1xuICAgICAgICB0aGlzLlNlbGVjdGlvbkNvbnRleHQgPSBjcmVhdGVTZWxlY3Rpb25Db250ZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5leHBhbmRSb3cpIHtcbiAgICAgICAgdGhpcy5Sb3dFeHBhbmRDb250ZXh0ID0gY3JlYXRlUm93RXhwYW5kQ29udGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuY2VsbEVkaXQgJiYgcHJvcHMuY2VsbEVkaXQuY3JlYXRlQ29udGV4dCkge1xuICAgICAgICB0aGlzLkNlbGxFZGl0Q29udGV4dCA9IHByb3BzLmNlbGxFZGl0LmNyZWF0ZUNvbnRleHQoXG4gICAgICAgICAgXyxcbiAgICAgICAgICBkYXRhT3BlcmF0b3IsXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZUNlbGxFZGl0LFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlQ2VsbENoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuZmlsdGVyKSB7XG4gICAgICAgIHRoaXMuRmlsdGVyQ29udGV4dCA9IHByb3BzLmZpbHRlci5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIF8sXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZUZpbHRlcmluZyxcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZUZpbHRlckNoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLlBhZ2luYXRpb25Db250ZXh0ID0gcHJvcHMucGFnaW5hdGlvbi5jcmVhdGVDb250ZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5zZWFyY2ggJiYgcHJvcHMuc2VhcmNoLnNlYXJjaENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5TZWFyY2hDb250ZXh0ID0gcHJvcHMuc2VhcmNoLnNlYXJjaENvbnRleHQoXG4gICAgICAgICAgXyxcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlU2VhcmNoLFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5zZXREZXBlbmRlbmN5TW9kdWxlcykge1xuICAgICAgICBwcm9wcy5zZXREZXBlbmRlbmN5TW9kdWxlcyhfKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyKSB7XG4gICAgICAgIHByb3BzLnNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyKHRoaXMucmVtb3RlRW1pdHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogYW55KSB7XG4gICAgICBpZiAobmV4dFByb3BzLmNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4gY29sLnNvcnQpLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgIHRoaXMuU29ydENvbnRleHQgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5Tb3J0Q29udGV4dCkge1xuICAgICAgICB0aGlzLlNvcnRDb250ZXh0ID0gY3JlYXRlU29ydENvbnRleHQoXG4gICAgICAgICAgZGF0YU9wZXJhdG9yLFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVTb3J0LFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlU29ydENoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXh0UHJvcHMucGFnaW5hdGlvbiAmJiB0aGlzLnByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5QYWdpbmF0aW9uQ29udGV4dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobmV4dFByb3BzLnBhZ2luYXRpb24gJiYgIXRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLlBhZ2luYXRpb25Db250ZXh0ID0gbmV4dFByb3BzLnBhZ2luYXRpb24uY3JlYXRlQ29udGV4dChcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbixcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICghbmV4dFByb3BzLmNlbGxFZGl0ICYmIHRoaXMucHJvcHMuY2VsbEVkaXQpIHtcbiAgICAgICAgdGhpcy5DZWxsRWRpdENvbnRleHQgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKG5leHRQcm9wcy5jZWxsRWRpdCAmJiAhdGhpcy5wcm9wcy5jZWxsRWRpdCkge1xuICAgICAgICB0aGlzLkNlbGxFZGl0Q29udGV4dCA9IG5leHRQcm9wcy5jZWxsRWRpdC5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIF8sXG4gICAgICAgICAgZGF0YU9wZXJhdG9yLFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVDZWxsRWRpdCxcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZUNlbGxDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJCYXNlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiB7XG4gICAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55XG4gICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueSxcbiAgICAgICAgY29sdW1uVG9nZ2xlUHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDxCYXNlXG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiB7IHRoaXMudGFibGUgPSBuOyB9fVxuICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgIHsuLi5zb3J0UHJvcHN9XG4gICAgICAgICAgey4uLmZpbHRlclByb3BzfVxuICAgICAgICAgIHsuLi5zZWFyY2hQcm9wc31cbiAgICAgICAgICB7Li4ucGFnaW5hdGlvblByb3BzfVxuICAgICAgICAgIHsuLi5jb2x1bW5Ub2dnbGVQcm9wc31cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YShcbiAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoQ29sdW1uQ29udGV4dChiYXNlOiBhbnksIGJhc2VQcm9wczogYW55KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IGFueSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuQ29sdW1uQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgdG9nZ2xlcz17XG4gICAgICAgICAgICB0aGlzLnByb3BzLmNvbHVtblRvZ2dsZSA/IHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlLnRvZ2dsZXMgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuQ29sdW1uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgIHsoY29sdW1uVG9nZ2xlUHJvcHM6IGFueSkgPT5cbiAgICAgICAgICAgICAgYmFzZShcbiAgICAgICAgICAgICAgICByb290UHJvcHMsXG4gICAgICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcyxcbiAgICAgICAgICAgICAgICBjb2x1bW5Ub2dnbGVQcm9wc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90aGlzLkNvbHVtbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5Db2x1bW5Db250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoU2VsZWN0aW9uQ29udGV4dChiYXNlOiBhbnksIGJhc2VQcm9wczogYW55KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IHtcbiAgICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuU2VsZWN0aW9uQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiB7IHRoaXMuc2VsZWN0aW9uQ29udGV4dCA9IG47IH19XG4gICAgICAgICAgc2VsZWN0Um93PXt0aGlzLnByb3BzLnNlbGVjdFJvd31cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YShcbiAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2Jhc2UoXG4gICAgICAgICAgICByb290UHJvcHMsXG4gICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgKX1cbiAgICAgICAgPC90aGlzLlNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhSb3dFeHBhbmRDb250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczoge1xuICAgICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueVxuICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5kQ29udGV4dCA9IG47XG4gICAgICAgICAgfX1cbiAgICAgICAgICBleHBhbmRSb3c9e3RoaXMucHJvcHMuZXhwYW5kUm93fVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7YmFzZShcbiAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICApfVxuICAgICAgICA8L3RoaXMuUm93RXhwYW5kQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFBhZ2luYXRpb25Db250ZXh0KGJhc2U6IGFueSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiB7XG4gICAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcz86IGFueVxuICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICBzb3J0UHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlBhZ2luYXRpb25Db250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiB7IHRoaXMucGFnaW5hdGlvbkNvbnRleHQgPSBuOyB9fVxuICAgICAgICAgIHBhZ2luYXRpb249e3RoaXMucHJvcHMucGFnaW5hdGlvbn1cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YShmaWx0ZXJQcm9wcywgc2VhcmNoUHJvcHMsIHNvcnRQcm9wcyl9XG4gICAgICAgICAgYm9vdHN0cmFwND17dGhpcy5wcm9wcy5ib290c3RyYXA0fVxuICAgICAgICAgIGlzUmVtb3RlUGFnaW5hdGlvbj17dGhpcy5pc1JlbW90ZVBhZ2luYXRpb259XG4gICAgICAgICAgcmVtb3RlRW1pdHRlcj17dGhpcy5yZW1vdGVFbWl0dGVyfVxuICAgICAgICAgIG9uRGF0YVNpemVDaGFuZ2U9e3RoaXMucHJvcHMub25EYXRhU2l6ZUNoYW5nZX1cbiAgICAgICAgICB0YWJsZUlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuUGFnaW5hdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KHBhZ2luYXRpb25Qcm9wczogYW55KSA9PlxuICAgICAgICAgICAgICBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuUGFnaW5hdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5QYWdpbmF0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFNvcnRDb250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczoge1xuICAgICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICAgICAgc29ydFByb3BzPzogYW55LFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzPzogYW55XG4gICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgIHNlYXJjaFByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5Tb3J0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiB7IHRoaXMuc29ydENvbnRleHQgPSBuOyB9fVxuICAgICAgICAgIGRlZmF1bHRTb3J0ZWQ9e3RoaXMucHJvcHMuZGVmYXVsdFNvcnRlZH1cbiAgICAgICAgICBkZWZhdWx0U29ydERpcmVjdGlvbj17dGhpcy5wcm9wcy5kZWZhdWx0U29ydERpcmVjdGlvbn1cbiAgICAgICAgICBzb3J0PXt0aGlzLnByb3BzLnNvcnR9XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzKX1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLlNvcnRDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgeyhzb3J0UHJvcHM6IGFueSkgPT5cbiAgICAgICAgICAgICAgYmFzZShyb290UHJvcHMsIGZpbHRlclByb3BzLCBzZWFyY2hQcm9wcywgc29ydFByb3BzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdGhpcy5Tb3J0Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLlNvcnRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoU2VhcmNoQ29udGV4dChiYXNlOiBhbnksIGJhc2VQcm9wczogYW55KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IHtcbiAgICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICAgICAgc2VhcmNoUHJvcHM/OiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM/OiBhbnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM/OiBhbnlcbiAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlNlYXJjaENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7Li4uYmFzZVByb3BzfVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4geyB0aGlzLnNlYXJjaENvbnRleHQgPSBuOyB9fVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzKX1cbiAgICAgICAgICBzZWFyY2hUZXh0PXt0aGlzLnByb3BzLnNlYXJjaC5zZWFyY2hUZXh0fVxuICAgICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcj17dGhpcy5wcm9wcy5kYXRhQ2hhbmdlTGlzdGVuZXJ9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhpcy5TZWFyY2hDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgeyhzZWFyY2hQcm9wczogYW55KSA9PiBiYXNlKHJvb3RQcm9wcywgZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzKX1cbiAgICAgICAgICA8L3RoaXMuU2VhcmNoQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLlNlYXJjaENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhGaWx0ZXJDb250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAocm9vdFByb3BzOiBhbnkpID0+IChcbiAgICAgICAgPHRoaXMuRmlsdGVyQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiB7IHRoaXMuZmlsdGVyQ29udGV4dCA9IG47IH19XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoKX1cbiAgICAgICAgICBmaWx0ZXI9e3RoaXMucHJvcHMuZmlsdGVyLm9wdGlvbnMgfHwge319XG4gICAgICAgICAgZGF0YUNoYW5nZUxpc3RlbmVyPXt0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lcn1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLkZpbHRlckNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KGZpbHRlclByb3BzOiBhbnkpID0+IGJhc2Uocm9vdFByb3BzLCBmaWx0ZXJQcm9wcyl9XG4gICAgICAgICAgPC90aGlzLkZpbHRlckNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIDwvdGhpcy5GaWx0ZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoQ2VsbEVkaXRDb250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAocm9vdFByb3BzOiB7XG4gICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICBmaWx0ZXJQcm9wcz86IGFueSxcbiAgICAgICAgICBzZWFyY2hQcm9wcz86IGFueSxcbiAgICAgICAgICBzb3J0UHJvcHM/OiBhbnksXG4gICAgICAgICAgcGFnaW5hdGlvblByb3BzPzogYW55XG4gICAgICAgICkgPT4gYW55O1xuICAgICAgfSkgPT4gKFxuICAgICAgICA8dGhpcy5DZWxsRWRpdENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7Li4uYmFzZVByb3BzfVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4geyB0aGlzLmNlbGxFZGl0Q29udGV4dCA9IG47IH19XG4gICAgICAgICAgc2VsZWN0Um93PXt0aGlzLnByb3BzLnNlbGVjdFJvd31cbiAgICAgICAgICBjZWxsRWRpdD17dGhpcy5wcm9wcy5jZWxsRWRpdH1cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YSgpfVxuICAgICAgICA+XG4gICAgICAgICAge2Jhc2Uocm9vdFByb3BzKX1cbiAgICAgICAgPC90aGlzLkNlbGxFZGl0Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3QgeyBrZXlGaWVsZCwgY29sdW1ucywgYm9vdHN0cmFwNCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGJhc2VQcm9wcyA9IHsga2V5RmllbGQsIGNvbHVtbnMgfTtcblxuICAgICAgbGV0IGJhc2UgPSB0aGlzLnJlbmRlckJhc2UoKTtcblxuICAgICAgaWYgKHRoaXMuQ29sdW1uQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoQ29sdW1uQ29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5TZWxlY3Rpb25Db250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhTZWxlY3Rpb25Db250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlJvd0V4cGFuZENvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFJvd0V4cGFuZENvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuUGFnaW5hdGlvbkNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFBhZ2luYXRpb25Db250ZXh0KGJhc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5Tb3J0Q29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoU29ydENvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuU2VhcmNoQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoU2VhcmNoQ29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5GaWx0ZXJDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhGaWx0ZXJDb250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkNlbGxFZGl0Q29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoQ2VsbEVkaXRDb250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCb290c3RyYXBDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IGJvb3RzdHJhcDQgfX0+XG4gICAgICAgICAgPHRoaXMuRGF0YUNvbnRleHQuUHJvdmlkZXIgey4uLmJhc2VQcm9wc30gZGF0YT17dGhpcy5wcm9wcy5kYXRhfT5cbiAgICAgICAgICAgIDx0aGlzLkRhdGFDb250ZXh0LkNvbnN1bWVyPntiYXNlfTwvdGhpcy5EYXRhQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICA8L3RoaXMuRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvQm9vdHN0cmFwQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoQ29udGV4dDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRklMVEVSU19QT1NJVElPTl9UT1AgfSBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IEZpbHRlcnNDZWxsIGZyb20gXCIuL2ZpbHRlcnMtY2VsbFwiO1xuaW1wb3J0IFJvd1RlbXBsYXRlIGZyb20gXCIuL3Jvdy9yb3ctdGVtcGxhdGVcIjtcblxuaW50ZXJmYWNlIEZpbHRlcnNQcm9wcyB7XG4gIGNvbHVtbnM6IGFueVtdO1xuICBvbkZpbHRlcj86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIGZpbHRlclBvc2l0aW9uPzogc3RyaW5nO1xuICBjdXJyRmlsdGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiAoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+IEZ1bmN0aW9uO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHNlbGVjdFJvdz86IGFueTtcbiAgZXhwYW5kUm93PzogYW55O1xuICBvblNvcnQ/OiAoZmlsdGVyRGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbn1cblxuY29uc3QgRmlsdGVyczogUmVhY3QuRkM8RmlsdGVyc1Byb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29sdW1ucyxcbiAgICBvbkZpbHRlcixcbiAgICBjdXJyRmlsdGVycyxcbiAgICBmaWx0ZXJQb3NpdGlvbiA9IEZJTFRFUlNfUE9TSVRJT05fVE9QLFxuICAgIG9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgY2xhc3NOYW1lLFxuICAgIHNlbGVjdFJvdyxcbiAgICBleHBhbmRSb3csXG4gIH0gPSBwcm9wcztcblxuICBmdW5jdGlvbiByZW5kZXJDb250ZW50KCkge1xuICAgIGNvbnN0IGZpbHRlckNvbHVtbnM6IFJlYWN0LlJlYWN0RWxlbWVudFtdID0gW107XG4gICAgbGV0IHNob3dGaWx0ZXJzUm93ID0gZmFsc2U7XG5cbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgZmlsdGVyQ29sdW1ucy5wdXNoKFxuICAgICAgICA8RmlsdGVyc0NlbGxcbiAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICBrZXk9e2NvbHVtbi5kYXRhRmllbGR9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgY3VyckZpbHRlcnM9e2N1cnJGaWx0ZXJzfVxuICAgICAgICAgIG9uRXh0ZXJuYWxGaWx0ZXI9e29uRXh0ZXJuYWxGaWx0ZXJ9XG4gICAgICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgICAvPlxuICAgICAgKTtcblxuICAgICAgaWYgKGNvbHVtbi5maWx0ZXJSZW5kZXJlciB8fCBjb2x1bW4uZmlsdGVyKSB7XG4gICAgICAgIGlmICghc2hvd0ZpbHRlcnNSb3cpIHtcbiAgICAgICAgICBzaG93RmlsdGVyc1JvdyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmlsdGVyQ29sdW1ucztcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPHRib2R5XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGRpc3BsYXk6XG4gICAgICAgICAgZmlsdGVyUG9zaXRpb24gPT09IEZJTFRFUlNfUE9TSVRJT05fVE9QXG4gICAgICAgICAgICA/IFwidGFibGUtaGVhZGVyLWdyb3VwXCJcbiAgICAgICAgICAgIDogXCJ0YWJsZS1mb290ZXItZ3JvdXBcIixcbiAgICAgIH19XG4gICAgPlxuICAgICAgPFJvd1RlbXBsYXRlXG4gICAgICAgIHJlbmRlckNvbnRlbnQ9e3JlbmRlckNvbnRlbnR9XG4gICAgICAgIHNlbGVjdFJvdz17c2VsZWN0Um93fVxuICAgICAgICBleHBhbmRSb3c9e2V4cGFuZFJvd31cbiAgICAgICAgY2VsbEVsPVwidGRcIlxuICAgICAgLz5cbiAgICA8L3Rib2R5PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsdGVycztcbiIsImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKEV4dGVuZEJhc2U6IGFueSkgPT5cbiAgY2xhc3MgUmVtb3RlUmVzb2x2ZXIgZXh0ZW5kcyBDb21wb25lbnQ8dHlwZW9mIEV4dGVuZEJhc2U+IHtcbiAgICByZW1vdGVFbWl0dGVyOiBFdmVudEVtaXR0ZXI7XG5cbiAgICBEYXRhQ29udGV4dDogYW55O1xuICAgIENvbHVtbkNvbnRleHQ6IGFueTtcbiAgICBTZWxlY3Rpb25Db250ZXh0OiBhbnk7XG4gICAgU2VhcmNoQ29udGV4dDogYW55O1xuICAgIEZpbHRlckNvbnRleHQ6IGFueTtcbiAgICBSb3dFeHBhbmRDb250ZXh0OiBhbnk7XG4gICAgQ2VsbEVkaXRDb250ZXh0OiBhbnk7XG4gICAgUGFnaW5hdGlvbkNvbnRleHQ6IGFueTtcbiAgICBTb3J0Q29udGV4dDogYW55O1xuICAgIFRhYmxlOiBhbnk7XG5cbiAgICBkYXRhQ29udGV4dDogYW55O1xuICAgIGNvbHVtbkNvbnRleHQ6IGFueTtcbiAgICBzZWxlY3Rpb25Db250ZXh0OiBhbnk7XG4gICAgc2VhcmNoQ29udGV4dDogYW55O1xuICAgIGZpbHRlckNvbnRleHQ6IGFueTtcbiAgICByb3dFeHBhbmRDb250ZXh0OiBhbnk7XG4gICAgY2VsbEVkaXRDb250ZXh0OiBhbnk7XG4gICAgcGFnaW5hdGlvbkNvbnRleHQ6IGFueTtcbiAgICBzb3J0Q29udGV4dDogYW55O1xuICAgIHRhYmxlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLnJlbW90ZUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICB0aGlzLnJlbW90ZUVtaXR0ZXIub24oXCJwYWdpbmF0aW9uQ2hhbmdlXCIsIHRoaXMuaGFuZGxlUmVtb3RlUGFnZUNoYW5nZSk7XG4gICAgICB0aGlzLnJlbW90ZUVtaXR0ZXIub24oXCJpc1JlbW90ZVBhZ2luYXRpb25cIiwgdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24pO1xuICAgIH1cblxuICAgIGdldE5ld2VzdFN0YXRlID0gKHN0YXRlOiBhbnkgPSB7fSkgPT4ge1xuICAgICAgbGV0IHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHNvcnRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBzaXplUGVyUGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHNlYXJjaFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBmaWx0ZXJzOiBhbnkgPSB7fTtcblxuICAgICAgaWYgKHRoaXMuc29ydENvbnRleHQpIHtcbiAgICAgICAgc29ydE9yZGVyID0gdGhpcy5zb3J0Q29udGV4dC5zdGF0ZS5zb3J0T3JkZXI7XG4gICAgICAgIHNvcnRGaWVsZCA9IHRoaXMuc29ydENvbnRleHQuc3RhdGUuc29ydENvbHVtblxuICAgICAgICAgID8gdGhpcy5zb3J0Q29udGV4dC5zdGF0ZS5zb3J0Q29sdW1uLmRhdGFGaWVsZFxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmlsdGVyQ29udGV4dCkge1xuICAgICAgICBmaWx0ZXJzID0gdGhpcy5maWx0ZXJDb250ZXh0LmN1cnJGaWx0ZXJzO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29udGV4dCkge1xuICAgICAgICBwYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29udGV4dC5jdXJyUGFnZTtcbiAgICAgICAgc2l6ZVBlclBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db250ZXh0LmN1cnJTaXplUGVyUGFnZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2VhcmNoQ29udGV4dCkge1xuICAgICAgICBzZWFyY2hUZXh0ID0gdGhpcy5wcm9wcy5zZWFyY2guc2VhcmNoVGV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc29ydE9yZGVyLFxuICAgICAgICBzb3J0RmllbGQsXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIHBhZ2UsXG4gICAgICAgIHNpemVQZXJQYWdlLFxuICAgICAgICBzZWFyY2hUZXh0LFxuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5kYXRhLFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgaXNSZW1vdGVTZWFyY2ggPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJlbW90ZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5zZWFyY2gpIHx8XG4gICAgICAgIHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKClcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGlzUmVtb3RlUGFnaW5hdGlvbiA9IChlOiBhbnkgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICBlLnJlc3VsdCA9IHJlbW90ZSA9PT0gdHJ1ZSB8fCAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5wYWdpbmF0aW9uKTtcbiAgICAgIHJldHVybiBlLnJlc3VsdDtcbiAgICB9O1xuXG4gICAgaXNSZW1vdGVGaWx0ZXJpbmcgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJlbW90ZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5maWx0ZXIpIHx8XG4gICAgICAgIHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKClcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGlzUmVtb3RlU29ydCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVtb3RlID09PSB0cnVlIHx8XG4gICAgICAgIChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLnNvcnQpIHx8XG4gICAgICAgIHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKClcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGlzUmVtb3RlQ2VsbEVkaXQgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiByZW1vdGUgPT09IHRydWUgfHwgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuY2VsbEVkaXQpO1xuICAgIH07XG5cbiAgICBoYW5kbGVSZW1vdGVQYWdlQ2hhbmdlID0gKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKFxuICAgICAgICBcInBhZ2luYXRpb25cIixcbiAgICAgICAgdGhpcy5nZXROZXdlc3RTdGF0ZSh7IHBhZ2UsIHNpemVQZXJQYWdlIH0pXG4gICAgICApO1xuICAgIH07XG5cbiAgICBoYW5kbGVSZW1vdGVGaWx0ZXJDaGFuZ2UgPSAoZmlsdGVyczogYW55KSA9PiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZTogeyBmaWx0ZXJzOiBhbnk7IHBhZ2U/OiBudW1iZXIgfSA9IHsgZmlsdGVycyB9O1xuICAgICAgaWYgKHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbi5vcHRpb25zIHx8IHt9O1xuICAgICAgICBuZXdTdGF0ZS5wYWdlID0gXy5pc0RlZmluZWQob3B0aW9ucy5wYWdlU3RhcnRJbmRleClcbiAgICAgICAgICA/IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXhcbiAgICAgICAgICA6IDE7XG4gICAgICB9XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoXCJmaWx0ZXJcIiwgdGhpcy5nZXROZXdlc3RTdGF0ZShuZXdTdGF0ZSkpO1xuICAgIH07XG5cbiAgICBoYW5kbGVSZW1vdGVTb3J0Q2hhbmdlID0gKHNvcnRGaWVsZDogc3RyaW5nLCBzb3J0T3JkZXI6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKFxuICAgICAgICBcInNvcnRcIixcbiAgICAgICAgdGhpcy5nZXROZXdlc3RTdGF0ZSh7IHNvcnRGaWVsZCwgc29ydE9yZGVyIH0pXG4gICAgICApO1xuICAgIH07XG5cbiAgICBoYW5kbGVSZW1vdGVDZWxsQ2hhbmdlID0gKHJvd0lkOiBhbnksIGRhdGFGaWVsZDogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICBjb25zdCBjZWxsRWRpdCA9IHsgcm93SWQsIGRhdGFGaWVsZCwgbmV3VmFsdWUgfTtcbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZShcImNlbGxFZGl0XCIsIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBjZWxsRWRpdCB9KSk7XG4gICAgfTtcblxuICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSA9IChzZWFyY2hUZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZShcInNlYXJjaFwiLCB0aGlzLmdldE5ld2VzdFN0YXRlKHsgc2VhcmNoVGV4dCB9KSk7XG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoRXh0ZW5kQmFzZTogYW55KSA9PlxuICBjbGFzcyBDb2x1bW5SZXNvbHZlciBleHRlbmRzIENvbXBvbmVudDx0eXBlb2YgRXh0ZW5kQmFzZT4ge1xuICAgIHZpc2libGVDb2x1bW5TaXplKGluY2x1ZGVTZWxlY3RDb2x1bW4gPSB0cnVlKSB7XG4gICAgICBsZXQgY29sdW1uTGVuO1xuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlICYmIHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlLnRvZ2dsZXMpIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlLnRvZ2dsZXM7XG4gICAgICAgIGNvbHVtbkxlbiA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmZpbHRlcigobmFtZSkgPT4gY29sdW1uc1tuYW1lXSkubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1uTGVuID0gdGhpcy5wcm9wcy5jb2x1bW5zLmZpbHRlcigoYzogYW55KSA9PiAhYy5oaWRkZW4pLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmICghaW5jbHVkZVNlbGVjdENvbHVtbikgcmV0dXJuIGNvbHVtbkxlbjtcbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdyAmJiAhdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbikge1xuICAgICAgICBjb2x1bW5MZW4gKz0gMTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb3BzLmV4cGFuZFJvdyAmJiB0aGlzLnByb3BzLmV4cGFuZFJvdy5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgICAgIGNvbHVtbkxlbiArPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbHVtbkxlbjtcbiAgICB9XG4gIH07XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzcyMyk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwicmVxdWlyZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX181NDQyX18iLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX182MDAzX18iLCJFeHBhbmRSb3ciLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3VwZXIiLCJ0aGlzIiwibm9kZVJlZiIsImNyZWF0ZVJlZiIsInJlbmRlciIsImNoaWxkcmVuIiwiZXhwYW5kZWQiLCJvbkNsb3NlZCIsImNsYXNzTmFtZSIsInJlc3QiLCJDU1NUcmFuc2l0aW9uIiwiYXBwZWFyIiwiaW4iLCJ0aW1lb3V0IiwiY2xhc3NOYW1lcyIsIm9uRXhpdGVkIiwicmVmIiwib3JkZXIiLCJvcmRlckNsYXNzIiwiZHJvcHVwIiwiU09SVF9BU0MiLCJCb290c3RyYXBDb250ZXh0IiwiQ29uc3VtZXIiLCJib290c3RyYXA0IiwiY29udGVudCIsImNvbFNwYW4iLCJpbmRleCIsImNvbHVtbiIsImN1cnJGaWx0ZXJzIiwib25FeHRlcm5hbEZpbHRlciIsIm9uRmlsdGVyIiwiZmlsdGVyIiwiZmlsdGVyRWxtIiwiY2VsbEF0dHJzIiwiY2VsbFN0eWxlIiwic3R5bGUiLCJoZWFkZXJBbGlnbiIsInRleHRBbGlnbiIsImlzRnVuY3Rpb24iLCJmaWx0ZXJSZW5kZXJlciIsIm9uQ3VzdG9tRmlsdGVyIiwidHlwZSIsIkZpbHRlciIsImZpbHRlclN0YXRlIiwiZGF0YUZpZWxkIiwiY3JlYXRlRWxlbWVudCIsIkV4dGVuZEJhc2UiLCJzaG91bGRVcGRhdGVCeUNlbGxFZGl0aW5nIiwibmV4dFByb3BzIiwiY2xpY2tUb0VkaXQiLCJkYmNsaWNrVG9FZGl0IiwiZWRpdGluZ1Jvd0lkeCIsInJvd0luZGV4Iiwic2hvdWxkVXBkYXRlZEJ5U2VsZlByb3BzIiwiaXNFcXVhbCIsImF0dHJzIiwic2hvdWxkVXBkYXRlQnlDb2x1bW5zRm9yU2ltcGxlQ2hlY2siLCJjb2x1bW5zIiwibGVuZ3RoIiwiaSIsInNob3VsZFVwZGF0ZWRCeU5vcm1hbFByb3BzIiwiZWRpdGFibGUiLCJyb3ciLCJzaG91bGRVcGRhdGVDaGlsZCIsInNob3VsZFJvd0NvbnRlbnRVcGRhdGUiLCJtYXRjaFJvdyIsImtleUZpZWxkIiwiaWQiLCJnZXQiLCJnZXRSb3dCeVJvd0lkIiwiZGF0YSIsImZpbmQiLCJSb3dBZ2dyZWdhdG9yIiwiUm93RXZlbnREZWxlZ2F0ZXIiLCJjbGlja051bSIsInNob3VsZFVwZGF0ZVJvd0NvbnRlbnQiLCJjcmVhdGVDbGlja0V2ZW50SGFuZGxlciIsImJpbmQiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJzZWxlY3RlZCIsImV4cGFuZGFibGUiLCJzZWxlY3RhYmxlIiwic2VsZWN0Um93IiwiaGlkZVNlbGVjdENvbHVtbiIsImlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQiLCJwb3NpdGlvbiIsIklORElDQVRPUl9QT1NJVElPTl9MRUZUIiwiZXhwYW5kUm93IiwidmlzaWJsZUNvbHVtblNpemUiLCJ0YWJJbmRleENlbGwiLCJrZXkiLCJzZWxlY3RDb2x1bW5Qb3NpdGlvbiIsImNsaWNrVG9TZWxlY3QiLCJzaG93RXhwYW5kQ29sdW1uIiwiZXhwYW5kQ29sdW1uUG9zaXRpb24iLCJuZXdBdHRycyIsImRlbGVnYXRlIiwicmVuZGVyZXIiLCJvbkNsaWNrIiwidGFiSW5kZXhTdGFydCIsImNoaWxkcmVucyIsInNob3VsZFVwZGF0ZSIsInNlbGVjdENlbGwiLCJyb3dLZXkiLCJkaXNhYmxlZCIsInRhYkluZGV4IiwidW5zaGlmdCIsInB1c2giLCJleHBhbmRDZWxsIiwiRXhwYW5kQ2VsbCIsImhhbmRsZUNsaWNrIiwiZSIsIm9uUm93RXhwYW5kIiwic3RvcFByb3BhZ2F0aW9uIiwiZXhwYW5kQ29sdW1uUmVuZGVyZXIiLCJ1bmRlZmluZWQiLCJCb290c3RyYXBUYWJsZSIsImdldERhdGEiLCJ2aXNpYmxlUm93cyIsInZhbGlkYXRlUHJvcHMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJvbkRhdGFTaXplQ2hhbmdlIiwicGFnaW5hdGlvbiIsImRhdGFTaXplIiwibG9hZGluZyIsIm92ZXJsYXkiLCJMb2FkaW5nT3ZlcmxheSIsInJlbmRlclRhYmxlIiwiY2xhc3NlcyIsInN0cmlwZWQiLCJob3ZlciIsImJvcmRlcmVkIiwiY29uZGVuc2VkIiwibm9EYXRhSW5kaWNhdGlvbiIsImNhcHRpb24iLCJyb3dTdHlsZSIsInJvd0NsYXNzZXMiLCJ3cmFwcGVyQ2xhc3NlcyIsInJvd0V2ZW50cyIsIm1vZGUiLCJST1dfU0VMRUNUX0RJU0FCTEVEIiwibm9uRXhwYW5kYWJsZSIsImNlbGxFZGl0Iiwibm9uRWRpdGFibGVSb3dzIiwiZmlsdGVyUG9zaXRpb24iLCJGSUxURVJTX1BPU0lUSU9OX0lOTElORSIsInRhYmxlV3JhcHBlckNsYXNzIiwidGFibGVDbGFzcyIsImhhc0ZpbHRlcnMiLCJzb21lIiwiY29sIiwiaGFzRm9vdGVyIiwiaGFzIiwidGFibGVDYXB0aW9uIiwiaGVhZGVyQ2xhc3NlcyIsImhlYWRlcldyYXBwZXJDbGFzc2VzIiwic29ydEZpZWxkIiwic29ydE9yZGVyIiwib25Tb3J0IiwiZ2xvYmFsU29ydENhcmV0Iiwic29ydCIsInNvcnRDYXJldCIsImZpbHRlcnNDbGFzc2VzIiwiYm9keUNsYXNzZXMiLCJpc0VtcHR5IiwiZm9vdGVyQ2xhc3NlcyIsInJlbmRlckNvbnRlbnQiLCJjZWxsRWwiLCJTZWxlY3Rpb25DZWxsIiwic2VsZWN0Q29sdW1uU3R5bGUiLCJpbnB1dFR5cGUiLCJvblJvd1NlbGVjdCIsIlJPV19TRUxFQ1RfU0lOR0xFIiwic2VsZWN0aW9uUmVuZGVyZXIiLCJjaGVja2VkIiwicm93aW5kZXgiLCJyb3drZXkiLCJvbkNoYW5nZSIsImlzQW55RXhwYW5kcyIsIngiLCJleHBhbmRhYmxlS2V5cyIsInNraXBzIiwibWFwIiwiY29udGFpbnMiLCJnZXRFeHBhbmRlZFJvd3MiLCJrIiwiUm93RXhwYW5kQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJpc0Nsb3NpbmciLCJvbkFsbFJvd0V4cGFuZCIsIlJvd0V4cGFuZFByb3ZpZGVyIiwic3RhdGUiLCJjbG9zZWRSb3ciLCJzZXRTdGF0ZSIsInZhbHVlIiwiaGFuZGxlUm93RXhwYW5kIiwiaXNFeHBhbmRlZCIsIm9uRXhwYW5kIiwib25seU9uZUV4cGFuZGluZyIsImN1cnJFeHBhbmRlZCIsImN1cnJJc0Nsb3NpbmciLCJjb25jYXQiLCJoYW5kbGVBbGxSb3dFeHBhbmQiLCJleHBhbmRBbGwiLCJvbkV4cGFuZEFsbCIsInMiLCJkIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwicHJldlN0YXRlIiwibmV4dEV4cGFuZGVkIiwicm93SWQiLCJyZWR1Y2UiLCJhY2MiLCJjdXIiLCJQcm92aWRlciIsImNhcHRpb25TaWRlIiwiZXZlbnRzIiwiQ2VsbEV2ZW50RGVsZWdhdGVyIiwiY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlciIsImNiIiwiY29sdW1uSW5kZXgiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImF0dHIiLCJpbmNsdWRlcyIsInR5cGVDb252ZXJ0IiwiVFlQRV9TVFJJTkciLCJTdHJpbmciLCJUWVBFX05VTUJFUiIsIk51bWJlciIsIlRZUEVfQk9PTEVBTiIsIlRZUEVfREFURSIsIkRhdGUiLCJSb3dQdXJlQ29udGVudCIsImlzRWRpdGFibGUiLCJlZGl0aW5nQ29sSWR4IiwiYXRzdGFydCIsIkVkaXRpbmdDZWxsQ29tcG9uZW50IiwiY2VsbFRpdGxlIiwib3JpZ2luRm4iLCJjZWxsQ2xhc3NlcyIsInRpdGxlIiwiYWxpZ24iLCJpc0VtcHR5T2JqZWN0IiwiZWRpdGFibGVDZWxsIiwiaXNEZWZpbmVkIiwidG9TdHJpbmciLCJjb2x1bW5pbmRleCIsImNsaWNrdG9lZGl0IiwiZGJjbGlja3RvZWRpdCIsImRlZmF1bHRDb2x1bW5Db250ZXh0IiwidG9nZ2xlcyIsIkNvbHVtbkNvbnRleHQiLCJDb2x1bW5Qcm92aWRlciIsInRvZ2dsZUNvbHVtbnMiLCJoaWRkZW4iLCJTaW1wbGVSb3ciLCJ0ckF0dHJzIiwiRGF0YUNvbnRleHQiLCJEYXRhUHJvdmlkZXIiLCJmaWx0ZXJQcm9wcyIsInNlYXJjaFByb3BzIiwic29ydFByb3BzIiwicGFnaW5hdGlvblByb3BzIiwiV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyIiwiU2VsZWN0aW9uQ29udGV4dCIsIm5vblNlbGVjdGFibGUiLCJub3RTZWxlY3RhYmxlIiwic2VsZWN0ZWRTdHlsZSIsInNlbGVjdGVkQ2xhc3NlcyIsImJnQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJub3RTZWxlY3RhYmxlU3R5bGUiLCJub25TZWxlY3RhYmxlU3R5bGUiLCJub3RTZWxlY3RhYmxlQ2xhc3NlcyIsIm5vblNlbGVjdGFibGVDbGFzc2VzIiwicmVuZGVyV2l0aFNlbGVjdGlvbiIsImRpc3BsYXlOYW1lIiwiY3JlYXRlU2VsZWN0aW9uQ29udGV4dCIsImNvbXBhcmF0b3IiLCJhIiwiYiIsInJlc3VsdCIsImxvY2FsZUNvbXBhcmUiLCJzb3J0RnVuYyIsInNvcnRWYWx1ZSIsIl9kYXRhIiwidmFsdWVBIiwidmFsdWVCIiwiU09SVF9ERVNDIiwibmV4dE9yZGVyIiwiY3VycmVudFNvcnRDb2x1bW4iLCJzb3J0Q29sdW1uIiwiZGVmYXVsdE9yZGVyIiwic3BsaXROZXN0ZWQiLCJzdHIiLCJqb2luIiwicmVwbGFjZSIsInNwbGl0IiwiYXNzaWduIiwidGFyZ2V0IiwiZmllbGQiLCJkaXJlY3RHZXQiLCJwYXRoQXJyYXkiLCJjdXJyIiwicGF0aCIsInNldCIsInNhZmUiLCJsZXZlbCIsIkVycm9yIiwib2JqIiwiaXNPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsInByb3RvdHlwZSIsImNhbGwiLCJzbGVlcCIsImZuIiwibXMiLCJzZXRUaW1lb3V0IiwiZGVib3VuY2UiLCJmdW5jIiwid2FpdCIsImltbWVkaWF0ZSIsImNhbGxOb3ciLCJjbGVhclRpbWVvdXQiLCJhcHBseSIsImFyZ3VtZW50cyIsImxpc3QiLCJpbmRleE9mIiwiRXhwYW5zaW9uSGVhZGVyQ2VsbCIsImhhbmRsZUNoZWNrQm94Q2xpY2siLCJleHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlciIsImdldFNlbGVjdGlvblN1bW1hcnkiLCJhbGxSb3dzU2VsZWN0ZWQiLCJhbGxSb3dzTm90U2VsZWN0ZWQiLCJyb3dLZXlzIiwic2VsZWN0YWJsZUtleXMiLCJ1blNlbGVjdGFibGVLZXlzIiwiZ2V0U2VsZWN0ZWRSb3dzIiwiVkVSU0lPTiIsImciLCJnbG9iYWwiLCJGdW5jdGlvbiIsIkFycmF5UHJvdG8iLCJBcnJheSIsIk9ialByb3RvIiwiU3ltYm9sUHJvdG8iLCJTeW1ib2wiLCJzbGljZSIsInN1cHBvcnRzQXJyYXlCdWZmZXIiLCJBcnJheUJ1ZmZlciIsInN1cHBvcnRzRGF0YVZpZXciLCJEYXRhVmlldyIsIm5hdGl2ZUlzQXJyYXkiLCJpc0FycmF5IiwibmF0aXZlS2V5cyIsIm5hdGl2ZUNyZWF0ZSIsImNyZWF0ZSIsIm5hdGl2ZUlzVmlldyIsImlzVmlldyIsIl9pc05hTiIsImlzTmFOIiwiX2lzRmluaXRlIiwiaXNGaW5pdGUiLCJoYXNFbnVtQnVnIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJub25FbnVtZXJhYmxlUHJvcHMiLCJNQVhfQVJSQVlfSU5ERVgiLCJNYXRoIiwicG93IiwicmVzdEFyZ3VtZW50cyIsInN0YXJ0SW5kZXgiLCJtYXgiLCJhcmdzIiwiaXNOdWxsIiwiaXNVbmRlZmluZWQiLCJpc0Jvb2xlYW4iLCJpc0VsZW1lbnQiLCJub2RlVHlwZSIsInRhZ1Rlc3RlciIsIm5hbWUiLCJ0YWciLCJub2RlbGlzdCIsImRvY3VtZW50IiwiY2hpbGROb2RlcyIsIkludDhBcnJheSIsImhhc0RhdGFWaWV3QnVnIiwidGVzdCIsImlzSUUxMSIsIk1hcCIsImlzRGF0YVZpZXciLCJnZXRJbnQ4IiwiaXNBcnJheUJ1ZmZlciIsImJ1ZmZlciIsImlzQXJndW1lbnRzIiwiaXNTeW1ib2wiLCJwYXJzZUZsb2F0IiwiaXNOdW1iZXIiLCJjb25zdGFudCIsImNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrIiwiZ2V0U2l6ZVByb3BlcnR5IiwiY29sbGVjdGlvbiIsInNpemVQcm9wZXJ0eSIsInNoYWxsb3dQcm9wZXJ0eSIsInR5cGVkQXJyYXlQYXR0ZXJuIiwiY29sbGVjdE5vbkVudW1Qcm9wcyIsImhhc2giLCJsIiwiZW11bGF0ZWRTZXQiLCJub25FbnVtSWR4IiwicHJvdG8iLCJwcm9wIiwiaXNTdHJpbmciLCJpc01hdGNoIiwib2JqZWN0IiwiX2tleXMiLCJfIiwiX3dyYXBwZWQiLCJ0b0J1ZmZlclZpZXciLCJidWZmZXJTb3VyY2UiLCJVaW50OEFycmF5IiwiYnl0ZU9mZnNldCIsInZhbHVlT2YiLCJ0b0pTT04iLCJ0YWdEYXRhVmlldyIsImVxIiwiYVN0YWNrIiwiYlN0YWNrIiwiZGVlcEVxIiwiYXJlQXJyYXlzIiwiYUN0b3IiLCJiQ3RvciIsInBvcCIsImFsbEtleXMiLCJpZTExZmluZ2VycHJpbnQiLCJtZXRob2RzIiwid2Vha01hcE1ldGhvZHMiLCJmb3JFYWNoTmFtZSIsImNvbW1vbkluaXQiLCJtYXBUYWlsIiwibWFwTWV0aG9kcyIsInNldE1ldGhvZHMiLCJ2YWx1ZXMiLCJwYWlycyIsImludmVydCIsImZ1bmN0aW9ucyIsIm5hbWVzIiwiY3JlYXRlQXNzaWduZXIiLCJrZXlzRnVuYyIsImRlZmF1bHRzIiwic291cmNlIiwiYmFzZUNyZWF0ZSIsIkN0b3IiLCJleHRlbmRPd24iLCJjbG9uZSIsImV4dGVuZCIsInRhcCIsImludGVyY2VwdG9yIiwidG9QYXRoIiwiZGVlcEdldCIsImRlZmF1bHRWYWx1ZSIsImlkZW50aXR5IiwibWF0Y2hlciIsInByb3BlcnR5Iiwib3B0aW1pemVDYiIsImNvbnRleHQiLCJhcmdDb3VudCIsImFjY3VtdWxhdG9yIiwiYmFzZUl0ZXJhdGVlIiwiaXRlcmF0ZWUiLCJJbmZpbml0eSIsIm1hcE9iamVjdCIsInJlc3VsdHMiLCJjdXJyZW50S2V5Iiwibm9vcCIsInByb3BlcnR5T2YiLCJ0aW1lcyIsIm4iLCJhY2N1bSIsInJhbmRvbSIsIm1pbiIsImZsb29yIiwibm93IiwiZ2V0VGltZSIsImNyZWF0ZUVzY2FwZXIiLCJlc2NhcGVyIiwibWF0Y2giLCJ0ZXN0UmVnZXhwIiwiUmVnRXhwIiwicmVwbGFjZVJlZ2V4cCIsInN0cmluZyIsInRlbXBsYXRlU2V0dGluZ3MiLCJldmFsdWF0ZSIsImludGVycG9sYXRlIiwiZXNjYXBlIiwibm9NYXRjaCIsImVzY2FwZXMiLCJlc2NhcGVSZWdFeHAiLCJlc2NhcGVDaGFyIiwiYmFyZUlkZW50aWZpZXIiLCJ0ZW1wbGF0ZSIsInRleHQiLCJzZXR0aW5ncyIsIm9sZFNldHRpbmdzIiwib2Zmc2V0IiwiYXJndW1lbnQiLCJ2YXJpYWJsZSIsImZhbGxiYWNrIiwiaWRDb3VudGVyIiwidW5pcXVlSWQiLCJwcmVmaXgiLCJjaGFpbiIsImluc3RhbmNlIiwiX2NoYWluIiwiZXhlY3V0ZUJvdW5kIiwic291cmNlRnVuYyIsImJvdW5kRnVuYyIsImNhbGxpbmdDb250ZXh0IiwicGFydGlhbCIsImJvdW5kQXJncyIsInBsYWNlaG9sZGVyIiwiYm91bmQiLCJUeXBlRXJyb3IiLCJjYWxsQXJncyIsImZsYXR0ZW4iLCJpbnB1dCIsImRlcHRoIiwic3RyaWN0Iiwib3V0cHV0IiwiaWR4IiwiaiIsImxlbiIsIm1lbW9pemUiLCJoYXNoZXIiLCJjYWNoZSIsImFkZHJlc3MiLCJkZWxheSIsInRocm90dGxlIiwib3B0aW9ucyIsInByZXZpb3VzIiwibGF0ZXIiLCJsZWFkaW5nIiwidGhyb3R0bGVkIiwiX25vdyIsInJlbWFpbmluZyIsInRyYWlsaW5nIiwiY2FuY2VsIiwicGFzc2VkIiwiZGVib3VuY2VkIiwiX2FyZ3MiLCJ3cmFwIiwid3JhcHBlciIsIm5lZ2F0ZSIsInByZWRpY2F0ZSIsImNvbXBvc2UiLCJzdGFydCIsImFmdGVyIiwiYmVmb3JlIiwibWVtbyIsImZpbmRLZXkiLCJjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlciIsImRpciIsImFycmF5Iiwic29ydGVkSW5kZXgiLCJsb3ciLCJoaWdoIiwibWlkIiwiY3JlYXRlSW5kZXhGaW5kZXIiLCJwcmVkaWNhdGVGaW5kIiwiaXRlbSIsImZpbmRJbmRleCIsImZpbmRMYXN0SW5kZXgiLCJmaW5kV2hlcmUiLCJlYWNoIiwiY3JlYXRlUmVkdWNlIiwiaW5pdGlhbCIsInJlZHVjZXIiLCJyZWplY3QiLCJldmVyeSIsImZyb21JbmRleCIsImd1YXJkIiwiY29udGV4dFBhdGgiLCJtZXRob2QiLCJwbHVjayIsIndoZXJlIiwiY29tcHV0ZWQiLCJsYXN0Q29tcHV0ZWQiLCJ2IiwicmVTdHJTeW1ib2wiLCJ0b0FycmF5Iiwic2FtcGxlIiwibGFzdCIsInJhbmQiLCJ0ZW1wIiwic2h1ZmZsZSIsInNvcnRCeSIsImNyaXRlcmlhIiwibGVmdCIsInJpZ2h0IiwiZ3JvdXAiLCJiZWhhdmlvciIsInBhcnRpdGlvbiIsInBhc3MiLCJzaXplIiwia2V5SW5PYmoiLCJwaWNrIiwiZmlyc3QiLCJjb21wYWN0IiwiQm9vbGVhbiIsIm90aGVyQXJyYXlzIiwiZGlmZmVyZW5jZSIsInVuaXEiLCJpc1NvcnRlZCIsInNlZW4iLCJhcnJheXMiLCJpbnRlcnNlY3Rpb24iLCJhcmdzTGVuZ3RoIiwidW56aXAiLCJyYW5nZSIsInN0b3AiLCJzdGVwIiwiY2VpbCIsImNodW5rIiwiY291bnQiLCJjaGFpblJlc3VsdCIsIm1peGluIiwiZGF0YU9wZXJhdG9yIiwiaXNSZW1vdGVTb3J0IiwiaGFuZGxlU29ydENoYW5nZSIsImRlZmF1bHRTb3J0Q29udGV4dCIsIlNvcnRDb250ZXh0IiwiU29ydFByb3ZpZGVyIiwiaGFuZGxlU29ydCIsImRlZmF1bHRTb3J0RGlyZWN0aW9uIiwiZGVmYXVsdFNvcnRlZCIsImluaXRTb3J0IiwiY29tcG9uZW50RGlkTW91bnQiLCJzb3J0Q29sdW1ucyIsImhpZGRlblJvd3MiLCJTZWxlY3Rpb25IZWFkZXJDZWxsQ29tcCIsIkV4cGFuc2lvbkhlYWRlckNlbGxDb21wIiwiY3VyclNvcnQiLCJpc0xhc3RTb3J0aW5nIiwic29ydGluZyIsIkV4cGFuc2lvbkNvbnRleHQiLCJwYXJlbnRDbGFzc05hbWUiLCJyZW5kZXJXaXRoRXhwYW5zaW9uIiwiQm9keSIsIkVkaXRpbmdDZWxsIiwiY3JlYXRlRWRpdGluZ0NlbGwiLCJvblN0YXJ0RWRpdCIsIlJvd0NvbXBvbmVudCIsInNlbGVjdFJvd0VuYWJsZWQiLCJleHBhbmRSb3dFbmFibGVkIiwid2l0aFJvd0xldmVsQ2VsbEVkaXQiLCJpbmRpY2F0aW9uIiwiYWRkaXRpb25hbFJvd1Byb3BzIiwiYmFzZVJvd1Byb3BzIiwiX2V4dGVuZHMiLCJ0IiwiciIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiX3NldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfaW5oZXJpdHNMb29zZSIsIm8iLCJyZXBsYWNlQ2xhc3NOYW1lIiwib3JpZ0NsYXNzIiwiY2xhc3NUb1JlbW92ZSIsImZvcmNlUmVmbG93Iiwibm9kZSIsInNjcm9sbFRvcCIsIlVOTU9VTlRFRCIsIkVYSVRFRCIsIkVOVEVSSU5HIiwiRU5URVJFRCIsIkVYSVRJTkciLCJUcmFuc2l0aW9uIiwiX1JlYWN0JENvbXBvbmVudCIsIl90aGlzIiwiaW5pdGlhbFN0YXR1cyIsImlzTW91bnRpbmciLCJlbnRlciIsImFwcGVhclN0YXR1cyIsInVubW91bnRPbkV4aXQiLCJtb3VudE9uRW50ZXIiLCJzdGF0dXMiLCJuZXh0Q2FsbGJhY2siLCJfcmVmIiwiX3Byb3RvIiwidXBkYXRlU3RhdHVzIiwicHJldlByb3BzIiwibmV4dFN0YXR1cyIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY2FuY2VsTmV4dENhbGxiYWNrIiwiZ2V0VGltZW91dHMiLCJleGl0IiwibW91bnRpbmciLCJjdXJyZW50IiwicGVyZm9ybUVudGVyIiwicGVyZm9ybUV4aXQiLCJfdGhpczIiLCJhcHBlYXJpbmciLCJfcmVmMiIsIm1heWJlTm9kZSIsIm1heWJlQXBwZWFyaW5nIiwidGltZW91dHMiLCJlbnRlclRpbWVvdXQiLCJjb25maWciLCJzYWZlU2V0U3RhdGUiLCJvbkVudGVyZWQiLCJvbkVudGVyIiwib25FbnRlcmluZyIsIm9uVHJhbnNpdGlvbkVuZCIsIl90aGlzMyIsIm9uRXhpdCIsIm9uRXhpdGluZyIsIm5leHRTdGF0ZSIsImNhbGxiYWNrIiwic2V0TmV4dENhbGxiYWNrIiwiX3RoaXM0IiwiYWN0aXZlIiwiZXZlbnQiLCJoYW5kbGVyIiwiZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciIsImFkZEVuZExpc3RlbmVyIiwiX3JlZjMiLCJtYXliZU5leHRDYWxsYmFjayIsIl90aGlzJHByb3BzIiwiY2hpbGRQcm9wcyIsIlRyYW5zaXRpb25Hcm91cENvbnRleHQiLCJvbmx5IiwiY29udGV4dFR5cGUiLCJwcm9wVHlwZXMiLCJkZWZhdWx0UHJvcHMiLCJyZW1vdmVDbGFzcyIsImMiLCJlbGVtZW50IiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwic2V0QXR0cmlidXRlIiwiYmFzZVZhbCIsIl9sZW4iLCJfa2V5IiwiYXBwbGllZENsYXNzZXMiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQiLCJyZXNvbHZlQXJndW1lbnRzIiwicmVtb3ZlQ2xhc3NlcyIsImFkZENsYXNzIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MiIsIl90aGlzJHJlc29sdmVBcmd1bWVudDMiLCJnZXRDbGFzc05hbWVzIiwiaXNTdHJpbmdDbGFzc05hbWVzIiwiYmFzZUNsYXNzTmFtZSIsImFjdGl2ZUNsYXNzTmFtZSIsImRvbmVDbGFzc05hbWUiLCJwaGFzZSIsImFkZCIsImhhc0NsYXNzIiwiX2FkZENsYXNzIiwiX3RoaXMkYXBwbGllZENsYXNzZXMkIiwiYmFzZSIsImRvbmUiLCJnZXRDaGlsZE1hcHBpbmciLCJtYXBGbiIsIkNoaWxkcmVuIiwiY2hpbGQiLCJpc1ZhbGlkRWxlbWVudCIsIm1hcHBlciIsImdldFByb3AiLCJnZXROZXh0Q2hpbGRNYXBwaW5nIiwicHJldkNoaWxkTWFwcGluZyIsIm5leHRDaGlsZE1hcHBpbmciLCJwcmV2IiwibmV4dCIsImdldFZhbHVlRm9yS2V5IiwibmV4dEtleXNQZW5kaW5nIiwicGVuZGluZ0tleXMiLCJwcmV2S2V5IiwiY2hpbGRNYXBwaW5nIiwibmV4dEtleSIsInBlbmRpbmdOZXh0S2V5IiwibWVyZ2VDaGlsZE1hcHBpbmdzIiwiaGFzUHJldiIsImhhc05leHQiLCJwcmV2Q2hpbGQiLCJpc0xlYXZpbmciLCJjbG9uZUVsZW1lbnQiLCJUcmFuc2l0aW9uR3JvdXAiLCJoYW5kbGVFeGl0ZWQiLCJSZWZlcmVuY2VFcnJvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJjb250ZXh0VmFsdWUiLCJmaXJzdFJlbmRlciIsIm1vdW50ZWQiLCJjdXJyZW50Q2hpbGRNYXBwaW5nIiwiY29tcG9uZW50IiwiY2hpbGRGYWN0b3J5IiwiUmVwbGFjZVRyYW5zaXRpb24iLCJoYW5kbGVFbnRlciIsIl9sZW4yIiwiX2tleTIiLCJoYW5kbGVMaWZlY3ljbGUiLCJoYW5kbGVFbnRlcmluZyIsIl9sZW4zIiwiX2tleTMiLCJoYW5kbGVFbnRlcmVkIiwiX2xlbjQiLCJfa2V5NCIsImhhbmRsZUV4aXQiLCJfbGVuNSIsIl9rZXk1IiwiaGFuZGxlRXhpdGluZyIsIl9sZW42IiwiX2tleTYiLCJfbGVuNyIsIl9rZXk3Iiwib3JpZ2luYWxBcmdzIiwiX2NoaWxkJHByb3BzIiwiaW5Qcm9wIiwiX1JlYWN0JENoaWxkcmVuJHRvQXJyIiwic2Vjb25kIiwiX2xlYXZlUmVuZGVycyIsIl9lbnRlclJlbmRlcnMiLCJtb2RlcyIsImNhbGxIb29rIiwiX2VsZW1lbnQkcHJvcHMiLCJsZWF2ZVJlbmRlcnMiLCJjaGFuZ2VTdGF0ZSIsImVudGVyUmVuZGVycyIsIl9yZWY0IiwiU3dpdGNoVHJhbnNpdGlvbiIsImFwcGVhcmVkIiwib2xkQ2hpbGRyZW4iLCJuZXdDaGlsZHJlbiIsIl90aGlzJHN0YXRlIiwiUk9XX1NFTEVDVF9NVUxUSVBMRSIsIkNIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFIiwiQ0hFQ0tCT1hfU1RBVFVTX0NIRUNLRUQiLCJDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VEIiwiRklMVEVSU19QT1NJVElPTl9UT1AiLCJGSUxURVJTX1BPU0lUSU9OX0JPVFRPTSIsIklORElDQVRPUl9QT1NJVElPTl9SSUdIVCIsInJvd3MiLCJzZWxlY3Rpb24iLCJleHBhbmQiLCJtdXRhdGUiLCJoYXNPd24iLCJhcmciLCJhcHBlbmRDbGFzcyIsInBhcnNlVmFsdWUiLCJuZXdDbGFzcyIsImRlZmF1bHQiLCJSZWZsZWN0T3duS2V5cyIsIlIiLCJSZWZsZWN0IiwiUmVmbGVjdEFwcGx5IiwicmVjZWl2ZXIiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIk51bWJlcklzTmFOIiwiRXZlbnRFbWl0dGVyIiwiaW5pdCIsIm9uY2UiLCJlbWl0dGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJlcnJvckxpc3RlbmVyIiwiZXJyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZXNvbHZlciIsImV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lciIsImZsYWdzIiwib24iLCJhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlciIsIl9ldmVudHMiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJsaXN0ZW5lciIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJ0aGF0IiwiX2FkZExpc3RlbmVyIiwicHJlcGVuZCIsIm0iLCJleGlzdGluZyIsIndhcm5pbmciLCJuZXdMaXN0ZW5lciIsImVtaXQiLCJ3YXJuZWQiLCJ3IiwiY29uc29sZSIsIndhcm4iLCJvbmNlV3JhcHBlciIsImZpcmVkIiwid3JhcEZuIiwiX29uY2VXcmFwIiwid3JhcHBlZCIsIl9saXN0ZW5lcnMiLCJ1bndyYXAiLCJldmxpc3RlbmVyIiwiYXJyIiwicmV0IiwidW53cmFwTGlzdGVuZXJzIiwiYXJyYXlDbG9uZSIsImxpc3RlbmVyQ291bnQiLCJjb3B5IiwiYWRkRXZlbnRMaXN0ZW5lciIsIndyYXBMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJSYW5nZUVycm9yIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJkb0Vycm9yIiwiZXJyb3IiLCJlciIsIm1lc3NhZ2UiLCJsaXN0ZW5lcnMiLCJhZGRMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJvcmlnaW5hbExpc3RlbmVyIiwic2hpZnQiLCJzcGxpY2VPbmUiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJyYXdMaXN0ZW5lcnMiLCJldmVudE5hbWVzIiwiREVMQVlfRk9SX0RCQ0xJQ0siLCJjbGlja0ZuIiwiZXhwYW5kQnlDb2x1bW5Pbmx5IiwiY2xpY2tUb0V4cGFuZCIsIkNoZWNrQm94IiwiaW5kZXRlcm1pbmF0ZSIsIlNlbGVjdGlvbkhlYWRlckNlbGwiLCJjaGVja2VkU3RhdHVzIiwib25BbGxSb3dzU2VsZWN0Iiwic2VsZWN0aW9uSGVhZGVyUmVuZGVyZXIiLCJoaWRlU2VsZWN0QWxsIiwiaGVhZGVyQ29sdW1uU3R5bGUiLCJmb290ZXIiLCJjb2x1bW5EYXRhIiwiRm9vdGVyQ2VsbCIsImZvb3RlclRpdGxlIiwiZm9vdGVyQWxpZ24iLCJmb290ZXJGb3JtYXR0ZXIiLCJmb290ZXJFdmVudHMiLCJmb290ZXJTdHlsZSIsImZvb3RlckF0dHJzIiwiZGVsZWdhdGVFdmVudHMiLCJTZWxlY3Rpb25Qcm92aWRlciIsImhhbmRsZVJvd1NlbGVjdCIsIm9uU2VsZWN0IiwiY3VyclNlbGVjdGVkIiwiaXNIYW5kbGVSb3dTZWxlY3QiLCJmb3JjZVVwZGF0ZSIsImhhbmRsZUFsbFJvd3NTZWxlY3QiLCJpc1VuU2VsZWN0Iiwib25TZWxlY3RBbGwiLCJnZXRTZWxlY3RlZCIsIkNlbGwiLCJjcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbCIsImlzRHVtbXlGaWVsZCIsImZvcm1hdHRlciIsImZvcm1hdEV4dHJhRGF0YSIsIm9yaWdpbkZ1bmMiLCJvbkRvdWJsZUNsaWNrIiwiZWRpdENlbGwiLCJuZXdWYWx1ZSIsIkhlYWRlckNlbGwiLCJoZWFkZXJUaXRsZSIsImhlYWRlckZvcm1hdHRlciIsImhlYWRlckV2ZW50cyIsImhlYWRlclN0eWxlIiwiaGVhZGVyQXR0cnMiLCJoZWFkZXJTb3J0aW5nQ2xhc3NlcyIsImhlYWRlclNvcnRpbmdTdHlsZSIsInNvcnRDYXJldGZ1bmMiLCJjdXN0b21BdHRycyIsInNvcnRTeW1ib2wiLCJmaWx0ZXJFbGVtZW50IiwiY3VzdG9tQ2xpY2siLCJjdXN0b21LZXlEb3duIiwib25LZXlEb3duIiwib25LZXlVcCIsInNvcnRFbGVtZW50IiwiQmFzZSIsInJlZ2lzdGVyRXhwb3NlZEFQSSIsImV4cG9zZWRBUElFbWl0dGVyIiwicGF5bG9hZCIsInRhYmxlIiwic2VsZWN0aW9uQ29udGV4dCIsInNlYXJjaENvbnRleHQiLCJnZXRTZWFyY2hlZCIsImZpbHRlckNvbnRleHQiLCJnZXRGaWx0ZXJlZCIsImhhbmRsZVJlbW90ZVNvcnRDaGFuZ2UiLCJjb2x1bW5Ub2dnbGUiLCJDZWxsRWRpdENvbnRleHQiLCJpc1JlbW90ZUNlbGxFZGl0IiwiaGFuZGxlUmVtb3RlQ2VsbENoYW5nZSIsIkZpbHRlckNvbnRleHQiLCJpc1JlbW90ZUZpbHRlcmluZyIsImhhbmRsZVJlbW90ZUZpbHRlckNoYW5nZSIsIlBhZ2luYXRpb25Db250ZXh0Iiwic2VhcmNoIiwiU2VhcmNoQ29udGV4dCIsImlzUmVtb3RlU2VhcmNoIiwiaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlIiwic2V0RGVwZW5kZW5jeU1vZHVsZXMiLCJzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciIsInJlbW90ZUVtaXR0ZXIiLCJpc1JlbW90ZVBhZ2luYXRpb24iLCJoYW5kbGVSZW1vdGVQYWdlQ2hhbmdlIiwicmVuZGVyQmFzZSIsInJvb3RQcm9wcyIsImNvbHVtblRvZ2dsZVByb3BzIiwicmVuZGVyV2l0aENvbHVtbkNvbnRleHQiLCJiYXNlUHJvcHMiLCJyZW5kZXJXaXRoU2VsZWN0aW9uQ29udGV4dCIsInJlbmRlcldpdGhSb3dFeHBhbmRDb250ZXh0Iiwicm93RXhwYW5kQ29udGV4dCIsInJlbmRlcldpdGhQYWdpbmF0aW9uQ29udGV4dCIsInBhZ2luYXRpb25Db250ZXh0IiwidGFibGVJZCIsInJlbmRlcldpdGhTb3J0Q29udGV4dCIsInNvcnRDb250ZXh0IiwicmVuZGVyV2l0aFNlYXJjaENvbnRleHQiLCJzZWFyY2hUZXh0IiwiZGF0YUNoYW5nZUxpc3RlbmVyIiwicmVuZGVyV2l0aEZpbHRlckNvbnRleHQiLCJyZW5kZXJXaXRoQ2VsbEVkaXRDb250ZXh0IiwiY2VsbEVkaXRDb250ZXh0IiwiZGlzcGxheSIsImZpbHRlckNvbHVtbnMiLCJzaG93RmlsdGVyc1JvdyIsImdldE5ld2VzdFN0YXRlIiwicGFnZSIsInNpemVQZXJQYWdlIiwiZmlsdGVycyIsImN1cnJQYWdlIiwiY3VyclNpemVQZXJQYWdlIiwicmVtb3RlIiwib25UYWJsZUNoYW5nZSIsIm5ld1N0YXRlIiwicGFnZVN0YXJ0SW5kZXgiLCJpbmNsdWRlU2VsZWN0Q29sdW1uIiwiY29sdW1uTGVuIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkZWZpbml0aW9uIiwiZ2xvYmFsVGhpcyIsIndpbmRvdyIsInRvU3RyaW5nVGFnIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTableNg=t(require("react"),require("react-dom")):e.ReactBootstrapTableNg=t(e.React,e.ReactDOM)}(self,(e,t)=>(()=>{var n={105(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6310);class s extends i.default.Component{nodeRef;constructor(e){super(e),this.nodeRef=i.default.createRef()}render(){const{children:e,expanded:t=!1,onClosed:n,className:r="",...s}=this.props;return i.default.createElement("tr",null,i.default.createElement("td",{className:(0,o.default)("reset-expansion-style",r),...s},i.default.createElement(a.CSSTransition,{appear:!0,in:t,timeout:400,classNames:"row-expand-slide",onExited:n,nodeRef:this.nodeRef},i.default.createElement("div",{ref:this.nodeRef},i.default.createElement("div",{className:"row-expansion-style"},e)))))}}t.default=s},184(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6561),s=n(3761);t.default=({order:e})=>{const t=(0,o.default)("react-bootstrap-table-sort-order",{dropup:e===a.SORT_ASC});return i.default.createElement(s.BootstrapContext.Consumer,null,({bootstrap4:n})=>n?i.default.createElement("span",{className:`caret-4-${e}`,"data-testid":"sort-caret"}):i.default.createElement("span",{className:t,"data-testid":"sort-caret"},i.default.createElement("span",{className:"caret"})))}},285(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442));t.default=({content:e=null,colSpan:t=1})=>o.default.createElement("tr",null,o.default.createElement("td",{"data-toggle":"collapse",colSpan:t,className:"react-bs-table-no-data"},e))},286(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=r(n(3955));t.default=e=>{const{index:t,column:n,currFilters:r,onExternalFilter:a=()=>{},onFilter:s=()=>{}}=e,{filter:l}=n;let u;const c={},d={};if(c.style=d,n.headerAlign&&(d.textAlign=i.default.isFunction(n.headerAlign)?n.headerAlign(n,t):n.headerAlign),n.filterRenderer){const e=a(n,l?.props.type||"");u=n.filterRenderer(e,n)}else l&&(u=o.default.createElement(l.Filter,{...l.props,filterState:r[n.dataField],onFilter:s,column:n}));return o.default.createElement("th",c,u)}},338(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return class extends e{shouldUpdateByCellEditing(e){return!(!this.props.clickToEdit&&!this.props.dbclickToEdit)&&(e.editingRowIdx===e.rowIndex||this.props.editingRowIdx===e.rowIndex&&null===e.editingRowIdx||this.props.editingRowIdx===e.rowIndex)}shouldUpdatedBySelfProps(e){return this.props.className!==e.className||!o.default.isEqual(this.props.style,e.style)||!o.default.isEqual(this.props.attrs,e.attrs)}shouldUpdateByColumnsForSimpleCheck(e){if(this.props.columns.length!==e.columns.length)return!0;for(let t=0;t<this.props.columns.length;t+=1)if(!o.default.isEqual(this.props.columns[t],e.columns[t]))return!0;return!1}shouldUpdatedByNormalProps(e){return this.props.rowIndex!==e.rowIndex||this.props.editable!==e.editable||!o.default.isEqual(this.props.row,e.row)||this.props.columns.length!==e.columns.length}shouldUpdateChild(e){return this.shouldUpdateByCellEditing(e)||this.shouldUpdatedByNormalProps(e)}shouldRowContentUpdate(e){return this.shouldUpdateChild(e)||this.shouldUpdateByColumnsForSimpleCheck(e)}}};const o=r(n(3955))},355(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getRowByRowId=t.matchRow=void 0;const o=r(n(3955));t.matchRow=(e,t)=>n=>o.default.get(n,e)===t;t.getRowByRowId=(e,n,r)=>e.find((0,t.matchRow)(n,r))},629(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(885)),d=s(n(1439)),f=s(n(3955)),p=n(7351),h=s(n(3196)),m=s(n(338));class v extends((0,m.default)((0,p.RowEventDelegater)(l.Component))){clickNum=0;shouldUpdateRowContent=!1;constructor(e){super(e),this.createClickEventHandler=this.createClickEventHandler.bind(this)}shouldComponentUpdate(e){return this.props.selected!==e.selected||this.props.expanded!==e.expanded||this.props.expandable!==e.expandable||this.props.selectable!==e.selectable||this.props.selectRow.hideSelectColumn!==e.selectRow.hideSelectColumn||this.shouldUpdatedBySelfProps(e)?(this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),!0):(this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),this.shouldUpdateRowContent)}isRenderFunctionColumnInLeft(e=u.INDICATOR_POSITION_LEFT){return e===u.INDICATOR_POSITION_LEFT}render(){const{row:e,columns:t,keyField:n,rowIndex:r,style:o,className:i,attrs:a,selectRow:s,expandRow:u,expanded:p,expandable:m,selected:v,selectable:g,visibleColumnSize:E,tabIndexCell:_,...y}=this.props,b=f.default.get(e,n),{hideSelectColumn:x,selectColumnPosition:C,clickToSelect:O}=s,{showExpandColumn:w,expandColumnPosition:S}=u??{},R=this.delegate({...a});(O||u&&u.renderer)&&(R.onClick=this.createClickEventHandler(R.onClick));let P=r*E+1;const j=[l.default.createElement(h.default,{key:"row",row:e,columns:t,keyField:n,rowIndex:r,shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:_?P:-1,...y})];if(!x){const e=l.default.createElement(d.default,{...s,key:"selection-cell",rowKey:b,rowIndex:r,selected:v,disabled:!g,tabIndex:_?P+=1:-1});this.isRenderFunctionColumnInLeft(C)?j.unshift(e):j.push(e)}if(w){const e=l.default.createElement(c.default,{...u,key:"expand-cell",rowKey:b,rowIndex:r,expanded:p,expandable:m,tabIndex:_?P+=1:-1});this.isRenderFunctionColumnInLeft(S)?j.unshift(e):j.push(e)}return l.default.createElement("tr",{style:o,className:i,...R},j)}}t.default=v},885(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442));class l extends s.Component{handleClick=e=>{const{rowKey:t,expanded:n,onRowExpand:r,rowIndex:o}=this.props;e.stopPropagation(),r(t,!n,o,e)};shouldComponentUpdate(e){return this.props.rowIndex!==e.rowIndex||this.props.expanded!==e.expanded||this.props.rowKey!==e.rowKey||this.props.tabIndex!==e.tabIndex}render(){const{expanded:e,expandable:t,expandColumnRenderer:n,tabIndex:r,rowKey:o}=this.props,i={};return void 0!==r&&-1!==r&&(i.tabIndex=r),s.default.createElement("td",{className:"expand-cell",onClick:this.handleClick,"data-testid":"expand-cell",...i},n?n({expandable:t,expanded:e,rowKey:o}):t?e?"(-)":"(+)":"")}}t.default=l},1031(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=n(6561),s=r(n(6032)),l=r(n(1632)),u=r(n(9435)),c=r(n(7701)),d=r(n(5191)),f=r(n(4652)),p=r(n(3955));class h extends((0,f.default)(i.default.Component)){constructor(e){super(e),this.validateProps()}componentDidUpdate(e){e.onDataSizeChange&&!e.pagination&&e.data.length!==this.props.data.length&&e.onDataSizeChange({dataSize:this.props.data.length})}getData=()=>this.visibleRows();render(){const{loading:e,overlay:t}=this.props;if(t){const n=t(e);return i.default.createElement(n,null,this.renderTable())}return this.renderTable()}renderTable(){const{columns:e,keyField:t,tabIndexCell:n,id:r,classes:f,bootstrap4:h=!1,striped:m=!1,hover:v=!1,bordered:g=!0,condensed:E=!1,noDataIndication:_=null,caption:y,rowStyle:b,rowClasses:x,wrapperClasses:C,rowEvents:O,selectRow:w={mode:a.ROW_SELECT_DISABLED,selected:[],hideSelectColumn:!0},expandRow:S={renderer:void 0,expanded:[],nonExpandable:[]},cellEdit:R={mode:null,nonEditableRows:[]},filterPosition:P=a.FILTERS_POSITION_INLINE}=this.props,j=(0,o.default)("react-bootstrap-table",C),D=(0,o.default)("table",{"table-striped":m,"table-hover":v,"table-bordered":g,[h?"table-sm":"table-condensed"]:E},f),N=e.some(e=>e.filter||e.filterRenderer),T=p.default.filter(e,e=>p.default.has(e,"footer")).length>0,I=y&&i.default.createElement(l.default,{bootstrap4:h},y);return i.default.createElement("div",{className:j},i.default.createElement("table",{id:r,className:D},I,i.default.createElement(d.default,{columns:e,className:this.props.headerClasses,wrapperClasses:this.props.headerWrapperClasses,sortField:this.props.sortField,sortOrder:this.props.sortOrder,onSort:this.props.onSort,globalSortCaret:this.props.sort&&this.props.sort.sortCaret,onFilter:this.props.onFilter,currFilters:this.props.currFilters,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S,filterPosition:P}),N&&P!==a.FILTERS_POSITION_INLINE&&i.default.createElement(u.default,{columns:e,className:this.props.filtersClasses,onSort:this.props.onSort,onFilter:this.props.onFilter,currFilters:this.props.currFilters,filterPosition:this.props.filterPosition,onExternalFilter:this.props.onExternalFilter,selectRow:w,expandRow:S}),i.default.createElement(s.default,{className:this.props.bodyClasses,data:this.getData(),keyField:t,tabIndexCell:n,columns:e,isEmpty:this.isEmpty(),visibleColumnSize:this.visibleColumnSize(),noDataIndication:_,cellEdit:R,selectRow:w,expandRow:S,rowStyle:b,rowClasses:x,rowEvents:O}),T&&i.default.createElement(c.default,{data:this.getData(),columns:e,selectRow:w,expandRow:S,className:this.props.footerClasses})))}}t.default=h},1400(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561);t.default=e=>{const{renderContent:t,selectRow:n,expandRow:r,cellEl:a,...s}=e,l=(e=i.INDICATOR_POSITION_LEFT)=>e===i.INDICATOR_POSITION_LEFT,u=t()||[];return n&&!0!==n.hideSelectColumn&&(l(n.selectColumnPosition)?u.unshift(o.default.createElement(a,{key:"selection"})):u.push(o.default.createElement(a,{key:"selection"}))),r&&r.showExpandColumn&&(l(r.expandColumnPosition)?u.unshift(o.default.createElement(a,{key:"expansion"})):u.push(o.default.createElement(a,{key:"expansion"}))),o.default.createElement("tr",{...s},u)}},1439(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(3955)),d=n(3761);class f extends l.Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}shouldComponentUpdate(e){return this.props.rowIndex!==e.rowIndex||this.props.selected!==e.selected||this.props.disabled!==e.disabled||this.props.rowKey!==e.rowKey||this.props.tabIndex!==e.tabIndex||this.props.selectColumnStyle!==e.selectColumnStyle}handleClick(e){const{mode:t,rowKey:n,selected:r,onRowSelect:o,disabled:i,rowIndex:a=-1}=this.props;if(e.stopPropagation(),i)return;o(n,t===u.ROW_SELECT_SINGLE||!r,a,e)}render(){const{rowKey:e,mode:t,selected:n,disabled:r,tabIndex:o=-1,rowIndex:i,selectionRenderer:a,selectColumnStyle:s}=this.props,u={};return-1!==o&&(u.tabIndex=o),u.style=c.default.isFunction(s)?s({checked:n,disabled:r,rowindex:i,rowkey:e}):s,l.default.createElement(d.BootstrapContext.Consumer,null,({bootstrap4:o})=>l.default.createElement("td",{className:"selection-cell",onClick:this.handleClick,"data-testid":"selection-cell",...u},a?a({mode:t,checked:n,disabled:r??!1,rowindex:i,rowkey:e}):l.default.createElement("input",{type:t,checked:n,disabled:r??!1,className:o?"selection-input-4":"",onChange:()=>{}})))}}t.default=f},1590(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getExpandedRows=t.expandableKeys=t.isAnyExpands=void 0;const o=r(n(3955)),i=n(355);t.isAnyExpands=(e,t,n=[])=>{for(let r=0;r<e.length;r+=1){const i=o.default.get(e[r],t);if(void 0!==n.find(e=>e===i))return!0}return!1};t.expandableKeys=(e,t,n=[])=>0===n.length?e.map(e=>o.default.get(e,t)):e.filter(e=>!o.default.contains(n,o.default.get(e,t))).map(e=>o.default.get(e,t));t.getExpandedRows=(e,t,n)=>n.map(n=>(0,i.getRowByRowId)(e,t,n))},1630(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(6645)),c=s(n(3955)),d=l.default.createContext({expanded:[],isClosing:[],onClosed:()=>{},isAnyExpands:!1,onRowExpand:()=>{},onAllRowExpand:()=>{}});class f extends l.Component{state={expanded:this.props.expandRow.expanded||[],isClosing:this.props.expandRow.isClosing||[]};onClosed=e=>{this.setState({isClosing:this.state.isClosing.filter(t=>t!==e)})};static getDerivedStateFromProps(e,t){const{expandRow:n}=e;if(n){const{nonExpandable:e=[]}=n;let r=[...n.expanded||t.expanded];r=r.filter(t=>!c.default.contains(e,t));const o=t.expanded.reduce((e,t)=>(c.default.contains(r,t)||e.push(t),e),[]);return{expanded:r,isClosing:o}}return t}handleRowExpand=(e,t,n,r)=>{const{data:o,keyField:i,expandRow:{onExpand:a,onlyOneExpanding:s,nonExpandable:l}}=this.props;if(l&&c.default.contains(l,e))return;let d=[...this.state.expanded],f=[...this.state.isClosing];if(t?s?(f=f.concat(d),d=[e]):d.push(e):(f.push(e),d=d.filter(t=>t!==e)),a){a(u.default.getRowByRowId(o,i,e),t,n,r)}this.setState(()=>({expanded:d,isClosing:f}))};handleAllRowExpand=(e,t)=>{const{data:n,keyField:r,expandRow:{onExpandAll:o,nonExpandable:i}}=this.props,{expanded:a}=this.state;let s;s=t?a.concat(u.default.expandableKeys(n,r,i)):a.filter(e=>void 0===n.find(t=>c.default.get(t,r)===e)),o&&o(t,u.default.getExpandedRows(n,r,s),e),this.setState(()=>({expanded:s}))};render(){const{data:e,keyField:t}=this.props;return l.default.createElement(d.Provider,{value:{...this.props.expandRow,nonExpandable:this.props.expandRow.nonExpandable,expanded:this.state.expanded,isClosing:this.state.isClosing,onClosed:this.onClosed,isAnyExpands:u.default.isAnyExpands(e,t,this.state.expanded),onRowExpand:this.handleRowExpand,onAllRowExpand:this.handleAllRowExpand}},this.props.children)}}t.default=()=>({Provider:f,Consumer:d.Consumer})},1632(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442));t.default=e=>{if(!e.children)return null;return e.bootstrap4?o.default.createElement("caption",{style:{captionSide:"top"}},e.children):o.default.createElement("caption",null,e.children)}},1859(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CellEventDelegater=void 0;const o=r(n(3955)),i=["onClick","onDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","onAuxClick"];t.CellEventDelegater=e=>class extends e{constructor(...e){super(...e),this.createDefaultEventHandler=this.createDefaultEventHandler.bind(this)}createDefaultEventHandler(e){return t=>{const{column:n,columnIndex:r,index:o}=this.props;e(t,n,void 0!==r?r:o)}}delegate(e={}){const t={...e};return Object.keys(e).forEach(n=>{o.default.includes(i,n)&&(t[n]=this.createDefaultEventHandler(e[n]))}),t}}},1965(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(3761);t.default=()=>o.default.createElement(i.BootstrapContext.Consumer,null,({bootstrap4:e})=>e?o.default.createElement("span",{className:"order-4"}):o.default.createElement("span",{className:"order"},o.default.createElement("span",{className:"dropdown"},o.default.createElement("span",{className:"caret"})),o.default.createElement("span",{className:"dropup"},o.default.createElement("span",{className:"caret"}))))},2190(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeConvert=void 0;const r=n(6561);t.typeConvert=(e,t)=>e===r.TYPE_STRING?String(t):e===r.TYPE_NUMBER?Number(t):e===r.TYPE_BOOLEAN?"boolean"==typeof t?t:"true"===t:e===r.TYPE_DATE?new Date(t):t},3196(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(8232)),c=s(n(3955));class d extends l.Component{shouldComponentUpdate(e){return void 0===e.shouldUpdate||e.shouldUpdate}render(){const{row:e,keyField:t,columns:n,rowIndex:r,isEditable:o,editingRowIdx:i,editingColIdx:a,atstart:s,clickToEdit:d,dbclickToEdit:f,EditingCellComponent:p,tabIndexStart:h}=this.props;let m=h;return n?.map((n,v)=>{const{dataField:g}=n,E=c.default.get(e,g);if(r===i&&v===a&&p)return l.default.createElement(p,{key:`${E}-${v}-editing`,row:e,rowIndex:r,column:n,columnIndex:v});let _,y={},b={};if("function"==typeof n.attrs?b={...n.attrs(E,e,r,v)}:"object"==typeof n.attrs&&null!==n.attrs&&(b={...n.attrs}),n.events){const t={...n.events};Object.keys(t).forEach(n=>{const o=t[n];t[n]=(...t)=>o(...t,e,r)}),b={...b,...t}}const x=c.default.isFunction(n.classes)?n.classes(E,e,r,v):n.classes;n.style&&(y=c.default.isFunction(n.style)?n.style(E,e,r,v):n.style,y={...y}),n.title&&(_=c.default.isFunction(n.title)?n.title(E,e,r,v):E,b.title=_),n.align&&(y.textAlign=c.default.isFunction(n.align)?n.align(E,e,r,v):n.align),x&&(b.className=x),c.default.isEmptyObject(y)||(b.style=y);let C=!c.default.isDefined(n.editable)||n.editable;return n.dataField!==t&&o||(C=!1),c.default.isFunction(n.editable)&&(C=n.editable(E,e,r,v)),"number"==typeof h&&-1!==h&&(b.tabIndex=m,m+=1),l.default.createElement(u.default,{key:`${E}-${v}`,row:e,editable:C.toString(),rowindex:r??0,columnindex:v,column:n,atstart:s,clicktoedit:d?d.toString():"false",dbclicktoedit:f?f.toString():"false",...b})})}}t.default=d},3285(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i={columns:[],toggles:void 0},a=o.default.createContext(i),s=({columns:e,toggles:t,children:n})=>{let r;return r=t?e.filter(e=>t[e.dataField]):e.filter(e=>!e.hidden),o.default.createElement(a.Provider,{value:{columns:r}},n)};t.default=()=>({Provider:s,Consumer:a.Consumer})},3502(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(7351),c=s(n(3196)),d=s(n(338));class f extends((0,d.default)((0,u.RowEventDelegater)(l.Component))){shouldUpdateRowContent=!1;shouldComponentUpdate(e){return this.shouldUpdateRowContent=!1,this.shouldUpdateRowContent=this.shouldRowContentUpdate(e),!!this.shouldUpdateRowContent||this.shouldUpdatedBySelfProps(e)}render(){const{editable:e=!0,className:t,style:n={},attrs:r={},visibleColumnSize:o,tabIndexCell:i,...a}=this.props,s=this.delegate(r),u=this.props.rowIndex*o+1;return l.default.createElement("tr",{style:n,className:t,...s},l.default.createElement(c.default,{shouldUpdate:this.shouldUpdateRowContent,tabIndexStart:i?u:-1,...a}))}}t.default=f},3519(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=s(n(3955)),c=l.default.createContext({data:[],getData:()=>[]});class d extends l.Component{constructor(e){super(e),this.state={data:e.data}}getData=(e,t,n,r)=>r?r.data:n?n.data:t?t.data:e&&e.data.length<this.props.data.length&&!u.default.isEmpty(Object.keys(e.currFilters))?e.data:this.props.data;render(){return l.default.createElement(c.Provider,{value:{data:this.state.data,getData:this.getData}},this.props.children)}}t.default=()=>({Provider:d,Consumer:c.Consumer})},3689(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=t=>i.default.createElement(l.Consumer,null,n=>((t,n)=>{const r=t.value,a=s.default.contains(n.selected,r),l=!n.nonSelectable||!s.default.contains(n.nonSelectable,r),u=s.default.contains(n.nonSelectable,r);let{style:c,className:d}=t;if(a){const e=s.default.isFunction(n.style)?n.style(t.row,t.rowIndex):n.style,r=s.default.isFunction(n.classes)?n.classes(t.row,t.rowIndex):n.classes;c={...c,...e},d=(0,o.default)(d,r)||void 0,n.bgColor&&(c=c||{},c.backgroundColor=s.default.isFunction(n.bgColor)?n.bgColor(t.row,t.rowIndex):n.bgColor)}if(u){const e=s.default.isFunction(n.nonSelectableStyle)?n.nonSelectableStyle(t.row,t.rowIndex):n.nonSelectableStyle,r=s.default.isFunction(n.nonSelectableClasses)?n.nonSelectableClasses(t.row,t.rowIndex):n.nonSelectableClasses;c={...c,...e},d=(0,o.default)(d,r)||void 0}return i.default.createElement(e,{...t,style:c,className:d,selectRow:n,selected:a,selectable:l})})(t,n));return t.displayName="WithSelectionRowConsumer",t};const o=r(n(6942)),i=r(n(5442)),a=n(8145),s=r(n(3955)),l=(0,a.createSelectionContext)()},3742(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.nextOrder=t.sort=void 0;const o=n(6561),i=r(n(3955));function a(e,t){let n;return n="string"==typeof t?t.localeCompare(e):e>t?-1:e<t?1:0,n}t.sort=(e,t,{dataField:n,sortFunc:r,sortValue:s})=>{const l=[...e];return l.sort((e,l)=>{let u,c=i.default.get(e,n),d=i.default.get(l,n);return s?(c=s(c,e),d=s(d,l)):(c=i.default.isDefined(c)?c:"",d=i.default.isDefined(d)?d:""),u=r?r(c,d,t,n,e,l):t===o.SORT_DESC?a(c,d):a(d,c),u}),l};t.nextOrder=(e,{sortOrder:t,sortColumn:n},r=o.SORT_DESC)=>n&&e.dataField===n.dataField?t===o.SORT_DESC?o.SORT_ASC:o.SORT_DESC:r},3761(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.BootstrapContext=void 0;const o=r(n(5442));t.BootstrapContext=o.default.createContext({bootstrap4:!0})},3955(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(4523));function i(e){return[e].join(".").replace(/\[/g,".").replace(/\]/g,"").split(".")}t.default=Object.assign(o.default,{get:function(e,t){const n=e[t];if(null!=n)return n;const r=i(t);let o;try{o=r.reduce((e,t)=>e[t],e)}catch(e){}return o},set:function(e,t,n,r=!1){const o=i(t);let a=0;o.reduce((e,t)=>{if(a+=1,void 0===e[t]){if(!r)throw new Error(`${e}.${t} is undefined`);return e[t]={},e[t]}return a===o.length?(e[t]=n,n):e[t]},e)},isDefined:function(e){return null!=e},isEmptyObject:function(e){if(!o.default.isObject(e))return!1;const t=Object.prototype.hasOwnProperty,n=Object.keys(e);for(let r=0;r<n.length;r+=1)if(t.call(e,n[r]))return!1;return!0},sleep:function(e,t){return setTimeout(()=>e(),t)},debounce:function(e,t,n){let r;return()=>{const o=n&&!r;clearTimeout(r),r=setTimeout(()=>{r=null,n||e.apply(this,arguments)},t||0),o&&e.apply(this,arguments)}},contains:function(e,t){return o.default.includes?o.default.includes(e,t):e.indexOf(t)>-1}})},3997(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442));class l extends s.Component{constructor(e){super(e),this.handleCheckBoxClick=this.handleCheckBoxClick.bind(this)}handleCheckBoxClick(e){const{isAnyExpands:t,onAllRowExpand:n}=this.props;n(e,!t)}render(){const{isAnyExpands:e,expandHeaderColumnRenderer:t}=this.props,n={onClick:this.handleCheckBoxClick};return s.default.createElement("th",{className:"expand-cell-header","data-row-selection":!0,...n},t?t({isAnyExpands:e??!1}):e?"(-)":"(+)")}}t.default=l},4130(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getSelectedRows=t.unSelectableKeys=t.selectableKeys=t.getSelectionSummary=void 0;const o=r(n(3955)),i=n(355);t.getSelectionSummary=(e=[],t,n=[])=>{let r=e.length>0,i=!0;const a=e.map(e=>o.default.get(e,t));for(let e=0;e<a.length;e+=1){const t=a[e];void 0===n.find(e=>e===t)?r=!1:i=!1}return{allRowsSelected:r,allRowsNotSelected:i}};t.selectableKeys=(e=[],t,n=[])=>0===n.length?e.map(e=>o.default.get(e,t)):e.filter(e=>!o.default.contains(n,o.default.get(e,t))).map(e=>o.default.get(e,t));t.unSelectableKeys=(e,t=[])=>0===t?.length?[]:e.filter(e=>o.default.contains(t,e));t.getSelectedRows=(e=[],t,n)=>n.map(n=>(0,i.getRowByRowId)(e,t,n)).filter(e=>!!e)},4523(e,t,n){"use strict";n.r(t),n.d(t,{VERSION:()=>o,after:()=>Mt,all:()=>en,allKeys:()=>ve,any:()=>tn,assign:()=>Me,before:()=>Ft,bind:()=>xt,bindAll:()=>wt,chain:()=>Et,chunk:()=>Ln,clone:()=>Le,collect:()=>Xt,compact:()=>Rn,compose:()=>It,constant:()=>Q,contains:()=>nn,countBy:()=>gn,create:()=>Ae,debounce:()=>Dt,default:()=>Wn,defaults:()=>Fe,defer:()=>Pt,delay:()=>Rt,detect:()=>Vt,difference:()=>jn,drop:()=>wn,each:()=>$t,escape:()=>at,every:()=>en,extend:()=>Ie,extendOwn:()=>Me,filter:()=>Qt,find:()=>Vt,findIndex:()=>Bt,findKey:()=>At,findLastIndex:()=>Ut,findWhere:()=>qt,first:()=>On,flatten:()=>Pn,foldl:()=>Yt,foldr:()=>Jt,forEach:()=>$t,functions:()=>Ne,get:()=>We,groupBy:()=>mn,has:()=>ze,head:()=>On,identity:()=>Ve,include:()=>nn,includes:()=>nn,indexBy:()=>vn,indexOf:()=>Wt,initial:()=>Cn,inject:()=>Yt,intersection:()=>In,invert:()=>De,invoke:()=>rn,isArguments:()=>G,isArray:()=>q,isArrayBuffer:()=>A,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>le,isEqual:()=>me,isError:()=>F,isFinite:()=>Y,isFunction:()=>U,isMap:()=>Oe,isMatch:()=>ue,isNaN:()=>J,isNull:()=>S,isNumber:()=>T,isObject:()=>w,isRegExp:()=>M,isSet:()=>Se,isString:()=>N,isSymbol:()=>k,isTypedArray:()=>oe,isUndefined:()=>R,isWeakMap:()=>we,isWeakSet:()=>Re,iteratee:()=>Ye,keys:()=>se,last:()=>Sn,lastIndexOf:()=>zt,map:()=>Xt,mapObject:()=>Qe,matcher:()=>qe,matches:()=>qe,max:()=>sn,memoize:()=>St,methods:()=>Ne,min:()=>ln,mixin:()=>Un,negate:()=>Tt,noop:()=>Ze,now:()=>rt,object:()=>kn,omit:()=>xn,once:()=>kt,pairs:()=>je,partial:()=>bt,partition:()=>En,pick:()=>bn,pluck:()=>on,property:()=>$e,propertyOf:()=>et,random:()=>nt,range:()=>An,reduce:()=>Yt,reduceRight:()=>Jt,reject:()=>Zt,rest:()=>wn,restArguments:()=>O,result:()=>mt,sample:()=>dn,select:()=>Qt,shuffle:()=>fn,size:()=>_n,some:()=>tn,sortBy:()=>pn,sortedIndex:()=>Ht,tail:()=>wn,take:()=>On,tap:()=>Be,template:()=>ht,templateSettings:()=>lt,throttle:()=>jt,times:()=>tt,toArray:()=>cn,toPath:()=>Ue,transpose:()=>Mn,unescape:()=>st,union:()=>Tn,uniq:()=>Nn,unique:()=>Nn,uniqueId:()=>gt,unzip:()=>Mn,values:()=>Pe,where:()=>an,without:()=>Dn,wrap:()=>Nt,zip:()=>Fn});var r={};n.r(r),n.d(r,{VERSION:()=>o,after:()=>Mt,all:()=>en,allKeys:()=>ve,any:()=>tn,assign:()=>Me,before:()=>Ft,bind:()=>xt,bindAll:()=>wt,chain:()=>Et,chunk:()=>Ln,clone:()=>Le,collect:()=>Xt,compact:()=>Rn,compose:()=>It,constant:()=>Q,contains:()=>nn,countBy:()=>gn,create:()=>Ae,debounce:()=>Dt,default:()=>Hn,defaults:()=>Fe,defer:()=>Pt,delay:()=>Rt,detect:()=>Vt,difference:()=>jn,drop:()=>wn,each:()=>$t,escape:()=>at,every:()=>en,extend:()=>Ie,extendOwn:()=>Me,filter:()=>Qt,find:()=>Vt,findIndex:()=>Bt,findKey:()=>At,findLastIndex:()=>Ut,findWhere:()=>qt,first:()=>On,flatten:()=>Pn,foldl:()=>Yt,foldr:()=>Jt,forEach:()=>$t,functions:()=>Ne,get:()=>We,groupBy:()=>mn,has:()=>ze,head:()=>On,identity:()=>Ve,include:()=>nn,includes:()=>nn,indexBy:()=>vn,indexOf:()=>Wt,initial:()=>Cn,inject:()=>Yt,intersection:()=>In,invert:()=>De,invoke:()=>rn,isArguments:()=>G,isArray:()=>q,isArrayBuffer:()=>A,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>le,isEqual:()=>me,isError:()=>F,isFinite:()=>Y,isFunction:()=>U,isMap:()=>Oe,isMatch:()=>ue,isNaN:()=>J,isNull:()=>S,isNumber:()=>T,isObject:()=>w,isRegExp:()=>M,isSet:()=>Se,isString:()=>N,isSymbol:()=>k,isTypedArray:()=>oe,isUndefined:()=>R,isWeakMap:()=>we,isWeakSet:()=>Re,iteratee:()=>Ye,keys:()=>se,last:()=>Sn,lastIndexOf:()=>zt,map:()=>Xt,mapObject:()=>Qe,matcher:()=>qe,matches:()=>qe,max:()=>sn,memoize:()=>St,methods:()=>Ne,min:()=>ln,mixin:()=>Un,negate:()=>Tt,noop:()=>Ze,now:()=>rt,object:()=>kn,omit:()=>xn,once:()=>kt,pairs:()=>je,partial:()=>bt,partition:()=>En,pick:()=>bn,pluck:()=>on,property:()=>$e,propertyOf:()=>et,random:()=>nt,range:()=>An,reduce:()=>Yt,reduceRight:()=>Jt,reject:()=>Zt,rest:()=>wn,restArguments:()=>O,result:()=>mt,sample:()=>dn,select:()=>Qt,shuffle:()=>fn,size:()=>_n,some:()=>tn,sortBy:()=>pn,sortedIndex:()=>Ht,tail:()=>wn,take:()=>On,tap:()=>Be,template:()=>ht,templateSettings:()=>lt,throttle:()=>jt,times:()=>tt,toArray:()=>cn,toPath:()=>Ue,transpose:()=>Mn,unescape:()=>st,union:()=>Tn,uniq:()=>Nn,unique:()=>Nn,uniqueId:()=>gt,unzip:()=>Mn,values:()=>Pe,where:()=>an,without:()=>Dn,wrap:()=>Nt,zip:()=>Fn});var o="1.13.7",i="object"==typeof self&&self.self===self&&self||"object"==typeof n.g&&n.g.global===n.g&&n.g||Function("return this")()||{},a=Array.prototype,s=Object.prototype,l="undefined"!=typeof Symbol?Symbol.prototype:null,u=a.push,c=a.slice,d=s.toString,f=s.hasOwnProperty,p="undefined"!=typeof ArrayBuffer,h="undefined"!=typeof DataView,m=Array.isArray,v=Object.keys,g=Object.create,E=p&&ArrayBuffer.isView,_=isNaN,y=isFinite,b=!{toString:null}.propertyIsEnumerable("toString"),x=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],C=Math.pow(2,53)-1;function O(e,t){return t=null==t?e.length-1:+t,function(){for(var n=Math.max(arguments.length-t,0),r=Array(n),o=0;o<n;o++)r[o]=arguments[o+t];switch(t){case 0:return e.call(this,r);case 1:return e.call(this,arguments[0],r);case 2:return e.call(this,arguments[0],arguments[1],r)}var i=Array(t+1);for(o=0;o<t;o++)i[o]=arguments[o];return i[t]=r,e.apply(this,i)}}function w(e){var t=typeof e;return"function"===t||"object"===t&&!!e}function S(e){return null===e}function R(e){return void 0===e}function P(e){return!0===e||!1===e||"[object Boolean]"===d.call(e)}function j(e){return!(!e||1!==e.nodeType)}function D(e){var t="[object "+e+"]";return function(e){return d.call(e)===t}}const N=D("String"),T=D("Number"),I=D("Date"),M=D("RegExp"),F=D("Error"),k=D("Symbol"),A=D("ArrayBuffer");var L=D("Function"),B=i.document&&i.document.childNodes;"object"!=typeof Int8Array&&"function"!=typeof B&&(L=function(e){return"function"==typeof e||!1});const U=L,H=D("Object");var K=h&&(!/\[native code\]/.test(String(DataView))||H(new DataView(new ArrayBuffer(8)))),W="undefined"!=typeof Map&&H(new Map),z=D("DataView");const V=K?function(e){return null!=e&&U(e.getInt8)&&A(e.buffer)}:z,q=m||D("Array");function $(e,t){return null!=e&&f.call(e,t)}var X=D("Arguments");!function(){X(arguments)||(X=function(e){return $(e,"callee")})}();const G=X;function Y(e){return!k(e)&&y(e)&&!isNaN(parseFloat(e))}function J(e){return T(e)&&_(e)}function Q(e){return function(){return e}}function Z(e){return function(t){var n=e(t);return"number"==typeof n&&n>=0&&n<=C}}function ee(e){return function(t){return null==t?void 0:t[e]}}const te=ee("byteLength"),ne=Z(te);var re=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;const oe=p?function(e){return E?E(e)&&!V(e):ne(e)&&re.test(d.call(e))}:Q(!1),ie=ee("length");function ae(e,t){t=function(e){for(var t={},n=e.length,r=0;r<n;++r)t[e[r]]=!0;return{contains:function(e){return!0===t[e]},push:function(n){return t[n]=!0,e.push(n)}}}(t);var n=x.length,r=e.constructor,o=U(r)&&r.prototype||s,i="constructor";for($(e,i)&&!t.contains(i)&&t.push(i);n--;)(i=x[n])in e&&e[i]!==o[i]&&!t.contains(i)&&t.push(i)}function se(e){if(!w(e))return[];if(v)return v(e);var t=[];for(var n in e)$(e,n)&&t.push(n);return b&&ae(e,t),t}function le(e){if(null==e)return!0;var t=ie(e);return"number"==typeof t&&(q(e)||N(e)||G(e))?0===t:0===ie(se(e))}function ue(e,t){var n=se(t),r=n.length;if(null==e)return!r;for(var o=Object(e),i=0;i<r;i++){var a=n[i];if(t[a]!==o[a]||!(a in o))return!1}return!0}function ce(e){return e instanceof ce?e:this instanceof ce?void(this._wrapped=e):new ce(e)}function de(e){return new Uint8Array(e.buffer||e,e.byteOffset||0,te(e))}ce.VERSION=o,ce.prototype.value=function(){return this._wrapped},ce.prototype.valueOf=ce.prototype.toJSON=ce.prototype.value,ce.prototype.toString=function(){return String(this._wrapped)};var fe="[object DataView]";function pe(e,t,n,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return!1;if(e!=e)return t!=t;var o=typeof e;return("function"===o||"object"===o||"object"==typeof t)&&he(e,t,n,r)}function he(e,t,n,r){e instanceof ce&&(e=e._wrapped),t instanceof ce&&(t=t._wrapped);var o=d.call(e);if(o!==d.call(t))return!1;if(K&&"[object Object]"==o&&V(e)){if(!V(t))return!1;o=fe}switch(o){case"[object RegExp]":case"[object String]":return""+e==""+t;case"[object Number]":return+e!=+e?+t!=+t:0===+e?1/+e==1/t:+e===+t;case"[object Date]":case"[object Boolean]":return+e===+t;case"[object Symbol]":return l.valueOf.call(e)===l.valueOf.call(t);case"[object ArrayBuffer]":case fe:return he(de(e),de(t),n,r)}var i="[object Array]"===o;if(!i&&oe(e)){if(te(e)!==te(t))return!1;if(e.buffer===t.buffer&&e.byteOffset===t.byteOffset)return!0;i=!0}if(!i){if("object"!=typeof e||"object"!=typeof t)return!1;var a=e.constructor,s=t.constructor;if(a!==s&&!(U(a)&&a instanceof a&&U(s)&&s instanceof s)&&"constructor"in e&&"constructor"in t)return!1}r=r||[];for(var u=(n=n||[]).length;u--;)if(n[u]===e)return r[u]===t;if(n.push(e),r.push(t),i){if((u=e.length)!==t.length)return!1;for(;u--;)if(!pe(e[u],t[u],n,r))return!1}else{var c,f=se(e);if(u=f.length,se(t).length!==u)return!1;for(;u--;)if(!$(t,c=f[u])||!pe(e[c],t[c],n,r))return!1}return n.pop(),r.pop(),!0}function me(e,t){return pe(e,t)}function ve(e){if(!w(e))return[];var t=[];for(var n in e)t.push(n);return b&&ae(e,t),t}function ge(e){var t=ie(e);return function(n){if(null==n)return!1;var r=ve(n);if(ie(r))return!1;for(var o=0;o<t;o++)if(!U(n[e[o]]))return!1;return e!==xe||!U(n[Ee])}}var Ee="forEach",_e=["clear","delete"],ye=["get","has","set"],be=_e.concat(Ee,ye),xe=_e.concat(ye),Ce=["add"].concat(_e,Ee,"has");const Oe=W?ge(be):D("Map"),we=W?ge(xe):D("WeakMap"),Se=W?ge(Ce):D("Set"),Re=D("WeakSet");function Pe(e){for(var t=se(e),n=t.length,r=Array(n),o=0;o<n;o++)r[o]=e[t[o]];return r}function je(e){for(var t=se(e),n=t.length,r=Array(n),o=0;o<n;o++)r[o]=[t[o],e[t[o]]];return r}function De(e){for(var t={},n=se(e),r=0,o=n.length;r<o;r++)t[e[n[r]]]=n[r];return t}function Ne(e){var t=[];for(var n in e)U(e[n])&&t.push(n);return t.sort()}function Te(e,t){return function(n){var r=arguments.length;if(t&&(n=Object(n)),r<2||null==n)return n;for(var o=1;o<r;o++)for(var i=arguments[o],a=e(i),s=a.length,l=0;l<s;l++){var u=a[l];t&&void 0!==n[u]||(n[u]=i[u])}return n}}const Ie=Te(ve),Me=Te(se),Fe=Te(ve,!0);function ke(e){if(!w(e))return{};if(g)return g(e);var t=function(){};t.prototype=e;var n=new t;return t.prototype=null,n}function Ae(e,t){var n=ke(e);return t&&Me(n,t),n}function Le(e){return w(e)?q(e)?e.slice():Ie({},e):e}function Be(e,t){return t(e),e}function Ue(e){return q(e)?e:[e]}function He(e){return ce.toPath(e)}function Ke(e,t){for(var n=t.length,r=0;r<n;r++){if(null==e)return;e=e[t[r]]}return n?e:void 0}function We(e,t,n){var r=Ke(e,He(t));return R(r)?n:r}function ze(e,t){for(var n=(t=He(t)).length,r=0;r<n;r++){var o=t[r];if(!$(e,o))return!1;e=e[o]}return!!n}function Ve(e){return e}function qe(e){return e=Me({},e),function(t){return ue(t,e)}}function $e(e){return e=He(e),function(t){return Ke(t,e)}}function Xe(e,t,n){if(void 0===t)return e;switch(null==n?3:n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,o){return e.call(t,n,r,o)};case 4:return function(n,r,o,i){return e.call(t,n,r,o,i)}}return function(){return e.apply(t,arguments)}}function Ge(e,t,n){return null==e?Ve:U(e)?Xe(e,t,n):w(e)&&!q(e)?qe(e):$e(e)}function Ye(e,t){return Ge(e,t,1/0)}function Je(e,t,n){return ce.iteratee!==Ye?ce.iteratee(e,t):Ge(e,t,n)}function Qe(e,t,n){t=Je(t,n);for(var r=se(e),o=r.length,i={},a=0;a<o;a++){var s=r[a];i[s]=t(e[s],s,e)}return i}function Ze(){}function et(e){return null==e?Ze:function(t){return We(e,t)}}function tt(e,t,n){var r=Array(Math.max(0,e));t=Xe(t,n,1);for(var o=0;o<e;o++)r[o]=t(o);return r}function nt(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))}ce.toPath=Ue,ce.iteratee=Ye;const rt=Date.now||function(){return(new Date).getTime()};function ot(e){var t=function(t){return e[t]},n="(?:"+se(e).join("|")+")",r=RegExp(n),o=RegExp(n,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(o,t):e}}const it={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},at=ot(it),st=ot(De(it)),lt=ce.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ut=/(.)^/,ct={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},dt=/\\|'|\r|\n|\u2028|\u2029/g;function ft(e){return"\\"+ct[e]}var pt=/^\s*(\w|\$)+\s*$/;function ht(e,t,n){!t&&n&&(t=n),t=Fe({},t,ce.templateSettings);var r=RegExp([(t.escape||ut).source,(t.interpolate||ut).source,(t.evaluate||ut).source].join("|")+"|$","g"),o=0,i="__p+='";e.replace(r,function(t,n,r,a,s){return i+=e.slice(o,s).replace(dt,ft),o=s+t.length,n?i+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?i+="'+\n((__t=("+r+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n";var a,s=t.variable;if(s){if(!pt.test(s))throw new Error("variable is not a bare identifier: "+s)}else i="with(obj||{}){\n"+i+"}\n",s="obj";i="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{a=new Function(s,"_",i)}catch(e){throw e.source=i,e}var l=function(e){return a.call(this,e,ce)};return l.source="function("+s+"){\n"+i+"}",l}function mt(e,t,n){var r=(t=He(t)).length;if(!r)return U(n)?n.call(e):n;for(var o=0;o<r;o++){var i=null==e?void 0:e[t[o]];void 0===i&&(i=n,o=r),e=U(i)?i.call(e):i}return e}var vt=0;function gt(e){var t=++vt+"";return e?e+t:t}function Et(e){var t=ce(e);return t._chain=!0,t}function _t(e,t,n,r,o){if(!(r instanceof t))return e.apply(n,o);var i=ke(e.prototype),a=e.apply(i,o);return w(a)?a:i}var yt=O(function(e,t){var n=yt.placeholder,r=function(){for(var o=0,i=t.length,a=Array(i),s=0;s<i;s++)a[s]=t[s]===n?arguments[o++]:t[s];for(;o<arguments.length;)a.push(arguments[o++]);return _t(e,r,this,this,a)};return r});yt.placeholder=ce;const bt=yt,xt=O(function(e,t,n){if(!U(e))throw new TypeError("Bind must be called on a function");var r=O(function(o){return _t(e,r,t,this,n.concat(o))});return r}),Ct=Z(ie);function Ot(e,t,n,r){if(r=r||[],t||0===t){if(t<=0)return r.concat(e)}else t=1/0;for(var o=r.length,i=0,a=ie(e);i<a;i++){var s=e[i];if(Ct(s)&&(q(s)||G(s)))if(t>1)Ot(s,t-1,n,r),o=r.length;else for(var l=0,u=s.length;l<u;)r[o++]=s[l++];else n||(r[o++]=s)}return r}const wt=O(function(e,t){var n=(t=Ot(t,!1,!1)).length;if(n<1)throw new Error("bindAll must be passed function names");for(;n--;){var r=t[n];e[r]=xt(e[r],e)}return e});function St(e,t){var n=function(r){var o=n.cache,i=""+(t?t.apply(this,arguments):r);return $(o,i)||(o[i]=e.apply(this,arguments)),o[i]};return n.cache={},n}const Rt=O(function(e,t,n){return setTimeout(function(){return e.apply(null,n)},t)}),Pt=bt(Rt,ce,1);function jt(e,t,n){var r,o,i,a,s=0;n||(n={});var l=function(){s=!1===n.leading?0:rt(),r=null,a=e.apply(o,i),r||(o=i=null)},u=function(){var u=rt();s||!1!==n.leading||(s=u);var c=t-(u-s);return o=this,i=arguments,c<=0||c>t?(r&&(clearTimeout(r),r=null),s=u,a=e.apply(o,i),r||(o=i=null)):r||!1===n.trailing||(r=setTimeout(l,c)),a};return u.cancel=function(){clearTimeout(r),s=0,r=o=i=null},u}function Dt(e,t,n){var r,o,i,a,s,l=function(){var u=rt()-o;t>u?r=setTimeout(l,t-u):(r=null,n||(a=e.apply(s,i)),r||(i=s=null))},u=O(function(u){return s=this,i=u,o=rt(),r||(r=setTimeout(l,t),n&&(a=e.apply(s,i))),a});return u.cancel=function(){clearTimeout(r),r=i=s=null},u}function Nt(e,t){return bt(t,e)}function Tt(e){return function(){return!e.apply(this,arguments)}}function It(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}}function Mt(e,t){return function(){if(--e<1)return t.apply(this,arguments)}}function Ft(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}}const kt=bt(Ft,2);function At(e,t,n){t=Je(t,n);for(var r,o=se(e),i=0,a=o.length;i<a;i++)if(t(e[r=o[i]],r,e))return r}function Lt(e){return function(t,n,r){n=Je(n,r);for(var o=ie(t),i=e>0?0:o-1;i>=0&&i<o;i+=e)if(n(t[i],i,t))return i;return-1}}const Bt=Lt(1),Ut=Lt(-1);function Ht(e,t,n,r){for(var o=(n=Je(n,r,1))(t),i=0,a=ie(e);i<a;){var s=Math.floor((i+a)/2);n(e[s])<o?i=s+1:a=s}return i}function Kt(e,t,n){return function(r,o,i){var a=0,s=ie(r);if("number"==typeof i)e>0?a=i>=0?i:Math.max(i+s,a):s=i>=0?Math.min(i+1,s):i+s+1;else if(n&&i&&s)return r[i=n(r,o)]===o?i:-1;if(o!=o)return(i=t(c.call(r,a,s),J))>=0?i+a:-1;for(i=e>0?a:s-1;i>=0&&i<s;i+=e)if(r[i]===o)return i;return-1}}const Wt=Kt(1,Bt,Ht),zt=Kt(-1,Ut);function Vt(e,t,n){var r=(Ct(e)?Bt:At)(e,t,n);if(void 0!==r&&-1!==r)return e[r]}function qt(e,t){return Vt(e,qe(t))}function $t(e,t,n){var r,o;if(t=Xe(t,n),Ct(e))for(r=0,o=e.length;r<o;r++)t(e[r],r,e);else{var i=se(e);for(r=0,o=i.length;r<o;r++)t(e[i[r]],i[r],e)}return e}function Xt(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=Array(o),a=0;a<o;a++){var s=r?r[a]:a;i[a]=t(e[s],s,e)}return i}function Gt(e){return function(t,n,r,o){var i=arguments.length>=3;return function(t,n,r,o){var i=!Ct(t)&&se(t),a=(i||t).length,s=e>0?0:a-1;for(o||(r=t[i?i[s]:s],s+=e);s>=0&&s<a;s+=e){var l=i?i[s]:s;r=n(r,t[l],l,t)}return r}(t,Xe(n,o,4),r,i)}}const Yt=Gt(1),Jt=Gt(-1);function Qt(e,t,n){var r=[];return t=Je(t,n),$t(e,function(e,n,o){t(e,n,o)&&r.push(e)}),r}function Zt(e,t,n){return Qt(e,Tt(Je(t)),n)}function en(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=0;i<o;i++){var a=r?r[i]:i;if(!t(e[a],a,e))return!1}return!0}function tn(e,t,n){t=Je(t,n);for(var r=!Ct(e)&&se(e),o=(r||e).length,i=0;i<o;i++){var a=r?r[i]:i;if(t(e[a],a,e))return!0}return!1}function nn(e,t,n,r){return Ct(e)||(e=Pe(e)),("number"!=typeof n||r)&&(n=0),Wt(e,t,n)>=0}const rn=O(function(e,t,n){var r,o;return U(t)?o=t:(t=He(t),r=t.slice(0,-1),t=t[t.length-1]),Xt(e,function(e){var i=o;if(!i){if(r&&r.length&&(e=Ke(e,r)),null==e)return;i=e[t]}return null==i?i:i.apply(e,n)})});function on(e,t){return Xt(e,$e(t))}function an(e,t){return Qt(e,qe(t))}function sn(e,t,n){var r,o,i=-1/0,a=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=Ct(e)?e:Pe(e)).length;s<l;s++)null!=(r=e[s])&&r>i&&(i=r);else t=Je(t,n),$t(e,function(e,n,r){((o=t(e,n,r))>a||o===-1/0&&i===-1/0)&&(i=e,a=o)});return i}function ln(e,t,n){var r,o,i=1/0,a=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=Ct(e)?e:Pe(e)).length;s<l;s++)null!=(r=e[s])&&r<i&&(i=r);else t=Je(t,n),$t(e,function(e,n,r){((o=t(e,n,r))<a||o===1/0&&i===1/0)&&(i=e,a=o)});return i}var un=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function cn(e){return e?q(e)?c.call(e):N(e)?e.match(un):Ct(e)?Xt(e,Ve):Pe(e):[]}function dn(e,t,n){if(null==t||n)return Ct(e)||(e=Pe(e)),e[nt(e.length-1)];var r=cn(e),o=ie(r);t=Math.max(Math.min(t,o),0);for(var i=o-1,a=0;a<t;a++){var s=nt(a,i),l=r[a];r[a]=r[s],r[s]=l}return r.slice(0,t)}function fn(e){return dn(e,1/0)}function pn(e,t,n){var r=0;return t=Je(t,n),on(Xt(e,function(e,n,o){return{value:e,index:r++,criteria:t(e,n,o)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index-t.index}),"value")}function hn(e,t){return function(n,r,o){var i=t?[[],[]]:{};return r=Je(r,o),$t(n,function(t,o){var a=r(t,o,n);e(i,t,a)}),i}}const mn=hn(function(e,t,n){$(e,n)?e[n].push(t):e[n]=[t]}),vn=hn(function(e,t,n){e[n]=t}),gn=hn(function(e,t,n){$(e,n)?e[n]++:e[n]=1}),En=hn(function(e,t,n){e[n?0:1].push(t)},!0);function _n(e){return null==e?0:Ct(e)?e.length:se(e).length}function yn(e,t,n){return t in n}const bn=O(function(e,t){var n={},r=t[0];if(null==e)return n;U(r)?(t.length>1&&(r=Xe(r,t[1])),t=ve(e)):(r=yn,t=Ot(t,!1,!1),e=Object(e));for(var o=0,i=t.length;o<i;o++){var a=t[o],s=e[a];r(s,a,e)&&(n[a]=s)}return n}),xn=O(function(e,t){var n,r=t[0];return U(r)?(r=Tt(r),t.length>1&&(n=t[1])):(t=Xt(Ot(t,!1,!1),String),r=function(e,n){return!nn(t,n)}),bn(e,r,n)});function Cn(e,t,n){return c.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))}function On(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[0]:Cn(e,e.length-t)}function wn(e,t,n){return c.call(e,null==t||n?1:t)}function Sn(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[e.length-1]:wn(e,Math.max(0,e.length-t))}function Rn(e){return Qt(e,Boolean)}function Pn(e,t){return Ot(e,t,!1)}const jn=O(function(e,t){return t=Ot(t,!0,!0),Qt(e,function(e){return!nn(t,e)})}),Dn=O(function(e,t){return jn(e,t)});function Nn(e,t,n,r){P(t)||(r=n,n=t,t=!1),null!=n&&(n=Je(n,r));for(var o=[],i=[],a=0,s=ie(e);a<s;a++){var l=e[a],u=n?n(l,a,e):l;t&&!n?(a&&i===u||o.push(l),i=u):n?nn(i,u)||(i.push(u),o.push(l)):nn(o,l)||o.push(l)}return o}const Tn=O(function(e){return Nn(Ot(e,!0,!0))});function In(e){for(var t=[],n=arguments.length,r=0,o=ie(e);r<o;r++){var i=e[r];if(!nn(t,i)){var a;for(a=1;a<n&&nn(arguments[a],i);a++);a===n&&t.push(i)}}return t}function Mn(e){for(var t=e&&sn(e,ie).length||0,n=Array(t),r=0;r<t;r++)n[r]=on(e,r);return n}const Fn=O(Mn);function kn(e,t){for(var n={},r=0,o=ie(e);r<o;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n}function An(e,t,n){null==t&&(t=e||0,e=0),n||(n=t<e?-1:1);for(var r=Math.max(Math.ceil((t-e)/n),0),o=Array(r),i=0;i<r;i++,e+=n)o[i]=e;return o}function Ln(e,t){if(null==t||t<1)return[];for(var n=[],r=0,o=e.length;r<o;)n.push(c.call(e,r,r+=t));return n}function Bn(e,t){return e._chain?ce(t).chain():t}function Un(e){return $t(Ne(e),function(t){var n=ce[t]=e[t];ce.prototype[t]=function(){var e=[this._wrapped];return u.apply(e,arguments),Bn(this,n.apply(ce,e))}}),ce}$t(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=a[e];ce.prototype[e]=function(){var n=this._wrapped;return null!=n&&(t.apply(n,arguments),"shift"!==e&&"splice"!==e||0!==n.length||delete n[0]),Bn(this,n)}}),$t(["concat","join","slice"],function(e){var t=a[e];ce.prototype[e]=function(){var e=this._wrapped;return null!=e&&(e=t.apply(e,arguments)),Bn(this,e)}});const Hn=ce;var Kn=Un(r);Kn._=Kn;const Wn=Kn},4607(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(5442)),l=n(6561);t.default=(e,t,n)=>{const r={data:[],sortOrder:void 0,onSort:()=>{},sortField:null},o=s.default.createContext(r);class i extends s.Component{state={sortOrder:l.SORT_ASC,sortColumn:{dataField:"id",text:"ID",onSort:()=>{},sortFunc:()=>{}}};constructor(e){super(e);const{defaultSorted:t,defaultSortDirection:n,sort:r}=e;let o,i;t&&t.length>0?(o=t[0].order||n,i=this.initSort(t[0].dataField,o)):r&&r.dataField&&r.order&&(o=r.order,i=this.initSort(r.dataField,o)),this.state={sortOrder:o,sortColumn:i}}componentDidMount(){const{sortOrder:e,sortColumn:r}=this.state;t()&&e&&r&&n(r.dataField,e)}static getDerivedStateFromProps(e,t){const{sort:n,columns:r}=e;return n&&n.dataField&&n.order?{sortOrder:n.order,sortColumn:r.find(e=>e.dataField===n.dataField)}:null}initSort(e,t){const{columns:n}=this.props,r=n.filter(t=>t.dataField===e);let o;return r.length>0&&(o=r[0],o.onSort&&o.onSort(e,t)),o}handleSort=r=>{const o=e.nextOrder(r,this.state,this.props.defaultSortDirection);r.onSort&&r.onSort(r.dataField,o),t()&&n(r.dataField,o),this.setState(()=>({sortOrder:o,sortColumn:r}))};render(){const{sort:n}=this.props,{sortOrder:r,sortColumn:i}=this.state;let{data:a}=this.props;if(!t()&&i){const t=i.sortFunc?i.sortFunc:n&&n.sortFunc;a=e.sort(a,r,{...i,sortFunc:t})}return s.default.createElement(o.Provider,{value:{data:a,sortOrder:r,onSort:this.handleSort,sortField:i?i.dataField:null}},this.props.children)}}return{Provider:i,Consumer:o.Consumer}}},4652(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(3955)),i=r(n(9603));t.default=e=>class extends((0,i.default)(e)){validateProps(){const{keyField:e}=this.props;if(!e)throw new Error("Please specify a field as key via keyField");if(this.visibleColumnSize(!1)<=0)throw new Error("No visible columns detected")}isEmpty(){return 0===this.props.data.length}visibleRows(){const{data:e,hiddenRows:t,keyField:n}=this.props;return t&&0!==t.length?e.filter(e=>{const r=o.default.get(e,n);return!o.default.contains(t,r)}):e}}},5191(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561),a=r(n(8610)),s=r(n(3997)),l=r(n(6572)),u=r(n(7572)),c=r(n(6510));t.default=e=>{const{className:t,columns:n,onSort:r,onFilter:d,sortField:f,sortOrder:p,selectRow:h,expandRow:m,currFilters:v,onExternalFilter:g,filterPosition:E,globalSortCaret:_,wrapperClasses:y}=e;let b=()=>null,x=()=>null;m?.showExpandColumn&&(x=(0,l.default)(s.default)),h&&(b=(0,c.default)(u.default));const C=(e=i.INDICATOR_POSITION_LEFT)=>e===i.INDICATOR_POSITION_LEFT,O=n.map((e,t)=>{const n=e.dataField===f,i=e.dataField===f;return o.default.createElement(a.default,{index:t,key:e.dataField,column:e,onSort:r,sorting:n,sortOrder:p,globalSortCaret:_,isLastSorting:i,onFilter:d,currFilters:v,onExternalFilter:g,filterPosition:E})});return h&&!h.hideSelectColumn&&(C(h.selectColumnPosition)?O.unshift(o.default.createElement(b,{key:"selection"})):O.push(o.default.createElement(b,{key:"selection"}))),m?.showExpandColumn&&(C(m.expandColumnPosition)?O.unshift(o.default.createElement(x,{key:"expansion"})):O.push(o.default.createElement(x,{key:"expansion"}))),o.default.createElement("thead",{className:y},o.default.createElement("tr",{className:t},O))}},5442(t){"use strict";t.exports=e},6003(e){"use strict";e.exports=t},6023(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(6942)),i=r(n(5442)),a=r(n(1630)),s=r(n(3955)),l=r(n(105)),u=(0,a.default)();t.default=e=>t=>i.default.createElement(u.Consumer,null,n=>((t,n)=>{if(!n)return[];let r="",a="";const u=t.value,c=s.default.contains(n.expanded,u),d=s.default.contains(n.isClosing,u),f=!n.nonExpandable||!s.default.contains(n.nonExpandable,u);return c&&(r=s.default.isFunction(n.parentClassName)?n.parentClassName(c,t.row,t.rowIndex):n.parentClassName||"",a=s.default.isFunction(n.className)?n.className(c,t.row,t.rowIndex):n.className||""),[i.default.createElement(e,{...t,key:u,expanded:c,expandable:f,expandRow:{...n},className:(0,o.default)(t.className,r)}),c||d?i.default.createElement(l.default,{key:`${u}-expanding`,colSpan:t.visibleColumnSize,expanded:c,onClosed:()=>n.onClosed(u),className:a},n.renderer(t.row,t.rowIndex)):null]})(t,n))},6032(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(6561),c=s(n(6023)),d=s(n(3689)),f=s(n(629)),p=s(n(285)),h=s(n(3502)),m=s(n(3955));class v extends l.Component{EditingCell;RowComponent;constructor(e){super(e);const{keyField:t,cellEdit:n,selectRow:r,expandRow:o}=e;n?.createContext&&(this.EditingCell=n.createEditingCell(m.default,n.options.onStartEdit));let i=h.default;const a=r?.mode!==u.ROW_SELECT_DISABLED,s=!!o.renderer;s&&(i=(0,c.default)(f.default)),a&&(i=(0,d.default)(s?i:f.default)),n?.createContext&&(i=n.withRowLevelCellEdit(i,a,t,m.default)),this.RowComponent=i}render(){const{columns:e,data:t,tabIndexCell:n,keyField:r,isEmpty:o,noDataIndication:i,visibleColumnSize:a,cellEdit:s,selectRow:c,rowStyle:d,rowClasses:f,rowEvents:h,expandRow:v,className:g}=this.props;let E;if(o){const e=m.default.isFunction(i)?i():i;if(!e)return null;E=l.default.createElement(p.default,{content:e,colSpan:a})}else{const o=c?.mode!==u.ROW_SELECT_DISABLED,i=!!v.renderer,p={};s?.createContext&&(p.EditingCellComponent=this.EditingCell),(o||i)&&(p.expandRow=v,p.selectRow=c),E=t.map((t,o)=>{if(t){const i=m.default.get(t,r),u={key:i,row:t,tabIndexCell:n,columns:e,keyField:r,cellEdit:s,value:i,rowIndex:o,visibleColumnSize:a,attrs:h||{},...p};return u.style=m.default.isFunction(d)?d(t,o):d,u.className=m.default.isFunction(f)?f(t,o):f,l.default.createElement(this.RowComponent,{...u})}return null})}return l.default.createElement("tbody",{className:g},E)}}t.default=v},6310(e,t,n){"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}function o(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,i(e,t)}function s(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}n.r(t),n.d(t,{CSSTransition:()=>w,ReplaceTransition:()=>I,SwitchTransition:()=>K,Transition:()=>x,TransitionGroup:()=>N,config:()=>f});var l=n(5442),u=n.n(l),c=n(6003),d=n.n(c);const f={disabled:!1},p=u().createContext(null);var h=function(e){return e.scrollTop},m="unmounted",v="exited",g="entering",E="entered",_="exiting",y=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o=v,r.appearStatus=g):o=E:o=t.unmountOnExit||t.mountOnEnter?m:v,r.state={status:o},r.nextCallback=null,r}a(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===m?{status:v}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==g&&n!==E&&(t=g):n!==g&&n!==E||(t=_)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===g){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this);n&&h(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===v&&this.setState({status:m})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[d().findDOMNode(this),r],i=o[0],a=o[1],s=this.getTimeouts(),l=r?s.appear:s.enter;!e&&!n||f.disabled?this.safeSetState({status:E},function(){t.props.onEntered(i)}):(this.props.onEnter(i,a),this.safeSetState({status:g},function(){t.props.onEntering(i,a),t.onTransitionEnd(l,function(){t.safeSetState({status:E},function(){t.props.onEntered(i,a)})})}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:d().findDOMNode(this);t&&!f.disabled?(this.props.onExit(r),this.safeSetState({status:_},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:v},function(){e.props.onExited(r)})})})):this.safeSetState({status:v},function(){e.props.onExited(r)})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=o[0],a=o[1];this.props.addEndListener(i,a)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===m)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,o(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return u().createElement(p.Provider,{value:null},"function"==typeof n?n(e,r):u().cloneElement(u().Children.only(n),r))},t}(u().Component);function b(){}y.contextType=p,y.propTypes={},y.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:b,onEntering:b,onEntered:b,onExit:b,onExiting:b,onExited:b},y.UNMOUNTED=m,y.EXITED=v,y.ENTERING=g,y.ENTERED=E,y.EXITING=_;const x=y;var C=function(e,t){return e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=s(n.className,r):n.setAttribute("class",s(n.className&&n.className.baseVal||"",r)));var n,r})},O=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1];t.removeClasses(o,"exit"),t.addClass(o,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.addClass(o,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.removeClasses(o,i),t.addClass(o,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}a(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&h(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r})}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,i=n.done;this.appliedClasses[t]={},r&&C(e,r),o&&C(e,o),i&&C(e,i)},n.render=function(){var e=this.props,t=(e.classNames,o(e,["classNames"]));return u().createElement(x,r({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(u().Component);O.defaultProps={classNames:""},O.propTypes={};const w=O;function S(e,t){var n=Object.create(null);return e&&l.Children.map(e,function(e){return e}).forEach(function(e){n[e.key]=function(e){return t&&(0,l.isValidElement)(e)?t(e):e}(e)}),n}function R(e,t,n){return null!=n[t]?n[t]:e.props[t]}function P(e,t,n){var r=S(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var a in e)a in t?i.length&&(o[a]=i,i=[]):i.push(a);var s={};for(var l in t){if(o[l])for(r=0;r<o[l].length;r++){var u=o[l][r];s[o[l][r]]=n(u)}s[l]=n(l)}for(r=0;r<i.length;r++)s[i[r]]=n(i[r]);return s}(t,r);return Object.keys(o).forEach(function(i){var a=o[i];if((0,l.isValidElement)(a)){var s=i in t,u=i in r,c=t[i],d=(0,l.isValidElement)(c)&&!c.props.in;!u||s&&!d?u||!s||d?u&&s&&(0,l.isValidElement)(c)&&(o[i]=(0,l.cloneElement)(a,{onExited:n.bind(null,a),in:c.props.in,exit:R(a,"exit",e),enter:R(a,"enter",e)})):o[i]=(0,l.cloneElement)(a,{in:!1}):o[i]=(0,l.cloneElement)(a,{onExited:n.bind(null,a),in:!0,exit:R(a,"exit",e),enter:R(a,"enter",e)})}}),o}var j=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},D=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}a(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,i=t.handleExited;return{children:t.firstRender?(n=e,r=i,S(n.children,function(e){return(0,l.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:R(e,"appear",n),enter:R(e,"enter",n),exit:R(e,"exit",n)})})):P(e,o,i),firstRender:!1}},n.handleExited=function(e,t){var n=S(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState(function(t){var n=r({},t.children);return delete n[e.key],{children:n}}))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=o(e,["component","childFactory"]),i=this.state.contextValue,a=j(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?u().createElement(p.Provider,{value:i},a):u().createElement(p.Provider,{value:i},u().createElement(t,r,a))},t}(u().Component);D.propTypes={},D.defaultProps={component:"div",childFactory:function(e){return e}};const N=D;var T=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}a(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,o=this.props.children,i=u().Children.toArray(o)[t];if(i.props[e]&&(r=i.props)[e].apply(r,n),this.props[e]){var a=i.props.nodeRef?void 0:d().findDOMNode(this);this.props[e](a)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=o(e,["children","in"]),i=u().Children.toArray(t),a=i[0],s=i[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,u().createElement(N,r,n?u().cloneElement(a,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):u().cloneElement(s,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(u().Component);T.propTypes={};const I=T;var M,F;var k="out-in",A="in-out",L=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},B=((M={})[k]=function(e){var t=e.current,n=e.changeState;return u().cloneElement(t,{in:!1,onExited:L(t,"onExited",function(){n(g,null)})})},M[A]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,u().cloneElement(r,{in:!0,onEntered:L(r,"onEntered",function(){n(g)})})]},M),U=((F={})[k]=function(e){var t=e.children,n=e.changeState;return u().cloneElement(t,{in:!0,onEntered:L(t,"onEntered",function(){n(E,u().cloneElement(t,{in:!0}))})})},F[A]=function(e){var t=e.current,n=e.children,r=e.changeState;return[u().cloneElement(t,{in:!1,onExited:L(t,"onExited",function(){r(E,u().cloneElement(n,{in:!0}))})}),u().cloneElement(n,{in:!0})]},F),H=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:E,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}a(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===g&&e.mode===A?{status:g}:!t.current||(n=t.current,r=e.children,n===r||u().isValidElement(n)&&u().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:u().cloneElement(e.children,{in:!0})}:{status:_};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,o=this.state,i=o.status,a=o.current,s={children:n,current:a,changeState:this.changeState,status:i};switch(i){case g:e=U[r](s);break;case _:e=B[r](s);break;case E:e=a}return u().createElement(p.Provider,{value:{isMounting:!this.appeared}},e)},t}(u().Component);H.propTypes={},H.defaultProps={mode:k};const K=H},6510(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=(0,n(8145).createSelectionContext)();t.default=e=>t=>o.default.createElement(i.Consumer,null,n=>o.default.createElement(e,{...t,...n}))},6561(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TYPE_DATE=t.TYPE_BOOLEAN=t.TYPE_NUMBER=t.TYPE_STRING=t.INDICATOR_POSITION_RIGHT=t.INDICATOR_POSITION_LEFT=t.SORT_DESC=t.SORT_ASC=t.FILTERS_POSITION_BOTTOM=t.FILTERS_POSITION_TOP=t.FILTERS_POSITION_INLINE=t.CHECKBOX_STATUS_UNCHECKED=t.CHECKBOX_STATUS_CHECKED=t.CHECKBOX_STATUS_INDETERMINATE=t.ROW_SELECT_DISABLED=t.ROW_SELECT_MULTIPLE=t.ROW_SELECT_SINGLE=void 0,t.ROW_SELECT_SINGLE="radio",t.ROW_SELECT_MULTIPLE="checkbox",t.ROW_SELECT_DISABLED="ROW_SELECT_DISABLED",t.CHECKBOX_STATUS_INDETERMINATE="indeterminate",t.CHECKBOX_STATUS_CHECKED="checked",t.CHECKBOX_STATUS_UNCHECKED="unchecked",t.FILTERS_POSITION_INLINE="inline",t.FILTERS_POSITION_TOP="top",t.FILTERS_POSITION_BOTTOM="bottom",t.SORT_ASC="asc",t.SORT_DESC="desc",t.INDICATOR_POSITION_LEFT="left",t.INDICATOR_POSITION_RIGHT="right",t.TYPE_STRING="string",t.TYPE_NUMBER="number",t.TYPE_BOOLEAN="bool",t.TYPE_DATE="date"},6572(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=(0,r(n(1630)).default)();t.default=e=>()=>o.default.createElement(i.Consumer,null,t=>o.default.createElement(e,{...t}))},6645(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=a(n(1590)),l=a(n(8476)),u=a(n(355)),c=a(n(4130)),d=a(n(3742)),f=a(n(2190));t.default={...u,...c,...s,...l,...d,...f}},6942(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=a(e,i(n)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=a(t,n));return t}function a(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},7007(e){"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise(function(n,r){function o(n){e.removeListener(t,i),r(n)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",o),n([].slice.call(arguments))}m(e,t,i,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,o,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,n,r){var o,i,a,u;if(s(n),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),i=e._events),a=i[t]),void 0===a)a=i[t]=n,++e._eventsCount;else if("function"==typeof a?a=i[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(o=l(e))>0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=c.bind(r);return o.listener=n,r.wrapFn=o,o}function f(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(o):h(o,o.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function h(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function m(e,t,n,r){if("function"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function o(i){r.once&&e.removeEventListener(t,o),n(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o="error"===e,i=this._events;if(void 0!==i)o=o&&void 0===i.error;else if(!o)return!1;if(o){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)r(l,this,t);else{var u=l.length,c=h(l,u);for(n=0;n<u;++n)r(c[n],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return s(t),this.on(e,d(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,d(this,e,t)),this},i.prototype.removeListener=function(e,t){var n,r,o,i,a;if(s(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(o=-1,i=n.length-1;i>=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,o),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,a||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var o,i=Object.keys(n);for(r=0;r<i.length;++r)"removeListener"!==(o=i[r])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},i.prototype.listeners=function(e){return f(this,e,!0)},i.prototype.rawListeners=function(e){return f(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},i.prototype.listenerCount=p,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},7351(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RowEventDelegater=void 0;const o=n(6561),i=r(n(3955)),a=["onClick","onDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","onAuxClick"];t.RowEventDelegater=e=>class extends e{clickNum=0;constructor(...e){super(...e),this.createDefaultEventHandler=this.createDefaultEventHandler.bind(this),this.createClickEventHandler=this.createClickEventHandler.bind(this)}createClickEventHandler(e){return t=>{const{row:n,selected:r,keyField:a,selectable:s,expandable:l,rowIndex:u,expanded:c,expandRow:d,selectRow:f,DELAY_FOR_DBCLICK:p}=this.props,h=()=>{e&&e(t,n,u);const p=i.default.get(n,a);d&&l&&!d.expandByColumnOnly&&(f.mode!==o.ROW_SELECT_DISABLED&&f.clickToExpand||f.mode===o.ROW_SELECT_DISABLED)&&d.onRowExpand(p,!c,u,t),f.clickToSelect&&s&&f.onRowSelect(p,!r,u,t)};p?(this.clickNum+=1,i.default.debounce(()=>{1===this.clickNum&&h(),this.clickNum=0},p)()):h()}}createDefaultEventHandler(e){return t=>{const{row:n,rowIndex:r}=this.props;e(t,n,r)}}delegate(e={}){const t={...e};return Object.keys(e).forEach(n=>{i.default.includes(a,n)&&(t[n]=this.createDefaultEventHandler(e[n]))}),t}}},7572(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CheckBox=void 0;const l=a(n(5442)),u=n(6561),c=s(n(3955)),d=n(3761);t.CheckBox=({className:e,checked:t,indeterminate:n})=>l.default.createElement("input",{type:"checkbox",checked:t,className:e,ref:e=>{e&&(e.indeterminate=n)},onChange:()=>{}});class f extends l.Component{constructor(e){super(e),this.handleCheckBoxClick=this.handleCheckBoxClick.bind(this)}shouldComponentUpdate(e){const{mode:t,checkedStatus:n}=this.props;return t!==u.ROW_SELECT_SINGLE&&e.checkedStatus!==n}handleCheckBoxClick(e){const{onAllRowsSelect:t,checkedStatus:n}=this.props;t(e,n===u.CHECKBOX_STATUS_CHECKED||n===u.CHECKBOX_STATUS_INDETERMINATE)}render(){const{mode:e,checkedStatus:n,selectionHeaderRenderer:r,hideSelectAll:o,headerColumnStyle:i}=this.props;if(o)return l.default.createElement("th",{"data-row-selection":!0});const a=n===u.CHECKBOX_STATUS_CHECKED,s=n===u.CHECKBOX_STATUS_INDETERMINATE,f={};let p;return(r||e===u.ROW_SELECT_MULTIPLE)&&(f.onClick=this.handleCheckBoxClick),f.style=c.default.isFunction(i)?i(n):i,l.default.createElement(d.BootstrapContext.Consumer,null,({bootstrap4:n})=>(r?p=r({mode:e,checked:a,indeterminate:s}):e===u.ROW_SELECT_MULTIPLE&&(p=l.default.createElement(t.CheckBox,{...this.props,checked:a,className:n?"selection-input-4":"",indeterminate:s})),l.default.createElement("th",{className:"selection-cell-header","data-row-selection":!0,...f},p)))}}t.default=f},7701(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=r(n(7920)),a=r(n(1400)),s=r(n(3955));t.default=e=>{const{data:t=[],className:n,columns:r=[],selectRow:l,expandRow:u}=e;return o.default.createElement("tfoot",null,o.default.createElement(a.default,{renderContent:function(){return r.map((e,n)=>{if(void 0===e.footer||null===e.footer)return!1;const r=s.default.pluck(t,e.dataField);return o.default.createElement(i.default,{index:n,key:e.dataField,column:e,columnData:r})})},selectRow:l,expandRow:u,className:n,cellEl:"th"}))}},7723(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=i(n(1031)),s=i(n(9421));t.default=(0,s.default)(a.default),o(n(6561),t)},7920(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(n(6942)),u=a(n(5442)),c=n(1859),d=s(n(3955));class f extends((0,c.CellEventDelegater)(u.Component)){render(){const{index:e,column:t,columnData:n}=this.props,{footer:r,footerTitle:o,footerAlign:i,footerFormatter:a,footerEvents:s,footerClasses:c,footerStyle:f,footerAttrs:p}=t,h=this.delegate(s),m={...d.default.isFunction(p)?p(t,e):p,...h};let v="";d.default.isString(r)?v=r:d.default.isFunction(r)&&(v=r(n||[],t,e||0));let g={};const E=d.default.isFunction(c)?c(t,e||0):c;f&&(g=d.default.isFunction(f)?f(t,e||0):f,g=g?{...g}:g),o&&(m.title=d.default.isFunction(o)?o(t,e||0):v),i&&(g.textAlign=d.default.isFunction(i)?i(t,e||0):i),E&&(m.className=(0,l.default)(m.className,E)),d.default.isEmptyObject(g)||(m.style=g);const _=a?a(t,e||0,{text:v}):v;return u.default.createElement("th",m,_)}}t.default=f},8145(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionContext=void 0;const l=a(n(5442)),u=s(n(3955)),c=n(6561),d=s(n(6645)),f=n(4130),p=l.default.createContext({});class h extends l.Component{selected;isHandleRowSelect;constructor(e){super(e),this.selected=e.selectRow.selected||[],this.isHandleRowSelect=!1}getSelected(){return this.selected}componentDidUpdate(e){this.isHandleRowSelect?this.isHandleRowSelect=!1:e.selectRow&&e.selectRow.selected&&!u.default.isEqual(e.selectRow.selected,this.selected)&&(this.selected=e.selectRow.selected,this.forceUpdate())}handleRowSelect=(e,t,n,r)=>{const{data:o,keyField:i,selectRow:{mode:a,onSelect:s}}=this.props;let l=[...this.selected],u=!0;if(s){u=s(d.default.getRowByRowId(o,i,e),t,n,r)}!0!==u&&void 0!==u||(a===c.ROW_SELECT_SINGLE?l=[e]:t?l.push(e):l=l.filter(t=>t!==e)),this.selected=l,this.isHandleRowSelect=!0,this.forceUpdate()};handleAllRowsSelect=(e,t)=>{const{data:n,keyField:r,selectRow:{onSelectAll:o,nonSelectable:i}}=this.props,{selected:a}=this;let s,l;s=t?a.filter(e=>void 0===n.find(t=>u.default.get(t,r)===e)):a.concat(d.default.selectableKeys(n,r,i)),o&&(l=o(!t,d.default.getSelectedRows(n,r,t?a:s),e),Array.isArray(l)&&(s=l)),this.selected=s,this.isHandleRowSelect=!0,this.forceUpdate()};render(){const{allRowsSelected:e,allRowsNotSelected:t}=(0,f.getSelectionSummary)(this.props.data,this.props.keyField,this.selected);let n;return n=e?c.CHECKBOX_STATUS_CHECKED:t?c.CHECKBOX_STATUS_UNCHECKED:c.CHECKBOX_STATUS_INDETERMINATE,l.default.createElement(p.Provider,{value:{...this.props.selectRow,selected:this.selected,onRowSelect:this.handleRowSelect,onAllRowsSelect:this.handleAllRowsSelect,allRowsSelected:e,allRowsNotSelected:t,checkedStatus:n}},this.props.children)}}t.createSelectionContext=()=>({Provider:h,Consumer:p.Consumer})},8232(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=a(n(5442)),u=n(1859),c=s(n(3955));class d extends((0,u.CellEventDelegater)(l.Component)){constructor(e){super(e),this.createHandleEditingCell=this.createHandleEditingCell.bind(this)}shouldComponentUpdate(e){let t=!1;return t=e.column.isDummyField?!c.default.isEqual(this.props.row,e.row):c.default.get(this.props.row,this.props.column.dataField)!==c.default.get(e.row,e.column.dataField),!!t||(t=!((!e.column.formatter||c.default.isEqual(this.props.row,e.row))&&this.props.column.hidden===e.column.hidden&&this.props.column.isDummyField===e.column.isDummyField&&this.props.rowindex===e.rowindex&&this.props.columnindex===e.columnindex&&this.props.className===e.className&&this.props.title===e.title&&this.props.editable===e.editable&&this.props.clicktoedit===e.clicktoedit&&this.props.dbclicktoedit===e.dbclicktoedit&&c.default.isEqual(this.props.style,e.style)&&c.default.isEqual(this.props.column.formatExtraData,e.column.formatExtraData)&&c.default.isEqual(this.props.column.events,e.column.events)&&c.default.isEqual(this.props.column.attrs,e.column.attrs)&&this.props.tabIndex===e.tabIndex),t)}createHandleEditingCell(e){return t=>{const{atstart:n,rowindex:r,columnindex:o,clicktoedit:i,dbclicktoedit:a}=this.props;(i||a)&&c.default.isFunction(e)&&e(t),n&&n(r,o)}}render(){const{row:e,column:t,atstart:n,rowindex:r,columnindex:o,editable:i,clicktoedit:a,dbclicktoedit:s,...u}=this.props,{dataField:d,formatter:f,formatExtraData:p}=t,h=this.delegate({...u});let m=t.isDummyField?null:c.default.get(e,d);return f&&(m=t.formatter(m,e,r,p)),"true"===a&&"true"===i?h.onClick=this.createHandleEditingCell(h.onClick):"true"===s&&"true"===i&&(h.onDoubleClick=this.createHandleEditingCell(h.onDoubleClick)),l.default.createElement("td",{...h},"boolean"==typeof m?`${m}`:m)}}t.default=d},8476(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.editCell=void 0;const o=r(n(3955)),i=n(355);t.editCell=(e,t,n,r,a)=>{const s=(0,i.getRowByRowId)(e,t,n);s&&o.default.set(s,r,a)}},8610(e,t,n){"use strict";var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),a=0;a<n.length;a++)"default"!==n[a]&&o(t,e,n[a]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(n(6942)),u=a(n(5442)),c=n(6561),d=n(1859),f=s(n(184)),p=s(n(1965)),h=s(n(3955));class m extends((0,d.CellEventDelegater)(u.Component)){render(){const{column:e,index:t,onSort:n,sorting:r,sortOrder:o,isLastSorting:i,onFilter:a,currFilters:s,filterPosition:d,onExternalFilter:m,globalSortCaret:v}=this.props,{text:g,sort:E,sortCaret:_,filter:y,filterRenderer:b,headerTitle:x,headerAlign:C,headerFormatter:O,headerEvents:w,headerClasses:S,headerStyle:R,headerAttrs:P,headerSortingClasses:j,headerSortingStyle:D}=e,N=_||v,T=this.delegate(w),I=h.default.isFunction(P)?P(e,t):P||{},M={...I,...T,tabIndex:h.default.isDefined(I.tabIndex)?I.tabIndex:0};let F,k,A={},L=h.default.isFunction(S)?S(e,t):S;if(R&&(A=h.default.isFunction(R)?R(e,t):R,A=A?{...A}:A),x&&(M.title=h.default.isFunction(x)?x(e,t):g),C&&(A.textAlign=h.default.isFunction(C)?C(e,t):C),E){const a=M.onClick,s=M.onKeyDown;M["aria-label"]=r?`${g} sort ${o}`:`${g} sortable`,M.onKeyUp=t=>{"Enter"===t.key&&(n?.(e),h.default.isFunction(s)&&s(t))},M.onClick=t=>{n?.(e),h.default.isFunction(a)&&a(t)},M.className=(0,l.default)(M.className,"sortable"),r?(F=N?N(o||c.SORT_DESC,e):u.default.createElement(f.default,{order:o}),L=(0,l.default)(L,h.default.isFunction(j)?j(e,o,i,t):j),A={...A,...h.default.isFunction(D)?D(e,o,i,t):D}):F=N?N(void 0,e):u.default.createElement(p.default,null)}if(L&&(M.className=(0,l.default)(M.className,L)),h.default.isEmptyObject(A)||(M.style=A),d===c.FILTERS_POSITION_INLINE)if(b){const t=m?.(e,y?.props.type||"");k=b(t,e)}else y&&(k=u.default.createElement(y.Filter,{...y.props,filterState:s?.[e.dataField],onFilter:a,column:e}));const B=O?O(e,t,{sortElement:F,filterElement:k}):g;return O?u.default.createElement("th",M,B):u.default.createElement("th",M,B,F,k)}}t.default=m},9421(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(7007)),i=r(n(5442)),a=r(n(9459)),s=r(n(6645)),l=r(n(3955)),u=n(3761),c=r(n(3285)),d=r(n(3519)),f=r(n(1630)),p=n(8145),h=r(n(4607));t.default=e=>class extends((0,a.default)(e)){constructor(e){if(super(e),this.DataContext=(0,d.default)(),e.registerExposedAPI){const t=new o.default;t.on("get.table.data",e=>e.result=this.table.getData()),t.on("get.selected.rows",e=>e.result=this.selectionContext.getSelected()),t.on("get.filtered.rows",e=>{this.searchContext?e.result=this.searchContext.getSearched():this.filterContext?e.result=this.filterContext.getFiltered():e.result=this.table.getData()}),e.registerExposedAPI(t)}e.columns.filter(e=>e.sort).length>0&&(this.SortContext=(0,h.default)(s.default,this.isRemoteSort,this.handleRemoteSortChange)),(e.columnToggle||e.columns.filter(e=>e.hidden).length>0)&&(this.ColumnContext=(0,c.default)()),e.selectRow&&(this.SelectionContext=(0,p.createSelectionContext)()),e.expandRow&&(this.RowExpandContext=(0,f.default)()),e.cellEdit&&e.cellEdit.createContext&&(this.CellEditContext=e.cellEdit.createContext(l.default,s.default,this.isRemoteCellEdit,this.handleRemoteCellChange)),e.filter&&(this.FilterContext=e.filter.createContext(l.default,this.isRemoteFiltering,this.handleRemoteFilterChange)),e.pagination&&(this.PaginationContext=e.pagination.createContext()),e.search&&e.search.searchContext&&(this.SearchContext=e.search.searchContext(l.default,this.isRemoteSearch,this.handleRemoteSearchChange)),e.setDependencyModules&&e.setDependencyModules(l.default),e.setPaginationRemoteEmitter&&e.setPaginationRemoteEmitter(this.remoteEmitter)}componentDidUpdate(e){e.columns.filter(e=>e.sort).length<=0?this.SortContext=null:this.SortContext||(this.SortContext=(0,h.default)(s.default,this.isRemoteSort,this.handleRemoteSortChange)),!e.pagination&&this.props.pagination&&(this.PaginationContext=null),e.pagination&&!this.props.pagination&&(this.PaginationContext=e.pagination.createContext(this.isRemotePagination,this.handleRemotePageChange)),!e.cellEdit&&this.props.cellEdit&&(this.CellEditContext=null),e.cellEdit&&!this.props.cellEdit&&(this.CellEditContext=e.cellEdit.createContext(l.default,s.default,this.isRemoteCellEdit,this.handleRemoteCellChange))}renderBase(){return(t,n,r,o,a,s)=>i.default.createElement(e,{ref:e=>{this.table=e},...this.props,...o,...n,...r,...a,...s,data:t.getData(n,r,o,a)})}renderWithColumnContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.ColumnContext.Provider,{...t,toggles:this.props.columnToggle?this.props.columnToggle.toggles:null},i.default.createElement(this.ColumnContext.Consumer,null,t=>e(n,r,o,a,s,t)))}renderWithSelectionContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.SelectionContext.Provider,{...t,ref:e=>{this.selectionContext=e},selectRow:this.props.selectRow,data:n.getData(r,o,a,s)},e(n,r,o,a,s))}renderWithRowExpandContext(e,t){return(n,r,o,a,s)=>i.default.createElement(this.RowExpandContext.Provider,{...t,ref:e=>{this.rowExpandContext=e},expandRow:this.props.expandRow,data:n.getData(r,o,a,s)},e(n,r,o,a,s))}renderWithPaginationContext(e){return(t,n,r,o)=>i.default.createElement(this.PaginationContext.Provider,{ref:e=>{this.paginationContext=e},pagination:this.props.pagination,data:t.getData(n,r,o),bootstrap4:this.props.bootstrap4,isRemotePagination:this.isRemotePagination,remoteEmitter:this.remoteEmitter,onDataSizeChange:this.props.onDataSizeChange,tableId:this.props.id},i.default.createElement(this.PaginationContext.Consumer,null,i=>e(t,n,r,o,i)))}renderWithSortContext(e,t){return(n,r,o)=>i.default.createElement(this.SortContext.Provider,{...t,ref:e=>{this.sortContext=e},defaultSorted:this.props.defaultSorted,defaultSortDirection:this.props.defaultSortDirection,sort:this.props.sort,data:n.getData(r,o)},i.default.createElement(this.SortContext.Consumer,null,t=>e(n,r,o,t)))}renderWithSearchContext(e,t){return(n,r)=>i.default.createElement(this.SearchContext.Provider,{...t,ref:e=>{this.searchContext=e},data:n.getData(r),searchText:this.props.search.searchText,dataChangeListener:this.props.dataChangeListener},i.default.createElement(this.SearchContext.Consumer,null,t=>e(n,r,t)))}renderWithFilterContext(e,t){return n=>i.default.createElement(this.FilterContext.Provider,{...t,ref:e=>{this.filterContext=e},data:n.getData(),filter:this.props.filter.options||{},dataChangeListener:this.props.dataChangeListener},i.default.createElement(this.FilterContext.Consumer,null,t=>e(n,t)))}renderWithCellEditContext(e,t){return n=>i.default.createElement(this.CellEditContext.Provider,{...t,ref:e=>{this.cellEditContext=e},selectRow:this.props.selectRow,cellEdit:this.props.cellEdit,data:n.getData()},e(n))}render(){const{keyField:e,columns:t,bootstrap4:n}=this.props,r={keyField:e,columns:t};let o=this.renderBase();return this.ColumnContext&&(o=this.renderWithColumnContext(o,r)),this.SelectionContext&&(o=this.renderWithSelectionContext(o,r)),this.RowExpandContext&&(o=this.renderWithRowExpandContext(o,r)),this.PaginationContext&&(o=this.renderWithPaginationContext(o)),this.SortContext&&(o=this.renderWithSortContext(o,r)),this.SearchContext&&(o=this.renderWithSearchContext(o,r)),this.FilterContext&&(o=this.renderWithFilterContext(o,r)),this.CellEditContext&&(o=this.renderWithCellEditContext(o,r)),i.default.createElement(u.BootstrapContext.Provider,{value:{bootstrap4:n}},i.default.createElement(this.DataContext.Provider,{...r,data:this.props.data},i.default.createElement(this.DataContext.Consumer,null,o)))}}},9435(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(5442)),i=n(6561),a=r(n(286)),s=r(n(1400));t.default=e=>{const{columns:t,onFilter:n,currFilters:r,filterPosition:l=i.FILTERS_POSITION_TOP,onExternalFilter:u,className:c,selectRow:d,expandRow:f}=e;return o.default.createElement("tbody",{className:c,style:{display:l===i.FILTERS_POSITION_TOP?"table-header-group":"table-footer-group"}},o.default.createElement(s.default,{renderContent:function(){const e=[];let i=!1;return t.forEach((t,s)=>{e.push(o.default.createElement(a.default,{index:s,key:t.dataField,column:t,currFilters:r,onExternalFilter:u,onFilter:n})),(t.filterRenderer||t.filter)&&(i||(i=!0))}),e},selectRow:d,expandRow:f,cellEl:"td"}))}},9459(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(7007)),i=n(5442),a=r(n(3955));t.default=e=>class extends i.Component{remoteEmitter;DataContext;ColumnContext;SelectionContext;SearchContext;FilterContext;RowExpandContext;CellEditContext;PaginationContext;SortContext;Table;dataContext;columnContext;selectionContext;searchContext;filterContext;rowExpandContext;cellEditContext;paginationContext;sortContext;table;constructor(e){super(e),this.remoteEmitter=new o.default,this.remoteEmitter.on("paginationChange",this.handleRemotePageChange),this.remoteEmitter.on("isRemotePagination",this.isRemotePagination)}getNewestState=(e={})=>{let t,n,r,o,i,a={};return this.sortContext&&(t=this.sortContext.state.sortOrder,n=this.sortContext.state.sortColumn?this.sortContext.state.sortColumn.dataField:null),this.filterContext&&(a=this.filterContext.currFilters),this.paginationContext&&(r=this.paginationContext.currPage,o=this.paginationContext.currSizePerPage),this.searchContext&&(i=this.props.search.searchText),{sortOrder:t,sortField:n,filters:a,page:r,sizePerPage:o,searchText:i,...e,data:this.props.data}};isRemoteSearch=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.search||this.isRemotePagination()};isRemotePagination=(e={})=>{const{remote:t}=this.props;return e.result=!0===t||a.default.isObject(t)&&t.pagination,e.result};isRemoteFiltering=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.filter||this.isRemotePagination()};isRemoteSort=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.sort||this.isRemotePagination()};isRemoteCellEdit=()=>{const{remote:e}=this.props;return!0===e||a.default.isObject(e)&&e.cellEdit};handleRemotePageChange=(e,t)=>{this.props.onTableChange("pagination",this.getNewestState({page:e,sizePerPage:t}))};handleRemoteFilterChange=e=>{const t={filters:e};if(this.isRemotePagination()){const e=this.props.pagination.options||{};t.page=a.default.isDefined(e.pageStartIndex)?e.pageStartIndex:1}this.props.onTableChange("filter",this.getNewestState(t))};handleRemoteSortChange=(e,t)=>{this.props.onTableChange("sort",this.getNewestState({sortField:e,sortOrder:t}))};handleRemoteCellChange=(e,t,n)=>{const r={rowId:e,dataField:t,newValue:n};this.props.onTableChange("cellEdit",this.getNewestState({cellEdit:r}))};handleRemoteSearchChange=e=>{this.props.onTableChange("search",this.getNewestState({searchText:e}))}}},9603(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(5442);t.default=e=>class extends r.Component{visibleColumnSize(e=!0){let t;if(this.props.columnToggle&&this.props.columnToggle.toggles){const e=this.props.columnToggle.toggles;t=Object.keys(e).filter(t=>e[t]).length}else t=this.props.columns.filter(e=>!e.hidden).length;return e?(this.props.selectRow&&!this.props.selectRow.hideSelectColumn&&(t+=1),this.props.expandRow&&this.props.expandRow.showExpandColumn&&(t+=1),t):t}}}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var i=r[e]={exports:{}};return n[e].call(i.exports,i,i.exports,o),i.exports}return o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o(7723)})());
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL2Rpc3QvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLmpzIiwibWFwcGluZ3MiOiI7Q0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxTQUFVQSxRQUFRLGNBQzFCLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxRQUFTLGFBQWNKLEdBQ0wsaUJBQVpDLFFBQ2RBLFFBQStCLHNCQUFJRCxFQUFRRyxRQUFRLFNBQVVBLFFBQVEsY0FFckVKLEVBQTRCLHNCQUFJQyxFQUFRRCxFQUFZLE1BQUdBLEVBQWUsU0FDdkUsQ0FURCxDQVNHTyxLQUFNLENBQUNDLEVBQW1DQyxJLDBLQ1Q3QyxtQkFDQSxhQUNBLFVBVUEsTUFBTUMsVUFBa0IsVUFBTUMsVUFDNUJDLFFBRUEsV0FBQUMsQ0FBWUMsR0FDVkMsTUFBTUQsR0FDTkUsS0FBS0osUUFBVSxVQUFNSyxXQUN2QixDQUVBLE1BQUFDLEdBQ0UsTUFBTSxTQUNKQyxFQUFRLFNBQ1JDLEdBQVcsRUFBSyxTQUNoQkMsRUFBUSxVQUNSQyxFQUFZLE1BQ1RDLEdBQ0RQLEtBQUtGLE1BRVQsT0FDRSxrQ0FDRSw4QkFBSVEsV0FBVyxhQUFHLHdCQUF5QkEsTUFBZ0JDLEdBQ3pELHdCQUFDLEVBQUFDLGNBQWEsQ0FDWkMsUUFBTSxFQUNOQyxHQUFJTixFQUNKTyxRQUFTLElBQ1RDLFdBQVcsbUJBQ1hDLFNBQVVSLEVBQ1ZULFFBQVNJLEtBQUtKLFNBRWQsK0JBQUtrQixJQUFLZCxLQUFLSixTQUNiLCtCQUFLVSxVQUFVLHVCQUF1QkgsTUFNbEQsRUFHRixVQUFlVCxDLCtKQ2xEZixtQkFDQSxhQUNBLFVBQ0EsVUEwQkEsVUFwQjRDLEVBQUdxQixZQUM3QyxNQUFNQyxHQUFhLGFBQUcsbUNBQW9DLENBQ3hEQyxPQUFRRixJQUFVLEVBQUFHLFdBR3BCLE9BQ0Usd0JBQUMsRUFBQUMsaUJBQWlC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LElBQU9uakMsRUFBaUIsUUFDeEIsSUFBTSxFQUVQLE9BREE4aUMsRUFBb0I5MEIsRUFBRWsxQixFQUFRLENBQUU5d0IsRUFBRzh3QixJQUM1QkEsR0NMUkosRUFBb0I5MEIsRUFBSSxDQUFDak8sRUFBU3FqQyxLQUNqQyxJQUFJLElBQUkvOEIsS0FBTys4QixFQUNYTixFQUFvQnhZLEVBQUU4WSxFQUFZLzhCLEtBQVN5OEIsRUFBb0J4WSxFQUFFdnFCLEVBQVNzRyxJQUM1RW1JLE9BQU9xckIsZUFBZTk1QixFQUFTc0csRUFBSyxDQUFFeXpCLFlBQVksRUFBTS8wQixJQUFLcStCLEVBQVcvOEIsTUNKM0V5OEIsRUFBb0I5c0IsRUFBSSxXQUN2QixHQUEwQixpQkFBZnF0QixXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU94aUMsTUFBUSxJQUFJcVYsU0FBUyxjQUFiLEVBQ2hCLENBQUUsTUFBT3hPLEdBQ1IsR0FBc0IsaUJBQVg0N0IsT0FBcUIsT0FBT0EsTUFDeEMsQ0FDQSxDQVB1QixHQ0F4QlIsRUFBb0J4WSxFQUFJLENBQUNwVyxFQUFLcUcsSUFBVS9MLE9BQU82RixVQUFVRCxlQUFlRSxLQUFLSixFQUFLcUcsR0NDbEZ1b0IsRUFBb0I5WSxFQUFLanFCLElBQ0gsb0JBQVh3VyxRQUEwQkEsT0FBT2d0QixhQUMxQy8wQixPQUFPcXJCLGVBQWU5NUIsRUFBU3dXLE9BQU9ndEIsWUFBYSxDQUFFMTJCLE1BQU8sV0FFN0QyQixPQUFPcXJCLGVBQWU5NUIsRUFBUyxhQUFjLENBQUU4TSxPQUFPLEtDRjdCaTJCLEVBQW9CLEsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LWV4cGFuZC9leHBhbmQtcm93LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3NvcnQvY2FyZXQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L3Jvdy1zZWN0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2ZpbHRlcnMtY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3cvc2hvdWxkLXVwZGF0ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9yb3dzLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L2FnZ3JlZ2F0ZS1yb3cudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LWV4cGFuZC9leHBhbmQtY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9ib290c3RyYXAtdGFibGUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93L3Jvdy10ZW1wbGF0ZS50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctc2VsZWN0aW9uL3NlbGVjdGlvbi1jZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3N0b3JlL2V4cGFuZC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL3Jvdy1leHBhbmQtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jYXB0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NlbGwtZXZlbnQtZGVsZWdhdGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc29ydC9zeW1ib2wudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvdHlwZS50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9yb3ctcHVyZS1jb250ZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL2NvbHVtbi1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy9zaW1wbGUtcm93LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL2RhdGEtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctc2VsZWN0aW9uL3Jvdy1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9zb3J0LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29udGV4dHMvYm9vdHN0cmFwLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9zZWxlY3Rpb24udHMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fc2V0dXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZXN0QXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc051bGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc1VuZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzQm9vbGVhbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL190YWdUZXN0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzTnVtYmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNEYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNSZWdFeHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0Vycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0FycmF5QnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19oYXNPYmplY3RUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fc3RyaW5nVGFnQnVnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNEYXRhVmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzTmFOLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fc2hhbGxvd1Byb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2dldEJ5dGVMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9faXNCdWZmZXJMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2dldExlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jb2xsZWN0Tm9uRW51bVByb3BzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzRW1wdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc01hdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5kZXJzY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL190b0J1ZmZlclZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc0VxdWFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvYWxsS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19tZXRob2RGaW5nZXJwcmludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lzTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNXZWFrTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXNTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pc1dlYWtTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9wYWlycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ludmVydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2Z1bmN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jcmVhdGVBc3NpZ25lci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2V4dGVuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2V4dGVuZE93bi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlZmF1bHRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RvUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL190b1BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fZGVlcEdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2dldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWF0Y2hlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3Byb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX29wdGltaXplQ2IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fYmFzZUl0ZXJhdGVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaXRlcmF0ZWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY2IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9tYXBPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9ub29wLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcHJvcGVydHlPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3RpbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmFuZG9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZUVzY2FwZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fZXNjYXBlTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fdW5lc2NhcGVNYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZXN1bHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy91bmlxdWVJZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NoYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2V4ZWN1dGVCb3VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3BhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9iaW5kQWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvbWVtb2l6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlbGF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90aHJvdHRsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2RlYm91bmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvd3JhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL25lZ2F0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2NvbXBvc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9hZnRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2JlZm9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL29uY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maW5kS2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZEluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZExhc3RJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NvcnRlZEluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvX2NyZWF0ZUluZGV4RmluZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2xhc3RJbmRleE9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZpbmRXaGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2VhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fY3JlYXRlUmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmVkdWNlUmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9yZWplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9ldmVyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ludm9rZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3BsdWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvd2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9tYXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9taW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy90b0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvc2FtcGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvc2h1ZmZsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NvcnRCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19ncm91cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2dyb3VwQnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9pbmRleEJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY291bnRCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3BhcnRpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3NpemUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9fa2V5SW5PYmouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9waWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvb21pdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2luaXRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9maXJzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3Jlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9sYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvY29tcGFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9kaWZmZXJlbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvd2l0aG91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuaXEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy91bmlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL2ludGVyc2VjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL3VuemlwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvemlwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvbW9kdWxlcy9jaHVuay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL19jaGFpblJlc3VsdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS9tb2R1bGVzL21peGluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvdW5kZXJzY29yZS1hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL21vZHVsZXMvaW5kZXgtZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL3NvcnQtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9wcm9wcy1yZXNvbHZlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2hlYWRlci50c3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL3Jvdy1leHBhbmQvcm93LWNvbnN1bWVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2JvZHkudHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL3JlbW92ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL3JlZmxvdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vQ1NTVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL2FkZENsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vaGFzQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL0NoaWxkTWFwcGluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1JlcGxhY2VUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9Td2l0Y2hUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGwtY29uc3VtZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29uc3QudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC1jb25zdW1lci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9zdG9yZS9vcGVyYXRvcnMudHMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9yb3cvZXZlbnQtZGVsZWdhdGVyLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvZm9vdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9mb290ZXItY2VsbC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvc3RvcmUvbXV0YXRlLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvaGVhZGVyLWNlbGwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29udGV4dHMvaW5kZXgudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvZmlsdGVycy50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9wcm9wcy1yZXNvbHZlci9yZW1vdGUtcmVzb2x2ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9wcm9wcy1yZXNvbHZlci9jb2x1bW4tcmVzb2x2ZXIudHMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1wiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0pO1xufSkoc2VsZiwgKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzU0NDJfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNjAwM19fKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDU1NUcmFuc2l0aW9uIH0gZnJvbSBcInJlYWN0LXRyYW5zaXRpb24tZ3JvdXBcIjtcblxuaW50ZXJmYWNlIEV4cGFuZFJvd1Byb3BzIHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgb25DbG9zZWQ/OiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbFNwYW46IG51bWJlcjtcbn1cblxuY2xhc3MgRXhwYW5kUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEV4cGFuZFJvd1Byb3BzPiB7XG4gIG5vZGVSZWY6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRXhwYW5kUm93UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5ub2RlUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBleHBhbmRlZCA9IGZhbHNlLFxuICAgICAgb25DbG9zZWQsXG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3MoXCJyZXNldC1leHBhbnNpb24tc3R5bGVcIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PlxuICAgICAgICAgIDxDU1NUcmFuc2l0aW9uXG4gICAgICAgICAgICBhcHBlYXJcbiAgICAgICAgICAgIGluPXtleHBhbmRlZH1cbiAgICAgICAgICAgIHRpbWVvdXQ9ezQwMH1cbiAgICAgICAgICAgIGNsYXNzTmFtZXM9XCJyb3ctZXhwYW5kLXNsaWRlXCJcbiAgICAgICAgICAgIG9uRXhpdGVkPXtvbkNsb3NlZH1cbiAgICAgICAgICAgIG5vZGVSZWY9e3RoaXMubm9kZVJlZn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IHJlZj17dGhpcy5ub2RlUmVmfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3ctZXhwYW5zaW9uLXN0eWxlXCI+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEV4cGFuZFJvdztcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU09SVF9BU0MgfSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dHMvYm9vdHN0cmFwXCI7XG5cbmludGVyZmFjZSBTb3J0Q2FyZXRQcm9wcyB7XG4gIG9yZGVyOiBzdHJpbmc7XG59XG5cbmNvbnN0IFNvcnRDYXJldDogUmVhY3QuRkM8U29ydENhcmV0UHJvcHM+ID0gKHsgb3JkZXIgfSkgPT4ge1xuICBjb25zdCBvcmRlckNsYXNzID0gY3MoXCJyZWFjdC1ib290c3RyYXAtdGFibGUtc29ydC1vcmRlclwiLCB7XG4gICAgZHJvcHVwOiBvcmRlciA9PT0gU09SVF9BU0MsXG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPEJvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHsgYm9vdHN0cmFwNCB9KSA9PlxuICAgICAgICBib290c3RyYXA0ID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGNhcmV0LTQtJHtvcmRlcn1gfSBkYXRhLXRlc3RpZD1cInNvcnQtY2FyZXRcIiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17b3JkZXJDbGFzc30gZGF0YS10ZXN0aWQ9XCJzb3J0LWNhcmV0XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApXG4gICAgICB9XG4gICAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU29ydENhcmV0O1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZDIH0gZnJvbSBcInJlYWN0XCI7XG5cbnR5cGUgUm93U2VjdGlvblByb3BzID0ge1xuICBjb250ZW50PzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb2xTcGFuPzogbnVtYmVyO1xufTtcblxuY29uc3QgUm93U2VjdGlvbjogRkM8Um93U2VjdGlvblByb3BzPiA9ICh7IGNvbnRlbnQgPSBudWxsLCBjb2xTcGFuID0gMSB9KSA9PiAoXG4gIDx0cj5cbiAgICA8dGRcbiAgICAgIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIlxuICAgICAgY29sU3Bhbj17IGNvbFNwYW4gfVxuICAgICAgY2xhc3NOYW1lPVwicmVhY3QtYnMtdGFibGUtbm8tZGF0YVwiXG4gICAgPlxuICAgICAge2NvbnRlbnR9XG4gICAgPC90ZD5cbiAgPC90cj5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFJvd1NlY3Rpb247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgRmlsdGVyUHJvcHMge1xuICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgRmlsdGVyOiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT47XG59XG5cbmludGVyZmFjZSBGaWx0ZXJzQ2VsbFByb3BzIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY29sdW1uOiB7XG4gICAgZmlsdGVyUmVuZGVyZXI/OiAoZmlsdGVySGFuZGxlcjogRnVuY3Rpb24sIGNvbHVtbjogYW55KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgZmlsdGVyPzogRmlsdGVyUHJvcHM7XG4gICAgaGVhZGVyQWxpZ24/OiBzdHJpbmcgfCBGdW5jdGlvbjtcbiAgICBkYXRhRmllbGQ6IHN0cmluZztcbiAgfTtcbiAgY3VyckZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbkZpbHRlcj86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiAoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+IEZ1bmN0aW9uO1xufVxuXG5jb25zdCBGaWx0ZXJzQ2VsbDogUmVhY3QuRkM8RmlsdGVyc0NlbGxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBpbmRleCwgY29sdW1uLCBjdXJyRmlsdGVycywgb25FeHRlcm5hbEZpbHRlciA9ICgpID0+IHt9LCBvbkZpbHRlciA9ICgpID0+IHt9IH0gPSBwcm9wcztcbiAgY29uc3QgeyBmaWx0ZXIgfSA9IGNvbHVtbjtcblxuICBsZXQgZmlsdGVyRWxtOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNvbnN0IGNlbGxBdHRyczogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+ID0ge307XG4gIGNvbnN0IGNlbGxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHt9O1xuXG4gIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICBpZiAoY29sdW1uLmhlYWRlckFsaWduKSB7XG4gICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihjb2x1bW4uaGVhZGVyQWxpZ24pXG4gICAgICA/IGNvbHVtbi5oZWFkZXJBbGlnbihjb2x1bW4sIGluZGV4KVxuICAgICAgOiBjb2x1bW4uaGVhZGVyQWxpZ247XG4gIH1cblxuICBpZiAoY29sdW1uLmZpbHRlclJlbmRlcmVyKSB7XG4gICAgY29uc3Qgb25DdXN0b21GaWx0ZXIgPSBvbkV4dGVybmFsRmlsdGVyKGNvbHVtbiwgZmlsdGVyPy5wcm9wcy50eXBlIHx8IFwiXCIpO1xuICAgIGZpbHRlckVsbSA9IGNvbHVtbi5maWx0ZXJSZW5kZXJlcihvbkN1c3RvbUZpbHRlciEsIGNvbHVtbik7XG4gIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgZmlsdGVyRWxtID0gKFxuICAgICAgPGZpbHRlci5GaWx0ZXJcbiAgICAgICAgey4uLmZpbHRlci5wcm9wc31cbiAgICAgICAgZmlsdGVyU3RhdGU9e2N1cnJGaWx0ZXJzIVtjb2x1bW4uZGF0YUZpZWxkXX1cbiAgICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGhcIiwgY2VsbEF0dHJzLCBmaWx0ZXJFbG0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyc0NlbGw7XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSb3dQcm9wcyB7XG4gIGNsaWNrVG9FZGl0Pzogc3RyaW5nO1xuICBkYmNsaWNrVG9FZGl0Pzogc3RyaW5nO1xuICBlZGl0YWJsZT86IGJvb2xlYW47XG4gIGVkaXRpbmdSb3dJZHg/OiBudW1iZXIgfCBudWxsO1xuICBlZGl0aW5nQ29sSWR4PzogbnVtYmVyO1xuICBFZGl0aW5nQ2VsbENvbXBvbmVudD86IGFueTtcbiAgdGFiSW5kZXhTdGFydD86IG51bWJlcjtcbiAgdGFiSW5kZXhDZWxsPzogYm9vbGVhbjtcbiAgcm93SW5kZXg/OiBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBhdHRycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGNvbHVtbnM/OiBhbnlbXTtcbiAgcm93PzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc2VsZWN0Um93PzogYW55O1xuICBzZWxlY3RlZD86IGJvb2xlYW47XG4gIHNlbGVjdGFibGU/OiBib29sZWFuO1xuICBleHBhbmRSb3c/OiBhbnk7XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgZXhwYW5kYWJsZT86IGJvb2xlYW47XG4gIHZpc2libGVDb2x1bW5TaXplPzogbnVtYmVyO1xuICBrZXlGaWVsZD86IHN0cmluZztcbiAgdmFsdWU/OiBhbnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJvd1Nob3VsZFVwZGF0ZXI8VCBleHRlbmRzIG5ldyguLi5hcmdzOiBhbnlbXSkgPT4gYW55PihcbiAgRXh0ZW5kQmFzZTogVFxuKSB7XG4gIHJldHVybiBjbGFzcyBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIHNob3VsZFVwZGF0ZUJ5Q2VsbEVkaXRpbmcobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgaWYgKCEodGhpcy5wcm9wcy5jbGlja1RvRWRpdCB8fCB0aGlzLnByb3BzLmRiY2xpY2tUb0VkaXQpKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBuZXh0UHJvcHMuZWRpdGluZ1Jvd0lkeCA9PT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICAgICh0aGlzLnByb3BzLmVkaXRpbmdSb3dJZHggPT09IG5leHRQcm9wcy5yb3dJbmRleCAmJlxuICAgICAgICAgIG5leHRQcm9wcy5lZGl0aW5nUm93SWR4ID09PSBudWxsKSB8fFxuICAgICAgICB0aGlzLnByb3BzLmVkaXRpbmdSb3dJZHggPT09IG5leHRQcm9wcy5yb3dJbmRleFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5wcm9wcy5jbGFzc05hbWUgIT09IG5leHRQcm9wcy5jbGFzc05hbWUgfHxcbiAgICAgICAgIV8uaXNFcXVhbCh0aGlzLnByb3BzLnN0eWxlLCBuZXh0UHJvcHMuc3R5bGUpIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5hdHRycywgbmV4dFByb3BzLmF0dHJzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHVzZSBmb3Igc2ltcGxlLXJvd1xuICAgIHNob3VsZFVwZGF0ZUJ5Q29sdW1uc0ZvclNpbXBsZUNoZWNrKG5leHRQcm9wczogUm93UHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoICE9PSBuZXh0UHJvcHMuY29sdW1ucyEubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKCFfLmlzRXF1YWwodGhpcy5wcm9wcy5jb2x1bW5zW2ldLCBuZXh0UHJvcHMuY29sdW1ucyFbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzaG91bGRVcGRhdGVkQnlOb3JtYWxQcm9wcyhuZXh0UHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgICB0aGlzLnByb3BzLnJvd0luZGV4ICE9PSBuZXh0UHJvcHMucm93SW5kZXggfHxcbiAgICAgICAgdGhpcy5wcm9wcy5lZGl0YWJsZSAhPT0gbmV4dFByb3BzLmVkaXRhYmxlIHx8XG4gICAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5yb3csIG5leHRQcm9wcy5yb3cpIHx8XG4gICAgICAgIHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggIT09IG5leHRQcm9wcy5jb2x1bW5zIS5sZW5ndGg7XG5cbiAgICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gICAgfVxuXG4gICAgc2hvdWxkVXBkYXRlQ2hpbGQobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVCeUNlbGxFZGl0aW5nKG5leHRQcm9wcykgfHxcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVkQnlOb3JtYWxQcm9wcyhuZXh0UHJvcHMpXG4gICAgICApO1xuICAgIH1cblxuICAgIHNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaG91bGRVcGRhdGVDaGlsZChuZXh0UHJvcHMpIHx8XG4gICAgICAgIHRoaXMuc2hvdWxkVXBkYXRlQnlDb2x1bW5zRm9yU2ltcGxlQ2hlY2sobmV4dFByb3BzKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IG1hdGNoUm93ID0gKGtleUZpZWxkOiBhbnksIGlkOiBhbnkpID0+IChyb3c6IGFueSkgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkgPT09IGlkO1xuXG5leHBvcnQgY29uc3QgZ2V0Um93QnlSb3dJZCA9IChkYXRhOiBhbnksIGtleUZpZWxkOiBhbnksIGlkOiBhbnkpID0+IGRhdGEuZmluZChtYXRjaFJvdyhrZXlGaWVsZCwgaWQpKTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElORElDQVRPUl9QT1NJVElPTl9MRUZUIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgRXhwYW5kQ2VsbCBmcm9tIFwiLi4vcm93LWV4cGFuZC9leHBhbmQtY2VsbFwiO1xuaW1wb3J0IFNlbGVjdGlvbkNlbGwgZnJvbSBcIi4uL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWNlbGxcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgUm93RXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBSb3dQdXJlQ29udGVudCBmcm9tIFwiLi9yb3ctcHVyZS1jb250ZW50XCI7XG5pbXBvcnQgc2hvdWxkVXBkYXRlciwgeyBSb3dQcm9wcyB9IGZyb20gXCIuL3Nob3VsZC11cGRhdGVyXCI7XG5cbmNsYXNzIFJvd0FnZ3JlZ2F0b3IgZXh0ZW5kcyBzaG91bGRVcGRhdGVyKFJvd0V2ZW50RGVsZWdhdGVyKENvbXBvbmVudDxSb3dQcm9wcz4pKSB7XG4gIGNsaWNrTnVtOiBudW1iZXIgPSAwO1xuICBzaG91bGRVcGRhdGVSb3dDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIgPSB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBSb3dQcm9wcykge1xuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0ZWQgIT09IG5leHRQcm9wcy5zZWxlY3RlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5leHBhbmRlZCAhPT0gbmV4dFByb3BzLmV4cGFuZGVkIHx8XG4gICAgICB0aGlzLnByb3BzLmV4cGFuZGFibGUgIT09IG5leHRQcm9wcy5leHBhbmRhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGFibGUgIT09IG5leHRQcm9wcy5zZWxlY3RhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uICE9PVxuICAgICAgbmV4dFByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uIHx8XG4gICAgICB0aGlzLnNob3VsZFVwZGF0ZWRCeVNlbGZQcm9wcyhuZXh0UHJvcHMpXG4gICAgKSB7XG4gICAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSB0aGlzLnNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQgPSB0aGlzLnNob3VsZFJvd0NvbnRlbnRVcGRhdGUobmV4dFByb3BzKTtcblxuICAgIHJldHVybiB0aGlzLnNob3VsZFVwZGF0ZVJvd0NvbnRlbnQ7XG4gIH1cblxuICBpc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHBvc2l0aW9uID0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcG9zaXRpb24gPT09IElORElDQVRPUl9QT1NJVElPTl9MRUZUO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc3R5bGUsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBhdHRycyxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGV4cGFuZGVkLFxuICAgICAgZXhwYW5kYWJsZSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgc2VsZWN0YWJsZSxcbiAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgIGNvbnN0IHsgaGlkZVNlbGVjdENvbHVtbiwgc2VsZWN0Q29sdW1uUG9zaXRpb24sIGNsaWNrVG9TZWxlY3QgfSA9IHNlbGVjdFJvdztcbiAgICBjb25zdCB7IHNob3dFeHBhbmRDb2x1bW4gPSB1bmRlZmluZWQsIGV4cGFuZENvbHVtblBvc2l0aW9uID0gdW5kZWZpbmVkIH0gPVxuICAgICAgZXhwYW5kUm93ID8/IHt9O1xuXG4gICAgY29uc3QgbmV3QXR0cnMgPSB0aGlzLmRlbGVnYXRlKHsgLi4uYXR0cnMgfSk7XG4gICAgaWYgKGNsaWNrVG9TZWxlY3QgfHwgKGV4cGFuZFJvdyAmJiAhIWV4cGFuZFJvdy5yZW5kZXJlcikpIHtcbiAgICAgIG5ld0F0dHJzLm9uQ2xpY2sgPSB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyKG5ld0F0dHJzLm9uQ2xpY2spO1xuICAgIH1cblxuICAgIGxldCB0YWJJbmRleFN0YXJ0ID0gcm93SW5kZXghICogdmlzaWJsZUNvbHVtblNpemUhICsgMTtcblxuICAgIGNvbnN0IGNoaWxkcmVucyA9IFtcbiAgICAgIDxSb3dQdXJlQ29udGVudFxuICAgICAgICBrZXk9XCJyb3dcIlxuICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAga2V5RmllbGQ9e2tleUZpZWxkfVxuICAgICAgICByb3dJbmRleD17cm93SW5kZXh9XG4gICAgICAgIHNob3VsZFVwZGF0ZT17dGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50fVxuICAgICAgICB0YWJJbmRleFN0YXJ0PXt0YWJJbmRleENlbGwgPyB0YWJJbmRleFN0YXJ0IDogLTF9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgLz4sXG4gICAgXTtcblxuICAgIGlmICghaGlkZVNlbGVjdENvbHVtbikge1xuICAgICAgY29uc3Qgc2VsZWN0Q2VsbCA9IChcbiAgICAgICAgPFNlbGVjdGlvbkNlbGxcbiAgICAgICAgICB7Li4uc2VsZWN0Um93fVxuICAgICAgICAgIGtleT1cInNlbGVjdGlvbi1jZWxsXCJcbiAgICAgICAgICByb3dLZXk9e2tleX1cbiAgICAgICAgICByb3dJbmRleD17cm93SW5kZXh9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkfVxuICAgICAgICAgIGRpc2FibGVkPXshc2VsZWN0YWJsZX1cbiAgICAgICAgICB0YWJJbmRleD17dGFiSW5kZXhDZWxsID8gKHRhYkluZGV4U3RhcnQgKz0gMSkgOiAtMX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KHNlbGVjdENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgICBjaGlsZHJlbnMudW5zaGlmdChzZWxlY3RDZWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVucy5wdXNoKHNlbGVjdENlbGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgICBjb25zdCBleHBhbmRDZWxsID0gKFxuICAgICAgICA8RXhwYW5kQ2VsbFxuICAgICAgICAgIHsuLi5leHBhbmRSb3d9XG4gICAgICAgICAga2V5PVwiZXhwYW5kLWNlbGxcIlxuICAgICAgICAgIHJvd0tleT17a2V5fVxuICAgICAgICAgIHJvd0luZGV4PXtyb3dJbmRleH1cbiAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgZXhwYW5kYWJsZT17ZXhwYW5kYWJsZX1cbiAgICAgICAgICB0YWJJbmRleD17dGFiSW5kZXhDZWxsID8gKHRhYkluZGV4U3RhcnQgKz0gMSkgOiAtMX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlckZ1bmN0aW9uQ29sdW1uSW5MZWZ0KGV4cGFuZENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgICBjaGlsZHJlbnMudW5zaGlmdChleHBhbmRDZWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVucy5wdXNoKGV4cGFuZENlbGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dHIgc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gey4uLm5ld0F0dHJzfT5cbiAgICAgICAge2NoaWxkcmVuc31cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3dBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgTW91c2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgRXhwYW5kQ2VsbFByb3BzIHtcbiAgcm93S2V5OiBhbnk7XG4gIGV4cGFuZGVkOiBib29sZWFuO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBvblJvd0V4cGFuZDogKFxuICAgIHJvd0tleTogYW55LFxuICAgIGV4cGFuZGVkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgZTogTW91c2VFdmVudFxuICApID0+IHZvaWQ7XG4gIGV4cGFuZENvbHVtblJlbmRlcmVyPzogKHBhcmFtczoge1xuICAgIGV4cGFuZGFibGU6IGJvb2xlYW47XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgcm93S2V5OiBhbnk7XG4gIH0pID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgcm93SW5kZXg/OiBudW1iZXI7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbmRDZWxsIGV4dGVuZHMgQ29tcG9uZW50PEV4cGFuZENlbGxQcm9wcz4ge1xuICBoYW5kbGVDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB7IHJvd0tleSwgZXhwYW5kZWQsIG9uUm93RXhwYW5kLCByb3dJbmRleCB9ID0gdGhpcy5wcm9wcztcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIG9uUm93RXhwYW5kKHJvd0tleSwgIWV4cGFuZGVkLCByb3dJbmRleCwgZSk7XG4gIH07XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogRXhwYW5kQ2VsbFByb3BzKSB7XG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIHRoaXMucHJvcHMucm93SW5kZXggIT09IG5leHRQcm9wcy5yb3dJbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5leHBhbmRlZCAhPT0gbmV4dFByb3BzLmV4cGFuZGVkIHx8XG4gICAgICB0aGlzLnByb3BzLnJvd0tleSAhPT0gbmV4dFByb3BzLnJvd0tleSB8fFxuICAgICAgdGhpcy5wcm9wcy50YWJJbmRleCAhPT0gbmV4dFByb3BzLnRhYkluZGV4O1xuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGV4cGFuZGVkLCBleHBhbmRhYmxlLCBleHBhbmRDb2x1bW5SZW5kZXJlciwgdGFiSW5kZXgsIHJvd0tleSB9ID1cbiAgICAgIHRoaXMucHJvcHM7XG4gICAgY29uc3QgYXR0cnM6IHsgdGFiSW5kZXg/OiBudW1iZXIgfSA9IHt9O1xuICAgIGlmICh0YWJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhYkluZGV4ICE9PSAtMSkgYXR0cnMudGFiSW5kZXggPSB0YWJJbmRleDtcblxuICAgIHJldHVybiAoXG4gICAgICA8dGQgY2xhc3NOYW1lPVwiZXhwYW5kLWNlbGxcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBkYXRhLXRlc3RpZD1cImV4cGFuZC1jZWxsXCIgey4uLmF0dHJzfT5cbiAgICAgICAge2V4cGFuZENvbHVtblJlbmRlcmVyXG4gICAgICAgICAgPyBleHBhbmRDb2x1bW5SZW5kZXJlcih7XG4gICAgICAgICAgICBleHBhbmRhYmxlLFxuICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICByb3dLZXlcbiAgICAgICAgICB9KVxuICAgICAgICAgIDogZXhwYW5kYWJsZVxuICAgICAgICAgICAgPyBleHBhbmRlZFxuICAgICAgICAgICAgICA/IFwiKC0pXCJcbiAgICAgICAgICAgICAgOiBcIigrKVwiXG4gICAgICAgICAgICA6IFwiXCJ9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQge1xuICBCb290c3RyYXBUYWJsZVByb3BzLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG5pbXBvcnQge1xuICBGSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgUk9XX1NFTEVDVF9ESVNBQkxFRCxcbn0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCBCb2R5IGZyb20gXCIuL2JvZHlcIjtcbmltcG9ydCBDYXB0aW9uIGZyb20gXCIuL2NhcHRpb25cIjtcbmltcG9ydCBGaWx0ZXJzIGZyb20gXCIuL2ZpbHRlcnNcIjtcbmltcG9ydCBGb290ZXIgZnJvbSBcIi4vZm9vdGVyXCI7XG5pbXBvcnQgSGVhZGVyIGZyb20gXCIuL2hlYWRlclwiO1xuaW1wb3J0IFByb3BzQmFzZVJlc29sdmVyIGZyb20gXCIuL3Byb3BzLXJlc29sdmVyXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jbGFzcyBCb290c3RyYXBUYWJsZSBleHRlbmRzIFByb3BzQmFzZVJlc29sdmVyKFxuICBSZWFjdC5Db21wb25lbnQ8Qm9vdHN0cmFwVGFibGVQcm9wcz5cbikge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogQm9vdHN0cmFwVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMudmFsaWRhdGVQcm9wcygpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogQm9vdHN0cmFwVGFibGVQcm9wcykge1xuICAgIGlmIChuZXh0UHJvcHMub25EYXRhU2l6ZUNoYW5nZSAmJiAhbmV4dFByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuZGF0YS5sZW5ndGggIT09IHRoaXMucHJvcHMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgbmV4dFByb3BzLm9uRGF0YVNpemVDaGFuZ2UoeyBkYXRhU2l6ZTogdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBFeHBvc2VkIEFQSXNcbiAgZ2V0RGF0YSA9ICgpID0+IHRoaXMudmlzaWJsZVJvd3MoKTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBsb2FkaW5nLCBvdmVybGF5IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChvdmVybGF5KSB7XG4gICAgICBjb25zdCBMb2FkaW5nT3ZlcmxheSA9IG92ZXJsYXkobG9hZGluZyEpO1xuICAgICAgcmV0dXJuIDxMb2FkaW5nT3ZlcmxheT57dGhpcy5yZW5kZXJUYWJsZSgpfTwvTG9hZGluZ092ZXJsYXk+O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUYWJsZSgpO1xuICB9XG5cbiAgcmVuZGVyVGFibGUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1ucyxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgaWQsXG4gICAgICBjbGFzc2VzLFxuICAgICAgYm9vdHN0cmFwNCA9IGZhbHNlLFxuICAgICAgc3RyaXBlZCA9IGZhbHNlLFxuICAgICAgaG92ZXIgPSBmYWxzZSxcbiAgICAgIGJvcmRlcmVkID0gdHJ1ZSxcbiAgICAgIGNvbmRlbnNlZCA9IGZhbHNlLFxuICAgICAgbm9EYXRhSW5kaWNhdGlvbiA9IG51bGwsXG4gICAgICBjYXB0aW9uLFxuICAgICAgcm93U3R5bGUsXG4gICAgICByb3dDbGFzc2VzLFxuICAgICAgd3JhcHBlckNsYXNzZXMsXG4gICAgICByb3dFdmVudHMsXG4gICAgICBzZWxlY3RSb3cgPSB7XG4gICAgICAgIG1vZGU6IFJPV19TRUxFQ1RfRElTQUJMRUQsXG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgaGlkZVNlbGVjdENvbHVtbjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBleHBhbmRSb3cgPSB7XG4gICAgICAgIHJlbmRlcmVyOiB1bmRlZmluZWQsXG4gICAgICAgIGV4cGFuZGVkOiBbXSxcbiAgICAgICAgbm9uRXhwYW5kYWJsZTogW10sXG4gICAgICB9LFxuICAgICAgY2VsbEVkaXQgPSB7XG4gICAgICAgIG1vZGU6IG51bGwsXG4gICAgICAgIG5vbkVkaXRhYmxlUm93czogW10sXG4gICAgICB9LFxuICAgICAgZmlsdGVyUG9zaXRpb24gPSBGSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHRhYmxlV3JhcHBlckNsYXNzID0gY3MoXCJyZWFjdC1ib290c3RyYXAtdGFibGVcIiwgd3JhcHBlckNsYXNzZXMpO1xuXG4gICAgY29uc3QgdGFibGVDbGFzcyA9IGNzKFxuICAgICAgXCJ0YWJsZVwiLFxuICAgICAge1xuICAgICAgICBcInRhYmxlLXN0cmlwZWRcIjogc3RyaXBlZCxcbiAgICAgICAgXCJ0YWJsZS1ob3ZlclwiOiBob3ZlcixcbiAgICAgICAgXCJ0YWJsZS1ib3JkZXJlZFwiOiBib3JkZXJlZCxcbiAgICAgICAgW2Jvb3RzdHJhcDQgPyBcInRhYmxlLXNtXCIgOiBcInRhYmxlLWNvbmRlbnNlZFwiXTogY29uZGVuc2VkLFxuICAgICAgfSxcbiAgICAgIGNsYXNzZXNcbiAgICApO1xuXG4gICAgY29uc3QgaGFzRmlsdGVycyA9IGNvbHVtbnMuc29tZShcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmZpbHRlciB8fCBjb2wuZmlsdGVyUmVuZGVyZXJcbiAgICApO1xuXG4gICAgY29uc3QgaGFzRm9vdGVyID1cbiAgICAgIF8uZmlsdGVyKGNvbHVtbnMsIChjb2wpID0+IF8uaGFzKGNvbCwgXCJmb290ZXJcIikpLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zdCB0YWJsZUNhcHRpb24gPSBjYXB0aW9uICYmIChcbiAgICAgIDxDYXB0aW9uIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9PntjYXB0aW9ufTwvQ2FwdGlvbj5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0YWJsZVdyYXBwZXJDbGFzc30+XG4gICAgICAgIDx0YWJsZSBpZD17aWR9IGNsYXNzTmFtZT17dGFibGVDbGFzc30+XG4gICAgICAgICAge3RhYmxlQ2FwdGlvbn1cbiAgICAgICAgICA8SGVhZGVyXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmhlYWRlckNsYXNzZXN9XG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3Nlcz17dGhpcy5wcm9wcy5oZWFkZXJXcmFwcGVyQ2xhc3Nlc31cbiAgICAgICAgICAgIHNvcnRGaWVsZD17dGhpcy5wcm9wcy5zb3J0RmllbGR9XG4gICAgICAgICAgICBzb3J0T3JkZXI9e3RoaXMucHJvcHMuc29ydE9yZGVyfVxuICAgICAgICAgICAgb25Tb3J0PXt0aGlzLnByb3BzLm9uU29ydH1cbiAgICAgICAgICAgIGdsb2JhbFNvcnRDYXJldD17dGhpcy5wcm9wcy5zb3J0ICYmIHRoaXMucHJvcHMuc29ydC5zb3J0Q2FyZXR9XG4gICAgICAgICAgICBvbkZpbHRlcj17dGhpcy5wcm9wcy5vbkZpbHRlcn1cbiAgICAgICAgICAgIGN1cnJGaWx0ZXJzPXt0aGlzLnByb3BzLmN1cnJGaWx0ZXJzfVxuICAgICAgICAgICAgb25FeHRlcm5hbEZpbHRlcj17dGhpcy5wcm9wcy5vbkV4dGVybmFsRmlsdGVyfVxuICAgICAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgICAgICBleHBhbmRSb3c9e2V4cGFuZFJvd31cbiAgICAgICAgICAgIGZpbHRlclBvc2l0aW9uPXtmaWx0ZXJQb3NpdGlvbn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtoYXNGaWx0ZXJzICYmIGZpbHRlclBvc2l0aW9uICE9PSBGSUxURVJTX1BPU0lUSU9OX0lOTElORSAmJiAoXG4gICAgICAgICAgICA8RmlsdGVyc1xuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuZmlsdGVyc0NsYXNzZXN9XG4gICAgICAgICAgICAgIG9uU29ydD17dGhpcy5wcm9wcy5vblNvcnR9XG4gICAgICAgICAgICAgIG9uRmlsdGVyPXt0aGlzLnByb3BzLm9uRmlsdGVyfVxuICAgICAgICAgICAgICBjdXJyRmlsdGVycz17dGhpcy5wcm9wcy5jdXJyRmlsdGVyc31cbiAgICAgICAgICAgICAgZmlsdGVyUG9zaXRpb249e3RoaXMucHJvcHMuZmlsdGVyUG9zaXRpb259XG4gICAgICAgICAgICAgIG9uRXh0ZXJuYWxGaWx0ZXI9e3RoaXMucHJvcHMub25FeHRlcm5hbEZpbHRlcn1cbiAgICAgICAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxCb2R5XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuYm9keUNsYXNzZXN9XG4gICAgICAgICAgICBkYXRhPXt0aGlzLmdldERhdGEoKX1cbiAgICAgICAgICAgIGtleUZpZWxkPXtrZXlGaWVsZH1cbiAgICAgICAgICAgIHRhYkluZGV4Q2VsbD17dGFiSW5kZXhDZWxsfVxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIGlzRW1wdHk9e3RoaXMuaXNFbXB0eSgpfVxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblNpemU9e3RoaXMudmlzaWJsZUNvbHVtblNpemUoKX1cbiAgICAgICAgICAgIG5vRGF0YUluZGljYXRpb249e25vRGF0YUluZGljYXRpb259XG4gICAgICAgICAgICBjZWxsRWRpdD17Y2VsbEVkaXR9XG4gICAgICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICAgICAgcm93U3R5bGU9e3Jvd1N0eWxlfVxuICAgICAgICAgICAgcm93Q2xhc3Nlcz17cm93Q2xhc3Nlc31cbiAgICAgICAgICAgIHJvd0V2ZW50cz17cm93RXZlbnRzfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2hhc0Zvb3RlciAmJiAoXG4gICAgICAgICAgICA8Rm9vdGVyXG4gICAgICAgICAgICAgIGRhdGE9e3RoaXMuZ2V0RGF0YSgpfVxuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBzZWxlY3RSb3c9e3NlbGVjdFJvd31cbiAgICAgICAgICAgICAgZXhwYW5kUm93PXtleHBhbmRSb3d9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5mb290ZXJDbGFzc2VzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb290c3RyYXBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgU2VsZWN0Um93UHJvcHMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IElORElDQVRPUl9QT1NJVElPTl9MRUZUIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5kUm93IHtcbiAgc2hvd0V4cGFuZENvbHVtbj86IGJvb2xlYW47XG4gIGV4cGFuZENvbHVtblBvc2l0aW9uPzogc3RyaW5nO1xuICBub25FeHBhbmRhYmxlPzogYW55W107XG59XG5cbmludGVyZmFjZSBSb3dUZW1wbGF0ZVByb3BzIHtcbiAgcmVuZGVyQ29udGVudDogKCkgPT4gYW55O1xuICBjZWxsRWw6IHN0cmluZztcbiAgc2VsZWN0Um93PzogU2VsZWN0Um93UHJvcHM8YW55PiB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kUm93PzogRXhwYW5kUm93O1xuICBba2V5OiBzdHJpbmddOiBhbnk7IC8vIEZvciBhbnkgb3RoZXIgcHJvcHMgeW91IG1pZ2h0IGhhdmVcbn1cblxuY29uc3QgUm93VGVtcGxhdGU6IFJlYWN0LkZDPFJvd1RlbXBsYXRlUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgcmVuZGVyQ29udGVudCwgc2VsZWN0Um93LCBleHBhbmRSb3csIGNlbGxFbCwgLi4ucmVzdCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdCA9IChcbiAgICBwb3NpdGlvbjogc3RyaW5nID0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlRcbiAgKTogYm9vbGVhbiA9PiBwb3NpdGlvbiA9PT0gSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQ7XG5cbiAgY29uc3QgY2hpbGRyZW5zID0gcmVuZGVyQ29udGVudCgpIHx8IFtdO1xuXG4gIGlmIChzZWxlY3RSb3cgJiYgc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4gIT09IHRydWUpIHtcbiAgICBpZiAoaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChzZWxlY3RSb3cuc2VsZWN0Q29sdW1uUG9zaXRpb24pKSB7XG4gICAgICBjaGlsZHJlbnMudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwic2VsZWN0aW9uXCIgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbnMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwic2VsZWN0aW9uXCIgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleHBhbmRSb3cgJiYgZXhwYW5kUm93LnNob3dFeHBhbmRDb2x1bW4pIHtcbiAgICBpZiAoaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdChleHBhbmRSb3cuZXhwYW5kQ29sdW1uUG9zaXRpb24pKSB7XG4gICAgICBjaGlsZHJlbnMudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwiZXhwYW5zaW9uXCIgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbnMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KGNlbGxFbCwgeyBrZXk6IFwiZXhwYW5zaW9uXCIgfSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiA8dHIgey4uLnJlc3R9PntjaGlsZHJlbnN9PC90cj47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3dUZW1wbGF0ZTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIE1vdXNlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJPV19TRUxFQ1RfU0lOR0xFIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEJvb3RzdHJhcENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dHMvYm9vdHN0cmFwXCI7XG5cbmludGVyZmFjZSBTZWxlY3Rpb25DZWxsUHJvcHMge1xuICBtb2RlPzogc3RyaW5nO1xuICByb3dLZXk6IGFueTtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIG9uUm93U2VsZWN0PzogKFxuICAgIHJvd0tleTogYW55LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBNb3VzZUV2ZW50XG4gICkgPT4gdm9pZDtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByb3dJbmRleD86IG51bWJlcjtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGNsaWNrVG9TZWxlY3Q/OiBib29sZWFuO1xuICBzZWxlY3Rpb25SZW5kZXJlcj86IChhcmdzOiB7XG4gICAgbW9kZTogc3RyaW5nO1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHJvd2luZGV4PzogbnVtYmVyO1xuICAgIHJvd2tleTogYW55O1xuICB9KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNlbGVjdENvbHVtblN0eWxlPzpcbiAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gIHwgKChhcmdzOiB7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgcm93aW5kZXg/OiBudW1iZXI7XG4gICAgcm93a2V5OiBhbnk7XG4gIH0pID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3Rpb25DZWxsIGV4dGVuZHMgQ29tcG9uZW50PFNlbGVjdGlvbkNlbGxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogU2VsZWN0aW9uQ2VsbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBTZWxlY3Rpb25DZWxsUHJvcHMpIHtcbiAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgdGhpcy5wcm9wcy5yb3dJbmRleCAhPT0gbmV4dFByb3BzLnJvd0luZGV4IHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGVkICE9PSBuZXh0UHJvcHMuc2VsZWN0ZWQgfHxcbiAgICAgIHRoaXMucHJvcHMuZGlzYWJsZWQgIT09IG5leHRQcm9wcy5kaXNhYmxlZCB8fFxuICAgICAgdGhpcy5wcm9wcy5yb3dLZXkgIT09IG5leHRQcm9wcy5yb3dLZXkgfHxcbiAgICAgIHRoaXMucHJvcHMudGFiSW5kZXggIT09IG5leHRQcm9wcy50YWJJbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RDb2x1bW5TdHlsZSAhPT0gbmV4dFByb3BzLnNlbGVjdENvbHVtblN0eWxlO1xuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKGU6IE1vdXNlRXZlbnQ8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KSB7XG4gICAgY29uc3Qge1xuICAgICAgbW9kZTogaW5wdXRUeXBlLFxuICAgICAgcm93S2V5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBvblJvd1NlbGVjdCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgcm93SW5kZXggPSAtMSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2hlY2tlZCA9IGlucHV0VHlwZSA9PT0gUk9XX1NFTEVDVF9TSU5HTEUgPyB0cnVlIDogIXNlbGVjdGVkO1xuXG4gICAgb25Sb3dTZWxlY3QhKHJvd0tleSwgY2hlY2tlZCwgcm93SW5kZXgsIGUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd0tleSxcbiAgICAgIG1vZGU6IGlucHV0VHlwZSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICB0YWJJbmRleCA9IC0xLFxuICAgICAgcm93SW5kZXgsXG4gICAgICBzZWxlY3Rpb25SZW5kZXJlcixcbiAgICAgIHNlbGVjdENvbHVtblN0eWxlLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgYXR0cnM6IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNlbGxFbGVtZW50PiA9IHt9O1xuICAgIGlmICh0YWJJbmRleCAhPT0gLTEpIGF0dHJzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG5cbiAgICBhdHRycy5zdHlsZSA9IChfLmlzRnVuY3Rpb24oc2VsZWN0Q29sdW1uU3R5bGUpXG4gICAgICA/IHNlbGVjdENvbHVtblN0eWxlKHtcbiAgICAgICAgY2hlY2tlZDogc2VsZWN0ZWQsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByb3dpbmRleDogcm93SW5kZXgsXG4gICAgICAgIHJvd2tleTogcm93S2V5LFxuICAgICAgfSlcbiAgICAgIDogc2VsZWN0Q29sdW1uU3R5bGUpIGFzIGFueTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Qm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IGJvb3RzdHJhcDQgfSkgPT4gKFxuICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJzZWxlY3Rpb24tY2VsbFwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9IGRhdGEtdGVzdGlkPVwic2VsZWN0aW9uLWNlbGxcIiB7Li4uYXR0cnMgYXMgYW55fT5cbiAgICAgICAgICAgIHtzZWxlY3Rpb25SZW5kZXJlciA/IChcbiAgICAgICAgICAgICAgc2VsZWN0aW9uUmVuZGVyZXIoe1xuICAgICAgICAgICAgICAgIG1vZGU6IGlucHV0VHlwZSEsXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJvd2luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICByb3drZXk6IHJvd0tleSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9e2lucHV0VHlwZX1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgPz8gZmFsc2V9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtib290c3RyYXA0ID8gXCJzZWxlY3Rpb24taW5wdXQtNFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4geyB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICApfVxuICAgICAgPC9Cb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gXCIuL3Jvd3NcIjtcblxuZXhwb3J0IGNvbnN0IGlzQW55RXhwYW5kcyA9IChcbiAgZGF0YTogYW55LFxuICBrZXlGaWVsZDogYW55LFxuICBleHBhbmRlZDogYW55W10gPSBbXVxuKSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IHJvd0tleSA9IF8uZ2V0KGRhdGFbaV0sIGtleUZpZWxkKTtcbiAgICBpZiAodHlwZW9mIGV4cGFuZGVkLmZpbmQoeCA9PiB4ID09PSByb3dLZXkpICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cGFuZGFibGVLZXlzID0gKGRhdGE6IGFueSwga2V5RmllbGQ6IGFueSwgc2tpcHM6IGFueVtdID0gW10pID0+IHtcbiAgaWYgKHNraXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkYXRhLm1hcCgocm93OiBhbnkpID0+IF8uZ2V0KHJvdywga2V5RmllbGQpKTtcbiAgfVxuICByZXR1cm4gZGF0YVxuICAgIC5maWx0ZXIoKHJvdzogYW55KSA9PiAhXy5jb250YWlucyhza2lwcywgXy5nZXQocm93LCBrZXlGaWVsZCkpKVxuICAgIC5tYXAoKHJvdzogYW55KSA9PiBfLmdldChyb3csIGtleUZpZWxkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRSb3dzID0gKGRhdGE6IGFueSwga2V5RmllbGQ6IGFueSwgZXhwYW5kZWQ6IGFueSkgPT5cbiAgZXhwYW5kZWQubWFwKChrOiBhbnkpID0+IGdldFJvd0J5Um93SWQoZGF0YSwga2V5RmllbGQsIGspKTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGRhdGFPcGVyYXRvciBmcm9tIFwiLi4vc3RvcmUvb3BlcmF0b3JzXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIFJvd0V4cGFuZFByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBkYXRhOiBhbnlbXTtcbiAga2V5RmllbGQ6IHN0cmluZztcbiAgZXhwYW5kUm93OiB7XG4gICAgZXhwYW5kZWQ/OiBhbnlbXTtcbiAgICBpc0Nsb3Npbmc/OiBhbnlbXTtcbiAgICBvbkV4cGFuZD86IChyb3c6IGFueSwgZXhwYW5kZWQ6IGJvb2xlYW4sIHJvd0luZGV4OiBudW1iZXIsIGU6IGFueSkgPT4gdm9pZDtcbiAgICBvbkV4cGFuZEFsbD86IChleHBhbmRBbGw6IGJvb2xlYW4sIGV4cGFuZGVkUm93czogYW55W10sIGU6IGFueSkgPT4gdm9pZDtcbiAgICBvbmx5T25lRXhwYW5kaW5nPzogYm9vbGVhbjtcbiAgICBub25FeHBhbmRhYmxlPzogYW55W107XG4gICAgcmVuZGVyZXI/OiAoKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvd0V4cGFuZENvbnRleHRWYWx1ZSB7XG4gIGV4cGFuZGVkOiBhbnlbXTtcbiAgaXNDbG9zaW5nOiBhbnlbXTtcbiAgbm9uRXhwYW5kYWJsZT86IGFueVtdO1xuICBvbkNsb3NlZDogKGNsb3NlZFJvdzogYW55KSA9PiB2b2lkO1xuICBpc0FueUV4cGFuZHM6IGJvb2xlYW47XG4gIG9uUm93RXhwYW5kOiAoXG4gICAgcm93S2V5OiBhbnksXG4gICAgZXhwYW5kZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiB2b2lkO1xuICBvbkFsbFJvd0V4cGFuZDogKGU6IGFueSwgZXhwYW5kQWxsOiBib29sZWFuKSA9PiB2b2lkO1xuICBvbkV4cGFuZD86IChyb3c6IGFueSwgZXhwYW5kZWQ6IGJvb2xlYW4sIHJvd0luZGV4OiBudW1iZXIsIGU6IGFueSkgPT4gdm9pZDtcbiAgb25FeHBhbmRBbGw/OiAoZXhwYW5kQWxsOiBib29sZWFuLCBleHBhbmRlZFJvd3M6IGFueVtdLCBlOiBhbnkpID0+IHZvaWQ7XG4gIG9ubHlPbmVFeHBhbmRpbmc/OiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0Um93RXhwYW5kQ29udGV4dCA9IHtcbiAgZXhwYW5kZWQ6IFtdLFxuICBpc0Nsb3Npbmc6IFtdLFxuICBvbkNsb3NlZDogKCkgPT4ge30sXG4gIGlzQW55RXhwYW5kczogZmFsc2UsXG4gIG9uUm93RXhwYW5kOiAoKSA9PiB7fSxcbiAgb25BbGxSb3dFeHBhbmQ6ICgpID0+IHt9LFxufTtcbmNvbnN0IFJvd0V4cGFuZENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFJvd0V4cGFuZENvbnRleHRWYWx1ZT4oXG4gIGRlZmF1bHRSb3dFeHBhbmRDb250ZXh0XG4pO1xuXG5jbGFzcyBSb3dFeHBhbmRQcm92aWRlciBleHRlbmRzIENvbXBvbmVudDxSb3dFeHBhbmRQcm92aWRlclByb3BzPiB7XG4gIHN0YXRlID0ge1xuICAgIGV4cGFuZGVkOiB0aGlzLnByb3BzLmV4cGFuZFJvdy5leHBhbmRlZCB8fCBbXSxcbiAgICBpc0Nsb3Npbmc6IHRoaXMucHJvcHMuZXhwYW5kUm93LmlzQ2xvc2luZyB8fCBbXSxcbiAgfTtcblxuICBvbkNsb3NlZCA9IChjbG9zZWRSb3c6IGFueSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNDbG9zaW5nOiB0aGlzLnN0YXRlLmlzQ2xvc2luZy5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gY2xvc2VkUm93KSxcbiAgICB9KTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgIG5leHRQcm9wczogUm93RXhwYW5kUHJvdmlkZXJQcm9wcyxcbiAgICBwcmV2U3RhdGU6IHsgZXhwYW5kZWQ6IGFueVtdOyBpc0Nsb3Npbmc6IGFueVtdIH1cbiAgKSB7XG4gICAgY29uc3QgeyBleHBhbmRSb3cgfSA9IG5leHRQcm9wcztcblxuICAgIGlmIChleHBhbmRSb3cpIHtcbiAgICAgIGNvbnN0IHsgbm9uRXhwYW5kYWJsZSA9IFtdIH0gPSBleHBhbmRSb3c7XG5cbiAgICAgIGxldCBuZXh0RXhwYW5kZWQgPSBbLi4uKGV4cGFuZFJvdy5leHBhbmRlZCB8fCBwcmV2U3RhdGUuZXhwYW5kZWQpXTtcbiAgICAgIG5leHRFeHBhbmRlZCA9IG5leHRFeHBhbmRlZC5maWx0ZXIoXG4gICAgICAgIChyb3dJZCkgPT4gIV8uY29udGFpbnMobm9uRXhwYW5kYWJsZSwgcm93SWQpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBpc0Nsb3NpbmcgPSBwcmV2U3RhdGUuZXhwYW5kZWQucmVkdWNlKChhY2M6IGFueSwgY3VyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKG5leHRFeHBhbmRlZCwgY3VyKSkge1xuICAgICAgICAgIGFjYy5wdXNoKGN1cik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwYW5kZWQ6IG5leHRFeHBhbmRlZCxcbiAgICAgICAgaXNDbG9zaW5nLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dFeHBhbmQgPSAoXG4gICAgcm93S2V5OiBhbnksXG4gICAgaXNFeHBhbmRlZDogYm9vbGVhbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGU6IGFueVxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhLFxuICAgICAga2V5RmllbGQsXG4gICAgICBleHBhbmRSb3c6IHsgb25FeHBhbmQsIG9ubHlPbmVFeHBhbmRpbmcsIG5vbkV4cGFuZGFibGUgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChub25FeHBhbmRhYmxlICYmIF8uY29udGFpbnMobm9uRXhwYW5kYWJsZSwgcm93S2V5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjdXJyRXhwYW5kZWQgPSBbLi4udGhpcy5zdGF0ZS5leHBhbmRlZF07XG4gICAgbGV0IGN1cnJJc0Nsb3NpbmcgPSBbLi4udGhpcy5zdGF0ZS5pc0Nsb3NpbmddO1xuXG4gICAgaWYgKGlzRXhwYW5kZWQpIHtcbiAgICAgIGlmIChvbmx5T25lRXhwYW5kaW5nKSB7XG4gICAgICAgIGN1cnJJc0Nsb3NpbmcgPSBjdXJySXNDbG9zaW5nLmNvbmNhdChjdXJyRXhwYW5kZWQpO1xuICAgICAgICBjdXJyRXhwYW5kZWQgPSBbcm93S2V5XTtcbiAgICAgIH0gZWxzZSBjdXJyRXhwYW5kZWQucHVzaChyb3dLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJySXNDbG9zaW5nLnB1c2gocm93S2V5KTtcbiAgICAgIGN1cnJFeHBhbmRlZCA9IGN1cnJFeHBhbmRlZC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gcm93S2V5KTtcbiAgICB9XG5cbiAgICBpZiAob25FeHBhbmQpIHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFPcGVyYXRvci5nZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCByb3dLZXkpO1xuICAgICAgb25FeHBhbmQocm93LCBpc0V4cGFuZGVkLCByb3dJbmRleCwgZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBleHBhbmRlZDogY3VyckV4cGFuZGVkLCBpc0Nsb3Npbmc6IGN1cnJJc0Nsb3NpbmcgfSkpO1xuICB9O1xuXG4gIGhhbmRsZUFsbFJvd0V4cGFuZCA9IChlOiBhbnksIGV4cGFuZEFsbDogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGEsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGV4cGFuZFJvdzogeyBvbkV4cGFuZEFsbCwgbm9uRXhwYW5kYWJsZSB9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBleHBhbmRlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGxldCBjdXJyRXhwYW5kZWQ6IGFueVtdO1xuXG4gICAgaWYgKGV4cGFuZEFsbCkge1xuICAgICAgY3VyckV4cGFuZGVkID0gZXhwYW5kZWQuY29uY2F0KFxuICAgICAgICBkYXRhT3BlcmF0b3IuZXhwYW5kYWJsZUtleXMoZGF0YSwga2V5RmllbGQsIG5vbkV4cGFuZGFibGUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyRXhwYW5kZWQgPSBleHBhbmRlZC5maWx0ZXIoXG4gICAgICAgIChzKSA9PiB0eXBlb2YgZGF0YS5maW5kKChkKSA9PiBfLmdldChkLCBrZXlGaWVsZCkgPT09IHMpID09PSBcInVuZGVmaW5lZFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvbkV4cGFuZEFsbCkge1xuICAgICAgb25FeHBhbmRBbGwoXG4gICAgICAgIGV4cGFuZEFsbCxcbiAgICAgICAgZGF0YU9wZXJhdG9yLmdldEV4cGFuZGVkUm93cyhkYXRhLCBrZXlGaWVsZCwgY3VyckV4cGFuZGVkKSxcbiAgICAgICAgZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IGV4cGFuZGVkOiBjdXJyRXhwYW5kZWQgfSkpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGRhdGEsIGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgLi4udGhpcy5wcm9wcy5leHBhbmRSb3csXG4gICAgICAgICAgbm9uRXhwYW5kYWJsZTogdGhpcy5wcm9wcy5leHBhbmRSb3cubm9uRXhwYW5kYWJsZSxcbiAgICAgICAgICBleHBhbmRlZDogdGhpcy5zdGF0ZS5leHBhbmRlZCxcbiAgICAgICAgICBpc0Nsb3Npbmc6IHRoaXMuc3RhdGUuaXNDbG9zaW5nLFxuICAgICAgICAgIG9uQ2xvc2VkOiB0aGlzLm9uQ2xvc2VkLFxuICAgICAgICAgIGlzQW55RXhwYW5kczogZGF0YU9wZXJhdG9yLmlzQW55RXhwYW5kcyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uUm93RXhwYW5kOiB0aGlzLmhhbmRsZVJvd0V4cGFuZCxcbiAgICAgICAgICBvbkFsbFJvd0V4cGFuZDogdGhpcy5oYW5kbGVBbGxSb3dFeHBhbmQsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKHtcbiAgUHJvdmlkZXI6IFJvd0V4cGFuZFByb3ZpZGVyLFxuICBDb25zdW1lcjogUm93RXhwYW5kQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZDLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIENhcHRpb25Qcm9wcyB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBib290c3RyYXA0PzogYm9vbGVhbjtcbn1cblxuY29uc3QgQ2FwdGlvbjogRkM8Q2FwdGlvblByb3BzPiA9IChwcm9wcykgPT4ge1xuICBpZiAoIXByb3BzLmNoaWxkcmVuKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjYXB0aW9uID0gcHJvcHMuYm9vdHN0cmFwNCA/IChcbiAgICA8Y2FwdGlvbiBzdHlsZT17IHsgY2FwdGlvblNpZGU6IFwidG9wXCIgfSB9Pntwcm9wcy5jaGlsZHJlbn08L2NhcHRpb24+XG4gICkgOiAoXG4gICAgPGNhcHRpb24+e3Byb3BzLmNoaWxkcmVufTwvY2FwdGlvbj5cbiAgKTtcblxuICByZXR1cm4gY2FwdGlvbjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENhcHRpb247XG4iLCJpbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBldmVudHM6IHN0cmluZ1tdID0gW1xuICBcIm9uQ2xpY2tcIixcbiAgXCJvbkRvdWJsZUNsaWNrXCIsXG4gIFwib25Nb3VzZUVudGVyXCIsXG4gIFwib25Nb3VzZUxlYXZlXCIsXG4gIFwib25Db250ZXh0TWVudVwiLFxuICBcIm9uQXV4Q2xpY2tcIlxuXTtcblxuaW50ZXJmYWNlIENlbGxFdmVudERlbGVnYXRlclByb3BzIHtcbiAgY29sdW1uOiBhbnk7XG4gIGNvbHVtbkluZGV4PzogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgQ2VsbEV2ZW50RGVsZWdhdGVyID0gPFxuICBUIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55XG4+KEV4dGVuZEJhc2U6IFQpID0+IHtcbiAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgRXh0ZW5kQmFzZSB7XG4gICAgY29uc3RydWN0b3IoLi4ucHJvcHM6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5wcm9wcyk7XG4gICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIgPVxuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKFxuICAgICAgY2I6IChlOiBhbnksIGNvbHVtbjogYW55LCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICByZXR1cm4gKGU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbHVtbiwgY29sdW1uSW5kZXgsIGluZGV4IH06IENlbGxFdmVudERlbGVnYXRlclByb3BzID1cbiAgICAgICAgICB0aGlzLnByb3BzO1xuICAgICAgICBjYihlLCBjb2x1bW4sIHR5cGVvZiBjb2x1bW5JbmRleCAhPT0gXCJ1bmRlZmluZWRcIiA/IGNvbHVtbkluZGV4IDogaW5kZXgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBkZWxlZ2F0ZShhdHRyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICBjb25zdCBuZXdBdHRyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHsgLi4uYXR0cnMgfTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgIGlmIChfLmluY2x1ZGVzKGV2ZW50cywgYXR0cikpIHtcbiAgICAgICAgICBuZXdBdHRyc1thdHRyXSA9IHRoaXMuY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlcihhdHRyc1thdHRyXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ld0F0dHJzO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBGQyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0cy9ib290c3RyYXBcIjtcblxuY29uc3QgU29ydFN5bWJvbDogRkMgPSAoKSA9PiAoXG4gIDxCb290c3RyYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgIHsoeyBib290c3RyYXA0IH0pID0+XG4gICAgICBib290c3RyYXA0ID8gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvcmRlci00XCIgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9yZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCIgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZHJvcHVwXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApXG4gICAgfVxuICA8L0Jvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBTb3J0U3ltYm9sO1xuIiwiaW1wb3J0IHsgVFlQRV9CT09MRUFOLCBUWVBFX0RBVEUsIFRZUEVfTlVNQkVSLCBUWVBFX1NUUklORyB9IGZyb20gXCIuLi9jb25zdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZUNvbnZlcnQgPSAodHlwZTogYW55LCB2YWx1ZTogYW55KSA9PiB7XG4gIGlmICh0eXBlID09PSBUWVBFX1NUUklORykge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRZUEVfTlVNQkVSKSB7XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVFlQRV9CT09MRUFOKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlID09PSBcInRydWVcIjtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUWVBFX0RBVEUpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBDZWxsIGZyb20gXCIuLi9jZWxsXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFJvd1Byb3BzIH0gZnJvbSBcIi4vc2hvdWxkLXVwZGF0ZXJcIjtcblxuaW50ZXJmYWNlIFJvd1B1cmVDb250ZW50UHJvcHMgZXh0ZW5kcyBSb3dQcm9wcyB7XG4gIGF0c3RhcnQ/OiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgc2hvdWxkVXBkYXRlPzogYm9vbGVhbjtcbiAgaXNFZGl0YWJsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvd1B1cmVDb250ZW50IGV4dGVuZHMgQ29tcG9uZW50PFJvd1B1cmVDb250ZW50UHJvcHM+IHtcbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogUm93UHVyZUNvbnRlbnRQcm9wcykge1xuICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnNob3VsZFVwZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmV0dXJuIG5leHRQcm9wcy5zaG91bGRVcGRhdGU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgaXNFZGl0YWJsZSxcbiAgICAgIGVkaXRpbmdSb3dJZHgsXG4gICAgICBlZGl0aW5nQ29sSWR4LFxuICAgICAgYXRzdGFydCxcbiAgICAgIGNsaWNrVG9FZGl0LFxuICAgICAgZGJjbGlja1RvRWRpdCxcbiAgICAgIEVkaXRpbmdDZWxsQ29tcG9uZW50LFxuICAgICAgdGFiSW5kZXhTdGFydCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGxldCB0YWJJbmRleCA9IHRhYkluZGV4U3RhcnQ7XG5cbiAgICByZXR1cm4gY29sdW1ucz8ubWFwKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB7IGRhdGFGaWVsZCB9ID0gY29sdW1uO1xuICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJvdywgZGF0YUZpZWxkKTtcbiAgICAgIGlmIChcbiAgICAgICAgcm93SW5kZXggPT09IGVkaXRpbmdSb3dJZHggJiZcbiAgICAgICAgaW5kZXggPT09IGVkaXRpbmdDb2xJZHggJiZcbiAgICAgICAgRWRpdGluZ0NlbGxDb21wb25lbnRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxFZGl0aW5nQ2VsbENvbXBvbmVudFxuICAgICAgICAgICAga2V5PXtgJHtjb250ZW50fS0ke2luZGV4fS1lZGl0aW5nYH1cbiAgICAgICAgICAgIHJvdz17cm93fVxuICAgICAgICAgICAgcm93SW5kZXg9e3Jvd0luZGV4fVxuICAgICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgICBjb2x1bW5JbmRleD17aW5kZXh9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlbmRlciBjZWxsXG4gICAgICBsZXQgY2VsbFRpdGxlO1xuICAgICAgbGV0IGNlbGxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHt9O1xuICAgICAgbGV0IGNlbGxBdHRyczogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+ID0ge307XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbi5hdHRycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNlbGxBdHRycyA9IHsgLi4uY29sdW1uLmF0dHJzKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KSB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29sdW1uLmF0dHJzID09PSBcIm9iamVjdFwiICYmIGNvbHVtbi5hdHRycyAhPT0gbnVsbCkge1xuICAgICAgICBjZWxsQXR0cnMgPSB7IC4uLmNvbHVtbi5hdHRycyB9O1xuICAgICAgfVxuXG5cbiAgICAgIGlmIChjb2x1bW4uZXZlbnRzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHsgLi4uY29sdW1uLmV2ZW50cyB9O1xuICAgICAgICBPYmplY3Qua2V5cyhldmVudHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbkZuID0gZXZlbnRzW2tleV07XG4gICAgICAgICAgZXZlbnRzW2tleV0gPSAoLi4ucmVzdDogYW55W10pID0+IG9yaWdpbkZuKC4uLnJlc3QsIHJvdywgcm93SW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY2VsbEF0dHJzID0geyAuLi5jZWxsQXR0cnMsIC4uLmV2ZW50cyB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZWxsQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihjb2x1bW4uY2xhc3NlcylcbiAgICAgICAgPyBjb2x1bW4uY2xhc3Nlcyhjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleClcbiAgICAgICAgOiBjb2x1bW4uY2xhc3NlcztcblxuICAgICAgaWYgKGNvbHVtbi5zdHlsZSkge1xuICAgICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oY29sdW1uLnN0eWxlKVxuICAgICAgICAgID8gY29sdW1uLnN0eWxlKGNvbnRlbnQsIHJvdywgcm93SW5kZXgsIGluZGV4KVxuICAgICAgICAgIDogY29sdW1uLnN0eWxlO1xuICAgICAgICBjZWxsU3R5bGUgPSB7IC4uLmNlbGxTdHlsZSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLnRpdGxlKSB7XG4gICAgICAgIGNlbGxUaXRsZSA9IF8uaXNGdW5jdGlvbihjb2x1bW4udGl0bGUpXG4gICAgICAgICAgPyBjb2x1bW4udGl0bGUoY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgICAgOiBjb250ZW50O1xuICAgICAgICBjZWxsQXR0cnMudGl0bGUgPSBjZWxsVGl0bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW4uYWxpZ24pIHtcbiAgICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihjb2x1bW4uYWxpZ24pXG4gICAgICAgICAgPyBjb2x1bW4uYWxpZ24oY29udGVudCwgcm93LCByb3dJbmRleCwgaW5kZXgpXG4gICAgICAgICAgOiBjb2x1bW4uYWxpZ247XG4gICAgICB9XG5cbiAgICAgIGlmIChjZWxsQ2xhc3NlcykgY2VsbEF0dHJzLmNsYXNzTmFtZSA9IGNlbGxDbGFzc2VzO1xuICAgICAgaWYgKCFfLmlzRW1wdHlPYmplY3QoY2VsbFN0eWxlKSkgY2VsbEF0dHJzLnN0eWxlID0gY2VsbFN0eWxlO1xuXG4gICAgICBsZXQgZWRpdGFibGVDZWxsID0gXy5pc0RlZmluZWQoY29sdW1uLmVkaXRhYmxlKSA/IGNvbHVtbi5lZGl0YWJsZSA6IHRydWU7XG4gICAgICBpZiAoY29sdW1uLmRhdGFGaWVsZCA9PT0ga2V5RmllbGQgfHwgIWlzRWRpdGFibGUpIGVkaXRhYmxlQ2VsbCA9IGZhbHNlO1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb2x1bW4uZWRpdGFibGUpKSB7XG4gICAgICAgIGVkaXRhYmxlQ2VsbCA9IGNvbHVtbi5lZGl0YWJsZShjb250ZW50LCByb3csIHJvd0luZGV4LCBpbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGFiSW5kZXhTdGFydCA9PT0gJ251bWJlcicgJiYgdGFiSW5kZXhTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgY2VsbEF0dHJzLnRhYkluZGV4ID0gdGFiSW5kZXghO1xuICAgICAgICB0YWJJbmRleCA9IHRhYkluZGV4ISArIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDZWxsXG4gICAgICAgICAga2V5PXtgJHtjb250ZW50fS0ke2luZGV4fWB9XG4gICAgICAgICAgcm93PXtyb3d9XG4gICAgICAgICAgZWRpdGFibGU9e2VkaXRhYmxlQ2VsbC50b1N0cmluZygpfVxuICAgICAgICAgIHJvd2luZGV4PXtyb3dJbmRleCA/PyAwfVxuICAgICAgICAgIGNvbHVtbmluZGV4PXtpbmRleH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICBhdHN0YXJ0PXthdHN0YXJ0fVxuICAgICAgICAgIGNsaWNrdG9lZGl0PXtjbGlja1RvRWRpdCA/IGNsaWNrVG9FZGl0LnRvU3RyaW5nKCkgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgZGJjbGlja3RvZWRpdD17ZGJjbGlja1RvRWRpdCA/IGRiY2xpY2tUb0VkaXQudG9TdHJpbmcoKSA6IFwiZmFsc2VcIn1cbiAgICAgICAgICB7Li4uY2VsbEF0dHJzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgQ29sdW1uUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueTtcbiAgY29sdW1uczogYW55W107XG4gIHRvZ2dsZXM/OiB7IFtkYXRhRmllbGQ6IHN0cmluZ106IGJvb2xlYW4gfTtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuaW50ZXJmYWNlIENvbHVtbkNvbnRleHRWYWx1ZSB7XG4gIGNvbHVtbnM6IGFueVtdO1xuICB0b2dnbGVzPzogeyBbZGF0YUZpZWxkOiBzdHJpbmddOiBib29sZWFuIH07XG59XG5cbmNvbnN0IGRlZmF1bHRDb2x1bW5Db250ZXh0ID0geyBjb2x1bW5zOiBbXSwgdG9nZ2xlczogdW5kZWZpbmVkIH07XG5jb25zdCBDb2x1bW5Db250ZXh0ID1cbiAgUmVhY3QuY3JlYXRlQ29udGV4dDxDb2x1bW5Db250ZXh0VmFsdWU+KGRlZmF1bHRDb2x1bW5Db250ZXh0KTtcblxuY29uc3QgQ29sdW1uUHJvdmlkZXI6IFJlYWN0LkZDPENvbHVtblByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY29sdW1ucyxcbiAgdG9nZ2xlcyxcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGxldCB0b2dnbGVDb2x1bW5zO1xuXG4gIGlmICh0b2dnbGVzKSB7XG4gICAgdG9nZ2xlQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IHRvZ2dsZXNbY29sdW1uLmRhdGFGaWVsZF0pO1xuICB9IGVsc2Uge1xuICAgIHRvZ2dsZUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiAhY29sdW1uLmhpZGRlbik7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8Q29sdW1uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyBjb2x1bW5zOiB0b2dnbGVDb2x1bW5zIH19PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29sdW1uQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBDb2x1bW5Qcm92aWRlcixcbiAgQ29uc3VtZXI6IENvbHVtbkNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUm93RXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9ldmVudC1kZWxlZ2F0ZXJcIjtcbmltcG9ydCBSb3dQdXJlQ29udGVudCBmcm9tIFwiLi9yb3ctcHVyZS1jb250ZW50XCI7XG5pbXBvcnQgc2hvdWxkVXBkYXRlciwgeyBSb3dQcm9wcyB9IGZyb20gXCIuL3Nob3VsZC11cGRhdGVyXCI7XG5cbmNsYXNzIFNpbXBsZVJvdyBleHRlbmRzIHNob3VsZFVwZGF0ZXIoXG4gIFJvd0V2ZW50RGVsZWdhdGVyKENvbXBvbmVudDxSb3dQcm9wcz4pXG4pIHtcbiAgc2hvdWxkVXBkYXRlUm93Q29udGVudCA9IGZhbHNlO1xuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IFJvd1Byb3BzKSB7XG4gICAgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50ID0gZmFsc2U7XG4gICAgdGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50ID0gdGhpcy5zaG91bGRSb3dDb250ZW50VXBkYXRlKG5leHRQcm9wcyk7XG4gICAgaWYgKHRoaXMuc2hvdWxkVXBkYXRlUm93Q29udGVudCkgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5zaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMobmV4dFByb3BzKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBlZGl0YWJsZSA9IHRydWUsXG4gICAgICBjbGFzc05hbWUgPSB1bmRlZmluZWQsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgYXR0cnMgPSB7fSxcbiAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgdGFiSW5kZXhDZWxsLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHRyQXR0cnMgPSB0aGlzLmRlbGVnYXRlKGF0dHJzKTtcbiAgICBjb25zdCB0YWJJbmRleFN0YXJ0ID0gdGhpcy5wcm9wcy5yb3dJbmRleCEgKiB2aXNpYmxlQ29sdW1uU2l6ZSEgKyAxO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSB7Li4udHJBdHRyc30+XG4gICAgICAgIDxSb3dQdXJlQ29udGVudFxuICAgICAgICAgIHNob3VsZFVwZGF0ZT17dGhpcy5zaG91bGRVcGRhdGVSb3dDb250ZW50fVxuICAgICAgICAgIHRhYkluZGV4U3RhcnQ9e3RhYkluZGV4Q2VsbCA/IHRhYkluZGV4U3RhcnQgOiAtMX1cbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgLz5cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVSb3c7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgRmlsdGVyUHJvcHMge1xuICBkYXRhOiBhbnk7XG4gIGN1cnJGaWx0ZXJzOiBhbnk7XG59XG5cbmludGVyZmFjZSBTZWFyY2hQcm9wcyB7XG4gIGRhdGE6IGFueTtcbn1cblxuaW50ZXJmYWNlIFNvcnRQcm9wcyB7XG4gIGRhdGE6IGFueTtcbn1cblxuaW50ZXJmYWNlIFBhZ2luYXRpb25Qcm9wcyB7XG4gIGRhdGE6IGFueTtcbn1cblxuLy9cbmludGVyZmFjZSBEYXRhUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueVtdO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufVxuXG5pbnRlcmZhY2UgRGF0YVByb3ZpZGVyU3RhdGUge1xuICBkYXRhOiBhbnlbXTtcbn1cblxuaW50ZXJmYWNlIERhdGFDb250ZXh0VmFsdWUge1xuICBkYXRhOiBhbnlbXTtcbiAgZ2V0RGF0YTogKFxuICAgIGZpbHRlclByb3BzPzogRmlsdGVyUHJvcHMsXG4gICAgc2VhcmNoUHJvcHM/OiBTZWFyY2hQcm9wcyxcbiAgICBzb3J0UHJvcHM/OiBTb3J0UHJvcHMsXG4gICAgcGFnaW5hdGlvblByb3BzPzogUGFnaW5hdGlvblByb3BzXG4gICkgPT4gYW55W107XG59XG5cbmNvbnN0IGRlZmF1bHREYXRhQ29udGV4dCA9IHsgZGF0YTogW10sIGdldERhdGE6ICgpID0+IFtdIH07XG5jb25zdCBEYXRhQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8RGF0YUNvbnRleHRWYWx1ZT4oZGVmYXVsdERhdGFDb250ZXh0KTtcblxuY2xhc3MgRGF0YVByb3ZpZGVyIGV4dGVuZHMgQ29tcG9uZW50PERhdGFQcm92aWRlclByb3BzLCBEYXRhUHJvdmlkZXJTdGF0ZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRGF0YVByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgZGF0YTogcHJvcHMuZGF0YSB9O1xuICB9XG5cbiAgZ2V0RGF0YSA9IChcbiAgICBmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzLFxuICAgIHNlYXJjaFByb3BzPzogU2VhcmNoUHJvcHMsXG4gICAgc29ydFByb3BzPzogU29ydFByb3BzLFxuICAgIHBhZ2luYXRpb25Qcm9wcz86IFBhZ2luYXRpb25Qcm9wc1xuICApID0+IHtcbiAgICBpZiAocGFnaW5hdGlvblByb3BzKSB7XG4gICAgICByZXR1cm4gcGFnaW5hdGlvblByb3BzLmRhdGE7XG4gICAgfSBlbHNlIGlmIChzb3J0UHJvcHMpIHtcbiAgICAgIHJldHVybiBzb3J0UHJvcHMuZGF0YTtcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFByb3BzKSB7XG4gICAgICByZXR1cm4gc2VhcmNoUHJvcHMuZGF0YTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlclByb3BzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpbHRlclByb3BzLmRhdGEubGVuZ3RoIDwgdGhpcy5wcm9wcy5kYXRhLmxlbmd0aCAmJlxuICAgICAgICAhXy5pc0VtcHR5KE9iamVjdC5rZXlzKGZpbHRlclByb3BzLmN1cnJGaWx0ZXJzKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmlsdGVyUHJvcHMuZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEYXRhQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgICBnZXREYXRhOiB0aGlzLmdldERhdGEsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9EYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBEYXRhUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBEYXRhQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3Rpb25Db250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHRzL3NlbGVjdGlvbi1jb250ZXh0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgU2VsZWN0aW9uQ29udGV4dCA9IGNyZWF0ZVNlbGVjdGlvbkNvbnRleHQoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2l0aFJvd1NlbGVjdGlvbjxUIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+PihcbiAgQ29tcG9uZW50OiBUXG4pOiBSZWFjdC5GQzxSZWFjdC5Db21wb25lbnRQcm9wczxUPj4ge1xuICBjb25zdCByZW5kZXJXaXRoU2VsZWN0aW9uID0gKHByb3BzOiBhbnksIHNlbGVjdFJvdzogYW55KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gcHJvcHMudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBfLmNvbnRhaW5zKHNlbGVjdFJvdy5zZWxlY3RlZCwga2V5KTtcbiAgICBjb25zdCBzZWxlY3RhYmxlID1cbiAgICAgICFzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSB8fCAhXy5jb250YWlucyhzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSwga2V5KTtcbiAgICBjb25zdCBub3RTZWxlY3RhYmxlID0gXy5jb250YWlucyhzZWxlY3RSb3cubm9uU2VsZWN0YWJsZSwga2V5KTtcblxuICAgIGxldCB7IHN0eWxlLCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFN0eWxlID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5zdHlsZSlcbiAgICAgICAgPyBzZWxlY3RSb3cuc3R5bGUocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cuc3R5bGU7XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3NlcyA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuY2xhc3NlcylcbiAgICAgICAgPyBzZWxlY3RSb3cuY2xhc3Nlcyhwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICA6IHNlbGVjdFJvdy5jbGFzc2VzO1xuXG4gICAgICBzdHlsZSA9IHtcbiAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgIC4uLnNlbGVjdGVkU3R5bGUsXG4gICAgICB9O1xuICAgICAgY2xhc3NOYW1lID0gY3MoY2xhc3NOYW1lLCBzZWxlY3RlZENsYXNzZXMpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHNlbGVjdFJvdy5iZ0NvbG9yKSB7XG4gICAgICAgIHN0eWxlID0gc3R5bGUgfHwge307XG4gICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IF8uaXNGdW5jdGlvbihzZWxlY3RSb3cuYmdDb2xvcilcbiAgICAgICAgICA/IHNlbGVjdFJvdy5iZ0NvbG9yKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgICAgOiBzZWxlY3RSb3cuYmdDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm90U2VsZWN0YWJsZSkge1xuICAgICAgY29uc3Qgbm90U2VsZWN0YWJsZVN0eWxlID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGUpXG4gICAgICAgID8gc2VsZWN0Um93Lm5vblNlbGVjdGFibGVTdHlsZShwcm9wcy5yb3csIHByb3BzLnJvd0luZGV4KVxuICAgICAgICA6IHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlU3R5bGU7XG5cbiAgICAgIGNvbnN0IG5vdFNlbGVjdGFibGVDbGFzc2VzID0gXy5pc0Z1bmN0aW9uKHNlbGVjdFJvdy5ub25TZWxlY3RhYmxlQ2xhc3NlcylcbiAgICAgICAgPyBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXMocHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBzZWxlY3RSb3cubm9uU2VsZWN0YWJsZUNsYXNzZXM7XG5cbiAgICAgIHN0eWxlID0ge1xuICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgLi4ubm90U2VsZWN0YWJsZVN0eWxlLFxuICAgICAgfTtcbiAgICAgIGNsYXNzTmFtZSA9IGNzKGNsYXNzTmFtZSwgbm90U2VsZWN0YWJsZUNsYXNzZXMpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHNlbGVjdFJvdz17c2VsZWN0Um93fVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWR9XG4gICAgICAgIHNlbGVjdGFibGU9e3NlbGVjdGFibGV9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyOiBSZWFjdC5GQzxSZWFjdC5Db21wb25lbnRQcm9wczxUPj4gPSAoXG4gICAgcHJvcHNcbiAgKSA9PiAoXG4gICAgPFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHNlbGVjdFJvdykgPT4gcmVuZGVyV2l0aFNlbGVjdGlvbihwcm9wcywgc2VsZWN0Um93KX1cbiAgICA8L1NlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICk7XG5cbiAgV2l0aFNlbGVjdGlvblJvd0NvbnN1bWVyLmRpc3BsYXlOYW1lID0gXCJXaXRoU2VsZWN0aW9uUm93Q29uc3VtZXJcIjtcbiAgcmV0dXJuIFdpdGhTZWxlY3Rpb25Sb3dDb25zdW1lcjtcbn1cbiIsIi8qIGVzbGludCBuby1uZXN0ZWQtdGVybmFyeTogMCAqL1xuLyogZXNsaW50IG5vLWxvbmVseS1pZjogMCAqL1xuLyogZXNsaW50IG5vLXVuZGVyc2NvcmUtZGFuZ2xlOiAwICovXG5pbXBvcnQgeyBTT1JUX0FTQywgU09SVF9ERVNDIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gY29tcGFyYXRvcihhOiBhbnksIGI6IGFueSkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAodHlwZW9mIGIgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXN1bHQgPSBiLmxvY2FsZUNvbXBhcmUoYSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gYSA+IGIgPyAtMSA6IGEgPCBiID8gMSA6IDA7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IHNvcnQgPSAoXG4gIGRhdGE6IGFueSxcbiAgc29ydE9yZGVyOiBhbnksXG4gIHsgZGF0YUZpZWxkLCBzb3J0RnVuYywgc29ydFZhbHVlIH06IGFueVxuKSA9PiB7XG4gIGNvbnN0IF9kYXRhID0gWy4uLmRhdGFdO1xuICBfZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgdmFsdWVBID0gXy5nZXQoYSwgZGF0YUZpZWxkKTtcbiAgICBsZXQgdmFsdWVCID0gXy5nZXQoYiwgZGF0YUZpZWxkKTtcbiAgICBpZiAoc29ydFZhbHVlKSB7XG4gICAgICB2YWx1ZUEgPSBzb3J0VmFsdWUodmFsdWVBLCBhKTtcbiAgICAgIHZhbHVlQiA9IHNvcnRWYWx1ZSh2YWx1ZUIsIGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZUEgPSBfLmlzRGVmaW5lZCh2YWx1ZUEpID8gdmFsdWVBIDogXCJcIjtcbiAgICAgIHZhbHVlQiA9IF8uaXNEZWZpbmVkKHZhbHVlQikgPyB2YWx1ZUIgOiBcIlwiO1xuICAgIH1cblxuICAgIGlmIChzb3J0RnVuYykge1xuICAgICAgcmVzdWx0ID0gc29ydEZ1bmModmFsdWVBLCB2YWx1ZUIsIHNvcnRPcmRlciwgZGF0YUZpZWxkLCBhLCBiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNvcnRPcmRlciA9PT0gU09SVF9ERVNDKSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbXBhcmF0b3IodmFsdWVBLCB2YWx1ZUIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZUIsIHZhbHVlQSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICByZXR1cm4gX2RhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgbmV4dE9yZGVyID0gKFxuICBjdXJyZW50U29ydENvbHVtbjogYW55LFxuICB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9OiBhbnksXG4gIGRlZmF1bHRPcmRlciA9IFNPUlRfREVTQ1xuKSA9PiB7XG4gIGlmICghc29ydENvbHVtbiB8fCBjdXJyZW50U29ydENvbHVtbi5kYXRhRmllbGQgIT09IHNvcnRDb2x1bW4uZGF0YUZpZWxkKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRPcmRlcjtcbiAgfVxuICByZXR1cm4gc29ydE9yZGVyID09PSBTT1JUX0RFU0MgPyBTT1JUX0FTQyA6IFNPUlRfREVTQztcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBCb290c3RyYXBDb250ZXh0VmFsdWUge1xuICBib290c3RyYXA0OiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0Qm9vdHN0cmFwQ29udGV4dCA9IHsgYm9vdHN0cmFwNDogdHJ1ZSB9O1xuXG5leHBvcnQgY29uc3QgQm9vdHN0cmFwQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8Qm9vdHN0cmFwQ29udGV4dFZhbHVlPihcbiAgZGVmYXVsdEJvb3RzdHJhcENvbnRleHRcbik7XG4iLCIvKiBlc2xpbnQgbm8tZW1wdHk6IDAgKi9cbi8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogMCAqL1xuLyogZXNsaW50IHByZWZlci1yZXN0LXBhcmFtczogMCAqL1xuaW1wb3J0IF8gZnJvbSBcInVuZGVyc2NvcmVcIjtcblxuZnVuY3Rpb24gc3BsaXROZXN0ZWQoc3RyOiBhbnkpIHtcbiAgcmV0dXJuIFtzdHJdLmpvaW4oXCIuXCIpLnJlcGxhY2UoL1xcWy9nLCBcIi5cIikucmVwbGFjZSgvXFxdL2csIFwiXCIpLnNwbGl0KFwiLlwiKTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnMobGlzdDogYW55LCB2YWx1ZTogYW55KSB7XG4gIGlmIChfLmluY2x1ZGVzKSB7XG4gICAgcmV0dXJuIF8uaW5jbHVkZXMobGlzdCwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3QuaW5kZXhPZih2YWx1ZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0KHRhcmdldDogYW55LCBmaWVsZDogYW55KSB7XG4gIGNvbnN0IGRpcmVjdEdldCA9IHRhcmdldFtmaWVsZF07XG4gIGlmIChkaXJlY3RHZXQgIT09IHVuZGVmaW5lZCAmJiBkaXJlY3RHZXQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZGlyZWN0R2V0O1xuICB9XG5cbiAgY29uc3QgcGF0aEFycmF5ID0gc3BsaXROZXN0ZWQoZmllbGQpO1xuICBsZXQgcmVzdWx0O1xuICB0cnkge1xuICAgIHJlc3VsdCA9IHBhdGhBcnJheS5yZWR1Y2UoKGN1cnIsIHBhdGgpID0+IGN1cnJbcGF0aF0sIHRhcmdldCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQ6IGFueSwgZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgc2FmZSA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGhBcnJheSA9IHNwbGl0TmVzdGVkKGZpZWxkKTtcbiAgbGV0IGxldmVsID0gMDtcbiAgcGF0aEFycmF5LnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIGxldmVsICs9IDE7XG4gICAgaWYgKHR5cGVvZiBhW2JdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoIXNhZmUpIHRocm93IG5ldyBFcnJvcihgJHthfS4ke2J9IGlzIHVuZGVmaW5lZGApO1xuICAgICAgYVtiXSA9IHt9O1xuICAgICAgcmV0dXJuIGFbYl07XG4gICAgfVxuXG4gICAgaWYgKGxldmVsID09PSBwYXRoQXJyYXkubGVuZ3RoKSB7XG4gICAgICBhW2JdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhW2JdO1xuICB9LCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5T2JqZWN0KG9iajogYW55KSB7XG4gIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2xlZXAoZm46IGFueSwgbXM6IGFueSkge1xuICByZXR1cm4gc2V0VGltZW91dCgoKSA9PiBmbigpLCBtcyk7XG59XG5cbmZ1bmN0aW9uIGRlYm91bmNlKHRoaXM6IGFueSwgZnVuYzogYW55LCB3YWl0OiBhbnksIGltbWVkaWF0ZTogYW55KSB7XG4gIGxldCB0aW1lb3V0OiBhbnk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjb25zdCBsYXRlciA9ICgpID0+IHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG5cbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgfHwgMCk7XG5cbiAgICBpZiAoY2FsbE5vdykge1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmFzc2lnbihfLCB7XG4gIGdldCxcbiAgc2V0LFxuICBpc0RlZmluZWQsXG4gIGlzRW1wdHlPYmplY3QsXG4gIHNsZWVwLFxuICBkZWJvdW5jZSxcbiAgY29udGFpbnNcbn0pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5zaW9uSGVhZGVyQ2VsbFByb3BzIHtcbiAgaXNBbnlFeHBhbmRzPzogYm9vbGVhbjtcbiAgb25BbGxSb3dFeHBhbmQ/OiAoXG4gICAgZTogUmVhY3QuTW91c2VFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sXG4gICAgZXhwYW5kQWxsOiBib29sZWFuXG4gICkgPT4gdm9pZDtcbiAgZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXI/OiAoYXJnczogeyBpc0FueUV4cGFuZHM6IGJvb2xlYW4gfSkgPT4gUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbnNpb25IZWFkZXJDZWxsIGV4dGVuZHMgQ29tcG9uZW50PEV4cGFuc2lvbkhlYWRlckNlbGxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRXhwYW5zaW9uSGVhZGVyQ2VsbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljayA9IHRoaXMuaGFuZGxlQ2hlY2tCb3hDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ2hlY2tCb3hDbGljayhlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50Pikge1xuICAgIGNvbnN0IHsgaXNBbnlFeHBhbmRzLCBvbkFsbFJvd0V4cGFuZCB9ID0gdGhpcy5wcm9wcztcbiAgICBvbkFsbFJvd0V4cGFuZCEoZSwgIWlzQW55RXhwYW5kcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc0FueUV4cGFuZHMsIGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGF0dHJzID0ge1xuICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDaGVja0JveENsaWNrLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRoIGNsYXNzTmFtZT1cImV4cGFuZC1jZWxsLWhlYWRlclwiIGRhdGEtcm93LXNlbGVjdGlvbiB7Li4uYXR0cnN9PlxuICAgICAgICB7ZXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXJcbiAgICAgICAgICA/IGV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyKHsgaXNBbnlFeHBhbmRzOiBpc0FueUV4cGFuZHMgPz8gZmFsc2UgfSlcbiAgICAgICAgICA6IGlzQW55RXhwYW5kc1xuICAgICAgICAgID8gXCIoLSlcIlxuICAgICAgICAgIDogXCIoKylcIn1cbiAgICAgIDwvdGg+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRSb3dCeVJvd0lkIH0gZnJvbSBcIi4vcm93c1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uU3VtbWFyeSA9IChcbiAgZGF0YTogYW55W10gPSBbXSxcbiAga2V5RmllbGQ6IGFueSxcbiAgc2VsZWN0ZWQ6IGFueVtdID0gW11cbikgPT4ge1xuICBsZXQgYWxsUm93c1NlbGVjdGVkID0gZGF0YS5sZW5ndGggPiAwO1xuICBsZXQgYWxsUm93c05vdFNlbGVjdGVkID0gdHJ1ZTtcblxuICBjb25zdCByb3dLZXlzID0gZGF0YS5tYXAoKGQpID0+IF8uZ2V0KGQsIGtleUZpZWxkKSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93S2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGN1cnIgPSByb3dLZXlzW2ldO1xuICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWQuZmluZCgoeCkgPT4geCA9PT0gY3VycikgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGFsbFJvd3NTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGxSb3dzTm90U2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhbGxSb3dzU2VsZWN0ZWQsXG4gICAgYWxsUm93c05vdFNlbGVjdGVkLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGFibGVLZXlzID0gKFxuICBkYXRhOiBhbnlbXSA9IFtdLFxuICBrZXlGaWVsZDogYW55LFxuICBza2lwczogYW55W10gPSBbXVxuKSA9PiB7XG4gIGlmIChza2lwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xuICB9XG4gIHJldHVybiBkYXRhXG4gICAgLmZpbHRlcigocm93KSA9PiAhXy5jb250YWlucyhza2lwcywgXy5nZXQocm93LCBrZXlGaWVsZCkpKVxuICAgIC5tYXAoKHJvdykgPT4gXy5nZXQocm93LCBrZXlGaWVsZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVuU2VsZWN0YWJsZUtleXMgPSAoc2VsZWN0ZWQ/OiBhbnksIHNraXBzOiBhbnlbXSA9IFtdKSA9PiB7XG4gIGlmIChza2lwcz8ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBzZWxlY3RlZC5maWx0ZXIoKHg6IGFueSkgPT4gXy5jb250YWlucyhza2lwcywgeCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkUm93cyA9IChcbiAgZGF0YTogYW55W10gPSBbXSxcbiAga2V5RmllbGQ6IGFueSxcbiAgc2VsZWN0ZWQ6IGFueVxuKSA9PlxuICBzZWxlY3RlZFxuICAgIC5tYXAoKGs6IGFueSkgPT4gZ2V0Um93QnlSb3dJZChkYXRhLCBrZXlGaWVsZCwgaykpXG4gICAgLmZpbHRlcigoeDogYW55KSA9PiAhIXgpO1xuIiwiLy8gQ3VycmVudCB2ZXJzaW9uLlxuZXhwb3J0IHZhciBWRVJTSU9OID0gJzEuMTMuNyc7XG5cbi8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuLy8gb24gdGhlIHNlcnZlciwgb3IgYHRoaXNgIGluIHNvbWUgdmlydHVhbCBtYWNoaW5lcy4gV2UgdXNlIGBzZWxmYFxuLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbmV4cG9ydCB2YXIgcm9vdCA9ICh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZikgfHxcbiAgICAgICAgICAodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCkgfHxcbiAgICAgICAgICB7fTtcblxuLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbmV4cG9ydCB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuZXhwb3J0IHZhciBTeW1ib2xQcm90byA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnID8gU3ltYm9sLnByb3RvdHlwZSA6IG51bGw7XG5cbi8vIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLlxuZXhwb3J0IHZhciBwdXNoID0gQXJyYXlQcm90by5wdXNoLFxuICAgIHNsaWNlID0gQXJyYXlQcm90by5zbGljZSxcbiAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8vIE1vZGVybiBmZWF0dXJlIGRldGVjdGlvbi5cbmV4cG9ydCB2YXIgc3VwcG9ydHNBcnJheUJ1ZmZlciA9IHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgc3VwcG9ydHNEYXRhVmlldyA9IHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8vIEFsbCAqKkVDTUFTY3JpcHQgNSsqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2Vcbi8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuZXhwb3J0IHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICBuYXRpdmVLZXlzID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcbiAgICBuYXRpdmVJc1ZpZXcgPSBzdXBwb3J0c0FycmF5QnVmZmVyICYmIEFycmF5QnVmZmVyLmlzVmlldztcblxuLy8gQ3JlYXRlIHJlZmVyZW5jZXMgdG8gdGhlc2UgYnVpbHRpbiBmdW5jdGlvbnMgYmVjYXVzZSB3ZSBvdmVycmlkZSB0aGVtLlxuZXhwb3J0IHZhciBfaXNOYU4gPSBpc05hTixcbiAgICBfaXNGaW5pdGUgPSBpc0Zpbml0ZTtcblxuLy8gS2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC5cbmV4cG9ydCB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuZXhwb3J0IHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4vLyBUaGUgbGFyZ2VzdCBpbnRlZ2VyIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuXG5leHBvcnQgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4iLCIvLyBTb21lIGZ1bmN0aW9ucyB0YWtlIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgb3IgYSBmZXcgZXhwZWN0ZWRcbi8vIGFyZ3VtZW50cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIHZhbHVlcyB0byBvcGVyYXRlXG4vLyBvbi4gVGhpcyBoZWxwZXIgYWNjdW11bGF0ZXMgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgcGFzdCB0aGUgZnVuY3Rpb27igJlzXG4vLyBhcmd1bWVudCBsZW5ndGggKG9yIGFuIGV4cGxpY2l0IGBzdGFydEluZGV4YCksIGludG8gYW4gYXJyYXkgdGhhdCBiZWNvbWVzXG4vLyB0aGUgbGFzdCBhcmd1bWVudC4gU2ltaWxhciB0byBFUzbigJlzIFwicmVzdCBwYXJhbWV0ZXJcIi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3RBcmd1bWVudHMoZnVuYywgc3RhcnRJbmRleCkge1xuICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLFxuICAgICAgICByZXN0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICB9XG4gICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gQXJyYXkoc3RhcnRJbmRleCArIDEpO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iaik7XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc051bGwob2JqKSB7XG4gIHJldHVybiBvYmogPT09IG51bGw7XG59XG4iLCIvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iaikge1xuICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG59XG4iLCJpbXBvcnQgeyB0b1N0cmluZyB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztcbn1cbiIsIi8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xufVxuIiwiaW1wb3J0IHsgdG9TdHJpbmcgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIGB0b1N0cmluZ2AtYmFzZWQgdHlwZSB0ZXN0ZXIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0YWdUZXN0ZXIobmFtZSkge1xuICB2YXIgdGFnID0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSB0YWc7XG4gIH07XG59XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignU3RyaW5nJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignTnVtYmVyJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignRGF0ZScpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ1JlZ0V4cCcpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdUZXN0ZXIoJ0Vycm9yJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignU3ltYm9sJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHRhZ1Rlc3RlcignQXJyYXlCdWZmZXInKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcbmltcG9ydCB7IHJvb3QgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbnZhciBpc0Z1bmN0aW9uID0gdGFnVGVzdGVyKCdGdW5jdGlvbicpO1xuXG4vLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgYHR5cGVvZmAgYnVncyBpbiBvbGRcbi8vIHY4LCBJRSAxMSAoIzE2MjEpLCBTYWZhcmkgOCAoIzE5MjkpLCBhbmQgUGhhbnRvbUpTICgjMjIzNikuXG52YXIgbm9kZWxpc3QgPSByb290LmRvY3VtZW50ICYmIHJvb3QuZG9jdW1lbnQuY2hpbGROb2RlcztcbmlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICBpc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgdGFnVGVzdGVyKCdPYmplY3QnKTtcbiIsImltcG9ydCB7IHN1cHBvcnRzRGF0YVZpZXcgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaGFzT2JqZWN0VGFnIGZyb20gJy4vX2hhc09iamVjdFRhZy5qcyc7XG5cbi8vIEluIElFIDEwIC0gRWRnZSAxMywgYERhdGFWaWV3YCBoYXMgc3RyaW5nIHRhZyBgJ1tvYmplY3QgT2JqZWN0XSdgLlxuLy8gSW4gSUUgMTEsIHRoZSBtb3N0IGNvbW1vbiBhbW9uZyB0aGVtLCB0aGlzIHByb2JsZW0gYWxzbyBhcHBsaWVzIHRvXG4vLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YC5cbi8vIEFsc28sIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBhbiBhcHBsaWNhdGlvbiBjYW4gb3ZlcnJpZGUgdGhlIG5hdGl2ZVxuLy8gYERhdGFWaWV3YCBvYmplY3QsIGluIGNhc2VzIGxpa2UgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIGNvbnN0cnVjdG9yXG4vLyBzYWZlbHkgYW5kIHNob3VsZCBqdXN0IHJlbHkgb24gYWx0ZXJuYXRlIGBEYXRhVmlld2AgY2hlY2tzXG5leHBvcnQgdmFyIGhhc0RhdGFWaWV3QnVnID0gKFxuICAgICAgc3VwcG9ydHNEYXRhVmlldyAmJiAoIS9cXFtuYXRpdmUgY29kZVxcXS8udGVzdChTdHJpbmcoRGF0YVZpZXcpKSB8fCBoYXNPYmplY3RUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkpKVxuICAgICksXG4gICAgaXNJRTExID0gKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnICYmIGhhc09iamVjdFRhZyhuZXcgTWFwKSk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzQXJyYXlCdWZmZXIgZnJvbSAnLi9pc0FycmF5QnVmZmVyLmpzJztcbmltcG9ydCB7IGhhc0RhdGFWaWV3QnVnIH0gZnJvbSAnLi9fc3RyaW5nVGFnQnVnLmpzJztcblxudmFyIGlzRGF0YVZpZXcgPSB0YWdUZXN0ZXIoJ0RhdGFWaWV3Jyk7XG5cbi8vIEluIElFIDEwIC0gRWRnZSAxMywgd2UgbmVlZCBhIGRpZmZlcmVudCBoZXVyaXN0aWNcbi8vIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIGBEYXRhVmlld2AuXG4vLyBBbHNvLCBpbiBjYXNlcyB3aGVyZSB0aGUgbmF0aXZlIGBEYXRhVmlld2AgaXNcbi8vIG92ZXJyaWRkZW4gd2UgY2FuJ3QgcmVseSBvbiB0aGUgdGFnIGl0c2VsZi5cbmZ1bmN0aW9uIGFsdGVybmF0ZUlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBpc0Z1bmN0aW9uKG9iai5nZXRJbnQ4KSAmJiBpc0FycmF5QnVmZmVyKG9iai5idWZmZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoaGFzRGF0YVZpZXdCdWcgPyBhbHRlcm5hdGVJc0RhdGFWaWV3IDogaXNEYXRhVmlldyk7XG4iLCJpbXBvcnQgeyBuYXRpdmVJc0FycmF5IH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuXG4vLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuLy8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIGBBcnJheS5pc0FycmF5YC5cbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZUlzQXJyYXkgfHwgdGFnVGVzdGVyKCdBcnJheScpO1xuIiwiaW1wb3J0IHsgaGFzT3duUHJvcGVydHkgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYGtleWAgaXMgYW4gb3duIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXMob2JqLCBrZXkpIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xufVxuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuaW1wb3J0IGhhcyBmcm9tICcuL19oYXMuanMnO1xuXG52YXIgaXNBcmd1bWVudHMgPSB0YWdUZXN0ZXIoJ0FyZ3VtZW50cycpO1xuXG4vLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4vLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgXCJBcmd1bWVudHNcIiB0eXBlLlxuKGZ1bmN0aW9uKCkge1xuICBpZiAoIWlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICBpc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGhhcyhvYmosICdjYWxsZWUnKTtcbiAgICB9O1xuICB9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsImltcG9ydCB7IF9pc0Zpbml0ZSB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNGaW5pdGUob2JqKSB7XG4gIHJldHVybiAhaXNTeW1ib2wob2JqKSAmJiBfaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbn1cbiIsImltcG9ydCB7IF9pc05hTiB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBpc051bWJlciBmcm9tICcuL2lzTnVtYmVyLmpzJztcblxuLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gP1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNOYU4ob2JqKSB7XG4gIHJldHVybiBpc051bWJlcihvYmopICYmIF9pc05hTihvYmopO1xufVxuIiwiLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuIiwiaW1wb3J0IHsgTUFYX0FSUkFZX0lOREVYIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuXG4vLyBDb21tb24gaW50ZXJuYWwgbG9naWMgZm9yIGBpc0FycmF5TGlrZWAgYW5kIGBpc0J1ZmZlckxpa2VgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0U2l6ZVByb3BlcnR5KSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uKSB7XG4gICAgdmFyIHNpemVQcm9wZXJ0eSA9IGdldFNpemVQcm9wZXJ0eShjb2xsZWN0aW9uKTtcbiAgICByZXR1cm4gdHlwZW9mIHNpemVQcm9wZXJ0eSA9PSAnbnVtYmVyJyAmJiBzaXplUHJvcGVydHkgPj0gMCAmJiBzaXplUHJvcGVydHkgPD0gTUFYX0FSUkFZX0lOREVYO1xuICB9XG59XG4iLCIvLyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiB0byBvYnRhaW4gcHJvcGVydHkgYGtleWAgZnJvbSBgb2JqYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYWxsb3dQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldO1xuICB9O1xufVxuIiwiaW1wb3J0IHNoYWxsb3dQcm9wZXJ0eSBmcm9tICcuL19zaGFsbG93UHJvcGVydHkuanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgYnl0ZUxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgc2hhbGxvd1Byb3BlcnR5KCdieXRlTGVuZ3RoJyk7XG4iLCJpbXBvcnQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2sgZnJvbSAnLi9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMnO1xuaW1wb3J0IGdldEJ5dGVMZW5ndGggZnJvbSAnLi9fZ2V0Qnl0ZUxlbmd0aC5qcyc7XG5cbi8vIEludGVybmFsIGhlbHBlciB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgc3BlbmQgZXh0ZW5zaXZlIGNoZWNrcyBhZ2FpbnN0XG4vLyBgQXJyYXlCdWZmZXJgIGV0IGFsLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0Qnl0ZUxlbmd0aCk7XG4iLCJpbXBvcnQgeyBzdXBwb3J0c0FycmF5QnVmZmVyLCBuYXRpdmVJc1ZpZXcsIHRvU3RyaW5nIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGlzRGF0YVZpZXcgZnJvbSAnLi9pc0RhdGFWaWV3LmpzJztcbmltcG9ydCBjb25zdGFudCBmcm9tICcuL2NvbnN0YW50LmpzJztcbmltcG9ydCBpc0J1ZmZlckxpa2UgZnJvbSAnLi9faXNCdWZmZXJMaWtlLmpzJztcblxuLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIHR5cGVkIGFycmF5P1xudmFyIHR5cGVkQXJyYXlQYXR0ZXJuID0gL1xcW29iamVjdCAoKEl8VWkpbnQoOHwxNnwzMil8RmxvYXQoMzJ8NjQpfFVpbnQ4Q2xhbXBlZHxCaWcoSXxVaSludDY0KUFycmF5XFxdLztcbmZ1bmN0aW9uIGlzVHlwZWRBcnJheShvYmopIHtcbiAgLy8gYEFycmF5QnVmZmVyLmlzVmlld2AgaXMgdGhlIG1vc3QgZnV0dXJlLXByb29mLCBzbyB1c2UgaXQgd2hlbiBhdmFpbGFibGUuXG4gIC8vIE90aGVyd2lzZSwgZmFsbCBiYWNrIG9uIHRoZSBhYm92ZSByZWd1bGFyIGV4cHJlc3Npb24uXG4gIHJldHVybiBuYXRpdmVJc1ZpZXcgPyAobmF0aXZlSXNWaWV3KG9iaikgJiYgIWlzRGF0YVZpZXcob2JqKSkgOlxuICAgICAgICAgICAgICAgIGlzQnVmZmVyTGlrZShvYmopICYmIHR5cGVkQXJyYXlQYXR0ZXJuLnRlc3QodG9TdHJpbmcuY2FsbChvYmopKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3VwcG9ydHNBcnJheUJ1ZmZlciA/IGlzVHlwZWRBcnJheSA6IGNvbnN0YW50KGZhbHNlKTtcbiIsImltcG9ydCBzaGFsbG93UHJvcGVydHkgZnJvbSAnLi9fc2hhbGxvd1Byb3BlcnR5LmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgc2hhbGxvd1Byb3BlcnR5KCdsZW5ndGgnKTtcbiIsImltcG9ydCB7IG5vbkVudW1lcmFibGVQcm9wcywgT2JqUHJvdG8gfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGhhcyBmcm9tICcuL19oYXMuanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gY3JlYXRlIGEgc2ltcGxlIGxvb2t1cCBzdHJ1Y3R1cmUuXG4vLyBgY29sbGVjdE5vbkVudW1Qcm9wc2AgdXNlZCB0byBkZXBlbmQgb24gYF8uY29udGFpbnNgLCBidXQgdGhpcyBsZWQgdG9cbi8vIGNpcmN1bGFyIGltcG9ydHMuIGBlbXVsYXRlZFNldGAgaXMgYSBvbmUtb2ZmIHNvbHV0aW9uIHRoYXQgb25seSB3b3JrcyBmb3Jcbi8vIGFycmF5cyBvZiBzdHJpbmdzLlxuZnVuY3Rpb24gZW11bGF0ZWRTZXQoa2V5cykge1xuICB2YXIgaGFzaCA9IHt9O1xuICBmb3IgKHZhciBsID0ga2V5cy5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgKytpKSBoYXNoW2tleXNbaV1dID0gdHJ1ZTtcbiAgcmV0dXJuIHtcbiAgICBjb250YWluczogZnVuY3Rpb24oa2V5KSB7IHJldHVybiBoYXNoW2tleV0gPT09IHRydWU7IH0sXG4gICAgcHVzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICBoYXNoW2tleV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyLiBDaGVja3MgYGtleXNgIGZvciB0aGUgcHJlc2VuY2Ugb2Yga2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndFxuLy8gYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuIEV4dGVuZHMgYGtleXNgIGluIHBsYWNlIGlmXG4vLyBuZWVkZWQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cykge1xuICBrZXlzID0gZW11bGF0ZWRTZXQoa2V5cyk7XG4gIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICB2YXIgcHJvdG8gPSAoaXNGdW5jdGlvbihjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bztcblxuICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICBpZiAoaGFzKG9iaiwgcHJvcCkgJiYgIWtleXMuY29udGFpbnMocHJvcCkpIGtleXMucHVzaChwcm9wKTtcblxuICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAgICBpZiAocHJvcCBpbiBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAha2V5cy5jb250YWlucyhwcm9wKSkge1xuICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHsgbmF0aXZlS2V5cywgaGFzRW51bUJ1ZyB9IGZyb20gJy4vX3NldHVwLmpzJztcbmltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcbmltcG9ydCBjb2xsZWN0Tm9uRW51bVByb3BzIGZyb20gJy4vX2NvbGxlY3ROb25FbnVtUHJvcHMuanMnO1xuXG4vLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4vLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ga2V5cyhvYmopIHtcbiAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107XG4gIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIC8vIEFoZW0sIElFIDwgOS5cbiAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgcmV0dXJuIGtleXM7XG59XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzU3RyaW5nIGZyb20gJy4vaXNTdHJpbmcuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/XG4vLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgLy8gU2tpcCB0aGUgbW9yZSBleHBlbnNpdmUgYHRvU3RyaW5nYC1iYXNlZCB0eXBlIGNoZWNrcyBpZiBgb2JqYCBoYXMgbm9cbiAgLy8gYC5sZW5ndGhgLlxuICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKG9iaik7XG4gIGlmICh0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIChcbiAgICBpc0FycmF5KG9iaikgfHwgaXNTdHJpbmcob2JqKSB8fCBpc0FyZ3VtZW50cyhvYmopXG4gICkpIHJldHVybiBsZW5ndGggPT09IDA7XG4gIHJldHVybiBnZXRMZW5ndGgoa2V5cyhvYmopKSA9PT0gMDtcbn1cbiIsImltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybnMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIGF0dHJzKSB7XG4gIHZhciBfa2V5cyA9IGtleXMoYXR0cnMpLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBfa2V5c1tpXTtcbiAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXQgY2FuXG4vLyBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgZnVuY3Rpb25zIGFkZGVkXG4vLyB0aHJvdWdoIGBfLm1peGluYC4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gXyhvYmopIHtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG59XG5cbl8uVkVSU0lPTiA9IFZFUlNJT047XG5cbi8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LlxuXy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG59O1xuXG4vLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveGllcyBmb3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbi8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG5fLnByb3RvdHlwZS52YWx1ZU9mID0gXy5wcm90b3R5cGUudG9KU09OID0gXy5wcm90b3R5cGUudmFsdWU7XG5cbl8ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBTdHJpbmcodGhpcy5fd3JhcHBlZCk7XG59O1xuIiwiaW1wb3J0IGdldEJ5dGVMZW5ndGggZnJvbSAnLi9fZ2V0Qnl0ZUxlbmd0aC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIHdyYXAgb3Igc2hhbGxvdy1jb3B5IGFuIEFycmF5QnVmZmVyLFxuLy8gdHlwZWQgYXJyYXkgb3IgRGF0YVZpZXcgdG8gYSBuZXcgdmlldywgcmV1c2luZyB0aGUgYnVmZmVyLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9CdWZmZXJWaWV3KGJ1ZmZlclNvdXJjZSkge1xuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoXG4gICAgYnVmZmVyU291cmNlLmJ1ZmZlciB8fCBidWZmZXJTb3VyY2UsXG4gICAgYnVmZmVyU291cmNlLmJ5dGVPZmZzZXQgfHwgMCxcbiAgICBnZXRCeXRlTGVuZ3RoKGJ1ZmZlclNvdXJjZSlcbiAgKTtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgeyB0b1N0cmluZywgU3ltYm9sUHJvdG8gfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgZ2V0Qnl0ZUxlbmd0aCBmcm9tICcuL19nZXRCeXRlTGVuZ3RoLmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCB7IGhhc0RhdGFWaWV3QnVnIH0gIGZyb20gJy4vX3N0cmluZ1RhZ0J1Zy5qcyc7XG5pbXBvcnQgaXNEYXRhVmlldyBmcm9tICcuL2lzRGF0YVZpZXcuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcbmltcG9ydCB0b0J1ZmZlclZpZXcgZnJvbSAnLi9fdG9CdWZmZXJWaWV3LmpzJztcblxuLy8gV2UgdXNlIHRoaXMgc3RyaW5nIHR3aWNlLCBzbyBnaXZlIGl0IGEgbmFtZSBmb3IgbWluaWZpY2F0aW9uLlxudmFyIHRhZ0RhdGFWaWV3ID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLlxuZnVuY3Rpb24gZXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cHM6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gIC8vIEV4aGF1c3QgcHJpbWl0aXZlIGNoZWNrc1xuICB2YXIgdHlwZSA9IHR5cGVvZiBhO1xuICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKTtcbn1cblxuLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLlxuZnVuY3Rpb24gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLlxuICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBJRSAxMCAtIEVkZ2UgMTMuXG4gIGlmIChoYXNEYXRhVmlld0J1ZyAmJiBjbGFzc05hbWUgPT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgaXNEYXRhVmlldyhhKSkge1xuICAgIGlmICghaXNEYXRhVmlldyhiKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNsYXNzTmFtZSA9IHRhZ0RhdGFWaWV3O1xuICB9XG4gIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgLy8gVGhlc2UgdHlwZXMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU4uXG4gICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6XG4gICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgY2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuICAgIGNhc2UgdGFnRGF0YVZpZXc6XG4gICAgICAvLyBDb2VyY2UgdG8gdHlwZWQgYXJyYXkgc28gd2UgY2FuIGZhbGwgdGhyb3VnaC5cbiAgICAgIHJldHVybiBkZWVwRXEodG9CdWZmZXJWaWV3KGEpLCB0b0J1ZmZlclZpZXcoYiksIGFTdGFjaywgYlN0YWNrKTtcbiAgfVxuXG4gIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIGlmICghYXJlQXJyYXlzICYmIGlzVHlwZWRBcnJheShhKSkge1xuICAgICAgdmFyIGJ5dGVMZW5ndGggPSBnZXRCeXRlTGVuZ3RoKGEpO1xuICAgICAgaWYgKGJ5dGVMZW5ndGggIT09IGdldEJ5dGVMZW5ndGgoYikpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChhLmJ1ZmZlciA9PT0gYi5idWZmZXIgJiYgYS5ieXRlT2Zmc2V0ID09PSBiLmJ5dGVPZmZzZXQpIHJldHVybiB0cnVlO1xuICAgICAgYXJlQXJyYXlzID0gdHJ1ZTtcbiAgfVxuICBpZiAoIWFyZUFycmF5cykge1xuICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKGlzRnVuY3Rpb24oYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0gYjtcbiAgfVxuXG4gIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgYVN0YWNrLnB1c2goYSk7XG4gIGJTdGFjay5wdXNoKGIpO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgIHZhciBfa2V5cyA9IGtleXMoYSksIGtleTtcbiAgICBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgIGlmIChrZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgIGtleSA9IF9rZXlzW2xlbmd0aF07XG4gICAgICBpZiAoIShoYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgYVN0YWNrLnBvcCgpO1xuICBiU3RhY2sucG9wKCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xuICByZXR1cm4gZXEoYSwgYik7XG59XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgeyBoYXNFbnVtQnVnIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGNvbGxlY3ROb25FbnVtUHJvcHMgZnJvbSAnLi9fY29sbGVjdE5vbkVudW1Qcm9wcy5qcyc7XG5cbi8vIFJldHJpZXZlIGFsbCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbGxLZXlzKG9iaikge1xuICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIC8vIEFoZW0sIElFIDwgOS5cbiAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgcmV0dXJuIGtleXM7XG59XG4iLCJpbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGFsbEtleXMgZnJvbSAnLi9hbGxLZXlzLmpzJztcblxuLy8gU2luY2UgdGhlIHJlZ3VsYXIgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIHR5cGUgdGVzdHMgZG9uJ3Qgd29yayBmb3Jcbi8vIHNvbWUgdHlwZXMgaW4gSUUgMTEsIHdlIHVzZSBhIGZpbmdlcnByaW50aW5nIGhldXJpc3RpYyBpbnN0ZWFkLCBiYXNlZFxuLy8gb24gdGhlIG1ldGhvZHMuIEl0J3Mgbm90IGdyZWF0LCBidXQgaXQncyB0aGUgYmVzdCB3ZSBnb3QuXG4vLyBUaGUgZmluZ2VycHJpbnQgbWV0aG9kIGxpc3RzIGFyZSBkZWZpbmVkIGJlbG93LlxuZXhwb3J0IGZ1bmN0aW9uIGllMTFmaW5nZXJwcmludChtZXRob2RzKSB7XG4gIHZhciBsZW5ndGggPSBnZXRMZW5ndGgobWV0aG9kcyk7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBoYXZlIG5vIGVudW1lcmFibGUga2V5cy5cbiAgICB2YXIga2V5cyA9IGFsbEtleXMob2JqKTtcbiAgICBpZiAoZ2V0TGVuZ3RoKGtleXMpKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFpc0Z1bmN0aW9uKG9ialttZXRob2RzW2ldXSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIHRlc3RpbmcgYWdhaW5zdCBgV2Vha01hcGAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXRcbiAgICAvLyBgb2JqYCBkb2Vzbid0IGhhdmUgYSBgZm9yRWFjaGAgbWV0aG9kIGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoXG4gICAgLy8gaXQgZnJvbSBhIHJlZ3VsYXIgYE1hcGAuXG4gICAgcmV0dXJuIG1ldGhvZHMgIT09IHdlYWtNYXBNZXRob2RzIHx8ICFpc0Z1bmN0aW9uKG9ialtmb3JFYWNoTmFtZV0pO1xuICB9O1xufVxuXG4vLyBJbiB0aGUgaW50ZXJlc3Qgb2YgY29tcGFjdCBtaW5pZmljYXRpb24sIHdlIHdyaXRlXG4vLyBlYWNoIHN0cmluZyBpbiB0aGUgZmluZ2VycHJpbnRzIG9ubHkgb25jZS5cbnZhciBmb3JFYWNoTmFtZSA9ICdmb3JFYWNoJyxcbiAgICBoYXNOYW1lID0gJ2hhcycsXG4gICAgY29tbW9uSW5pdCA9IFsnY2xlYXInLCAnZGVsZXRlJ10sXG4gICAgbWFwVGFpbCA9IFsnZ2V0JywgaGFzTmFtZSwgJ3NldCddO1xuXG4vLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBlYWNoIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50XG4vLyBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlIHN1Ymxpc3RzLlxuZXhwb3J0IHZhciBtYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQoZm9yRWFjaE5hbWUsIG1hcFRhaWwpLFxuICAgIHdlYWtNYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQobWFwVGFpbCksXG4gICAgc2V0TWV0aG9kcyA9IFsnYWRkJ10uY29uY2F0KGNvbW1vbkluaXQsIGZvckVhY2hOYW1lLCBoYXNOYW1lKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcbmltcG9ydCB7IGlzSUUxMSB9IGZyb20gJy4vX3N0cmluZ1RhZ0J1Zy5qcyc7XG5pbXBvcnQgeyBpZTExZmluZ2VycHJpbnQsIG1hcE1ldGhvZHMgfSAgZnJvbSAnLi9fbWV0aG9kRmluZ2VycHJpbnQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQobWFwTWV0aG9kcykgOiB0YWdUZXN0ZXIoJ01hcCcpO1xuIiwiaW1wb3J0IHRhZ1Rlc3RlciBmcm9tICcuL190YWdUZXN0ZXIuanMnO1xuaW1wb3J0IHsgaXNJRTExIH0gZnJvbSAnLi9fc3RyaW5nVGFnQnVnLmpzJztcbmltcG9ydCB7IGllMTFmaW5nZXJwcmludCwgd2Vha01hcE1ldGhvZHMgfSAgZnJvbSAnLi9fbWV0aG9kRmluZ2VycHJpbnQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQod2Vha01hcE1ldGhvZHMpIDogdGFnVGVzdGVyKCdXZWFrTWFwJyk7XG4iLCJpbXBvcnQgdGFnVGVzdGVyIGZyb20gJy4vX3RhZ1Rlc3Rlci5qcyc7XG5pbXBvcnQgeyBpc0lFMTEgfSBmcm9tICcuL19zdHJpbmdUYWdCdWcuanMnO1xuaW1wb3J0IHsgaWUxMWZpbmdlcnByaW50LCBzZXRNZXRob2RzIH0gIGZyb20gJy4vX21ldGhvZEZpbmdlcnByaW50LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHNldE1ldGhvZHMpIDogdGFnVGVzdGVyKCdTZXQnKTtcbiIsImltcG9ydCB0YWdUZXN0ZXIgZnJvbSAnLi9fdGFnVGVzdGVyLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgdGFnVGVzdGVyKCdXZWFrU2V0Jyk7XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWx1ZXMob2JqKSB7XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgdmFyIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZXNbaV0gPSBvYmpbX2tleXNbaV1dO1xuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbi8vIFRoZSBvcHBvc2l0ZSBvZiBgXy5vYmplY3RgIHdpdGggb25lIGFyZ3VtZW50LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFpcnMob2JqKSB7XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgdmFyIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHBhaXJzW2ldID0gW19rZXlzW2ldLCBvYmpbX2tleXNbaV1dXTtcbiAgfVxuICByZXR1cm4gcGFpcnM7XG59XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbnZlcnQob2JqKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHRbb2JqW19rZXlzW2ldXV0gPSBfa2V5c1tpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcblxuLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZnVuY3Rpb25zKG9iaikge1xuICB2YXIgbmFtZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBuYW1lcy5zb3J0KCk7XG59XG4iLCIvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoa2V5c0Z1bmMsIGRlZmF1bHRzKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoZGVmYXVsdHMpIG9iaiA9IE9iamVjdChvYmopO1xuICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG59XG4iLCJpbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGFsbEtleXMgZnJvbSAnLi9hbGxLZXlzLmpzJztcblxuLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcihhbGxLZXlzKTtcbiIsImltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJvcGVydGllcyBpbiB0aGUgcGFzc2VkLWluXG4vLyBvYmplY3QocykuXG4vLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFzc2lnbmVyKGtleXMpO1xuIiwiaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcbmltcG9ydCBhbGxLZXlzIGZyb20gJy4vYWxsS2V5cy5qcyc7XG5cbi8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcihhbGxLZXlzLCB0cnVlKTtcbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB7IG5hdGl2ZUNyZWF0ZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gQ3JlYXRlIGEgbmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuZnVuY3Rpb24gY3RvcigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCl7fTtcbn1cblxuLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJhc2VDcmVhdGUocHJvdG90eXBlKSB7XG4gIGlmICghaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gIHZhciBDdG9yID0gY3RvcigpO1xuICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBleHRlbmRPd24gZnJvbSAnLi9leHRlbmRPd24uanMnO1xuXG4vLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4vLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gY3JlYXRlZCBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wcykge1xuICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICBpZiAocHJvcHMpIGV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4vZXh0ZW5kLmpzJztcblxuLy8gQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xvbmUob2JqKSB7XG4gIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgcmV0dXJuIGlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogZXh0ZW5kKHt9LCBvYmopO1xufVxuIiwiLy8gSW52b2tlcyBgaW50ZXJjZXB0b3JgIHdpdGggdGhlIGBvYmpgIGFuZCB0aGVuIHJldHVybnMgYG9iamAuXG4vLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbi8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGFwKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgaW50ZXJjZXB0b3Iob2JqKTtcbiAgcmV0dXJuIG9iajtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vLyBOb3JtYWxpemUgYSAoZGVlcCkgcHJvcGVydHkgYHBhdGhgIHRvIGFycmF5LlxuLy8gTGlrZSBgXy5pdGVyYXRlZWAsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGN1c3RvbWl6ZWQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1BhdGgocGF0aCkge1xuICByZXR1cm4gaXNBcnJheShwYXRoKSA/IHBhdGggOiBbcGF0aF07XG59XG5fLnRvUGF0aCA9IHRvUGF0aDtcbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgJy4vdG9QYXRoLmpzJztcblxuLy8gSW50ZXJuYWwgd3JhcHBlciBmb3IgYF8udG9QYXRoYCB0byBlbmFibGUgbWluaWZpY2F0aW9uLlxuLy8gU2ltaWxhciB0byBgY2JgIGZvciBgXy5pdGVyYXRlZWAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1BhdGgocGF0aCkge1xuICByZXR1cm4gXy50b1BhdGgocGF0aCk7XG59XG4iLCIvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBvYnRhaW4gYSBuZXN0ZWQgcHJvcGVydHkgaW4gYG9iamAgYWxvbmcgYHBhdGhgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVlcEdldChvYmosIHBhdGgpIHtcbiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIG9iaiA9IG9ialtwYXRoW2ldXTtcbiAgfVxuICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xufVxuIiwiaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuaW1wb3J0IGRlZXBHZXQgZnJvbSAnLi9fZGVlcEdldC5qcyc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnLi9pc1VuZGVmaW5lZC5qcyc7XG5cbi8vIEdldCB0aGUgdmFsdWUgb2YgdGhlIChkZWVwKSBwcm9wZXJ0eSBvbiBgcGF0aGAgZnJvbSBgb2JqZWN0YC5cbi8vIElmIGFueSBwcm9wZXJ0eSBpbiBgcGF0aGAgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlIHZhbHVlIGlzXG4vLyBgdW5kZWZpbmVkYCwgcmV0dXJuIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQuXG4vLyBUaGUgYHBhdGhgIGlzIG5vcm1hbGl6ZWQgdGhyb3VnaCBgXy50b1BhdGhgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciB2YWx1ZSA9IGRlZXBHZXQob2JqZWN0LCB0b1BhdGgocGF0aCkpO1xuICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG59XG4iLCJpbXBvcnQgX2hhcyBmcm9tICcuL19oYXMuanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuXG4vLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3BlcnR5IGRpcmVjdGx5IG9uXG4vLyBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLiBVbmxpa2UgdGhlIGludGVybmFsIGBoYXNgXG4vLyBmdW5jdGlvbiwgdGhpcyBwdWJsaWMgdmVyc2lvbiBjYW4gYWxzbyB0cmF2ZXJzZSBuZXN0ZWQgcHJvcGVydGllcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhcyhvYmosIHBhdGgpIHtcbiAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgaWYgKCFfaGFzKG9iaiwga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIG9iaiA9IG9ialtrZXldO1xuICB9XG4gIHJldHVybiAhIWxlbmd0aDtcbn1cbiIsIi8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG4iLCJpbXBvcnQgZXh0ZW5kT3duIGZyb20gJy4vZXh0ZW5kT3duLmpzJztcbmltcG9ydCBpc01hdGNoIGZyb20gJy4vaXNNYXRjaC5qcyc7XG5cbi8vIFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZlxuLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXRjaGVyKGF0dHJzKSB7XG4gIGF0dHJzID0gZXh0ZW5kT3duKHt9LCBhdHRycyk7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gaXNNYXRjaChvYmosIGF0dHJzKTtcbiAgfTtcbn1cbiIsImltcG9ydCBkZWVwR2V0IGZyb20gJy4vX2RlZXBHZXQuanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuXG4vLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuLy8gcHJvcGVydGllcyBkb3duIHRoZSBnaXZlbiBgcGF0aGAsIHNwZWNpZmllZCBhcyBhbiBhcnJheSBvZiBrZXlzIG9yIGluZGljZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gZGVlcEdldChvYmosIHBhdGgpO1xuICB9O1xufVxuIiwiLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbi8vIGZ1bmN0aW9ucy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9wdGltaXplQ2IoZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICB9O1xuICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LlxuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgIH07XG4gICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgbWF0Y2hlciBmcm9tICcuL21hdGNoZXIuanMnO1xuaW1wb3J0IHByb3BlcnR5IGZyb20gJy4vcHJvcGVydHkuanMnO1xuaW1wb3J0IG9wdGltaXplQ2IgZnJvbSAnLi9fb3B0aW1pemVDYi5qcyc7XG5cbi8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGVhY2hcbi8vIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXIgYF8uaWRlbnRpdHlgLFxuLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkpIHJldHVybiBtYXRjaGVyKHZhbHVlKTtcbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5cbi8vIEV4dGVybmFsIHdyYXBwZXIgZm9yIG91ciBjYWxsYmFjayBnZW5lcmF0b3IuIFVzZXJzIG1heSBjdXN0b21pemVcbi8vIGBfLml0ZXJhdGVlYCBpZiB0aGV5IHdhbnQgYWRkaXRpb25hbCBwcmVkaWNhdGUvaXRlcmF0ZWUgc2hvcnRoYW5kIHN0eWxlcy5cbi8vIFRoaXMgYWJzdHJhY3Rpb24gaGlkZXMgdGhlIGludGVybmFsLW9ubHkgYGFyZ0NvdW50YCBhcmd1bWVudC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KSB7XG4gIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbn1cbl8uaXRlcmF0ZWUgPSBpdGVyYXRlZTtcbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgaXRlcmF0ZWUgZnJvbSAnLi9pdGVyYXRlZS5qcyc7XG5cbi8vIFRoZSBmdW5jdGlvbiB3ZSBjYWxsIGludGVybmFsbHkgdG8gZ2VuZXJhdGUgYSBjYWxsYmFjay4gSXQgaW52b2tlc1xuLy8gYF8uaXRlcmF0ZWVgIGlmIG92ZXJyaWRkZW4sIG90aGVyd2lzZSBgYmFzZUl0ZXJhdGVlYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICBpZiAoXy5pdGVyYXRlZSAhPT0gaXRlcmF0ZWUpIHJldHVybiBfLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTtcbiAgcmV0dXJuIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBlbGVtZW50IG9mIGBvYmpgLlxuLy8gSW4gY29udHJhc3QgdG8gYF8ubWFwYCBpdCByZXR1cm5zIGFuIG9iamVjdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1hcE9iamVjdChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB2YXIgX2tleXMgPSBrZXlzKG9iaiksXG4gICAgICBsZW5ndGggPSBfa2V5cy5sZW5ndGgsXG4gICAgICByZXN1bHRzID0ge307XG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzW2luZGV4XTtcbiAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuIiwiLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub29wKCl7fVxuIiwiaW1wb3J0IG5vb3AgZnJvbSAnLi9ub29wLmpzJztcbmltcG9ydCBnZXQgZnJvbSAnLi9nZXQuanMnO1xuXG4vLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9wZXJ0eU9mKG9iaikge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiBub29wO1xuICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgIHJldHVybiBnZXQob2JqLCBwYXRoKTtcbiAgfTtcbn1cbiIsImltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuXG4vLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpbWVzKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gIHJldHVybiBhY2N1bTtcbn1cbiIsIi8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgIChpbmNsdXNpdmUpLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7XG4gIGlmIChtYXggPT0gbnVsbCkge1xuICAgIG1heCA9IG1pbjtcbiAgICBtaW4gPSAwO1xuICB9XG4gIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xufVxuIiwiLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuZXhwb3J0IGRlZmF1bHQgRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn07XG4iLCJpbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2VuZXJhdGUgZnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzXG4vLyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUVzY2FwZXIobWFwKSB7XG4gIHZhciBlc2NhcGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgfTtcbiAgLy8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkLlxuICB2YXIgc291cmNlID0gJyg/OicgKyBrZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICB2YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gIH07XG59XG4iLCIvLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuZXhwb3J0IGRlZmF1bHQge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7J1xufTtcbiIsImltcG9ydCBjcmVhdGVFc2NhcGVyIGZyb20gJy4vX2NyZWF0ZUVzY2FwZXIuanMnO1xuaW1wb3J0IGVzY2FwZU1hcCBmcm9tICcuL19lc2NhcGVNYXAuanMnO1xuXG4vLyBGdW5jdGlvbiBmb3IgZXNjYXBpbmcgc3RyaW5ncyB0byBIVE1MIGludGVycG9sYXRpb24uXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4iLCJpbXBvcnQgY3JlYXRlRXNjYXBlciBmcm9tICcuL19jcmVhdGVFc2NhcGVyLmpzJztcbmltcG9ydCB1bmVzY2FwZU1hcCBmcm9tICcuL191bmVzY2FwZU1hcC5qcyc7XG5cbi8vIEZ1bmN0aW9uIGZvciB1bmVzY2FwaW5nIHN0cmluZ3MgZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcbiIsImltcG9ydCBpbnZlcnQgZnJvbSAnLi9pbnZlcnQuanMnO1xuaW1wb3J0IGVzY2FwZU1hcCBmcm9tICcuL19lc2NhcGVNYXAuanMnO1xuXG4vLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIHVuZXNjYXBpbmcuXG5leHBvcnQgZGVmYXVsdCBpbnZlcnQoZXNjYXBlTWFwKTtcbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5cbi8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycy4gQ2hhbmdlIHRoZVxuLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuZXhwb3J0IGRlZmF1bHQgXy50ZW1wbGF0ZVNldHRpbmdzID0ge1xuICBldmFsdWF0ZTogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICBlc2NhcGU6IC88JS0oW1xcc1xcU10rPyklPi9nXG59O1xuIiwiaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMuanMnO1xuaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcbmltcG9ydCAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcblxuLy8gV2hlbiBjdXN0b21pemluZyBgXy50ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4vLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4vLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbnZhciBub01hdGNoID0gLyguKV4vO1xuXG4vLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuLy8gc3RyaW5nIGxpdGVyYWwuXG52YXIgZXNjYXBlcyA9IHtcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxcXCc6ICdcXFxcJyxcbiAgJ1xccic6ICdyJyxcbiAgJ1xcbic6ICduJyxcbiAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAnXFx1MjAyOSc6ICd1MjAyOSdcbn07XG5cbnZhciBlc2NhcGVSZWdFeHAgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXIobWF0Y2gpIHtcbiAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xufVxuXG4vLyBJbiBvcmRlciB0byBwcmV2ZW50IHRoaXJkLXBhcnR5IGNvZGUgaW5qZWN0aW9uIHRocm91Z2hcbi8vIGBfLnRlbXBsYXRlU2V0dGluZ3MudmFyaWFibGVgLCB3ZSB0ZXN0IGl0IGFnYWluc3QgdGhlIGZvbGxvd2luZyByZWd1bGFyXG4vLyBleHByZXNzaW9uLiBJdCBpcyBpbnRlbnRpb25hbGx5IGEgYml0IG1vcmUgbGliZXJhbCB0aGFuIGp1c3QgbWF0Y2hpbmcgdmFsaWRcbi8vIGlkZW50aWZpZXJzLCBidXQgc3RpbGwgcHJldmVudHMgcG9zc2libGUgbG9vcGhvbGVzIHRocm91Z2ggZGVmYXVsdHMgb3Jcbi8vIGRlc3RydWN0dXJpbmcgYXNzaWdubWVudC5cbnZhciBiYXJlSWRlbnRpZmllciA9IC9eXFxzKihcXHd8XFwkKStcXHMqJC87XG5cbi8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4vLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4vLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbi8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRlbXBsYXRlKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICBzZXR0aW5ncyA9IGRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgIGlmIChlc2NhcGUpIHtcbiAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICB9XG5cbiAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9KTtcbiAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZTtcbiAgaWYgKGFyZ3VtZW50KSB7XG4gICAgLy8gSW5zdXJlIGFnYWluc3QgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24uIChDVkUtMjAyMS0yMzM1OClcbiAgICBpZiAoIWJhcmVJZGVudGlmaWVyLnRlc3QoYXJndW1lbnQpKSB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndmFyaWFibGUgaXMgbm90IGEgYmFyZSBpZGVudGlmaWVyOiAnICsgYXJndW1lbnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcbiAgICBhcmd1bWVudCA9ICdvYmonO1xuICB9XG5cbiAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICB2YXIgcmVuZGVyO1xuICB0cnkge1xuICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihhcmd1bWVudCwgJ18nLCBzb3VyY2UpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICByZXR1cm4gdGVtcGxhdGU7XG59XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL190b1BhdGguanMnO1xuXG4vLyBUcmF2ZXJzZXMgdGhlIGNoaWxkcmVuIG9mIGBvYmpgIGFsb25nIGBwYXRoYC4gSWYgYSBjaGlsZCBpcyBhIGZ1bmN0aW9uLCBpdFxuLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4vLyBjaGlsZCwgb3IgYGZhbGxiYWNrYCBpZiBhbnkgY2hpbGQgaXMgdW5kZWZpbmVkLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzdWx0KG9iaiwgcGF0aCwgZmFsbGJhY2spIHtcbiAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGZhbGxiYWNrKSA/IGZhbGxiYWNrLmNhbGwob2JqKSA6IGZhbGxiYWNrO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJvcCA9IG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW3BhdGhbaV1dO1xuICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgIHByb3AgPSBmYWxsYmFjaztcbiAgICAgIGkgPSBsZW5ndGg7IC8vIEVuc3VyZSB3ZSBkb24ndCBjb250aW51ZSBpdGVyYXRpbmcuXG4gICAgfVxuICAgIG9iaiA9IGlzRnVuY3Rpb24ocHJvcCkgPyBwcm9wLmNhbGwob2JqKSA6IHByb3A7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbiIsIi8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4vLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLlxudmFyIGlkQ291bnRlciA9IDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7XG59XG4iLCJpbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuXG4vLyBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaGFpbihvYmopIHtcbiAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG4iLCJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBgc291cmNlRnVuY2AgYm91bmQgdG8gYGNvbnRleHRgIHdpdGggb3B0aW9uYWxcbi8vIGBhcmdzYC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yIG9yIGFzIGFcbi8vIG5vcm1hbCBmdW5jdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4ZWN1dGVCb3VuZChzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gIHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICBpZiAoaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgcmV0dXJuIHNlbGY7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGV4ZWN1dGVCb3VuZCBmcm9tICcuL19leGVjdXRlQm91bmQuanMnO1xuaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcblxuLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIGBfYCBhY3RzXG4vLyBhcyBhIHBsYWNlaG9sZGVyIGJ5IGRlZmF1bHQsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmVcbi8vIHByZS1maWxsZWQuIFNldCBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCBmb3IgYSBjdXN0b20gcGxhY2Vob2xkZXIgYXJndW1lbnQuXG52YXIgcGFydGlhbCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgYm91bmRBcmdzKSB7XG4gIHZhciBwbGFjZWhvbGRlciA9IHBhcnRpYWwucGxhY2Vob2xkZXI7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgIH1cbiAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgfTtcbiAgcmV0dXJuIGJvdW5kO1xufSk7XG5cbnBhcnRpYWwucGxhY2Vob2xkZXIgPSBfO1xuZXhwb3J0IGRlZmF1bHQgcGFydGlhbDtcbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGV4ZWN1dGVCb3VuZCBmcm9tICcuL19leGVjdXRlQm91bmQuanMnO1xuXG4vLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbi8vIG9wdGlvbmFsbHkpLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdzKSB7XG4gIGlmICghaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gIHZhciBib3VuZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oY2FsbEFyZ3MpIHtcbiAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChjYWxsQXJncykpO1xuICB9KTtcbiAgcmV0dXJuIGJvdW5kO1xufSk7XG4iLCJpbXBvcnQgY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2sgZnJvbSAnLi9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuXG4vLyBJbnRlcm5hbCBoZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbi8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3QuXG4vLyBSZWxhdGVkOiBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbi8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTaXplUHJvcGVydHlDaGVjayhnZXRMZW5ndGgpO1xuIiwiaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5cbi8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsYXR0ZW4oaW5wdXQsIGRlcHRoLCBzdHJpY3QsIG91dHB1dCkge1xuICBvdXRwdXQgPSBvdXRwdXQgfHwgW107XG4gIGlmICghZGVwdGggJiYgZGVwdGggIT09IDApIHtcbiAgICBkZXB0aCA9IEluZmluaXR5O1xuICB9IGVsc2UgaWYgKGRlcHRoIDw9IDApIHtcbiAgICByZXR1cm4gb3V0cHV0LmNvbmNhdChpbnB1dCk7XG4gIH1cbiAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgZmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBzdHJpY3QsIG91dHB1dCk7XG4gICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGogPCBsZW4pIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtqKytdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJy4vX2ZsYXR0ZW4uanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9iaW5kLmpzJztcblxuLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4vLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3Ncbi8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gIGtleXMgPSBmbGF0dGVuKGtleXMsIGZhbHNlLCBmYWxzZSk7XG4gIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICBpZiAoaW5kZXggPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgb2JqW2tleV0gPSBiaW5kKG9ialtrZXldLCBvYmopO1xuICB9XG4gIHJldHVybiBvYmo7XG59KTtcbiIsImltcG9ydCBoYXMgZnJvbSAnLi9faGFzLmpzJztcblxuLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lbW9pemUoZnVuYywgaGFzaGVyKSB7XG4gIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICBpZiAoIWhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgfTtcbiAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICByZXR1cm4gbWVtb2l6ZTtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5cbi8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbi8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgd2FpdCwgYXJncykge1xuICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgfSwgd2FpdCk7XG59KTtcbiIsImltcG9ydCBwYXJ0aWFsIGZyb20gJy4vcGFydGlhbC5qcyc7XG5pbXBvcnQgZGVsYXkgZnJvbSAnLi9kZWxheS5qcyc7XG5pbXBvcnQgXyBmcm9tICcuL3VuZGVyc2NvcmUuanMnO1xuXG4vLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbi8vIGNsZWFyZWQuXG5leHBvcnQgZGVmYXVsdCBwYXJ0aWFsKGRlbGF5LCBfLCAxKTtcbiIsImltcG9ydCBub3cgZnJvbSAnLi9ub3cuanMnO1xuXG4vLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2Vcbi8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuLy8gYXMgbXVjaCBhcyBpdCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0aW9uO1xuLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3Ncbi8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgdGltZW91dCwgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogbm93KCk7XG4gICAgdGltZW91dCA9IG51bGw7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcblxuICB2YXIgdGhyb3R0bGVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIF9ub3cgPSBub3coKTtcbiAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gX25vdztcbiAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChfbm93IC0gcHJldmlvdXMpO1xuICAgIGNvbnRleHQgPSB0aGlzO1xuICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBwcmV2aW91cyA9IF9ub3c7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdGhyb3R0bGVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICBwcmV2aW91cyA9IDA7XG4gICAgdGltZW91dCA9IGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gdGhyb3R0bGVkO1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBub3cgZnJvbSAnLi9ub3cuanMnO1xuXG4vLyBXaGVuIGEgc2VxdWVuY2Ugb2YgY2FsbHMgb2YgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGVuZHMsIHRoZSBhcmd1bWVudFxuLy8gZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBUaGUgZW5kIG9mIGEgc2VxdWVuY2UgaXMgZGVmaW5lZCBieSB0aGUgYHdhaXRgXG4vLyBwYXJhbWV0ZXIuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uIHdpbGwgYmVcbi8vIHRyaWdnZXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZSBpbnN0ZWFkIG9mIGF0IHRoZSBlbmQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgdmFyIHRpbWVvdXQsIHByZXZpb3VzLCBhcmdzLCByZXN1bHQsIGNvbnRleHQ7XG5cbiAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhc3NlZCA9IG5vdygpIC0gcHJldmlvdXM7XG4gICAgaWYgKHdhaXQgPiBwYXNzZWQpIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gcGFzc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBpZiAoIWltbWVkaWF0ZSkgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIGJlY2F1c2UgYGZ1bmNgIGNhbiByZWN1cnNpdmVseSBpbnZva2UgYGRlYm91bmNlZGAuXG4gICAgICBpZiAoIXRpbWVvdXQpIGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlYm91bmNlZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oX2FyZ3MpIHtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gX2FyZ3M7XG4gICAgcHJldmlvdXMgPSBub3coKTtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgIGlmIChpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIGRlYm91bmNlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gZGVib3VuY2VkO1xufVxuIiwiaW1wb3J0IHBhcnRpYWwgZnJvbSAnLi9wYXJ0aWFsLmpzJztcblxuLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4vLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4vLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd3JhcChmdW5jLCB3cmFwcGVyKSB7XG4gIHJldHVybiBwYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xufVxuIiwiLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5lZ2F0ZShwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaSA9IHN0YXJ0O1xuICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG4iLCIvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFmdGVyKHRpbWVzLCBmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlXG4vLyBOdGggY2FsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJlZm9yZSh0aW1lcywgZnVuYykge1xuICB2YXIgbWVtbztcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgIHJldHVybiBtZW1vO1xuICB9O1xufVxuIiwiaW1wb3J0IHBhcnRpYWwgZnJvbSAnLi9wYXJ0aWFsLmpzJztcbmltcG9ydCBiZWZvcmUgZnJvbSAnLi9iZWZvcmUuanMnO1xuXG4vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbi8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG5leHBvcnQgZGVmYXVsdCBwYXJ0aWFsKGJlZm9yZSwgMik7XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIHZhciBfa2V5cyA9IGtleXMob2JqKSwga2V5O1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBfa2V5c1tpXTtcbiAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7XG4gIH1cbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5cbi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9O1xufVxuIiwiaW1wb3J0IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyIGZyb20gJy4vX2NyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyLmpzJztcblxuLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcbiIsImltcG9ydCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlciBmcm9tICcuL19jcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlci5qcyc7XG5cbi8vIFJldHVybnMgdGhlIGxhc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuXG4vLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4vLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzb3J0ZWRJbmRleChhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gIH1cbiAgcmV0dXJuIGxvdztcbn1cbiIsImltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGlzTmFOIGZyb20gJy4vaXNOYU4uanMnO1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgYF8uaW5kZXhPZmAgYW5kIGBfLmxhc3RJbmRleE9mYCBmdW5jdGlvbnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgfVxuICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIGlzTmFOKTtcbiAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICB9XG4gICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfTtcbn1cbiIsImltcG9ydCBzb3J0ZWRJbmRleCBmcm9tICcuL3NvcnRlZEluZGV4LmpzJztcbmltcG9ydCBmaW5kSW5kZXggZnJvbSAnLi9maW5kSW5kZXguanMnO1xuaW1wb3J0IGNyZWF0ZUluZGV4RmluZGVyIGZyb20gJy4vX2NyZWF0ZUluZGV4RmluZGVyLmpzJztcblxuLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbi8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUluZGV4RmluZGVyKDEsIGZpbmRJbmRleCwgc29ydGVkSW5kZXgpO1xuIiwiaW1wb3J0IGZpbmRMYXN0SW5kZXggZnJvbSAnLi9maW5kTGFzdEluZGV4LmpzJztcbmltcG9ydCBjcmVhdGVJbmRleEZpbmRlciBmcm9tICcuL19jcmVhdGVJbmRleEZpbmRlci5qcyc7XG5cbi8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBmaW5kTGFzdEluZGV4KTtcbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgZmluZEluZGV4IGZyb20gJy4vZmluZEluZGV4LmpzJztcbmltcG9ydCBmaW5kS2V5IGZyb20gJy4vZmluZEtleS5qcyc7XG5cbi8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbmQob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgdmFyIGtleUZpbmRlciA9IGlzQXJyYXlMaWtlKG9iaikgPyBmaW5kSW5kZXggOiBmaW5kS2V5O1xuICB2YXIga2V5ID0ga2V5RmluZGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbn1cbiIsImltcG9ydCBmaW5kIGZyb20gJy4vZmluZC5qcyc7XG5pbXBvcnQgbWF0Y2hlciBmcm9tICcuL21hdGNoZXIuanMnO1xuXG4vLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLmZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdFxuLy8gb2JqZWN0IGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaW5kV2hlcmUob2JqLCBhdHRycykge1xuICByZXR1cm4gZmluZChvYmosIG1hdGNoZXIoYXR0cnMpKTtcbn1cbiIsImltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFRoZSBjb3JuZXJzdG9uZSBmb3IgY29sbGVjdGlvbiBmdW5jdGlvbnMsIGFuIGBlYWNoYFxuLy8gaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4vLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4vLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4gIHZhciBpLCBsZW5ndGg7XG4gIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaXRlcmF0ZWUob2JqW19rZXlzW2ldXSwgX2tleXNbaV0sIG9iaik7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFwKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQgb3B0aW1pemVDYiBmcm9tICcuL19vcHRpbWl6ZUNiLmpzJztcblxuLy8gSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uLCBpdGVyYXRpbmcgbGVmdCBvciByaWdodC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgLy8gdGhlIG9uZSB0aGF0IGFjY2Vzc2VzIGBhcmd1bWVudHMubGVuZ3RoYCB0byBhdm9pZCBhIHBlcmYgaGl0LiAoIzE5OTEpXG4gIHZhciByZWR1Y2VyID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgaW5pdGlhbCkge1xuICAgIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgIG1lbW8gPSBvYmpbX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICBpbmRleCArPSBkaXI7XG4gICAgfVxuICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgcmV0dXJuIHJlZHVjZXIob2JqLCBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KSwgbWVtbywgaW5pdGlhbCk7XG4gIH07XG59XG4iLCJpbXBvcnQgY3JlYXRlUmVkdWNlIGZyb20gJy4vX2NyZWF0ZVJlZHVjZS5qcyc7XG5cbi8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbi8vIG9yIGBmb2xkbGAuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVSZWR1Y2UoMSk7XG4iLCJpbXBvcnQgY3JlYXRlUmVkdWNlIGZyb20gJy4vX2NyZWF0ZVJlZHVjZS5qcyc7XG5cbi8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUmVkdWNlKC0xKTtcbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuXG4vLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsImltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IG5lZ2F0ZSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5pbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuXG4vLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVqZWN0KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gIHJldHVybiBmaWx0ZXIob2JqLCBuZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIHBhc3MgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXZlcnkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29tZShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGg7XG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCBpbmRleE9mIGZyb20gJy4vaW5kZXhPZi5qcyc7XG5cbi8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gdmFsdWVzKG9iaik7XG4gIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwO1xuICByZXR1cm4gaW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgZGVlcEdldCBmcm9tICcuL19kZWVwR2V0LmpzJztcbmltcG9ydCB0b1BhdGggZnJvbSAnLi9fdG9QYXRoLmpzJztcblxuLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwgcGF0aCwgYXJncykge1xuICB2YXIgY29udGV4dFBhdGgsIGZ1bmM7XG4gIGlmIChpc0Z1bmN0aW9uKHBhdGgpKSB7XG4gICAgZnVuYyA9IHBhdGg7XG4gIH0gZWxzZSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgIHBhdGggPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIG1hcChvYmosIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZnVuYztcbiAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgaWYgKGNvbnRleHRQYXRoICYmIGNvbnRleHRQYXRoLmxlbmd0aCkge1xuICAgICAgICBjb250ZXh0ID0gZGVlcEdldChjb250ZXh0LCBjb250ZXh0UGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGV4dCA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgbWV0aG9kID0gY29udGV4dFtwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGhvZCA9PSBudWxsID8gbWV0aG9kIDogbWV0aG9kLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICB9KTtcbn0pO1xuIiwiaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgcHJvcGVydHkgZnJvbSAnLi9wcm9wZXJ0eS5qcyc7XG5cbi8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8ubWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBsdWNrKG9iaiwga2V5KSB7XG4gIHJldHVybiBtYXAob2JqLCBwcm9wZXJ0eShrZXkpKTtcbn1cbiIsImltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSAnLi9tYXRjaGVyLmpzJztcblxuLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5maWx0ZXJgOiBzZWxlY3Rpbmcgb25seVxuLy8gb2JqZWN0cyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2hlcmUob2JqLCBhdHRycykge1xuICByZXR1cm4gZmlsdGVyKG9iaiwgbWF0Y2hlcihhdHRycykpO1xufVxuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5cbi8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1heChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgKHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSkge1xuICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiB2YWx1ZXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odiwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IChjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSkge1xuICAgICAgICByZXN1bHQgPSB2O1xuICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vX2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuaW1wb3J0IGNiIGZyb20gJy4vX2NiLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5cbi8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8ICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkpIHtcbiAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCAoY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpKSB7XG4gICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi9pc1N0cmluZy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9faXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcblxuLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbnZhciByZVN0clN5bWJvbCA9IC9bXlxcdWQ4MDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXXxbXFx1ZDgwMC1cXHVkZmZmXS9nO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgaWYgKGlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgaWYgKGlzU3RyaW5nKG9iaikpIHtcbiAgICAvLyBLZWVwIHN1cnJvZ2F0ZSBwYWlyIGNoYXJhY3RlcnMgdG9nZXRoZXIuXG4gICAgcmV0dXJuIG9iai5tYXRjaChyZVN0clN5bWJvbCk7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBtYXAob2JqLCBpZGVudGl0eSk7XG4gIHJldHVybiB2YWx1ZXMob2JqKTtcbn1cbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xuaW1wb3J0IHRvQXJyYXkgZnJvbSAnLi90b0FycmF5LmpzJztcblxuLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24gdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbi8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXG4vLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzYW1wbGUob2JqLCBuLCBndWFyZCkge1xuICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSB2YWx1ZXMob2JqKTtcbiAgICByZXR1cm4gb2JqW3JhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICB9XG4gIHZhciBzYW1wbGUgPSB0b0FycmF5KG9iaik7XG4gIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoc2FtcGxlKTtcbiAgbiA9IE1hdGgubWF4KE1hdGgubWluKG4sIGxlbmd0aCksIDApO1xuICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKSB7XG4gICAgdmFyIHJhbmQgPSByYW5kb20oaW5kZXgsIGxhc3QpO1xuICAgIHZhciB0ZW1wID0gc2FtcGxlW2luZGV4XTtcbiAgICBzYW1wbGVbaW5kZXhdID0gc2FtcGxlW3JhbmRdO1xuICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7XG4gIH1cbiAgcmV0dXJuIHNhbXBsZS5zbGljZSgwLCBuKTtcbn1cbiIsImltcG9ydCBzYW1wbGUgZnJvbSAnLi9zYW1wbGUuanMnO1xuXG4vLyBTaHVmZmxlIGEgY29sbGVjdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNodWZmbGUob2JqKSB7XG4gIHJldHVybiBzYW1wbGUob2JqLCBJbmZpbml0eSk7XG59XG4iLCJpbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IHBsdWNrIGZyb20gJy4vcGx1Y2suanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5cbi8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNvcnRCeShvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gIHZhciBpbmRleCA9IDA7XG4gIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICByZXR1cm4gcGx1Y2sobWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwga2V5LCBsaXN0KVxuICAgIH07XG4gIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWE7XG4gICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgPiBiIHx8IGEgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG4gICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gIH0pLCAndmFsdWUnKTtcbn1cbiIsImltcG9ydCBjYiBmcm9tICcuL19jYi5qcyc7XG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2guanMnO1xuXG4vLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBncm91cChiZWhhdmlvciwgcGFydGl0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHBhcnRpdGlvbiA/IFtbXSwgW11dIDoge307XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cbiIsImltcG9ydCBncm91cCBmcm9tICcuL19ncm91cC5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5cbi8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGVcbi8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuZXhwb3J0IGRlZmF1bHQgZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmIChoYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG59KTtcbiIsImltcG9ydCBncm91cCBmcm9tICcuL19ncm91cC5qcyc7XG5cbi8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgXy5ncm91cEJ5YCwgYnV0IGZvclxuLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuZXhwb3J0IGRlZmF1bHQgZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIHJlc3VsdFtrZXldID0gdmFsdWU7XG59KTtcbiIsImltcG9ydCBncm91cCBmcm9tICcuL19ncm91cC5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vX2hhcy5qcyc7XG5cbi8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4vLyBjcml0ZXJpb24uXG5leHBvcnQgZGVmYXVsdCBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgaWYgKGhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxO1xufSk7XG4iLCJpbXBvcnQgZ3JvdXAgZnJvbSAnLi9fZ3JvdXAuanMnO1xuXG4vLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHBhc3MgdGhlIGdpdmVuXG4vLyB0cnV0aCB0ZXN0LCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3QgcGFzcyB0aGUgdHJ1dGggdGVzdC5cbmV4cG9ydCBkZWZhdWx0IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIHBhc3MpIHtcbiAgcmVzdWx0W3Bhc3MgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG59LCB0cnVlKTtcbiIsImltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL19pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIGNvbGxlY3Rpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaXplKG9iaikge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqKSA/IG9iai5sZW5ndGggOiBrZXlzKG9iaikubGVuZ3RoO1xufVxuIiwiLy8gSW50ZXJuYWwgYF8ucGlja2AgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGBrZXlgIGlzIGFuIGVudW1lcmFibGVcbi8vIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBrZXlJbk9iaih2YWx1ZSwga2V5LCBvYmopIHtcbiAgcmV0dXJuIGtleSBpbiBvYmo7XG59XG4iLCJpbXBvcnQgcmVzdEFyZ3VtZW50cyBmcm9tICcuL3Jlc3RBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBvcHRpbWl6ZUNiIGZyb20gJy4vX29wdGltaXplQ2IuanMnO1xuaW1wb3J0IGFsbEtleXMgZnJvbSAnLi9hbGxLZXlzLmpzJztcbmltcG9ydCBrZXlJbk9iaiBmcm9tICcuL19rZXlJbk9iai5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcblxuLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgYWxsb3dlZCBwcm9wZXJ0aWVzLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9LCBpdGVyYXRlZSA9IGtleXNbMF07XG4gIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgaWYgKGlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgaWYgKGtleXMubGVuZ3RoID4gMSkgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBrZXlzWzFdKTtcbiAgICBrZXlzID0gYWxsS2V5cyhvYmopO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAga2V5cyA9IGZsYXR0ZW4oa2V5cywgZmFsc2UsIGZhbHNlKTtcbiAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IG5lZ2F0ZSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5pbXBvcnQgbWFwIGZyb20gJy4vbWFwLmpzJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJy4vX2ZsYXR0ZW4uanMnO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gJy4vY29udGFpbnMuanMnO1xuaW1wb3J0IHBpY2sgZnJvbSAnLi9waWNrLmpzJztcblxuLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGRpc2FsbG93ZWQgcHJvcGVydGllcy5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gIGlmIChpc0Z1bmN0aW9uKGl0ZXJhdGVlKSkge1xuICAgIGl0ZXJhdGVlID0gbmVnYXRlKGl0ZXJhdGVlKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSBjb250ZXh0ID0ga2V5c1sxXTtcbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gbWFwKGZsYXR0ZW4oa2V5cywgZmFsc2UsIGZhbHNlKSwgU3RyaW5nKTtcbiAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgIHJldHVybiAhY29udGFpbnMoa2V5cywga2V5KTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBwaWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xufSk7XG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4vLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWwoYXJyYXksIG4sIGd1YXJkKSB7XG4gIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG59XG4iLCJpbXBvcnQgaW5pdGlhbCBmcm9tICcuL2luaXRpYWwuanMnO1xuXG4vLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbi8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIFRoZSAqKmd1YXJkKiogY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlyc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgfHwgZ3VhcmQgPyB2b2lkIDAgOiBbXTtcbiAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xuICByZXR1cm4gaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7XG59XG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGBhcnJheWAuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4vLyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZVxuLy8gYGFycmF5YC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG59XG4iLCJpbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QuanMnO1xuXG4vLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4vLyB2YWx1ZXMgaW4gdGhlIGFycmF5LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFzdChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCB8fCBndWFyZCA/IHZvaWQgMCA6IFtdO1xuICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gIHJldHVybiByZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG59XG4iLCJpbXBvcnQgZmlsdGVyIGZyb20gJy4vZmlsdGVyLmpzJztcblxuLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICByZXR1cm4gZmlsdGVyKGFycmF5LCBCb29sZWFuKTtcbn1cbiIsImltcG9ydCBfZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcblxuLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIHVwIHRvIGBkZXB0aGAuXG4vLyBQYXNzaW5nIGB0cnVlYCBvciBgZmFsc2VgIGFzIGBkZXB0aGAgbWVhbnMgYDFgIG9yIGBJbmZpbml0eWAsIHJlc3BlY3RpdmVseS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXksIGRlcHRoKSB7XG4gIHJldHVybiBfZmxhdHRlbihhcnJheSwgZGVwdGgsIGZhbHNlKTtcbn1cbiIsImltcG9ydCByZXN0QXJndW1lbnRzIGZyb20gJy4vcmVzdEFyZ3VtZW50cy5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcbmltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gJy4vY29udGFpbnMuanMnO1xuXG4vLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4vLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgcmVzdCkge1xuICByZXN0ID0gZmxhdHRlbihyZXN0LCB0cnVlLCB0cnVlKTtcbiAgcmV0dXJuIGZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xuICAgIHJldHVybiAhY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICB9KTtcbn0pO1xuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCBkaWZmZXJlbmNlIGZyb20gJy4vZGlmZmVyZW5jZS5qcyc7XG5cbi8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxuZXhwb3J0IGRlZmF1bHQgcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgb3RoZXJBcnJheXMpIHtcbiAgcmV0dXJuIGRpZmZlcmVuY2UoYXJyYXksIG90aGVyQXJyYXlzKTtcbn0pO1xuIiwiaW1wb3J0IGlzQm9vbGVhbiBmcm9tICcuL2lzQm9vbGVhbi5qcyc7XG5pbXBvcnQgY2IgZnJvbSAnLi9fY2IuanMnO1xuaW1wb3J0IGdldExlbmd0aCBmcm9tICcuL19nZXRMZW5ndGguanMnO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gJy4vY29udGFpbnMuanMnO1xuXG4vLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuLy8gVGhlIGZhc3RlciBhbGdvcml0aG0gd2lsbCBub3Qgd29yayB3aXRoIGFuIGl0ZXJhdGVlIGlmIHRoZSBpdGVyYXRlZVxuLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuLy8gdGhlIGZhc3RlciBhbGdvcml0aG0uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgaWYgKCFpc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgY29udGV4dCA9IGl0ZXJhdGVlO1xuICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIHNlZW4gPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUsIGksIGFycmF5KSA6IHZhbHVlO1xuICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgc2VlbiA9IGNvbXB1dGVkO1xuICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgIGlmICghY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFjb250YWlucyhyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCB1bmlxIGZyb20gJy4vdW5pcS5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL19mbGF0dGVuLmpzJztcblxuLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4vLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbmV4cG9ydCBkZWZhdWx0IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHJldHVybiB1bmlxKGZsYXR0ZW4oYXJyYXlzLCB0cnVlLCB0cnVlKSk7XG59KTtcbiIsImltcG9ydCBnZXRMZW5ndGggZnJvbSAnLi9fZ2V0TGVuZ3RoLmpzJztcbmltcG9ydCBjb250YWlucyBmcm9tICcuL2NvbnRhaW5zLmpzJztcblxuLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuLy8gcGFzc2VkLWluIGFycmF5cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGludGVyc2VjdGlvbihhcnJheSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgaWYgKGNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgIHZhciBqO1xuICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmICghY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgfVxuICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IG1heCBmcm9tICcuL21heC5qcyc7XG5pbXBvcnQgZ2V0TGVuZ3RoIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5pbXBvcnQgcGx1Y2sgZnJvbSAnLi9wbHVjay5qcyc7XG5cbi8vIENvbXBsZW1lbnQgb2YgemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4vLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bnppcChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gKGFycmF5ICYmIG1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGgpIHx8IDA7XG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICByZXN1bHRbaW5kZXhdID0gcGx1Y2soYXJyYXksIGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHJlc3RBcmd1bWVudHMgZnJvbSAnLi9yZXN0QXJndW1lbnRzLmpzJztcbmltcG9ydCB1bnppcCBmcm9tICcuL3VuemlwLmpzJztcblxuLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG5leHBvcnQgZGVmYXVsdCByZXN0QXJndW1lbnRzKHVuemlwKTtcbiIsImltcG9ydCBnZXRMZW5ndGggIGZyb20gJy4vX2dldExlbmd0aC5qcyc7XG5cbi8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbi8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBQYXNzaW5nIGJ5IHBhaXJzIGlzIHRoZSByZXZlcnNlIG9mIGBfLnBhaXJzYC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9iamVjdChsaXN0LCB2YWx1ZXMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodmFsdWVzKSB7XG4gICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCIvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4vLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByYW5nZShzdGFydCwgc3RvcCwgc3RlcCkge1xuICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgc3RhcnQgPSAwO1xuICB9XG4gIGlmICghc3RlcCkge1xuICAgIHN0ZXAgPSBzdG9wIDwgc3RhcnQgPyAtMSA6IDE7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gIH1cblxuICByZXR1cm4gcmFuZ2U7XG59XG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vX3NldHVwLmpzJztcblxuLy8gQ2h1bmsgYSBzaW5nbGUgYXJyYXkgaW50byBtdWx0aXBsZSBhcnJheXMsIGVhY2ggY29udGFpbmluZyBgY291bnRgIG9yIGZld2VyXG4vLyBpdGVtcy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNodW5rKGFycmF5LCBjb3VudCkge1xuICBpZiAoY291bnQgPT0gbnVsbCB8fCBjb3VudCA8IDEpIHJldHVybiBbXTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICByZXN1bHQucHVzaChzbGljZS5jYWxsKGFycmF5LCBpLCBpICs9IGNvdW50KSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBfIGZyb20gJy4vdW5kZXJzY29yZS5qcyc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNoYWluUmVzdWx0KGluc3RhbmNlLCBvYmopIHtcbiAgcmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqO1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5pbXBvcnQgZnVuY3Rpb25zIGZyb20gJy4vZnVuY3Rpb25zLmpzJztcbmltcG9ydCB7IHB1c2ggfSBmcm9tICcuL19zZXR1cC5qcyc7XG5pbXBvcnQgY2hhaW5SZXN1bHQgZnJvbSAnLi9fY2hhaW5SZXN1bHQuanMnO1xuXG4vLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaXhpbihvYmopIHtcbiAgZWFjaChmdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgZnVuYy5hcHBseShfLCBhcmdzKSk7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBfO1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnLi91bmRlcnNjb3JlLmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5pbXBvcnQgeyBBcnJheVByb3RvIH0gZnJvbSAnLi9fc2V0dXAuanMnO1xuaW1wb3J0IGNoYWluUmVzdWx0IGZyb20gJy4vX2NoYWluUmVzdWx0LmpzJztcblxuLy8gQWRkIGFsbCBtdXRhdG9yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgIGlmIChvYmogIT0gbnVsbCkge1xuICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgb2JqWzBdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTtcbiAgfTtcbn0pO1xuXG4vLyBBZGQgYWxsIGFjY2Vzc29yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgaWYgKG9iaiAhPSBudWxsKSBvYmogPSBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICB9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IF87XG4iLCIvLyBEZWZhdWx0IEV4cG9ydFxuLy8gPT09PT09PT09PT09PT1cbi8vIEluIHRoaXMgbW9kdWxlLCB3ZSBtaXggb3VyIGJ1bmRsZWQgZXhwb3J0cyBpbnRvIHRoZSBgX2Agb2JqZWN0IGFuZCBleHBvcnRcbi8vIHRoZSByZXN1bHQuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHNldHRpbmcgYG1vZHVsZS5leHBvcnRzID0gX2AgaW4gQ29tbW9uSlMuXG4vLyBIZW5jZSwgdGhpcyBtb2R1bGUgaXMgYWxzbyB0aGUgZW50cnkgcG9pbnQgb2Ygb3VyIFVNRCBidW5kbGUgYW5kIHRoZSBwYWNrYWdlXG4vLyBlbnRyeSBwb2ludCBmb3IgQ29tbW9uSlMgYW5kIEFNRCB1c2Vycy4gSW4gb3RoZXIgd29yZHMsIHRoaXMgaXMgKHRoZSBzb3VyY2Vcbi8vIG9mKSB0aGUgbW9kdWxlIHlvdSBhcmUgaW50ZXJmYWNpbmcgd2l0aCB3aGVuIHlvdSBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZzpcbi8vXG4vLyBgYGBqc1xuLy8gLy8gQ29tbW9uSlNcbi8vIHZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuLy9cbi8vIC8vIEFNRFxuLy8gZGVmaW5lKFsndW5kZXJzY29yZSddLCBmdW5jdGlvbihfKSB7Li4ufSk7XG4vL1xuLy8gLy8gVU1EIGluIHRoZSBicm93c2VyXG4vLyAvLyBfIGlzIGF2YWlsYWJsZSBhcyBhIGdsb2JhbCB2YXJpYWJsZVxuLy8gYGBgXG5pbXBvcnQgKiBhcyBhbGxFeHBvcnRzIGZyb20gJy4vaW5kZXguanMnO1xuaW1wb3J0IHsgbWl4aW4gfSBmcm9tICcuL2luZGV4LmpzJztcblxuLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxudmFyIF8gPSBtaXhpbihhbGxFeHBvcnRzKTtcbi8vIExlZ2FjeSBOb2RlLmpzIEFQSS5cbl8uXyA9IF87XG4vLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgQVBJLlxuZXhwb3J0IGRlZmF1bHQgXztcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU09SVF9BU0MsIFNPUlRfREVTQyB9IGZyb20gXCIuLi9jb25zdFwiO1xuXG50eXBlIERhdGFPcGVyYXRvciA9IHtcbiAgbmV4dE9yZGVyOiAoXG4gICAgY29sdW1uOiBhbnksXG4gICAgc3RhdGU6IHsgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHNvcnRDb2x1bW46IGFueSB8IHVuZGVmaW5lZCB9LFxuICAgIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBzdHJpbmdcbiAgKSA9PiBzdHJpbmc7XG4gIHNvcnQ6IChcbiAgICBkYXRhOiBhbnlbXSxcbiAgICBvcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHNvcnRDb2x1bW46IGFueSB8IHVuZGVmaW5lZFxuICApID0+IGFueVtdO1xufTtcblxudHlwZSBIYW5kbGVTb3J0Q2hhbmdlID0gKFxuICBkYXRhRmllbGQ6IHN0cmluZyxcbiAgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWRcbikgPT4gdm9pZDtcblxuLy9cbmludGVyZmFjZSBTb3J0Q29udGV4dFZhbHVlIHtcbiAgZGF0YTogYW55W107XG4gIHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvblNvcnQ6IChjb2x1bW46IGFueSkgPT4gdm9pZDtcbiAgc29ydEZpZWxkOiBzdHJpbmcgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgU29ydFByb3ZpZGVyUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgY29sdW1uczogYW55W107XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGRlZmF1bHRTb3J0ZWQ/OiBBcnJheTx7XG4gICAgZGF0YUZpZWxkOiBzdHJpbmc7XG4gICAgb3JkZXI6IHR5cGVvZiBTT1JUX0FTQyB8IHR5cGVvZiBTT1JUX0RFU0M7XG4gIH0+O1xuICBzb3J0Pzoge1xuICAgIGRhdGFGaWVsZDogc3RyaW5nO1xuICAgIG9yZGVyOiB0eXBlb2YgU09SVF9BU0MgfCB0eXBlb2YgU09SVF9ERVNDO1xuICAgIHNvcnRGdW5jOiAoYTogYW55LCBiOiBhbnksIG9yZGVyOiBzdHJpbmcsIGRhdGFGaWVsZDogc3RyaW5nKSA9PiBudW1iZXI7XG4gIH07XG4gIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiB0eXBlb2YgU09SVF9BU0MgfCB0eXBlb2YgU09SVF9ERVNDO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoXG4gIGRhdGFPcGVyYXRvcjogRGF0YU9wZXJhdG9yLFxuICBpc1JlbW90ZVNvcnQ6ICgpID0+IGJvb2xlYW4sXG4gIGhhbmRsZVNvcnRDaGFuZ2U6IEhhbmRsZVNvcnRDaGFuZ2VcbikgPT4ge1xuICBjb25zdCBkZWZhdWx0U29ydENvbnRleHQgPSB7XG4gICAgZGF0YTogW10sXG4gICAgc29ydE9yZGVyOiB1bmRlZmluZWQsXG4gICAgb25Tb3J0OiAoKSA9PiB7IH0sXG4gICAgc29ydEZpZWxkOiBudWxsLFxuICB9O1xuICBjb25zdCBTb3J0Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8U29ydENvbnRleHRWYWx1ZT4oZGVmYXVsdFNvcnRDb250ZXh0KTtcblxuICBjbGFzcyBTb3J0UHJvdmlkZXIgZXh0ZW5kcyBDb21wb25lbnQ8U29ydFByb3ZpZGVyUHJvcHM+IHtcbiAgICBzdGF0ZToge1xuICAgICAgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBzb3J0Q29sdW1uOlxuICAgICAgfCB7XG4gICAgICAgIGRhdGFGaWVsZDogc3RyaW5nO1xuICAgICAgICB0ZXh0OiBzdHJpbmc7XG4gICAgICAgIG9uU29ydDogRnVuY3Rpb247XG4gICAgICAgIHNvcnRGdW5jOiBGdW5jdGlvbjtcbiAgICAgIH1cbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIH0gPSB7XG4gICAgICAgIHNvcnRPcmRlcjogU09SVF9BU0MsXG4gICAgICAgIHNvcnRDb2x1bW46IHtcbiAgICAgICAgICBkYXRhRmllbGQ6IFwiaWRcIixcbiAgICAgICAgICB0ZXh0OiBcIklEXCIsXG4gICAgICAgICAgb25Tb3J0OiAoKSA9PiB7IH0sXG4gICAgICAgICAgc29ydEZ1bmM6ICgpID0+IHsgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogU29ydFByb3ZpZGVyUHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnRlZCwgZGVmYXVsdFNvcnREaXJlY3Rpb24sIHNvcnQgfSA9IHByb3BzO1xuXG4gICAgICBsZXQgc29ydE9yZGVyOiBhbnk7XG4gICAgICBsZXQgc29ydENvbHVtbjogYW55O1xuXG4gICAgICBpZiAoZGVmYXVsdFNvcnRlZCAmJiBkZWZhdWx0U29ydGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc29ydE9yZGVyID0gZGVmYXVsdFNvcnRlZFswXS5vcmRlciB8fCBkZWZhdWx0U29ydERpcmVjdGlvbjtcbiAgICAgICAgc29ydENvbHVtbiA9IHRoaXMuaW5pdFNvcnQoZGVmYXVsdFNvcnRlZFswXS5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9IGVsc2UgaWYgKHNvcnQgJiYgc29ydC5kYXRhRmllbGQgJiYgc29ydC5vcmRlcikge1xuICAgICAgICBzb3J0T3JkZXIgPSBzb3J0Lm9yZGVyO1xuICAgICAgICBzb3J0Q29sdW1uID0gdGhpcy5pbml0U29ydChzb3J0LmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0ZSA9IHsgc29ydE9yZGVyLCBzb3J0Q29sdW1uIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciwgc29ydENvbHVtbiB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKGlzUmVtb3RlU29ydCgpICYmIHNvcnRPcmRlciAmJiBzb3J0Q29sdW1uKSB7XG4gICAgICAgIGhhbmRsZVNvcnRDaGFuZ2Uoc29ydENvbHVtbi5kYXRhRmllbGQsIHNvcnRPcmRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgIG5leHRQcm9wczogU29ydFByb3ZpZGVyUHJvcHMsXG4gICAgICBwcmV2U3RhdGU6IGFueVxuICAgICkge1xuICAgICAgY29uc3QgeyBzb3J0LCBjb2x1bW5zIH0gPSBuZXh0UHJvcHM7XG5cbiAgICAgIGlmIChzb3J0ICYmIHNvcnQuZGF0YUZpZWxkICYmIHNvcnQub3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3J0T3JkZXI6IHNvcnQub3JkZXIsXG4gICAgICAgICAgc29ydENvbHVtbjogY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5kYXRhRmllbGQgPT09IHNvcnQuZGF0YUZpZWxkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluaXRTb3J0KHNvcnRGaWVsZDogc3RyaW5nLCBzb3J0T3JkZXI6IHN0cmluZykge1xuICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qgc29ydENvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wuZGF0YUZpZWxkID09PSBzb3J0RmllbGQpO1xuXG4gICAgICBsZXQgc29ydENvbHVtbjogYW55O1xuXG4gICAgICBpZiAoc29ydENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBzb3J0Q29sdW1uID0gc29ydENvbHVtbnNbMF07XG4gICAgICAgIGlmIChzb3J0Q29sdW1uLm9uU29ydCkge1xuICAgICAgICAgIHNvcnRDb2x1bW4ub25Tb3J0KHNvcnRGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc29ydENvbHVtbjtcbiAgICB9XG5cbiAgICBoYW5kbGVTb3J0ID0gKGNvbHVtbjogeyBkYXRhRmllbGQ6IHN0cmluZzsgb25Tb3J0OiBGdW5jdGlvbiB9KSA9PiB7XG4gICAgICBjb25zdCBzb3J0T3JkZXIgPSBkYXRhT3BlcmF0b3IubmV4dE9yZGVyKFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIHRoaXMuc3RhdGUsXG4gICAgICAgIHRoaXMucHJvcHMuZGVmYXVsdFNvcnREaXJlY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGlmIChjb2x1bW4ub25Tb3J0KSB7XG4gICAgICAgIGNvbHVtbi5vblNvcnQoY29sdW1uLmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzUmVtb3RlU29ydCgpKSB7XG4gICAgICAgIGhhbmRsZVNvcnRDaGFuZ2UoY29sdW1uLmRhdGFGaWVsZCwgc29ydE9yZGVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHtcbiAgICAgICAgc29ydE9yZGVyLFxuICAgICAgICBzb3J0Q29sdW1uOiBjb2x1bW4sXG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHsgc29ydCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc29ydE9yZGVyLCBzb3J0Q29sdW1uIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBsZXQgeyBkYXRhIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAoIWlzUmVtb3RlU29ydCgpICYmIHNvcnRDb2x1bW4pIHtcbiAgICAgICAgY29uc3Qgc29ydEZ1bmMgPSBzb3J0Q29sdW1uLnNvcnRGdW5jXG4gICAgICAgICAgPyBzb3J0Q29sdW1uLnNvcnRGdW5jXG4gICAgICAgICAgOiBzb3J0ICYmIHNvcnQuc29ydEZ1bmM7XG4gICAgICAgIGRhdGEgPSBkYXRhT3BlcmF0b3Iuc29ydChkYXRhLCBzb3J0T3JkZXIsIHsgLi4uc29ydENvbHVtbiwgc29ydEZ1bmMgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTb3J0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgc29ydE9yZGVyLFxuICAgICAgICAgICAgb25Tb3J0OiB0aGlzLmhhbmRsZVNvcnQsXG4gICAgICAgICAgICBzb3J0RmllbGQ6IHNvcnRDb2x1bW4gPyBzb3J0Q29sdW1uLmRhdGFGaWVsZCA6IG51bGwsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8L1NvcnRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFByb3ZpZGVyOiBTb3J0UHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IFNvcnRDb250ZXh0LkNvbnN1bWVyLFxuICB9O1xufTtcbiIsImltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IENvbHVtblJlc29sdmVyIGZyb20gXCIuL2NvbHVtbi1yZXNvbHZlclwiO1xuXG5leHBvcnQgZGVmYXVsdCAoRXh0ZW5kQmFzZTogYW55KSA9PlxuICBjbGFzcyBUYWJsZVJlc29sdmVyIGV4dGVuZHMgQ29sdW1uUmVzb2x2ZXIoRXh0ZW5kQmFzZSkge1xuICAgIHZhbGlkYXRlUHJvcHMoKSB7XG4gICAgICBjb25zdCB7IGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKCFrZXlGaWVsZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugc3BlY2lmeSBhIGZpZWxkIGFzIGtleSB2aWEga2V5RmllbGRcIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52aXNpYmxlQ29sdW1uU2l6ZShmYWxzZSkgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2aXNpYmxlIGNvbHVtbnMgZGV0ZWN0ZWRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHZpc2libGVSb3dzKCkge1xuICAgICAgY29uc3QgeyBkYXRhLCBoaWRkZW5Sb3dzLCBrZXlGaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICghaGlkZGVuUm93cyB8fCBoaWRkZW5Sb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRhdGE7XG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoaGlkZGVuUm93cywga2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQgfSBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IEhlYWRlckNlbGwgZnJvbSBcIi4vaGVhZGVyLWNlbGxcIjtcbmltcG9ydCBFeHBhbmRIZWFkZXJDZWxsIGZyb20gXCIuL3Jvdy1leHBhbmQvZXhwYW5kLWhlYWRlci1jZWxsXCI7XG5pbXBvcnQgd2l0aEhlYWRlckV4cGFuc2lvbiBmcm9tIFwiLi9yb3ctZXhwYW5kL2V4cGFuZC1oZWFkZXItY2VsbC1jb25zdW1lclwiO1xuaW1wb3J0IFNlbGVjdGlvbkhlYWRlckNlbGwgZnJvbSBcIi4vcm93LXNlbGVjdGlvbi9zZWxlY3Rpb24taGVhZGVyLWNlbGxcIjtcbmltcG9ydCB3aXRoSGVhZGVyU2VsZWN0aW9uIGZyb20gXCIuL3Jvdy1zZWxlY3Rpb24vc2VsZWN0aW9uLWhlYWRlci1jZWxsLWNvbnN1bWVyXCI7XG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG4gIGNvbHVtbnM6IGFueVtdO1xuICBvblNvcnQ/OiAoY29sdW1uOiBhbnkpID0+IHZvaWQ7XG4gIG9uRmlsdGVyPzogKGZpbHRlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIHNvcnRGaWVsZD86IHN0cmluZztcbiAgc29ydE9yZGVyPzogc3RyaW5nO1xuICBzZWxlY3RSb3c/OiBhbnk7XG4gIGN1cnJGaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgb25FeHRlcm5hbEZpbHRlcj86IChjb2x1bW46IGFueSwgZmlsdGVyVHlwZTogc3RyaW5nKSA9PiAodmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgZ2xvYmFsU29ydENhcmV0PzogKG9yZGVyOiBzdHJpbmcsIGNvbHVtbjogYW55KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgd3JhcHBlckNsYXNzZXM/OiBzdHJpbmc7XG4gIGV4cGFuZFJvdz86IGFueTtcbiAgZmlsdGVyUG9zaXRpb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IEhlYWRlcjogUmVhY3QuRkM8SGVhZGVyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY29sdW1ucyxcbiAgICBvblNvcnQsXG4gICAgb25GaWx0ZXIsXG4gICAgc29ydEZpZWxkLFxuICAgIHNvcnRPcmRlcixcbiAgICBzZWxlY3RSb3csXG4gICAgZXhwYW5kUm93LFxuICAgIGN1cnJGaWx0ZXJzLFxuICAgIG9uRXh0ZXJuYWxGaWx0ZXIsXG4gICAgZmlsdGVyUG9zaXRpb24sXG4gICAgZ2xvYmFsU29ydENhcmV0LFxuICAgIHdyYXBwZXJDbGFzc2VzLFxuICB9ID0gcHJvcHM7XG5cbiAgbGV0IFNlbGVjdGlvbkhlYWRlckNlbGxDb21wOiBSZWFjdC5GQyA9ICgpID0+IG51bGw7XG4gIGxldCBFeHBhbnNpb25IZWFkZXJDZWxsQ29tcDogUmVhY3QuRkMgPSAoKSA9PiBudWxsO1xuXG4gIGlmIChleHBhbmRSb3c/LnNob3dFeHBhbmRDb2x1bW4pIHtcbiAgICBFeHBhbnNpb25IZWFkZXJDZWxsQ29tcCA9IHdpdGhIZWFkZXJFeHBhbnNpb24oRXhwYW5kSGVhZGVyQ2VsbCk7XG4gIH1cblxuICBpZiAoc2VsZWN0Um93KSB7XG4gICAgU2VsZWN0aW9uSGVhZGVyQ2VsbENvbXAgPSB3aXRoSGVhZGVyU2VsZWN0aW9uKFNlbGVjdGlvbkhlYWRlckNlbGwpO1xuICB9XG5cbiAgY29uc3QgaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdCA9IChwb3NpdGlvbiA9IElORElDQVRPUl9QT1NJVElPTl9MRUZUKSA9PlxuICAgIHBvc2l0aW9uID09PSBJTkRJQ0FUT1JfUE9TSVRJT05fTEVGVDtcblxuICBjb25zdCBjaGlsZHJlbnMgPSBjb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgY29uc3QgY3VyclNvcnQgPSBjb2x1bW4uZGF0YUZpZWxkID09PSBzb3J0RmllbGQ7XG4gICAgY29uc3QgaXNMYXN0U29ydGluZyA9IGNvbHVtbi5kYXRhRmllbGQgPT09IHNvcnRGaWVsZDtcblxuICAgIHJldHVybiAoXG4gICAgICA8SGVhZGVyQ2VsbFxuICAgICAgICBpbmRleD17aX1cbiAgICAgICAga2V5PXtjb2x1bW4uZGF0YUZpZWxkfVxuICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgb25Tb3J0PXtvblNvcnR9XG4gICAgICAgIHNvcnRpbmc9e2N1cnJTb3J0fVxuICAgICAgICBzb3J0T3JkZXI9e3NvcnRPcmRlcn1cbiAgICAgICAgZ2xvYmFsU29ydENhcmV0PXtnbG9iYWxTb3J0Q2FyZXR9XG4gICAgICAgIGlzTGFzdFNvcnRpbmc9e2lzTGFzdFNvcnRpbmd9XG4gICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgY3VyckZpbHRlcnM9e2N1cnJGaWx0ZXJzfVxuICAgICAgICBvbkV4dGVybmFsRmlsdGVyPXtvbkV4dGVybmFsRmlsdGVyfVxuICAgICAgICBmaWx0ZXJQb3NpdGlvbj17ZmlsdGVyUG9zaXRpb259XG4gICAgICAvPlxuICAgICk7XG4gIH0pO1xuXG4gIGlmIChzZWxlY3RSb3cgJiYgIXNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uKSB7XG4gICAgaWYgKGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoc2VsZWN0Um93LnNlbGVjdENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoPFNlbGVjdGlvbkhlYWRlckNlbGxDb21wIGtleT1cInNlbGVjdGlvblwiIC8+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goPFNlbGVjdGlvbkhlYWRlckNlbGxDb21wIGtleT1cInNlbGVjdGlvblwiIC8+KTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhwYW5kUm93Py5zaG93RXhwYW5kQ29sdW1uKSB7XG4gICAgaWYgKGlzUmVuZGVyRnVuY3Rpb25Db2x1bW5JbkxlZnQoZXhwYW5kUm93LmV4cGFuZENvbHVtblBvc2l0aW9uKSkge1xuICAgICAgY2hpbGRyZW5zLnVuc2hpZnQoPEV4cGFuc2lvbkhlYWRlckNlbGxDb21wIGtleT1cImV4cGFuc2lvblwiIC8+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5zLnB1c2goPEV4cGFuc2lvbkhlYWRlckNlbGxDb21wIGtleT1cImV4cGFuc2lvblwiIC8+KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0aGVhZCBjbGFzc05hbWU9e3dyYXBwZXJDbGFzc2VzfT5cbiAgICAgIDx0ciBjbGFzc05hbWU9e2NsYXNzTmFtZX0+e2NoaWxkcmVuc308L3RyPlxuICAgIDwvdGhlYWQ+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzU0NDJfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzYwMDNfXzsiLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjcmVhdGVFeHBhbnNpb25Db250ZXh0IGZyb20gXCIuLi9jb250ZXh0cy9yb3ctZXhwYW5kLWNvbnRleHRcIjtcbmltcG9ydCB7IFJvd1Byb3BzIH0gZnJvbSBcIi4uL3Jvdy9zaG91bGQtdXBkYXRlclwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgRXhwYW5kUm93IGZyb20gXCIuL2V4cGFuZC1yb3dcIjtcblxuY29uc3QgRXhwYW5zaW9uQ29udGV4dCA9IGNyZWF0ZUV4cGFuc2lvbkNvbnRleHQoKTtcblxuZXhwb3J0IGRlZmF1bHQgKFxuICBDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8Um93UHJvcHM+XG4pOiBSZWFjdC5GQzxSb3dQcm9wcz4gPT4ge1xuICBjb25zdCByZW5kZXJXaXRoRXhwYW5zaW9uID0gKFxuICAgIHByb3BzOiBSb3dQcm9wcyxcbiAgICBleHBhbmRSb3c6IGFueVxuICApOiBSZWFjdC5SZWFjdE5vZGVbXSA9PiB7XG4gICAgaWYgKCFleHBhbmRSb3cpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50Q2xhc3NOYW1lID0gXCJcIjtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICBjb25zdCBrZXkgPSBwcm9wcy52YWx1ZTtcblxuICAgIGNvbnN0IGV4cGFuZGVkID0gXy5jb250YWlucyhleHBhbmRSb3cuZXhwYW5kZWQsIGtleSk7XG4gICAgY29uc3QgaXNDbG9zaW5nID0gXy5jb250YWlucyhleHBhbmRSb3cuaXNDbG9zaW5nLCBrZXkpO1xuICAgIGNvbnN0IGV4cGFuZGFibGUgPVxuICAgICAgIWV4cGFuZFJvdy5ub25FeHBhbmRhYmxlIHx8ICFfLmNvbnRhaW5zKGV4cGFuZFJvdy5ub25FeHBhbmRhYmxlLCBrZXkpO1xuICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgcGFyZW50Q2xhc3NOYW1lID0gXy5pc0Z1bmN0aW9uKGV4cGFuZFJvdy5wYXJlbnRDbGFzc05hbWUpXG4gICAgICAgID8gZXhwYW5kUm93LnBhcmVudENsYXNzTmFtZShleHBhbmRlZCwgcHJvcHMucm93LCBwcm9wcy5yb3dJbmRleClcbiAgICAgICAgOiBleHBhbmRSb3cucGFyZW50Q2xhc3NOYW1lIHx8IFwiXCI7XG5cbiAgICAgIGNsYXNzTmFtZSA9IF8uaXNGdW5jdGlvbihleHBhbmRSb3cuY2xhc3NOYW1lKVxuICAgICAgICA/IGV4cGFuZFJvdy5jbGFzc05hbWUoZXhwYW5kZWQsIHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpXG4gICAgICAgIDogZXhwYW5kUm93LmNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICA8Q29tcG9uZW50XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgZXhwYW5kYWJsZT17ZXhwYW5kYWJsZX1cbiAgICAgICAgZXhwYW5kUm93PXt7IC4uLmV4cGFuZFJvdyB9fVxuICAgICAgICBjbGFzc05hbWU9e2NzKHByb3BzLmNsYXNzTmFtZSwgcGFyZW50Q2xhc3NOYW1lKX1cbiAgICAgIC8+LFxuICAgICAgZXhwYW5kZWQgfHwgaXNDbG9zaW5nID8gKFxuICAgICAgICA8RXhwYW5kUm93XG4gICAgICAgICAga2V5PXtgJHtrZXl9LWV4cGFuZGluZ2B9XG4gICAgICAgICAgY29sU3Bhbj17cHJvcHMudmlzaWJsZUNvbHVtblNpemUhfVxuICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBvbkNsb3NlZD17KCkgPT4gZXhwYW5kUm93Lm9uQ2xvc2VkKGtleSl9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgID5cbiAgICAgICAgICB7ZXhwYW5kUm93LnJlbmRlcmVyKHByb3BzLnJvdywgcHJvcHMucm93SW5kZXgpfVxuICAgICAgICA8L0V4cGFuZFJvdz5cbiAgICAgICkgOiBudWxsLFxuICAgIF07XG4gIH07XG5cbiAgcmV0dXJuIChwcm9wcykgPT4gKFxuICAgIDxFeHBhbnNpb25Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyhleHBhbmRSb3cpID0+IHJlbmRlcldpdGhFeHBhbnNpb24ocHJvcHMsIGV4cGFuZFJvdyl9XG4gICAgPC9FeHBhbnNpb25Db250ZXh0LkNvbnN1bWVyPlxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBFeHBhbmRSb3dQcm9wcywgU2VsZWN0Um93UHJvcHMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUk9XX1NFTEVDVF9ESVNBQkxFRCB9IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgd2l0aFJvd0V4cGFuc2lvbiBmcm9tIFwiLi9yb3ctZXhwYW5kL3Jvdy1jb25zdW1lclwiO1xuaW1wb3J0IHdpdGhSb3dTZWxlY3Rpb24gZnJvbSBcIi4vcm93LXNlbGVjdGlvbi9yb3ctY29uc3VtZXJcIjtcbmltcG9ydCBSb3dBZ2dyZWdhdG9yIGZyb20gXCIuL3Jvdy9hZ2dyZWdhdGUtcm93XCI7XG5pbXBvcnQgUm93U2VjdGlvbiBmcm9tIFwiLi9yb3cvcm93LXNlY3Rpb25cIjtcbmltcG9ydCB7IFJvd1Byb3BzIH0gZnJvbSBcIi4vcm93L3Nob3VsZC11cGRhdGVyXCI7XG5pbXBvcnQgU2ltcGxlUm93IGZyb20gXCIuL3Jvdy9zaW1wbGUtcm93XCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgQm9keVByb3BzIHtcbiAga2V5RmllbGQ6IHN0cmluZztcbiAgZGF0YTogYW55W107XG4gIGNvbHVtbnM6IGFueVtdO1xuICBzZWxlY3RSb3c/OiBTZWxlY3RSb3dQcm9wczxhbnk+IHwgdW5kZWZpbmVkO1xuICBjZWxsRWRpdDogYW55O1xuICB0YWJJbmRleENlbGw/OiBib29sZWFuO1xuICBpc0VtcHR5PzogYm9vbGVhbjtcbiAgbm9EYXRhSW5kaWNhdGlvbj86XG4gIHwgKCgpID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IHN0cmluZylcbiAgfCBSZWFjdC5SZWFjdEVsZW1lbnRcbiAgfCBzdHJpbmdcbiAgfCB1bmRlZmluZWQ7XG4gIHZpc2libGVDb2x1bW5TaXplPzogbnVtYmVyO1xuICByb3dTdHlsZT86XG4gIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICB8ICgocm93OiBhbnksIGluZGV4OiBudW1iZXIpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xuICByb3dDbGFzc2VzPzogc3RyaW5nIHwgKChyb3c6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKTtcbiAgcm93RXZlbnRzPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGw7XG4gIGV4cGFuZFJvdz86IEV4cGFuZFJvd1Byb3BzPGFueSwgYW55PiB8IHVuZGVmaW5lZDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG5jbGFzcyBCb2R5IGV4dGVuZHMgQ29tcG9uZW50PEJvZHlQcm9wcz4ge1xuICBFZGl0aW5nQ2VsbDogYW55O1xuICBSb3dDb21wb25lbnQ6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQm9keVByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHsga2V5RmllbGQsIGNlbGxFZGl0LCBzZWxlY3RSb3csIGV4cGFuZFJvdyB9ID0gcHJvcHM7XG5cbiAgICAvLyBDb25zdHJ1Y3QgRWRpdGluZyBDZWxsIENvbXBvbmVudFxuICAgIGlmIChjZWxsRWRpdD8uY3JlYXRlQ29udGV4dCkge1xuICAgICAgdGhpcy5FZGl0aW5nQ2VsbCA9IGNlbGxFZGl0LmNyZWF0ZUVkaXRpbmdDZWxsKFxuICAgICAgICBfLFxuICAgICAgICBjZWxsRWRpdC5vcHRpb25zLm9uU3RhcnRFZGl0XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBSb3cgQ29tcG9uZW50XG4gICAgbGV0IFJvd0NvbXBvbmVudDogYW55ID0gU2ltcGxlUm93O1xuXG4gICAgY29uc3Qgc2VsZWN0Um93RW5hYmxlZCA9IHNlbGVjdFJvdz8ubW9kZSAhPT0gUk9XX1NFTEVDVF9ESVNBQkxFRDtcbiAgICBjb25zdCBleHBhbmRSb3dFbmFibGVkID0gISFleHBhbmRSb3chLnJlbmRlcmVyO1xuXG4gICAgaWYgKGV4cGFuZFJvd0VuYWJsZWQpIHtcbiAgICAgIFJvd0NvbXBvbmVudCA9IHdpdGhSb3dFeHBhbnNpb24oUm93QWdncmVnYXRvcik7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdFJvd0VuYWJsZWQpIHtcbiAgICAgIFJvd0NvbXBvbmVudCA9IHdpdGhSb3dTZWxlY3Rpb24oXG4gICAgICAgIGV4cGFuZFJvd0VuYWJsZWQgPyBSb3dDb21wb25lbnQgOiBSb3dBZ2dyZWdhdG9yXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChjZWxsRWRpdD8uY3JlYXRlQ29udGV4dCkge1xuICAgICAgUm93Q29tcG9uZW50ID0gY2VsbEVkaXQud2l0aFJvd0xldmVsQ2VsbEVkaXQoXG4gICAgICAgIFJvd0NvbXBvbmVudCxcbiAgICAgICAgc2VsZWN0Um93RW5hYmxlZCxcbiAgICAgICAga2V5RmllbGQsXG4gICAgICAgIF9cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5Sb3dDb21wb25lbnQgPSBSb3dDb21wb25lbnQ7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1ucyxcbiAgICAgIGRhdGEsXG4gICAgICB0YWJJbmRleENlbGwsXG4gICAgICBrZXlGaWVsZCxcbiAgICAgIGlzRW1wdHksXG4gICAgICBub0RhdGFJbmRpY2F0aW9uLFxuICAgICAgdmlzaWJsZUNvbHVtblNpemUsXG4gICAgICBjZWxsRWRpdCxcbiAgICAgIHNlbGVjdFJvdyxcbiAgICAgIHJvd1N0eWxlLFxuICAgICAgcm93Q2xhc3NlcyxcbiAgICAgIHJvd0V2ZW50cyxcbiAgICAgIGV4cGFuZFJvdyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGxldCBjb250ZW50OiBSZWFjdE5vZGU7XG5cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgY29uc3QgaW5kaWNhdGlvbiA9IF8uaXNGdW5jdGlvbihub0RhdGFJbmRpY2F0aW9uKVxuICAgICAgICA/IG5vRGF0YUluZGljYXRpb24oKVxuICAgICAgICA6IG5vRGF0YUluZGljYXRpb247XG4gICAgICBpZiAoIWluZGljYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb250ZW50ID0gPFJvd1NlY3Rpb24gY29udGVudD17aW5kaWNhdGlvbn0gY29sU3Bhbj17dmlzaWJsZUNvbHVtblNpemV9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3RSb3dFbmFibGVkID0gc2VsZWN0Um93Py5tb2RlICE9PSBST1dfU0VMRUNUX0RJU0FCTEVEO1xuICAgICAgY29uc3QgZXhwYW5kUm93RW5hYmxlZCA9ICEhZXhwYW5kUm93IS5yZW5kZXJlcjtcblxuICAgICAgY29uc3QgYWRkaXRpb25hbFJvd1Byb3BzOiBSb3dQcm9wcyA9IHt9O1xuXG4gICAgICBpZiAoY2VsbEVkaXQ/LmNyZWF0ZUNvbnRleHQpIHtcbiAgICAgICAgYWRkaXRpb25hbFJvd1Byb3BzLkVkaXRpbmdDZWxsQ29tcG9uZW50ID0gdGhpcy5FZGl0aW5nQ2VsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdFJvd0VuYWJsZWQgfHwgZXhwYW5kUm93RW5hYmxlZCkge1xuICAgICAgICBhZGRpdGlvbmFsUm93UHJvcHMuZXhwYW5kUm93ID0gZXhwYW5kUm93O1xuICAgICAgICBhZGRpdGlvbmFsUm93UHJvcHMuc2VsZWN0Um93ID0gc2VsZWN0Um93O1xuICAgICAgfVxuXG4gICAgICBjb250ZW50ID0gZGF0YS5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IF8uZ2V0KHJvdywga2V5RmllbGQpO1xuICAgICAgICAgIGNvbnN0IGJhc2VSb3dQcm9wcyA9IHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgIHRhYkluZGV4Q2VsbCxcbiAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICBrZXlGaWVsZCxcbiAgICAgICAgICAgIGNlbGxFZGl0LFxuICAgICAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgICAgIHJvd0luZGV4OiBpbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TaXplLFxuICAgICAgICAgICAgYXR0cnM6IHJvd0V2ZW50cyB8fCB7fSxcbiAgICAgICAgICAgIC4uLmFkZGl0aW9uYWxSb3dQcm9wcyxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgYmFzZVJvd1Byb3BzLnN0eWxlID0gXy5pc0Z1bmN0aW9uKHJvd1N0eWxlKVxuICAgICAgICAgICAgPyAocm93U3R5bGUocm93LCBpbmRleCkgYXMgYW55KVxuICAgICAgICAgICAgOiAocm93U3R5bGUgYXMgYW55KTtcbiAgICAgICAgICBiYXNlUm93UHJvcHMuY2xhc3NOYW1lID0gXy5pc0Z1bmN0aW9uKHJvd0NsYXNzZXMpXG4gICAgICAgICAgICA/IHJvd0NsYXNzZXMocm93LCBpbmRleClcbiAgICAgICAgICAgIDogcm93Q2xhc3NlcztcblxuICAgICAgICAgIHJldHVybiA8dGhpcy5Sb3dDb21wb25lbnQgey4uLmJhc2VSb3dQcm9wc30gLz47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiA8dGJvZHkgY2xhc3NOYW1lPXtjbGFzc05hbWV9Pntjb250ZW50fTwvdGJvZHk+O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvZHk7XG4iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHtcbiAgICBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykge1xuICAgICAgdmFyIHQgPSBhcmd1bWVudHNbZV07XG4gICAgICBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cbmV4cG9ydCB7IF9leHRlbmRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkge1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX3NldFByb3RvdHlwZU9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHQsIG8pIHtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSwgdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSB0LCBzZXRQcm90b3R5cGVPZih0LCBvKTtcbn1cbmV4cG9ydCB7IF9pbmhlcml0c0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiByZXBsYWNlQ2xhc3NOYW1lKG9yaWdDbGFzcywgY2xhc3NUb1JlbW92ZSkge1xuICByZXR1cm4gb3JpZ0NsYXNzLnJlcGxhY2UobmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xhc3NUb1JlbW92ZSArIFwiKD86XFxcXHN8JClcIiwgJ2cnKSwgJyQxJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbn1cbi8qKlxuICogUmVtb3ZlcyBhIENTUyBjbGFzcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSwgY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycsIGNsYXNzTmFtZSkpO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQge1xuICBkaXNhYmxlZDogZmFsc2Vcbn07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7IiwiZXhwb3J0IHZhciBmb3JjZVJlZmxvdyA9IGZ1bmN0aW9uIGZvcmNlUmVmbG93KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsVG9wO1xufTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgdGltZW91dHNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcbmV4cG9ydCB2YXIgVU5NT1VOVEVEID0gJ3VubW91bnRlZCc7XG5leHBvcnQgdmFyIEVYSVRFRCA9ICdleGl0ZWQnO1xuZXhwb3J0IHZhciBFTlRFUklORyA9ICdlbnRlcmluZyc7XG5leHBvcnQgdmFyIEVOVEVSRUQgPSAnZW50ZXJlZCc7XG5leHBvcnQgdmFyIEVYSVRJTkcgPSAnZXhpdGluZyc7XG4vKipcbiAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudCBsZXRzIHlvdSBkZXNjcmliZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgY29tcG9uZW50XG4gKiBzdGF0ZSB0byBhbm90aGVyIF9vdmVyIHRpbWVfIHdpdGggYSBzaW1wbGUgZGVjbGFyYXRpdmUgQVBJLiBNb3N0IGNvbW1vbmx5XG4gKiBpdCdzIHVzZWQgdG8gYW5pbWF0ZSB0aGUgbW91bnRpbmcgYW5kIHVubW91bnRpbmcgb2YgYSBjb21wb25lbnQsIGJ1dCBjYW4gYWxzb1xuICogYmUgdXNlZCB0byBkZXNjcmliZSBpbi1wbGFjZSB0cmFuc2l0aW9uIHN0YXRlcyBhcyB3ZWxsLlxuICpcbiAqIC0tLVxuICpcbiAqICoqTm90ZSoqOiBgVHJhbnNpdGlvbmAgaXMgYSBwbGF0Zm9ybS1hZ25vc3RpYyBiYXNlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nXG4gKiB0cmFuc2l0aW9ucyBpbiBDU1MsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZVxuICogW2BDU1NUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9jc3MtdHJhbnNpdGlvbilcbiAqIGluc3RlYWQuIEl0IGluaGVyaXRzIGFsbCB0aGUgZmVhdHVyZXMgb2YgYFRyYW5zaXRpb25gLCBidXQgY29udGFpbnNcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMgbmVjZXNzYXJ5IHRvIHBsYXkgbmljZSB3aXRoIENTUyB0cmFuc2l0aW9ucyAoaGVuY2UgdGhlXG4gKiBuYW1lIG9mIHRoZSBjb21wb25lbnQpLlxuICpcbiAqIC0tLVxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGBUcmFuc2l0aW9uYCBjb21wb25lbnQgZG9lcyBub3QgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHRoZVxuICogY29tcG9uZW50IGl0IHJlbmRlcnMsIGl0IG9ubHkgdHJhY2tzIFwiZW50ZXJcIiBhbmQgXCJleGl0XCIgc3RhdGVzIGZvciB0aGVcbiAqIGNvbXBvbmVudHMuIEl0J3MgdXAgdG8geW91IHRvIGdpdmUgbWVhbmluZyBhbmQgZWZmZWN0IHRvIHRob3NlIHN0YXRlcy4gRm9yXG4gKiBleGFtcGxlIHdlIGNhbiBhZGQgc3R5bGVzIHRvIGEgY29tcG9uZW50IHdoZW4gaXQgZW50ZXJzIG9yIGV4aXRzOlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuICpcbiAqIGNvbnN0IGR1cmF0aW9uID0gMzAwO1xuICpcbiAqIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAqICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtkdXJhdGlvbn1tcyBlYXNlLWluLW91dGAsXG4gKiAgIG9wYWNpdHk6IDAsXG4gKiB9XG4gKlxuICogY29uc3QgdHJhbnNpdGlvblN0eWxlcyA9IHtcbiAqICAgZW50ZXJpbmc6IHsgb3BhY2l0eTogMSB9LFxuICogICBlbnRlcmVkOiAgeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGV4aXRpbmc6ICB7IG9wYWNpdHk6IDAgfSxcbiAqICAgZXhpdGVkOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IEZhZGUgPSAoeyBpbjogaW5Qcm9wIH0pID0+IChcbiAqICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17ZHVyYXRpb259PlxuICogICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICA8ZGl2IHN0eWxlPXt7XG4gKiAgICAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAqICAgICAgICAgLi4udHJhbnNpdGlvblN0eWxlc1tzdGF0ZV1cbiAqICAgICAgIH19PlxuICogICAgICAgICBJJ20gYSBmYWRlIFRyYW5zaXRpb24hXG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICApfVxuICogICA8L1RyYW5zaXRpb24+XG4gKiApO1xuICogYGBgXG4gKlxuICogVGhlcmUgYXJlIDQgbWFpbiBzdGF0ZXMgYSBUcmFuc2l0aW9uIGNhbiBiZSBpbjpcbiAqICAtIGAnZW50ZXJpbmcnYFxuICogIC0gYCdlbnRlcmVkJ2BcbiAqICAtIGAnZXhpdGluZydgXG4gKiAgLSBgJ2V4aXRlZCdgXG4gKlxuICogVHJhbnNpdGlvbiBzdGF0ZSBpcyB0b2dnbGVkIHZpYSB0aGUgYGluYCBwcm9wLiBXaGVuIGB0cnVlYCB0aGUgY29tcG9uZW50XG4gKiBiZWdpbnMgdGhlIFwiRW50ZXJcIiBzdGFnZS4gRHVyaW5nIHRoaXMgc3RhZ2UsIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCBmcm9tXG4gKiBpdHMgY3VycmVudCB0cmFuc2l0aW9uIHN0YXRlLCB0byBgJ2VudGVyaW5nJ2AgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGVcbiAqIHRyYW5zaXRpb24gYW5kIHRoZW4gdG8gdGhlIGAnZW50ZXJlZCdgIHN0YWdlIG9uY2UgaXQncyBjb21wbGV0ZS4gTGV0J3MgdGFrZVxuICogdGhlIGZvbGxvd2luZyBleGFtcGxlICh3ZSdsbCB1c2UgdGhlXG4gKiBbdXNlU3RhdGVdKGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VzdGF0ZSkgaG9vayk6XG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezUwMH0+XG4gKiAgICAgICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICAgICAgLy8gLi4uXG4gKiAgICAgICAgICl9XG4gKiAgICAgICA8L1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCB0byB0aGUgYCdlbnRlcmluZydgIHN0YXRlXG4gKiBhbmQgc3RheSB0aGVyZSBmb3IgNTAwbXMgKHRoZSB2YWx1ZSBvZiBgdGltZW91dGApIGJlZm9yZSBpdCBmaW5hbGx5IHN3aXRjaGVzXG4gKiB0byBgJ2VudGVyZWQnYC5cbiAqXG4gKiBXaGVuIGBpbmAgaXMgYGZhbHNlYCB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIGV4Y2VwdCB0aGUgc3RhdGUgbW92ZXMgZnJvbVxuICogYCdleGl0aW5nJ2AgdG8gYCdleGl0ZWQnYC5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG4gICAgdmFyIHBhcmVudEdyb3VwID0gY29udGV4dDsgLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBUcmFuc2l0aW9uR3JvdXAgYWxsIGVudGVycyBhcmUgcmVhbGx5IGFwcGVhcnNcblxuICAgIHZhciBhcHBlYXIgPSBwYXJlbnRHcm91cCAmJiAhcGFyZW50R3JvdXAuaXNNb3VudGluZyA/IHByb3BzLmVudGVyIDogcHJvcHMuYXBwZWFyO1xuICAgIHZhciBpbml0aWFsU3RhdHVzO1xuICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJvcHMuaW4pIHtcbiAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gRU5URVJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRU5URVJFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BzLnVubW91bnRPbkV4aXQgfHwgcHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBVTk1PVU5URUQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBpbml0aWFsU3RhdHVzXG4gICAgfTtcbiAgICBfdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF9yZWYsIHByZXZTdGF0ZSkge1xuICAgIHZhciBuZXh0SW4gPSBfcmVmLmluO1xuXG4gICAgaWYgKG5leHRJbiAmJiBwcmV2U3RhdGUuc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuICA7XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcblxuICAgICAgaWYgKG5leHRTdGF0dXMgPT09IEVOVEVSSU5HKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgfHwgdGhpcy5wcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvcHVsbC83NDlcbiAgICAgICAgICAvLyBXaXRoIHVubW91bnRPbkV4aXQgb3IgbW91bnRPbkVudGVyLCB0aGUgZW50ZXIgYW5pbWF0aW9uIHNob3VsZCBoYXBwZW4gYXQgdGhlIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhpdGVkYCBhbmQgYGVudGVyaW5nYC5cbiAgICAgICAgICAvLyBUbyBtYWtlIHRoZSBhbmltYXRpb24gaGFwcGVuLCAgd2UgaGF2ZSB0byBzZXBhcmF0ZSBlYWNoIHJlbmRlcmluZyBhbmQgYXZvaWQgYmVpbmcgcHJvY2Vzc2VkIGFzIGJhdGNoZWQuXG5cbiAgICAgICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBlcmZvcm1FbnRlcihtb3VudGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcmZvcm1FeGl0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgJiYgdGhpcy5zdGF0ZS5zdGF0dXMgPT09IEVYSVRFRCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogVU5NT1VOVEVEXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FbnRlciA9IGZ1bmN0aW9uIHBlcmZvcm1FbnRlcihtb3VudGluZykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGVudGVyID0gdGhpcy5wcm9wcy5lbnRlcjtcbiAgICB2YXIgYXBwZWFyaW5nID0gdGhpcy5jb250ZXh0ID8gdGhpcy5jb250ZXh0LmlzTW91bnRpbmcgOiBtb3VudGluZztcblxuICAgIHZhciBfcmVmMiA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFthcHBlYXJpbmddIDogW1JlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpLCBhcHBlYXJpbmddLFxuICAgICAgICBtYXliZU5vZGUgPSBfcmVmMlswXSxcbiAgICAgICAgbWF5YmVBcHBlYXJpbmcgPSBfcmVmMlsxXTtcblxuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgZW50ZXJUaW1lb3V0ID0gYXBwZWFyaW5nID8gdGltZW91dHMuYXBwZWFyIDogdGltZW91dHMuZW50ZXI7IC8vIG5vIGVudGVyIGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVOVEVSRURcbiAgICAvLyBpZiB3ZSBhcmUgbW91bnRpbmcgYW5kIHJ1bm5pbmcgdGhpcyBpdCBtZWFucyBhcHBlYXIgX211c3RfIGJlIHNldFxuXG4gICAgaWYgKCFtb3VudGluZyAmJiAhZW50ZXIgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuXG4gICAgICBfdGhpczIub25UcmFuc2l0aW9uRW5kKGVudGVyVGltZW91dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FeGl0ID0gZnVuY3Rpb24gcGVyZm9ybUV4aXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgZXhpdCA9IHRoaXMucHJvcHMuZXhpdDtcbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIG1heWJlTm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBubyBleGl0IGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVYSVRFRFxuXG4gICAgaWYgKCFleGl0IHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuXG4gICAgICBfdGhpczMub25UcmFuc2l0aW9uRW5kKHRpbWVvdXRzLmV4aXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxOZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBjYW5jZWxOZXh0Q2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMubmV4dENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwoKTtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNhZmVTZXRTdGF0ZSA9IGZ1bmN0aW9uIHNhZmVTZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgdGhlcmUgYXJlIHdlaXJkIHJhY2UgY29uZGl0aW9ucyB3aXRoXG4gICAgLy8gc2V0U3RhdGUgY2FsbGJhY2tzIGFuZCB1bm1vdW50aW5nIGluIHRlc3RpbmcsIHNvIGFsd2F5cyBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIHdlIGNhbiBjYW5jZWwgYW55IHBlbmRpbmcgc2V0U3RhdGUgY2FsbGJhY2tzIGFmdGVyIHdlIHVubW91bnQuXG4gICAgY2FsbGJhY2sgPSB0aGlzLnNldE5leHRDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0TmV4dENhbGxiYWNrID0gZnVuY3Rpb24gc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpczQubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMubmV4dENhbGxiYWNrO1xuICB9O1xuXG4gIF9wcm90by5vblRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQodGltZW91dCwgaGFuZGxlcikge1xuICAgIHRoaXMuc2V0TmV4dENhbGxiYWNrKGhhbmRsZXIpO1xuICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB2YXIgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciA9IHRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcjtcblxuICAgIGlmICghbm9kZSB8fCBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcikge1xuICAgICAgdmFyIF9yZWYzID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW3RoaXMubmV4dENhbGxiYWNrXSA6IFtub2RlLCB0aGlzLm5leHRDYWxsYmFja10sXG4gICAgICAgICAgbWF5YmVOb2RlID0gX3JlZjNbMF0sXG4gICAgICAgICAgbWF5YmVOZXh0Q2FsbGJhY2sgPSBfcmVmM1sxXTtcblxuICAgICAgdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcihtYXliZU5vZGUsIG1heWJlTmV4dENhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICBpZiAoc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIF9pbiA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBfbW91bnRPbkVudGVyID0gX3RoaXMkcHJvcHMubW91bnRPbkVudGVyLFxuICAgICAgICBfdW5tb3VudE9uRXhpdCA9IF90aGlzJHByb3BzLnVubW91bnRPbkV4aXQsXG4gICAgICAgIF9hcHBlYXIgPSBfdGhpcyRwcm9wcy5hcHBlYXIsXG4gICAgICAgIF9lbnRlciA9IF90aGlzJHByb3BzLmVudGVyLFxuICAgICAgICBfZXhpdCA9IF90aGlzJHByb3BzLmV4aXQsXG4gICAgICAgIF90aW1lb3V0ID0gX3RoaXMkcHJvcHMudGltZW91dCxcbiAgICAgICAgX2FkZEVuZExpc3RlbmVyID0gX3RoaXMkcHJvcHMuYWRkRW5kTGlzdGVuZXIsXG4gICAgICAgIF9vbkVudGVyID0gX3RoaXMkcHJvcHMub25FbnRlcixcbiAgICAgICAgX29uRW50ZXJpbmcgPSBfdGhpcyRwcm9wcy5vbkVudGVyaW5nLFxuICAgICAgICBfb25FbnRlcmVkID0gX3RoaXMkcHJvcHMub25FbnRlcmVkLFxuICAgICAgICBfb25FeGl0ID0gX3RoaXMkcHJvcHMub25FeGl0LFxuICAgICAgICBfb25FeGl0aW5nID0gX3RoaXMkcHJvcHMub25FeGl0aW5nLFxuICAgICAgICBfb25FeGl0ZWQgPSBfdGhpcyRwcm9wcy5vbkV4aXRlZCxcbiAgICAgICAgX25vZGVSZWYgPSBfdGhpcyRwcm9wcy5ub2RlUmVmLFxuICAgICAgICBjaGlsZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIiwgXCJtb3VudE9uRW50ZXJcIiwgXCJ1bm1vdW50T25FeGl0XCIsIFwiYXBwZWFyXCIsIFwiZW50ZXJcIiwgXCJleGl0XCIsIFwidGltZW91dFwiLCBcImFkZEVuZExpc3RlbmVyXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRpbmdcIiwgXCJvbkV4aXRlZFwiLCBcIm5vZGVSZWZcIl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHN0YXR1cywgY2hpbGRQcm9wcykgOiBSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbiksIGNoaWxkUHJvcHMpKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb24uY29udGV4dFR5cGUgPSBUcmFuc2l0aW9uR3JvdXBDb250ZXh0O1xuVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBBIFJlYWN0IHJlZmVyZW5jZSB0byBET00gZWxlbWVudCB0aGF0IG5lZWQgdG8gdHJhbnNpdGlvbjpcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxMTI3MTMwLzQ2NzE5MzJcbiAgICpcbiAgICogICAtIFdoZW4gYG5vZGVSZWZgIHByb3AgaXMgdXNlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb25zXG4gICAqICAgICAgKGUuZy4gYG9uRW50ZXJgKSBiZWNhdXNlIHVzZXIgYWxyZWFkeSBoYXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgbm9kZS5cbiAgICogICAtIFdoZW4gY2hhbmdpbmcgYGtleWAgcHJvcCBvZiBgVHJhbnNpdGlvbmAgaW4gYSBgVHJhbnNpdGlvbkdyb3VwYCBhIG5ld1xuICAgKiAgICAgYG5vZGVSZWZgIG5lZWQgdG8gYmUgcHJvdmlkZWQgdG8gYFRyYW5zaXRpb25gIHdpdGggY2hhbmdlZCBga2V5YCBwcm9wXG4gICAqICAgICAoc2VlXG4gICAqICAgICBbdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi8xMzQzNWY4OTdiM2FiNzFmNmUxOWQ3MjRmMTQ1NTk2ZjU5MTA1ODFjL3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzI0wzNjItTDQzNykpLlxuICAgKi9cbiAgbm9kZVJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBQcm9wVHlwZXMuYW55IDogZnVuY3Rpb24gKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BWYWx1ZVtrZXldO1xuICAgICAgcmV0dXJuIFByb3BUeXBlcy5pbnN0YW5jZU9mKHZhbHVlICYmICdvd25lckRvY3VtZW50JyBpbiB2YWx1ZSA/IHZhbHVlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuRWxlbWVudCA6IEVsZW1lbnQpKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpO1xuICAgIH1cbiAgfSksXG5cbiAgLyoqXG4gICAqIEEgYGZ1bmN0aW9uYCBjaGlsZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgUmVhY3QgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpc1xuICAgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIHN0YXR1cyAoYCdlbnRlcmluZydgLCBgJ2VudGVyZWQnYCxcbiAgICogYCdleGl0aW5nJ2AsIGAnZXhpdGVkJ2ApLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBseSBjb250ZXh0XG4gICAqIHNwZWNpZmljIHByb3BzIHRvIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogPFRyYW5zaXRpb24gaW49e3RoaXMuc3RhdGUuaW59IHRpbWVvdXQ9ezE1MH0+XG4gICAqICAge3N0YXRlID0+IChcbiAgICogICAgIDxNeUNvbXBvbmVudCBjbGFzc05hbWU9e2BmYWRlIGZhZGUtJHtzdGF0ZX1gfSAvPlxuICAgKiAgICl9XG4gICAqIDwvVHJhbnNpdGlvbj5cbiAgICogYGBgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIGNvbXBvbmVudDsgdHJpZ2dlcnMgdGhlIGVudGVyIG9yIGV4aXQgc3RhdGVzXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBtb3VudGVkIGltbWVkaWF0ZWx5IGFsb25nIHdpdGhcbiAgICogdGhlIHBhcmVudCBgVHJhbnNpdGlvbmAgY29tcG9uZW50LiBJZiB5b3Ugd2FudCB0byBcImxhenkgbW91bnRcIiB0aGUgY29tcG9uZW50IG9uIHRoZVxuICAgKiBmaXJzdCBgaW49e3RydWV9YCB5b3UgY2FuIHNldCBgbW91bnRPbkVudGVyYC4gQWZ0ZXIgdGhlIGZpcnN0IGVudGVyIHRyYW5zaXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHN0YXlcbiAgICogbW91bnRlZCwgZXZlbiBvbiBcImV4aXRlZFwiLCB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBgdW5tb3VudE9uRXhpdGAuXG4gICAqL1xuICBtb3VudE9uRW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgc3RheXMgbW91bnRlZCBhZnRlciBpdCByZWFjaGVzIHRoZSBgJ2V4aXRlZCdgIHN0YXRlLlxuICAgKiBTZXQgYHVubW91bnRPbkV4aXRgIGlmIHlvdSdkIHByZWZlciB0byB1bm1vdW50IHRoZSBjb21wb25lbnQgYWZ0ZXIgaXQgZmluaXNoZXMgZXhpdGluZy5cbiAgICovXG4gIHVubW91bnRPbkV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgZG9lcyBub3QgcGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuXG4gICAqIGl0IGZpcnN0IG1vdW50cywgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgYGluYC4gSWYgeW91IHdhbnQgdGhpc1xuICAgKiBiZWhhdmlvciwgc2V0IGJvdGggYGFwcGVhcmAgYW5kIGBpbmAgdG8gYHRydWVgLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiB0aGVyZSBhcmUgbm8gc3BlY2lhbCBhcHBlYXIgc3RhdGVzIGxpa2UgYGFwcGVhcmluZ2AvYGFwcGVhcmVkYCwgdGhpcyBwcm9wXG4gICAqID4gb25seSBhZGRzIGFuIGFkZGl0aW9uYWwgZW50ZXIgdHJhbnNpdGlvbi4gSG93ZXZlciwgaW4gdGhlXG4gICAqID4gYDxDU1NUcmFuc2l0aW9uPmAgY29tcG9uZW50IHRoYXQgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiBkb2VzIHJlc3VsdCBpblxuICAgKiA+IGFkZGl0aW9uYWwgYC5hcHBlYXItKmAgY2xhc3NlcywgdGhhdCB3YXkgeW91IGNhbiBjaG9vc2UgdG8gc3R5bGUgaXRcbiAgICogPiBkaWZmZXJlbnRseS5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVudGVyIHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBleGl0IHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBSZXF1aXJlZCB1bmxlc3MgYGFkZEVuZExpc3RlbmVyYCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9uczpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9ezUwMH1cbiAgICogYGBgXG4gICAqXG4gICAqIG9yIGluZGl2aWR1YWxseTpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9e3tcbiAgICogIGFwcGVhcjogNTAwLFxuICAgKiAgZW50ZXI6IDMwMCxcbiAgICogIGV4aXQ6IDUwMCxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIC0gYGFwcGVhcmAgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBlbnRlcmBcbiAgICogLSBgZW50ZXJgIGRlZmF1bHRzIHRvIGAwYFxuICAgKiAtIGBleGl0YCBkZWZhdWx0cyB0byBgMGBcbiAgICpcbiAgICogQHR5cGUge251bWJlciB8IHsgZW50ZXI/OiBudW1iZXIsIGV4aXQ/OiBudW1iZXIsIGFwcGVhcj86IG51bWJlciB9fVxuICAgKi9cbiAgdGltZW91dDogZnVuY3Rpb24gdGltZW91dChwcm9wcykge1xuICAgIHZhciBwdCA9IHRpbWVvdXRzU2hhcGU7XG4gICAgaWYgKCFwcm9wcy5hZGRFbmRMaXN0ZW5lcikgcHQgPSBwdC5pc1JlcXVpcmVkO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHB0LmFwcGx5KHZvaWQgMCwgW3Byb3BzXS5jb25jYXQoYXJncykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmdcbiAgICogRE9NIG5vZGUgYW5kIGEgYGRvbmVgIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiB7XG4gICAqICAgLy8gdXNlIHRoZSBjc3MgdHJhbnNpdGlvbmVuZCBldmVudCB0byBtYXJrIHRoZSBmaW5pc2ggb2YgYSB0cmFuc2l0aW9uXG4gICAqICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZG9uZSwgZmFsc2UpO1xuICAgKiB9fVxuICAgKiBgYGBcbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTsgLy8gTmFtZSB0aGUgZnVuY3Rpb24gc28gaXQgaXMgY2xlYXJlciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuXG5mdW5jdGlvbiBub29wKCkge31cblxuVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGluOiBmYWxzZSxcbiAgbW91bnRPbkVudGVyOiBmYWxzZSxcbiAgdW5tb3VudE9uRXhpdDogZmFsc2UsXG4gIGFwcGVhcjogZmFsc2UsXG4gIGVudGVyOiB0cnVlLFxuICBleGl0OiB0cnVlLFxuICBvbkVudGVyOiBub29wLFxuICBvbkVudGVyaW5nOiBub29wLFxuICBvbkVudGVyZWQ6IG5vb3AsXG4gIG9uRXhpdDogbm9vcCxcbiAgb25FeGl0aW5nOiBub29wLFxuICBvbkV4aXRlZDogbm9vcFxufTtcblRyYW5zaXRpb24uVU5NT1VOVEVEID0gVU5NT1VOVEVEO1xuVHJhbnNpdGlvbi5FWElURUQgPSBFWElURUQ7XG5UcmFuc2l0aW9uLkVOVEVSSU5HID0gRU5URVJJTkc7XG5UcmFuc2l0aW9uLkVOVEVSRUQgPSBFTlRFUkVEO1xuVHJhbnNpdGlvbi5FWElUSU5HID0gRVhJVElORztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBhZGRPbmVDbGFzcyBmcm9tICdkb20taGVscGVycy9hZGRDbGFzcyc7XG5pbXBvcnQgcmVtb3ZlT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvcmVtb3ZlQ2xhc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uIGZyb20gJy4vVHJhbnNpdGlvbic7XG5pbXBvcnQgeyBjbGFzc05hbWVzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcblxudmFyIF9hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBhZGRPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuXG52YXIgcmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbiByZW1vdmVDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gcmVtb3ZlT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcbi8qKlxuICogQSB0cmFuc2l0aW9uIGNvbXBvbmVudCBpbnNwaXJlZCBieSB0aGUgZXhjZWxsZW50XG4gKiBbbmctYW5pbWF0ZV0oaHR0cHM6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nQW5pbWF0ZSkgbGlicmFyeSwgeW91IHNob3VsZFxuICogdXNlIGl0IGlmIHlvdSdyZSB1c2luZyBDU1MgdHJhbnNpdGlvbnMgb3IgYW5pbWF0aW9ucy4gSXQncyBidWlsdCB1cG9uIHRoZVxuICogW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uKVxuICogY29tcG9uZW50LCBzbyBpdCBpbmhlcml0cyBhbGwgb2YgaXRzIHByb3BzLlxuICpcbiAqIGBDU1NUcmFuc2l0aW9uYCBhcHBsaWVzIGEgcGFpciBvZiBjbGFzcyBuYW1lcyBkdXJpbmcgdGhlIGBhcHBlYXJgLCBgZW50ZXJgLFxuICogYW5kIGBleGl0YCBzdGF0ZXMgb2YgdGhlIHRyYW5zaXRpb24uIFRoZSBmaXJzdCBjbGFzcyBpcyBhcHBsaWVkIGFuZCB0aGVuIGFcbiAqIHNlY29uZCBgKi1hY3RpdmVgIGNsYXNzIGluIG9yZGVyIHRvIGFjdGl2YXRlIHRoZSBDU1MgdHJhbnNpdGlvbi4gQWZ0ZXIgdGhlXG4gKiB0cmFuc2l0aW9uLCBtYXRjaGluZyBgKi1kb25lYCBjbGFzcyBuYW1lcyBhcmUgYXBwbGllZCB0byBwZXJzaXN0IHRoZVxuICogdHJhbnNpdGlvbiBzdGF0ZS5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPENTU1RyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17MjAwfSBjbGFzc05hbWVzPVwibXktbm9kZVwiPlxuICogICAgICAgICA8ZGl2PlxuICogICAgICAgICAgIHtcIkknbGwgcmVjZWl2ZSBteS1ub2RlLSogY2xhc3Nlc1wifVxuICogICAgICAgICA8L2Rpdj5cbiAqICAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGBpbmAgcHJvcCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2hpbGQgY29tcG9uZW50IHdpbGwgZmlyc3QgcmVjZWl2ZVxuICogdGhlIGNsYXNzIGBleGFtcGxlLWVudGVyYCwgdGhlbiB0aGUgYGV4YW1wbGUtZW50ZXItYWN0aXZlYCB3aWxsIGJlIGFkZGVkIGluXG4gKiB0aGUgbmV4dCB0aWNrLiBgQ1NTVHJhbnNpdGlvbmAgW2ZvcmNlcyBhXG4gKiByZWZsb3ddKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi81MDA3MzAzZTcyOWE3NGJlNjZhMjFjM2UyMjA1ZTQ5MTY4MjE1MjRiL3NyYy9DU1NUcmFuc2l0aW9uLmpzI0wyMDgtTDIxNSlcbiAqIGJldHdlZW4gYmVmb3JlIGFkZGluZyB0aGUgYGV4YW1wbGUtZW50ZXItYWN0aXZlYC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgdHJpY2tcbiAqIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhhbXBsZS1lbnRlcmAgYW5kXG4gKiBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIGV2ZW4gdGhvdWdoIHRoZXkgd2VyZSBhZGRlZCBpbW1lZGlhdGVseSBvbmUgYWZ0ZXJcbiAqIGFub3RoZXIuIE1vc3Qgbm90YWJseSwgdGhpcyBpcyB3aGF0IG1ha2VzIGl0IHBvc3NpYmxlIGZvciB1cyB0byBhbmltYXRlXG4gKiBfYXBwZWFyYW5jZV8uXG4gKlxuICogYGBgY3NzXG4gKiAubXktbm9kZS1lbnRlciB7XG4gKiAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAubXktbm9kZS1lbnRlci1hY3RpdmUge1xuICogICBvcGFjaXR5OiAxO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogLm15LW5vZGUtZXhpdCB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0LWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDA7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgKi1hY3RpdmVgIGNsYXNzZXMgcmVwcmVzZW50IHdoaWNoIHN0eWxlcyB5b3Ugd2FudCB0byBhbmltYXRlICoqdG8qKiwgc28gaXQnc1xuICogaW1wb3J0YW50IHRvIGFkZCBgdHJhbnNpdGlvbmAgZGVjbGFyYXRpb24gb25seSB0byB0aGVtLCBvdGhlcndpc2UgdHJhbnNpdGlvbnNcbiAqIG1pZ2h0IG5vdCBiZWhhdmUgYXMgaW50ZW5kZWQhIFRoaXMgbWlnaHQgbm90IGJlIG9idmlvdXMgd2hlbiB0aGUgdHJhbnNpdGlvbnNcbiAqIGFyZSBzeW1tZXRyaWNhbCwgaS5lLiB3aGVuIGAqLWVudGVyLWFjdGl2ZWAgaXMgdGhlIHNhbWUgYXMgYCotZXhpdGAsIGxpa2UgaW5cbiAqIHRoZSBleGFtcGxlIGFib3ZlIChtaW51cyBgdHJhbnNpdGlvbmApLCBidXQgaXQgYmVjb21lcyBhcHBhcmVudCBpbiBtb3JlXG4gKiBjb21wbGV4IHRyYW5zaXRpb25zLlxuICpcbiAqICoqTm90ZSoqOiBJZiB5b3UncmUgdXNpbmcgdGhlXG4gKiBbYGFwcGVhcmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uI1RyYW5zaXRpb24tcHJvcC1hcHBlYXIpXG4gKiBwcm9wLCBtYWtlIHN1cmUgdG8gZGVmaW5lIHN0eWxlcyBmb3IgYC5hcHBlYXItKmAgY2xhc3NlcyBhcyB3ZWxsLlxuICovXG5cblxudmFyIENTU1RyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoQ1NTVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQ1NTVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5hcHBsaWVkQ2xhc3NlcyA9IHtcbiAgICAgIGFwcGVhcjoge30sXG4gICAgICBlbnRlcjoge30sXG4gICAgICBleGl0OiB7fVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnRbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzFdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmluZyA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MiA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MlsxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdhY3RpdmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXJpbmcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmVkID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQzID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1swXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQzWzFdO1xuXG4gICAgICB2YXIgdHlwZSA9IGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJztcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgdHlwZSwgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXJlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ0ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ0WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdhcHBlYXInKTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZW50ZXInKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NSA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NVswXTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRpbmcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdGVkID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDYgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDZbMF07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2V4aXQnKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnZG9uZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMubm9kZVJlZiA/IFtfdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQsIG1heWJlTm9kZV0gLy8gaGVyZSBgbWF5YmVOb2RlYCBpcyBhY3R1YWxseSBgYXBwZWFyaW5nYFxuICAgICAgOiBbbWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZ107XG4gICAgfTtcblxuICAgIF90aGlzLmdldENsYXNzTmFtZXMgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgdmFyIGNsYXNzTmFtZXMgPSBfdGhpcy5wcm9wcy5jbGFzc05hbWVzO1xuICAgICAgdmFyIGlzU3RyaW5nQ2xhc3NOYW1lcyA9IHR5cGVvZiBjbGFzc05hbWVzID09PSAnc3RyaW5nJztcbiAgICAgIHZhciBwcmVmaXggPSBpc1N0cmluZ0NsYXNzTmFtZXMgJiYgY2xhc3NOYW1lcyA/IGNsYXNzTmFtZXMgKyBcIi1cIiA6ICcnO1xuICAgICAgdmFyIGJhc2VDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBcIlwiICsgcHJlZml4ICsgdHlwZSA6IGNsYXNzTmFtZXNbdHlwZV07XG4gICAgICB2YXIgYWN0aXZlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJBY3RpdmVcIl07XG4gICAgICB2YXIgZG9uZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1kb25lXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkRvbmVcIl07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlQ2xhc3NOYW1lOiBiYXNlQ2xhc3NOYW1lLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWU6IGFjdGl2ZUNsYXNzTmFtZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZTogZG9uZUNsYXNzTmFtZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IENTU1RyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIHR5cGUsIHBoYXNlKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lcyh0eXBlKVtwaGFzZSArIFwiQ2xhc3NOYW1lXCJdO1xuXG4gICAgdmFyIF90aGlzJGdldENsYXNzTmFtZXMgPSB0aGlzLmdldENsYXNzTmFtZXMoJ2VudGVyJyksXG4gICAgICAgIGRvbmVDbGFzc05hbWUgPSBfdGhpcyRnZXRDbGFzc05hbWVzLmRvbmVDbGFzc05hbWU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2FwcGVhcicgJiYgcGhhc2UgPT09ICdkb25lJyAmJiBkb25lQ2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBkb25lQ2xhc3NOYW1lO1xuICAgIH0gLy8gVGhpcyBpcyB0byBmb3JjZSBhIHJlcGFpbnQsXG4gICAgLy8gd2hpY2ggaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHRyYW5zaXRpb24gc3R5bGVzIHdoZW4gYWRkaW5nIGEgY2xhc3MgbmFtZS5cblxuXG4gICAgaWYgKHBoYXNlID09PSAnYWN0aXZlJykge1xuICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgIH1cblxuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV1bcGhhc2VdID0gY2xhc3NOYW1lO1xuXG4gICAgICBfYWRkQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZUNsYXNzZXMgPSBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpIHtcbiAgICB2YXIgX3RoaXMkYXBwbGllZENsYXNzZXMkID0gdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSxcbiAgICAgICAgYmFzZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5iYXNlLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYWN0aXZlLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmRvbmU7XG4gICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSA9IHt9O1xuXG4gICAgaWYgKGJhc2VDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGJhc2VDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGRvbmVDbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF8gPSBfdGhpcyRwcm9wcy5jbGFzc05hbWVzLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVzXCJdKTtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIG9uRW50ZXI6IHRoaXMub25FbnRlcixcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5vbkVudGVyZWQsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLm9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQ6IHRoaXMub25FeGl0LFxuICAgICAgb25FeGl0aW5nOiB0aGlzLm9uRXhpdGluZyxcbiAgICAgIG9uRXhpdGVkOiB0aGlzLm9uRXhpdGVkXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBDU1NUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5DU1NUcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lczogJydcbn07XG5DU1NUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IF9leHRlbmRzKHt9LCBUcmFuc2l0aW9uLnByb3BUeXBlcywge1xuICAvKipcbiAgICogVGhlIGFuaW1hdGlvbiBjbGFzc05hbWVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudCBhcyBpdCBhcHBlYXJzLCBlbnRlcnMsXG4gICAqIGV4aXRzIG9yIGhhcyBmaW5pc2hlZCB0aGUgdHJhbnNpdGlvbi4gQSBzaW5nbGUgbmFtZSBjYW4gYmUgcHJvdmlkZWQsIHdoaWNoXG4gICAqIHdpbGwgYmUgc3VmZml4ZWQgZm9yIGVhY2ggc3RhZ2UsIGUuZy4gYGNsYXNzTmFtZXM9XCJmYWRlXCJgIGFwcGxpZXM6XG4gICAqXG4gICAqIC0gYGZhZGUtYXBwZWFyYCwgYGZhZGUtYXBwZWFyLWFjdGl2ZWAsIGBmYWRlLWFwcGVhci1kb25lYFxuICAgKiAtIGBmYWRlLWVudGVyYCwgYGZhZGUtZW50ZXItYWN0aXZlYCwgYGZhZGUtZW50ZXItZG9uZWBcbiAgICogLSBgZmFkZS1leGl0YCwgYGZhZGUtZXhpdC1hY3RpdmVgLCBgZmFkZS1leGl0LWRvbmVgXG4gICAqXG4gICAqIEEgZmV3IGRldGFpbHMgdG8gbm90ZSBhYm91dCBob3cgdGhlc2UgY2xhc3NlcyBhcmUgYXBwbGllZDpcbiAgICpcbiAgICogMS4gVGhleSBhcmUgX2pvaW5lZF8gd2l0aCB0aGUgb25lcyB0aGF0IGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlIGNoaWxkXG4gICAqICAgIGNvbXBvbmVudCwgc28gaWYgeW91IHdhbnQgdG8gYWRkIHNvbWUgYmFzZSBzdHlsZXMsIHlvdSBjYW4gdXNlXG4gICAqICAgIGBjbGFzc05hbWVgIHdpdGhvdXQgd29ycnlpbmcgdGhhdCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAqXG4gICAqIDIuIElmIHRoZSB0cmFuc2l0aW9uIGNvbXBvbmVudCBtb3VudHMgd2l0aCBgaW49e2ZhbHNlfWAsIG5vIGNsYXNzZXMgYXJlXG4gICAqICAgIGFwcGxpZWQgeWV0LiBZb3UgbWlnaHQgYmUgZXhwZWN0aW5nIGAqLWV4aXQtZG9uZWAsIGJ1dCBpZiB5b3UgdGhpbmtcbiAgICogICAgYWJvdXQgaXQsIGEgY29tcG9uZW50IGNhbm5vdCBmaW5pc2ggZXhpdGluZyBpZiBpdCBoYXNuJ3QgZW50ZXJlZCB5ZXQuXG4gICAqXG4gICAqIDIuIGBmYWRlLWFwcGVhci1kb25lYCBhbmQgYGZhZGUtZW50ZXItZG9uZWAgd2lsbCBfYm90aF8gYmUgYXBwbGllZC4gVGhpc1xuICAgKiAgICBhbGxvd3MgeW91IHRvIGRlZmluZSBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIHdoZW4gYXBwZWFyaW5nIGlzIGRvbmUgYW5kXG4gICAqICAgIHdoZW4gcmVndWxhciBlbnRlcmluZyBpcyBkb25lLCB1c2luZyBzZWxlY3RvcnMgbGlrZVxuICAgKiAgICBgLmZhZGUtZW50ZXItZG9uZTpub3QoLmZhZGUtYXBwZWFyLWRvbmUpYC4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBhcHBseVxuICAgKiAgICBhbiBlcGljIGVudHJhbmNlIGFuaW1hdGlvbiB3aGVuIGVsZW1lbnQgZmlyc3QgYXBwZWFycyBpbiB0aGUgRE9NIHVzaW5nXG4gICAqICAgIFtBbmltYXRlLmNzc10oaHR0cHM6Ly9kYW5lZGVuLmdpdGh1Yi5pby9hbmltYXRlLmNzcy8pLiBPdGhlcndpc2UgeW91IGNhblxuICAgKiAgICBzaW1wbHkgdXNlIGBmYWRlLWVudGVyLWRvbmVgIGZvciBkZWZpbmluZyBib3RoIGNhc2VzLlxuICAgKlxuICAgKiBFYWNoIGluZGl2aWR1YWwgY2xhc3NOYW1lcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW5kZXBlbmRlbnRseSBsaWtlOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7XG4gICAqICBhcHBlYXI6ICdteS1hcHBlYXInLFxuICAgKiAgYXBwZWFyQWN0aXZlOiAnbXktYWN0aXZlLWFwcGVhcicsXG4gICAqICBhcHBlYXJEb25lOiAnbXktZG9uZS1hcHBlYXInLFxuICAgKiAgZW50ZXI6ICdteS1lbnRlcicsXG4gICAqICBlbnRlckFjdGl2ZTogJ215LWFjdGl2ZS1lbnRlcicsXG4gICAqICBlbnRlckRvbmU6ICdteS1kb25lLWVudGVyJyxcbiAgICogIGV4aXQ6ICdteS1leGl0JyxcbiAgICogIGV4aXRBY3RpdmU6ICdteS1hY3RpdmUtZXhpdCcsXG4gICAqICBleGl0RG9uZTogJ215LWRvbmUtZXhpdCcsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBzZXQgdGhlc2UgY2xhc3NlcyB1c2luZyBDU1MgTW9kdWxlczpcbiAgICpcbiAgICogYGBganNcbiAgICogaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuICAgKiBgYGBcbiAgICpcbiAgICogeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGNhbWVsQ2FzZSBpbiB5b3VyIENTUyBmaWxlLCB0aGF0IHdheSBjb3VsZCBzaW1wbHlcbiAgICogc3ByZWFkIHRoZW0gaW5zdGVhZCBvZiBsaXN0aW5nIHRoZW0gb25lIGJ5IG9uZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17eyAuLi5zdHlsZXMgfX1cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB7XG4gICAqICBhcHBlYXI/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJEb25lPzogc3RyaW5nLFxuICAgKiAgZW50ZXI/OiBzdHJpbmcsXG4gICAqICBlbnRlckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGVudGVyRG9uZT86IHN0cmluZyxcbiAgICogIGV4aXQ/OiBzdHJpbmcsXG4gICAqICBleGl0QWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZXhpdERvbmU/OiBzdHJpbmcsXG4gICAqIH19XG4gICAqL1xuICBjbGFzc05hbWVzOiBjbGFzc05hbWVzU2hhcGUsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3IgJ2FwcGVhcicgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlci1hY3RpdmUnIG9yXG4gICAqICdhcHBlYXItYWN0aXZlJyBjbGFzcyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvclxuICAgKiAnYXBwZWFyJyBjbGFzc2VzIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBkb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQtYWN0aXZlJyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQnIGNsYXNzZXNcbiAgICogYXJlICoqcmVtb3ZlZCoqIGFuZCB0aGUgYGV4aXQtZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59KSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgQ1NTVHJhbnNpdGlvbjsiLCJpbXBvcnQgaGFzQ2xhc3MgZnJvbSAnLi9oYXNDbGFzcyc7XG4vKipcbiAqIEFkZHMgYSBDU1MgY2xhc3MgdG8gYSBnaXZlbiBlbGVtZW50LlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtlbHNlIGlmICghaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSkgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUgKyBcIiBcIiArIGNsYXNzTmFtZTtlbHNlIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIChlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnKSArIFwiIFwiICsgY2xhc3NOYW1lKTtcbn0iLCIvKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIGVsZW1lbnQgaGFzIGEgQ1NTIGNsYXNzLlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuICEhY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXCIgXCIgKyAoZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCBlbGVtZW50LmNsYXNzTmFtZSkgKyBcIiBcIikuaW5kZXhPZihcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiKSAhPT0gLTE7XG59IiwiaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEdpdmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYCwgcmV0dXJuIGFuIG9iamVjdCBtYXBwaW5nIGtleSB0byBjaGlsZC5cbiAqXG4gKiBAcGFyYW0geyp9IGNoaWxkcmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYFxuICogQHJldHVybiB7b2JqZWN0fSBNYXBwaW5nIG9mIGtleSB0byBjaGlsZFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZE1hcHBpbmcoY2hpbGRyZW4sIG1hcEZuKSB7XG4gIHZhciBtYXBwZXIgPSBmdW5jdGlvbiBtYXBwZXIoY2hpbGQpIHtcbiAgICByZXR1cm4gbWFwRm4gJiYgaXNWYWxpZEVsZW1lbnQoY2hpbGQpID8gbWFwRm4oY2hpbGQpIDogY2hpbGQ7XG4gIH07XG5cbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmIChjaGlsZHJlbikgQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjO1xuICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIC8vIHJ1biB0aGUgbWFwIGZ1bmN0aW9uIGhlcmUgaW5zdGVhZCBzbyB0aGF0IHRoZSBrZXkgaXMgdGhlIGNvbXB1dGVkIG9uZVxuICAgIHJlc3VsdFtjaGlsZC5rZXldID0gbWFwcGVyKGNoaWxkKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFdoZW4geW91J3JlIGFkZGluZyBvciByZW1vdmluZyBjaGlsZHJlbiBzb21lIG1heSBiZSBhZGRlZCBvciByZW1vdmVkIGluIHRoZVxuICogc2FtZSByZW5kZXIgcGFzcy4gV2Ugd2FudCB0byBzaG93ICpib3RoKiBzaW5jZSB3ZSB3YW50IHRvIHNpbXVsdGFuZW91c2x5XG4gKiBhbmltYXRlIGVsZW1lbnRzIGluIGFuZCBvdXQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBwcmV2aW91cyBzZXQgb2Yga2V5c1xuICogYW5kIGEgbmV3IHNldCBvZiBrZXlzIGFuZCBtZXJnZXMgdGhlbSB3aXRoIGl0cyBiZXN0IGd1ZXNzIG9mIHRoZSBjb3JyZWN0XG4gKiBvcmRlcmluZy4gSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZXhwb3NlIHNvbWUgb2YgdGhlIHV0aWxpdGllcyBpblxuICogUmVhY3RNdWx0aUNoaWxkIHRvIG1ha2UgdGhpcyBlYXN5LCBidXQgZm9yIG5vdyBSZWFjdCBpdHNlbGYgZG9lcyBub3RcbiAqIGRpcmVjdGx5IGhhdmUgdGhpcyBjb25jZXB0IG9mIHRoZSB1bmlvbiBvZiBwcmV2Q2hpbGRyZW4gYW5kIG5leHRDaGlsZHJlblxuICogc28gd2UgaW1wbGVtZW50IGl0IGhlcmUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHByZXYgcHJldiBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0IG5leHQgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcmV0dXJuIHtvYmplY3R9IGEga2V5IHNldCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzIGluIGBwcmV2YCBhbmQgYWxsIGtleXNcbiAqIGluIGBuZXh0YCBpbiBhIHJlYXNvbmFibGUgb3JkZXIuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2LCBuZXh0KSB7XG4gIHByZXYgPSBwcmV2IHx8IHt9O1xuICBuZXh0ID0gbmV4dCB8fCB7fTtcblxuICBmdW5jdGlvbiBnZXRWYWx1ZUZvcktleShrZXkpIHtcbiAgICByZXR1cm4ga2V5IGluIG5leHQgPyBuZXh0W2tleV0gOiBwcmV2W2tleV07XG4gIH0gLy8gRm9yIGVhY2gga2V5IG9mIGBuZXh0YCwgdGhlIGxpc3Qgb2Yga2V5cyB0byBpbnNlcnQgYmVmb3JlIHRoYXQga2V5IGluXG4gIC8vIHRoZSBjb21iaW5lZCBsaXN0XG5cblxuICB2YXIgbmV4dEtleXNQZW5kaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHBlbmRpbmdLZXlzID0gW107XG5cbiAgZm9yICh2YXIgcHJldktleSBpbiBwcmV2KSB7XG4gICAgaWYgKHByZXZLZXkgaW4gbmV4dCkge1xuICAgICAgaWYgKHBlbmRpbmdLZXlzLmxlbmd0aCkge1xuICAgICAgICBuZXh0S2V5c1BlbmRpbmdbcHJldktleV0gPSBwZW5kaW5nS2V5cztcbiAgICAgICAgcGVuZGluZ0tleXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0tleXMucHVzaChwcmV2S2V5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIGNoaWxkTWFwcGluZyA9IHt9O1xuXG4gIGZvciAodmFyIG5leHRLZXkgaW4gbmV4dCkge1xuICAgIGlmIChuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0pIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBlbmRpbmdOZXh0S2V5ID0gbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldO1xuICAgICAgICBjaGlsZE1hcHBpbmdbbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdOZXh0S2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZE1hcHBpbmdbbmV4dEtleV0gPSBnZXRWYWx1ZUZvcktleShuZXh0S2V5KTtcbiAgfSAvLyBGaW5hbGx5LCBhZGQgdGhlIGtleXMgd2hpY2ggZGlkbid0IGFwcGVhciBiZWZvcmUgYW55IGtleSBpbiBgbmV4dGBcblxuXG4gIGZvciAoaSA9IDA7IGkgPCBwZW5kaW5nS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNoaWxkTWFwcGluZ1twZW5kaW5nS2V5c1tpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nS2V5c1tpXSk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wKGNoaWxkLCBwcm9wLCBwcm9wcykge1xuICByZXR1cm4gcHJvcHNbcHJvcF0gIT0gbnVsbCA/IHByb3BzW3Byb3BdIDogY2hpbGQucHJvcHNbcHJvcF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKHByb3BzLCBvbkV4aXRlZCkge1xuICByZXR1cm4gZ2V0Q2hpbGRNYXBwaW5nKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICBpbjogdHJ1ZSxcbiAgICAgIGFwcGVhcjogZ2V0UHJvcChjaGlsZCwgJ2FwcGVhcicsIHByb3BzKSxcbiAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBwcm9wcyksXG4gICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIHByb3BzKVxuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgb25FeGl0ZWQpIHtcbiAgdmFyIG5leHRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcobmV4dFByb3BzLmNoaWxkcmVuKTtcbiAgdmFyIGNoaWxkcmVuID0gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXZDaGlsZE1hcHBpbmcsIG5leHRDaGlsZE1hcHBpbmcpO1xuICBPYmplY3Qua2V5cyhjaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5ba2V5XTtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkKSkgcmV0dXJuO1xuICAgIHZhciBoYXNQcmV2ID0gKGtleSBpbiBwcmV2Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgaGFzTmV4dCA9IChrZXkgaW4gbmV4dENoaWxkTWFwcGluZyk7XG4gICAgdmFyIHByZXZDaGlsZCA9IHByZXZDaGlsZE1hcHBpbmdba2V5XTtcbiAgICB2YXIgaXNMZWF2aW5nID0gaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSAmJiAhcHJldkNoaWxkLnByb3BzLmluOyAvLyBpdGVtIGlzIG5ldyAoZW50ZXJpbmcpXG5cbiAgICBpZiAoaGFzTmV4dCAmJiAoIWhhc1ByZXYgfHwgaXNMZWF2aW5nKSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ2VudGVyaW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiB0cnVlLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFoYXNOZXh0ICYmIGhhc1ByZXYgJiYgIWlzTGVhdmluZykge1xuICAgICAgLy8gaXRlbSBpcyBvbGQgKGV4aXRpbmcpXG4gICAgICAvLyBjb25zb2xlLmxvZygnbGVhdmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgaW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGhhc05leHQgJiYgaGFzUHJldiAmJiBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpKSB7XG4gICAgICAvLyBpdGVtIGhhc24ndCBjaGFuZ2VkIHRyYW5zaXRpb24gc3RhdGVzXG4gICAgICAvLyBjb3B5IG92ZXIgdGhlIGxhc3QgdHJhbnNpdGlvbiBwcm9wcztcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd1bmNoYW5nZWQnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHByZXZDaGlsZC5wcm9wcy5pbixcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGdldENoaWxkTWFwcGluZywgZ2V0SW5pdGlhbENoaWxkTWFwcGluZywgZ2V0TmV4dENoaWxkTWFwcGluZyB9IGZyb20gJy4vdXRpbHMvQ2hpbGRNYXBwaW5nJztcblxudmFyIHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gb2JqW2tdO1xuICB9KTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGNvbXBvbmVudDogJ2RpdicsXG4gIGNoaWxkRmFjdG9yeTogZnVuY3Rpb24gY2hpbGRGYWN0b3J5KGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59O1xuLyoqXG4gKiBUaGUgYDxUcmFuc2l0aW9uR3JvdXA+YCBjb21wb25lbnQgbWFuYWdlcyBhIHNldCBvZiB0cmFuc2l0aW9uIGNvbXBvbmVudHNcbiAqIChgPFRyYW5zaXRpb24+YCBhbmQgYDxDU1NUcmFuc2l0aW9uPmApIGluIGEgbGlzdC4gTGlrZSB3aXRoIHRoZSB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnRzLCBgPFRyYW5zaXRpb25Hcm91cD5gIGlzIGEgc3RhdGUgbWFjaGluZSBmb3IgbWFuYWdpbmcgdGhlIG1vdW50aW5nXG4gKiBhbmQgdW5tb3VudGluZyBvZiBjb21wb25lbnRzIG92ZXIgdGltZS5cbiAqXG4gKiBDb25zaWRlciB0aGUgZXhhbXBsZSBiZWxvdy4gQXMgaXRlbXMgYXJlIHJlbW92ZWQgb3IgYWRkZWQgdG8gdGhlIFRvZG9MaXN0IHRoZVxuICogYGluYCBwcm9wIGlzIHRvZ2dsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YC5cbiAqXG4gKiBOb3RlIHRoYXQgYDxUcmFuc2l0aW9uR3JvdXA+YCAgZG9lcyBub3QgZGVmaW5lIGFueSBhbmltYXRpb24gYmVoYXZpb3IhXG4gKiBFeGFjdGx5IF9ob3dfIGEgbGlzdCBpdGVtIGFuaW1hdGVzIGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudC4gVGhpcyBtZWFucyB5b3UgY2FuIG1peCBhbmQgbWF0Y2ggYW5pbWF0aW9ucyBhY3Jvc3MgZGlmZmVyZW50IGxpc3RcbiAqIGl0ZW1zLlxuICovXG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uR3JvdXAocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcblxuICAgIHZhciBoYW5kbGVFeGl0ZWQgPSBfdGhpcy5oYW5kbGVFeGl0ZWQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7IC8vIEluaXRpYWwgY2hpbGRyZW4gc2hvdWxkIGFsbCBiZSBlbnRlcmluZywgZGVwZW5kZW50IG9uIGFwcGVhclxuXG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgaGFuZGxlRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIFRyYW5zaXRpb25Hcm91cC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBfcmVmKSB7XG4gICAgdmFyIHByZXZDaGlsZE1hcHBpbmcgPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBoYW5kbGVFeGl0ZWQgPSBfcmVmLmhhbmRsZUV4aXRlZCxcbiAgICAgICAgZmlyc3RSZW5kZXIgPSBfcmVmLmZpcnN0UmVuZGVyO1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogZmlyc3RSZW5kZXIgPyBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKG5leHRQcm9wcywgaGFuZGxlRXhpdGVkKSA6IGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBoYW5kbGVFeGl0ZWQpLFxuICAgICAgZmlyc3RSZW5kZXI6IGZhbHNlXG4gICAgfTtcbiAgfSAvLyBub2RlIGlzIGB1bmRlZmluZWRgIHdoZW4gdXNlciBwcm92aWRlZCBgbm9kZVJlZmAgcHJvcFxuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uIGhhbmRsZUV4aXRlZChjaGlsZCwgbm9kZSkge1xuICAgIHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmIChjaGlsZC5rZXkgaW4gY3VycmVudENoaWxkTWFwcGluZykgcmV0dXJuO1xuXG4gICAgaWYgKGNoaWxkLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICBjaGlsZC5wcm9wcy5vbkV4aXRlZChub2RlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb3VudGVkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBfZXh0ZW5kcyh7fSwgc3RhdGUuY2hpbGRyZW4pO1xuXG4gICAgICAgIGRlbGV0ZSBjaGlsZHJlbltjaGlsZC5rZXldO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgQ29tcG9uZW50ID0gX3RoaXMkcHJvcHMuY29tcG9uZW50LFxuICAgICAgICBjaGlsZEZhY3RvcnkgPSBfdGhpcyRwcm9wcy5jaGlsZEZhY3RvcnksXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNvbXBvbmVudFwiLCBcImNoaWxkRmFjdG9yeVwiXSk7XG5cbiAgICB2YXIgY29udGV4dFZhbHVlID0gdGhpcy5zdGF0ZS5jb250ZXh0VmFsdWU7XG4gICAgdmFyIGNoaWxkcmVuID0gdmFsdWVzKHRoaXMuc3RhdGUuY2hpbGRyZW4pLm1hcChjaGlsZEZhY3RvcnkpO1xuICAgIGRlbGV0ZSBwcm9wcy5hcHBlYXI7XG4gICAgZGVsZXRlIHByb3BzLmVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5leGl0O1xuXG4gICAgaWYgKENvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbkdyb3VwO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uR3JvdXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogYDxUcmFuc2l0aW9uR3JvdXA+YCByZW5kZXJzIGEgYDxkaXY+YCBieSBkZWZhdWx0LiBZb3UgY2FuIGNoYW5nZSB0aGlzXG4gICAqIGJlaGF2aW9yIGJ5IHByb3ZpZGluZyBhIGBjb21wb25lbnRgIHByb3AuXG4gICAqIElmIHlvdSB1c2UgUmVhY3QgdjE2KyBhbmQgd291bGQgbGlrZSB0byBhdm9pZCBhIHdyYXBwaW5nIGA8ZGl2PmAgZWxlbWVudFxuICAgKiB5b3UgY2FuIHBhc3MgaW4gYGNvbXBvbmVudD17bnVsbH1gLiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgd3JhcHBpbmcgZGl2XG4gICAqIGJvcmtzIHlvdXIgY3NzIHN0eWxlcy5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogQSBzZXQgb2YgYDxUcmFuc2l0aW9uPmAgY29tcG9uZW50cywgdGhhdCBhcmUgdG9nZ2xlZCBgaW5gIGFuZCBvdXQgYXMgdGhleVxuICAgKiBsZWF2ZS4gdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgd2lsbCBpbmplY3Qgc3BlY2lmaWMgdHJhbnNpdGlvbiBwcm9wcywgc29cbiAgICogcmVtZW1iZXIgdG8gc3ByZWFkIHRoZW0gdGhyb3VnaCBpZiB5b3UgYXJlIHdyYXBwaW5nIHRoZSBgPFRyYW5zaXRpb24+YCBhc1xuICAgKiB3aXRoIG91ciBgPEZhZGU+YCBleGFtcGxlLlxuICAgKlxuICAgKiBXaGlsZSB0aGlzIGNvbXBvbmVudCBpcyBtZWFudCBmb3IgbXVsdGlwbGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYFxuICAgKiBjaGlsZHJlbiwgc29tZXRpbWVzIHlvdSBtYXkgd2FudCB0byBoYXZlIGEgc2luZ2xlIHRyYW5zaXRpb24gY2hpbGQgd2l0aFxuICAgKiBjb250ZW50IHRoYXQgeW91IHdhbnQgdG8gYmUgdHJhbnNpdGlvbmVkIG91dCBhbmQgaW4gd2hlbiB5b3UgY2hhbmdlIGl0XG4gICAqIChlLmcuIHJvdXRlcywgaW1hZ2VzIGV0Yy4pIEluIHRoYXQgY2FzZSB5b3UgY2FuIGNoYW5nZSB0aGUgYGtleWAgcHJvcCBvZlxuICAgKiB0aGUgdHJhbnNpdGlvbiBjaGlsZCBhcyB5b3UgY2hhbmdlIGl0cyBjb250ZW50LCB0aGlzIHdpbGwgY2F1c2VcbiAgICogYFRyYW5zaXRpb25Hcm91cGAgdG8gdHJhbnNpdGlvbiB0aGUgY2hpbGQgb3V0IGFuZCBiYWNrIGluLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGFwcGVhciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGVudGVyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBleGl0IGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBZb3UgbWF5IG5lZWQgdG8gYXBwbHkgcmVhY3RpdmUgdXBkYXRlcyB0byBhIGNoaWxkIGFzIGl0IGlzIGV4aXRpbmcuXG4gICAqIFRoaXMgaXMgZ2VuZXJhbGx5IGRvbmUgYnkgdXNpbmcgYGNsb25lRWxlbWVudGAgaG93ZXZlciBpbiB0aGUgY2FzZSBvZiBhbiBleGl0aW5nXG4gICAqIGNoaWxkIHRoZSBlbGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBhbmQgbm90IGFjY2Vzc2libGUgdG8gdGhlIGNvbnN1bWVyLlxuICAgKlxuICAgKiBJZiB5b3UgZG8gbmVlZCB0byB1cGRhdGUgYSBjaGlsZCBhcyBpdCBsZWF2ZXMgeW91IGNhbiBwcm92aWRlIGEgYGNoaWxkRmFjdG9yeWBcbiAgICogdG8gd3JhcCBldmVyeSBjaGlsZCwgZXZlbiB0aGUgb25lcyB0aGF0IGFyZSBsZWF2aW5nLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihjaGlsZDogUmVhY3RFbGVtZW50KSAtPiBSZWFjdEVsZW1lbnRcbiAgICovXG4gIGNoaWxkRmFjdG9yeTogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTtcblRyYW5zaXRpb25Hcm91cC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uR3JvdXA7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXAgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXAnO1xuLyoqXG4gKiBUaGUgYDxSZXBsYWNlVHJhbnNpdGlvbj5gIGNvbXBvbmVudCBpcyBhIHNwZWNpYWxpemVkIGBUcmFuc2l0aW9uYCBjb21wb25lbnRcbiAqIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiB0d28gY2hpbGRyZW4uXG4gKlxuICogYGBganN4XG4gKiA8UmVwbGFjZVRyYW5zaXRpb24gaW4+XG4gKiAgIDxGYWRlPjxkaXY+SSBhcHBlYXIgZmlyc3Q8L2Rpdj48L0ZhZGU+XG4gKiAgIDxGYWRlPjxkaXY+SSByZXBsYWNlIHRoZSBhYm92ZTwvZGl2PjwvRmFkZT5cbiAqIDwvUmVwbGFjZVRyYW5zaXRpb24+XG4gKiBgYGBcbiAqL1xuXG52YXIgUmVwbGFjZVRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUmVwbGFjZVRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJlcGxhY2VUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBfYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIF9hcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoX2FyZ3MpKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmluZycsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmVkJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW42ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNiksIF9rZXk2ID0gMDsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgICAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGluZycsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjcpLCBfa2V5NyA9IDA7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRlZCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUmVwbGFjZVRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVMaWZlY3ljbGUgPSBmdW5jdGlvbiBoYW5kbGVMaWZlY3ljbGUoaGFuZGxlciwgaWR4LCBvcmlnaW5hbEFyZ3MpIHtcbiAgICB2YXIgX2NoaWxkJHByb3BzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgY2hpbGQgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKVtpZHhdO1xuICAgIGlmIChjaGlsZC5wcm9wc1toYW5kbGVyXSkgKF9jaGlsZCRwcm9wcyA9IGNoaWxkLnByb3BzKVtoYW5kbGVyXS5hcHBseShfY2hpbGQkcHJvcHMsIG9yaWdpbmFsQXJncyk7XG5cbiAgICBpZiAodGhpcy5wcm9wc1toYW5kbGVyXSkge1xuICAgICAgdmFyIG1heWJlTm9kZSA9IGNoaWxkLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgIHRoaXMucHJvcHNbaGFuZGxlcl0obWF5YmVOb2RlKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBpblByb3AgPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJpblwiXSk7XG5cbiAgICB2YXIgX1JlYWN0JENoaWxkcmVuJHRvQXJyID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbiksXG4gICAgICAgIGZpcnN0ID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzBdLFxuICAgICAgICBzZWNvbmQgPSBfUmVhY3QkQ2hpbGRyZW4kdG9BcnJbMV07XG5cbiAgICBkZWxldGUgcHJvcHMub25FbnRlcjtcbiAgICBkZWxldGUgcHJvcHMub25FbnRlcmluZztcbiAgICBkZWxldGUgcHJvcHMub25FbnRlcmVkO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXQ7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGluZztcbiAgICBkZWxldGUgcHJvcHMub25FeGl0ZWQ7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cCwgcHJvcHMsIGluUHJvcCA/IFJlYWN0LmNsb25lRWxlbWVudChmaXJzdCwge1xuICAgICAga2V5OiAnZmlyc3QnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFbnRlcixcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRW50ZXJpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRW50ZXJlZFxuICAgIH0pIDogUmVhY3QuY2xvbmVFbGVtZW50KHNlY29uZCwge1xuICAgICAga2V5OiAnc2Vjb25kJyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRXhpdCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRXhpdGluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIFJlcGxhY2VUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5SZXBsYWNlVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGluOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBjaGlsZHJlbjogZnVuY3Rpb24gY2hpbGRyZW4ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKFJlYWN0LkNoaWxkcmVuLmNvdW50KHByb3BzW3Byb3BOYW1lXSkgIT09IDIpIHJldHVybiBuZXcgRXJyb3IoXCJcXFwiXCIgKyBwcm9wTmFtZSArIFwiXFxcIiBtdXN0IGJlIGV4YWN0bHkgdHdvIHRyYW5zaXRpb24gY29tcG9uZW50cy5cIik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IFJlcGxhY2VUcmFuc2l0aW9uOyIsImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuXG52YXIgX2xlYXZlUmVuZGVycywgX2VudGVyUmVuZGVycztcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBFTlRFUkVELCBFTlRFUklORywgRVhJVElORyB9IGZyb20gJy4vVHJhbnNpdGlvbic7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuXG5mdW5jdGlvbiBhcmVDaGlsZHJlbkRpZmZlcmVudChvbGRDaGlsZHJlbiwgbmV3Q2hpbGRyZW4pIHtcbiAgaWYgKG9sZENoaWxkcmVuID09PSBuZXdDaGlsZHJlbikgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChvbGRDaGlsZHJlbikgJiYgUmVhY3QuaXNWYWxpZEVsZW1lbnQobmV3Q2hpbGRyZW4pICYmIG9sZENoaWxkcmVuLmtleSAhPSBudWxsICYmIG9sZENoaWxkcmVuLmtleSA9PT0gbmV3Q2hpbGRyZW4ua2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEVudW0gb2YgbW9kZXMgZm9yIFN3aXRjaFRyYW5zaXRpb24gY29tcG9uZW50XG4gKiBAZW51bSB7IHN0cmluZyB9XG4gKi9cblxuXG5leHBvcnQgdmFyIG1vZGVzID0ge1xuICBvdXQ6ICdvdXQtaW4nLFxuICBpbjogJ2luLW91dCdcbn07XG5cbnZhciBjYWxsSG9vayA9IGZ1bmN0aW9uIGNhbGxIb29rKGVsZW1lbnQsIG5hbWUsIGNiKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9lbGVtZW50JHByb3BzO1xuXG4gICAgZWxlbWVudC5wcm9wc1tuYW1lXSAmJiAoX2VsZW1lbnQkcHJvcHMgPSBlbGVtZW50LnByb3BzKVtuYW1lXS5hcHBseShfZWxlbWVudCRwcm9wcywgYXJndW1lbnRzKTtcbiAgICBjYigpO1xuICB9O1xufTtcblxudmFyIGxlYXZlUmVuZGVycyA9IChfbGVhdmVSZW5kZXJzID0ge30sIF9sZWF2ZVJlbmRlcnNbbW9kZXMub3V0XSA9IGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZi5jdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmLmNoYW5nZVN0YXRlO1xuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGN1cnJlbnQsIHtcbiAgICBpbjogZmFsc2UsXG4gICAgb25FeGl0ZWQ6IGNhbGxIb29rKGN1cnJlbnQsICdvbkV4aXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSSU5HLCBudWxsKTtcbiAgICB9KVxuICB9KTtcbn0sIF9sZWF2ZVJlbmRlcnNbbW9kZXMuaW5dID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZjIuY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjIuY2hhbmdlU3RhdGUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICByZXR1cm4gW2N1cnJlbnQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlLFxuICAgIG9uRW50ZXJlZDogY2FsbEhvb2soY2hpbGRyZW4sICdvbkVudGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUklORyk7XG4gICAgfSlcbiAgfSldO1xufSwgX2xlYXZlUmVuZGVycyk7XG52YXIgZW50ZXJSZW5kZXJzID0gKF9lbnRlclJlbmRlcnMgPSB7fSwgX2VudGVyUmVuZGVyc1ttb2Rlcy5vdXRdID0gZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYzLmNoaWxkcmVuLFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmMy5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlLFxuICAgIG9uRW50ZXJlZDogY2FsbEhvb2soY2hpbGRyZW4sICdvbkVudGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUkVELCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KVxuICB9KTtcbn0sIF9lbnRlclJlbmRlcnNbbW9kZXMuaW5dID0gZnVuY3Rpb24gKF9yZWY0KSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZjQuY3VycmVudCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjQuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWY0LmNoYW5nZVN0YXRlO1xuICByZXR1cm4gW1JlYWN0LmNsb25lRWxlbWVudChjdXJyZW50LCB7XG4gICAgaW46IGZhbHNlLFxuICAgIG9uRXhpdGVkOiBjYWxsSG9vayhjdXJyZW50LCAnb25FeGl0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUkVELCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KVxuICB9KSwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWVcbiAgfSldO1xufSwgX2VudGVyUmVuZGVycyk7XG4vKipcbiAqIEEgdHJhbnNpdGlvbiBjb21wb25lbnQgaW5zcGlyZWQgYnkgdGhlIFt2dWUgdHJhbnNpdGlvbiBtb2Rlc10oaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvdHJhbnNpdGlvbnMuaHRtbCNUcmFuc2l0aW9uLU1vZGVzKS5cbiAqIFlvdSBjYW4gdXNlIGl0IHdoZW4geW91IHdhbnQgdG8gY29udHJvbCB0aGUgcmVuZGVyIGJldHdlZW4gc3RhdGUgdHJhbnNpdGlvbnMuXG4gKiBCYXNlZCBvbiB0aGUgc2VsZWN0ZWQgbW9kZSBhbmQgdGhlIGNoaWxkJ3Mga2V5IHdoaWNoIGlzIHRoZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gIGNvbXBvbmVudCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCBtYWtlcyBhIGNvbnNpc3RlbnQgdHJhbnNpdGlvbiBiZXR3ZWVuIHRoZW0uXG4gKlxuICogSWYgdGhlIGBvdXQtaW5gIG1vZGUgaXMgc2VsZWN0ZWQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgd2FpdHMgdW50aWwgdGhlIG9sZCBjaGlsZCBsZWF2ZXMgYW5kIHRoZW4gaW5zZXJ0cyBhIG5ldyBjaGlsZC5cbiAqIElmIHRoZSBgaW4tb3V0YCBtb2RlIGlzIHNlbGVjdGVkLCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIGluc2VydHMgYSBuZXcgY2hpbGQgZmlyc3QsIHdhaXRzIGZvciB0aGUgbmV3IGNoaWxkIHRvIGVudGVyIGFuZCB0aGVuIHJlbW92ZXMgdGhlIG9sZCBjaGlsZC5cbiAqXG4gKiAqKk5vdGUqKjogSWYgeW91IHdhbnQgdGhlIGFuaW1hdGlvbiB0byBoYXBwZW4gc2ltdWx0YW5lb3VzbHlcbiAqICh0aGF0IGlzLCB0byBoYXZlIHRoZSBvbGQgY2hpbGQgcmVtb3ZlZCBhbmQgYSBuZXcgY2hpbGQgaW5zZXJ0ZWQgKiphdCB0aGUgc2FtZSB0aW1lKiopLFxuICogeW91IHNob3VsZCB1c2VcbiAqIFtgVHJhbnNpdGlvbkdyb3VwYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLWdyb3VwKVxuICogaW5zdGVhZC5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICByZXR1cm4gKFxuICogICAgPFN3aXRjaFRyYW5zaXRpb24+XG4gKiAgICAgIDxDU1NUcmFuc2l0aW9uXG4gKiAgICAgICAga2V5PXtzdGF0ZSA/IFwiR29vZGJ5ZSwgd29ybGQhXCIgOiBcIkhlbGxvLCB3b3JsZCFcIn1cbiAqICAgICAgICBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgZG9uZSwgZmFsc2UpfVxuICogICAgICAgIGNsYXNzTmFtZXM9J2ZhZGUnXG4gKiAgICAgID5cbiAqICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldFN0YXRlKHN0YXRlID0+ICFzdGF0ZSl9PlxuICogICAgICAgICAge3N0YXRlID8gXCJHb29kYnllLCB3b3JsZCFcIiA6IFwiSGVsbG8sIHdvcmxkIVwifVxuICogICAgICAgIDwvYnV0dG9uPlxuICogICAgICA8L0NTU1RyYW5zaXRpb24+XG4gKiAgICA8L1N3aXRjaFRyYW5zaXRpb24+XG4gKiAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGBgYGNzc1xuICogLmZhZGUtZW50ZXJ7XG4gKiAgICBvcGFjaXR5OiAwO1xuICogfVxuICogLmZhZGUtZXhpdHtcbiAqICAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAuZmFkZS1lbnRlci1hY3RpdmV7XG4gKiAgICBvcGFjaXR5OiAxO1xuICogfVxuICogLmZhZGUtZXhpdC1hY3RpdmV7XG4gKiAgICBvcGFjaXR5OiAwO1xuICogfVxuICogLmZhZGUtZW50ZXItYWN0aXZlLFxuICogLmZhZGUtZXhpdC1hY3RpdmV7XG4gKiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDUwMG1zO1xuICogfVxuICogYGBgXG4gKi9cblxudmFyIFN3aXRjaFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpdGNoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3dpdGNoVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogRU5URVJFRCxcbiAgICAgIGN1cnJlbnQ6IG51bGxcbiAgICB9O1xuICAgIF90aGlzLmFwcGVhcmVkID0gZmFsc2U7XG5cbiAgICBfdGhpcy5jaGFuZ2VTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0dXMsIGN1cnJlbnQpIHtcbiAgICAgIGlmIChjdXJyZW50ID09PSB2b2lkIDApIHtcbiAgICAgICAgY3VycmVudCA9IF90aGlzLnN0YXRlLmN1cnJlbnQ7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgIGN1cnJlbnQ6IGN1cnJlbnRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpdGNoVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5hcHBlYXJlZCA9IHRydWU7XG4gIH07XG5cbiAgU3dpdGNoVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgaWYgKHByb3BzLmNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnQ6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gRU5URVJJTkcgJiYgcHJvcHMubW9kZSA9PT0gbW9kZXMuaW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmN1cnJlbnQgJiYgYXJlQ2hpbGRyZW5EaWZmZXJlbnQoc3RhdGUuY3VycmVudCwgcHJvcHMuY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnQ6IFJlYWN0LmNsb25lRWxlbWVudChwcm9wcy5jaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSlcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgbW9kZSA9IF90aGlzJHByb3BzLm1vZGUsXG4gICAgICAgIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgc3RhdHVzID0gX3RoaXMkc3RhdGUuc3RhdHVzLFxuICAgICAgICBjdXJyZW50ID0gX3RoaXMkc3RhdGUuY3VycmVudDtcbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgIGN1cnJlbnQ6IGN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZTogdGhpcy5jaGFuZ2VTdGF0ZSxcbiAgICAgIHN0YXR1czogc3RhdHVzXG4gICAgfTtcbiAgICB2YXIgY29tcG9uZW50O1xuXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgRU5URVJJTkc6XG4gICAgICAgIGNvbXBvbmVudCA9IGVudGVyUmVuZGVyc1ttb2RlXShkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRVhJVElORzpcbiAgICAgICAgY29tcG9uZW50ID0gbGVhdmVSZW5kZXJzW21vZGVdKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBFTlRFUkVEOlxuICAgICAgICBjb21wb25lbnQgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiAhdGhpcy5hcHBlYXJlZFxuICAgICAgfVxuICAgIH0sIGNvbXBvbmVudCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXRjaFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblN3aXRjaFRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogVHJhbnNpdGlvbiBtb2Rlcy5cbiAgICogYG91dC1pbmA6IEN1cnJlbnQgZWxlbWVudCB0cmFuc2l0aW9ucyBvdXQgZmlyc3QsIHRoZW4gd2hlbiBjb21wbGV0ZSwgdGhlIG5ldyBlbGVtZW50IHRyYW5zaXRpb25zIGluLlxuICAgKiBgaW4tb3V0YDogTmV3IGVsZW1lbnQgdHJhbnNpdGlvbnMgaW4gZmlyc3QsIHRoZW4gd2hlbiBjb21wbGV0ZSwgdGhlIGN1cnJlbnQgZWxlbWVudCB0cmFuc2l0aW9ucyBvdXQuXG4gICAqXG4gICAqIEB0eXBlIHsnb3V0LWluJ3wnaW4tb3V0J31cbiAgICovXG4gIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbbW9kZXMuaW4sIG1vZGVzLm91dF0pLFxuXG4gIC8qKlxuICAgKiBBbnkgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYCBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pXG59IDoge307XG5Td2l0Y2hUcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgbW9kZTogbW9kZXMub3V0XG59O1xuZXhwb3J0IGRlZmF1bHQgU3dpdGNoVHJhbnNpdGlvbjsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBjcmVhdGVTZWxlY3Rpb25Db250ZXh0LFxuICBTZWxlY3Rpb25Db250ZXh0VmFsdWUsXG59IGZyb20gXCIuLi9jb250ZXh0cy9zZWxlY3Rpb24tY29udGV4dFwiO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBTZWxlY3Rpb25Db250ZXh0VmFsdWUgeyB9XG5cbmNvbnN0IFNlbGVjdGlvbkNvbnRleHQgPSBjcmVhdGVTZWxlY3Rpb25Db250ZXh0KCk7XG5cbmNvbnN0IHdpdGhTZWxlY3Rpb25Db250ZXh0ID1cbiAgKENvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZTxQcm9wcz4pID0+IChwcm9wczogYW55KSA9PiAoXG4gICAgPFNlbGVjdGlvbkNvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHNlbGVjdFJvdykgPT4gPENvbXBvbmVudCB7Li4ucHJvcHN9IHsuLi5zZWxlY3RSb3d9IC8+fVxuICAgIDwvU2VsZWN0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFNlbGVjdGlvbkNvbnRleHQ7XG4iLCJleHBvcnQgY29uc3QgUk9XX1NFTEVDVF9TSU5HTEUgPSBcInJhZGlvXCI7XG5leHBvcnQgY29uc3QgUk9XX1NFTEVDVF9NVUxUSVBMRSA9IFwiY2hlY2tib3hcIjtcbmV4cG9ydCBjb25zdCBST1dfU0VMRUNUX0RJU0FCTEVEID0gXCJST1dfU0VMRUNUX0RJU0FCTEVEXCI7XG5leHBvcnQgY29uc3QgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUgPSBcImluZGV0ZXJtaW5hdGVcIjtcbmV4cG9ydCBjb25zdCBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCA9IFwiY2hlY2tlZFwiO1xuZXhwb3J0IGNvbnN0IENIRUNLQk9YX1NUQVRVU19VTkNIRUNLRUQgPSBcInVuY2hlY2tlZFwiO1xuZXhwb3J0IGNvbnN0IEZJTFRFUlNfUE9TSVRJT05fSU5MSU5FID0gXCJpbmxpbmVcIjtcbmV4cG9ydCBjb25zdCBGSUxURVJTX1BPU0lUSU9OX1RPUCA9IFwidG9wXCI7XG5leHBvcnQgY29uc3QgRklMVEVSU19QT1NJVElPTl9CT1RUT00gPSBcImJvdHRvbVwiO1xuXG5leHBvcnQgY29uc3QgU09SVF9BU0MgPSBcImFzY1wiO1xuZXhwb3J0IGNvbnN0IFNPUlRfREVTQyA9IFwiZGVzY1wiO1xuZXhwb3J0IGNvbnN0IElORElDQVRPUl9QT1NJVElPTl9MRUZUID0gXCJsZWZ0XCI7XG5leHBvcnQgY29uc3QgSU5ESUNBVE9SX1BPU0lUSU9OX1JJR0hUID0gXCJyaWdodFwiO1xuZXhwb3J0IGNvbnN0IFRZUEVfU1RSSU5HID0gXCJzdHJpbmdcIjtcbmV4cG9ydCBjb25zdCBUWVBFX05VTUJFUiA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgVFlQRV9CT09MRUFOID0gXCJib29sXCI7XG5leHBvcnQgY29uc3QgVFlQRV9EQVRFID0gXCJkYXRlXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY3JlYXRlRXhwYW5zaW9uQ29udGV4dCwge1xuICBSb3dFeHBhbmRDb250ZXh0VmFsdWUsXG59IGZyb20gXCIuLi9jb250ZXh0cy9yb3ctZXhwYW5kLWNvbnRleHRcIjtcbmltcG9ydCB7IEV4cGFuc2lvbkhlYWRlckNlbGxQcm9wcyB9IGZyb20gXCIuL2V4cGFuZC1oZWFkZXItY2VsbFwiO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBFeHBhbnNpb25IZWFkZXJDZWxsUHJvcHMge1xuICBleHBhbmRSb3c/OiBSb3dFeHBhbmRDb250ZXh0VmFsdWU7XG59XG5cbmNvbnN0IEV4cGFuc2lvbkNvbnRleHQgPSBjcmVhdGVFeHBhbnNpb25Db250ZXh0KCk7XG5cbmNvbnN0IHdpdGhFeHBhbmRDb250ZXh0ID0gKENvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZTxQcm9wcz4pID0+ICgpID0+XG4gIChcbiAgICA8RXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgIHsoZXhwYW5kUm93KSA9PiA8Q29tcG9uZW50IHsgLi4uIGV4cGFuZFJvdyB9IC8+fVxuICAgIDwvRXhwYW5zaW9uQ29udGV4dC5Db25zdW1lcj5cbiAgKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV4cGFuZENvbnRleHQ7XG4iLCJpbXBvcnQgKiBhcyBleHBhbmQgZnJvbSBcIi4vZXhwYW5kXCI7XG5pbXBvcnQgKiBhcyBtdXRhdGUgZnJvbSBcIi4vbXV0YXRlXCI7XG5pbXBvcnQgKiBhcyByb3dzIGZyb20gXCIuL3Jvd3NcIjtcbmltcG9ydCAqIGFzIHNlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCAqIGFzIHNvcnQgZnJvbSBcIi4vc29ydFwiO1xuaW1wb3J0ICogYXMgdHlwZSBmcm9tIFwiLi90eXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4ucm93cyxcbiAgLi4uc2VsZWN0aW9uLFxuICAuLi5leHBhbmQsXG4gIC4uLm11dGF0ZSxcbiAgLi4uc29ydCxcbiAgLi4udHlwZSxcbn07XG4iLCIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUk9XX1NFTEVDVF9ESVNBQkxFRCB9IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IGV2ZW50czogc3RyaW5nW10gPSBbXG4gIFwib25DbGlja1wiLFxuICBcIm9uRG91YmxlQ2xpY2tcIixcbiAgXCJvbk1vdXNlRW50ZXJcIixcbiAgXCJvbk1vdXNlTGVhdmVcIixcbiAgXCJvbkNvbnRleHRNZW51XCIsXG4gIFwib25BdXhDbGlja1wiLFxuXTtcblxuaW50ZXJmYWNlIFJvd0V2ZW50RGVsZWdhdGVyUHJvcHMge1xuICByb3c6IGFueTtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGtleUZpZWxkOiBzdHJpbmc7XG4gIHNlbGVjdGFibGU6IGJvb2xlYW47XG4gIGV4cGFuZGFibGU6IGJvb2xlYW47XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIGV4cGFuZGVkOiBib29sZWFuO1xuICBleHBhbmRSb3c6IGFueTtcbiAgc2VsZWN0Um93OiBhbnk7XG4gIERFTEFZX0ZPUl9EQkNMSUNLOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBSb3dFdmVudERlbGVnYXRlciA9IDxcbiAgVCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueVxuPihFeHRlbmRCYXNlOiBUKSA9PiB7XG4gIHJldHVybiBjbGFzcyBleHRlbmRzIEV4dGVuZEJhc2Uge1xuICAgIGNsaWNrTnVtOiBudW1iZXIgPSAwO1xuXG4gICAgY29uc3RydWN0b3IoLi4ucHJvcHM6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5wcm9wcyk7XG4gICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIgPVxuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRFdmVudEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIgPSB0aGlzLmNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ2xpY2tFdmVudEhhbmRsZXIoXG4gICAgICBjYjogKGU6IEV2ZW50LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICAgICkge1xuICAgICAgcmV0dXJuIChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcm93LFxuICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgIHNlbGVjdGFibGUsXG4gICAgICAgICAgZXhwYW5kYWJsZSxcbiAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICBleHBhbmRlZCxcbiAgICAgICAgICBleHBhbmRSb3csXG4gICAgICAgICAgc2VsZWN0Um93LFxuICAgICAgICAgIERFTEFZX0ZPUl9EQkNMSUNLLFxuICAgICAgICB9OiBSb3dFdmVudERlbGVnYXRlclByb3BzID0gdGhpcy5wcm9wcztcblxuICAgICAgICBjb25zdCBjbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgY2IoZSwgcm93LCByb3dJbmRleCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qga2V5ID0gXy5nZXQocm93LCBrZXlGaWVsZCk7XG5cbiAgICAgICAgICBpZiAoZXhwYW5kUm93ICYmIGV4cGFuZGFibGUgJiYgIWV4cGFuZFJvdy5leHBhbmRCeUNvbHVtbk9ubHkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHNlbGVjdFJvdy5tb2RlICE9PSBST1dfU0VMRUNUX0RJU0FCTEVEICYmXG4gICAgICAgICAgICAgICAgc2VsZWN0Um93LmNsaWNrVG9FeHBhbmQpIHx8XG4gICAgICAgICAgICAgIHNlbGVjdFJvdy5tb2RlID09PSBST1dfU0VMRUNUX0RJU0FCTEVEXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZXhwYW5kUm93Lm9uUm93RXhwYW5kKGtleSwgIWV4cGFuZGVkLCByb3dJbmRleCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlbGVjdFJvdy5jbGlja1RvU2VsZWN0ICYmIHNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHNlbGVjdFJvdy5vblJvd1NlbGVjdChrZXksICFzZWxlY3RlZCwgcm93SW5kZXgsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoREVMQVlfRk9SX0RCQ0xJQ0spIHtcbiAgICAgICAgICB0aGlzLmNsaWNrTnVtICs9IDE7XG4gICAgICAgICAgXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbGlja051bSA9PT0gMSkge1xuICAgICAgICAgICAgICBjbGlja0ZuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsaWNrTnVtID0gMDtcbiAgICAgICAgICB9LCBERUxBWV9GT1JfREJDTElDSykoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGlja0ZuKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY3JlYXRlRGVmYXVsdEV2ZW50SGFuZGxlcihcbiAgICAgIGNiOiAoZTogRXZlbnQsIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICByZXR1cm4gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcm93LCByb3dJbmRleCB9OiBSb3dFdmVudERlbGVnYXRlclByb3BzID0gdGhpcy5wcm9wcztcbiAgICAgICAgY2IoZSwgcm93LCByb3dJbmRleCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGRlbGVnYXRlKGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgIGNvbnN0IG5ld0F0dHJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0geyAuLi5hdHRycyB9O1xuICAgICAgT2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgaWYgKF8uaW5jbHVkZXMoZXZlbnRzLCBhdHRyKSkge1xuICAgICAgICAgIG5ld0F0dHJzW2F0dHJdID0gdGhpcy5jcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyKGF0dHJzW2F0dHJdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3QXR0cnM7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCxcbiAgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUsXG4gIFJPV19TRUxFQ1RfTVVMVElQTEUsXG4gIFJPV19TRUxFQ1RfU0lOR0xFLFxufSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0cy9ib290c3RyYXBcIjtcblxuaW50ZXJmYWNlIENoZWNrQm94UHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoZWNrZWQ6IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBDaGVja0JveDogUmVhY3QuRkM8Q2hlY2tCb3hQcm9wcz4gPSAoe1xuICBjbGFzc05hbWUsXG4gIGNoZWNrZWQsXG4gIGluZGV0ZXJtaW5hdGUsXG59KSA9PiAoXG4gIDxpbnB1dFxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICByZWY9eyhpbnB1dCkgPT4ge1xuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIGlucHV0LmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgfVxuICAgIH19XG4gICAgb25DaGFuZ2U9eygpID0+IHsgfX1cbiAgLz5cbik7XG5cbmludGVyZmFjZSBTZWxlY3Rpb25IZWFkZXJDZWxsUHJvcHMge1xuICBtb2RlPzogc3RyaW5nO1xuICBjaGVja2VkU3RhdHVzPzogc3RyaW5nO1xuICBvbkFsbFJvd3NTZWxlY3Q/OiAoXG4gICAgZTogUmVhY3QuTW91c2VFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sXG4gICAgaXNVblNlbGVjdDogYm9vbGVhblxuICApID0+IHZvaWQ7XG4gIGhpZGVTZWxlY3RBbGw/OiBib29sZWFuO1xuICBzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcj86IChhcmdzOiB7XG4gICAgbW9kZT86IHN0cmluZztcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICAgIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG4gIH0pID0+IFJlYWN0Tm9kZTtcbiAgaGVhZGVyQ29sdW1uU3R5bGU/OlxuICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgfCAoKGNoZWNrZWRTdGF0dXM6IHN0cmluZykgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGlvbkhlYWRlckNlbGwgZXh0ZW5kcyBDb21wb25lbnQ8U2VsZWN0aW9uSGVhZGVyQ2VsbFByb3BzPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTZWxlY3Rpb25IZWFkZXJDZWxsUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVDaGVja0JveENsaWNrID0gdGhpcy5oYW5kbGVDaGVja0JveENsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBTZWxlY3Rpb25IZWFkZXJDZWxsUHJvcHMpIHtcbiAgICBjb25zdCB7IG1vZGUsIGNoZWNrZWRTdGF0dXMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAobW9kZSA9PT0gUk9XX1NFTEVDVF9TSU5HTEUpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBuZXh0UHJvcHMuY2hlY2tlZFN0YXR1cyAhPT0gY2hlY2tlZFN0YXR1cztcbiAgfVxuXG4gIGhhbmRsZUNoZWNrQm94Q2xpY2soZTogUmVhY3QuTW91c2VFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4pIHtcbiAgICBjb25zdCB7IG9uQWxsUm93c1NlbGVjdCwgY2hlY2tlZFN0YXR1cyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBpc1VuU2VsZWN0ID1cbiAgICAgIGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19DSEVDS0VEIHx8XG4gICAgICBjaGVja2VkU3RhdHVzID09PSBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURTtcblxuICAgIG9uQWxsUm93c1NlbGVjdCEoZSwgaXNVblNlbGVjdCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbW9kZSxcbiAgICAgIGNoZWNrZWRTdGF0dXMsXG4gICAgICBzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcixcbiAgICAgIGhpZGVTZWxlY3RBbGwsXG4gICAgICBoZWFkZXJDb2x1bW5TdHlsZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoaGlkZVNlbGVjdEFsbCkge1xuICAgICAgcmV0dXJuIDx0aCBkYXRhLXJvdy1zZWxlY3Rpb24gLz47XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tlZCA9IGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19DSEVDS0VEO1xuXG4gICAgY29uc3QgaW5kZXRlcm1pbmF0ZSA9IGNoZWNrZWRTdGF0dXMgPT09IENIRUNLQk9YX1NUQVRVU19JTkRFVEVSTUlOQVRFO1xuXG4gICAgY29uc3QgYXR0cnM6IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PiA9IHt9O1xuICAgIGxldCBjb250ZW50OiBSZWFjdE5vZGUgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyIHx8IG1vZGUgPT09IFJPV19TRUxFQ1RfTVVMVElQTEUpIHtcbiAgICAgIGF0dHJzLm9uQ2xpY2sgPSB0aGlzLmhhbmRsZUNoZWNrQm94Q2xpY2s7XG4gICAgfVxuXG4gICAgYXR0cnMuc3R5bGUgPSAoXy5pc0Z1bmN0aW9uKGhlYWRlckNvbHVtblN0eWxlKVxuICAgICAgPyBoZWFkZXJDb2x1bW5TdHlsZShjaGVja2VkU3RhdHVzISlcbiAgICAgIDogaGVhZGVyQ29sdW1uU3R5bGUpIGFzIGFueTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Qm9vdHN0cmFwQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IGJvb3RzdHJhcDQgfSkgPT4ge1xuICAgICAgICAgIGlmIChzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcikge1xuICAgICAgICAgICAgY29udGVudCA9IHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gUk9XX1NFTEVDVF9NVUxUSVBMRSkge1xuICAgICAgICAgICAgY29udGVudCA9IChcbiAgICAgICAgICAgICAgPENoZWNrQm94XG4gICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Jvb3RzdHJhcDQgPyBcInNlbGVjdGlvbi1pbnB1dC00XCIgOiBcIlwifVxuICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9e2luZGV0ZXJtaW5hdGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInNlbGVjdGlvbi1jZWxsLWhlYWRlclwiIGRhdGEtcm93LXNlbGVjdGlvbiB7Li4uYXR0cnMgYXMgYW55fT5cbiAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICk7XG4gICAgICAgIH19XG4gICAgICA8L0Jvb3RzdHJhcENvbnRleHQuQ29uc3VtZXI+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBDb2x1bW5EZXNjcmlwdGlvbiwgU2VsZWN0Um93UHJvcHMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IEZvb3RlckNlbGwgZnJvbSBcIi4vZm9vdGVyLWNlbGxcIjtcbmltcG9ydCBSb3dUZW1wbGF0ZSwgeyBFeHBhbmRSb3cgfSBmcm9tIFwiLi9yb3cvcm93LXRlbXBsYXRlXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgRm9vdGVyUHJvcHMge1xuICBkYXRhPzogYW55W107XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgc2VsZWN0Um93PzogU2VsZWN0Um93UHJvcHM8YW55PiB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kUm93PzogRXhwYW5kUm93O1xufVxuXG5jb25zdCBGb290ZXI6IFJlYWN0LkZDPEZvb3RlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGRhdGEgPSBbXSwgY2xhc3NOYW1lLCBjb2x1bW5zID0gW10sIHNlbGVjdFJvdywgZXhwYW5kUm93IH0gPSBwcm9wcztcblxuICBmdW5jdGlvbiByZW5kZXJDb250ZW50KCk6IFJlYWN0Tm9kZSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGlmIChjb2x1bW4uZm9vdGVyID09PSB1bmRlZmluZWQgfHwgY29sdW1uLmZvb3RlciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBfLnBsdWNrKGRhdGEsIGNvbHVtbi5kYXRhRmllbGQpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Rm9vdGVyQ2VsbFxuICAgICAgICAgIGluZGV4PXtpfVxuICAgICAgICAgIGtleT17Y29sdW1uLmRhdGFGaWVsZH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICBjb2x1bW5EYXRhPXtjb2x1bW5EYXRhfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPHRmb290PlxuICAgICAgPFJvd1RlbXBsYXRlXG4gICAgICAgIHJlbmRlckNvbnRlbnQ9e3JlbmRlckNvbnRlbnR9XG4gICAgICAgIHNlbGVjdFJvdz17c2VsZWN0Um93fVxuICAgICAgICBleHBhbmRSb3c9e2V4cGFuZFJvd31cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIGNlbGxFbD1cInRoXCJcbiAgICAgIC8+XG4gICAgPC90Zm9vdD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvb3RlcjtcbiIsImltcG9ydCBSZWFjdCwgeyBDU1NQcm9wZXJ0aWVzLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgQm9vdHN0cmFwVGFibGUgZnJvbSBcIi4vc3JjL2Jvb3RzdHJhcC10YWJsZVwiO1xuaW1wb3J0IHdpdGhDb250ZXh0IGZyb20gXCIuL3NyYy9jb250ZXh0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoQ29udGV4dChCb290c3RyYXBUYWJsZSk7XG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZyBcbi8vIFByb2plY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9qZWZmLWstemhvdS9yZWFjdC1ib290c3RyYXAtdGFibGUtbmcjcmVhZG1lXG4vLyBEZWZpbml0aW9ucyBieTogV2xhZCBNZWl4bmVyIDxodHRwczovL2dpdGh1Yi5jb20vZ29zdGlja3M+XG4vLyAgICAgICAgICAgICAgICBWYWxlbnRpbiBTbG9ib3phbmluIDxodHRwczovL2dpdGh1Yi5jb20vaWduZWZvbGlvPlxuLy8gICAgICAgICAgICAgICAgSmFrdWIgUsOzxbxiaWNraSA8aHR0cHM6Ly9naXRodWIuY29tL2pyb3piaWNraT5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZFxuLy8gVHlwZVNjcmlwdCBWZXJzaW9uOiAzLjBcblxuLy8gZG9jdW1lbnRhdGlvbiB0YWtlbiBmcm9tIGh0dHBzOi8vamVmZi1rLXpob3UuZ2l0aHViLmlvL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9kb2NzL3RhYmxlLXByb3BzLmh0bWxcblxuZXhwb3J0ICogZnJvbSBcIi4vc3JjL2NvbnN0XCI7XG5pbXBvcnQge1xuICBST1dfU0VMRUNUX1NJTkdMRSxcbiAgUk9XX1NFTEVDVF9NVUxUSVBMRSxcbiAgUk9XX1NFTEVDVF9ESVNBQkxFRCxcbiAgQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUsXG4gIENIRUNLQk9YX1NUQVRVU19DSEVDS0VELFxuICBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VELFxuICBGSUxURVJTX1BPU0lUSU9OX0lOTElORSxcbiAgRklMVEVSU19QT1NJVElPTl9UT1AsXG4gIEZJTFRFUlNfUE9TSVRJT05fQk9UVE9NLFxufSBmcm9tIFwiLi9zcmMvY29uc3RcIjtcblxuZXhwb3J0IHR5cGUgUm93U2VsZWN0aW9uVHlwZSA9XG4gIHwgdHlwZW9mIFJPV19TRUxFQ1RfU0lOR0xFXG4gIHwgdHlwZW9mIFJPV19TRUxFQ1RfTVVMVElQTEVcbiAgfCB0eXBlb2YgUk9XX1NFTEVDVF9ESVNBQkxFRDtcbmV4cG9ydCB0eXBlIFRhYmxlQ2hlY2tib3hTdGF0dXMgPVxuICB8IHR5cGVvZiBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURVxuICB8IHR5cGVvZiBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRFxuICB8IHR5cGVvZiBDSEVDS0JPWF9TVEFUVVNfVU5DSEVDS0VEO1xuZXhwb3J0IHR5cGUgRmlsdGVyUG9zaXRpb24gPVxuICB8IHR5cGVvZiBGSUxURVJTX1BPU0lUSU9OX0lOTElORVxuICB8IHR5cGVvZiBGSUxURVJTX1BPU0lUSU9OX1RPUFxuICB8IHR5cGVvZiBGSUxURVJTX1BPU0lUSU9OX0JPVFRPTTtcblxuLyoqXG4gKiBUYWJsZSBjaGFuZ2UgZXZlbnQgdHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgVGFibGVDaGFuZ2VUeXBlID0gXCJmaWx0ZXJcIiB8IFwicGFnaW5hdGlvblwiIHwgXCJzb3J0XCIgfCBcImNlbGxFZGl0XCI7XG5cbi8qKlxuICogVXNlZCB0byBzcGVjaWZ5IHRoZSB0ZXh0IGFsaWdubWVudCBmb3IgYSBjb2x1bW4uXG4gKi9cbmV4cG9ydCB0eXBlIENlbGxBbGlnbm1lbnQgPVxuICB8IChcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCIgfCBcInN0YXJ0XCIgfCBcImVuZFwiKVxuICB8IHN0cmluZztcblxuLyoqXG4gKiBGaWx0ZXIgY29tcGFyYXRvcnMgdXNlZCBmb3IgdGFibGUgZmlsdGVyc1xuICovXG5kZWNsYXJlIGVudW0gRmlsdGVyQ29tcGFyYXRvciB7XG4gIExJS0UgPSBcIkxJS0VcIixcbiAgRVEgPSBcIj1cIixcbiAgTkUgPSBcIiE9XCIsXG4gIEdUID0gXCI+XCIsXG4gIEdFID0gXCI+PVwiLFxuICBMVCA9IFwiPFwiLFxuICBMRSA9IFwiPD1cIixcbn1cblxuLyoqXG4gKiBTb3J0IE9yZGVyIHZhbHVlcy4gJ2FzYycgPSBhc2NlbmRpbmcsICdkZXNjJyA9IGRlc2NlbmRpbmcuXG4gKi9cbmV4cG9ydCB0eXBlIFNvcnRPcmRlciA9IFwiYXNjXCIgfCBcImRlc2NcIjtcblxuZXhwb3J0IHR5cGUgQ29sdW1uU29ydFZhbHVlPFIsIEMgPSBhbnk+ID0gKFxuICBjZWxsOiBDLFxuICByb3c6IFJcbikgPT4gYm9vbGVhbiB8IHN0cmluZyB8IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgQ29sdW1uU29ydEZ1bmM8VCwgRSBleHRlbmRzIGtleW9mIFQgPSBhbnk+ID0gKFxuICBhOiBUW0VdLFxuICBiOiBUW0VdLFxuICBvcmRlcjogXCJhc2NcIiB8IFwiZGVzY1wiLFxuICBkYXRhRmllbGQ6IGFueSxcbiAgcm93QTogVCxcbiAgcm93QjogVFxuKSA9PiBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENvbHVtblNvcnRDYXJldDxUIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBFID0gYW55PiA9IChcbiAgb3JkZXI6IFwiYXNjXCIgfCBcImRlc2NcIiB8IHVuZGVmaW5lZCxcbiAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPlxuKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBzdHJpbmcgfCBudWxsO1xuXG5leHBvcnQgdHlwZSBIZWFkZXJTb3J0aW5nQ2xhc3NlczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBFID0gYW55PiA9XG4gIHwgc3RyaW5nXG4gIHwgKChcbiAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LFxuICAgIHNvcnRPcmRlcjogXCJhc2NcIiB8IFwiZGVzY1wiLFxuICAgIGlzTGFzdFNvcnRpbmc6IGJvb2xlYW4sXG4gICAgY29sSW5kZXg6IG51bWJlclxuICApID0+IHN0cmluZyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDaGFuZ2VTdGF0ZTxUPiB7XG4gIHBhZ2U6IG51bWJlcjtcbiAgc2l6ZVBlclBhZ2U6IG51bWJlcjtcbiAgc29ydEZpZWxkOiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogXCJhc2NcIiB8IFwiZGVzY1wiO1xuICBmaWx0ZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBmaWx0ZXJWYWw6IGFueTsgZmlsdGVyVHlwZTogXCJURVhUXCI7IGNvbXBhcmF0b3I6IGFueSB9O1xuICB9O1xuICBkYXRhOiBUW107XG4gIGNlbGxFZGl0OiB7XG4gICAgcm93SWQ6IHN0cmluZztcbiAgICBkYXRhRmllbGQ6IGFueTtcbiAgICBuZXdWYWx1ZTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBIZWFkZXJGb3JtYXR0ZXI8VCBleHRlbmRzIG9iamVjdCA9IGFueT4gPSAoXG4gIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VD4sXG4gIGNvbEluZGV4OiBudW1iZXIsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBzb3J0RWxlbWVudDogUmVhY3QuUmVhY3RFbGVtZW50O1xuICAgIGZpbHRlckVsZW1lbnQ6IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgfVxuKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG5cbmV4cG9ydCB0eXBlIENvbHVtbkZvcm1hdHRlcjxSLCBFID0gYW55LCBDID0gYW55PiA9IChcbiAgY2VsbDogQyxcbiAgcm93OiBSLFxuICByb3dJbmRleDogbnVtYmVyLFxuICBmb3JtYXRFeHRyYURhdGE/OiBFXG4pID0+IFJlYWN0LlJlYWN0Tm9kZTtcblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgYXN5bmM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB2YWxpZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uRGVzY3JpcHRpb248VCBleHRlbmRzIG9iamVjdCA9IGFueSwgRSA9IGFueT4ge1xuICAvKipcbiAgICogSWYgc2V0IHRoZSBjb2x1bW4gd2lsbCBub3QgdXNlIGNlbGwgdmFsdWVzXG4gICAqL1xuICBpc0R1bW15RmllbGQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBkYXRhRmllbGQ6IGFueTtcbiAgZm9ybWF0dGVyPzogQ29sdW1uRm9ybWF0dGVyPFQsIEU+IHwgdW5kZWZpbmVkO1xuICBoaWRkZW4/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQ29sdW1uIGhlYWRlciBmaWVsZFxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xuICBjbGFzc2VzPzpcbiAgfCBzdHJpbmdcbiAgfCAoKGNlbGw6IFRba2V5b2YgVF0sIHJvdzogVCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyQ2xhc3Nlcz86XG4gIHwgc3RyaW5nXG4gIHwgKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LCBjb2xJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpXG4gIHwgdW5kZWZpbmVkO1xuICBzdHlsZT86XG4gIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICB8ICgoXG4gICAgY2VsbDogVFtrZXlvZiBUXSxcbiAgICByb3c6IFQsXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyXG4gICkgPT4gUmVhY3QuQ1NTUHJvcGVydGllcylcbiAgfCB1bmRlZmluZWQ7XG4gIHNvcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzb3J0VmFsdWU/OiBDb2x1bW5Tb3J0VmFsdWU8VD4gfCB1bmRlZmluZWQ7XG4gIHNvcnRGdW5jPzogQ29sdW1uU29ydEZ1bmM8VD4gfCB1bmRlZmluZWQ7XG4gIHNvcnRDYXJldD86IENvbHVtblNvcnRDYXJldDxULCBFPiB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGFsaWduPzpcbiAgfCBDZWxsQWxpZ25tZW50XG4gIHwgKChcbiAgICBjZWxsOiBUW2tleW9mIFRdLFxuICAgIHJvdzogVCxcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbEluZGV4OiBudW1iZXJcbiAgKSA9PiBDZWxsQWxpZ25tZW50KVxuICB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyU3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgKCgpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpIHwgdW5kZWZpbmVkO1xuXG4gIHRvb2x0aXBEYXRhRmllbGQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGVkaXRhYmxlPzpcbiAgfCBib29sZWFuXG4gIHwgKChjZWxsOiBhbnksIHJvdzogVCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbilcbiAgfCB1bmRlZmluZWQ7XG4gIGVkaXRvcj86XG4gIHwge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBvcHRpb25zPzogQXJyYXk8eyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+IHwgdW5kZWZpbmVkO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXI/OiBib29sZWFuIHwgVGFibGVDb2x1bW5GaWx0ZXJQcm9wcyB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyVmFsdWU/OiAoKGNlbGw6IFRba2V5b2YgVF0sIHJvdzogVCkgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyUmVuZGVyZXI/OiAoKGZpbHRlckhhbmRsZXI6IEZ1bmN0aW9uLCBjb2x1bW46IGFueSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50KSB8IHVuZGVmaW5lZDtcbiAgaGVhZGVyQWxpZ24/OiBDZWxsQWxpZ25tZW50IHwgdW5kZWZpbmVkO1xuICBoZWFkZXJGb3JtYXR0ZXI/OiBIZWFkZXJGb3JtYXR0ZXI8VD4gfCB1bmRlZmluZWQ7XG4gIGhlYWRlclNvcnRpbmdDbGFzc2VzPzogSGVhZGVyU29ydGluZ0NsYXNzZXM8VCwgRT4gfCB1bmRlZmluZWQ7XG4gIGZvcm1hdEV4dHJhRGF0YT86XG4gIHwgKHtcbiAgICB0b29sdGlwRm9ybWF0dGVyPzogKChyb3c6IFQpID0+IFJlYWN0LlJlYWN0RWxlbWVudCkgfCB1bmRlZmluZWQ7XG4gIH0gJiBFKVxuICB8IHVuZGVmaW5lZDtcbiAgd2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGZvb3Rlcj86XG4gIHwgYm9vbGVhblxuICB8IG51bWJlclxuICB8IHN0cmluZ1xuICB8ICgoXG4gICAgY29sdW1uRGF0YTogYW55LFxuICAgIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sXG4gICAgY29sdW1uSW5kZXg6IG51bWJlclxuICApID0+IHN0cmluZylcbiAgfCB1bmRlZmluZWQ7XG4gIC8vIFRPRE9cbiAgZm9vdGVyRm9ybWF0dGVyPzpcbiAgfCAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sIGNvbHVtbkluZGV4OiBudW1iZXIsIHRleHQ6IGFueSkgPT4gdm9pZClcbiAgfCB1bmRlZmluZWQ7XG4gIGZvb3RlckNsYXNzZXM/OlxuICB8IHN0cmluZ1xuICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPiwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKVxuICB8IHVuZGVmaW5lZDtcbiAgZm9vdGVyU3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBmb290ZXJUaXRsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGZvb3RlckV2ZW50cz86XG4gIHwge1xuICAgIG9uQ2xpY2s6IChcbiAgICAgIGU6IGFueSxcbiAgICAgIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sXG4gICAgICBjb2x1bW5JbmRleDogbnVtYmVyXG4gICAgKSA9PiB2b2lkO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBmb290ZXJBbGlnbj86XG4gIHwgQ2VsbEFsaWdubWVudFxuICB8ICgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxULCBFPiwgY29sSW5kZXg6IG51bWJlcikgPT4gQ2VsbEFsaWdubWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIGZvb3RlckF0dHJzPzpcbiAgfCBvYmplY3RcbiAgfCAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VCwgRT4sIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IG9iamVjdClcbiAgfCB1bmRlZmluZWQ7XG4gIHZhbGlkYXRvcj86XG4gIHwgKChcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIHJvdzogVCxcbiAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQsIEU+LFxuICAgIGRvbmU6IChyZXN1bHQ/OiBWYWxpZGF0aW9uUmVzdWx0KSA9PiBhbnlcbiAgKSA9PiBib29sZWFuIHwgVmFsaWRhdGlvblJlc3VsdClcbiAgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIENTViBDb2x1bW4gb3B0aW9ucyBvbmx5IHVzZWQgd2l0aCB0aGUgdG9vbGtpdCBwcm92aWRlclxuICAgKi9cblxuICAvKipcbiAgICogZXhwb3J0IGNzdiBjZWxsIHR5cGUgY2FuIGJlIE51bWJlciBvciBTdHJpbmdcbiAgICovXG4gIGNzdlR5cGU/OiBvYmplY3QgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBDdXN0b20gY3N2IGNlbGwgZm9ybWF0dGVyIHVzZWQgd2hlbiBleHBvcnRpbmcgY3N2XG4gICAqL1xuICBjc3ZGb3JtYXR0ZXI/OiBDb2x1bW5Gb3JtYXR0ZXI8VCwgRT4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBjc3ZUZXh0IGRlZmF1bHRzIHRvIGNvbHVtbi50ZXh0XG4gICAqL1xuICBjc3ZUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVG9nZ2xlIGNvbHVtbiBkaXNwbGF5IGluIENTViBleHBvcnRcbiAgICovXG4gIGNzdkV4cG9ydD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBDb2x1bW4gdG9nZ2xlIGxpc3QgdXNlZCBieSBUb29sa2l0IHByb3ZpZGVyXG4gICAqL1xuICB0b2dnbGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgcm93IGV2ZW50IGhhbmRsZXJcbiAqL1xuZXhwb3J0IHR5cGUgUm93RXZlbnRIYW5kbGVyPFQ+ID0gKFxuICBlOiBTeW50aGV0aWNFdmVudCxcbiAgcm93OiBULFxuICByb3dJbmRleDogbnVtYmVyXG4pID0+IHZvaWQ7XG5cbi8qKlxuICogUm93IGxldmVsIGV2ZW50IGhhbmRsZXJzXG4gKi9cbmV4cG9ydCB0eXBlIFJvd0V2ZW50SGFuZGxlclByb3BzPFQgPSBhbnk+ID0gUGFydGlhbDx7XG4gIG9uQ2xpY2s6IFJvd0V2ZW50SGFuZGxlcjxUPjtcbiAgb25Eb3VibGVDbGljazogUm93RXZlbnRIYW5kbGVyPFQ+O1xuICBvbk1vdXNlRW50ZXI6IFJvd0V2ZW50SGFuZGxlcjxUPjtcbiAgb25Nb3VzZUxlYXZlOiBSb3dFdmVudEhhbmRsZXI8VD47XG4gIG9uQ29udGV4dE1lbnU6IFJvd0V2ZW50SGFuZGxlcjxUPjtcbn0+O1xuXG4vKipcbiAqIFRhYmxlIGNoYW5nZSBjYWxsYmFjayBtZXRob2RcbiAqL1xuZXhwb3J0IHR5cGUgVGFibGVDaGFuZ2VIYW5kbGVyPFQ+ID0gKFxuICB0eXBlOiBUYWJsZUNoYW5nZVR5cGUsXG4gIG5ld1N0YXRlOiBUYWJsZUNoYW5nZVN0YXRlPFQ+XG4pID0+IHZvaWQ7XG5cbi8qKlxuICogQWxsIHBvc3NpYmxlIHBhZ2luYXRpb24gb3B0aW9ucyBoYW5kbGVkIGJ5IHRoZSBwYWdpbmF0aW9uIHBsdWdpblxuICpcbiAqIENvbnN1bHQgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vamVmZi1rLXpob3UuZ2l0aHViLmlvL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9kb2NzL3BhZ2luYXRpb24tcHJvcHMuaHRtbClcbiAqL1xuZXhwb3J0IHR5cGUgUGFnaW5hdGlvbk9wdGlvbnMgPSBQYXJ0aWFsPHtcbiAgY3VzdG9tOiBib29sZWFuO1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgY3VycmVudCBwYWdlLiBJdCdzIG5lY2Vzc2FyeSB3aGVuIHJlbW90ZSBpcyBlbmFibGVkXG4gICAqL1xuICBwYWdlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBzaXplIHBlciBwYWdlLiBJdCdzIG5lY2Vzc2FyeSB3aGVuIHJlbW90ZSBpcyBlbmFibGVkXG4gICAqL1xuICBzaXplUGVyUGFnZTogbnVtYmVyO1xuICAvKipcbiAgICogVG90YWwgZGF0YSBzaXplLiBJdCdzIG5lY2Vzc2FyeSB3aGVuIHJlbW90ZSBpcyBlbmFibGVkXG4gICAqL1xuICB0b3RhbFNpemU6IG51bWJlcjtcbiAgLyoqXG4gICAqIGZpcnN0IHBhZ2Ugd2lsbCBiZSAwLCBkZWZhdWx0IGlzIDFcbiAgICovXG4gIHBhZ2VTdGFydEluZGV4OiBudW1iZXI7XG4gIC8qKlxuICAgKiB0aGUgcGFnaW5hdGlvbiBiYXIgc2l6ZSwgZGVmYXVsdCBpcyA1XG4gICAqL1xuICBwYWdpbmF0aW9uU2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICogZGlzcGxheSBwYWdpbmF0aW9uIGluZm9ybWF0aW9uXG4gICAqL1xuICBzaG93VG90YWw6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBIG51bWVyaWMgYXJyYXkgaXMgYWxzbyBhdmFpbGFibGU6IFs1LCAxMF0uIHRoZSBwdXJwb3NlIG9mIGFib3ZlIGV4YW1wbGUgaXMgY3VzdG9tIHRoZSB0ZXh0XG4gICAqL1xuICBzaXplUGVyUGFnZUxpc3Q6IG51bWJlcltdIHwgQXJyYXk8eyB0ZXh0OiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfT47XG4gIC8qKlxuICAgKiBoaWRlIHRoZSBnb2luZyB0byBmaXJzdCBhbmQgbGFzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgd2l0aEZpcnN0QW5kTGFzdDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGFsd2F5cyBzaG93IHRoZSBuZXh0IGFuZCBwcmV2aW91cyBwYWdlIGJ1dHRvblxuICAgKi9cbiAgYWx3YXlzU2hvd0FsbEJ0bnM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiB0aGUgdGV4dCBvZiBmaXJzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgZmlyc3RQYWdlVGV4dDogc3RyaW5nIHwgUmVhY3QuUmVhY3RFbGVtZW50O1xuICAvKipcbiAgICogdGhlIHRleHQgb2YgcHJldmlvdXMgcGFnZSBidXR0b25cbiAgICovXG4gIHByZVBhZ2VUZXh0OiBzdHJpbmcgfCBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiB0aGUgdGV4dCBvZiBuZXh0IHBhZ2UgYnV0dG9uXG4gICAqL1xuICBuZXh0UGFnZVRleHQ6IHN0cmluZyB8IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIHRoZSB0ZXh0IG9mIGxhc3QgcGFnZSBidXR0b25cbiAgICovXG4gIGxhc3RQYWdlVGV4dDogc3RyaW5nIHwgUmVhY3QuUmVhY3RFbGVtZW50O1xuICAvKipcbiAgICogdGhlIHRpdGxlIG9mIG5leHQgcGFnZSBidXR0b25cbiAgICovXG4gIG5leHRQYWdlVGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIHRoZSB0aXRsZSBvZiBwcmV2aW91cyBwYWdlIGJ1dHRvblxuICAgKi9cbiAgcHJlUGFnZVRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiB0aGUgdGl0bGUgb2YgZmlyc3QgcGFnZSBidXR0b25cbiAgICovXG4gIGZpcnN0UGFnZVRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiB0aGUgdGl0bGUgb2YgbGFzdCBwYWdlIGJ1dHRvblxuICAgKi9cbiAgbGFzdFBhZ2VUaXRsZTogc3RyaW5nO1xuICAvKipcbiAgICogaGlkZSB0aGUgc2l6ZSBwZXIgcGFnZSBkcm9wZG93blxuICAgKi9cbiAgaGlkZVNpemVQZXJQYWdlOiBib29sZWFuO1xuICAvKipcbiAgICogaGlkZSBwYWdpbmF0aW9uIGJhciB3aGVuIG9ubHkgb25lIHBhZ2UsIGRlZmF1bHQgaXMgZmFsc2VcbiAgICovXG4gIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlOiBib29sZWFuO1xuICAvKipcbiAgICogY3VzdG9tIHBhZ2UgYnV0dG9uIGluc2lkZSB0aGUgcGFnaW5hdGlvbiBsaXN0XG4gICAqL1xuICBwYWdlQnV0dG9uUmVuZGVyZXI6IChvcHRpb25zOiBQYWdlQnV0dG9uUmVuZGVyZXJPcHRpb25zKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHBhZ2Ugd2FzIGNoYW5naW5nXG4gICAqL1xuICBvblBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHBhZ2Ugc2l6ZSB3YXMgY2hhbmdpbmdcbiAgICovXG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBjdXN0b20gcGFnaW5hdGlvbiBsaXN0IGNvbXBvbmVudFxuICAgKi9cbiAgcGFnZUxpc3RSZW5kZXJlcjogKG9wdGlvbnM6IFBhZ2VMaXN0UmVuZGVyZXJPcHRpb25zKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiBjdXN0b20gc2l6ZSBwZXIgcGFnZVxuICAgKi9cbiAgc2l6ZVBlclBhZ2VSZW5kZXJlcjogKG9wdGlvbnM6IFNpemVQZXJQYWdlUmVuZGVyZXJPcHRpb25zKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiBjdXN0b20gc2l6ZSBwZXIgcGFnZSBkcm9wZG93biBjb21wb25lbnRcbiAgICovXG4gIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI6IChcbiAgICBvcHRpb25zOiBTaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyT3B0aW9uc1xuICApID0+IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgLyoqXG4gICAqIGN1c3RvbSB0aGUgcGFnaW5hdGlvbiB0b3RhbFxuICAgKi9cbiAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI6IChcbiAgICBmcm9tOiBudW1iZXIsXG4gICAgdG86IG51bWJlcixcbiAgICBzaXplOiBudW1iZXJcbiAgKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG59PjtcblxuZXhwb3J0IGludGVyZmFjZSBTaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiB0ZXh0IG9mIHRoZSBvcHRpb25cbiAgICovXG4gIHRleHQ6IHN0cmluZztcbiAgLyoqXG4gICAqIHNpemUgb2YgcGVyIHBhZ2Ugb3B0aW9uXG4gICAqL1xuICBwYWdlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBjYWxsIGl0IHdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHNpemUgcGVyIHBhZ2VcbiAgICovXG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIsIHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUxpc3RSZW5kZXJlck9wdGlvbnMge1xuICAvKipcbiAgICogY3VycmVudCBwYWdlXG4gICAqL1xuICBwYWdlczogQXJyYXk8e1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfT47XG4gIC8qKlxuICAgKiBjYWxsIGl0IHdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHBhZ2VcbiAgICovXG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlQnV0dG9uUmVuZGVyZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIHBhZ2UgbnVtYmVyXG4gICAqL1xuICBwYWdlOiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBpcyB0aGlzIHBhZ2UgdGhlIGN1cnJlbnQgcGFnZSBvciBub3RcbiAgICovXG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqICBpcyB0aGlzIHBhZ2UgZGlzYWJsZWQgb3Igbm90XG4gICAqL1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIHBhZ2UgdGl0bGVcbiAgICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBjYWxsIGl0IHdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHBhZ2VcbiAgICovXG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlciwgc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaXplUGVyUGFnZVJlbmRlcmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBkcm9wZG93biBvcHRpb25zXG4gICAqL1xuICBvcHRpb25zOiBBcnJheTx7IHRleHQ6IHN0cmluZzsgcGFnZTogbnVtYmVyIH0+O1xuICAvKipcbiAgICogY3VycmVudCBzaXplIHBlciBwYWdlXG4gICAqL1xuICBjdXJyU2l6ZVBlclBhZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIGNhbGwgaXQgd2hlbiB5b3UgbmVlZCB0byBjaGFuZ2Ugc2l6ZSBwZXIgcGFnZVxuICAgKi9cbiAgb25TaXplUGVyUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RSb3dQcm9wczxUPiB7XG4gIG1vZGU6IHN0cmluZztcbiAgY2xpY2tUb1NlbGVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNsaWNrVG9FeHBhbmQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBjbGlja1RvRWRpdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGhpZGVTZWxlY3RBbGw/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzZWxlY3RlZD86IEFycmF5PG51bWJlciB8IHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gIG9uU2VsZWN0PzpcbiAgfCAoKFxuICAgIHJvdzogVCxcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgZTogU3ludGhldGljRXZlbnRcbiAgKSA9PiB2b2lkIHwgYm9vbGVhbilcbiAgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gc2VsZWN0L3Vuc2VsZWN0IGFsbCBhbmQgaXQgb25seSB3b3JrIHdoZW4geW91IGNvbmZpZ3VyZSBzZWxlY3RSb3cubW9kZSBhcyBjaGVja2JveC5cbiAgICovXG4gIG9uU2VsZWN0QWxsPzpcbiAgfCAoKFxuICAgIGlzU2VsZWN0OiBib29sZWFuLFxuICAgIHJvd3M6IFRbXSxcbiAgICBlOiBSZWFjdC5TeW50aGV0aWNFdmVudFxuICApID0+IHZvaWQgfCBudW1iZXJbXSlcbiAgfCB1bmRlZmluZWQ7XG4gIHN0eWxlPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZClcbiAgfCBDU1NQcm9wZXJ0aWVzXG4gIHwgdW5kZWZpbmVkO1xuICBjbGFzc2VzPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKVxuICB8IHN0cmluZ1xuICB8IHVuZGVmaW5lZDtcbiAgbm9uU2VsZWN0YWJsZT86IG51bWJlcltdIHwgdW5kZWZpbmVkO1xuICBub25TZWxlY3RhYmxlU3R5bGU/OlxuICB8ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBDU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkKVxuICB8IENTU1Byb3BlcnRpZXNcbiAgfCB1bmRlZmluZWQ7XG4gIG5vblNlbGVjdGFibGVDbGFzc2VzPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKVxuICB8IHN0cmluZ1xuICB8IHVuZGVmaW5lZDtcbiAgYmdDb2xvcj86ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoaWRlU2VsZWN0Q29sdW1uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0aW9uUmVuZGVyZXI/OlxuICB8ICgob3B0aW9uczoge1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgbW9kZTogc3RyaW5nO1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG4gICAgcm93S2V5OiBzdHJpbmc7XG4gIH0pID0+IFJlYWN0LlJlYWN0RWxlbWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIHNlbGVjdGlvbkhlYWRlclJlbmRlcmVyPzpcbiAgfCAoKG9wdGlvbnM6IHtcbiAgICBtb2RlOiBzdHJpbmc7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICB9KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQpXG4gIHwgdW5kZWZpbmVkO1xuICBoZWFkZXJDb2x1bW5TdHlsZT86XG4gIHwgKChzdGF0dXM6IHN0cmluZykgPT4gQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZClcbiAgfCBDU1NQcm9wZXJ0aWVzXG4gIHwgdW5kZWZpbmVkO1xuICBzZWxlY3RDb2x1bW5TdHlsZT86XG4gIHwgKChwcm9wczoge1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgcm93SW5kZXg6IG51bWJlcjtcbiAgICByb3dLZXk6IHN0cmluZztcbiAgfSkgPT4gQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZClcbiAgfCBDU1NQcm9wZXJ0aWVzXG4gIHwgdW5kZWZpbmVkO1xuICBzZWxlY3RDb2x1bW5Qb3NpdGlvbj86IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcFRhYmxlUmVmPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcbiAgdGFibGU6IHtcbiAgICBwcm9wczoge1xuICAgICAgZGF0YTogVFtdO1xuICAgIH07XG4gIH07XG4gIHNlbGVjdGlvbkNvbnRleHQ/OlxuICB8IHtcbiAgICBzZWxlY3RlZD86IGFueVtdIHwgdW5kZWZpbmVkO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICByb3dFeHBhbmRDb250ZXh0PzpcbiAgfCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGV4cGFuZGVkPzogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgfTtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgcGFnaW5hdGlvbkNvbnRleHQ/OlxuICB8IHtcbiAgICBjdXJyUGFnZTogbnVtYmVyO1xuICAgIGN1cnJTaXplUGVyUGFnZTogbnVtYmVyO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBzb3J0Q29udGV4dD86XG4gIHwge1xuICAgIHN0YXRlOiB7XG4gICAgICBzb3J0Q29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxUPjtcbiAgICAgIHNvcnRPcmRlcjogU29ydE9yZGVyO1xuICAgIH07XG4gIH1cbiAgfCB1bmRlZmluZWQ7XG4gIGZpbHRlckNvbnRleHQ/OlxuICB8IHtcbiAgICBjdXJyRmlsdGVyczogYW55O1xuICB9XG4gIHwgdW5kZWZpbmVkO1xuICBjZWxsRWRpdENvbnRleHQ/OlxuICB8IHtcbiAgICBzdGFydEVkaXRpbmc6IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuICB9XG4gIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcFRhYmxlUHJvcHM8VCBleHRlbmRzIG9iamVjdCA9IGFueSwgSyA9IG51bWJlcj4ge1xuICAvKipcbiAgICogVGVsbHMgcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nIHdoaWNoIGNvbHVtbiBpcyB1bmlxdWUuXG4gICAqL1xuICBrZXlGaWVsZDogc3RyaW5nO1xuICAvKipcbiAgICogIFByb3ZpZGVzIGRhdGEgZm9yIHlvdXIgdGFibGUuIEl0IGFjY2VwdHMgYSBzaW5nbGUgQXJyYXkgb2JqZWN0LlxuICAgKi9cbiAgZGF0YTogYW55W107XG4gIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICByZW1vdGU/OlxuICB8IGJvb2xlYW5cbiAgfCBQYXJ0aWFsPHtcbiAgICBwYWdpbmF0aW9uOiBib29sZWFuO1xuICAgIGZpbHRlcjogYm9vbGVhbjtcbiAgICBzb3J0OiBib29sZWFuO1xuICAgIGNlbGxFZGl0OiBib29sZWFuO1xuICAgIHNlYXJjaDogYm9vbGVhbjtcbiAgfT5cbiAgfCB1bmRlZmluZWQ7XG4gIG5vRGF0YUluZGljYXRpb24/OlxuICB8ICgoKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBzdHJpbmcpXG4gIHwgUmVhY3QuUmVhY3RFbGVtZW50XG4gIHwgc3RyaW5nXG4gIHwgdW5kZWZpbmVkO1xuICBzdHJpcGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgYm9yZGVyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBob3Zlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHRhYkluZGV4Q2VsbD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoZWFkZXJDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBib2R5Q2xhc3Nlcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgd3JhcHBlckNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhlYWRlcldyYXBwZXJDbGFzc2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25kZW5zZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogU2FtZSBhcyBIVE1MIGNhcHRpb24gdGFnLCB5b3UgY2FuIHNldCBpdCBhcyBTdHJpbmcgb3IgYSBSZWFjdCBKU1guXG4gICAqL1xuICBjYXB0aW9uPzogUmVhY3QuUmVhY3RFbGVtZW50IHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwYWdpbmF0aW9uPzogeyBvcHRpb25zPzogUGFnaW5hdGlvbk9wdGlvbnMgfCB1bmRlZmluZWQgfSB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyPzogdW5rbm93biB8IHVuZGVmaW5lZDtcbiAgY2VsbEVkaXQ/OiBhbnk7XG4gIHNlbGVjdFJvdz86IFNlbGVjdFJvd1Byb3BzPFQ+IHwgdW5kZWZpbmVkO1xuICBleHBhbmRSb3c/OiBFeHBhbmRSb3dQcm9wczxULCBLPiB8IHVuZGVmaW5lZDtcbiAgcGFyZW50Q2xhc3NOYW1lPzpcbiAgfCBzdHJpbmdcbiAgfCAoKGlzRXhwYW5kOiBib29sZWFuLCByb3c6IFQsIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZylcbiAgfCB1bmRlZmluZWQ7XG4gIHJvd1N0eWxlPzpcbiAgfCAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gQ1NTUHJvcGVydGllcylcbiAgfCBDU1NQcm9wZXJ0aWVzXG4gIHwgdW5kZWZpbmVkO1xuICByb3dFdmVudHM/OiBSb3dFdmVudEhhbmRsZXJQcm9wcyB8IHVuZGVmaW5lZDtcbiAgcm93Q2xhc3Nlcz86ICgocm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJzQ2xhc3Nlcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZmlsdGVyUG9zaXRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZvb3RlckNsYXNzZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRTb3J0ZWQ/OiBbeyBkYXRhRmllbGQ6IGFueTsgb3JkZXI6IFNvcnRPcmRlciB9XSB8IHVuZGVmaW5lZDtcbiAgc29ydD86XG4gIHwge1xuICAgIGRhdGFGaWVsZD86IGFueTtcbiAgICBvcmRlcjogU29ydE9yZGVyO1xuICAgIHNvcnRGdW5jPzogYW55O1xuICAgIHNvcnRDYXJldD86IGFueTtcbiAgfVxuICB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdFNvcnREaXJlY3Rpb24/OiBTb3J0T3JkZXIgfCB1bmRlZmluZWQ7XG4gIG92ZXJsYXk/OiBhbnk7XG4gIG9uVGFibGVDaGFuZ2U/OiBUYWJsZUNoYW5nZUhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7XG4gIG9uU29ydD86IGFueTtcbiAgb25GaWx0ZXI/OiBhbnk7XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiBhbnk7XG4gIC8qKlxuICAgKiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9ubHkgd2hlbiBkYXRhIHNpemUgY2hhbmdlIGJ5IHNlYXJjaC9maWx0ZXIgZXRjLlxuICAgKi9cbiAgb25EYXRhU2l6ZUNoYW5nZT86ICgocHJvcHM6IHsgZGF0YVNpemU6IG51bWJlciB9KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoPzogU2VhcmNoUHJvcHM8VD4gfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvLyBUT0RPIEFkZGVkIE9uXG4gIGxvYWRpbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzb3J0RmllbGQ/OiBzdHJpbmc7XG4gIHNvcnRPcmRlcj86IHN0cmluZztcbiAgY3VyckZpbHRlcnM/OiBvYmplY3Q7XG59XG5cbi8vIGRlY2xhcmUgY2xhc3MgQm9vdHN0cmFwVGFibGU8XG4vLyAgIFQgZXh0ZW5kcyBvYmplY3QgPSBhbnksXG4vLyAgIEsgPSBudW1iZXJcbi8vID4gZXh0ZW5kcyBDb21wb25lbnQ8Qm9vdHN0cmFwVGFibGVQcm9wczxULCBLPj4ge31cbi8vIGV4cG9ydCBkZWZhdWx0IEJvb3RzdHJhcFRhYmxlO1xuXG4vKipcbiAqIFNlYXJjaCBwcm9wc1xuICpcbiAqIENvbnN1bHQgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vamVmZi1rLXpob3UuZ2l0aHViLmlvL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9kb2NzL3NlYXJjaC1wcm9wcy5odG1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFByb3BzPFQ+IHtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNlYXJjaFRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRTZWFyY2g/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qIGN1c3RvbSBzZWFyY2ggbWV0aG9kLCByZXR1cm4gdHJ1ZSBpZiBtYXRjaGVkIGFuZCBmYWxzZSBpZiBub3QgKi9cbiAgb25Db2x1bW5NYXRjaD86XG4gIHwgKChzZWFyY2hQcm9wczoge1xuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIGNvbHVtbjogYW55O1xuICAgIHJvdzogVDtcbiAgfSkgPT4gYm9vbGVhbilcbiAgfCB1bmRlZmluZWQ7XG4gIG9uQ2xlYXI/OiAoKSA9PiB2b2lkO1xuICBvblNlYXJjaD86IChzZWFyY2hUZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZENvbHVtblJlbmRlcmVyUHJvcHMge1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgcm93S2V5OiBzdHJpbmc7XG4gIGV4cGFuZGFibGU6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyIHtcbiAgaXNBbnlFeHBhbmRzOiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBFeHBhbmRSb3dQcm9wczxULCBLID0gbnVtYmVyPiB7XG4gIHJlbmRlcmVyOiAoKHJvdzogVCwgcm93SW5kZXg6IG51bWJlcikgPT4gUmVhY3QuUmVhY3RFbGVtZW50KSB8IHVuZGVmaW5lZDtcbiAgZXhwYW5kZWQ/OiBLW10gfCB1bmRlZmluZWQ7XG4gIG9uRXhwYW5kPzpcbiAgfCAoKHJvdzogVCwgaXNFeHBhbmQ6IGJvb2xlYW4sIHJvd0luZGV4OiBudW1iZXIsIGU6IFN5bnRoZXRpY0V2ZW50KSA9PiB2b2lkKVxuICB8IHVuZGVmaW5lZDtcbiAgb25FeHBhbmRBbGw/OlxuICB8ICgoaXNFeHBhbmRBbGw6IGJvb2xlYW4sIHJlc3VsdHM6IFRbXSwgZTogU3ludGhldGljRXZlbnQpID0+IHZvaWQpXG4gIHwgdW5kZWZpbmVkO1xuICBub25FeHBhbmRhYmxlPzogS1tdIHwgdW5kZWZpbmVkO1xuICBzaG93RXhwYW5kQ29sdW1uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgb25seU9uZUV4cGFuZGluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGV4cGFuZEJ5Q29sdW1uT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGV4cGFuZENvbHVtblJlbmRlcmVyPzpcbiAgfCAoKHByb3BzOiBFeHBhbmRDb2x1bW5SZW5kZXJlclByb3BzKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQpXG4gIHwgdW5kZWZpbmVkO1xuICBleHBhbmRIZWFkZXJDb2x1bW5SZW5kZXJlcj86XG4gIHwgKChwcm9wczogRXhwYW5kSGVhZGVyQ29sdW1uUmVuZGVyZXIpID0+IFJlYWN0LlJlYWN0RWxlbWVudClcbiAgfCB1bmRlZmluZWQ7XG4gIGV4cGFuZENvbHVtblBvc2l0aW9uPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86XG4gIHwgc3RyaW5nXG4gIHwgKChpc0V4cGFuZDogYm9vbGVhbiwgcm93OiBULCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpXG4gIHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0IHR5cGUgVGFibGVDb2x1bW5GaWx0ZXJQcm9wczxGViA9IGFueSwgVCBleHRlbmRzIG9iamVjdCA9IGFueT4gPSBQYXJ0aWFsPHtcbiAgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqICBjdXN0b20gdGhlIGlucHV0IHBsYWNlaG9sZGVyXG4gICAqL1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAvKipcbiAgICogIGN1c3RvbSBjbGFzc25hbWUgb24gaW5wdXRcbiAgICovXG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogIGRlZmF1bHQgZmlsdGVyaW5nIHZhbHVlXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IGFueTtcbiAgLyoqXG4gICAqICB5b3VyIGN1c3RvbSBzdHlsZXMgb24gaW5wdXRcbiAgICovXG4gIHN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICAvKipcbiAgICogIGhvdyBsb25nIHdpbGwgdHJpZ2dlciBmaWx0ZXJpbmcgYWZ0ZXIgdXNlciB0eXBpbmcsIGRlZmF1bHQgaXMgNTAwIG1zXG4gICAqL1xuICBkZWxheTogbnVtYmVyO1xuICAvKipcbiAgICogZm9yY2UgdXBkYXRlIHRoZSB0YWJsZSB3aGVuIGZpbHRlciB2YWx1ZSBjaGFuZ2VzIGZvciByZW1vdGUgZmlsdGVyaW5nXG4gICAqL1xuICBmb3JjZVVwZGF0ZTogYm9vbGVhbjtcblxuICAvKlxuICAgKiBleHBvcnQgZmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGFjY2VzcyBmaWx0ZXIgbWV0aG9kIGV4dGVybmFsbHkuXG4gICAqL1xuICBnZXRGaWx0ZXI6IChmaWx0ZXI6ICh2YWx1ZTogRlYpID0+IHZvaWQgfCBUW10pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGxpc3RlbmVyIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gY29sdW1uIGZpbHRlciBiZWluZyB0cmlnZ2VyZWQuIElmIHlvdSByZXR1cm4gYW4gYXJyYXkgdmFsdWUsIHJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZyB3aWxsIGFkb3B0IHRoaXMgdmFsdWUgYXMgdGhlIGZpbmFsIGZpbHRlcmVkIHJlc3VsdC5cbiAgICovXG4gIG9uRmlsdGVyOiAoZmlsdGVyVmFsdWU6IEZWKSA9PiB2b2lkIHwgVFtdO1xufT47XG4iLCJpbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBDb2x1bW5EZXNjcmlwdGlvbiB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDZWxsRXZlbnREZWxlZ2F0ZXIgYXMgZXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9jZWxsLWV2ZW50LWRlbGVnYXRlclwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIEZvb3RlckNlbGxQcm9wcyB7XG4gIGNvbHVtbkRhdGE/OiBhbnlbXTtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb247XG59XG5cbmNsYXNzIEZvb3RlckNlbGwgZXh0ZW5kcyBldmVudERlbGVnYXRlcihDb21wb25lbnQpPEZvb3RlckNlbGxQcm9wcz4ge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpbmRleCwgY29sdW1uLCBjb2x1bW5EYXRhIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qge1xuICAgICAgZm9vdGVyLFxuICAgICAgZm9vdGVyVGl0bGUsXG4gICAgICBmb290ZXJBbGlnbixcbiAgICAgIGZvb3RlckZvcm1hdHRlcixcbiAgICAgIGZvb3RlckV2ZW50cyxcbiAgICAgIGZvb3RlckNsYXNzZXMsXG4gICAgICBmb290ZXJTdHlsZSxcbiAgICAgIGZvb3RlckF0dHJzLFxuICAgIH0gPSBjb2x1bW47XG5cbiAgICBjb25zdCBkZWxlZ2F0ZUV2ZW50cyA9IHRoaXMuZGVsZWdhdGUoZm9vdGVyRXZlbnRzKTtcbiAgICBjb25zdCBjZWxsQXR0cnMgPSB7XG4gICAgICAuLi4oXy5pc0Z1bmN0aW9uKGZvb3RlckF0dHJzKVxuICAgICAgICA/IGZvb3RlckF0dHJzKGNvbHVtbiwgaW5kZXghKVxuICAgICAgICA6IGZvb3RlckF0dHJzKSxcbiAgICAgIC4uLmRlbGVnYXRlRXZlbnRzLFxuICAgIH07XG5cbiAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgaWYgKF8uaXNTdHJpbmcoZm9vdGVyKSkge1xuICAgICAgdGV4dCA9IGZvb3RlcjtcbiAgICB9IGVsc2UgaWYgKF8uaXNGdW5jdGlvbihmb290ZXIpKSB7XG4gICAgICB0ZXh0ID0gZm9vdGVyKGNvbHVtbkRhdGEgfHwgW10sIGNvbHVtbiwgaW5kZXggfHwgMCk7XG4gICAgfVxuXG4gICAgbGV0IGNlbGxTdHlsZTogYW55ID0ge307XG4gICAgY29uc3QgY2VsbENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oZm9vdGVyQ2xhc3NlcylcbiAgICAgID8gZm9vdGVyQ2xhc3Nlcyhjb2x1bW4sIGluZGV4IHx8IDApXG4gICAgICA6IGZvb3RlckNsYXNzZXM7XG5cbiAgICBpZiAoZm9vdGVyU3R5bGUpIHtcbiAgICAgIGNlbGxTdHlsZSA9IF8uaXNGdW5jdGlvbihmb290ZXJTdHlsZSlcbiAgICAgICAgPyBmb290ZXJTdHlsZShjb2x1bW4sIGluZGV4IHx8IDApXG4gICAgICAgIDogZm9vdGVyU3R5bGU7XG4gICAgICBjZWxsU3R5bGUgPSBjZWxsU3R5bGUgPyB7IC4uLmNlbGxTdHlsZSB9IDogY2VsbFN0eWxlO1xuICAgIH1cblxuICAgIGlmIChmb290ZXJUaXRsZSkge1xuICAgICAgY2VsbEF0dHJzLnRpdGxlID0gXy5pc0Z1bmN0aW9uKGZvb3RlclRpdGxlKVxuICAgICAgICA/IGZvb3RlclRpdGxlKGNvbHVtbiwgaW5kZXggfHwgMClcbiAgICAgICAgOiB0ZXh0O1xuICAgIH1cblxuICAgIGlmIChmb290ZXJBbGlnbikge1xuICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihmb290ZXJBbGlnbilcbiAgICAgICAgPyBmb290ZXJBbGlnbihjb2x1bW4sIGluZGV4IHx8IDApXG4gICAgICAgIDogZm9vdGVyQWxpZ247XG4gICAgfVxuXG4gICAgaWYgKGNlbGxDbGFzc2VzKSBjZWxsQXR0cnMuY2xhc3NOYW1lID0gY3MoY2VsbEF0dHJzLmNsYXNzTmFtZSwgY2VsbENsYXNzZXMpO1xuICAgIGlmICghXy5pc0VtcHR5T2JqZWN0KGNlbGxTdHlsZSkpIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICAgIGNvbnN0IGNoaWxkcmVuID0gZm9vdGVyRm9ybWF0dGVyXG4gICAgICA/IGZvb3RlckZvcm1hdHRlcihjb2x1bW4sIGluZGV4IHx8IDAsIHsgdGV4dCB9KVxuICAgICAgOiB0ZXh0O1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0aFwiLCBjZWxsQXR0cnMsIGNoaWxkcmVuIGFzIFJlYWN0Tm9kZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9vdGVyQ2VsbDtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmltcG9ydCB7XG4gIENIRUNLQk9YX1NUQVRVU19DSEVDS0VELFxuICBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURSxcbiAgQ0hFQ0tCT1hfU1RBVFVTX1VOQ0hFQ0tFRCxcbiAgUk9XX1NFTEVDVF9TSU5HTEUsXG59IGZyb20gXCIuLi9jb25zdFwiO1xuaW1wb3J0IGRhdGFPcGVyYXRvciBmcm9tIFwiLi4vc3RvcmUvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25TdW1tYXJ5IH0gZnJvbSBcIi4uL3N0b3JlL3NlbGVjdGlvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkNvbnRleHRWYWx1ZSB7XG4gIHNlbGVjdGVkPzogYW55W107XG4gIG9uUm93U2VsZWN0PzogKFxuICAgIHJvd0tleTogYW55LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiB2b2lkO1xuICBvbkFsbFJvd3NTZWxlY3Q/OiAoZTogYW55LCBpc1VuU2VsZWN0OiBib29sZWFuKSA9PiB2b2lkO1xuICBhbGxSb3dzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBhbGxSb3dzTm90U2VsZWN0ZWQ/OiBib29sZWFuO1xuICBjaGVja2VkU3RhdHVzPzogc3RyaW5nO1xuICBtb2RlPzogc3RyaW5nO1xuICBoaWRlU2VsZWN0Q29sdW1uPzogYm9vbGVhbjtcbiAgY2xpY2tUb1NlbGVjdD86IGJvb2xlYW47XG4gIGNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbD86IGJvb2xlYW47XG4gIG9uU2VsZWN0PzogKFxuICAgIHJvdzogYW55LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBlOiBhbnlcbiAgKSA9PiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBvblNlbGVjdEFsbD86IChjaGVja2VkOiBib29sZWFuLCBzZWxlY3RlZFJvd3M6IGFueVtdLCBlOiBhbnkpID0+IHZvaWQgfCBhbnlbXTtcbiAgbm9uU2VsZWN0YWJsZT86IGFueVtdO1xuICBoaWRlU2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2VsZWN0aW9uSGVhZGVyUmVuZGVyZXI/OiAoYXJnczoge1xuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICBpbmRldGVybWluYXRlOiBib29sZWFuO1xuICB9KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIGhlYWRlckNvbHVtblN0eWxlPzpcbiAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gIHwgKChjaGVja2VkU3RhdHVzOiBzdHJpbmcpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xufVxuXG5pbnRlcmZhY2UgU2VsZWN0aW9uUHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGRhdGE6IGFueVtdO1xuICBrZXlGaWVsZDogc3RyaW5nO1xuICBzZWxlY3RSb3c6IHtcbiAgICBzZWxlY3RlZD86IGFueVtdO1xuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgaGlkZVNlbGVjdENvbHVtbj86IGJvb2xlYW47XG4gICAgY2xpY2tUb1NlbGVjdD86IGJvb2xlYW47XG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsPzogYm9vbGVhbjtcbiAgICBvblNlbGVjdD86IChcbiAgICAgIHJvdzogYW55LFxuICAgICAgY2hlY2tlZDogYm9vbGVhbixcbiAgICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgICBlOiBhbnlcbiAgICApID0+IGJvb2xlYW47XG4gICAgb25TZWxlY3RBbGw/OiAoXG4gICAgICBjaGVja2VkOiBib29sZWFuLFxuICAgICAgc2VsZWN0ZWRSb3dzOiBhbnlbXSxcbiAgICAgIGU6IGFueVxuICAgICkgPT4gdm9pZCB8IGFueVtdO1xuICAgIG5vblNlbGVjdGFibGU/OiBhbnlbXTtcbiAgICBoaWRlU2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgICBzZWxlY3Rpb25IZWFkZXJSZW5kZXJlcj86IChhcmdzOiB7XG4gICAgICBtb2RlPzogc3RyaW5nO1xuICAgICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgICAgIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG4gICAgfSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIGhlYWRlckNvbHVtblN0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoY2hlY2tlZFN0YXR1czogc3RyaW5nKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFNlbGVjdGlvbkNvbnRleHQgPSB7fTtcbmNvbnN0IFNlbGVjdGlvbkNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFNlbGVjdGlvbkNvbnRleHRWYWx1ZT4oXG4gIGRlZmF1bHRTZWxlY3Rpb25Db250ZXh0XG4pO1xuXG5jbGFzcyBTZWxlY3Rpb25Qcm92aWRlciBleHRlbmRzIENvbXBvbmVudDxTZWxlY3Rpb25Qcm92aWRlclByb3BzPiB7XG4gIHNlbGVjdGVkOiBhbnlbXTtcbiAgaXNIYW5kbGVSb3dTZWxlY3Q6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFNlbGVjdGlvblByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCB8fCBbXTtcbiAgICB0aGlzLmlzSGFuZGxlUm93U2VsZWN0ID0gZmFsc2U7XG4gIH1cblxuICAvLyBleHBvc2VkIEFQSVxuICBnZXRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShuZXh0UHJvcHM6IFNlbGVjdGlvblByb3ZpZGVyUHJvcHMpIHtcbiAgICBpZiAodGhpcy5pc0hhbmRsZVJvd1NlbGVjdCkge1xuICAgICAgdGhpcy5pc0hhbmRsZVJvd1NlbGVjdCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBuZXh0UHJvcHMuc2VsZWN0Um93ICYmXG4gICAgICBuZXh0UHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkICYmXG4gICAgICAhXy5pc0VxdWFsKG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQsIHRoaXMuc2VsZWN0ZWQpXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gbmV4dFByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZDtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dTZWxlY3QgPSAoXG4gICAgcm93S2V5OiBhbnksXG4gICAgY2hlY2tlZDogYm9vbGVhbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGU6IGFueVxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhLFxuICAgICAga2V5RmllbGQsXG4gICAgICBzZWxlY3RSb3c6IHsgbW9kZSwgb25TZWxlY3QgfSxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGxldCBjdXJyU2VsZWN0ZWQgPSBbLi4udGhpcy5zZWxlY3RlZF07XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBpZiAob25TZWxlY3QpIHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFPcGVyYXRvci5nZXRSb3dCeVJvd0lkKGRhdGEsIGtleUZpZWxkLCByb3dLZXkpO1xuICAgICAgcmVzdWx0ID0gb25TZWxlY3Qocm93LCBjaGVja2VkLCByb3dJbmRleCwgZSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG1vZGUgPT09IFJPV19TRUxFQ1RfU0lOR0xFKSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZCA9IFtyb3dLZXldO1xuICAgICAgfSBlbHNlIGlmIChjaGVja2VkKSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZC5wdXNoKHJvd0tleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHJvd0tleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQ7XG4gICAgdGhpcy5pc0hhbmRsZVJvd1NlbGVjdCA9IHRydWU7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFsbFJvd3NTZWxlY3QgPSAoZTogYW55LCBpc1VuU2VsZWN0OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YSxcbiAgICAgIGtleUZpZWxkLFxuICAgICAgc2VsZWN0Um93OiB7IG9uU2VsZWN0QWxsLCBub25TZWxlY3RhYmxlIH0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzZWxlY3RlZCB9ID0gdGhpcztcblxuICAgIGxldCBjdXJyU2VsZWN0ZWQ6IGFueTtcblxuICAgIGlmICghaXNVblNlbGVjdCkge1xuICAgICAgY3VyclNlbGVjdGVkID0gc2VsZWN0ZWQuY29uY2F0KFxuICAgICAgICBkYXRhT3BlcmF0b3Iuc2VsZWN0YWJsZUtleXMoZGF0YSwga2V5RmllbGQsIG5vblNlbGVjdGFibGUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyU2VsZWN0ZWQgPSBzZWxlY3RlZC5maWx0ZXIoXG4gICAgICAgIChzKSA9PiB0eXBlb2YgZGF0YS5maW5kKChkKSA9PiBfLmdldChkLCBrZXlGaWVsZCkgPT09IHMpID09PSBcInVuZGVmaW5lZFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICBpZiAob25TZWxlY3RBbGwpIHtcbiAgICAgIHJlc3VsdCA9IG9uU2VsZWN0QWxsKFxuICAgICAgICAhaXNVblNlbGVjdCxcbiAgICAgICAgZGF0YU9wZXJhdG9yLmdldFNlbGVjdGVkUm93cyhcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGtleUZpZWxkLFxuICAgICAgICAgIGlzVW5TZWxlY3QgPyBzZWxlY3RlZCA6IGN1cnJTZWxlY3RlZFxuICAgICAgICApLFxuICAgICAgICBlXG4gICAgICApO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQ7XG4gICAgdGhpcy5pc0hhbmRsZVJvd1NlbGVjdCA9IHRydWU7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGFsbFJvd3NTZWxlY3RlZCwgYWxsUm93c05vdFNlbGVjdGVkIH0gPSBnZXRTZWxlY3Rpb25TdW1tYXJ5KFxuICAgICAgdGhpcy5wcm9wcy5kYXRhLFxuICAgICAgdGhpcy5wcm9wcy5rZXlGaWVsZCxcbiAgICAgIHRoaXMuc2VsZWN0ZWRcbiAgICApO1xuXG4gICAgbGV0IGNoZWNrZWRTdGF0dXM6IHN0cmluZztcblxuICAgIGlmIChhbGxSb3dzU2VsZWN0ZWQpIHtcbiAgICAgIGNoZWNrZWRTdGF0dXMgPSBDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRDtcbiAgICB9IGVsc2UgaWYgKGFsbFJvd3NOb3RTZWxlY3RlZCkge1xuICAgICAgY2hlY2tlZFN0YXR1cyA9IENIRUNLQk9YX1NUQVRVU19VTkNIRUNLRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrZWRTdGF0dXMgPSBDSEVDS0JPWF9TVEFUVVNfSU5ERVRFUk1JTkFURTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNlbGVjdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICAuLi50aGlzLnByb3BzLnNlbGVjdFJvdyxcbiAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgICBvblJvd1NlbGVjdDogdGhpcy5oYW5kbGVSb3dTZWxlY3QsXG4gICAgICAgICAgb25BbGxSb3dzU2VsZWN0OiB0aGlzLmhhbmRsZUFsbFJvd3NTZWxlY3QsXG4gICAgICAgICAgYWxsUm93c1NlbGVjdGVkLFxuICAgICAgICAgIGFsbFJvd3NOb3RTZWxlY3RlZCxcbiAgICAgICAgICBjaGVja2VkU3RhdHVzLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvU2VsZWN0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTZWxlY3Rpb25Db250ZXh0ID0gKCkgPT4gKHtcbiAgUHJvdmlkZXI6IFNlbGVjdGlvblByb3ZpZGVyLFxuICBDb25zdW1lcjogU2VsZWN0aW9uQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgTW91c2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBDZWxsRXZlbnREZWxlZ2F0ZXIgYXMgZXZlbnREZWxlZ2F0ZXIgfSBmcm9tIFwiLi9jZWxsLWV2ZW50LWRlbGVnYXRlclwiO1xuaW1wb3J0IF8gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIENlbGxQcm9wcyB7XG4gIHJvdzogYW55O1xuICByb3dpbmRleDogbnVtYmVyO1xuICBjb2x1bW46IGFueTtcbiAgY29sdW1uaW5kZXg6IG51bWJlcjtcbiAgYXRzdGFydD86IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuICBlZGl0YWJsZT86IHN0cmluZztcbiAgY2xpY2t0b2VkaXQ/OiBzdHJpbmc7XG4gIGRiY2xpY2t0b2VkaXQ/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG59XG5cbmNsYXNzIENlbGwgZXh0ZW5kcyBldmVudERlbGVnYXRlcihDb21wb25lbnQpPENlbGxQcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2VsbFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY3JlYXRlSGFuZGxlRWRpdGluZ0NlbGwgPSB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsLmJpbmQodGhpcyk7XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBDZWxsUHJvcHMpIHtcbiAgICBsZXQgc2hvdWxkVXBkYXRlID0gZmFsc2U7XG4gICAgaWYgKG5leHRQcm9wcy5jb2x1bW4uaXNEdW1teUZpZWxkKSB7XG4gICAgICBzaG91bGRVcGRhdGUgPSAhXy5pc0VxdWFsKHRoaXMucHJvcHMucm93LCBuZXh0UHJvcHMucm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkVXBkYXRlID1cbiAgICAgICAgXy5nZXQodGhpcy5wcm9wcy5yb3csIHRoaXMucHJvcHMuY29sdW1uLmRhdGFGaWVsZCkgIT09XG4gICAgICAgIF8uZ2V0KG5leHRQcm9wcy5yb3csIG5leHRQcm9wcy5jb2x1bW4uZGF0YUZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlKSByZXR1cm4gdHJ1ZTtcblxuICAgIC8vIGlmIChuZXh0UHJvcHMuZm9ybWF0dGVyKVxuXG4gICAgc2hvdWxkVXBkYXRlID1cbiAgICAgIChuZXh0UHJvcHMuY29sdW1uLmZvcm1hdHRlclxuICAgICAgICA/ICFfLmlzRXF1YWwodGhpcy5wcm9wcy5yb3csIG5leHRQcm9wcy5yb3cpXG4gICAgICAgIDogZmFsc2UpIHx8XG4gICAgICB0aGlzLnByb3BzLmNvbHVtbi5oaWRkZW4gIT09IG5leHRQcm9wcy5jb2x1bW4uaGlkZGVuIHx8XG4gICAgICB0aGlzLnByb3BzLmNvbHVtbi5pc0R1bW15RmllbGQgIT09IG5leHRQcm9wcy5jb2x1bW4uaXNEdW1teUZpZWxkIHx8XG4gICAgICB0aGlzLnByb3BzLnJvd2luZGV4ICE9PSBuZXh0UHJvcHMucm93aW5kZXggfHxcbiAgICAgIHRoaXMucHJvcHMuY29sdW1uaW5kZXggIT09IG5leHRQcm9wcy5jb2x1bW5pbmRleCB8fFxuICAgICAgdGhpcy5wcm9wcy5jbGFzc05hbWUgIT09IG5leHRQcm9wcy5jbGFzc05hbWUgfHxcbiAgICAgIHRoaXMucHJvcHMudGl0bGUgIT09IG5leHRQcm9wcy50aXRsZSB8fFxuICAgICAgdGhpcy5wcm9wcy5lZGl0YWJsZSAhPT0gbmV4dFByb3BzLmVkaXRhYmxlIHx8XG4gICAgICB0aGlzLnByb3BzLmNsaWNrdG9lZGl0ICE9PSBuZXh0UHJvcHMuY2xpY2t0b2VkaXQgfHxcbiAgICAgIHRoaXMucHJvcHMuZGJjbGlja3RvZWRpdCAhPT0gbmV4dFByb3BzLmRiY2xpY2t0b2VkaXQgfHxcbiAgICAgICFfLmlzRXF1YWwodGhpcy5wcm9wcy5zdHlsZSwgbmV4dFByb3BzLnN0eWxlKSB8fFxuICAgICAgIV8uaXNFcXVhbChcbiAgICAgICAgdGhpcy5wcm9wcy5jb2x1bW4uZm9ybWF0RXh0cmFEYXRhLFxuICAgICAgICBuZXh0UHJvcHMuY29sdW1uLmZvcm1hdEV4dHJhRGF0YVxuICAgICAgKSB8fFxuICAgICAgIV8uaXNFcXVhbCh0aGlzLnByb3BzLmNvbHVtbi5ldmVudHMsIG5leHRQcm9wcy5jb2x1bW4uZXZlbnRzKSB8fFxuICAgICAgIV8uaXNFcXVhbCh0aGlzLnByb3BzLmNvbHVtbi5hdHRycywgbmV4dFByb3BzLmNvbHVtbi5hdHRycykgfHxcbiAgICAgIHRoaXMucHJvcHMudGFiSW5kZXggIT09IG5leHRQcm9wcy50YWJJbmRleDtcblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBjcmVhdGVIYW5kbGVFZGl0aW5nQ2VsbChvcmlnaW5GdW5jOiAoZTogTW91c2VFdmVudCkgPT4gdm9pZCkge1xuICAgIHJldHVybiAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhdHN0YXJ0LCByb3dpbmRleCwgY29sdW1uaW5kZXgsIGNsaWNrdG9lZGl0LCBkYmNsaWNrdG9lZGl0IH0gPVxuICAgICAgICB0aGlzLnByb3BzO1xuICAgICAgaWYgKChjbGlja3RvZWRpdCB8fCBkYmNsaWNrdG9lZGl0KSAmJiBfLmlzRnVuY3Rpb24ob3JpZ2luRnVuYykpIHtcbiAgICAgICAgb3JpZ2luRnVuYyhlKTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHN0YXJ0KSB7XG4gICAgICAgIGF0c3RhcnQocm93aW5kZXgsIGNvbHVtbmluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbixcbiAgICAgIGF0c3RhcnQsXG4gICAgICByb3dpbmRleCxcbiAgICAgIGNvbHVtbmluZGV4LFxuICAgICAgZWRpdGFibGUsXG4gICAgICBjbGlja3RvZWRpdCxcbiAgICAgIGRiY2xpY2t0b2VkaXQsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBkYXRhRmllbGQsIGZvcm1hdHRlciwgZm9ybWF0RXh0cmFEYXRhIH0gPSBjb2x1bW47XG4gICAgY29uc3QgYXR0cnMgPSB0aGlzLmRlbGVnYXRlKHsgLi4ucmVzdCB9KTtcbiAgICBsZXQgY29udGVudCA9IGNvbHVtbi5pc0R1bW15RmllbGQgPyBudWxsIDogXy5nZXQocm93LCBkYXRhRmllbGQpO1xuXG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgY29udGVudCA9IGNvbHVtbi5mb3JtYXR0ZXIoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHJvdyxcbiAgICAgICAgcm93aW5kZXgsXG4gICAgICAgIGZvcm1hdEV4dHJhRGF0YVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY2xpY2t0b2VkaXQgPT09IFwidHJ1ZVwiICYmIGVkaXRhYmxlID09PSBcInRydWVcIikge1xuICAgICAgYXR0cnMub25DbGljayA9IHRoaXMuY3JlYXRlSGFuZGxlRWRpdGluZ0NlbGwoYXR0cnMub25DbGljayk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGRiY2xpY2t0b2VkaXQgPT09IFwidHJ1ZVwiICYmXG4gICAgICBlZGl0YWJsZSA9PT0gXCJ0cnVlXCJcbiAgICApIHtcbiAgICAgIGF0dHJzLm9uRG91YmxlQ2xpY2sgPSB0aGlzLmNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsKGF0dHJzLm9uRG91YmxlQ2xpY2spO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dGQgey4uLmF0dHJzfT5cbiAgICAgICAge3R5cGVvZiBjb250ZW50ID09PSBcImJvb2xlYW5cIiA/IGAke2NvbnRlbnR9YCA6IGNvbnRlbnR9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2VsbDtcbiIsImltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Um93QnlSb3dJZCB9IGZyb20gXCIuL3Jvd3NcIjtcblxuZXhwb3J0IGNvbnN0IGVkaXRDZWxsID0gKGRhdGE6IGFueSwga2V5RmllbGQ6IGFueSwgcm93SWQ6IGFueSwgZGF0YUZpZWxkOiBhbnksIG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgY29uc3Qgcm93ID0gZ2V0Um93QnlSb3dJZChkYXRhLCBrZXlGaWVsZCwgcm93SWQpO1xuICBpZiAocm93KSBfLnNldChyb3csIGRhdGFGaWVsZCwgbmV3VmFsdWUpO1xufTtcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gXCJjc3N0eXBlXCI7XG5pbXBvcnQgeyBGSUxURVJTX1BPU0lUSU9OX0lOTElORSwgU09SVF9ERVNDIH0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCB7IENlbGxFdmVudERlbGVnYXRlciBhcyBldmVudERlbGVnYXRlciB9IGZyb20gXCIuL2NlbGwtZXZlbnQtZGVsZWdhdGVyXCI7XG5pbXBvcnQgU29ydENhcmV0IGZyb20gXCIuL3NvcnQvY2FyZXRcIjtcbmltcG9ydCBTb3J0U3ltYm9sIGZyb20gXCIuL3NvcnQvc3ltYm9sXCI7XG5pbXBvcnQgXyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgSGVhZGVyQ2VsbFByb3BzIHtcbiAgY29sdW1uOiB7XG4gICAgZGF0YUZpZWxkOiBzdHJpbmc7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgaXNEdW1teUZpZWxkPzogYm9vbGVhbjtcbiAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgIGhlYWRlckZvcm1hdHRlcj86IChcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgIGV4dHJhRGF0YTogYW55XG4gICAgKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgZm9ybWF0dGVyPzogKFxuICAgICAgY2VsbDogYW55LFxuICAgICAgcm93OiBhbnksXG4gICAgICByb3dJbmRleDogbnVtYmVyLFxuICAgICAgZm9ybWF0RXh0cmFEYXRhOiBhbnlcbiAgICApID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICBmb3JtYXRFeHRyYURhdGE/OiBhbnk7XG4gICAgaGVhZGVyQ2xhc3Nlcz86IHN0cmluZyB8ICgoY29sdW1uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gICAgY2xhc3Nlcz86IHN0cmluZyB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKTtcbiAgICBoZWFkZXJTdHlsZT86XG4gICAgfCBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgfCAoKGNvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICBoZWFkZXJTb3J0aW5nQ2xhc3Nlcz86XG4gICAgfCBzdHJpbmdcbiAgICB8ICgoXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHNvcnRPcmRlcjogc3RyaW5nLFxuICAgICAgaXNMYXN0U29ydGluZzogYm9vbGVhbixcbiAgICAgIGluZGV4OiBudW1iZXJcbiAgICApID0+IHN0cmluZyk7XG4gICAgaGVhZGVyU29ydGluZ1N0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHNvcnRPcmRlcjogc3RyaW5nLFxuICAgICAgaXNMYXN0U29ydGluZzogYm9vbGVhbixcbiAgICAgIGluZGV4OiBudW1iZXJcbiAgICApID0+IFJlYWN0LkNTU1Byb3BlcnRpZXMpO1xuICAgIHN0eWxlPzpcbiAgICB8IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgaGVhZGVyVGl0bGU/OiBib29sZWFuIHwgKChjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbiB8IHN0cmluZyk7XG4gICAgdGl0bGU/OlxuICAgIHwgYm9vbGVhblxuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBib29sZWFuIHwgc3RyaW5nKTtcbiAgICBoZWFkZXJFdmVudHM/OiBSZWNvcmQ8c3RyaW5nLCAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4gdm9pZD47XG4gICAgZXZlbnRzPzogUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHZvaWRcbiAgICA+O1xuICAgIGhlYWRlckFsaWduPzpcbiAgICB8IFByb3BlcnR5LlRleHRBbGlnblxuICAgIHwgKChjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcikgPT4gUHJvcGVydHkuVGV4dEFsaWduKTtcbiAgICBhbGlnbj86IHN0cmluZyB8ICgoY2VsbDogYW55LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKTtcbiAgICBoZWFkZXJBdHRycz86XG4gICAgfCBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD5cbiAgICB8ICgoXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIGluZGV4OiBudW1iZXJcbiAgICApID0+IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50Pik7XG4gICAgYXR0cnM/OlxuICAgIHwgUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+XG4gICAgfCAoKFxuICAgICAgY2VsbDogYW55LFxuICAgICAgcm93OiBhbnksXG4gICAgICByb3dJbmRleDogbnVtYmVyXG4gICAgKSA9PiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVDZWxsRWxlbWVudD4pO1xuICAgIHNvcnQ/OiBib29sZWFuO1xuICAgIHNvcnRGdW5jPzogKGE6IGFueSwgYjogYW55LCBvcmRlcjogc3RyaW5nLCBjb2x1bW46IGFueSkgPT4gbnVtYmVyO1xuICAgIG9uU29ydD86IChjb2x1bW46IGFueSwgc29ydE9yZGVyOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgc29ydENhcmV0PzogYW55O1xuICAgIGVkaXRvcj86IG9iamVjdDtcbiAgICBlZGl0YWJsZT86IGJvb2xlYW4gfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pO1xuICAgIGVkaXRDZWxsU3R5bGU/OlxuICAgIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICBlZGl0Q2VsbENsYXNzZXM/OlxuICAgIHwgc3RyaW5nXG4gICAgfCAoKGNlbGw6IGFueSwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyk7XG4gICAgZWRpdG9yU3R5bGU/OlxuICAgIHwgUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICBlZGl0b3JDbGFzc2VzPzpcbiAgICB8IHN0cmluZ1xuICAgIHwgKChjZWxsOiBhbnksIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpO1xuICAgIGVkaXRvclJlbmRlcmVyPzogKFxuICAgICAgZWRpdG9yUHJvcHM6IGFueSxcbiAgICAgIHZhbHVlOiBhbnksXG4gICAgICByb3c6IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIGNvbHVtbkluZGV4OiBudW1iZXJcbiAgICApID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICB2YWxpZGF0b3I/OiAobmV3VmFsdWU6IGFueSwgcm93OiBhbnksIGNvbHVtbjogYW55KSA9PiBib29sZWFuIHwgc3RyaW5nO1xuICAgIGZpbHRlcj86IGFueTtcbiAgICBmaWx0ZXJSZW5kZXJlcj86IChcbiAgICAgIG9uQ3VzdG9tRmlsdGVyOiAodmFsdWU6IGFueSkgPT4gdm9pZCxcbiAgICAgIGNvbHVtbjogYW55XG4gICAgKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgZmlsdGVyVmFsdWU/OiAoY2VsbDogYW55LCByb3c6IGFueSkgPT4gc3RyaW5nO1xuICAgIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICB9O1xuICBpbmRleDogbnVtYmVyO1xuICBvblNvcnQ/OiAoY29sdW1uOiBhbnkpID0+IHZvaWQ7XG4gIHNvcnRpbmc/OiBib29sZWFuO1xuICBzb3J0T3JkZXI/OiBzdHJpbmc7XG4gIHNvcnRDYXJldD86IGFueTtcbiAgaXNMYXN0U29ydGluZz86IGJvb2xlYW47XG4gIG9uRmlsdGVyPzogKGZpbHRlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIGZpbHRlclBvc2l0aW9uPzogc3RyaW5nO1xuICBjdXJyRmlsdGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIG9uRXh0ZXJuYWxGaWx0ZXI/OiAoY29sdW1uOiBhbnksIGZpbHRlclR5cGU6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gIGdsb2JhbFNvcnRDYXJldD86IChvcmRlcjogc3RyaW5nLCBjb2x1bW46IGFueSkgPT4gUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5jbGFzcyBIZWFkZXJDZWxsIGV4dGVuZHMgZXZlbnREZWxlZ2F0ZXIoQ29tcG9uZW50KTxIZWFkZXJDZWxsUHJvcHM+IHtcbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbHVtbixcbiAgICAgIGluZGV4LFxuICAgICAgb25Tb3J0LFxuICAgICAgc29ydGluZyxcbiAgICAgIHNvcnRPcmRlcixcbiAgICAgIGlzTGFzdFNvcnRpbmcsXG4gICAgICBvbkZpbHRlcixcbiAgICAgIGN1cnJGaWx0ZXJzLFxuICAgICAgZmlsdGVyUG9zaXRpb24sXG4gICAgICBvbkV4dGVybmFsRmlsdGVyLFxuICAgICAgZ2xvYmFsU29ydENhcmV0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3Qge1xuICAgICAgdGV4dCxcbiAgICAgIHNvcnQsXG4gICAgICBzb3J0Q2FyZXQsXG4gICAgICBmaWx0ZXIsXG4gICAgICBmaWx0ZXJSZW5kZXJlcixcbiAgICAgIGhlYWRlclRpdGxlLFxuICAgICAgaGVhZGVyQWxpZ24sXG4gICAgICBoZWFkZXJGb3JtYXR0ZXIsXG4gICAgICBoZWFkZXJFdmVudHMsXG4gICAgICBoZWFkZXJDbGFzc2VzLFxuICAgICAgaGVhZGVyU3R5bGUsXG4gICAgICBoZWFkZXJBdHRycyxcbiAgICAgIGhlYWRlclNvcnRpbmdDbGFzc2VzLFxuICAgICAgaGVhZGVyU29ydGluZ1N0eWxlLFxuICAgIH0gPSBjb2x1bW47XG5cbiAgICBjb25zdCBzb3J0Q2FyZXRmdW5jID0gc29ydENhcmV0IHx8IGdsb2JhbFNvcnRDYXJldDtcblxuICAgIGNvbnN0IGRlbGVnYXRlRXZlbnRzID0gdGhpcy5kZWxlZ2F0ZShoZWFkZXJFdmVudHMpO1xuXG4gICAgY29uc3QgY3VzdG9tQXR0cnMgPSBfLmlzRnVuY3Rpb24oaGVhZGVyQXR0cnMpXG4gICAgICA/IGhlYWRlckF0dHJzKGNvbHVtbiwgaW5kZXgpXG4gICAgICA6IGhlYWRlckF0dHJzIHx8IHt9O1xuXG4gICAgY29uc3QgY2VsbEF0dHJzOiBSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4gPSB7XG4gICAgICAuLi5jdXN0b21BdHRycyxcbiAgICAgIC4uLmRlbGVnYXRlRXZlbnRzLFxuICAgICAgdGFiSW5kZXg6IF8uaXNEZWZpbmVkKGN1c3RvbUF0dHJzLnRhYkluZGV4KSA/IGN1c3RvbUF0dHJzLnRhYkluZGV4IDogMCxcbiAgICB9O1xuXG4gICAgbGV0IHNvcnRTeW1ib2w6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICBsZXQgZmlsdGVyRWxlbWVudDogUmVhY3QuUmVhY3ROb2RlO1xuICAgIGxldCBjZWxsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fTtcbiAgICBsZXQgY2VsbENsYXNzZXMgPSBfLmlzRnVuY3Rpb24oaGVhZGVyQ2xhc3NlcylcbiAgICAgID8gaGVhZGVyQ2xhc3Nlcyhjb2x1bW4sIGluZGV4KVxuICAgICAgOiBoZWFkZXJDbGFzc2VzO1xuXG4gICAgaWYgKGhlYWRlclN0eWxlKSB7XG4gICAgICBjZWxsU3R5bGUgPSBfLmlzRnVuY3Rpb24oaGVhZGVyU3R5bGUpXG4gICAgICAgID8gaGVhZGVyU3R5bGUoY29sdW1uLCBpbmRleClcbiAgICAgICAgOiBoZWFkZXJTdHlsZTtcbiAgICAgIGNlbGxTdHlsZSA9IGNlbGxTdHlsZSA/IHsgLi4uY2VsbFN0eWxlIH0gOiBjZWxsU3R5bGU7XG4gICAgfVxuXG4gICAgaWYgKGhlYWRlclRpdGxlKSB7XG4gICAgICBjZWxsQXR0cnMudGl0bGUgPSBfLmlzRnVuY3Rpb24oaGVhZGVyVGl0bGUpXG4gICAgICAgID8gKGhlYWRlclRpdGxlKGNvbHVtbiwgaW5kZXgpIGFzIHN0cmluZylcbiAgICAgICAgOiB0ZXh0O1xuICAgIH1cblxuICAgIGlmIChoZWFkZXJBbGlnbikge1xuICAgICAgY2VsbFN0eWxlLnRleHRBbGlnbiA9IF8uaXNGdW5jdGlvbihoZWFkZXJBbGlnbilcbiAgICAgICAgPyBoZWFkZXJBbGlnbihjb2x1bW4sIGluZGV4KVxuICAgICAgICA6IGhlYWRlckFsaWduO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBjb25zdCBjdXN0b21DbGljayA9IGNlbGxBdHRycy5vbkNsaWNrO1xuICAgICAgY29uc3QgY3VzdG9tS2V5RG93biA9IGNlbGxBdHRycy5vbktleURvd247XG4gICAgICBjZWxsQXR0cnNbXCJhcmlhLWxhYmVsXCJdID0gc29ydGluZ1xuICAgICAgICA/IGAke3RleHR9IHNvcnQgJHtzb3J0T3JkZXJ9YFxuICAgICAgICA6IGAke3RleHR9IHNvcnRhYmxlYDtcbiAgICAgIGNlbGxBdHRycy5vbktleVVwID0gKGUpID0+IHtcbiAgICAgICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgICAgICBvblNvcnQ/Lihjb2x1bW4pO1xuICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAvLyBFcnJvcjogQXJndW1lbnQgb2YgdHlwZSAnS2V5Ym9hcmRFdmVudDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvXG4gICAgICAgICAgLy8gcGFyYW1ldGVyIG9mIHR5cGUgJ01vdXNlRXZlbnQ8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQsIE1vdXNlRXZlbnQ+Jy5cbiAgICAgICAgICAvLyBpZiAoXy5pc0Z1bmN0aW9uKGN1c3RvbUNsaWNrKSkgY3VzdG9tQ2xpY2soZSk7XG4gICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjdXN0b21LZXlEb3duKSkgY3VzdG9tS2V5RG93bihlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNlbGxBdHRycy5vbkNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgb25Tb3J0Py4oY29sdW1uKTtcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihjdXN0b21DbGljaykpIGN1c3RvbUNsaWNrKGUpO1xuICAgICAgfTtcbiAgICAgIGNlbGxBdHRycy5jbGFzc05hbWUgPSBjcyhjZWxsQXR0cnMuY2xhc3NOYW1lLCBcInNvcnRhYmxlXCIpO1xuXG4gICAgICBpZiAoc29ydGluZykge1xuICAgICAgICBzb3J0U3ltYm9sID0gc29ydENhcmV0ZnVuYyA/IChcbiAgICAgICAgICBzb3J0Q2FyZXRmdW5jKHNvcnRPcmRlciB8fCBTT1JUX0RFU0MsIGNvbHVtbilcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U29ydENhcmV0IG9yZGVyPXtzb3J0T3JkZXIhfSAvPlxuICAgICAgICApO1xuXG4gICAgICAgIGNlbGxDbGFzc2VzID0gY3MoXG4gICAgICAgICAgY2VsbENsYXNzZXMsXG4gICAgICAgICAgXy5pc0Z1bmN0aW9uKGhlYWRlclNvcnRpbmdDbGFzc2VzKVxuICAgICAgICAgICAgPyBoZWFkZXJTb3J0aW5nQ2xhc3Nlcyhjb2x1bW4sIHNvcnRPcmRlciEsIGlzTGFzdFNvcnRpbmchLCBpbmRleClcbiAgICAgICAgICAgIDogaGVhZGVyU29ydGluZ0NsYXNzZXNcbiAgICAgICAgKTtcblxuICAgICAgICBjZWxsU3R5bGUgPSB7XG4gICAgICAgICAgLi4uY2VsbFN0eWxlLFxuICAgICAgICAgIC4uLihfLmlzRnVuY3Rpb24oaGVhZGVyU29ydGluZ1N0eWxlKVxuICAgICAgICAgICAgPyBoZWFkZXJTb3J0aW5nU3R5bGUoY29sdW1uLCBzb3J0T3JkZXIhLCBpc0xhc3RTb3J0aW5nISwgaW5kZXgpXG4gICAgICAgICAgICA6IGhlYWRlclNvcnRpbmdTdHlsZSksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3J0U3ltYm9sID0gc29ydENhcmV0ZnVuYyA/IChcbiAgICAgICAgICBzb3J0Q2FyZXRmdW5jKHVuZGVmaW5lZCwgY29sdW1uKVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTb3J0U3ltYm9sIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNlbGxDbGFzc2VzKSBjZWxsQXR0cnMuY2xhc3NOYW1lID0gY3MoY2VsbEF0dHJzLmNsYXNzTmFtZSwgY2VsbENsYXNzZXMpO1xuICAgIGlmICghXy5pc0VtcHR5T2JqZWN0KGNlbGxTdHlsZSkpIGNlbGxBdHRycy5zdHlsZSA9IGNlbGxTdHlsZTtcblxuICAgIGlmIChmaWx0ZXJQb3NpdGlvbiA9PT0gRklMVEVSU19QT1NJVElPTl9JTkxJTkUpIHtcbiAgICAgIGlmIChmaWx0ZXJSZW5kZXJlcikge1xuICAgICAgICBjb25zdCBvbkN1c3RvbUZpbHRlciA9IG9uRXh0ZXJuYWxGaWx0ZXI/LihcbiAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgZmlsdGVyPy5wcm9wcy50eXBlIHx8IFwiXCJcbiAgICAgICAgKTtcbiAgICAgICAgZmlsdGVyRWxlbWVudCA9IGZpbHRlclJlbmRlcmVyKG9uQ3VzdG9tRmlsdGVyISwgY29sdW1uKTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgICAgIGZpbHRlckVsZW1lbnQgPSAoXG4gICAgICAgICAgPGZpbHRlci5GaWx0ZXJcbiAgICAgICAgICAgIHsuLi5maWx0ZXIucHJvcHN9XG4gICAgICAgICAgICBmaWx0ZXJTdGF0ZT17Y3VyckZpbHRlcnM/Lltjb2x1bW4uZGF0YUZpZWxkXX1cbiAgICAgICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSA9IGhlYWRlckZvcm1hdHRlclxuICAgICAgPyBoZWFkZXJGb3JtYXR0ZXIoY29sdW1uLCBpbmRleCwge1xuICAgICAgICBzb3J0RWxlbWVudDogc29ydFN5bWJvbCxcbiAgICAgICAgZmlsdGVyRWxlbWVudCxcbiAgICAgIH0pXG4gICAgICA6IHRleHQ7XG5cbiAgICBpZiAoaGVhZGVyRm9ybWF0dGVyKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInRoXCIsIGNlbGxBdHRycywgY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJ0aFwiLFxuICAgICAgY2VsbEF0dHJzLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBzb3J0U3ltYm9sLFxuICAgICAgZmlsdGVyRWxlbWVudFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyQ2VsbDtcbiIsImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlbW90ZVJlc29sdmVyIGZyb20gXCIuLi9wcm9wcy1yZXNvbHZlci9yZW1vdGUtcmVzb2x2ZXJcIjtcbmltcG9ydCBkYXRhT3BlcmF0b3IgZnJvbSBcIi4uL3N0b3JlL29wZXJhdG9yc1wiO1xuaW1wb3J0IF8gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBCb290c3RyYXBDb250ZXh0IH0gZnJvbSBcIi4vYm9vdHN0cmFwXCI7XG5pbXBvcnQgY3JlYXRlQ29sdW1uQ29udGV4dCBmcm9tIFwiLi9jb2x1bW4tY29udGV4dFwiO1xuaW1wb3J0IGNyZWF0ZURhdGFDb250ZXh0IGZyb20gXCIuL2RhdGEtY29udGV4dFwiO1xuaW1wb3J0IGNyZWF0ZVJvd0V4cGFuZENvbnRleHQgZnJvbSBcIi4vcm93LWV4cGFuZC1jb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3Rpb25Db250ZXh0IH0gZnJvbSBcIi4vc2VsZWN0aW9uLWNvbnRleHRcIjtcbmltcG9ydCBjcmVhdGVTb3J0Q29udGV4dCBmcm9tIFwiLi9zb3J0LWNvbnRleHRcIjtcblxuY29uc3Qgd2l0aENvbnRleHQgPSAoQmFzZTogYW55KSA9PlxuICBjbGFzcyBCb290c3RyYXBUYWJsZUNvbnRhaW5lciBleHRlbmRzIFJlbW90ZVJlc29sdmVyKEJhc2UpIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLkRhdGFDb250ZXh0ID0gY3JlYXRlRGF0YUNvbnRleHQoKTtcblxuICAgICAgaWYgKHByb3BzLnJlZ2lzdGVyRXhwb3NlZEFQSSkge1xuICAgICAgICBjb25zdCBleHBvc2VkQVBJRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgZXhwb3NlZEFQSUVtaXR0ZXIub24oXG4gICAgICAgICAgXCJnZXQudGFibGUuZGF0YVwiLFxuICAgICAgICAgIChwYXlsb2FkKSA9PiAocGF5bG9hZC5yZXN1bHQgPSB0aGlzLnRhYmxlLmdldERhdGEoKSlcbiAgICAgICAgKTtcbiAgICAgICAgZXhwb3NlZEFQSUVtaXR0ZXIub24oXG4gICAgICAgICAgXCJnZXQuc2VsZWN0ZWQucm93c1wiLFxuICAgICAgICAgIChwYXlsb2FkKSA9PiAocGF5bG9hZC5yZXN1bHQgPSB0aGlzLnNlbGVjdGlvbkNvbnRleHQuZ2V0U2VsZWN0ZWQoKSlcbiAgICAgICAgKTtcbiAgICAgICAgZXhwb3NlZEFQSUVtaXR0ZXIub24oXCJnZXQuZmlsdGVyZWQucm93c1wiLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaENvbnRleHQpIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy5zZWFyY2hDb250ZXh0LmdldFNlYXJjaGVkKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlckNvbnRleHQpIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy5maWx0ZXJDb250ZXh0LmdldEZpbHRlcmVkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWQucmVzdWx0ID0gdGhpcy50YWJsZS5nZXREYXRhKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcHJvcHMucmVnaXN0ZXJFeHBvc2VkQVBJKGV4cG9zZWRBUElFbWl0dGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4gY29sLnNvcnQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5Tb3J0Q29udGV4dCA9IGNyZWF0ZVNvcnRDb250ZXh0KFxuICAgICAgICAgIGRhdGFPcGVyYXRvcixcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlU29ydCxcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlbW90ZVNvcnRDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwcm9wcy5jb2x1bW5Ub2dnbGUgfHxcbiAgICAgICAgcHJvcHMuY29sdW1ucy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2wuaGlkZGVuKS5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5Db2x1bW5Db250ZXh0ID0gY3JlYXRlQ29sdW1uQ29udGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2VsZWN0Um93KSB7XG4gICAgICAgIHRoaXMuU2VsZWN0aW9uQ29udGV4dCA9IGNyZWF0ZVNlbGVjdGlvbkNvbnRleHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmV4cGFuZFJvdykge1xuICAgICAgICB0aGlzLlJvd0V4cGFuZENvbnRleHQgPSBjcmVhdGVSb3dFeHBhbmRDb250ZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5jZWxsRWRpdCAmJiBwcm9wcy5jZWxsRWRpdC5jcmVhdGVDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuQ2VsbEVkaXRDb250ZXh0ID0gcHJvcHMuY2VsbEVkaXQuY3JlYXRlQ29udGV4dChcbiAgICAgICAgICBfLFxuICAgICAgICAgIGRhdGFPcGVyYXRvcixcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlQ2VsbEVkaXQsXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVDZWxsQ2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5maWx0ZXIpIHtcbiAgICAgICAgdGhpcy5GaWx0ZXJDb250ZXh0ID0gcHJvcHMuZmlsdGVyLmNyZWF0ZUNvbnRleHQoXG4gICAgICAgICAgXyxcbiAgICAgICAgICB0aGlzLmlzUmVtb3RlRmlsdGVyaW5nLFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuUGFnaW5hdGlvbkNvbnRleHQgPSBwcm9wcy5wYWdpbmF0aW9uLmNyZWF0ZUNvbnRleHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNlYXJjaCAmJiBwcm9wcy5zZWFyY2guc2VhcmNoQ29udGV4dCkge1xuICAgICAgICB0aGlzLlNlYXJjaENvbnRleHQgPSBwcm9wcy5zZWFyY2guc2VhcmNoQ29udGV4dChcbiAgICAgICAgICBfLFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVTZWFyY2gsXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNldERlcGVuZGVuY3lNb2R1bGVzKSB7XG4gICAgICAgIHByb3BzLnNldERlcGVuZGVuY3lNb2R1bGVzKF8pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIpIHtcbiAgICAgICAgcHJvcHMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIodGhpcy5yZW1vdGVFbWl0dGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUobmV4dFByb3BzOiBhbnkpIHtcbiAgICAgIGlmIChuZXh0UHJvcHMuY29sdW1ucy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2wuc29ydCkubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgdGhpcy5Tb3J0Q29udGV4dCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLlNvcnRDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuU29ydENvbnRleHQgPSBjcmVhdGVTb3J0Q29udGV4dChcbiAgICAgICAgICBkYXRhT3BlcmF0b3IsXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZVNvcnQsXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdGVTb3J0Q2hhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoIW5leHRQcm9wcy5wYWdpbmF0aW9uICYmIHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLlBhZ2luYXRpb25Db250ZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0UHJvcHMucGFnaW5hdGlvbiAmJiAhdGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuUGFnaW5hdGlvbkNvbnRleHQgPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgIHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uLFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlUGFnZUNoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXh0UHJvcHMuY2VsbEVkaXQgJiYgdGhpcy5wcm9wcy5jZWxsRWRpdCkge1xuICAgICAgICB0aGlzLkNlbGxFZGl0Q29udGV4dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobmV4dFByb3BzLmNlbGxFZGl0ICYmICF0aGlzLnByb3BzLmNlbGxFZGl0KSB7XG4gICAgICAgIHRoaXMuQ2VsbEVkaXRDb250ZXh0ID0gbmV4dFByb3BzLmNlbGxFZGl0LmNyZWF0ZUNvbnRleHQoXG4gICAgICAgICAgXyxcbiAgICAgICAgICBkYXRhT3BlcmF0b3IsXG4gICAgICAgICAgdGhpcy5pc1JlbW90ZUNlbGxFZGl0LFxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3RlQ2VsbENoYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlckJhc2UoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IHtcbiAgICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55LFxuICAgICAgICBjb2x1bW5Ub2dnbGVQcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPEJhc2VcbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+IHsgdGhpcy50YWJsZSA9IG47IH19XG4gICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgey4uLnNvcnRQcm9wc31cbiAgICAgICAgICB7Li4uZmlsdGVyUHJvcHN9XG4gICAgICAgICAgey4uLnNlYXJjaFByb3BzfVxuICAgICAgICAgIHsuLi5wYWdpbmF0aW9uUHJvcHN9XG4gICAgICAgICAgey4uLmNvbHVtblRvZ2dsZVByb3BzfVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhDb2x1bW5Db250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczogYW55LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5Db2x1bW5Db250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICB0b2dnbGVzPXtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlID8gdGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUudG9nZ2xlcyA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhpcy5Db2x1bW5Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgeyhjb2x1bW5Ub2dnbGVQcm9wczogYW55KSA9PlxuICAgICAgICAgICAgICBiYXNlKFxuICAgICAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzLFxuICAgICAgICAgICAgICAgIGNvbHVtblRvZ2dsZVByb3BzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoaXMuQ29sdW1uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLkNvbHVtbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhTZWxlY3Rpb25Db250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczoge1xuICAgICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICAgICAgc29ydFByb3BzOiBhbnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueVxuICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICBzZWFyY2hQcm9wczogYW55LFxuICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgcGFnaW5hdGlvblByb3BzOiBhbnlcbiAgICAgICkgPT4gKFxuICAgICAgICA8dGhpcy5TZWxlY3Rpb25Db250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+IHsgdGhpcy5zZWxlY3Rpb25Db250ZXh0ID0gbjsgfX1cbiAgICAgICAgICBzZWxlY3RSb3c9e3RoaXMucHJvcHMuc2VsZWN0Um93fVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7YmFzZShcbiAgICAgICAgICAgIHJvb3RQcm9wcyxcbiAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgc2VhcmNoUHJvcHMsXG4gICAgICAgICAgICBzb3J0UHJvcHMsXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICApfVxuICAgICAgICA8L3RoaXMuU2VsZWN0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aFJvd0V4cGFuZENvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiB7XG4gICAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM6IGFueSxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wczogYW55XG4gICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICBwYWdpbmF0aW9uUHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlJvd0V4cGFuZENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB7Li4uYmFzZVByb3BzfVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dFeHBhbmRDb250ZXh0ID0gbjtcbiAgICAgICAgICB9fVxuICAgICAgICAgIGV4cGFuZFJvdz17dGhpcy5wcm9wcy5leHBhbmRSb3d9XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wcyxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgc29ydFByb3BzLFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtiYXNlKFxuICAgICAgICAgICAgcm9vdFByb3BzLFxuICAgICAgICAgICAgZmlsdGVyUHJvcHMsXG4gICAgICAgICAgICBzZWFyY2hQcm9wcyxcbiAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wc1xuICAgICAgICAgICl9XG4gICAgICAgIDwvdGhpcy5Sb3dFeHBhbmRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoUGFnaW5hdGlvbkNvbnRleHQoYmFzZTogYW55KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByb290UHJvcHM6IHtcbiAgICAgICAgICBnZXREYXRhOiAoXG4gICAgICAgICAgICBmaWx0ZXJQcm9wczogYW55LFxuICAgICAgICAgICAgc2VhcmNoUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNvcnRQcm9wczogYW55LFxuICAgICAgICAgICAgcGFnaW5hdGlvblByb3BzPzogYW55XG4gICAgICAgICAgKSA9PiBhbnk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgIHNvcnRQcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuUGFnaW5hdGlvbkNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+IHsgdGhpcy5wYWdpbmF0aW9uQ29udGV4dCA9IG47IH19XG4gICAgICAgICAgcGFnaW5hdGlvbj17dGhpcy5wcm9wcy5wYWdpbmF0aW9ufVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKGZpbHRlclByb3BzLCBzZWFyY2hQcm9wcywgc29ydFByb3BzKX1cbiAgICAgICAgICBib290c3RyYXA0PXt0aGlzLnByb3BzLmJvb3RzdHJhcDR9XG4gICAgICAgICAgaXNSZW1vdGVQYWdpbmF0aW9uPXt0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbn1cbiAgICAgICAgICByZW1vdGVFbWl0dGVyPXt0aGlzLnJlbW90ZUVtaXR0ZXJ9XG4gICAgICAgICAgb25EYXRhU2l6ZUNoYW5nZT17dGhpcy5wcm9wcy5vbkRhdGFTaXplQ2hhbmdlfVxuICAgICAgICAgIHRhYmxlSWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhpcy5QYWdpbmF0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgIHsocGFnaW5hdGlvblByb3BzOiBhbnkpID0+XG4gICAgICAgICAgICAgIGJhc2UoXG4gICAgICAgICAgICAgICAgcm9vdFByb3BzLFxuICAgICAgICAgICAgICAgIGZpbHRlclByb3BzLFxuICAgICAgICAgICAgICAgIHNlYXJjaFByb3BzLFxuICAgICAgICAgICAgICAgIHNvcnRQcm9wcyxcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdGhpcy5QYWdpbmF0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLlBhZ2luYXRpb25Db250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXJXaXRoU29ydENvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcm9vdFByb3BzOiB7XG4gICAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgICAgIHNlYXJjaFByb3BzOiBhbnksXG4gICAgICAgICAgICBzb3J0UHJvcHM/OiBhbnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM/OiBhbnlcbiAgICAgICAgICApID0+IGFueTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUHJvcHM6IGFueSxcbiAgICAgICAgc2VhcmNoUHJvcHM6IGFueVxuICAgICAgKSA9PiAoXG4gICAgICAgIDx0aGlzLlNvcnRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+IHsgdGhpcy5zb3J0Q29udGV4dCA9IG47IH19XG4gICAgICAgICAgZGVmYXVsdFNvcnRlZD17dGhpcy5wcm9wcy5kZWZhdWx0U29ydGVkfVxuICAgICAgICAgIGRlZmF1bHRTb3J0RGlyZWN0aW9uPXt0aGlzLnByb3BzLmRlZmF1bHRTb3J0RGlyZWN0aW9ufVxuICAgICAgICAgIHNvcnQ9e3RoaXMucHJvcHMuc29ydH1cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YShmaWx0ZXJQcm9wcywgc2VhcmNoUHJvcHMpfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuU29ydENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KHNvcnRQcm9wczogYW55KSA9PlxuICAgICAgICAgICAgICBiYXNlKHJvb3RQcm9wcywgZmlsdGVyUHJvcHMsIHNlYXJjaFByb3BzLCBzb3J0UHJvcHMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90aGlzLlNvcnRDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICA8L3RoaXMuU29ydENvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhTZWFyY2hDb250ZXh0KGJhc2U6IGFueSwgYmFzZVByb3BzOiBhbnkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJvb3RQcm9wczoge1xuICAgICAgICAgIGdldERhdGE6IChcbiAgICAgICAgICAgIGZpbHRlclByb3BzOiBhbnksXG4gICAgICAgICAgICBzZWFyY2hQcm9wcz86IGFueSxcbiAgICAgICAgICAgIHNvcnRQcm9wcz86IGFueSxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcz86IGFueVxuICAgICAgICAgICkgPT4gYW55O1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQcm9wczogYW55XG4gICAgICApID0+IChcbiAgICAgICAgPHRoaXMuU2VhcmNoQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiB7IHRoaXMuc2VhcmNoQ29udGV4dCA9IG47IH19XG4gICAgICAgICAgZGF0YT17cm9vdFByb3BzLmdldERhdGEoZmlsdGVyUHJvcHMpfVxuICAgICAgICAgIHNlYXJjaFRleHQ9e3RoaXMucHJvcHMuc2VhcmNoLnNlYXJjaFRleHR9XG4gICAgICAgICAgZGF0YUNoYW5nZUxpc3RlbmVyPXt0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lcn1cbiAgICAgICAgPlxuICAgICAgICAgIDx0aGlzLlNlYXJjaENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KHNlYXJjaFByb3BzOiBhbnkpID0+IGJhc2Uocm9vdFByb3BzLCBmaWx0ZXJQcm9wcywgc2VhcmNoUHJvcHMpfVxuICAgICAgICAgIDwvdGhpcy5TZWFyY2hDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICA8L3RoaXMuU2VhcmNoQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyV2l0aEZpbHRlckNvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChyb290UHJvcHM6IGFueSkgPT4gKFxuICAgICAgICA8dGhpcy5GaWx0ZXJDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgey4uLmJhc2VQcm9wc31cbiAgICAgICAgICByZWY9eyhuOiBhbnkpID0+IHsgdGhpcy5maWx0ZXJDb250ZXh0ID0gbjsgfX1cbiAgICAgICAgICBkYXRhPXtyb290UHJvcHMuZ2V0RGF0YSgpfVxuICAgICAgICAgIGZpbHRlcj17dGhpcy5wcm9wcy5maWx0ZXIub3B0aW9ucyB8fCB7fX1cbiAgICAgICAgICBkYXRhQ2hhbmdlTGlzdGVuZXI9e3RoaXMucHJvcHMuZGF0YUNoYW5nZUxpc3RlbmVyfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoaXMuRmlsdGVyQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgIHsoZmlsdGVyUHJvcHM6IGFueSkgPT4gYmFzZShyb290UHJvcHMsIGZpbHRlclByb3BzKX1cbiAgICAgICAgICA8L3RoaXMuRmlsdGVyQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgPC90aGlzLkZpbHRlckNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhDZWxsRWRpdENvbnRleHQoYmFzZTogYW55LCBiYXNlUHJvcHM6IGFueSkge1xuICAgICAgcmV0dXJuIChyb290UHJvcHM6IHtcbiAgICAgICAgZ2V0RGF0YTogKFxuICAgICAgICAgIGZpbHRlclByb3BzPzogYW55LFxuICAgICAgICAgIHNlYXJjaFByb3BzPzogYW55LFxuICAgICAgICAgIHNvcnRQcm9wcz86IGFueSxcbiAgICAgICAgICBwYWdpbmF0aW9uUHJvcHM/OiBhbnlcbiAgICAgICAgKSA9PiBhbnk7XG4gICAgICB9KSA9PiAoXG4gICAgICAgIDx0aGlzLkNlbGxFZGl0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICAgIHsuLi5iYXNlUHJvcHN9XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiB7IHRoaXMuY2VsbEVkaXRDb250ZXh0ID0gbjsgfX1cbiAgICAgICAgICBzZWxlY3RSb3c9e3RoaXMucHJvcHMuc2VsZWN0Um93fVxuICAgICAgICAgIGNlbGxFZGl0PXt0aGlzLnByb3BzLmNlbGxFZGl0fVxuICAgICAgICAgIGRhdGE9e3Jvb3RQcm9wcy5nZXREYXRhKCl9XG4gICAgICAgID5cbiAgICAgICAgICB7YmFzZShyb290UHJvcHMpfVxuICAgICAgICA8L3RoaXMuQ2VsbEVkaXRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IGtleUZpZWxkLCBjb2x1bW5zLCBib290c3RyYXA0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgYmFzZVByb3BzID0geyBrZXlGaWVsZCwgY29sdW1ucyB9O1xuXG4gICAgICBsZXQgYmFzZSA9IHRoaXMucmVuZGVyQmFzZSgpO1xuXG4gICAgICBpZiAodGhpcy5Db2x1bW5Db250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhDb2x1bW5Db250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlNlbGVjdGlvbkNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aFNlbGVjdGlvbkNvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuUm93RXhwYW5kQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoUm93RXhwYW5kQ29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5QYWdpbmF0aW9uQ29udGV4dCkge1xuICAgICAgICBiYXNlID0gdGhpcy5yZW5kZXJXaXRoUGFnaW5hdGlvbkNvbnRleHQoYmFzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlNvcnRDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhTb3J0Q29udGV4dChiYXNlLCBiYXNlUHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5TZWFyY2hDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhTZWFyY2hDb250ZXh0KGJhc2UsIGJhc2VQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkZpbHRlckNvbnRleHQpIHtcbiAgICAgICAgYmFzZSA9IHRoaXMucmVuZGVyV2l0aEZpbHRlckNvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuQ2VsbEVkaXRDb250ZXh0KSB7XG4gICAgICAgIGJhc2UgPSB0aGlzLnJlbmRlcldpdGhDZWxsRWRpdENvbnRleHQoYmFzZSwgYmFzZVByb3BzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEJvb3RzdHJhcENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgYm9vdHN0cmFwNCB9fT5cbiAgICAgICAgICA8dGhpcy5EYXRhQ29udGV4dC5Qcm92aWRlciB7Li4uYmFzZVByb3BzfSBkYXRhPXt0aGlzLnByb3BzLmRhdGF9PlxuICAgICAgICAgICAgPHRoaXMuRGF0YUNvbnRleHQuQ29uc3VtZXI+e2Jhc2V9PC90aGlzLkRhdGFDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIDwvdGhpcy5EYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9Cb290c3RyYXBDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhDb250ZXh0O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBGSUxURVJTX1BPU0lUSU9OX1RPUCB9IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgRmlsdGVyc0NlbGwgZnJvbSBcIi4vZmlsdGVycy1jZWxsXCI7XG5pbXBvcnQgUm93VGVtcGxhdGUgZnJvbSBcIi4vcm93L3Jvdy10ZW1wbGF0ZVwiO1xuXG5pbnRlcmZhY2UgRmlsdGVyc1Byb3BzIHtcbiAgY29sdW1uczogYW55W107XG4gIG9uRmlsdGVyPzogKGZpbHRlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZmlsdGVyUG9zaXRpb24/OiBzdHJpbmc7XG4gIGN1cnJGaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgb25FeHRlcm5hbEZpbHRlcj86IChjb2x1bW46IGFueSwgZmlsdGVyVHlwZTogc3RyaW5nKSA9PiAodmFsdWU6IGFueSkgPT4gRnVuY3Rpb247XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc2VsZWN0Um93PzogYW55O1xuICBleHBhbmRSb3c/OiBhbnk7XG4gIG9uU29ydD86IChmaWx0ZXJEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xufVxuXG5jb25zdCBGaWx0ZXJzOiBSZWFjdC5GQzxGaWx0ZXJzUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2x1bW5zLFxuICAgIG9uRmlsdGVyLFxuICAgIGN1cnJGaWx0ZXJzLFxuICAgIGZpbHRlclBvc2l0aW9uID0gRklMVEVSU19QT1NJVElPTl9UT1AsXG4gICAgb25FeHRlcm5hbEZpbHRlcixcbiAgICBjbGFzc05hbWUsXG4gICAgc2VsZWN0Um93LFxuICAgIGV4cGFuZFJvdyxcbiAgfSA9IHByb3BzO1xuXG4gIGZ1bmN0aW9uIHJlbmRlckNvbnRlbnQoKSB7XG4gICAgY29uc3QgZmlsdGVyQ29sdW1uczogUmVhY3QuUmVhY3RFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgc2hvd0ZpbHRlcnNSb3cgPSBmYWxzZTtcblxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBmaWx0ZXJDb2x1bW5zLnB1c2goXG4gICAgICAgIDxGaWx0ZXJzQ2VsbFxuICAgICAgICAgIGluZGV4PXtpfVxuICAgICAgICAgIGtleT17Y29sdW1uLmRhdGFGaWVsZH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICBjdXJyRmlsdGVycz17Y3VyckZpbHRlcnN9XG4gICAgICAgICAgb25FeHRlcm5hbEZpbHRlcj17b25FeHRlcm5hbEZpbHRlcn1cbiAgICAgICAgICBvbkZpbHRlcj17b25GaWx0ZXJ9XG4gICAgICAgIC8+XG4gICAgICApO1xuXG4gICAgICBpZiAoY29sdW1uLmZpbHRlclJlbmRlcmVyIHx8IGNvbHVtbi5maWx0ZXIpIHtcbiAgICAgICAgaWYgKCFzaG93RmlsdGVyc1Jvdykge1xuICAgICAgICAgIHNob3dGaWx0ZXJzUm93ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJDb2x1bW5zO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGJvZHlcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICBmaWx0ZXJQb3NpdGlvbiA9PT0gRklMVEVSU19QT1NJVElPTl9UT1BcbiAgICAgICAgICAgID8gXCJ0YWJsZS1oZWFkZXItZ3JvdXBcIlxuICAgICAgICAgICAgOiBcInRhYmxlLWZvb3Rlci1ncm91cFwiLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8Um93VGVtcGxhdGVcbiAgICAgICAgcmVuZGVyQ29udGVudD17cmVuZGVyQ29udGVudH1cbiAgICAgICAgc2VsZWN0Um93PXtzZWxlY3RSb3d9XG4gICAgICAgIGV4cGFuZFJvdz17ZXhwYW5kUm93fVxuICAgICAgICBjZWxsRWw9XCJ0ZFwiXG4gICAgICAvPlxuICAgIDwvdGJvZHk+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJzO1xuIiwiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBfIGZyb20gXCIuLi91dGlsc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoRXh0ZW5kQmFzZTogYW55KSA9PlxuICBjbGFzcyBSZW1vdGVSZXNvbHZlciBleHRlbmRzIENvbXBvbmVudDx0eXBlb2YgRXh0ZW5kQmFzZT4ge1xuICAgIHJlbW90ZUVtaXR0ZXI6IEV2ZW50RW1pdHRlcjtcblxuICAgIERhdGFDb250ZXh0OiBhbnk7XG4gICAgQ29sdW1uQ29udGV4dDogYW55O1xuICAgIFNlbGVjdGlvbkNvbnRleHQ6IGFueTtcbiAgICBTZWFyY2hDb250ZXh0OiBhbnk7XG4gICAgRmlsdGVyQ29udGV4dDogYW55O1xuICAgIFJvd0V4cGFuZENvbnRleHQ6IGFueTtcbiAgICBDZWxsRWRpdENvbnRleHQ6IGFueTtcbiAgICBQYWdpbmF0aW9uQ29udGV4dDogYW55O1xuICAgIFNvcnRDb250ZXh0OiBhbnk7XG4gICAgVGFibGU6IGFueTtcblxuICAgIGRhdGFDb250ZXh0OiBhbnk7XG4gICAgY29sdW1uQ29udGV4dDogYW55O1xuICAgIHNlbGVjdGlvbkNvbnRleHQ6IGFueTtcbiAgICBzZWFyY2hDb250ZXh0OiBhbnk7XG4gICAgZmlsdGVyQ29udGV4dDogYW55O1xuICAgIHJvd0V4cGFuZENvbnRleHQ6IGFueTtcbiAgICBjZWxsRWRpdENvbnRleHQ6IGFueTtcbiAgICBwYWdpbmF0aW9uQ29udGV4dDogYW55O1xuICAgIHNvcnRDb250ZXh0OiBhbnk7XG4gICAgdGFibGU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMucmVtb3RlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgIHRoaXMucmVtb3RlRW1pdHRlci5vbihcInBhZ2luYXRpb25DaGFuZ2VcIiwgdGhpcy5oYW5kbGVSZW1vdGVQYWdlQ2hhbmdlKTtcbiAgICAgIHRoaXMucmVtb3RlRW1pdHRlci5vbihcImlzUmVtb3RlUGFnaW5hdGlvblwiLCB0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0TmV3ZXN0U3RhdGUgPSAoc3RhdGU6IGFueSA9IHt9KSA9PiB7XG4gICAgICBsZXQgc29ydE9yZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgc29ydEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgcGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHNpemVQZXJQYWdlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgc2VhcmNoVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGZpbHRlcnM6IGFueSA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5zb3J0Q29udGV4dCkge1xuICAgICAgICBzb3J0T3JkZXIgPSB0aGlzLnNvcnRDb250ZXh0LnN0YXRlLnNvcnRPcmRlcjtcbiAgICAgICAgc29ydEZpZWxkID0gdGhpcy5zb3J0Q29udGV4dC5zdGF0ZS5zb3J0Q29sdW1uXG4gICAgICAgICAgPyB0aGlzLnNvcnRDb250ZXh0LnN0YXRlLnNvcnRDb2x1bW4uZGF0YUZpZWxkXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maWx0ZXJDb250ZXh0KSB7XG4gICAgICAgIGZpbHRlcnMgPSB0aGlzLmZpbHRlckNvbnRleHQuY3VyckZpbHRlcnM7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db250ZXh0KSB7XG4gICAgICAgIHBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db250ZXh0LmN1cnJQYWdlO1xuICAgICAgICBzaXplUGVyUGFnZSA9IHRoaXMucGFnaW5hdGlvbkNvbnRleHQuY3VyclNpemVQZXJQYWdlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zZWFyY2hDb250ZXh0KSB7XG4gICAgICAgIHNlYXJjaFRleHQgPSB0aGlzLnByb3BzLnNlYXJjaC5zZWFyY2hUZXh0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3J0T3JkZXIsXG4gICAgICAgIHNvcnRGaWVsZCxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgcGFnZSxcbiAgICAgICAgc2l6ZVBlclBhZ2UsXG4gICAgICAgIHNlYXJjaFRleHQsXG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBkYXRhOiB0aGlzLnByb3BzLmRhdGEsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBpc1JlbW90ZVNlYXJjaCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVtb3RlID09PSB0cnVlIHx8XG4gICAgICAgIChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLnNlYXJjaCkgfHxcbiAgICAgICAgdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaXNSZW1vdGVQYWdpbmF0aW9uID0gKGU6IGFueSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IHJlbW90ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGUucmVzdWx0ID0gcmVtb3RlID09PSB0cnVlIHx8IChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLnBhZ2luYXRpb24pO1xuICAgICAgcmV0dXJuIGUucmVzdWx0O1xuICAgIH07XG5cbiAgICBpc1JlbW90ZUZpbHRlcmluZyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVtb3RlID09PSB0cnVlIHx8XG4gICAgICAgIChfLmlzT2JqZWN0KHJlbW90ZSkgJiYgcmVtb3RlLmZpbHRlcikgfHxcbiAgICAgICAgdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaXNSZW1vdGVTb3J0ID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW1vdGUgfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZW1vdGUgPT09IHRydWUgfHxcbiAgICAgICAgKF8uaXNPYmplY3QocmVtb3RlKSAmJiByZW1vdGUuc29ydCkgfHxcbiAgICAgICAgdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaXNSZW1vdGVDZWxsRWRpdCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVtb3RlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHJlbW90ZSA9PT0gdHJ1ZSB8fCAoXy5pc09iamVjdChyZW1vdGUpICYmIHJlbW90ZS5jZWxsRWRpdCk7XG4gICAgfTtcblxuICAgIGhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UgPSAocGFnZTogbnVtYmVyLCBzaXplUGVyUGFnZTogbnVtYmVyKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoXG4gICAgICAgIFwicGFnaW5hdGlvblwiLFxuICAgICAgICB0aGlzLmdldE5ld2VzdFN0YXRlKHsgcGFnZSwgc2l6ZVBlclBhZ2UgfSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGhhbmRsZVJlbW90ZUZpbHRlckNoYW5nZSA9IChmaWx0ZXJzOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlOiB7IGZpbHRlcnM6IGFueTsgcGFnZT86IG51bWJlciB9ID0geyBmaWx0ZXJzIH07XG4gICAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMgfHwge307XG4gICAgICAgIG5ld1N0YXRlLnBhZ2UgPSBfLmlzRGVmaW5lZChvcHRpb25zLnBhZ2VTdGFydEluZGV4KVxuICAgICAgICAgID8gb3B0aW9ucy5wYWdlU3RhcnRJbmRleFxuICAgICAgICAgIDogMTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMub25UYWJsZUNoYW5nZShcImZpbHRlclwiLCB0aGlzLmdldE5ld2VzdFN0YXRlKG5ld1N0YXRlKSk7XG4gICAgfTtcblxuICAgIGhhbmRsZVJlbW90ZVNvcnRDaGFuZ2UgPSAoc29ydEZpZWxkOiBzdHJpbmcsIHNvcnRPcmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uVGFibGVDaGFuZ2UoXG4gICAgICAgIFwic29ydFwiLFxuICAgICAgICB0aGlzLmdldE5ld2VzdFN0YXRlKHsgc29ydEZpZWxkLCBzb3J0T3JkZXIgfSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGhhbmRsZVJlbW90ZUNlbGxDaGFuZ2UgPSAocm93SWQ6IGFueSwgZGF0YUZpZWxkOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGNlbGxFZGl0ID0geyByb3dJZCwgZGF0YUZpZWxkLCBuZXdWYWx1ZSB9O1xuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKFwiY2VsbEVkaXRcIiwgdGhpcy5nZXROZXdlc3RTdGF0ZSh7IGNlbGxFZGl0IH0pKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlID0gKHNlYXJjaFRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5vblRhYmxlQ2hhbmdlKFwic2VhcmNoXCIsIHRoaXMuZ2V0TmV3ZXN0U3RhdGUoeyBzZWFyY2hUZXh0IH0pKTtcbiAgICB9O1xuICB9O1xuIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IChFeHRlbmRCYXNlOiBhbnkpID0+XG4gIGNsYXNzIENvbHVtblJlc29sdmVyIGV4dGVuZHMgQ29tcG9uZW50PHR5cGVvZiBFeHRlbmRCYXNlPiB7XG4gICAgdmlzaWJsZUNvbHVtblNpemUoaW5jbHVkZVNlbGVjdENvbHVtbiA9IHRydWUpIHtcbiAgICAgIGxldCBjb2x1bW5MZW47XG4gICAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUgJiYgdGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUudG9nZ2xlcykge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUudG9nZ2xlcztcbiAgICAgICAgY29sdW1uTGVuID0gT2JqZWN0LmtleXMoY29sdW1ucykuZmlsdGVyKChuYW1lKSA9PiBjb2x1bW5zW25hbWVdKS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW5MZW4gPSB0aGlzLnByb3BzLmNvbHVtbnMuZmlsdGVyKChjOiBhbnkpID0+ICFjLmhpZGRlbikubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKCFpbmNsdWRlU2VsZWN0Q29sdW1uKSByZXR1cm4gY29sdW1uTGVuO1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93ICYmICF0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uKSB7XG4gICAgICAgIGNvbHVtbkxlbiArPSAxO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMuZXhwYW5kUm93ICYmIHRoaXMucHJvcHMuZXhwYW5kUm93LnNob3dFeHBhbmRDb2x1bW4pIHtcbiAgICAgICAgY29sdW1uTGVuICs9IDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sdW1uTGVuO1xuICAgIH1cbiAgfTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NzIzKTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzU0NDJfXyIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzYwMDNfXyIsIkV4cGFuZFJvdyIsIkNvbXBvbmVudCIsIm5vZGVSZWYiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3VwZXIiLCJ0aGlzIiwiY3JlYXRlUmVmIiwicmVuZGVyIiwiY2hpbGRyZW4iLCJleHBhbmRlZCIsIm9uQ2xvc2VkIiwiY2xhc3NOYW1lIiwicmVzdCIsIkNTU1RyYW5zaXRpb24iLCJhcHBlYXIiLCJpbiIsInRpbWVvdXQiLCJjbGFzc05hbWVzIiwib25FeGl0ZWQiLCJyZWYiLCJvcmRlciIsIm9yZGVyQ2xhc3MiLCJkcm9wdXAiLCJTT1JUX0FTQyIsIkJvb3RzdHJhcENvbnRleHQiLCJDb25zdW1lciIsImJvb3RzdHJhcDQiLCJjb250ZW50IiwiY29sU3BhbiIsImluZGV4IiwiY29sdW1uIiwiY3VyckZpbHRlcnMiLCJvbkV4dGVybmFsRmlsdGVyIiwib25GaWx0ZXIiLCJmaWx0ZXIiLCJmaWx0ZXJFbG0iLCJjZWxsQXR0cnMiLCJjZWxsU3R5bGUiLCJzdHlsZSIsImhlYWRlckFsaWduIiwidGV4dEFsaWduIiwiaXNGdW5jdGlvbiIsImZpbHRlclJlbmRlcmVyIiwib25DdXN0b21GaWx0ZXIiLCJ0eXBlIiwiRmlsdGVyIiwiZmlsdGVyU3RhdGUiLCJkYXRhRmllbGQiLCJjcmVhdGVFbGVtZW50IiwiRXh0ZW5kQmFzZSIsInNob3VsZFVwZGF0ZUJ5Q2VsbEVkaXRpbmciLCJuZXh0UHJvcHMiLCJjbGlja1RvRWRpdCIsImRiY2xpY2tUb0VkaXQiLCJlZGl0aW5nUm93SWR4Iiwicm93SW5kZXgiLCJzaG91bGRVcGRhdGVkQnlTZWxmUHJvcHMiLCJpc0VxdWFsIiwiYXR0cnMiLCJzaG91bGRVcGRhdGVCeUNvbHVtbnNGb3JTaW1wbGVDaGVjayIsImNvbHVtbnMiLCJsZW5ndGgiLCJpIiwic2hvdWxkVXBkYXRlZEJ5Tm9ybWFsUHJvcHMiLCJlZGl0YWJsZSIsInJvdyIsInNob3VsZFVwZGF0ZUNoaWxkIiwic2hvdWxkUm93Q29udGVudFVwZGF0ZSIsIm1hdGNoUm93Iiwia2V5RmllbGQiLCJpZCIsImdldCIsImdldFJvd0J5Um93SWQiLCJkYXRhIiwiZmluZCIsIlJvd0FnZ3JlZ2F0b3IiLCJSb3dFdmVudERlbGVnYXRlciIsImNsaWNrTnVtIiwic2hvdWxkVXBkYXRlUm93Q29udGVudCIsImNyZWF0ZUNsaWNrRXZlbnRIYW5kbGVyIiwiYmluZCIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsInNlbGVjdGVkIiwiZXhwYW5kYWJsZSIsInNlbGVjdGFibGUiLCJzZWxlY3RSb3ciLCJoaWRlU2VsZWN0Q29sdW1uIiwiaXNSZW5kZXJGdW5jdGlvbkNvbHVtbkluTGVmdCIsInBvc2l0aW9uIiwiSU5ESUNBVE9SX1BPU0lUSU9OX0xFRlQiLCJleHBhbmRSb3ciLCJ2aXNpYmxlQ29sdW1uU2l6ZSIsInRhYkluZGV4Q2VsbCIsImtleSIsInNlbGVjdENvbHVtblBvc2l0aW9uIiwiY2xpY2tUb1NlbGVjdCIsInNob3dFeHBhbmRDb2x1bW4iLCJleHBhbmRDb2x1bW5Qb3NpdGlvbiIsIm5ld0F0dHJzIiwiZGVsZWdhdGUiLCJyZW5kZXJlciIsIm9uQ2xpY2siLCJ0YWJJbmRleFN0YXJ0IiwiY2hpbGRyZW5zIiwic2hvdWxkVXBkYXRlIiwic2VsZWN0Q2VsbCIsInJvd0tleSIsImRpc2FibGVkIiwidGFiSW5kZXgiLCJ1bnNoaWZ0IiwicHVzaCIsImV4cGFuZENlbGwiLCJFeHBhbmRDZWxsIiwiaGFuZGxlQ2xpY2siLCJlIiwib25Sb3dFeHBhbmQiLCJzdG9wUHJvcGFnYXRpb24iLCJleHBhbmRDb2x1bW5SZW5kZXJlciIsInVuZGVmaW5lZCIsIkJvb3RzdHJhcFRhYmxlIiwidmFsaWRhdGVQcm9wcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm9uRGF0YVNpemVDaGFuZ2UiLCJwYWdpbmF0aW9uIiwiZGF0YVNpemUiLCJnZXREYXRhIiwidmlzaWJsZVJvd3MiLCJsb2FkaW5nIiwib3ZlcmxheSIsIkxvYWRpbmdPdmVybGF5IiwicmVuZGVyVGFibGUiLCJjbGFzc2VzIiwic3RyaXBlZCIsImhvdmVyIiwiYm9yZGVyZWQiLCJjb25kZW5zZWQiLCJub0RhdGFJbmRpY2F0aW9uIiwiY2FwdGlvbiIsInJvd1N0eWxlIiwicm93Q2xhc3NlcyIsIndyYXBwZXJDbGFzc2VzIiwicm93RXZlbnRzIiwibW9kZSIsIlJPV19TRUxFQ1RfRElTQUJMRUQiLCJub25FeHBhbmRhYmxlIiwiY2VsbEVkaXQiLCJub25FZGl0YWJsZVJvd3MiLCJmaWx0ZXJQb3NpdGlvbiIsIkZJTFRFUlNfUE9TSVRJT05fSU5MSU5FIiwidGFibGVXcmFwcGVyQ2xhc3MiLCJ0YWJsZUNsYXNzIiwiaGFzRmlsdGVycyIsInNvbWUiLCJjb2wiLCJoYXNGb290ZXIiLCJoYXMiLCJ0YWJsZUNhcHRpb24iLCJoZWFkZXJDbGFzc2VzIiwiaGVhZGVyV3JhcHBlckNsYXNzZXMiLCJzb3J0RmllbGQiLCJzb3J0T3JkZXIiLCJvblNvcnQiLCJnbG9iYWxTb3J0Q2FyZXQiLCJzb3J0Iiwic29ydENhcmV0IiwiZmlsdGVyc0NsYXNzZXMiLCJib2R5Q2xhc3NlcyIsImlzRW1wdHkiLCJmb290ZXJDbGFzc2VzIiwicmVuZGVyQ29udGVudCIsImNlbGxFbCIsIlNlbGVjdGlvbkNlbGwiLCJzZWxlY3RDb2x1bW5TdHlsZSIsImlucHV0VHlwZSIsIm9uUm93U2VsZWN0IiwiUk9XX1NFTEVDVF9TSU5HTEUiLCJzZWxlY3Rpb25SZW5kZXJlciIsImNoZWNrZWQiLCJyb3dpbmRleCIsInJvd2tleSIsIm9uQ2hhbmdlIiwiaXNBbnlFeHBhbmRzIiwieCIsImV4cGFuZGFibGVLZXlzIiwic2tpcHMiLCJtYXAiLCJjb250YWlucyIsImdldEV4cGFuZGVkUm93cyIsImsiLCJSb3dFeHBhbmRDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsImlzQ2xvc2luZyIsIm9uQWxsUm93RXhwYW5kIiwiUm93RXhwYW5kUHJvdmlkZXIiLCJzdGF0ZSIsImNsb3NlZFJvdyIsInNldFN0YXRlIiwidmFsdWUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJwcmV2U3RhdGUiLCJuZXh0RXhwYW5kZWQiLCJyb3dJZCIsInJlZHVjZSIsImFjYyIsImN1ciIsImhhbmRsZVJvd0V4cGFuZCIsImlzRXhwYW5kZWQiLCJvbkV4cGFuZCIsIm9ubHlPbmVFeHBhbmRpbmciLCJjdXJyRXhwYW5kZWQiLCJjdXJySXNDbG9zaW5nIiwiY29uY2F0IiwiaGFuZGxlQWxsUm93RXhwYW5kIiwiZXhwYW5kQWxsIiwib25FeHBhbmRBbGwiLCJzIiwiZCIsIlByb3ZpZGVyIiwiY2FwdGlvblNpZGUiLCJldmVudHMiLCJDZWxsRXZlbnREZWxlZ2F0ZXIiLCJjcmVhdGVEZWZhdWx0RXZlbnRIYW5kbGVyIiwiY2IiLCJjb2x1bW5JbmRleCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYXR0ciIsImluY2x1ZGVzIiwidHlwZUNvbnZlcnQiLCJUWVBFX1NUUklORyIsIlN0cmluZyIsIlRZUEVfTlVNQkVSIiwiTnVtYmVyIiwiVFlQRV9CT09MRUFOIiwiVFlQRV9EQVRFIiwiRGF0ZSIsIlJvd1B1cmVDb250ZW50IiwiaXNFZGl0YWJsZSIsImVkaXRpbmdDb2xJZHgiLCJhdHN0YXJ0IiwiRWRpdGluZ0NlbGxDb21wb25lbnQiLCJjZWxsVGl0bGUiLCJvcmlnaW5GbiIsImNlbGxDbGFzc2VzIiwidGl0bGUiLCJhbGlnbiIsImlzRW1wdHlPYmplY3QiLCJlZGl0YWJsZUNlbGwiLCJpc0RlZmluZWQiLCJ0b1N0cmluZyIsImNvbHVtbmluZGV4IiwiY2xpY2t0b2VkaXQiLCJkYmNsaWNrdG9lZGl0IiwiZGVmYXVsdENvbHVtbkNvbnRleHQiLCJ0b2dnbGVzIiwiQ29sdW1uQ29udGV4dCIsIkNvbHVtblByb3ZpZGVyIiwidG9nZ2xlQ29sdW1ucyIsImhpZGRlbiIsIlNpbXBsZVJvdyIsInRyQXR0cnMiLCJEYXRhQ29udGV4dCIsIkRhdGFQcm92aWRlciIsImZpbHRlclByb3BzIiwic2VhcmNoUHJvcHMiLCJzb3J0UHJvcHMiLCJwYWdpbmF0aW9uUHJvcHMiLCJXaXRoU2VsZWN0aW9uUm93Q29uc3VtZXIiLCJTZWxlY3Rpb25Db250ZXh0Iiwibm9uU2VsZWN0YWJsZSIsIm5vdFNlbGVjdGFibGUiLCJzZWxlY3RlZFN0eWxlIiwic2VsZWN0ZWRDbGFzc2VzIiwiYmdDb2xvciIsImJhY2tncm91bmRDb2xvciIsIm5vdFNlbGVjdGFibGVTdHlsZSIsIm5vblNlbGVjdGFibGVTdHlsZSIsIm5vdFNlbGVjdGFibGVDbGFzc2VzIiwibm9uU2VsZWN0YWJsZUNsYXNzZXMiLCJyZW5kZXJXaXRoU2VsZWN0aW9uIiwiZGlzcGxheU5hbWUiLCJjcmVhdGVTZWxlY3Rpb25Db250ZXh0IiwiY29tcGFyYXRvciIsImEiLCJiIiwicmVzdWx0IiwibG9jYWxlQ29tcGFyZSIsInNvcnRGdW5jIiwic29ydFZhbHVlIiwiX2RhdGEiLCJ2YWx1ZUEiLCJ2YWx1ZUIiLCJTT1JUX0RFU0MiLCJuZXh0T3JkZXIiLCJjdXJyZW50U29ydENvbHVtbiIsInNvcnRDb2x1bW4iLCJkZWZhdWx0T3JkZXIiLCJzcGxpdE5lc3RlZCIsInN0ciIsImpvaW4iLCJyZXBsYWNlIiwic3BsaXQiLCJhc3NpZ24iLCJ0YXJnZXQiLCJmaWVsZCIsImRpcmVjdEdldCIsInBhdGhBcnJheSIsImN1cnIiLCJwYXRoIiwic2V0Iiwic2FmZSIsImxldmVsIiwiRXJyb3IiLCJvYmoiLCJpc09iamVjdCIsImhhc093blByb3BlcnR5IiwicHJvdG90eXBlIiwiY2FsbCIsInNsZWVwIiwiZm4iLCJtcyIsInNldFRpbWVvdXQiLCJkZWJvdW5jZSIsImZ1bmMiLCJ3YWl0IiwiaW1tZWRpYXRlIiwiY2FsbE5vdyIsImNsZWFyVGltZW91dCIsImFwcGx5IiwiYXJndW1lbnRzIiwibGlzdCIsImluZGV4T2YiLCJFeHBhbnNpb25IZWFkZXJDZWxsIiwiaGFuZGxlQ2hlY2tCb3hDbGljayIsImV4cGFuZEhlYWRlckNvbHVtblJlbmRlcmVyIiwiZ2V0U2VsZWN0aW9uU3VtbWFyeSIsImFsbFJvd3NTZWxlY3RlZCIsImFsbFJvd3NOb3RTZWxlY3RlZCIsInJvd0tleXMiLCJzZWxlY3RhYmxlS2V5cyIsInVuU2VsZWN0YWJsZUtleXMiLCJnZXRTZWxlY3RlZFJvd3MiLCJWRVJTSU9OIiwiZyIsImdsb2JhbCIsIkZ1bmN0aW9uIiwiQXJyYXlQcm90byIsIkFycmF5IiwiT2JqUHJvdG8iLCJTeW1ib2xQcm90byIsIlN5bWJvbCIsInNsaWNlIiwic3VwcG9ydHNBcnJheUJ1ZmZlciIsIkFycmF5QnVmZmVyIiwic3VwcG9ydHNEYXRhVmlldyIsIkRhdGFWaWV3IiwibmF0aXZlSXNBcnJheSIsImlzQXJyYXkiLCJuYXRpdmVLZXlzIiwibmF0aXZlQ3JlYXRlIiwiY3JlYXRlIiwibmF0aXZlSXNWaWV3IiwiaXNWaWV3IiwiX2lzTmFOIiwiaXNOYU4iLCJfaXNGaW5pdGUiLCJpc0Zpbml0ZSIsImhhc0VudW1CdWciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIm5vbkVudW1lcmFibGVQcm9wcyIsIk1BWF9BUlJBWV9JTkRFWCIsIk1hdGgiLCJwb3ciLCJyZXN0QXJndW1lbnRzIiwic3RhcnRJbmRleCIsIm1heCIsImFyZ3MiLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsImlzQm9vbGVhbiIsImlzRWxlbWVudCIsIm5vZGVUeXBlIiwidGFnVGVzdGVyIiwibmFtZSIsInRhZyIsIm5vZGVsaXN0IiwiZG9jdW1lbnQiLCJjaGlsZE5vZGVzIiwiSW50OEFycmF5IiwiaGFzRGF0YVZpZXdCdWciLCJ0ZXN0IiwiaXNJRTExIiwiTWFwIiwiaXNEYXRhVmlldyIsImdldEludDgiLCJpc0FycmF5QnVmZmVyIiwiYnVmZmVyIiwiaXNBcmd1bWVudHMiLCJpc1N5bWJvbCIsInBhcnNlRmxvYXQiLCJpc051bWJlciIsImNvbnN0YW50IiwiY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2siLCJnZXRTaXplUHJvcGVydHkiLCJjb2xsZWN0aW9uIiwic2l6ZVByb3BlcnR5Iiwic2hhbGxvd1Byb3BlcnR5IiwidHlwZWRBcnJheVBhdHRlcm4iLCJjb2xsZWN0Tm9uRW51bVByb3BzIiwiaGFzaCIsImwiLCJlbXVsYXRlZFNldCIsIm5vbkVudW1JZHgiLCJwcm90byIsInByb3AiLCJpc1N0cmluZyIsImlzTWF0Y2giLCJvYmplY3QiLCJfa2V5cyIsIl8iLCJfd3JhcHBlZCIsInRvQnVmZmVyVmlldyIsImJ1ZmZlclNvdXJjZSIsIlVpbnQ4QXJyYXkiLCJieXRlT2Zmc2V0IiwidmFsdWVPZiIsInRvSlNPTiIsInRhZ0RhdGFWaWV3IiwiZXEiLCJhU3RhY2siLCJiU3RhY2siLCJkZWVwRXEiLCJhcmVBcnJheXMiLCJhQ3RvciIsImJDdG9yIiwicG9wIiwiYWxsS2V5cyIsImllMTFmaW5nZXJwcmludCIsIm1ldGhvZHMiLCJ3ZWFrTWFwTWV0aG9kcyIsImZvckVhY2hOYW1lIiwiY29tbW9uSW5pdCIsIm1hcFRhaWwiLCJtYXBNZXRob2RzIiwic2V0TWV0aG9kcyIsInZhbHVlcyIsInBhaXJzIiwiaW52ZXJ0IiwiZnVuY3Rpb25zIiwibmFtZXMiLCJjcmVhdGVBc3NpZ25lciIsImtleXNGdW5jIiwiZGVmYXVsdHMiLCJzb3VyY2UiLCJiYXNlQ3JlYXRlIiwiQ3RvciIsImV4dGVuZE93biIsImNsb25lIiwiZXh0ZW5kIiwidGFwIiwiaW50ZXJjZXB0b3IiLCJ0b1BhdGgiLCJkZWVwR2V0IiwiZGVmYXVsdFZhbHVlIiwiaWRlbnRpdHkiLCJtYXRjaGVyIiwicHJvcGVydHkiLCJvcHRpbWl6ZUNiIiwiY29udGV4dCIsImFyZ0NvdW50IiwiYWNjdW11bGF0b3IiLCJiYXNlSXRlcmF0ZWUiLCJpdGVyYXRlZSIsIkluZmluaXR5IiwibWFwT2JqZWN0IiwicmVzdWx0cyIsImN1cnJlbnRLZXkiLCJub29wIiwicHJvcGVydHlPZiIsInRpbWVzIiwibiIsImFjY3VtIiwicmFuZG9tIiwibWluIiwiZmxvb3IiLCJub3ciLCJnZXRUaW1lIiwiY3JlYXRlRXNjYXBlciIsImVzY2FwZXIiLCJtYXRjaCIsInRlc3RSZWdleHAiLCJSZWdFeHAiLCJyZXBsYWNlUmVnZXhwIiwic3RyaW5nIiwidGVtcGxhdGVTZXR0aW5ncyIsImV2YWx1YXRlIiwiaW50ZXJwb2xhdGUiLCJlc2NhcGUiLCJub01hdGNoIiwiZXNjYXBlcyIsImVzY2FwZVJlZ0V4cCIsImVzY2FwZUNoYXIiLCJiYXJlSWRlbnRpZmllciIsInRlbXBsYXRlIiwidGV4dCIsInNldHRpbmdzIiwib2xkU2V0dGluZ3MiLCJvZmZzZXQiLCJhcmd1bWVudCIsInZhcmlhYmxlIiwiZmFsbGJhY2siLCJpZENvdW50ZXIiLCJ1bmlxdWVJZCIsInByZWZpeCIsImNoYWluIiwiaW5zdGFuY2UiLCJfY2hhaW4iLCJleGVjdXRlQm91bmQiLCJzb3VyY2VGdW5jIiwiYm91bmRGdW5jIiwiY2FsbGluZ0NvbnRleHQiLCJwYXJ0aWFsIiwiYm91bmRBcmdzIiwicGxhY2Vob2xkZXIiLCJib3VuZCIsIlR5cGVFcnJvciIsImNhbGxBcmdzIiwiZmxhdHRlbiIsImlucHV0IiwiZGVwdGgiLCJzdHJpY3QiLCJvdXRwdXQiLCJpZHgiLCJqIiwibGVuIiwibWVtb2l6ZSIsImhhc2hlciIsImNhY2hlIiwiYWRkcmVzcyIsImRlbGF5IiwidGhyb3R0bGUiLCJvcHRpb25zIiwicHJldmlvdXMiLCJsYXRlciIsImxlYWRpbmciLCJ0aHJvdHRsZWQiLCJfbm93IiwicmVtYWluaW5nIiwidHJhaWxpbmciLCJjYW5jZWwiLCJwYXNzZWQiLCJkZWJvdW5jZWQiLCJfYXJncyIsIndyYXAiLCJ3cmFwcGVyIiwibmVnYXRlIiwicHJlZGljYXRlIiwiY29tcG9zZSIsInN0YXJ0IiwiYWZ0ZXIiLCJiZWZvcmUiLCJtZW1vIiwiZmluZEtleSIsImNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyIiwiZGlyIiwiYXJyYXkiLCJzb3J0ZWRJbmRleCIsImxvdyIsImhpZ2giLCJtaWQiLCJjcmVhdGVJbmRleEZpbmRlciIsInByZWRpY2F0ZUZpbmQiLCJpdGVtIiwiZmluZEluZGV4IiwiZmluZExhc3RJbmRleCIsImZpbmRXaGVyZSIsImVhY2giLCJjcmVhdGVSZWR1Y2UiLCJpbml0aWFsIiwicmVkdWNlciIsInJlamVjdCIsImV2ZXJ5IiwiZnJvbUluZGV4IiwiZ3VhcmQiLCJjb250ZXh0UGF0aCIsIm1ldGhvZCIsInBsdWNrIiwid2hlcmUiLCJjb21wdXRlZCIsImxhc3RDb21wdXRlZCIsInYiLCJyZVN0clN5bWJvbCIsInRvQXJyYXkiLCJzYW1wbGUiLCJsYXN0IiwicmFuZCIsInRlbXAiLCJzaHVmZmxlIiwic29ydEJ5IiwiY3JpdGVyaWEiLCJsZWZ0IiwicmlnaHQiLCJncm91cCIsImJlaGF2aW9yIiwicGFydGl0aW9uIiwicGFzcyIsInNpemUiLCJrZXlJbk9iaiIsInBpY2siLCJmaXJzdCIsImNvbXBhY3QiLCJCb29sZWFuIiwib3RoZXJBcnJheXMiLCJkaWZmZXJlbmNlIiwidW5pcSIsImlzU29ydGVkIiwic2VlbiIsImFycmF5cyIsImludGVyc2VjdGlvbiIsImFyZ3NMZW5ndGgiLCJ1bnppcCIsInJhbmdlIiwic3RvcCIsInN0ZXAiLCJjZWlsIiwiY2h1bmsiLCJjb3VudCIsImNoYWluUmVzdWx0IiwibWl4aW4iLCJkYXRhT3BlcmF0b3IiLCJpc1JlbW90ZVNvcnQiLCJoYW5kbGVTb3J0Q2hhbmdlIiwiZGVmYXVsdFNvcnRDb250ZXh0IiwiU29ydENvbnRleHQiLCJTb3J0UHJvdmlkZXIiLCJkZWZhdWx0U29ydGVkIiwiZGVmYXVsdFNvcnREaXJlY3Rpb24iLCJpbml0U29ydCIsImNvbXBvbmVudERpZE1vdW50Iiwic29ydENvbHVtbnMiLCJoYW5kbGVTb3J0IiwiaGlkZGVuUm93cyIsIlNlbGVjdGlvbkhlYWRlckNlbGxDb21wIiwiRXhwYW5zaW9uSGVhZGVyQ2VsbENvbXAiLCJjdXJyU29ydCIsImlzTGFzdFNvcnRpbmciLCJzb3J0aW5nIiwiRXhwYW5zaW9uQ29udGV4dCIsInBhcmVudENsYXNzTmFtZSIsInJlbmRlcldpdGhFeHBhbnNpb24iLCJCb2R5IiwiRWRpdGluZ0NlbGwiLCJSb3dDb21wb25lbnQiLCJjcmVhdGVFZGl0aW5nQ2VsbCIsIm9uU3RhcnRFZGl0Iiwic2VsZWN0Um93RW5hYmxlZCIsImV4cGFuZFJvd0VuYWJsZWQiLCJ3aXRoUm93TGV2ZWxDZWxsRWRpdCIsImluZGljYXRpb24iLCJhZGRpdGlvbmFsUm93UHJvcHMiLCJiYXNlUm93UHJvcHMiLCJfZXh0ZW5kcyIsInQiLCJyIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJfc2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9pbmhlcml0c0xvb3NlIiwibyIsInJlcGxhY2VDbGFzc05hbWUiLCJvcmlnQ2xhc3MiLCJjbGFzc1RvUmVtb3ZlIiwiZm9yY2VSZWZsb3ciLCJub2RlIiwic2Nyb2xsVG9wIiwiVU5NT1VOVEVEIiwiRVhJVEVEIiwiRU5URVJJTkciLCJFTlRFUkVEIiwiRVhJVElORyIsIlRyYW5zaXRpb24iLCJfUmVhY3QkQ29tcG9uZW50IiwiX3RoaXMiLCJpbml0aWFsU3RhdHVzIiwiaXNNb3VudGluZyIsImVudGVyIiwiYXBwZWFyU3RhdHVzIiwidW5tb3VudE9uRXhpdCIsIm1vdW50T25FbnRlciIsInN0YXR1cyIsIm5leHRDYWxsYmFjayIsIl9yZWYiLCJfcHJvdG8iLCJ1cGRhdGVTdGF0dXMiLCJwcmV2UHJvcHMiLCJuZXh0U3RhdHVzIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjYW5jZWxOZXh0Q2FsbGJhY2siLCJnZXRUaW1lb3V0cyIsImV4aXQiLCJtb3VudGluZyIsImN1cnJlbnQiLCJwZXJmb3JtRW50ZXIiLCJwZXJmb3JtRXhpdCIsIl90aGlzMiIsImFwcGVhcmluZyIsIl9yZWYyIiwibWF5YmVOb2RlIiwibWF5YmVBcHBlYXJpbmciLCJ0aW1lb3V0cyIsImVudGVyVGltZW91dCIsImNvbmZpZyIsInNhZmVTZXRTdGF0ZSIsIm9uRW50ZXJlZCIsIm9uRW50ZXIiLCJvbkVudGVyaW5nIiwib25UcmFuc2l0aW9uRW5kIiwiX3RoaXMzIiwib25FeGl0Iiwib25FeGl0aW5nIiwibmV4dFN0YXRlIiwiY2FsbGJhY2siLCJzZXROZXh0Q2FsbGJhY2siLCJfdGhpczQiLCJhY3RpdmUiLCJldmVudCIsImhhbmRsZXIiLCJkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyIiwiYWRkRW5kTGlzdGVuZXIiLCJfcmVmMyIsIm1heWJlTmV4dENhbGxiYWNrIiwiX3RoaXMkcHJvcHMiLCJjaGlsZFByb3BzIiwiVHJhbnNpdGlvbkdyb3VwQ29udGV4dCIsIm9ubHkiLCJjb250ZXh0VHlwZSIsInByb3BUeXBlcyIsImRlZmF1bHRQcm9wcyIsInJlbW92ZUNsYXNzIiwiYyIsImVsZW1lbnQiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJzZXRBdHRyaWJ1dGUiLCJiYXNlVmFsIiwiX2xlbiIsIl9rZXkiLCJhcHBsaWVkQ2xhc3NlcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudCIsInJlc29sdmVBcmd1bWVudHMiLCJyZW1vdmVDbGFzc2VzIiwiYWRkQ2xhc3MiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQyIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyIsImdldENsYXNzTmFtZXMiLCJpc1N0cmluZ0NsYXNzTmFtZXMiLCJiYXNlQ2xhc3NOYW1lIiwiYWN0aXZlQ2xhc3NOYW1lIiwiZG9uZUNsYXNzTmFtZSIsInBoYXNlIiwiYWRkIiwiaGFzQ2xhc3MiLCJfYWRkQ2xhc3MiLCJfdGhpcyRhcHBsaWVkQ2xhc3NlcyQiLCJiYXNlIiwiZG9uZSIsImdldENoaWxkTWFwcGluZyIsIm1hcEZuIiwiQ2hpbGRyZW4iLCJjaGlsZCIsImlzVmFsaWRFbGVtZW50IiwibWFwcGVyIiwiZ2V0UHJvcCIsImdldE5leHRDaGlsZE1hcHBpbmciLCJwcmV2Q2hpbGRNYXBwaW5nIiwibmV4dENoaWxkTWFwcGluZyIsInByZXYiLCJuZXh0IiwiZ2V0VmFsdWVGb3JLZXkiLCJuZXh0S2V5c1BlbmRpbmciLCJwZW5kaW5nS2V5cyIsInByZXZLZXkiLCJjaGlsZE1hcHBpbmciLCJuZXh0S2V5IiwicGVuZGluZ05leHRLZXkiLCJtZXJnZUNoaWxkTWFwcGluZ3MiLCJoYXNQcmV2IiwiaGFzTmV4dCIsInByZXZDaGlsZCIsImlzTGVhdmluZyIsImNsb25lRWxlbWVudCIsIlRyYW5zaXRpb25Hcm91cCIsImhhbmRsZUV4aXRlZCIsIlJlZmVyZW5jZUVycm9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsImNvbnRleHRWYWx1ZSIsImZpcnN0UmVuZGVyIiwibW91bnRlZCIsImN1cnJlbnRDaGlsZE1hcHBpbmciLCJjb21wb25lbnQiLCJjaGlsZEZhY3RvcnkiLCJSZXBsYWNlVHJhbnNpdGlvbiIsImhhbmRsZUVudGVyIiwiX2xlbjIiLCJfa2V5MiIsImhhbmRsZUxpZmVjeWNsZSIsImhhbmRsZUVudGVyaW5nIiwiX2xlbjMiLCJfa2V5MyIsImhhbmRsZUVudGVyZWQiLCJfbGVuNCIsIl9rZXk0IiwiaGFuZGxlRXhpdCIsIl9sZW41IiwiX2tleTUiLCJoYW5kbGVFeGl0aW5nIiwiX2xlbjYiLCJfa2V5NiIsIl9sZW43IiwiX2tleTciLCJvcmlnaW5hbEFyZ3MiLCJfY2hpbGQkcHJvcHMiLCJpblByb3AiLCJfUmVhY3QkQ2hpbGRyZW4kdG9BcnIiLCJzZWNvbmQiLCJfbGVhdmVSZW5kZXJzIiwiX2VudGVyUmVuZGVycyIsIm1vZGVzIiwiY2FsbEhvb2siLCJfZWxlbWVudCRwcm9wcyIsImxlYXZlUmVuZGVycyIsImNoYW5nZVN0YXRlIiwiZW50ZXJSZW5kZXJzIiwiX3JlZjQiLCJTd2l0Y2hUcmFuc2l0aW9uIiwiYXBwZWFyZWQiLCJvbGRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuIiwiX3RoaXMkc3RhdGUiLCJST1dfU0VMRUNUX01VTFRJUExFIiwiQ0hFQ0tCT1hfU1RBVFVTX0lOREVURVJNSU5BVEUiLCJDSEVDS0JPWF9TVEFUVVNfQ0hFQ0tFRCIsIkNIRUNLQk9YX1NUQVRVU19VTkNIRUNLRUQiLCJGSUxURVJTX1BPU0lUSU9OX1RPUCIsIkZJTFRFUlNfUE9TSVRJT05fQk9UVE9NIiwiSU5ESUNBVE9SX1BPU0lUSU9OX1JJR0hUIiwicm93cyIsInNlbGVjdGlvbiIsImV4cGFuZCIsIm11dGF0ZSIsImhhc093biIsImFyZyIsImFwcGVuZENsYXNzIiwicGFyc2VWYWx1ZSIsIm5ld0NsYXNzIiwiZGVmYXVsdCIsIlJlZmxlY3RPd25LZXlzIiwiUiIsIlJlZmxlY3QiLCJSZWZsZWN0QXBwbHkiLCJyZWNlaXZlciIsIm93bktleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiTnVtYmVySXNOYU4iLCJFdmVudEVtaXR0ZXIiLCJpbml0Iiwib25jZSIsImVtaXR0ZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImVycm9yTGlzdGVuZXIiLCJlcnIiLCJyZW1vdmVMaXN0ZW5lciIsInJlc29sdmVyIiwiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwiZmxhZ3MiLCJvbiIsImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwiX2V2ZW50cyIsIl9ldmVudHNDb3VudCIsIl9tYXhMaXN0ZW5lcnMiLCJkZWZhdWx0TWF4TGlzdGVuZXJzIiwiY2hlY2tMaXN0ZW5lciIsImxpc3RlbmVyIiwiX2dldE1heExpc3RlbmVycyIsInRoYXQiLCJfYWRkTGlzdGVuZXIiLCJwcmVwZW5kIiwibSIsImV4aXN0aW5nIiwid2FybmluZyIsIm5ld0xpc3RlbmVyIiwiZW1pdCIsIndhcm5lZCIsInciLCJjb25zb2xlIiwid2FybiIsIm9uY2VXcmFwcGVyIiwiZmlyZWQiLCJ3cmFwRm4iLCJfb25jZVdyYXAiLCJ3cmFwcGVkIiwiX2xpc3RlbmVycyIsInVud3JhcCIsImV2bGlzdGVuZXIiLCJhcnIiLCJyZXQiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsImNvcHkiLCJhZGRFdmVudExpc3RlbmVyIiwid3JhcExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsIlJhbmdlRXJyb3IiLCJnZXRQcm90b3R5cGVPZiIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlcnJvciIsImVyIiwibWVzc2FnZSIsImxpc3RlbmVycyIsImFkZExpc3RlbmVyIiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsIm9yaWdpbmFsTGlzdGVuZXIiLCJzaGlmdCIsInNwbGljZU9uZSIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsInJhd0xpc3RlbmVycyIsImV2ZW50TmFtZXMiLCJERUxBWV9GT1JfREJDTElDSyIsImNsaWNrRm4iLCJleHBhbmRCeUNvbHVtbk9ubHkiLCJjbGlja1RvRXhwYW5kIiwiQ2hlY2tCb3giLCJpbmRldGVybWluYXRlIiwiU2VsZWN0aW9uSGVhZGVyQ2VsbCIsImNoZWNrZWRTdGF0dXMiLCJvbkFsbFJvd3NTZWxlY3QiLCJzZWxlY3Rpb25IZWFkZXJSZW5kZXJlciIsImhpZGVTZWxlY3RBbGwiLCJoZWFkZXJDb2x1bW5TdHlsZSIsImZvb3RlciIsImNvbHVtbkRhdGEiLCJGb290ZXJDZWxsIiwiZm9vdGVyVGl0bGUiLCJmb290ZXJBbGlnbiIsImZvb3RlckZvcm1hdHRlciIsImZvb3RlckV2ZW50cyIsImZvb3RlclN0eWxlIiwiZm9vdGVyQXR0cnMiLCJkZWxlZ2F0ZUV2ZW50cyIsIlNlbGVjdGlvblByb3ZpZGVyIiwiaXNIYW5kbGVSb3dTZWxlY3QiLCJnZXRTZWxlY3RlZCIsImZvcmNlVXBkYXRlIiwiaGFuZGxlUm93U2VsZWN0Iiwib25TZWxlY3QiLCJjdXJyU2VsZWN0ZWQiLCJoYW5kbGVBbGxSb3dzU2VsZWN0IiwiaXNVblNlbGVjdCIsIm9uU2VsZWN0QWxsIiwiQ2VsbCIsImNyZWF0ZUhhbmRsZUVkaXRpbmdDZWxsIiwiaXNEdW1teUZpZWxkIiwiZm9ybWF0dGVyIiwiZm9ybWF0RXh0cmFEYXRhIiwib3JpZ2luRnVuYyIsIm9uRG91YmxlQ2xpY2siLCJlZGl0Q2VsbCIsIm5ld1ZhbHVlIiwiSGVhZGVyQ2VsbCIsImhlYWRlclRpdGxlIiwiaGVhZGVyRm9ybWF0dGVyIiwiaGVhZGVyRXZlbnRzIiwiaGVhZGVyU3R5bGUiLCJoZWFkZXJBdHRycyIsImhlYWRlclNvcnRpbmdDbGFzc2VzIiwiaGVhZGVyU29ydGluZ1N0eWxlIiwic29ydENhcmV0ZnVuYyIsImN1c3RvbUF0dHJzIiwic29ydFN5bWJvbCIsImZpbHRlckVsZW1lbnQiLCJjdXN0b21DbGljayIsImN1c3RvbUtleURvd24iLCJvbktleURvd24iLCJvbktleVVwIiwic29ydEVsZW1lbnQiLCJCYXNlIiwicmVnaXN0ZXJFeHBvc2VkQVBJIiwiZXhwb3NlZEFQSUVtaXR0ZXIiLCJwYXlsb2FkIiwidGFibGUiLCJzZWxlY3Rpb25Db250ZXh0Iiwic2VhcmNoQ29udGV4dCIsImdldFNlYXJjaGVkIiwiZmlsdGVyQ29udGV4dCIsImdldEZpbHRlcmVkIiwiaGFuZGxlUmVtb3RlU29ydENoYW5nZSIsImNvbHVtblRvZ2dsZSIsIkNlbGxFZGl0Q29udGV4dCIsImlzUmVtb3RlQ2VsbEVkaXQiLCJoYW5kbGVSZW1vdGVDZWxsQ2hhbmdlIiwiRmlsdGVyQ29udGV4dCIsImlzUmVtb3RlRmlsdGVyaW5nIiwiaGFuZGxlUmVtb3RlRmlsdGVyQ2hhbmdlIiwiUGFnaW5hdGlvbkNvbnRleHQiLCJzZWFyY2giLCJTZWFyY2hDb250ZXh0IiwiaXNSZW1vdGVTZWFyY2giLCJoYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2UiLCJzZXREZXBlbmRlbmN5TW9kdWxlcyIsInNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyIiwicmVtb3RlRW1pdHRlciIsImlzUmVtb3RlUGFnaW5hdGlvbiIsImhhbmRsZVJlbW90ZVBhZ2VDaGFuZ2UiLCJyZW5kZXJCYXNlIiwicm9vdFByb3BzIiwiY29sdW1uVG9nZ2xlUHJvcHMiLCJyZW5kZXJXaXRoQ29sdW1uQ29udGV4dCIsImJhc2VQcm9wcyIsInJlbmRlcldpdGhTZWxlY3Rpb25Db250ZXh0IiwicmVuZGVyV2l0aFJvd0V4cGFuZENvbnRleHQiLCJyb3dFeHBhbmRDb250ZXh0IiwicmVuZGVyV2l0aFBhZ2luYXRpb25Db250ZXh0IiwicGFnaW5hdGlvbkNvbnRleHQiLCJ0YWJsZUlkIiwicmVuZGVyV2l0aFNvcnRDb250ZXh0Iiwic29ydENvbnRleHQiLCJyZW5kZXJXaXRoU2VhcmNoQ29udGV4dCIsInNlYXJjaFRleHQiLCJkYXRhQ2hhbmdlTGlzdGVuZXIiLCJyZW5kZXJXaXRoRmlsdGVyQ29udGV4dCIsInJlbmRlcldpdGhDZWxsRWRpdENvbnRleHQiLCJjZWxsRWRpdENvbnRleHQiLCJkaXNwbGF5IiwiZmlsdGVyQ29sdW1ucyIsInNob3dGaWx0ZXJzUm93IiwiVGFibGUiLCJkYXRhQ29udGV4dCIsImNvbHVtbkNvbnRleHQiLCJnZXROZXdlc3RTdGF0ZSIsInBhZ2UiLCJzaXplUGVyUGFnZSIsImZpbHRlcnMiLCJjdXJyUGFnZSIsImN1cnJTaXplUGVyUGFnZSIsInJlbW90ZSIsIm9uVGFibGVDaGFuZ2UiLCJuZXdTdGF0ZSIsInBhZ2VTdGFydEluZGV4IiwiaW5jbHVkZVNlbGVjdENvbHVtbiIsImNvbHVtbkxlbiIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZGVmaW5pdGlvbiIsImdsb2JhbFRoaXMiLCJ3aW5kb3ciLCJ0b1N0cmluZ1RhZyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9
|