-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path2168.2016c390.iframe.bundle.js
3 lines (3 loc) · 81.1 KB
/
2168.2016c390.iframe.bundle.js
1
2
3
/*! For license information please see 2168.2016c390.iframe.bundle.js.LICENSE.txt */
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[2168],{"./node_modules/classnames/index.js":(module,exports)=>{var __WEBPACK_AMD_DEFINE_RESULT__;!function(){"use strict";var hasOwn={}.hasOwnProperty;function classNames(){for(var classes=[],i=0;i<arguments.length;i++){var arg=arguments[i];if(arg){var argType=typeof arg;if("string"===argType||"number"===argType)classes.push(arg);else if(Array.isArray(arg)){if(arg.length){var inner=classNames.apply(null,arg);inner&&classes.push(inner)}}else if("object"===argType){if(arg.toString!==Object.prototype.toString&&!arg.toString.toString().includes("[native code]")){classes.push(arg.toString());continue}for(var key in arg)hasOwn.call(arg,key)&&arg[key]&&classes.push(key)}}}return classes.join(" ")}module.exports?(classNames.default=classNames,module.exports=classNames):void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return classNames}.apply(exports,[]))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)}()},"./node_modules/css-loader/dist/runtime/api.js":module=>{"use strict";module.exports=function(cssWithMappingToString){var list=[];return list.toString=function toString(){return this.map((function(item){var content="",needLayer=void 0!==item[5];return item[4]&&(content+="@supports (".concat(item[4],") {")),item[2]&&(content+="@media ".concat(item[2]," {")),needLayer&&(content+="@layer".concat(item[5].length>0?" ".concat(item[5]):""," {")),content+=cssWithMappingToString(item),needLayer&&(content+="}"),item[2]&&(content+="}"),item[4]&&(content+="}"),content})).join("")},list.i=function i(modules,media,dedupe,supports,layer){"string"==typeof modules&&(modules=[[null,modules,void 0]]);var alreadyImportedModules={};if(dedupe)for(var k=0;k<this.length;k++){var id=this[k][0];null!=id&&(alreadyImportedModules[id]=!0)}for(var _k=0;_k<modules.length;_k++){var item=[].concat(modules[_k]);dedupe&&alreadyImportedModules[item[0]]||(void 0!==layer&&(void 0===item[5]||(item[1]="@layer".concat(item[5].length>0?" ".concat(item[5]):""," {").concat(item[1],"}")),item[5]=layer),media&&(item[2]?(item[1]="@media ".concat(item[2]," {").concat(item[1],"}"),item[2]=media):item[2]=media),supports&&(item[4]?(item[1]="@supports (".concat(item[4],") {").concat(item[1],"}"),item[4]=supports):item[4]="".concat(supports)),list.push(item))}},list}},"./node_modules/css-loader/dist/runtime/sourceMaps.js":module=>{"use strict";module.exports=function(item){var content=item[1],cssMapping=item[3];if(!cssMapping)return content;if("function"==typeof btoa){var base64=btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))),data="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64),sourceMapping="/*# ".concat(data," */"),sourceURLs=cssMapping.sources.map((function(source){return"/*# sourceURL=".concat(cssMapping.sourceRoot||"").concat(source," */")}));return[content].concat(sourceURLs).concat([sourceMapping]).join("\n")}return[content].join("\n")}},"./node_modules/react-csv/index.js":(module,__unused_webpack_exports,__webpack_require__)=>{module.exports=__webpack_require__("./node_modules/react-csv/lib/index.js")},"./node_modules/react-csv/lib/components/Download.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),_react2=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(__webpack_require__("./node_modules/react/index.js")),_core=__webpack_require__("./node_modules/react-csv/lib/core.js"),_metaProps=__webpack_require__("./node_modules/react-csv/lib/metaProps.js");var CSVDownload=function(_React$Component){function CSVDownload(props){!function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,CSVDownload);var _this=function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}(this,(CSVDownload.__proto__||Object.getPrototypeOf(CSVDownload)).call(this,props));return _this.state={},_this}return function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(CSVDownload,_React$Component),_createClass(CSVDownload,[{key:"buildURI",value:function buildURI(){return _core.buildURI.apply(void 0,arguments)}},{key:"componentDidMount",value:function componentDidMount(){var _props=this.props,data=_props.data,headers=_props.headers,separator=_props.separator,enclosingCharacter=_props.enclosingCharacter,uFEFF=_props.uFEFF,target=_props.target,specs=_props.specs,replace=_props.replace;this.state.page=window.open(this.buildURI(data,uFEFF,headers,separator,enclosingCharacter),target,specs,replace)}},{key:"getWindow",value:function getWindow(){return this.state.page}},{key:"render",value:function render(){return null}}]),CSVDownload}(_react2.default.Component);CSVDownload.defaultProps=Object.assign(_metaProps.defaultProps,{target:"_blank"}),CSVDownload.propTypes=_metaProps.propTypes,exports.default=CSVDownload},"./node_modules/react-csv/lib/components/Link.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),_react2=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(__webpack_require__("./node_modules/react/index.js")),_core=__webpack_require__("./node_modules/react-csv/lib/core.js"),_metaProps=__webpack_require__("./node_modules/react-csv/lib/metaProps.js");var CSVLink=function(_React$Component){function CSVLink(props){!function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,CSVLink);var _this=function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}(this,(CSVLink.__proto__||Object.getPrototypeOf(CSVLink)).call(this,props));return _this.buildURI=_this.buildURI.bind(_this),_this.state={href:""},_this}return function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(CSVLink,_React$Component),_createClass(CSVLink,[{key:"componentDidMount",value:function componentDidMount(){var _props=this.props,data=_props.data,headers=_props.headers,separator=_props.separator,uFEFF=_props.uFEFF,enclosingCharacter=_props.enclosingCharacter;this.setState({href:this.buildURI(data,uFEFF,headers,separator,enclosingCharacter)})}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props!==prevProps){var _props2=this.props,data=_props2.data,headers=_props2.headers,separator=_props2.separator,uFEFF=_props2.uFEFF;this.setState({href:this.buildURI(data,uFEFF,headers,separator)})}}},{key:"buildURI",value:function buildURI(){return _core.buildURI.apply(void 0,arguments)}},{key:"handleLegacy",value:function handleLegacy(event){if(window.navigator.msSaveOrOpenBlob){event.preventDefault();var _props3=this.props,data=_props3.data,headers=_props3.headers,separator=_props3.separator,filename=_props3.filename,enclosingCharacter=_props3.enclosingCharacter,uFEFF=_props3.uFEFF,blob=new Blob([uFEFF?"\ufeff":"",(0,_core.toCSV)(data,headers,separator,enclosingCharacter)]);return window.navigator.msSaveBlob(blob,filename),!1}}},{key:"handleAsyncClick",value:function handleAsyncClick(event){var _this2=this;this.props.onClick(event,(function done(proceed){!1!==proceed?_this2.handleLegacy(event):event.preventDefault()}))}},{key:"handleSyncClick",value:function handleSyncClick(event){!1===this.props.onClick(event)?event.preventDefault():this.handleLegacy(event)}},{key:"handleClick",value:function handleClick(){var _this3=this;return function(event){if("function"==typeof _this3.props.onClick)return _this3.props.asyncOnClick?_this3.handleAsyncClick(event):_this3.handleSyncClick(event);_this3.handleLegacy(event)}}},{key:"render",value:function render(){var _this4=this,_props4=this.props,filename=(_props4.data,_props4.headers,_props4.separator,_props4.filename),children=(_props4.uFEFF,_props4.children),rest=(_props4.onClick,_props4.asyncOnClick,_props4.enclosingCharacter,function _objectWithoutProperties(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}(_props4,["data","headers","separator","filename","uFEFF","children","onClick","asyncOnClick","enclosingCharacter"]));return _react2.default.createElement("a",_extends({download:filename},rest,{ref:function ref(link){return _this4.link=link},target:"_self",href:this.state.href,onClick:this.handleClick()}),children)}}]),CSVLink}(_react2.default.Component);CSVLink.defaultProps=_metaProps.defaultProps,CSVLink.propTypes=_metaProps.propTypes,exports.default=CSVLink},"./node_modules/react-csv/lib/core.js":(__unused_webpack_module,exports)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++)arr2[i]=arr[i];return arr2}return Array.from(arr)}var isSafari=exports.isSafari=function isSafari(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)},isJsons=exports.isJsons=function isJsons(array){return Array.isArray(array)&&array.every((function(row){return"object"===(void 0===row?"undefined":_typeof(row))&&!(row instanceof Array)}))},isArrays=exports.isArrays=function isArrays(array){return Array.isArray(array)&&array.every((function(row){return Array.isArray(row)}))},jsonsHeaders=exports.jsonsHeaders=function jsonsHeaders(array){return Array.from(array.map((function(json){return Object.keys(json)})).reduce((function(a,b){return new Set([].concat(_toConsumableArray(a),_toConsumableArray(b)))}),[]))},jsons2arrays=exports.jsons2arrays=function jsons2arrays(jsons,headers){var headerLabels=headers=headers||jsonsHeaders(jsons),headerKeys=headers;isJsons(headers)&&(headerLabels=headers.map((function(header){return header.label})),headerKeys=headers.map((function(header){return header.key})));var data=jsons.map((function(object){return headerKeys.map((function(header){return getHeaderValue(header,object)}))}));return[headerLabels].concat(_toConsumableArray(data))},getHeaderValue=exports.getHeaderValue=function getHeaderValue(property,obj){var foundValue=property.replace(/\[([^\]]+)]/g,".$1").split(".").reduce((function(o,p,i,arr){if(void 0!==o[p])return o[p];arr.splice(1)}),obj);return void 0===foundValue?property in obj?obj[property]:"":foundValue},elementOrEmpty=exports.elementOrEmpty=function elementOrEmpty(element){return element||0===element?element:""},joiner=exports.joiner=function joiner(data){var separator=arguments.length>1&&void 0!==arguments[1]?arguments[1]:",",enclosingCharacter=arguments.length>2&&void 0!==arguments[2]?arguments[2]:'"';return data.filter((function(e){return e})).map((function(row){return row.map((function(element){return elementOrEmpty(element)})).map((function(column){return""+enclosingCharacter+column+enclosingCharacter})).join(separator)})).join("\n")},arrays2csv=exports.arrays2csv=function arrays2csv(data,headers,separator,enclosingCharacter){return joiner(headers?[headers].concat(_toConsumableArray(data)):data,separator,enclosingCharacter)},jsons2csv=exports.jsons2csv=function jsons2csv(data,headers,separator,enclosingCharacter){return joiner(jsons2arrays(data,headers),separator,enclosingCharacter)},string2csv=exports.string2csv=function string2csv(data,headers,separator,enclosingCharacter){return headers?headers.join(separator)+"\n"+data:data},toCSV=exports.toCSV=function toCSV(data,headers,separator,enclosingCharacter){if(isJsons(data))return jsons2csv(data,headers,separator,enclosingCharacter);if(isArrays(data))return arrays2csv(data,headers,separator,enclosingCharacter);if("string"==typeof data)return string2csv(data,headers,separator);throw new TypeError('Data should be a "String", "Array of arrays" OR "Array of objects" ')};exports.buildURI=function buildURI(data,uFEFF,headers,separator,enclosingCharacter){var csv=toCSV(data,headers,separator,enclosingCharacter),type=isSafari()?"application/csv":"text/csv",blob=new Blob([uFEFF?"\ufeff":"",csv],{type}),dataURI="data:"+type+";charset=utf-8,"+(uFEFF?"\ufeff":"")+csv,URL=window.URL||window.webkitURL;return void 0===URL.createObjectURL?dataURI:URL.createObjectURL(blob)}},"./node_modules/react-csv/lib/index.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CSVLink=exports.CSVDownload=void 0;var _Download2=_interopRequireDefault(__webpack_require__("./node_modules/react-csv/lib/components/Download.js")),_Link2=_interopRequireDefault(__webpack_require__("./node_modules/react-csv/lib/components/Link.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.CSVDownload=_Download2.default,exports.CSVLink=_Link2.default},"./node_modules/react-csv/lib/metaProps.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PropsNotForwarded=exports.defaultProps=exports.propTypes=void 0;(function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}})(__webpack_require__("./node_modules/react/index.js"));var _propTypes=__webpack_require__("./node_modules/prop-types/index.js");exports.propTypes={data:(0,_propTypes.oneOfType)([_propTypes.string,_propTypes.array]).isRequired,headers:_propTypes.array,target:_propTypes.string,separator:_propTypes.string,filename:_propTypes.string,uFEFF:_propTypes.bool,onClick:_propTypes.func,asyncOnClick:_propTypes.bool},exports.defaultProps={separator:",",filename:"generatedBy_react-csv.csv",uFEFF:!0,asyncOnClick:!1},exports.PropsNotForwarded=["data","headers"]},"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":module=>{"use strict";var stylesInDOM=[];function getIndexByIdentifier(identifier){for(var result=-1,i=0;i<stylesInDOM.length;i++)if(stylesInDOM[i].identifier===identifier){result=i;break}return result}function modulesToDom(list,options){for(var idCountMap={},identifiers=[],i=0;i<list.length;i++){var item=list[i],id=options.base?item[0]+options.base:item[0],count=idCountMap[id]||0,identifier="".concat(id," ").concat(count);idCountMap[id]=count+1;var indexByIdentifier=getIndexByIdentifier(identifier),obj={css:item[1],media:item[2],sourceMap:item[3],supports:item[4],layer:item[5]};if(-1!==indexByIdentifier)stylesInDOM[indexByIdentifier].references++,stylesInDOM[indexByIdentifier].updater(obj);else{var updater=addElementStyle(obj,options);options.byIndex=i,stylesInDOM.splice(i,0,{identifier,updater,references:1})}identifiers.push(identifier)}return identifiers}function addElementStyle(obj,options){var api=options.domAPI(options);api.update(obj);return function updater(newObj){if(newObj){if(newObj.css===obj.css&&newObj.media===obj.media&&newObj.sourceMap===obj.sourceMap&&newObj.supports===obj.supports&&newObj.layer===obj.layer)return;api.update(obj=newObj)}else api.remove()}}module.exports=function(list,options){var lastIdentifiers=modulesToDom(list=list||[],options=options||{});return function update(newList){newList=newList||[];for(var i=0;i<lastIdentifiers.length;i++){var index=getIndexByIdentifier(lastIdentifiers[i]);stylesInDOM[index].references--}for(var newLastIdentifiers=modulesToDom(newList,options),_i=0;_i<lastIdentifiers.length;_i++){var _index=getIndexByIdentifier(lastIdentifiers[_i]);0===stylesInDOM[_index].references&&(stylesInDOM[_index].updater(),stylesInDOM.splice(_index,1))}lastIdentifiers=newLastIdentifiers}}},"./node_modules/style-loader/dist/runtime/insertBySelector.js":module=>{"use strict";var memo={};module.exports=function insertBySelector(insert,style){var target=function getTarget(target){if(void 0===memo[target]){var styleTarget=document.querySelector(target);if(window.HTMLIFrameElement&&styleTarget instanceof window.HTMLIFrameElement)try{styleTarget=styleTarget.contentDocument.head}catch(e){styleTarget=null}memo[target]=styleTarget}return memo[target]}(insert);if(!target)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");target.appendChild(style)}},"./node_modules/style-loader/dist/runtime/insertStyleElement.js":module=>{"use strict";module.exports=function insertStyleElement(options){var element=document.createElement("style");return options.setAttributes(element,options.attributes),options.insert(element,options.options),element}},"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";module.exports=function setAttributesWithoutAttributes(styleElement){var nonce=__webpack_require__.nc;nonce&&styleElement.setAttribute("nonce",nonce)}},"./node_modules/style-loader/dist/runtime/styleDomAPI.js":module=>{"use strict";module.exports=function domAPI(options){var styleElement=options.insertStyleElement(options);return{update:function update(obj){!function apply(styleElement,options,obj){var css="";obj.supports&&(css+="@supports (".concat(obj.supports,") {")),obj.media&&(css+="@media ".concat(obj.media," {"));var needLayer=void 0!==obj.layer;needLayer&&(css+="@layer".concat(obj.layer.length>0?" ".concat(obj.layer):""," {")),css+=obj.css,needLayer&&(css+="}"),obj.media&&(css+="}"),obj.supports&&(css+="}");var sourceMap=obj.sourceMap;sourceMap&&"undefined"!=typeof btoa&&(css+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))))," */")),options.styleTagTransform(css,styleElement,options.options)}(styleElement,options,obj)},remove:function remove(){!function removeStyleElement(styleElement){if(null===styleElement.parentNode)return!1;styleElement.parentNode.removeChild(styleElement)}(styleElement)}}}},"./node_modules/style-loader/dist/runtime/styleTagTransform.js":module=>{"use strict";module.exports=function styleTagTransform(css,styleElement){if(styleElement.styleSheet)styleElement.styleSheet.cssText=css;else{for(;styleElement.firstChild;)styleElement.removeChild(styleElement.firstChild);styleElement.appendChild(document.createTextNode(css))}}}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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L2luZGV4LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNzdi9pbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcmVhY3QtY3N2L2xpYi9jb21wb25lbnRzL0Rvd25sb2FkLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1jc3YvbGliL2NvbXBvbmVudHMvTGluay5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcmVhY3QtY3N2L2xpYi9jb3JlLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1jc3YvbGliL2luZGV4LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1jc3YvbGliL21ldGFQcm9wcy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIG5hdGl2ZUNvZGVTdHJpbmcgPSAnW25hdGl2ZSBjb2RlXSc7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcygpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChhcmcpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdFx0aWYgKGFyZy5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgaW5uZXIgPSBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0XHRcdFx0aWYgKGlubmVyKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goaW5uZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZy50b1N0cmluZygpKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goa2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2luZGV4LmpzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9jb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG52YXIgX21ldGFQcm9wcyA9IHJlcXVpcmUoJy4uL21ldGFQcm9wcycpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIHRhcmdldDogJ19ibGFuaydcbn07XG5cbnZhciBDU1ZEb3dubG9hZCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDU1ZEb3dubG9hZCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQ1NWRG93bmxvYWQocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ1NWRG93bmxvYWQpO1xuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKENTVkRvd25sb2FkLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ1NWRG93bmxvYWQpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHt9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDU1ZEb3dubG9hZCwgW3tcbiAgICBrZXk6ICdidWlsZFVSSScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkVVJJKCkge1xuICAgICAgcmV0dXJuIF9jb3JlLmJ1aWxkVVJJLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGF0YSA9IF9wcm9wcy5kYXRhLFxuICAgICAgICAgIGhlYWRlcnMgPSBfcHJvcHMuaGVhZGVycyxcbiAgICAgICAgICBzZXBhcmF0b3IgPSBfcHJvcHMuc2VwYXJhdG9yLFxuICAgICAgICAgIGVuY2xvc2luZ0NoYXJhY3RlciA9IF9wcm9wcy5lbmNsb3NpbmdDaGFyYWN0ZXIsXG4gICAgICAgICAgdUZFRkYgPSBfcHJvcHMudUZFRkYsXG4gICAgICAgICAgdGFyZ2V0ID0gX3Byb3BzLnRhcmdldCxcbiAgICAgICAgICBzcGVjcyA9IF9wcm9wcy5zcGVjcyxcbiAgICAgICAgICByZXBsYWNlID0gX3Byb3BzLnJlcGxhY2U7XG5cbiAgICAgIHRoaXMuc3RhdGUucGFnZSA9IHdpbmRvdy5vcGVuKHRoaXMuYnVpbGRVUkkoZGF0YSwgdUZFRkYsIGhlYWRlcnMsIHNlcGFyYXRvciwgZW5jbG9zaW5nQ2hhcmFjdGVyKSwgdGFyZ2V0LCBzcGVjcywgcmVwbGFjZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0V2luZG93JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V2luZG93KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUucGFnZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ1NWRG93bmxvYWQ7XG59KF9yZWFjdDIuZGVmYXVsdC5Db21wb25lbnQpO1xuXG5DU1ZEb3dubG9hZC5kZWZhdWx0UHJvcHMgPSBPYmplY3QuYXNzaWduKF9tZXRhUHJvcHMuZGVmYXVsdFByb3BzLCBkZWZhdWx0UHJvcHMpO1xuQ1NWRG93bmxvYWQucHJvcFR5cGVzID0gX21ldGFQcm9wcy5wcm9wVHlwZXM7XG5leHBvcnRzLmRlZmF1bHQgPSBDU1ZEb3dubG9hZDsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9jb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG52YXIgX21ldGFQcm9wcyA9IHJlcXVpcmUoJy4uL21ldGFQcm9wcycpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIENTVkxpbmsgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQ1NWTGluaywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQ1NWTGluayhwcm9wcykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDU1ZMaW5rKTtcblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChDU1ZMaW5rLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ1NWTGluaykpLmNhbGwodGhpcywgcHJvcHMpKTtcblxuICAgIF90aGlzLmJ1aWxkVVJJID0gX3RoaXMuYnVpbGRVUkkuYmluZChfdGhpcyk7XG4gICAgX3RoaXMuc3RhdGUgPSB7IGhyZWY6ICcnIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENTVkxpbmssIFt7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGEgPSBfcHJvcHMuZGF0YSxcbiAgICAgICAgICBoZWFkZXJzID0gX3Byb3BzLmhlYWRlcnMsXG4gICAgICAgICAgc2VwYXJhdG9yID0gX3Byb3BzLnNlcGFyYXRvcixcbiAgICAgICAgICB1RkVGRiA9IF9wcm9wcy51RkVGRixcbiAgICAgICAgICBlbmNsb3NpbmdDaGFyYWN0ZXIgPSBfcHJvcHMuZW5jbG9zaW5nQ2hhcmFjdGVyO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgaHJlZjogdGhpcy5idWlsZFVSSShkYXRhLCB1RkVGRiwgaGVhZGVycywgc2VwYXJhdG9yLCBlbmNsb3NpbmdDaGFyYWN0ZXIpIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzICE9PSBwcmV2UHJvcHMpIHtcbiAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgICAgZGF0YSA9IF9wcm9wczIuZGF0YSxcbiAgICAgICAgICAgIGhlYWRlcnMgPSBfcHJvcHMyLmhlYWRlcnMsXG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBfcHJvcHMyLnNlcGFyYXRvcixcbiAgICAgICAgICAgIHVGRUZGID0gX3Byb3BzMi51RkVGRjtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgaHJlZjogdGhpcy5idWlsZFVSSShkYXRhLCB1RkVGRiwgaGVhZGVycywgc2VwYXJhdG9yKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdidWlsZFVSSScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkVVJJKCkge1xuICAgICAgcmV0dXJuIF9jb3JlLmJ1aWxkVVJJLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVMZWdhY3knLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVMZWdhY3koZXZlbnQpIHtcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB2YXIgX3Byb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgICBkYXRhID0gX3Byb3BzMy5kYXRhLFxuICAgICAgICAgICAgaGVhZGVycyA9IF9wcm9wczMuaGVhZGVycyxcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IF9wcm9wczMuc2VwYXJhdG9yLFxuICAgICAgICAgICAgZmlsZW5hbWUgPSBfcHJvcHMzLmZpbGVuYW1lLFxuICAgICAgICAgICAgZW5jbG9zaW5nQ2hhcmFjdGVyID0gX3Byb3BzMy5lbmNsb3NpbmdDaGFyYWN0ZXIsXG4gICAgICAgICAgICB1RkVGRiA9IF9wcm9wczMudUZFRkY7XG5cblxuICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFt1RkVGRiA/ICdcXHVGRUZGJyA6ICcnLCAoMCwgX2NvcmUudG9DU1YpKGRhdGEsIGhlYWRlcnMsIHNlcGFyYXRvciwgZW5jbG9zaW5nQ2hhcmFjdGVyKV0pO1xuICAgICAgICB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoYmxvYiwgZmlsZW5hbWUpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVBc3luY0NsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQXN5bmNDbGljayhldmVudCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBkb25lID0gZnVuY3Rpb24gZG9uZShwcm9jZWVkKSB7XG4gICAgICAgIGlmIChwcm9jZWVkID09PSBmYWxzZSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzMi5oYW5kbGVMZWdhY3koZXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKGV2ZW50LCBkb25lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVTeW5jQ2xpY2snLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVTeW5jQ2xpY2soZXZlbnQpIHtcbiAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLnByb3BzLm9uQ2xpY2soZXZlbnQpID09PSBmYWxzZTtcbiAgICAgIGlmIChzdG9wRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5oYW5kbGVMZWdhY3koZXZlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hhbmRsZUNsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAodHlwZW9mIF90aGlzMy5wcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy5wcm9wcy5hc3luY09uQ2xpY2sgPyBfdGhpczMuaGFuZGxlQXN5bmNDbGljayhldmVudCkgOiBfdGhpczMuaGFuZGxlU3luY0NsaWNrKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpczMuaGFuZGxlTGVnYWN5KGV2ZW50KTtcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkYXRhID0gX3Byb3BzNC5kYXRhLFxuICAgICAgICAgIGhlYWRlcnMgPSBfcHJvcHM0LmhlYWRlcnMsXG4gICAgICAgICAgc2VwYXJhdG9yID0gX3Byb3BzNC5zZXBhcmF0b3IsXG4gICAgICAgICAgZmlsZW5hbWUgPSBfcHJvcHM0LmZpbGVuYW1lLFxuICAgICAgICAgIHVGRUZGID0gX3Byb3BzNC51RkVGRixcbiAgICAgICAgICBjaGlsZHJlbiA9IF9wcm9wczQuY2hpbGRyZW4sXG4gICAgICAgICAgb25DbGljayA9IF9wcm9wczQub25DbGljayxcbiAgICAgICAgICBhc3luY09uQ2xpY2sgPSBfcHJvcHM0LmFzeW5jT25DbGljayxcbiAgICAgICAgICBlbmNsb3NpbmdDaGFyYWN0ZXIgPSBfcHJvcHM0LmVuY2xvc2luZ0NoYXJhY3RlcixcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFsnZGF0YScsICdoZWFkZXJzJywgJ3NlcGFyYXRvcicsICdmaWxlbmFtZScsICd1RkVGRicsICdjaGlsZHJlbicsICdvbkNsaWNrJywgJ2FzeW5jT25DbGljaycsICdlbmNsb3NpbmdDaGFyYWN0ZXInXSk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2EnLFxuICAgICAgICBfZXh0ZW5kcyh7XG4gICAgICAgICAgZG93bmxvYWQ6IGZpbGVuYW1lXG4gICAgICAgIH0sIHJlc3QsIHtcbiAgICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihsaW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LmxpbmsgPSBsaW5rO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdGFyZ2V0OiAnX3NlbGYnLFxuICAgICAgICAgIGhyZWY6IHRoaXMuc3RhdGUuaHJlZixcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUNsaWNrKClcbiAgICAgICAgfSksXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDU1ZMaW5rO1xufShfcmVhY3QyLmRlZmF1bHQuQ29tcG9uZW50KTtcblxuQ1NWTGluay5kZWZhdWx0UHJvcHMgPSBfbWV0YVByb3BzLmRlZmF1bHRQcm9wcztcbkNTVkxpbmsucHJvcFR5cGVzID0gX21ldGFQcm9wcy5wcm9wVHlwZXM7XG5leHBvcnRzLmRlZmF1bHQgPSBDU1ZMaW5rOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG52YXIgaXNTYWZhcmkgPSBleHBvcnRzLmlzU2FmYXJpID0gZnVuY3Rpb24gaXNTYWZhcmkoKSB7XG4gIHJldHVybiAoL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KVxuICApO1xufTtcblxudmFyIGlzSnNvbnMgPSBleHBvcnRzLmlzSnNvbnMgPSBmdW5jdGlvbiBpc0pzb25zKGFycmF5KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFycmF5KSAmJiBhcnJheS5ldmVyeShmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuICh0eXBlb2Ygcm93ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yocm93KSkgPT09ICdvYmplY3QnICYmICEocm93IGluc3RhbmNlb2YgQXJyYXkpO1xuICB9KTtcbn07XG5cbnZhciBpc0FycmF5cyA9IGV4cG9ydHMuaXNBcnJheXMgPSBmdW5jdGlvbiBpc0FycmF5cyhhcnJheSkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcnJheSkgJiYgYXJyYXkuZXZlcnkoZnVuY3Rpb24gKHJvdykge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJvdyk7XG4gIH0pO1xufTtcblxudmFyIGpzb25zSGVhZGVycyA9IGV4cG9ydHMuanNvbnNIZWFkZXJzID0gZnVuY3Rpb24ganNvbnNIZWFkZXJzKGFycmF5KSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGFycmF5Lm1hcChmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhqc29uKTtcbiAgfSkucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhKSwgX3RvQ29uc3VtYWJsZUFycmF5KGIpKSk7XG4gIH0sIFtdKSk7XG59O1xuXG52YXIganNvbnMyYXJyYXlzID0gZXhwb3J0cy5qc29uczJhcnJheXMgPSBmdW5jdGlvbiBqc29uczJhcnJheXMoanNvbnMsIGhlYWRlcnMpIHtcbiAgaGVhZGVycyA9IGhlYWRlcnMgfHwganNvbnNIZWFkZXJzKGpzb25zKTtcblxuICB2YXIgaGVhZGVyTGFiZWxzID0gaGVhZGVycztcbiAgdmFyIGhlYWRlcktleXMgPSBoZWFkZXJzO1xuICBpZiAoaXNKc29ucyhoZWFkZXJzKSkge1xuICAgIGhlYWRlckxhYmVscyA9IGhlYWRlcnMubWFwKGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIubGFiZWw7XG4gICAgfSk7XG4gICAgaGVhZGVyS2V5cyA9IGhlYWRlcnMubWFwKGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIua2V5O1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGRhdGEgPSBqc29ucy5tYXAoZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHJldHVybiBoZWFkZXJLZXlzLm1hcChmdW5jdGlvbiAoaGVhZGVyKSB7XG4gICAgICByZXR1cm4gZ2V0SGVhZGVyVmFsdWUoaGVhZGVyLCBvYmplY3QpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIFtoZWFkZXJMYWJlbHNdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZGF0YSkpO1xufTtcblxudmFyIGdldEhlYWRlclZhbHVlID0gZXhwb3J0cy5nZXRIZWFkZXJWYWx1ZSA9IGZ1bmN0aW9uIGdldEhlYWRlclZhbHVlKHByb3BlcnR5LCBvYmopIHtcbiAgdmFyIGZvdW5kVmFsdWUgPSBwcm9wZXJ0eS5yZXBsYWNlKC9cXFsoW15cXF1dKyldL2csIFwiLiQxXCIpLnNwbGl0KFwiLlwiKS5yZWR1Y2UoZnVuY3Rpb24gKG8sIHAsIGksIGFycikge1xuICAgIGlmIChvW3BdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyci5zcGxpY2UoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvW3BdO1xuICAgIH1cbiAgfSwgb2JqKTtcblxuICByZXR1cm4gZm91bmRWYWx1ZSA9PT0gdW5kZWZpbmVkID8gcHJvcGVydHkgaW4gb2JqID8gb2JqW3Byb3BlcnR5XSA6ICcnIDogZm91bmRWYWx1ZTtcbn07XG5cbnZhciBlbGVtZW50T3JFbXB0eSA9IGV4cG9ydHMuZWxlbWVudE9yRW1wdHkgPSBmdW5jdGlvbiBlbGVtZW50T3JFbXB0eShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50IHx8IGVsZW1lbnQgPT09IDAgPyBlbGVtZW50IDogJyc7XG59O1xuXG52YXIgam9pbmVyID0gZXhwb3J0cy5qb2luZXIgPSBmdW5jdGlvbiBqb2luZXIoZGF0YSkge1xuICB2YXIgc2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnLCc7XG4gIHZhciBlbmNsb3NpbmdDaGFyYWN0ZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICdcIic7XG5cbiAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0pLm1hcChmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIHJvdy5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50T3JFbXB0eShlbGVtZW50KTtcbiAgICB9KS5tYXAoZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgcmV0dXJuIFwiXCIgKyBlbmNsb3NpbmdDaGFyYWN0ZXIgKyBjb2x1bW4gKyBlbmNsb3NpbmdDaGFyYWN0ZXI7XG4gICAgfSkuam9pbihzZXBhcmF0b3IpO1xuICB9KS5qb2luKFwiXFxuXCIpO1xufTtcblxudmFyIGFycmF5czJjc3YgPSBleHBvcnRzLmFycmF5czJjc3YgPSBmdW5jdGlvbiBhcnJheXMyY3N2KGRhdGEsIGhlYWRlcnMsIHNlcGFyYXRvciwgZW5jbG9zaW5nQ2hhcmFjdGVyKSB7XG4gIHJldHVybiBqb2luZXIoaGVhZGVycyA/IFtoZWFkZXJzXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGRhdGEpKSA6IGRhdGEsIHNlcGFyYXRvciwgZW5jbG9zaW5nQ2hhcmFjdGVyKTtcbn07XG5cbnZhciBqc29uczJjc3YgPSBleHBvcnRzLmpzb25zMmNzdiA9IGZ1bmN0aW9uIGpzb25zMmNzdihkYXRhLCBoZWFkZXJzLCBzZXBhcmF0b3IsIGVuY2xvc2luZ0NoYXJhY3Rlcikge1xuICByZXR1cm4gam9pbmVyKGpzb25zMmFycmF5cyhkYXRhLCBoZWFkZXJzKSwgc2VwYXJhdG9yLCBlbmNsb3NpbmdDaGFyYWN0ZXIpO1xufTtcblxudmFyIHN0cmluZzJjc3YgPSBleHBvcnRzLnN0cmluZzJjc3YgPSBmdW5jdGlvbiBzdHJpbmcyY3N2KGRhdGEsIGhlYWRlcnMsIHNlcGFyYXRvciwgZW5jbG9zaW5nQ2hhcmFjdGVyKSB7XG4gIHJldHVybiBoZWFkZXJzID8gaGVhZGVycy5qb2luKHNlcGFyYXRvcikgKyBcIlxcblwiICsgZGF0YSA6IGRhdGE7XG59O1xuXG52YXIgdG9DU1YgPSBleHBvcnRzLnRvQ1NWID0gZnVuY3Rpb24gdG9DU1YoZGF0YSwgaGVhZGVycywgc2VwYXJhdG9yLCBlbmNsb3NpbmdDaGFyYWN0ZXIpIHtcbiAgaWYgKGlzSnNvbnMoZGF0YSkpIHJldHVybiBqc29uczJjc3YoZGF0YSwgaGVhZGVycywgc2VwYXJhdG9yLCBlbmNsb3NpbmdDaGFyYWN0ZXIpO1xuICBpZiAoaXNBcnJheXMoZGF0YSkpIHJldHVybiBhcnJheXMyY3N2KGRhdGEsIGhlYWRlcnMsIHNlcGFyYXRvciwgZW5jbG9zaW5nQ2hhcmFjdGVyKTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgcmV0dXJuIHN0cmluZzJjc3YoZGF0YSwgaGVhZGVycywgc2VwYXJhdG9yKTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRhdGEgc2hvdWxkIGJlIGEgXFxcIlN0cmluZ1xcXCIsIFxcXCJBcnJheSBvZiBhcnJheXNcXFwiIE9SIFxcXCJBcnJheSBvZiBvYmplY3RzXFxcIiBcIik7XG59O1xuXG52YXIgYnVpbGRVUkkgPSBleHBvcnRzLmJ1aWxkVVJJID0gZnVuY3Rpb24gYnVpbGRVUkkoZGF0YSwgdUZFRkYsIGhlYWRlcnMsIHNlcGFyYXRvciwgZW5jbG9zaW5nQ2hhcmFjdGVyKSB7XG4gIHZhciBjc3YgPSB0b0NTVihkYXRhLCBoZWFkZXJzLCBzZXBhcmF0b3IsIGVuY2xvc2luZ0NoYXJhY3Rlcik7XG4gIHZhciB0eXBlID0gaXNTYWZhcmkoKSA/ICdhcHBsaWNhdGlvbi9jc3YnIDogJ3RleHQvY3N2JztcbiAgdmFyIGJsb2IgPSBuZXcgQmxvYihbdUZFRkYgPyBcIlxcdUZFRkZcIiA6ICcnLCBjc3ZdLCB7IHR5cGU6IHR5cGUgfSk7XG4gIHZhciBkYXRhVVJJID0gXCJkYXRhOlwiICsgdHlwZSArIFwiO2NoYXJzZXQ9dXRmLTgsXCIgKyAodUZFRkYgPyBcIlxcdUZFRkZcIiA6ICcnKSArIGNzdjtcblxuICB2YXIgVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuXG4gIHJldHVybiB0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gJ3VuZGVmaW5lZCcgPyBkYXRhVVJJIDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5DU1ZMaW5rID0gZXhwb3J0cy5DU1ZEb3dubG9hZCA9IHVuZGVmaW5lZDtcblxudmFyIF9Eb3dubG9hZCA9IHJlcXVpcmUoJy4vY29tcG9uZW50cy9Eb3dubG9hZCcpO1xuXG52YXIgX0Rvd25sb2FkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0Rvd25sb2FkKTtcblxudmFyIF9MaW5rID0gcmVxdWlyZSgnLi9jb21wb25lbnRzL0xpbmsnKTtcblxudmFyIF9MaW5rMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0xpbmspO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgQ1NWRG93bmxvYWQgPSBleHBvcnRzLkNTVkRvd25sb2FkID0gX0Rvd25sb2FkMi5kZWZhdWx0O1xudmFyIENTVkxpbmsgPSBleHBvcnRzLkNTVkxpbmsgPSBfTGluazIuZGVmYXVsdDsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlByb3BzTm90Rm9yd2FyZGVkID0gZXhwb3J0cy5kZWZhdWx0UHJvcHMgPSBleHBvcnRzLnByb3BUeXBlcyA9IHVuZGVmaW5lZDtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIHByb3BUeXBlcyA9IGV4cG9ydHMucHJvcFR5cGVzID0ge1xuICBkYXRhOiAoMCwgX3Byb3BUeXBlcy5vbmVPZlR5cGUpKFtfcHJvcFR5cGVzLnN0cmluZywgX3Byb3BUeXBlcy5hcnJheV0pLmlzUmVxdWlyZWQsXG4gIGhlYWRlcnM6IF9wcm9wVHlwZXMuYXJyYXksXG4gIHRhcmdldDogX3Byb3BUeXBlcy5zdHJpbmcsXG4gIHNlcGFyYXRvcjogX3Byb3BUeXBlcy5zdHJpbmcsXG4gIGZpbGVuYW1lOiBfcHJvcFR5cGVzLnN0cmluZyxcbiAgdUZFRkY6IF9wcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogX3Byb3BUeXBlcy5mdW5jLFxuICBhc3luY09uQ2xpY2s6IF9wcm9wVHlwZXMuYm9vbFxufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IGV4cG9ydHMuZGVmYXVsdFByb3BzID0ge1xuICBzZXBhcmF0b3I6ICcsJyxcbiAgZmlsZW5hbWU6ICdnZW5lcmF0ZWRCeV9yZWFjdC1jc3YuY3N2JyxcbiAgdUZFRkY6IHRydWUsXG4gIGFzeW5jT25DbGljazogZmFsc2Vcbn07XG5cbnZhciBQcm9wc05vdEZvcndhcmRlZCA9IGV4cG9ydHMuUHJvcHNOb3RGb3J3YXJkZWQgPSBbJ2RhdGEnLCAnaGVhZGVycyddOyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuXG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuXG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiXSwibmFtZXMiOlsiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJjbGFzc05hbWVzIiwiY2xhc3NlcyIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmciLCJhcmdUeXBlIiwicHVzaCIsIkFycmF5IiwiaXNBcnJheSIsImlubmVyIiwiYXBwbHkiLCJ0b1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsImluY2x1ZGVzIiwia2V5IiwiY2FsbCIsImpvaW4iLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJsaXN0IiwidGhpcyIsIm1hcCIsIml0ZW0iLCJjb250ZW50IiwibmVlZExheWVyIiwiY29uY2F0IiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsInVuZGVmaW5lZCIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiaWQiLCJfayIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInNvdXJjZU1hcHBpbmciLCJzb3VyY2VVUkxzIiwic291cmNlcyIsInNvdXJjZSIsInNvdXJjZVJvb3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiX2NyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsInRhcmdldCIsInByb3BzIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIkNvbnN0cnVjdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX2NvcmUiLCJfbWV0YVByb3BzIiwiQ1NWRG93bmxvYWQiLCJfUmVhY3QkQ29tcG9uZW50IiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJUeXBlRXJyb3IiLCJfdGhpcyIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIiwiX19wcm90b19fIiwiZ2V0UHJvdG90eXBlT2YiLCJzdGF0ZSIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwic2V0UHJvdG90eXBlT2YiLCJidWlsZFVSSSIsImNvbXBvbmVudERpZE1vdW50IiwiX3Byb3BzIiwiaGVhZGVycyIsInNlcGFyYXRvciIsImVuY2xvc2luZ0NoYXJhY3RlciIsInVGRUZGIiwic3BlY3MiLCJyZXBsYWNlIiwicGFnZSIsIndpbmRvdyIsIm9wZW4iLCJnZXRXaW5kb3ciLCJyZW5kZXIiLCJDb21wb25lbnQiLCJkZWZhdWx0UHJvcHMiLCJhc3NpZ24iLCJwcm9wVHlwZXMiLCJfZXh0ZW5kcyIsIkNTVkxpbmsiLCJiaW5kIiwiaHJlZiIsInNldFN0YXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwiX3Byb3BzMiIsImhhbmRsZUxlZ2FjeSIsImV2ZW50IiwibmF2aWdhdG9yIiwibXNTYXZlT3JPcGVuQmxvYiIsInByZXZlbnREZWZhdWx0IiwiX3Byb3BzMyIsImZpbGVuYW1lIiwiYmxvYiIsIkJsb2IiLCJ0b0NTViIsIm1zU2F2ZUJsb2IiLCJoYW5kbGVBc3luY0NsaWNrIiwiX3RoaXMyIiwib25DbGljayIsImRvbmUiLCJwcm9jZWVkIiwiaGFuZGxlU3luY0NsaWNrIiwiaGFuZGxlQ2xpY2siLCJfdGhpczMiLCJhc3luY09uQ2xpY2siLCJfdGhpczQiLCJfcHJvcHM0IiwiY2hpbGRyZW4iLCJyZXN0IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwia2V5cyIsImluZGV4T2YiLCJjcmVhdGVFbGVtZW50IiwiZG93bmxvYWQiLCJyZWYiLCJsaW5rIiwiX3R5cGVvZiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYXJyIiwiYXJyMiIsImZyb20iLCJpc1NhZmFyaSIsInRlc3QiLCJ1c2VyQWdlbnQiLCJpc0pzb25zIiwiYXJyYXkiLCJldmVyeSIsInJvdyIsImlzQXJyYXlzIiwianNvbnNIZWFkZXJzIiwianNvbiIsInJlZHVjZSIsImEiLCJiIiwiU2V0IiwianNvbnMyYXJyYXlzIiwianNvbnMiLCJoZWFkZXJMYWJlbHMiLCJoZWFkZXJLZXlzIiwiaGVhZGVyIiwibGFiZWwiLCJvYmplY3QiLCJnZXRIZWFkZXJWYWx1ZSIsInByb3BlcnR5IiwiZm91bmRWYWx1ZSIsInNwbGl0IiwibyIsInAiLCJzcGxpY2UiLCJlbGVtZW50T3JFbXB0eSIsImVsZW1lbnQiLCJqb2luZXIiLCJmaWx0ZXIiLCJlIiwiY29sdW1uIiwiYXJyYXlzMmNzdiIsImpzb25zMmNzdiIsInN0cmluZzJjc3YiLCJjc3YiLCJ0eXBlIiwiZGF0YVVSSSIsIlVSTCIsIndlYmtpdFVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIl9Eb3dubG9hZDIiLCJfTGluazIiLCJQcm9wc05vdEZvcndhcmRlZCIsIl9wcm9wVHlwZXMiLCJvbmVPZlR5cGUiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiYm9vbCIsImZ1bmMiLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsInJlc3VsdCIsIm1vZHVsZXNUb0RvbSIsIm9wdGlvbnMiLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiY291bnQiLCJpbmRleEJ5SWRlbnRpZmllciIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsImFwaSIsImRvbUFQSSIsInVwZGF0ZSIsIm5ld09iaiIsInJlbW92ZSIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJpbmRleCIsIm5ld0xhc3RJZGVudGlmaWVycyIsIl9pIiwiX2luZGV4IiwibWVtbyIsImluc2VydEJ5U2VsZWN0b3IiLCJpbnNlcnQiLCJzdHlsZSIsImdldFRhcmdldCIsInN0eWxlVGFyZ2V0IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJoZWFkIiwiRXJyb3IiLCJhcHBlbmRDaGlsZCIsImluc2VydFN0eWxlRWxlbWVudCIsInNldEF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVzIiwic2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzIiwic3R5bGVFbGVtZW50Iiwibm9uY2UiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZVRhZ1RyYW5zZm9ybSIsInJlbW92ZVN0eWxlRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiZmlyc3RDaGlsZCIsImNyZWF0ZVRleHROb2RlIl0sInNvdXJjZVJvb3QiOiIifQ==