-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path1156.e3f5d11c.iframe.bundle.js
More file actions
3 lines (3 loc) · 68.1 KB
/
1156.e3f5d11c.iframe.bundle.js
File metadata and controls
3 lines (3 loc) · 68.1 KB
1
2
3
/*! For license information please see 1156.e3f5d11c.iframe.bundle.js.LICENSE.txt */
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[1156,3333,5714,3281,5662,8043,8095,424,109,6138,8519,900,2329,4710,6394,4013,8775,3537,680,8299,5442,3061,3585,5966,8347,728,4061,6442,8823,1204,2633,476,2857,5238,7619,0,4285,6666,2742,361,7504,5123,3218,837],{"./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/js-cookie/src/js.cookie.js":(module,exports,__webpack_require__)=>{var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_RESULT__;!function(factory){if(void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=factory)?__WEBPACK_AMD_DEFINE_FACTORY__.call(exports,__webpack_require__,exports,module):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__),!0,module.exports=factory(),!!0){var OldCookies=window.Cookies,api=window.Cookies=factory();api.noConflict=function(){return window.Cookies=OldCookies,api}}}((function(){function extend(){for(var i=0,result={};i<arguments.length;i++){var attributes=arguments[i];for(var key in attributes)result[key]=attributes[key]}return result}return function init(converter){function api(key,value,attributes){var result;if("undefined"!=typeof document){if(arguments.length>1){if("number"==typeof(attributes=extend({path:"/"},api.defaults,attributes)).expires){var expires=new Date;expires.setMilliseconds(expires.getMilliseconds()+864e5*attributes.expires),attributes.expires=expires}try{result=JSON.stringify(value),/^[\{\[]/.test(result)&&(value=result)}catch(e){}return value=converter.write?converter.write(value,key):encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),key=(key=(key=encodeURIComponent(String(key))).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape),document.cookie=[key,"=",value,attributes.expires?"; expires="+attributes.expires.toUTCString():"",attributes.path?"; path="+attributes.path:"",attributes.domain?"; domain="+attributes.domain:"",attributes.secure?"; secure":""].join("")}key||(result={});for(var cookies=document.cookie?document.cookie.split("; "):[],rdecode=/(%[0-9A-Z]{2})+/g,i=0;i<cookies.length;i++){var parts=cookies[i].split("="),cookie=parts.slice(1).join("=");'"'===cookie.charAt(0)&&(cookie=cookie.slice(1,-1));try{var name=parts[0].replace(rdecode,decodeURIComponent);if(cookie=converter.read?converter.read(cookie,name):converter(cookie,name)||cookie.replace(rdecode,decodeURIComponent),this.json)try{cookie=JSON.parse(cookie)}catch(e){}if(key===name){result=cookie;break}key||(result[name]=cookie)}catch(e){}}return result}}return api.set=api,api.get=function(key){return api.call(api,key)},api.getJSON=function(){return api.apply({json:!0},[].slice.call(arguments))},api.defaults={},api.remove=function(key,attributes){api(key,"",extend(attributes,{expires:-1}))},api.withConverter=init,api}((function(){}))}))},"./node_modules/prop-types/factoryWithThrowingShims.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var ReactPropTypesSecret=__webpack_require__("./node_modules/prop-types/lib/ReactPropTypesSecret.js");function emptyFunction(){}module.exports=function(){function shim(props,propName,componentName,location,propFullName,secret){if(secret!==ReactPropTypesSecret){var err=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw err.name="Invariant Violation",err}}function getShim(){return shim}shim.isRequired=shim;var ReactPropTypes={array:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim};return ReactPropTypes.checkPropTypes=emptyFunction,ReactPropTypes.PropTypes=ReactPropTypes,ReactPropTypes}},"./node_modules/prop-types/index.js":(module,__unused_webpack_exports,__webpack_require__)=>{module.exports=__webpack_require__("./node_modules/prop-types/factoryWithThrowingShims.js")()},"./node_modules/prop-types/lib/ReactPropTypesSecret.js":module=>{"use strict";module.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},"./node_modules/query-string/index.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";var strictUriEncode=__webpack_require__("./node_modules/strict-uri-encode/index.js");function encode(value,strict){return strict?strictUriEncode(value):encodeURIComponent(value)}exports.extract=function(str){return str.split("?")[1]||""},exports.parse=function(str){var ret=Object.create(null);return"string"!=typeof str?ret:(str=str.trim().replace(/^(\?|#|&)/,""))?(str.split("&").forEach((function(param){var parts=param.replace(/\+/g," ").split("="),key=parts.shift(),val=parts.length>0?parts.join("="):void 0;key=decodeURIComponent(key),val=void 0===val?null:decodeURIComponent(val),void 0===ret[key]?ret[key]=val:Array.isArray(ret[key])?ret[key].push(val):ret[key]=[ret[key],val]})),ret):ret},exports.stringify=function(obj,opts){var strict=!1!==(opts=opts||{}).strict;return obj?Object.keys(obj).sort().map((function(key){var val=obj[key];if(void 0===val)return"";if(null===val)return key;if(Array.isArray(val)){var result=[];return val.slice().sort().forEach((function(val2){void 0!==val2&&(null===val2?result.push(encode(key,strict)):result.push(encode(key,strict)+"="+encode(val2,strict)))})),result.join("&")}return encode(key,strict)+"="+encode(val,strict)})).filter((function(x){return x.length>0})).join("&"):""}},"./node_modules/strict-uri-encode/index.js":module=>{"use strict";module.exports=function(str){return encodeURIComponent(str).replace(/[!'()*]/g,(function(c){return"%"+c.charCodeAt(0).toString(16).toUpperCase()}))}},"./node_modules/whatwg-fetch/fetch.js":function(){!function(self){"use strict";if(!self.fetch){var support_searchParams="URLSearchParams"in self,support_iterable="Symbol"in self&&"iterator"in Symbol,support_blob="FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(e){return!1}}(),support_formData="FormData"in self,support_arrayBuffer="ArrayBuffer"in self;if(support_arrayBuffer)var viewClasses=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],isDataView=function(obj){return obj&&DataView.prototype.isPrototypeOf(obj)},isArrayBufferView=ArrayBuffer.isView||function(obj){return obj&&viewClasses.indexOf(Object.prototype.toString.call(obj))>-1};Headers.prototype.append=function(name,value){name=normalizeName(name),value=normalizeValue(value);var oldValue=this.map[name];this.map[name]=oldValue?oldValue+","+value:value},Headers.prototype.delete=function(name){delete this.map[normalizeName(name)]},Headers.prototype.get=function(name){return name=normalizeName(name),this.has(name)?this.map[name]:null},Headers.prototype.has=function(name){return this.map.hasOwnProperty(normalizeName(name))},Headers.prototype.set=function(name,value){this.map[normalizeName(name)]=normalizeValue(value)},Headers.prototype.forEach=function(callback,thisArg){for(var name in this.map)this.map.hasOwnProperty(name)&&callback.call(thisArg,this.map[name],name,this)},Headers.prototype.keys=function(){var items=[];return this.forEach((function(value,name){items.push(name)})),iteratorFor(items)},Headers.prototype.values=function(){var items=[];return this.forEach((function(value){items.push(value)})),iteratorFor(items)},Headers.prototype.entries=function(){var items=[];return this.forEach((function(value,name){items.push([name,value])})),iteratorFor(items)},support_iterable&&(Headers.prototype[Symbol.iterator]=Headers.prototype.entries);var methods=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];Request.prototype.clone=function(){return new Request(this,{body:this._bodyInit})},Body.call(Request.prototype),Body.call(Response.prototype),Response.prototype.clone=function(){return new Response(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new Headers(this.headers),url:this.url})},Response.error=function(){var response=new Response(null,{status:0,statusText:""});return response.type="error",response};var redirectStatuses=[301,302,303,307,308];Response.redirect=function(url,status){if(-1===redirectStatuses.indexOf(status))throw new RangeError("Invalid status code");return new Response(null,{status,headers:{location:url}})},self.Headers=Headers,self.Request=Request,self.Response=Response,self.fetch=function(input,init){return new Promise((function(resolve,reject){var request=new Request(input,init),xhr=new XMLHttpRequest;xhr.onload=function(){var rawHeaders,headers,options={status:xhr.status,statusText:xhr.statusText,headers:(rawHeaders=xhr.getAllResponseHeaders()||"",headers=new Headers,rawHeaders.split(/\r?\n/).forEach((function(line){var parts=line.split(":"),key=parts.shift().trim();if(key){var value=parts.join(":").trim();headers.append(key,value)}})),headers)};options.url="responseURL"in xhr?xhr.responseURL:options.headers.get("X-Request-URL");var body="response"in xhr?xhr.response:xhr.responseText;resolve(new Response(body,options))},xhr.onerror=function(){reject(new TypeError("Network request failed"))},xhr.ontimeout=function(){reject(new TypeError("Network request failed"))},xhr.open(request.method,request.url,!0),"include"===request.credentials&&(xhr.withCredentials=!0),"responseType"in xhr&&support_blob&&(xhr.responseType="blob"),request.headers.forEach((function(value,name){xhr.setRequestHeader(name,value)})),xhr.send(void 0===request._bodyInit?null:request._bodyInit)}))},self.fetch.polyfill=!0}function normalizeName(name){if("string"!=typeof name&&(name=String(name)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name))throw new TypeError("Invalid character in header field name");return name.toLowerCase()}function normalizeValue(value){return"string"!=typeof value&&(value=String(value)),value}function iteratorFor(items){var iterator={next:function(){var value=items.shift();return{done:void 0===value,value}}};return support_iterable&&(iterator[Symbol.iterator]=function(){return iterator}),iterator}function Headers(headers){this.map={},headers instanceof Headers?headers.forEach((function(value,name){this.append(name,value)}),this):Array.isArray(headers)?headers.forEach((function(header){this.append(header[0],header[1])}),this):headers&&Object.getOwnPropertyNames(headers).forEach((function(name){this.append(name,headers[name])}),this)}function consumed(body){if(body.bodyUsed)return Promise.reject(new TypeError("Already read"));body.bodyUsed=!0}function fileReaderReady(reader){return new Promise((function(resolve,reject){reader.onload=function(){resolve(reader.result)},reader.onerror=function(){reject(reader.error)}}))}function readBlobAsArrayBuffer(blob){var reader=new FileReader,promise=fileReaderReady(reader);return reader.readAsArrayBuffer(blob),promise}function bufferClone(buf){if(buf.slice)return buf.slice(0);var view=new Uint8Array(buf.byteLength);return view.set(new Uint8Array(buf)),view.buffer}function Body(){return this.bodyUsed=!1,this._initBody=function(body){if(this._bodyInit=body,body)if("string"==typeof body)this._bodyText=body;else if(support_blob&&Blob.prototype.isPrototypeOf(body))this._bodyBlob=body;else if(support_formData&&FormData.prototype.isPrototypeOf(body))this._bodyFormData=body;else if(support_searchParams&&URLSearchParams.prototype.isPrototypeOf(body))this._bodyText=body.toString();else if(support_arrayBuffer&&support_blob&&isDataView(body))this._bodyArrayBuffer=bufferClone(body.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else{if(!support_arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(body)&&!isArrayBufferView(body))throw new Error("unsupported BodyInit type");this._bodyArrayBuffer=bufferClone(body)}else this._bodyText="";this.headers.get("content-type")||("string"==typeof body?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):support_searchParams&&URLSearchParams.prototype.isPrototypeOf(body)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},support_blob&&(this.blob=function(){var rejected=consumed(this);if(rejected)return rejected;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?consumed(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(readBlobAsArrayBuffer)}),this.text=function(){var rejected=consumed(this);if(rejected)return rejected;if(this._bodyBlob)return function readBlobAsText(blob){var reader=new FileReader,promise=fileReaderReady(reader);return reader.readAsText(blob),promise}(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(function readArrayBufferAsText(buf){for(var view=new Uint8Array(buf),chars=new Array(view.length),i=0;i<view.length;i++)chars[i]=String.fromCharCode(view[i]);return chars.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},support_formData&&(this.formData=function(){return this.text().then(decode)}),this.json=function(){return this.text().then(JSON.parse)},this}function Request(input,options){var body=(options=options||{}).body;if(input instanceof Request){if(input.bodyUsed)throw new TypeError("Already read");this.url=input.url,this.credentials=input.credentials,options.headers||(this.headers=new Headers(input.headers)),this.method=input.method,this.mode=input.mode,body||null==input._bodyInit||(body=input._bodyInit,input.bodyUsed=!0)}else this.url=String(input);if(this.credentials=options.credentials||this.credentials||"omit",!options.headers&&this.headers||(this.headers=new Headers(options.headers)),this.method=function normalizeMethod(method){var upcased=method.toUpperCase();return methods.indexOf(upcased)>-1?upcased:method}(options.method||this.method||"GET"),this.mode=options.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&body)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(body)}function decode(body){var form=new FormData;return body.trim().split("&").forEach((function(bytes){if(bytes){var split=bytes.split("="),name=split.shift().replace(/\+/g," "),value=split.join("=").replace(/\+/g," ");form.append(decodeURIComponent(name),decodeURIComponent(value))}})),form}function Response(bodyInit,options){options||(options={}),this.type="default",this.status="status"in options?options.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in options?options.statusText:"OK",this.headers=new Headers(options.headers),this.url=options.url||"",this._initBody(bodyInit)}}("undefined"!=typeof self?self:this)}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE9BQVMsSUFDOUNsRyxLQUFLbUcsV0FBYSxlQUFnQmtCLFFBQVVBLFFBQVFsQixXQUFhLEtBQ2pFbkcsS0FBS29HLFFBQVUsSUFBSXRCLFFBQVF1QyxRQUFRakIsU0FDbkNwRyxLQUFLcUcsSUFBTWdCLFFBQVFoQixLQUFPLEdBQzFCckcsS0FBS3lKLFVBQVV3QixTQUNqQixDQTJFRCxDQTVjRCxDQTRjbUIsb0JBQVRoSCxLQUF1QkEsS0FBT2pFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2pzLWNvb2tpZS9zcmMvanMuY29va2llLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3F1ZXJ5LXN0cmluZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc3RyaWN0LXVyaS1lbmNvZGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cdHZhciBuYXRpdmVDb2RlU3RyaW5nID0gJ1tuYXRpdmUgY29kZV0nO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiLyohXG4gKiBKYXZhU2NyaXB0IENvb2tpZSB2Mi4xLjNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1jb29raWUvanMtY29va2llXG4gKlxuICogQ29weXJpZ2h0IDIwMDYsIDIwMTUgS2xhdXMgSGFydGwgJiBGYWduZXIgQnJhY2tcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG47KGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdHZhciByZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXIgPSBmYWxzZTtcblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShmYWN0b3J5KTtcblx0XHRyZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXIgPSB0cnVlO1xuXHR9XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0XHRyZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXIgPSB0cnVlO1xuXHR9XG5cdGlmICghcmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyKSB7XG5cdFx0dmFyIE9sZENvb2tpZXMgPSB3aW5kb3cuQ29va2llcztcblx0XHR2YXIgYXBpID0gd2luZG93LkNvb2tpZXMgPSBmYWN0b3J5KCk7XG5cdFx0YXBpLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHR3aW5kb3cuQ29va2llcyA9IE9sZENvb2tpZXM7XG5cdFx0XHRyZXR1cm4gYXBpO1xuXHRcdH07XG5cdH1cbn0oZnVuY3Rpb24gKCkge1xuXHRmdW5jdGlvbiBleHRlbmQgKCkge1xuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0Zm9yICg7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhdHRyaWJ1dGVzID0gYXJndW1lbnRzWyBpIF07XG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gYXR0cmlidXRlcykge1xuXHRcdFx0XHRyZXN1bHRba2V5XSA9IGF0dHJpYnV0ZXNba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZ1bmN0aW9uIGluaXQgKGNvbnZlcnRlcikge1xuXHRcdGZ1bmN0aW9uIGFwaSAoa2V5LCB2YWx1ZSwgYXR0cmlidXRlcykge1xuXHRcdFx0dmFyIHJlc3VsdDtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV3JpdGVcblxuXHRcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdGF0dHJpYnV0ZXMgPSBleHRlbmQoe1xuXHRcdFx0XHRcdHBhdGg6ICcvJ1xuXHRcdFx0XHR9LCBhcGkuZGVmYXVsdHMsIGF0dHJpYnV0ZXMpO1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgYXR0cmlidXRlcy5leHBpcmVzID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRcdHZhciBleHBpcmVzID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRleHBpcmVzLnNldE1pbGxpc2Vjb25kcyhleHBpcmVzLmdldE1pbGxpc2Vjb25kcygpICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZSs1KTtcblx0XHRcdFx0XHRhdHRyaWJ1dGVzLmV4cGlyZXMgPSBleHBpcmVzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXN1bHQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG5cdFx0XHRcdFx0aWYgKC9eW1xce1xcW10vLnRlc3QocmVzdWx0KSkge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSByZXN1bHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0XHRcdGlmICghY29udmVydGVyLndyaXRlKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHZhbHVlKSlcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDNBfDNDfDNFfDNEfDJGfDNGfDQwfDVCfDVEfDVFfDYwfDdCfDdEfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlID0gY29udmVydGVyLndyaXRlKHZhbHVlLCBrZXkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0a2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhrZXkpKTtcblx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudCk7XG5cdFx0XHRcdGtleSA9IGtleS5yZXBsYWNlKC9bXFwoXFwpXS9nLCBlc2NhcGUpO1xuXG5cdFx0XHRcdHJldHVybiAoZG9jdW1lbnQuY29va2llID0gW1xuXHRcdFx0XHRcdGtleSwgJz0nLCB2YWx1ZSxcblx0XHRcdFx0XHRhdHRyaWJ1dGVzLmV4cGlyZXMgPyAnOyBleHBpcmVzPScgKyBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnLCAvLyB1c2UgZXhwaXJlcyBhdHRyaWJ1dGUsIG1heC1hZ2UgaXMgbm90IHN1cHBvcnRlZCBieSBJRVxuXHRcdFx0XHRcdGF0dHJpYnV0ZXMucGF0aCA/ICc7IHBhdGg9JyArIGF0dHJpYnV0ZXMucGF0aCA6ICcnLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXMuZG9tYWluID8gJzsgZG9tYWluPScgKyBhdHRyaWJ1dGVzLmRvbWFpbiA6ICcnLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXMuc2VjdXJlID8gJzsgc2VjdXJlJyA6ICcnXG5cdFx0XHRcdF0uam9pbignJykpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZWFkXG5cblx0XHRcdGlmICgha2V5KSB7XG5cdFx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5XG5cdFx0XHQvLyBpbiBjYXNlIHRoZXJlIGFyZSBubyBjb29raWVzIGF0IGFsbC4gQWxzbyBwcmV2ZW50cyBvZGQgcmVzdWx0IHdoZW5cblx0XHRcdC8vIGNhbGxpbmcgXCJnZXQoKVwiXG5cdFx0XHR2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSA6IFtdO1xuXHRcdFx0dmFyIHJkZWNvZGUgPSAvKCVbMC05QS1aXXsyfSkrL2c7XG5cdFx0XHR2YXIgaSA9IDA7XG5cblx0XHRcdGZvciAoOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgcGFydHMgPSBjb29raWVzW2ldLnNwbGl0KCc9Jyk7XG5cdFx0XHRcdHZhciBjb29raWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCc9Jyk7XG5cblx0XHRcdFx0aWYgKGNvb2tpZS5jaGFyQXQoMCkgPT09ICdcIicpIHtcblx0XHRcdFx0XHRjb29raWUgPSBjb29raWUuc2xpY2UoMSwgLTEpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR2YXIgbmFtZSA9IHBhcnRzWzBdLnJlcGxhY2UocmRlY29kZSwgZGVjb2RlVVJJQ29tcG9uZW50KTtcblx0XHRcdFx0XHRjb29raWUgPSBjb252ZXJ0ZXIucmVhZCA/XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXIucmVhZChjb29raWUsIG5hbWUpIDogY29udmVydGVyKGNvb2tpZSwgbmFtZSkgfHxcblx0XHRcdFx0XHRcdGNvb2tpZS5yZXBsYWNlKHJkZWNvZGUsIGRlY29kZVVSSUNvbXBvbmVudCk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5qc29uKSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRjb29raWUgPSBKU09OLnBhcnNlKGNvb2tpZSk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChrZXkgPT09IG5hbWUpIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IGNvb2tpZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICgha2V5KSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRbbmFtZV0gPSBjb29raWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblxuXHRcdGFwaS5zZXQgPSBhcGk7XG5cdFx0YXBpLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBhcGkuY2FsbChhcGksIGtleSk7XG5cdFx0fTtcblx0XHRhcGkuZ2V0SlNPTiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBhcGkuYXBwbHkoe1xuXHRcdFx0XHRqc29uOiB0cnVlXG5cdFx0XHR9LCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuXHRcdH07XG5cdFx0YXBpLmRlZmF1bHRzID0ge307XG5cblx0XHRhcGkucmVtb3ZlID0gZnVuY3Rpb24gKGtleSwgYXR0cmlidXRlcykge1xuXHRcdFx0YXBpKGtleSwgJycsIGV4dGVuZChhdHRyaWJ1dGVzLCB7XG5cdFx0XHRcdGV4cGlyZXM6IC0xXG5cdFx0XHR9KSk7XG5cdFx0fTtcblxuXHRcdGFwaS53aXRoQ29udmVydGVyID0gaW5pdDtcblxuXHRcdHJldHVybiBhcGk7XG5cdH1cblxuXHRyZXR1cm4gaW5pdChmdW5jdGlvbiAoKSB7fSk7XG59KSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBib29sOiBzaGltLFxuICAgIGZ1bmM6IHNoaW0sXG4gICAgbnVtYmVyOiBzaGltLFxuICAgIG9iamVjdDogc2hpbSxcbiAgICBzdHJpbmc6IHNoaW0sXG4gICAgc3ltYm9sOiBzaGltLFxuXG4gICAgYW55OiBzaGltLFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXG4gICAgZWxlbWVudDogc2hpbSxcbiAgICBpbnN0YW5jZU9mOiBnZXRTaGltLFxuICAgIG5vZGU6IHNoaW0sXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXG4gICAgb25lT2Y6IGdldFNoaW0sXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxuICAgIHNoYXBlOiBnZXRTaGltLFxuICAgIGV4YWN0OiBnZXRTaGltXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBlbXB0eUZ1bmN0aW9uO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiZcbiAgICBTeW1ib2wuZm9yICYmXG4gICAgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxuICAgIDB4ZWFjNztcblxuICB2YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICAgIG9iamVjdCAhPT0gbnVsbCAmJlxuICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG4gIH07XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3RyaWN0VXJpRW5jb2RlID0gcmVxdWlyZSgnc3RyaWN0LXVyaS1lbmNvZGUnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbHVlLCBzdHJpY3QpIHtcblx0cmV0dXJuIHN0cmljdCA/IHN0cmljdFVyaUVuY29kZSh2YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xufVxuXG5leHBvcnRzLmV4dHJhY3QgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdHJldHVybiBzdHIuc3BsaXQoJz8nKVsxXSB8fCAnJztcbn07XG5cbmV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCBubyBwcm90b3R5cGVcblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9xdWVyeS1zdHJpbmcvaXNzdWVzLzQ3XG5cdHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5cdGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiByZXQ7XG5cdH1cblxuXHRzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoL14oXFw/fCN8JikvLCAnJyk7XG5cblx0aWYgKCFzdHIpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyLnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcblx0XHR2YXIgcGFydHMgPSBwYXJhbS5yZXBsYWNlKC9cXCsvZywgJyAnKS5zcGxpdCgnPScpO1xuXHRcdC8vIEZpcmVmb3ggKHByZSA0MCkgZGVjb2RlcyBgJTNEYCB0byBgPWBcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZy9wdWxsLzM3XG5cdFx0dmFyIGtleSA9IHBhcnRzLnNoaWZ0KCk7XG5cdFx0dmFyIHZhbCA9IHBhcnRzLmxlbmd0aCA+IDAgPyBwYXJ0cy5qb2luKCc9JykgOiB1bmRlZmluZWQ7XG5cblx0XHRrZXkgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5KTtcblxuXHRcdC8vIG1pc3NpbmcgYD1gIHNob3VsZCBiZSBgbnVsbGA6XG5cdFx0Ly8gaHR0cDovL3czLm9yZy9UUi8yMDEyL1dELXVybC0yMDEyMDUyNC8jY29sbGVjdC11cmwtcGFyYW1ldGVyc1xuXHRcdHZhbCA9IHZhbCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlY29kZVVSSUNvbXBvbmVudCh2YWwpO1xuXG5cdFx0aWYgKHJldFtrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldFtrZXldID0gdmFsO1xuXHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXRba2V5XSkpIHtcblx0XHRcdHJldFtrZXldLnB1c2godmFsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0W2tleV0gPSBbcmV0W2tleV0sIHZhbF07XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXG5cdHZhciBzdHJpY3QgPSBvcHRzLnN0cmljdCAhPT0gZmFsc2U7XG5cblx0cmV0dXJuIG9iaiA/IE9iamVjdC5rZXlzKG9iaikuc29ydCgpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0dmFyIHZhbCA9IG9ialtrZXldO1xuXG5cdFx0aWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGtleTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gW107XG5cblx0XHRcdHZhbC5zbGljZSgpLnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwyKSB7XG5cdFx0XHRcdGlmICh2YWwyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsMiA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGVuY29kZShrZXksIHN0cmljdCkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGVuY29kZShrZXksIHN0cmljdCkgKyAnPScgKyBlbmNvZGUodmFsMiwgc3RyaWN0KSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oJyYnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZW5jb2RlKGtleSwgc3RyaWN0KSArICc9JyArIGVuY29kZSh2YWwsIHN0cmljdCk7XG5cdH0pLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuXHRcdHJldHVybiB4Lmxlbmd0aCA+IDA7XG5cdH0pLmpvaW4oJyYnKSA6ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cikge1xuXHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbiAoYykge1xuXHRcdHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdH0pO1xufTtcbiIsIihmdW5jdGlvbihzZWxmKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoc2VsZi5mZXRjaCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIHN1cHBvcnQgPSB7XG4gICAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBzZWxmLFxuICAgIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBzZWxmICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICAgIGJsb2I6ICdGaWxlUmVhZGVyJyBpbiBzZWxmICYmICdCbG9iJyBpbiBzZWxmICYmIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICAgIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIHNlbGYsXG4gICAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gc2VsZlxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgICBdXG5cbiAgICB2YXIgaXNEYXRhVmlldyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG4gICAgfVxuXG4gICAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID0gQXJyYXlCdWZmZXIuaXNWaWV3IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICAgIH1cbiAgICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lJylcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbiAgZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXRlcmF0b3JcbiAgfVxuXG4gIGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICAgIHRoaXMubWFwID0ge31cblxuICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgfSwgdGhpcylcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgICB9LCB0aGlzKVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgICB9LCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gICAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlKycsJyt2YWx1ZSA6IHZhbHVlXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXVxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkgeyBpdGVtcy5wdXNoKG5hbWUpIH0pXG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW11cbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHsgaXRlbXMucHVzaCh2YWx1ZSkgfSlcbiAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW11cbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKSB9KVxuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICAgIH1cbiAgICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgICAgfVxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBCb2R5KCkge1xuICAgIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICAgIGlmICghYm9keSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIEJvZHlJbml0IHR5cGUnKVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gY29uc3VtZWQodGhpcykgfHwgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbiAgdmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuICBmdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gICAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgIHJldHVybiAobWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEpID8gdXBjYXNlZCA6IG1ldGhvZFxuICB9XG5cbiAgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gICAgfVxuXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnb21pdCdcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gICAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gICAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICAgIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keSlcbiAgfVxuXG4gIFJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHsgYm9keTogdGhpcy5fYm9keUluaXQgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gICAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgIGJvZHkudHJpbSgpLnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgICByYXdIZWFkZXJzLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG4gIGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgICB0aGlzLnN0YXR1cyA9ICdzdGF0dXMnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1cyA6IDIwMFxuICAgIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnc3RhdHVzVGV4dCcgaW4gb3B0aW9ucyA/IG9wdGlvbnMuc3RhdHVzVGV4dCA6ICdPSydcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICAgIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxuICB9XG5cbiAgQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuICBSZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9KVxuICB9XG5cbiAgUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICAgIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICB2YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuICBSZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gICAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxuICB9XG5cbiAgc2VsZi5IZWFkZXJzID0gSGVhZGVyc1xuICBzZWxmLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIHNlbGYuUmVzcG9uc2UgPSBSZXNwb25zZVxuXG4gIHNlbGYuZmV0Y2ggPSBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfVxuXG4gICAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9XG5cbiAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnVybCwgdHJ1ZSlcblxuICAgICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyICYmIHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcblxuICAgICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgICB9KVxuICB9XG4gIHNlbGYuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcyk7XG4iXSwibmFtZXMiOlsiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJjbGFzc05hbWVzIiwiY2xhc3NlcyIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmciLCJhcmdUeXBlIiwicHVzaCIsIkFycmF5IiwiaXNBcnJheSIsImlubmVyIiwiYXBwbHkiLCJ0b1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsImluY2x1ZGVzIiwia2V5IiwiY2FsbCIsImpvaW4iLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCIsImZhY3RvcnkiLCJPbGRDb29raWVzIiwid2luZG93IiwiQ29va2llcyIsImFwaSIsIm5vQ29uZmxpY3QiLCJleHRlbmQiLCJyZXN1bHQiLCJhdHRyaWJ1dGVzIiwiaW5pdCIsImNvbnZlcnRlciIsInZhbHVlIiwiZG9jdW1lbnQiLCJwYXRoIiwiZGVmYXVsdHMiLCJleHBpcmVzIiwiRGF0ZSIsInNldE1pbGxpc2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0ZXN0IiwiZSIsIndyaXRlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiU3RyaW5nIiwicmVwbGFjZSIsImRlY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsImNvb2tpZSIsInRvVVRDU3RyaW5nIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llcyIsInNwbGl0IiwicmRlY29kZSIsInBhcnRzIiwic2xpY2UiLCJjaGFyQXQiLCJuYW1lIiwicmVhZCIsInRoaXMiLCJqc29uIiwicGFyc2UiLCJzZXQiLCJnZXQiLCJnZXRKU09OIiwicmVtb3ZlIiwid2l0aENvbnZlcnRlciIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwiZW1wdHlGdW5jdGlvbiIsInNoaW0iLCJwcm9wcyIsInByb3BOYW1lIiwiY29tcG9uZW50TmFtZSIsImxvY2F0aW9uIiwicHJvcEZ1bGxOYW1lIiwic2VjcmV0IiwiZXJyIiwiRXJyb3IiLCJnZXRTaGltIiwiaXNSZXF1aXJlZCIsIlJlYWN0UHJvcFR5cGVzIiwiYXJyYXkiLCJib29sIiwiZnVuYyIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyIsInN5bWJvbCIsImFueSIsImFycmF5T2YiLCJlbGVtZW50IiwiaW5zdGFuY2VPZiIsIm5vZGUiLCJvYmplY3RPZiIsIm9uZU9mIiwib25lT2ZUeXBlIiwic2hhcGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaWN0VXJpRW5jb2RlIiwiZW5jb2RlIiwic3RyaWN0IiwiZXh0cmFjdCIsInN0ciIsInJldCIsImNyZWF0ZSIsInRyaW0iLCJmb3JFYWNoIiwicGFyYW0iLCJzaGlmdCIsInZhbCIsInVuZGVmaW5lZCIsIm9iaiIsIm9wdHMiLCJrZXlzIiwic29ydCIsIm1hcCIsInZhbDIiLCJmaWx0ZXIiLCJ4IiwiYyIsImNoYXJDb2RlQXQiLCJ0b1VwcGVyQ2FzZSIsInNlbGYiLCJmZXRjaCIsInN1cHBvcnQiLCJTeW1ib2wiLCJCbG9iIiwidmlld0NsYXNzZXMiLCJpc0RhdGFWaWV3IiwiRGF0YVZpZXciLCJpc1Byb3RvdHlwZU9mIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImluZGV4T2YiLCJIZWFkZXJzIiwiYXBwZW5kIiwibm9ybWFsaXplTmFtZSIsIm5vcm1hbGl6ZVZhbHVlIiwib2xkVmFsdWUiLCJoYXMiLCJjYWxsYmFjayIsInRoaXNBcmciLCJpdGVtcyIsIml0ZXJhdG9yRm9yIiwidmFsdWVzIiwiZW50cmllcyIsIml0ZXJhdG9yIiwibWV0aG9kcyIsIlJlcXVlc3QiLCJjbG9uZSIsImJvZHkiLCJfYm9keUluaXQiLCJCb2R5IiwiUmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyIsInVybCIsImVycm9yIiwicmVzcG9uc2UiLCJ0eXBlIiwicmVkaXJlY3RTdGF0dXNlcyIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImlucHV0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXF1ZXN0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvbmxvYWQiLCJyYXdIZWFkZXJzIiwib3B0aW9ucyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImxpbmUiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsIm9uZXJyb3IiLCJUeXBlRXJyb3IiLCJvbnRpbWVvdXQiLCJvcGVuIiwibWV0aG9kIiwiY3JlZGVudGlhbHMiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsInBvbHlmaWxsIiwidG9Mb3dlckNhc2UiLCJuZXh0IiwiZG9uZSIsImhlYWRlciIsImdldE93blByb3BlcnR5TmFtZXMiLCJjb25zdW1lZCIsImJvZHlVc2VkIiwiZmlsZVJlYWRlclJlYWR5IiwicmVhZGVyIiwicmVhZEJsb2JBc0FycmF5QnVmZmVyIiwiYmxvYiIsIkZpbGVSZWFkZXIiLCJwcm9taXNlIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJidWZmZXJDbG9uZSIsImJ1ZiIsInZpZXciLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsImJ1ZmZlciIsIl9pbml0Qm9keSIsIl9ib2R5VGV4dCIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJyZWplY3RlZCIsImFycmF5QnVmZmVyIiwidGhlbiIsInRleHQiLCJyZWFkQmxvYkFzVGV4dCIsInJlYWRBc1RleHQiLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJjaGFycyIsImZyb21DaGFyQ29kZSIsImZvcm1EYXRhIiwiZGVjb2RlIiwibW9kZSIsIm5vcm1hbGl6ZU1ldGhvZCIsInVwY2FzZWQiLCJyZWZlcnJlciIsImZvcm0iLCJieXRlcyIsImJvZHlJbml0Iiwib2siXSwic291cmNlUm9vdCI6IiJ9