-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.js
2 lines (2 loc) · 105 KB
/
build.js
1
2
!function(modules){function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:!1};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.loaded=!0,module.exports}var installedModules={};return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.p="",__webpack_require__(0)}([function(module,exports,__webpack_require__){"use strict";var _interopRequireDefault=__webpack_require__(1)["default"],_componentsListJsList=__webpack_require__(2),_componentsListJsList2=_interopRequireDefault(_componentsListJsList);React.render(React.createElement("div",null,React.createElement(_componentsListJsList2["default"],null),React.createElement(_componentsListJsList2["default"],null)),document.body)},function(module,exports){"use strict";exports["default"]=function(obj){return obj&&obj.__esModule?obj:{"default":obj}},exports.__esModule=!0},function(module,exports,__webpack_require__){"use strict";var _get=__webpack_require__(3)["default"],_inherits=__webpack_require__(17)["default"],_createClass=__webpack_require__(28)["default"],_classCallCheck=__webpack_require__(31)["default"],_interopRequireDefault=__webpack_require__(1)["default"];Object.defineProperty(exports,"__esModule",{value:!0});var _baseComponentJsBaseComponent=__webpack_require__(32),_baseComponentJsBaseComponent2=_interopRequireDefault(_baseComponentJsBaseComponent),_actionInputJsActionInput=__webpack_require__(33),_actionInputJsActionInput2=_interopRequireDefault(_actionInputJsActionInput),_listActions=__webpack_require__(36),_listActions2=_interopRequireDefault(_listActions),_listStore=__webpack_require__(37),_listStore2=_interopRequireDefault(_listStore),_componentsListItemJsListItem=__webpack_require__(38),_componentsListItemJsListItem2=_interopRequireDefault(_componentsListItemJsListItem),List=function(_BaseComponent){function List(props){_classCallCheck(this,List),_get(Object.getPrototypeOf(List.prototype),"constructor",this).call(this,props),this.state={listItems:_listStore2["default"].getList()},this._bind("addItem","onChange")}return _inherits(List,_BaseComponent),_createClass(List,[{key:"addItem",value:function(value){_listActions2["default"].addItem({id:this.state.listItems.length+1,content:value})}},{key:"onChange",value:function(list){this.setState({listItems:list})}},{key:"componentDidMount",value:function(){this.unsubscribe=_listStore2["default"].listen(this.onChange)}},{key:"componentWillUnmount",value:function(){this.unsubscribe()}},{key:"render",value:function(){var listItems=this.state.listItems;return React.createElement("div",null,React.createElement(_actionInputJsActionInput2["default"],{onSubmitCallback:this.addItem}),React.createElement("ul",null),listItems.map(function(item){return React.createElement(_componentsListItemJsListItem2["default"],{key:item.id,content:item.content})}))}}]),List}(_baseComponentJsBaseComponent2["default"]);exports["default"]=List,module.exports=exports["default"]},function(module,exports,__webpack_require__){"use strict";var _Object$getOwnPropertyDescriptor=__webpack_require__(4)["default"];exports["default"]=function(_x,_x2,_x3){for(var _again=!0;_again;){var object=_x,property=_x2,receiver=_x3;desc=parent=getter=void 0,_again=!1,null===object&&(object=Function.prototype);var desc=_Object$getOwnPropertyDescriptor(object,property);if(void 0!==desc){if("value"in desc)return desc.value;var getter=desc.get;return void 0===getter?void 0:getter.call(receiver)}var parent=Object.getPrototypeOf(object);if(null===parent)return void 0;_x=parent,_x2=property,_x3=receiver,_again=!0}},exports.__esModule=!0},function(module,exports,__webpack_require__){module.exports={"default":__webpack_require__(5),__esModule:!0}},function(module,exports,__webpack_require__){var $=__webpack_require__(6);__webpack_require__(7),module.exports=function(it,key){return $.getDesc(it,key)}},function(module,exports){var $Object=Object;module.exports={create:$Object.create,getProto:$Object.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:$Object.getOwnPropertyDescriptor,setDesc:$Object.defineProperty,setDescs:$Object.defineProperties,getKeys:$Object.keys,getNames:$Object.getOwnPropertyNames,getSymbols:$Object.getOwnPropertySymbols,each:[].forEach}},function(module,exports,__webpack_require__){var toIObject=__webpack_require__(8);__webpack_require__(12)("getOwnPropertyDescriptor",function($getOwnPropertyDescriptor){return function(it,key){return $getOwnPropertyDescriptor(toIObject(it),key)}})},function(module,exports,__webpack_require__){var IObject=__webpack_require__(9),defined=__webpack_require__(11);module.exports=function(it){return IObject(defined(it))}},function(module,exports,__webpack_require__){var cof=__webpack_require__(10);module.exports=0 in Object("z")?Object:function(it){return"String"==cof(it)?it.split(""):Object(it)}},function(module,exports){var toString={}.toString;module.exports=function(it){return toString.call(it).slice(8,-1)}},function(module,exports){module.exports=function(it){if(void 0==it)throw TypeError("Can't call method on "+it);return it}},function(module,exports,__webpack_require__){module.exports=function(KEY,exec){var $def=__webpack_require__(13),fn=(__webpack_require__(15).Object||{})[KEY]||Object[KEY],exp={};exp[KEY]=exec(fn),$def($def.S+$def.F*__webpack_require__(16)(function(){fn(1)}),"Object",exp)}},function(module,exports,__webpack_require__){var global=__webpack_require__(14),core=__webpack_require__(15),PROTOTYPE="prototype",ctx=function(fn,that){return function(){return fn.apply(that,arguments)}},$def=function(type,name,source){var key,own,out,exp,isGlobal=type&$def.G,isProto=type&$def.P,target=isGlobal?global:type&$def.S?global[name]:(global[name]||{})[PROTOTYPE],exports=isGlobal?core:core[name]||(core[name]={});isGlobal&&(source=name);for(key in source)own=!(type&$def.F)&&target&&key in target,own&&key in exports||(out=own?target[key]:source[key],isGlobal&&"function"!=typeof target[key]?exp=source[key]:type&$def.B&&own?exp=ctx(out,global):type&$def.W&&target[key]==out?!function(C){exp=function(param){return this instanceof C?new C(param):C(param)},exp[PROTOTYPE]=C[PROTOTYPE]}(out):exp=isProto&&"function"==typeof out?ctx(Function.call,out):out,exports[key]=exp,isProto&&((exports[PROTOTYPE]||(exports[PROTOTYPE]={}))[key]=out))};$def.F=1,$def.G=2,$def.S=4,$def.P=8,$def.B=16,$def.W=32,module.exports=$def},function(module,exports){var UNDEFINED="undefined",global=module.exports=typeof window!=UNDEFINED&&window.Math==Math?window:typeof self!=UNDEFINED&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=global)},function(module,exports){var core=module.exports={};"number"==typeof __e&&(__e=core)},function(module,exports){module.exports=function(exec){try{return!!exec()}catch(e){return!0}}},function(module,exports,__webpack_require__){"use strict";var _Object$create=__webpack_require__(18)["default"],_Object$setPrototypeOf=__webpack_require__(20)["default"];exports["default"]=function(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)},exports.__esModule=!0},function(module,exports,__webpack_require__){module.exports={"default":__webpack_require__(19),__esModule:!0}},function(module,exports,__webpack_require__){var $=__webpack_require__(6);module.exports=function(P,D){return $.create(P,D)}},function(module,exports,__webpack_require__){module.exports={"default":__webpack_require__(21),__esModule:!0}},function(module,exports,__webpack_require__){__webpack_require__(22),module.exports=__webpack_require__(15).Object.setPrototypeOf},function(module,exports,__webpack_require__){var $def=__webpack_require__(13);$def($def.S,"Object",{setPrototypeOf:__webpack_require__(23).set})},function(module,exports,__webpack_require__){var getDesc=__webpack_require__(6).getDesc,isObject=__webpack_require__(24),anObject=__webpack_require__(25),check=function(O,proto){if(anObject(O),!isObject(proto)&&null!==proto)throw TypeError(proto+": can't set as prototype!")};module.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(buggy,set){try{set=__webpack_require__(26)(Function.call,getDesc(Object.prototype,"__proto__").set,2),set({},[])}catch(e){buggy=!0}return function(O,proto){return check(O,proto),buggy?O.__proto__=proto:set(O,proto),O}}():void 0),check:check}},function(module,exports){module.exports=function(it){return null!==it&&("object"==typeof it||"function"==typeof it)}},function(module,exports,__webpack_require__){var isObject=__webpack_require__(24);module.exports=function(it){if(!isObject(it))throw TypeError(it+" is not an object!");return it}},function(module,exports,__webpack_require__){var aFunction=__webpack_require__(27);module.exports=function(fn,that,length){if(aFunction(fn),void 0===that)return fn;switch(length){case 1:return function(a){return fn.call(that,a)};case 2:return function(a,b){return fn.call(that,a,b)};case 3:return function(a,b,c){return fn.call(that,a,b,c)}}return function(){return fn.apply(that,arguments)}}},function(module,exports){module.exports=function(it){if("function"!=typeof it)throw TypeError(it+" is not a function!");return it}},function(module,exports,__webpack_require__){"use strict";var _Object$defineProperty=__webpack_require__(29)["default"];exports["default"]=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}}(),exports.__esModule=!0},function(module,exports,__webpack_require__){module.exports={"default":__webpack_require__(30),__esModule:!0}},function(module,exports,__webpack_require__){var $=__webpack_require__(6);module.exports=function(it,key,desc){return $.setDesc(it,key,desc)}},function(module,exports){"use strict";exports["default"]=function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")},exports.__esModule=!0},function(module,exports,__webpack_require__){"use strict";var _get=__webpack_require__(3)["default"],_inherits=__webpack_require__(17)["default"],_createClass=__webpack_require__(28)["default"],_classCallCheck=__webpack_require__(31)["default"];Object.defineProperty(exports,"__esModule",{value:!0});var BaseComponent=function(_React$Component){function BaseComponent(){_classCallCheck(this,BaseComponent),_get(Object.getPrototypeOf(BaseComponent.prototype),"constructor",this).apply(this,arguments)}return _inherits(BaseComponent,_React$Component),_createClass(BaseComponent,[{key:"_bind",value:function(){for(var _this=this,_len=arguments.length,methods=Array(_len),_key=0;_len>_key;_key++)methods[_key]=arguments[_key];methods.forEach(function(method){return _this[method]=_this[method].bind(_this)})}}]),BaseComponent}(React.Component);exports["default"]=BaseComponent,module.exports=exports["default"]},function(module,exports,__webpack_require__){"use strict";var _get=__webpack_require__(3)["default"],_inherits=__webpack_require__(17)["default"],_createClass=__webpack_require__(28)["default"],_classCallCheck=__webpack_require__(31)["default"],_interopRequireDefault=__webpack_require__(1)["default"];Object.defineProperty(exports,"__esModule",{value:!0});var _baseComponentJsBaseComponent=__webpack_require__(32),_baseComponentJsBaseComponent2=_interopRequireDefault(_baseComponentJsBaseComponent),_actionInputActions=__webpack_require__(34),_actionInputActions2=_interopRequireDefault(_actionInputActions),_actionInputStore=__webpack_require__(35),ActionInput=(_interopRequireDefault(_actionInputStore),function(_BaseComponent){function ActionInput(){_classCallCheck(this,ActionInput),_get(Object.getPrototypeOf(ActionInput.prototype),"constructor",this).call(this),this._bind("handleChange","handleSubmit"),this.state={value:""}}return _inherits(ActionInput,_BaseComponent),_createClass(ActionInput,[{key:"handleChange",value:function(event){this.setState({value:event.target.value}),_actionInputActions2["default"].inputChanged({value:this.state.value,callback:this.props.onChangeCallback})}},{key:"handleSubmit",value:function(event){13===event.keyCode&&(_actionInputActions2["default"].inputSubmited({value:this.state.value,callback:this.props.onSubmitCallback}),this.setState({value:""}))}},{key:"render",value:function(){return React.createElement("div",null,React.createElement("input",{type:"text",value:this.state.value,onChange:this.handleChange,onKeyDown:this.handleSubmit}))}}]),ActionInput}(_baseComponentJsBaseComponent2["default"]));exports["default"]=ActionInput,module.exports=exports["default"]},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var ActionInputActions=Reflux.createActions(["inputChanged","inputSubmited"]);exports["default"]=ActionInputActions,module.exports=exports["default"]},function(module,exports,__webpack_require__){"use strict";var _interopRequireDefault=__webpack_require__(1)["default"];Object.defineProperty(exports,"__esModule",{value:!0});var _actionInputActions=__webpack_require__(34),_actionInputActions2=_interopRequireDefault(_actionInputActions),ActionInputStore=Reflux.createStore({init:function(){console.log(this,"Store"),this.listenTo(_actionInputActions2["default"].inputChanged,this.onInputChanged),this.listenTo(_actionInputActions2["default"].inputSubmited,this.onInputSubmited)},onInputChanged:function(obj){"function"==typeof callback&&obj.callback(obj.value)},onInputSubmited:function(obj){"function"==typeof obj.callback&&obj.callback(obj.value)}});exports["default"]=ActionInputStore,module.exports=exports["default"]},function(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var ListActions=Reflux.createActions(["addItem"]);exports["default"]=ListActions,module.exports=exports["default"]},function(module,exports,__webpack_require__){"use strict";var _interopRequireDefault=__webpack_require__(1)["default"];Object.defineProperty(exports,"__esModule",{value:!0});var _listActions=__webpack_require__(36),_listActions2=_interopRequireDefault(_listActions),ListStore=Reflux.createStore({init:function(){this.listenTo(_listActions2["default"].addItem,this.onAddItem)},getList:function(){return JSON.parse(localStorage.getItem("list"))||[]},saveList:function(arr){return localStorage.setItem("list",JSON.stringify(arr))},onAddItem:function(arr){var list=this.getList();console.log(list),list.push(arr),this.saveList(list),this.trigger(list)}});exports["default"]=ListStore,module.exports=exports["default"]},function(module,exports,__webpack_require__){"use strict";var _get=__webpack_require__(3)["default"],_inherits=__webpack_require__(17)["default"],_createClass=__webpack_require__(28)["default"],_classCallCheck=__webpack_require__(31)["default"];Object.defineProperty(exports,"__esModule",{value:!0});var ListItem=function(_React$Component){function ListItem(){_classCallCheck(this,ListItem),_get(Object.getPrototypeOf(ListItem.prototype),"constructor",this).apply(this,arguments)}return _inherits(ListItem,_React$Component),_createClass(ListItem,[{key:"render",value:function(){return React.createElement("li",null,this.props.content)}}]),ListItem}(React.Component);exports["default"]=ListItem,module.exports=exports["default"]}]);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYnVpbGQuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIDdkNDk0YjhkNTc3YjQxNDlmY2ViIiwid2VicGFjazovLy8uL2J1aWxkL2FwcC5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbnRlcm9wLXJlcXVpcmUtZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly8vLi9idWlsZC9jb21wb25lbnRzL2xpc3QvanMvbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvaGVscGVycy9nZXQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQudG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5jb2YuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5kZWZpbmVkLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQub2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmRlZi5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5mYWlscy5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5jdHguanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZS1jbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzLWNhbGwtY2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vYnVpbGQvY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC9qcy9iYXNlLWNvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vLi9idWlsZC9jb21wb25lbnRzL2FjdGlvbi1pbnB1dC9qcy9hY3Rpb24taW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vYnVpbGQvY29tcG9uZW50cy9hY3Rpb24taW5wdXQvanMvYWN0aW9uLWlucHV0LWFjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vYnVpbGQvY29tcG9uZW50cy9hY3Rpb24taW5wdXQvanMvYWN0aW9uLWlucHV0LXN0b3JlLmpzIiwid2VicGFjazovLy8uL2J1aWxkL2NvbXBvbmVudHMvbGlzdC9qcy9saXN0LWFjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vYnVpbGQvY29tcG9uZW50cy9saXN0L2pzL2xpc3Qtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vYnVpbGQvY29tcG9uZW50cy9saXN0L2NvbXBvbmVudHMvbGlzdC1pdGVtL2pzL2xpc3QtaXRlbS5qcyJdLCJuYW1lcyI6WyJtb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaW5zdGFsbGVkTW9kdWxlcyIsImV4cG9ydHMiLCJtb2R1bGUiLCJpZCIsImxvYWRlZCIsImNhbGwiLCJtIiwiYyIsInAiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NvbXBvbmVudHNMaXN0SnNMaXN0IiwiX2NvbXBvbmVudHNMaXN0SnNMaXN0MiIsIlJlYWN0IiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImRvY3VtZW50IiwiYm9keSIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiX2dldCIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIl9jbGFzc0NhbGxDaGVjayIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJfYmFzZUNvbXBvbmVudEpzQmFzZUNvbXBvbmVudCIsIl9iYXNlQ29tcG9uZW50SnNCYXNlQ29tcG9uZW50MiIsIl9hY3Rpb25JbnB1dEpzQWN0aW9uSW5wdXQiLCJfYWN0aW9uSW5wdXRKc0FjdGlvbklucHV0MiIsIl9saXN0QWN0aW9ucyIsIl9saXN0QWN0aW9uczIiLCJfbGlzdFN0b3JlIiwiX2xpc3RTdG9yZTIiLCJfY29tcG9uZW50c0xpc3RJdGVtSnNMaXN0SXRlbSIsIl9jb21wb25lbnRzTGlzdEl0ZW1Kc0xpc3RJdGVtMiIsIkxpc3QiLCJfQmFzZUNvbXBvbmVudCIsInByb3BzIiwidGhpcyIsImdldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwic3RhdGUiLCJsaXN0SXRlbXMiLCJnZXRMaXN0IiwiX2JpbmQiLCJrZXkiLCJhZGRJdGVtIiwibGVuZ3RoIiwiY29udGVudCIsImxpc3QiLCJzZXRTdGF0ZSIsInVuc3Vic2NyaWJlIiwibGlzdGVuIiwib25DaGFuZ2UiLCJvblN1Ym1pdENhbGxiYWNrIiwibWFwIiwiaXRlbSIsIl9PYmplY3QkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3giLCJfeDIiLCJfeDMiLCJfYWdhaW4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInJlY2VpdmVyIiwiZGVzYyIsInBhcmVudCIsImdldHRlciIsInVuZGVmaW5lZCIsIkZ1bmN0aW9uIiwiZ2V0IiwiJCIsIml0IiwiZ2V0RGVzYyIsIiRPYmplY3QiLCJjcmVhdGUiLCJnZXRQcm90byIsImlzRW51bSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwic2V0RGVzYyIsInNldERlc2NzIiwiZGVmaW5lUHJvcGVydGllcyIsImdldEtleXMiLCJrZXlzIiwiZ2V0TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZ2V0U3ltYm9scyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImVhY2giLCJmb3JFYWNoIiwidG9JT2JqZWN0IiwiJGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIklPYmplY3QiLCJkZWZpbmVkIiwiY29mIiwic3BsaXQiLCJ0b1N0cmluZyIsInNsaWNlIiwiVHlwZUVycm9yIiwiS0VZIiwiZXhlYyIsIiRkZWYiLCJmbiIsImV4cCIsIlMiLCJGIiwiZ2xvYmFsIiwiY29yZSIsIlBST1RPVFlQRSIsImN0eCIsInRoYXQiLCJhcHBseSIsImFyZ3VtZW50cyIsInR5cGUiLCJuYW1lIiwic291cmNlIiwib3duIiwib3V0IiwiaXNHbG9iYWwiLCJHIiwiaXNQcm90byIsIlAiLCJ0YXJnZXQiLCJCIiwiVyIsIkMiLCJwYXJhbSIsIlVOREVGSU5FRCIsIndpbmRvdyIsIk1hdGgiLCJzZWxmIiwiX19nIiwiX19lIiwiZSIsIl9PYmplY3QkY3JlYXRlIiwiX09iamVjdCRzZXRQcm90b3R5cGVPZiIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNvbnN0cnVjdG9yIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiX19wcm90b19fIiwiRCIsInNldFByb3RvdHlwZU9mIiwic2V0IiwiaXNPYmplY3QiLCJhbk9iamVjdCIsImNoZWNrIiwiTyIsInByb3RvIiwiYnVnZ3kiLCJhRnVuY3Rpb24iLCJhIiwiYiIsIl9PYmplY3QkZGVmaW5lUHJvcGVydHkiLCJpIiwiZGVzY3JpcHRvciIsIkNvbnN0cnVjdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiaW5zdGFuY2UiLCJCYXNlQ29tcG9uZW50IiwiX1JlYWN0JENvbXBvbmVudCIsIl90aGlzIiwiX2xlbiIsIm1ldGhvZHMiLCJBcnJheSIsIl9rZXkiLCJtZXRob2QiLCJiaW5kIiwiQ29tcG9uZW50IiwiX2FjdGlvbklucHV0QWN0aW9ucyIsIl9hY3Rpb25JbnB1dEFjdGlvbnMyIiwiX2FjdGlvbklucHV0U3RvcmUiLCJBY3Rpb25JbnB1dCIsImV2ZW50IiwiaW5wdXRDaGFuZ2VkIiwiY2FsbGJhY2siLCJvbkNoYW5nZUNhbGxiYWNrIiwia2V5Q29kZSIsImlucHV0U3VibWl0ZWQiLCJoYW5kbGVDaGFuZ2UiLCJvbktleURvd24iLCJoYW5kbGVTdWJtaXQiLCJBY3Rpb25JbnB1dEFjdGlvbnMiLCJSZWZsdXgiLCJjcmVhdGVBY3Rpb25zIiwiQWN0aW9uSW5wdXRTdG9yZSIsImNyZWF0ZVN0b3JlIiwiaW5pdCIsImNvbnNvbGUiLCJsb2ciLCJsaXN0ZW5UbyIsIm9uSW5wdXRDaGFuZ2VkIiwib25JbnB1dFN1Ym1pdGVkIiwiTGlzdEFjdGlvbnMiLCJMaXN0U3RvcmUiLCJvbkFkZEl0ZW0iLCJKU09OIiwicGFyc2UiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwic2F2ZUxpc3QiLCJhcnIiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicHVzaCIsInRyaWdnZXIiLCJMaXN0SXRlbSJdLCJtYXBwaW5ncyI6IkNBQVMsU0FBVUEsU0NJbkIsUUFBQUMscUJBQUFDLFVBR0EsR0FBQUMsaUJBQUFELFVBQ0EsTUFBQUMsa0JBQUFELFVBQUFFLE9BR0EsSUFBQUMsUUFBQUYsaUJBQUFELFdBQ0FFLFdBQ0FFLEdBQUFKLFNBQ0FLLFFBQUEsRUFVQSxPQU5BUCxTQUFBRSxVQUFBTSxLQUFBSCxPQUFBRCxRQUFBQyxjQUFBRCxR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QUFNLEtBQ0EsR0FBQTVKLE1BQUFYLEtBQUFLLFNBQ0FxSixTQUFBQyxJQUFBaEosTUFDQUEsS0FBQStKLEtBQUFILEtBQ0F2SyxLQUFBc0ssU0FBQTNKLE1BQ0FYLEtBQUEySyxRQUFBaEssUUFJQWxELFNBQUEsV0FBQXVNLFVBQ0F0TSxPQUFBRCxnQkFBQSxZdkN1ekJNLFNBQVNDLE9BQVFELFFBQVNILHFCd0N2MUJoQyxZQUVBLElBQUFzQixNQUFBdEIsb0JBQUEsY0FFQXVCLFVBQUF2QixvQkFBQSxlQUVBd0IsYUFBQXhCLG9CQUFBLGVBRUF5QixnQkFBQXpCLG9CQUFBLGNBRUEwQixRQUFBQyxlQUFBeEIsUUFBQSxjQUNBeUIsT0FBQSxHQUdBLElBQUEwTCxVQUFBLFNBQUE5QyxrQkFHQSxRQUFBOEMsWUFDQTdMLGdCQUFBaUIsS0FBQTRLLFVBRUFoTSxLQUFBSSxPQUFBaUIsZUFBQTJLLFNBQUExSyxXQUFBLGNBQUFGLE1BQUEwRSxNQUFBMUUsS0FBQTJFLFdBY0EsTUFuQkE5RixXQUFBK0wsU0FBQTlDLGtCQVFBaEosYUFBQThMLFdBQ0FySyxJQUFBLFNBQ0FyQixNQUFBLFdBQ0EsTUFBQWQsT0FBQUUsY0FDQSxLQUNBLEtBQ0EwQixLQUFBRCxNQUFBVyxhQUtBa0ssVUFDQ3hNLE1BQUFrSyxVQUVEN0ssU0FBQSxXQUFBbU4sU0FDQWxOLE9BQUFELGdCQUFBIiwiZmlsZSI6ImJ1aWxkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHR2YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSlbJ2RlZmF1bHQnXTtcblx0XG5cdHZhciBfY29tcG9uZW50c0xpc3RKc0xpc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXHRcblx0dmFyIF9jb21wb25lbnRzTGlzdEpzTGlzdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wb25lbnRzTGlzdEpzTGlzdCk7XG5cdFxuXHRSZWFjdC5yZW5kZXIoUmVhY3QuY3JlYXRlRWxlbWVudChcblx0ICAnZGl2Jyxcblx0ICBudWxsLFxuXHQgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoX2NvbXBvbmVudHNMaXN0SnNMaXN0MlsnZGVmYXVsdCddLCBudWxsKSxcblx0ICBSZWFjdC5jcmVhdGVFbGVtZW50KF9jb21wb25lbnRzTGlzdEpzTGlzdDJbJ2RlZmF1bHQnXSwgbnVsbClcblx0KSwgZG9jdW1lbnQuYm9keSk7XG5cbi8qKiovIH0sXG4vKiAxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdGV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKG9iaikge1xuXHQgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG5cdCAgICBcImRlZmF1bHRcIjogb2JqXG5cdCAgfTtcblx0fTtcblx0XG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbi8qKiovIH0sXG4vKiAyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHR2YXIgX2dldCA9IF9fd2VicGFja19yZXF1aXJlX18oMylbJ2RlZmF1bHQnXTtcblx0XG5cdHZhciBfaW5oZXJpdHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KVsnZGVmYXVsdCddO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpWydkZWZhdWx0J107XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSlbJ2RlZmF1bHQnXTtcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVsnZGVmYXVsdCddO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcblx0dmFyIF9iYXNlQ29tcG9uZW50SnNCYXNlQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XG5cdFxuXHR2YXIgX2Jhc2VDb21wb25lbnRKc0Jhc2VDb21wb25lbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZUNvbXBvbmVudEpzQmFzZUNvbXBvbmVudCk7XG5cdFxuXHR2YXIgX2FjdGlvbklucHV0SnNBY3Rpb25JbnB1dCA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xuXHRcblx0dmFyIF9hY3Rpb25JbnB1dEpzQWN0aW9uSW5wdXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uSW5wdXRKc0FjdGlvbklucHV0KTtcblx0XG5cdHZhciBfbGlzdEFjdGlvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcblx0XG5cdHZhciBfbGlzdEFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGlzdEFjdGlvbnMpO1xuXHRcblx0dmFyIF9saXN0U3RvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcblx0XG5cdHZhciBfbGlzdFN0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xpc3RTdG9yZSk7XG5cdFxuXHR2YXIgX2NvbXBvbmVudHNMaXN0SXRlbUpzTGlzdEl0ZW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcblx0XG5cdHZhciBfY29tcG9uZW50c0xpc3RJdGVtSnNMaXN0SXRlbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb21wb25lbnRzTGlzdEl0ZW1Kc0xpc3RJdGVtKTtcblx0XG5cdHZhciBMaXN0ID0gKGZ1bmN0aW9uIChfQmFzZUNvbXBvbmVudCkge1xuXHQgIF9pbmhlcml0cyhMaXN0LCBfQmFzZUNvbXBvbmVudCk7XG5cdFxuXHQgIGZ1bmN0aW9uIExpc3QocHJvcHMpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMaXN0KTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihMaXN0LnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcywgcHJvcHMpO1xuXHRcblx0ICAgIHRoaXMuc3RhdGUgPSB7XG5cdCAgICAgIGxpc3RJdGVtczogX2xpc3RTdG9yZTJbJ2RlZmF1bHQnXS5nZXRMaXN0KClcblx0ICAgIH07XG5cdFxuXHQgICAgdGhpcy5fYmluZCgnYWRkSXRlbScsICdvbkNoYW5nZScpO1xuXHQgIH1cblx0XG5cdCAgX2NyZWF0ZUNsYXNzKExpc3QsIFt7XG5cdCAgICBrZXk6ICdhZGRJdGVtJyxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRJdGVtKHZhbHVlKSB7XG5cdCAgICAgIF9saXN0QWN0aW9uczJbJ2RlZmF1bHQnXS5hZGRJdGVtKHtcblx0ICAgICAgICBpZDogdGhpcy5zdGF0ZS5saXN0SXRlbXMubGVuZ3RoICsgMSxcblx0ICAgICAgICBjb250ZW50OiB2YWx1ZVxuXHQgICAgICB9KTtcblx0ICAgIH1cblx0ICB9LCB7XG5cdCAgICBrZXk6ICdvbkNoYW5nZScsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2UobGlzdCkge1xuXHQgICAgICB0aGlzLnNldFN0YXRlKHtcblx0ICAgICAgICBsaXN0SXRlbXM6IGxpc3Rcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfSwge1xuXHQgICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuXHQgICAgICB0aGlzLnVuc3Vic2NyaWJlID0gX2xpc3RTdG9yZTJbJ2RlZmF1bHQnXS5saXN0ZW4odGhpcy5vbkNoYW5nZSk7XG5cdCAgICB9XG5cdCAgfSwge1xuXHQgICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuXHQgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG5cdCAgICB9XG5cdCAgfSwge1xuXHQgICAga2V5OiAncmVuZGVyJyxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdCAgICAgIHZhciBsaXN0SXRlbXMgPSB0aGlzLnN0YXRlLmxpc3RJdGVtcztcblx0ICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG5cdCAgICAgICAgJ2RpdicsXG5cdCAgICAgICAgbnVsbCxcblx0ICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KF9hY3Rpb25JbnB1dEpzQWN0aW9uSW5wdXQyWydkZWZhdWx0J10sIHsgb25TdWJtaXRDYWxsYmFjazogdGhpcy5hZGRJdGVtIH0pLFxuXHQgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3VsJywgbnVsbCksXG5cdCAgICAgICAgbGlzdEl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoX2NvbXBvbmVudHNMaXN0SXRlbUpzTGlzdEl0ZW0yWydkZWZhdWx0J10sIHsga2V5OiBpdGVtLmlkLCBjb250ZW50OiBpdGVtLmNvbnRlbnQgfSk7XG5cdCAgICAgICAgfSlcblx0ICAgICAgKTtcblx0ICAgIH1cblx0ICB9XSk7XG5cdFxuXHQgIHJldHVybiBMaXN0O1xuXHR9KShfYmFzZUNvbXBvbmVudEpzQmFzZUNvbXBvbmVudDJbJ2RlZmF1bHQnXSk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBMaXN0O1xuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIF9PYmplY3QkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KVtcImRlZmF1bHRcIl07XG5cdFxuXHRleHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHtcblx0ICB2YXIgX2FnYWluID0gdHJ1ZTtcblx0XG5cdCAgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7XG5cdCAgICB2YXIgb2JqZWN0ID0gX3gsXG5cdCAgICAgICAgcHJvcGVydHkgPSBfeDIsXG5cdCAgICAgICAgcmVjZWl2ZXIgPSBfeDM7XG5cdCAgICBkZXNjID0gcGFyZW50ID0gZ2V0dGVyID0gdW5kZWZpbmVkO1xuXHQgICAgX2FnYWluID0gZmFsc2U7XG5cdCAgICBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cdFxuXHQgICAgdmFyIGRlc2MgPSBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblx0XG5cdCAgICBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgIHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcblx0XG5cdCAgICAgIGlmIChwYXJlbnQgPT09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIF94ID0gcGFyZW50O1xuXHQgICAgICAgIF94MiA9IHByb3BlcnR5O1xuXHQgICAgICAgIF94MyA9IHJlY2VpdmVyO1xuXHQgICAgICAgIF9hZ2FpbiA9IHRydWU7XG5cdCAgICAgICAgY29udGludWUgX2Z1bmN0aW9uO1xuXHQgICAgICB9XG5cdCAgICB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjKSB7XG5cdCAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdmFyIGdldHRlciA9IGRlc2MuZ2V0O1xuXHRcblx0ICAgICAgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcblx0ICAgICAgfVxuXHRcblx0ICAgICAgcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cdFxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG4vKioqLyB9LFxuLyogNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpe1xuXHQgIHJldHVybiAkLmdldERlc2MoaXQsIGtleSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHR2YXIgJE9iamVjdCA9IE9iamVjdDtcblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgY3JlYXRlOiAgICAgJE9iamVjdC5jcmVhdGUsXG5cdCAgZ2V0UHJvdG86ICAgJE9iamVjdC5nZXRQcm90b3R5cGVPZixcblx0ICBpc0VudW06ICAgICB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcblx0ICBnZXREZXNjOiAgICAkT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcblx0ICBzZXREZXNjOiAgICAkT2JqZWN0LmRlZmluZVByb3BlcnR5LFxuXHQgIHNldERlc2NzOiAgICRPYmplY3QuZGVmaW5lUHJvcGVydGllcyxcblx0ICBnZXRLZXlzOiAgICAkT2JqZWN0LmtleXMsXG5cdCAgZ2V0TmFtZXM6ICAgJE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLFxuXHQgIGdldFN5bWJvbHM6ICRPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxuXHQgIGVhY2g6ICAgICAgIFtdLmZvckVhY2hcblx0fTtcblxuLyoqKi8gfSxcbi8qIDcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcblx0dmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG5cdFxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24oJGdldE93blByb3BlcnR5RGVzY3JpcHRvcil7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcblx0ICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSU9iamVjdChpdCksIGtleSk7XG5cdCAgfTtcblx0fSk7XG5cbi8qKiovIH0sXG4vKiA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcclxuXHR2YXIgSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oOSlcclxuXHQgICwgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xyXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xyXG5cdCAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xyXG5cdH07XG5cbi8qKiovIH0sXG4vKiA5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBpbmRleGVkIG9iamVjdCwgZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG5cdHZhciBjb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcblx0bW9kdWxlLmV4cG9ydHMgPSAwIGluIE9iamVjdCgneicpID8gT2JqZWN0IDogZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDEwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHR2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Ly8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgaWYoaXQgPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcblx0ICByZXR1cm4gaXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBleGVjKXtcblx0ICB2YXIgJGRlZiA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpXG5cdCAgICAsIGZuICAgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldXG5cdCAgICAsIGV4cCAgPSB7fTtcblx0ICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuXHQgICRkZWYoJGRlZi5TICsgJGRlZi5GICogX193ZWJwYWNrX3JlcXVpcmVfXygxNikoZnVuY3Rpb24oKXsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDEzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgZ2xvYmFsICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNClcblx0ICAsIGNvcmUgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblx0dmFyIGN0eCA9IGZ1bmN0aW9uKGZuLCB0aGF0KXtcblx0ICByZXR1cm4gZnVuY3Rpb24oKXtcblx0ICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuXHQgIH07XG5cdH07XG5cdHZhciAkZGVmID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgc291cmNlKXtcblx0ICB2YXIga2V5LCBvd24sIG91dCwgZXhwXG5cdCAgICAsIGlzR2xvYmFsID0gdHlwZSAmICRkZWYuR1xuXHQgICAgLCBpc1Byb3RvICA9IHR5cGUgJiAkZGVmLlBcblx0ICAgICwgdGFyZ2V0ICAgPSBpc0dsb2JhbCA/IGdsb2JhbCA6IHR5cGUgJiAkZGVmLlNcblx0ICAgICAgICA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV1cblx0ICAgICwgZXhwb3J0cyAgPSBpc0dsb2JhbCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuXHQgIGlmKGlzR2xvYmFsKXNvdXJjZSA9IG5hbWU7XG5cdCAgZm9yKGtleSBpbiBzb3VyY2Upe1xuXHQgICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG5cdCAgICBvd24gPSAhKHR5cGUgJiAkZGVmLkYpICYmIHRhcmdldCAmJiBrZXkgaW4gdGFyZ2V0O1xuXHQgICAgaWYob3duICYmIGtleSBpbiBleHBvcnRzKWNvbnRpbnVlO1xuXHQgICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcblx0ICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG5cdCAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcblx0ICAgIGlmKGlzR2xvYmFsICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nKWV4cCA9IHNvdXJjZVtrZXldO1xuXHQgICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcblx0ICAgIGVsc2UgaWYodHlwZSAmICRkZWYuQiAmJiBvd24pZXhwID0gY3R4KG91dCwgZ2xvYmFsKTtcblx0ICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG5cdCAgICBlbHNlIGlmKHR5cGUgJiAkZGVmLlcgJiYgdGFyZ2V0W2tleV0gPT0gb3V0KSFmdW5jdGlvbihDKXtcblx0ICAgICAgZXhwID0gZnVuY3Rpb24ocGFyYW0pe1xuXHQgICAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgQyA/IG5ldyBDKHBhcmFtKSA6IEMocGFyYW0pO1xuXHQgICAgICB9O1xuXHQgICAgICBleHBbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcblx0ICAgIH0ob3V0KTtcblx0ICAgIGVsc2UgZXhwID0gaXNQcm90byAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcblx0ICAgIC8vIGV4cG9ydFxuXHQgICAgZXhwb3J0c1trZXldID0gZXhwO1xuXHQgICAgaWYoaXNQcm90bykoZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSkpW2tleV0gPSBvdXQ7XG5cdCAgfVxuXHR9O1xuXHQvLyB0eXBlIGJpdG1hcFxuXHQkZGVmLkYgPSAxOyAgLy8gZm9yY2VkXG5cdCRkZWYuRyA9IDI7ICAvLyBnbG9iYWxcblx0JGRlZi5TID0gNDsgIC8vIHN0YXRpY1xuXHQkZGVmLlAgPSA4OyAgLy8gcHJvdG9cblx0JGRlZi5CID0gMTY7IC8vIGJpbmRcblx0JGRlZi5XID0gMzI7IC8vIHdyYXBcblx0bW9kdWxlLmV4cG9ydHMgPSAkZGVmO1xuXG4vKioqLyB9LFxuLyogMTQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5cdHZhciBVTkRFRklORUQgPSAndW5kZWZpbmVkJztcblx0dmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSBVTkRFRklORUQgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuXHQgID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gVU5ERUZJTkVEICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZiA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdGlmKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbi8qKiovIH0sXG4vKiAxNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0dmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXHRpZih0eXBlb2YgX19lID09ICdudW1iZXInKV9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuLyoqKi8gfSxcbi8qIDE2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuXHQgIHRyeSB7XG5cdCAgICByZXR1cm4gISFleGVjKCk7XG5cdCAgfSBjYXRjaChlKXtcblx0ICAgIHJldHVybiB0cnVlO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDE3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfT2JqZWN0JGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpW1wiZGVmYXVsdFwiXTtcblx0XG5cdHZhciBfT2JqZWN0JHNldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMClbXCJkZWZhdWx0XCJdO1xuXHRcblx0ZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcblx0ICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG5cdCAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcblx0ICB9XG5cdFxuXHQgIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcblx0ICAgIGNvbnN0cnVjdG9yOiB7XG5cdCAgICAgIHZhbHVlOiBzdWJDbGFzcyxcblx0ICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG5cdCAgICAgIHdyaXRhYmxlOiB0cnVlLFxuXHQgICAgICBjb25maWd1cmFibGU6IHRydWVcblx0ICAgIH1cblx0ICB9KTtcblx0ICBpZiAoc3VwZXJDbGFzcykgX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9PYmplY3Qkc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcblx0fTtcblx0XG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbi8qKiovIH0sXG4vKiAxOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogMTkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCl7XG5cdCAgcmV0dXJuICQuY3JlYXRlKFAsIEQpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXygyMSksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDIxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KS5PYmplY3Quc2V0UHJvdG90eXBlT2Y7XG5cbi8qKiovIH0sXG4vKiAyMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcblx0dmFyICRkZWYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblx0JGRlZigkZGVmLlMsICdPYmplY3QnLCB7c2V0UHJvdG90eXBlT2Y6IF9fd2VicGFja19yZXF1aXJlX18oMjMpLnNldH0pO1xuXG4vKioqLyB9LFxuLyogMjMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuXHQvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXHR2YXIgZ2V0RGVzYyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpLmdldERlc2Ncblx0ICAsIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNClcblx0ICAsIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG5cdHZhciBjaGVjayA9IGZ1bmN0aW9uKE8sIHByb3RvKXtcblx0ICBhbk9iamVjdChPKTtcblx0ICBpZighaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKXRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcblx0fTtcblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0ICAgID8gZnVuY3Rpb24oYnVnZ3ksIHNldCl7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHNldCA9IF9fd2VicGFja19yZXF1aXJlX18oMjYpKEZ1bmN0aW9uLmNhbGwsIGdldERlc2MoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG5cdCAgICAgICAgICBzZXQoe30sIFtdKTtcblx0ICAgICAgICB9IGNhdGNoKGUpeyBidWdneSA9IHRydWU7IH1cblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pe1xuXHQgICAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuXHQgICAgICAgICAgaWYoYnVnZ3kpTy5fX3Byb3RvX18gPSBwcm90bztcblx0ICAgICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcblx0ICAgICAgICAgIHJldHVybiBPO1xuXHQgICAgICAgIH07XG5cdCAgICAgIH0oKVxuXHQgICAgOiB1bmRlZmluZWQpLFxuXHQgIGNoZWNrOiBjaGVja1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL2NvcmUtanMtaXNvYmplY3Rcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIGl0ICE9PSBudWxsICYmICh0eXBlb2YgaXQgPT0gJ29iamVjdCcgfHwgdHlwZW9mIGl0ID09ICdmdW5jdGlvbicpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICBpZighaXNPYmplY3QoaXQpKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcblx0ICByZXR1cm4gaXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5cdHZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgdGhhdCwgbGVuZ3RoKXtcblx0ICBhRnVuY3Rpb24oZm4pO1xuXHQgIGlmKHRoYXQgPT09IHVuZGVmaW5lZClyZXR1cm4gZm47XG5cdCAgc3dpdGNoKGxlbmd0aCl7XG5cdCAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbihhKXtcblx0ICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG5cdCAgICB9O1xuXHQgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24oYSwgYil7XG5cdCAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuXHQgICAgfTtcblx0ICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKGEsIGIsIGMpe1xuXHQgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcblx0ICAgIH07XG5cdCAgfSByZXR1cm4gZnVuY3Rpb24oLyogLi4uYXJncyAqLyl7XG5cdCAgICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuXHQgICAgfTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDI3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICBpZih0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuXHQgIHJldHVybiBpdDtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDI4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfT2JqZWN0JGRlZmluZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSlbXCJkZWZhdWx0XCJdO1xuXHRcblx0ZXhwb3J0c1tcImRlZmF1bHRcIl0gPSAoZnVuY3Rpb24gKCkge1xuXHQgIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuXHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuXHQgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG5cdCAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcblx0ICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcblx0XG5cdCAgICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG5cdCAgICB9XG5cdCAgfVxuXHRcblx0ICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuXHQgICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcblx0ICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuXHQgICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuXHQgIH07XG5cdH0pKCk7XG5cdFxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG4vKioqLyB9LFxuLyogMjkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXygzMCksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDMwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyl7XG5cdCAgcmV0dXJuICQuc2V0RGVzYyhpdCwga2V5LCBkZXNjKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDMxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdGV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuXHQgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG5cdCAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuXHQgIH1cblx0fTtcblx0XG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbi8qKiovIH0sXG4vKiAzMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgX2dldCA9IF9fd2VicGFja19yZXF1aXJlX18oMylbXCJkZWZhdWx0XCJdO1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpW1wiZGVmYXVsdFwiXTtcblx0XG5cdHZhciBfY3JlYXRlQ2xhc3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KVtcImRlZmF1bHRcIl07XG5cdFxuXHR2YXIgX2NsYXNzQ2FsbENoZWNrID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSlbXCJkZWZhdWx0XCJdO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHR2YXIgQmFzZUNvbXBvbmVudCA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuXHQgIF9pbmhlcml0cyhCYXNlQ29tcG9uZW50LCBfUmVhY3QkQ29tcG9uZW50KTtcblx0XG5cdCAgZnVuY3Rpb24gQmFzZUNvbXBvbmVudCgpIHtcblx0ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBCYXNlQ29tcG9uZW50KTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihCYXNlQ29tcG9uZW50LnByb3RvdHlwZSksIFwiY29uc3RydWN0b3JcIiwgdGhpcykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICB9XG5cdFxuXHQgIF9jcmVhdGVDbGFzcyhCYXNlQ29tcG9uZW50LCBbe1xuXHQgICAga2V5OiBcIl9iaW5kXCIsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gX2JpbmQoKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cdFxuXHQgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWV0aG9kcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuXHQgICAgICAgIG1ldGhvZHNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG5cdCAgICAgIH1cblx0XG5cdCAgICAgIG1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG5cdCAgICAgICAgcmV0dXJuIF90aGlzW21ldGhvZF0gPSBfdGhpc1ttZXRob2RdLmJpbmQoX3RoaXMpO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblx0ICB9XSk7XG5cdFxuXHQgIHJldHVybiBCYXNlQ29tcG9uZW50O1xuXHR9KShSZWFjdC5Db21wb25lbnQpO1xuXHRcblx0ZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBCYXNlQ29tcG9uZW50O1xuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdO1xuXG4vKioqLyB9LFxuLyogMzMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdHZhciBfZ2V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVsnZGVmYXVsdCddO1xuXHRcblx0dmFyIF9pbmhlcml0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpWydkZWZhdWx0J107XG5cdFxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOClbJ2RlZmF1bHQnXTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKVsnZGVmYXVsdCddO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpWydkZWZhdWx0J107XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHR2YXIgX2Jhc2VDb21wb25lbnRKc0Jhc2VDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcblx0XG5cdHZhciBfYmFzZUNvbXBvbmVudEpzQmFzZUNvbXBvbmVudDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9iYXNlQ29tcG9uZW50SnNCYXNlQ29tcG9uZW50KTtcblx0XG5cdHZhciBfYWN0aW9uSW5wdXRBY3Rpb25zID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XG5cdFxuXHR2YXIgX2FjdGlvbklucHV0QWN0aW9uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hY3Rpb25JbnB1dEFjdGlvbnMpO1xuXHRcblx0dmFyIF9hY3Rpb25JbnB1dFN0b3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XG5cdFxuXHR2YXIgX2FjdGlvbklucHV0U3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uSW5wdXRTdG9yZSk7XG5cdFxuXHR2YXIgQWN0aW9uSW5wdXQgPSAoZnVuY3Rpb24gKF9CYXNlQ29tcG9uZW50KSB7XG5cdCAgX2luaGVyaXRzKEFjdGlvbklucHV0LCBfQmFzZUNvbXBvbmVudCk7XG5cdFxuXHQgIGZ1bmN0aW9uIEFjdGlvbklucHV0KCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFjdGlvbklucHV0KTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihBY3Rpb25JbnB1dC5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMpO1xuXHQgICAgdGhpcy5fYmluZCgnaGFuZGxlQ2hhbmdlJywgJ2hhbmRsZVN1Ym1pdCcpO1xuXHQgICAgdGhpcy5zdGF0ZSA9IHtcblx0ICAgICAgdmFsdWU6ICcnXG5cdCAgICB9O1xuXHQgIH1cblx0XG5cdCAgX2NyZWF0ZUNsYXNzKEFjdGlvbklucHV0LCBbe1xuXHQgICAga2V5OiAnaGFuZGxlQ2hhbmdlJyxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcblx0ICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBldmVudC50YXJnZXQudmFsdWUgfSk7XG5cdCAgICAgIF9hY3Rpb25JbnB1dEFjdGlvbnMyWydkZWZhdWx0J10uaW5wdXRDaGFuZ2VkKHtcblx0ICAgICAgICB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSxcblx0ICAgICAgICBjYWxsYmFjazogdGhpcy5wcm9wcy5vbkNoYW5nZUNhbGxiYWNrXG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgIH0sIHtcblx0ICAgIGtleTogJ2hhbmRsZVN1Ym1pdCcsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlU3VibWl0KGV2ZW50KSB7XG5cdCAgICAgIGlmIChldmVudC5rZXlDb2RlICE9PSAxMykge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHRcblx0ICAgICAgX2FjdGlvbklucHV0QWN0aW9uczJbJ2RlZmF1bHQnXS5pbnB1dFN1Ym1pdGVkKHtcblx0ICAgICAgICB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSxcblx0ICAgICAgICBjYWxsYmFjazogdGhpcy5wcm9wcy5vblN1Ym1pdENhbGxiYWNrXG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6ICcnIH0pO1xuXHQgICAgfVxuXHQgIH0sIHtcblx0ICAgIGtleTogJ3JlbmRlcicsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcblx0ICAgICAgICAnZGl2Jyxcblx0ICAgICAgICBudWxsLFxuXHQgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyB0eXBlOiAndGV4dCcsIHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlLFxuXHQgICAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlQ2hhbmdlLFxuXHQgICAgICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZVN1Ym1pdCB9KVxuXHQgICAgICApO1xuXHQgICAgfVxuXHQgIH1dKTtcblx0XG5cdCAgcmV0dXJuIEFjdGlvbklucHV0O1xuXHR9KShfYmFzZUNvbXBvbmVudEpzQmFzZUNvbXBvbmVudDJbJ2RlZmF1bHQnXSk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBBY3Rpb25JbnB1dDtcblx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0sXG4vKiAzNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHR2YXIgQWN0aW9uSW5wdXRBY3Rpb25zID0gUmVmbHV4LmNyZWF0ZUFjdGlvbnMoWydpbnB1dENoYW5nZWQnLCAnaW5wdXRTdWJtaXRlZCddKTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IEFjdGlvbklucHV0QWN0aW9ucztcblx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0sXG4vKiAzNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHRcblx0dmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpWydkZWZhdWx0J107XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHR2YXIgX2FjdGlvbklucHV0QWN0aW9ucyA9IF9fd2VicGFja19yZXF1aXJlX18oMzQpO1xuXHRcblx0dmFyIF9hY3Rpb25JbnB1dEFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uSW5wdXRBY3Rpb25zKTtcblx0XG5cdHZhciBBY3Rpb25JbnB1dFN0b3JlID0gUmVmbHV4LmNyZWF0ZVN0b3JlKHtcblx0ICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuXHQgICAgY29uc29sZS5sb2codGhpcywgJ1N0b3JlJyk7XG5cdCAgICB0aGlzLmxpc3RlblRvKF9hY3Rpb25JbnB1dEFjdGlvbnMyWydkZWZhdWx0J10uaW5wdXRDaGFuZ2VkLCB0aGlzLm9uSW5wdXRDaGFuZ2VkKTtcblx0ICAgIHRoaXMubGlzdGVuVG8oX2FjdGlvbklucHV0QWN0aW9uczJbJ2RlZmF1bHQnXS5pbnB1dFN1Ym1pdGVkLCB0aGlzLm9uSW5wdXRTdWJtaXRlZCk7XG5cdCAgfSxcblx0ICBvbklucHV0Q2hhbmdlZDogZnVuY3Rpb24gb25JbnB1dENoYW5nZWQob2JqKSB7XG5cdCAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0XG5cdCAgICBvYmouY2FsbGJhY2sob2JqLnZhbHVlKTtcblx0ICB9LFxuXHQgIG9uSW5wdXRTdWJtaXRlZDogZnVuY3Rpb24gb25JbnB1dFN1Ym1pdGVkKG9iaikge1xuXHQgICAgaWYgKHR5cGVvZiBvYmouY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXHQgICAgb2JqLmNhbGxiYWNrKG9iai52YWx1ZSk7XG5cdCAgfVxuXHR9KTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IEFjdGlvbklucHV0U3RvcmU7XG5cdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9LFxuLyogMzYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0dmFyIExpc3RBY3Rpb25zID0gUmVmbHV4LmNyZWF0ZUFjdGlvbnMoWydhZGRJdGVtJ10pO1xuXHRcblx0ZXhwb3J0c1snZGVmYXVsdCddID0gTGlzdEFjdGlvbnM7XG5cdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9LFxuLyogMzcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdHZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVsnZGVmYXVsdCddO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcblx0dmFyIF9saXN0QWN0aW9ucyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xuXHRcblx0dmFyIF9saXN0QWN0aW9uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9saXN0QWN0aW9ucyk7XG5cdFxuXHR2YXIgTGlzdFN0b3JlID0gUmVmbHV4LmNyZWF0ZVN0b3JlKHtcblx0ICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuXHQgICAgdGhpcy5saXN0ZW5UbyhfbGlzdEFjdGlvbnMyWydkZWZhdWx0J10uYWRkSXRlbSwgdGhpcy5vbkFkZEl0ZW0pO1xuXHQgIH0sXG5cdCAgZ2V0TGlzdDogZnVuY3Rpb24gZ2V0TGlzdCgpIHtcblx0ICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsaXN0JykpIHx8IFtdO1xuXHQgIH0sXG5cdCAgc2F2ZUxpc3Q6IGZ1bmN0aW9uIHNhdmVMaXN0KGFycikge1xuXHQgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsaXN0JywgSlNPTi5zdHJpbmdpZnkoYXJyKSk7XG5cdCAgfSxcblx0ICBvbkFkZEl0ZW06IGZ1bmN0aW9uIG9uQWRkSXRlbShhcnIpIHtcblx0ICAgIHZhciBsaXN0ID0gdGhpcy5nZXRMaXN0KCk7XG5cdCAgICBjb25zb2xlLmxvZyhsaXN0KTtcblx0ICAgIGxpc3QucHVzaChhcnIpO1xuXHQgICAgdGhpcy5zYXZlTGlzdChsaXN0KTtcblx0ICAgIHRoaXMudHJpZ2dlcihsaXN0KTtcblx0ICB9XG5cdH0pO1xuXHRcblx0ZXhwb3J0c1snZGVmYXVsdCddID0gTGlzdFN0b3JlO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDM4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBfZ2V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVtcImRlZmF1bHRcIl07XG5cdFxuXHR2YXIgX2luaGVyaXRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNylbXCJkZWZhdWx0XCJdO1xuXHRcblx0dmFyIF9jcmVhdGVDbGFzcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpW1wiZGVmYXVsdFwiXTtcblx0XG5cdHZhciBfY2xhc3NDYWxsQ2hlY2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKVtcImRlZmF1bHRcIl07XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XG5cdHZhciBMaXN0SXRlbSA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuXHQgIF9pbmhlcml0cyhMaXN0SXRlbSwgX1JlYWN0JENvbXBvbmVudCk7XG5cdFxuXHQgIGZ1bmN0aW9uIExpc3RJdGVtKCkge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpc3RJdGVtKTtcblx0XG5cdCAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihMaXN0SXRlbS5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgfVxuXHRcblx0ICBfY3JlYXRlQ2xhc3MoTGlzdEl0ZW0sIFt7XG5cdCAgICBrZXk6IFwicmVuZGVyXCIsXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHQgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcblx0ICAgICAgICBcImxpXCIsXG5cdCAgICAgICAgbnVsbCxcblx0ICAgICAgICB0aGlzLnByb3BzLmNvbnRlbnRcblx0ICAgICAgKTtcblx0ICAgIH1cblx0ICB9XSk7XG5cdFxuXHQgIHJldHVybiBMaXN0SXRlbTtcblx0fSkoUmVhY3QuQ29tcG9uZW50KTtcblx0XG5cdGV4cG9ydHNbXCJkZWZhdWx0XCJdID0gTGlzdEl0ZW07XG5cdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07XG5cbi8qKiovIH1cbi8qKioqKiovIF0pO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIGJ1aWxkLmpzXG4gKiovIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGV4cG9ydHM6IHt9LFxuIFx0XHRcdGlkOiBtb2R1bGVJZCxcbiBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrL2Jvb3RzdHJhcCA3ZDQ5NGI4ZDU3N2I0MTQ5ZmNlYlxuICoqLyIsIid1c2Ugc3RyaWN0JztcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW50ZXJvcC1yZXF1aXJlLWRlZmF1bHQnKVsnZGVmYXVsdCddO1xuXG52YXIgX2NvbXBvbmVudHNMaXN0SnNMaXN0ID0gcmVxdWlyZSgnLi9jb21wb25lbnRzL2xpc3QvanMvbGlzdCcpO1xuXG52YXIgX2NvbXBvbmVudHNMaXN0SnNMaXN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbXBvbmVudHNMaXN0SnNMaXN0KTtcblxuUmVhY3QucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICdkaXYnLFxuICBudWxsLFxuICBSZWFjdC5jcmVhdGVFbGVtZW50KF9jb21wb25lbnRzTGlzdEpzTGlzdDJbJ2RlZmF1bHQnXSwgbnVsbCksXG4gIFJlYWN0LmNyZWF0ZUVsZW1lbnQoX2NvbXBvbmVudHNMaXN0SnNMaXN0MlsnZGVmYXVsdCddLCBudWxsKVxuKSwgZG9jdW1lbnQuYm9keSk7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2J1aWxkL2FwcC5qc1xuICoqIG1vZHVsZSBpZCA9IDBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59O1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbnRlcm9wLXJlcXVpcmUtZGVmYXVsdC5qc1xuICoqIG1vZHVsZSBpZCA9IDFcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcblxudmFyIF9nZXQgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvZ2V0JylbJ2RlZmF1bHQnXTtcblxudmFyIF9pbmhlcml0cyA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cycpWydkZWZhdWx0J107XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlLWNsYXNzJylbJ2RlZmF1bHQnXTtcblxudmFyIF9jbGFzc0NhbGxDaGVjayA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzcy1jYWxsLWNoZWNrJylbJ2RlZmF1bHQnXTtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW50ZXJvcC1yZXF1aXJlLWRlZmF1bHQnKVsnZGVmYXVsdCddO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9iYXNlQ29tcG9uZW50SnNCYXNlQ29tcG9uZW50ID0gcmVxdWlyZSgnLi4vLi4vYmFzZS1jb21wb25lbnQvanMvYmFzZS1jb21wb25lbnQnKTtcblxudmFyIF9iYXNlQ29tcG9uZW50SnNCYXNlQ29tcG9uZW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhc2VDb21wb25lbnRKc0Jhc2VDb21wb25lbnQpO1xuXG52YXIgX2FjdGlvbklucHV0SnNBY3Rpb25JbnB1dCA9IHJlcXVpcmUoJy4uLy4uL2FjdGlvbi1pbnB1dC9qcy9hY3Rpb24taW5wdXQnKTtcblxudmFyIF9hY3Rpb25JbnB1dEpzQWN0aW9uSW5wdXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uSW5wdXRKc0FjdGlvbklucHV0KTtcblxudmFyIF9saXN0QWN0aW9ucyA9IHJlcXVpcmUoJy4vbGlzdC1hY3Rpb25zJyk7XG5cbnZhciBfbGlzdEFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGlzdEFjdGlvbnMpO1xuXG52YXIgX2xpc3RTdG9yZSA9IHJlcXVpcmUoJy4vbGlzdC1zdG9yZScpO1xuXG52YXIgX2xpc3RTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9saXN0U3RvcmUpO1xuXG52YXIgX2NvbXBvbmVudHNMaXN0SXRlbUpzTGlzdEl0ZW0gPSByZXF1aXJlKCcuLi9jb21wb25lbnRzL2xpc3QtaXRlbS9qcy9saXN0LWl0ZW0nKTtcblxudmFyIF9jb21wb25lbnRzTGlzdEl0ZW1Kc0xpc3RJdGVtMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbXBvbmVudHNMaXN0SXRlbUpzTGlzdEl0ZW0pO1xuXG52YXIgTGlzdCA9IChmdW5jdGlvbiAoX0Jhc2VDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKExpc3QsIF9CYXNlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBMaXN0KHByb3BzKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpc3QpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoTGlzdC5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0SXRlbXM6IF9saXN0U3RvcmUyWydkZWZhdWx0J10uZ2V0TGlzdCgpXG4gICAgfTtcblxuICAgIHRoaXMuX2JpbmQoJ2FkZEl0ZW0nLCAnb25DaGFuZ2UnKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhMaXN0LCBbe1xuICAgIGtleTogJ2FkZEl0ZW0nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRJdGVtKHZhbHVlKSB7XG4gICAgICBfbGlzdEFjdGlvbnMyWydkZWZhdWx0J10uYWRkSXRlbSh7XG4gICAgICAgIGlkOiB0aGlzLnN0YXRlLmxpc3RJdGVtcy5sZW5ndGggKyAxLFxuICAgICAgICBjb250ZW50OiB2YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnb25DaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZShsaXN0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbGlzdEl0ZW1zOiBsaXN0XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSA9IF9saXN0U3RvcmUyWydkZWZhdWx0J10ubGlzdGVuKHRoaXMub25DaGFuZ2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGxpc3RJdGVtcyA9IHRoaXMuc3RhdGUubGlzdEl0ZW1zO1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KF9hY3Rpb25JbnB1dEpzQWN0aW9uSW5wdXQyWydkZWZhdWx0J10sIHsgb25TdWJtaXRDYWxsYmFjazogdGhpcy5hZGRJdGVtIH0pLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KCd1bCcsIG51bGwpLFxuICAgICAgICBsaXN0SXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoX2NvbXBvbmVudHNMaXN0SXRlbUpzTGlzdEl0ZW0yWydkZWZhdWx0J10sIHsga2V5OiBpdGVtLmlkLCBjb250ZW50OiBpdGVtLmNvbnRlbnQgfSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMaXN0O1xufSkoX2Jhc2VDb21wb25lbnRKc0Jhc2VDb21wb25lbnQyWydkZWZhdWx0J10pO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBMaXN0O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2J1aWxkL2NvbXBvbmVudHMvbGlzdC9qcy9saXN0LmpzXG4gKiogbW9kdWxlIGlkID0gMlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKVtcImRlZmF1bHRcIl07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94Mykge1xuICB2YXIgX2FnYWluID0gdHJ1ZTtcblxuICBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHtcbiAgICB2YXIgb2JqZWN0ID0gX3gsXG4gICAgICAgIHByb3BlcnR5ID0gX3gyLFxuICAgICAgICByZWNlaXZlciA9IF94MztcbiAgICBkZXNjID0gcGFyZW50ID0gZ2V0dGVyID0gdW5kZWZpbmVkO1xuICAgIF9hZ2FpbiA9IGZhbHNlO1xuICAgIGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuICAgIHZhciBkZXNjID0gX09iamVjdCRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG5cbiAgICAgIGlmIChwYXJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF94ID0gcGFyZW50O1xuICAgICAgICBfeDIgPSBwcm9wZXJ0eTtcbiAgICAgICAgX3gzID0gcmVjZWl2ZXI7XG4gICAgICAgIF9hZ2FpbiA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlIF9mdW5jdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiBkZXNjKSB7XG4gICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGdldHRlciA9IGRlc2MuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vYmFiZWwtcnVudGltZS9oZWxwZXJzL2dldC5qc1xuICoqIG1vZHVsZSBpZCA9IDNcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanNcbiAqKiBtb2R1bGUgaWQgPSA0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSl7XG4gIHJldHVybiAkLmdldERlc2MoaXQsIGtleSk7XG59O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qc1xuICoqIG1vZHVsZSBpZCA9IDVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsInZhciAkT2JqZWN0ID0gT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZTogICAgICRPYmplY3QuY3JlYXRlLFxuICBnZXRQcm90bzogICAkT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuICBpc0VudW06ICAgICB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcbiAgZ2V0RGVzYzogICAgJE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIHNldERlc2M6ICAgICRPYmplY3QuZGVmaW5lUHJvcGVydHksXG4gIHNldERlc2NzOiAgICRPYmplY3QuZGVmaW5lUHJvcGVydGllcyxcbiAgZ2V0S2V5czogICAgJE9iamVjdC5rZXlzLFxuICBnZXROYW1lczogICAkT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsXG4gIGdldFN5bWJvbHM6ICRPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxuICBlYWNoOiAgICAgICBbXS5mb3JFYWNoXG59O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmpzXG4gKiogbW9kdWxlIGlkID0gNlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vJC50by1pb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vJC5vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uKCRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ipe1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpe1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSU9iamVjdChpdCksIGtleSk7XG4gIH07XG59KTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanNcbiAqKiBtb2R1bGUgaWQgPSA3XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcclxudmFyIElPYmplY3QgPSByZXF1aXJlKCcuLyQuaW9iamVjdCcpXHJcbiAgLCBkZWZpbmVkID0gcmVxdWlyZSgnLi8kLmRlZmluZWQnKTtcclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XHJcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xyXG59O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnRvLWlvYmplY3QuanNcbiAqKiBtb2R1bGUgaWQgPSA4XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvLyBpbmRleGVkIG9iamVjdCwgZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi8kLmNvZicpO1xubW9kdWxlLmV4cG9ydHMgPSAwIGluIE9iamVjdCgneicpID8gT2JqZWN0IDogZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmlvYmplY3QuanNcbiAqKiBtb2R1bGUgaWQgPSA5XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmNvZi5qc1xuICoqIG1vZHVsZSBpZCA9IDEwXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKGl0ID09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZGVmaW5lZC5qc1xuICoqIG1vZHVsZSBpZCA9IDExXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBleGVjKXtcbiAgdmFyICRkZWYgPSByZXF1aXJlKCcuLyQuZGVmJylcbiAgICAsIGZuICAgPSAocmVxdWlyZSgnLi8kLmNvcmUnKS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV1cbiAgICAsIGV4cCAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGRlZigkZGVmLlMgKyAkZGVmLkYgKiByZXF1aXJlKCcuLyQuZmFpbHMnKShmdW5jdGlvbigpeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5vYmplY3Qtc2FwLmpzXG4gKiogbW9kdWxlIGlkID0gMTJcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuLyQuZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgPSByZXF1aXJlKCcuLyQuY29yZScpXG4gICwgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgY3R4ID0gZnVuY3Rpb24oZm4sIHRoYXQpe1xuICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG52YXIgJGRlZiA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHNvdXJjZSl7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHBcbiAgICAsIGlzR2xvYmFsID0gdHlwZSAmICRkZWYuR1xuICAgICwgaXNQcm90byAgPSB0eXBlICYgJGRlZi5QXG4gICAgLCB0YXJnZXQgICA9IGlzR2xvYmFsID8gZ2xvYmFsIDogdHlwZSAmICRkZWYuU1xuICAgICAgICA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV1cbiAgICAsIGV4cG9ydHMgID0gaXNHbG9iYWwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgaWYoaXNHbG9iYWwpc291cmNlID0gbmFtZTtcbiAgZm9yKGtleSBpbiBzb3VyY2Upe1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICEodHlwZSAmICRkZWYuRikgJiYgdGFyZ2V0ICYmIGtleSBpbiB0YXJnZXQ7XG4gICAgaWYob3duICYmIGtleSBpbiBleHBvcnRzKWNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBpZihpc0dsb2JhbCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJylleHAgPSBzb3VyY2Vba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGVsc2UgaWYodHlwZSAmICRkZWYuQiAmJiBvd24pZXhwID0gY3R4KG91dCwgZ2xvYmFsKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIGVsc2UgaWYodHlwZSAmICRkZWYuVyAmJiB0YXJnZXRba2V5XSA9PSBvdXQpIWZ1bmN0aW9uKEMpe1xuICAgICAgZXhwID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEMgPyBuZXcgQyhwYXJhbSkgOiBDKHBhcmFtKTtcbiAgICAgIH07XG4gICAgICBleHBbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICB9KG91dCk7XG4gICAgZWxzZSBleHAgPSBpc1Byb3RvICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4cG9ydFxuICAgIGV4cG9ydHNba2V5XSA9IGV4cDtcbiAgICBpZihpc1Byb3RvKShleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KSlba2V5XSA9IG91dDtcbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZGVmLkYgPSAxOyAgLy8gZm9yY2VkXG4kZGVmLkcgPSAyOyAgLy8gZ2xvYmFsXG4kZGVmLlMgPSA0OyAgLy8gc3RhdGljXG4kZGVmLlAgPSA4OyAgLy8gcHJvdG9cbiRkZWYuQiA9IDE2OyAvLyBiaW5kXG4kZGVmLlcgPSAzMjsgLy8gd3JhcFxubW9kdWxlLmV4cG9ydHMgPSAkZGVmO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmRlZi5qc1xuICoqIG1vZHVsZSBpZCA9IDEzXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIFVOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSBVTkRFRklORUQgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9IFVOREVGSU5FRCAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGYgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYodHlwZW9mIF9fZyA9PSAnbnVtYmVyJylfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5nbG9iYWwuanNcbiAqKiBtb2R1bGUgaWQgPSAxNFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuaWYodHlwZW9mIF9fZSA9PSAnbnVtYmVyJylfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuY29yZS5qc1xuICoqIG1vZHVsZSBpZCA9IDE1XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5mYWlscy5qc1xuICoqIG1vZHVsZSBpZCA9IDE2XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9PYmplY3QkY3JlYXRlID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvY3JlYXRlXCIpW1wiZGVmYXVsdFwiXTtcblxudmFyIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpW1wiZGVmYXVsdFwiXTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfT2JqZWN0JHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59O1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qc1xuICoqIG1vZHVsZSBpZCA9IDE3XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2NyZWF0ZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzXG4gKiogbW9kdWxlIGlkID0gMThcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsInZhciAkID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy8kJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKXtcbiAgcmV0dXJuICQuY3JlYXRlKFAsIEQpO1xufTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanNcbiAqKiBtb2R1bGUgaWQgPSAxOVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXG4gKiogbW9kdWxlIGlkID0gMjBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJC5jb3JlJykuT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcbiAqKiBtb2R1bGUgaWQgPSAyMVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZGVmID0gcmVxdWlyZSgnLi8kLmRlZicpO1xuJGRlZigkZGVmLlMsICdPYmplY3QnLCB7c2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vJC5zZXQtcHJvdG8nKS5zZXR9KTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzXG4gKiogbW9kdWxlIGlkID0gMjJcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBnZXREZXNjICA9IHJlcXVpcmUoJy4vJCcpLmdldERlc2NcbiAgLCBpc09iamVjdCA9IHJlcXVpcmUoJy4vJC5pcy1vYmplY3QnKVxuICAsIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi8kLmFuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24oTywgcHJvdG8pe1xuICBhbk9iamVjdChPKTtcbiAgaWYoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCl0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgPyBmdW5jdGlvbihidWdneSwgc2V0KXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXQgPSByZXF1aXJlKCcuLyQuY3R4JykoRnVuY3Rpb24uY2FsbCwgZ2V0RGVzYyhPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgICBzZXQoe30sIFtdKTtcbiAgICAgICAgfSBjYXRjaChlKXsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90byl7XG4gICAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICAgIGlmKGJ1Z2d5KU8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICAgIHJldHVybiBPO1xuICAgICAgICB9O1xuICAgICAgfSgpXG4gICAgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuc2V0LXByb3RvLmpzXG4gKiogbW9kdWxlIGlkID0gMjNcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8vIGh0dHA6Ly9qc3BlcmYuY29tL2NvcmUtanMtaXNvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgIT09IG51bGwgJiYgKHR5cGVvZiBpdCA9PSAnb2JqZWN0JyB8fCB0eXBlb2YgaXQgPT0gJ2Z1bmN0aW9uJyk7XG59O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmlzLW9iamVjdC5qc1xuICoqIG1vZHVsZSBpZCA9IDI0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLyQuaXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoIWlzT2JqZWN0KGl0KSl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuYW4tb2JqZWN0LmpzXG4gKiogbW9kdWxlIGlkID0gMjVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vJC5hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCB0aGF0LCBsZW5ndGgpe1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZih0aGF0ID09PSB1bmRlZmluZWQpcmV0dXJuIGZuO1xuICBzd2l0Y2gobGVuZ3RoKXtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbihhKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24oYSwgYil7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKGEsIGIsIGMpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfSByZXR1cm4gZnVuY3Rpb24oLyogLi4uYXJncyAqLyl7XG4gICAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgICB9O1xufTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9iYWJlbC1ydW50aW1lL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5jdHguanNcbiAqKiBtb2R1bGUgaWQgPSAyNlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuYS1mdW5jdGlvbi5qc1xuICoqIG1vZHVsZSBpZCA9IDI3XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIilbXCJkZWZhdWx0XCJdO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuXG4gICAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KSgpO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGUtY2xhc3MuanNcbiAqKiBtb2R1bGUgaWQgPSAyOFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1xuICoqIG1vZHVsZSBpZCA9IDI5XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKXtcbiAgcmV0dXJuICQuc2V0RGVzYyhpdCwga2V5LCBkZXNjKTtcbn07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vYmFiZWwtcnVudGltZS9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXG4gKiogbW9kdWxlIGlkID0gMzBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzcy1jYWxsLWNoZWNrLmpzXG4gKiogbW9kdWxlIGlkID0gMzFcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2dldCA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvZ2V0XCIpW1wiZGVmYXVsdFwiXTtcblxudmFyIF9pbmhlcml0cyA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNcIilbXCJkZWZhdWx0XCJdO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGUtY2xhc3NcIilbXCJkZWZhdWx0XCJdO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrID0gcmVxdWlyZShcImJhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzcy1jYWxsLWNoZWNrXCIpW1wiZGVmYXVsdFwiXTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIEJhc2VDb21wb25lbnQgPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEJhc2VDb21wb25lbnQsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEJhc2VDb21wb25lbnQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJhc2VDb21wb25lbnQpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoQmFzZUNvbXBvbmVudC5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQmFzZUNvbXBvbmVudCwgW3tcbiAgICBrZXk6IFwiX2JpbmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2JpbmQoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWV0aG9kcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBtZXRob2RzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBtZXRob2RzLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gX3RoaXNbbWV0aG9kXSA9IF90aGlzW21ldGhvZF0uYmluZChfdGhpcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQmFzZUNvbXBvbmVudDtcbn0pKFJlYWN0LkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQmFzZUNvbXBvbmVudDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2J1aWxkL2NvbXBvbmVudHMvYmFzZS1jb21wb25lbnQvanMvYmFzZS1jb21wb25lbnQuanNcbiAqKiBtb2R1bGUgaWQgPSAzMlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2dldCA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9nZXQnKVsnZGVmYXVsdCddO1xuXG52YXIgX2luaGVyaXRzID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJylbJ2RlZmF1bHQnXTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGUtY2xhc3MnKVsnZGVmYXVsdCddO1xuXG52YXIgX2NsYXNzQ2FsbENoZWNrID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzLWNhbGwtY2hlY2snKVsnZGVmYXVsdCddO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoJ2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbnRlcm9wLXJlcXVpcmUtZGVmYXVsdCcpWydkZWZhdWx0J107XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2Jhc2VDb21wb25lbnRKc0Jhc2VDb21wb25lbnQgPSByZXF1aXJlKCcuLi8uLi9iYXNlLWNvbXBvbmVudC9qcy9iYXNlLWNvbXBvbmVudCcpO1xuXG52YXIgX2Jhc2VDb21wb25lbnRKc0Jhc2VDb21wb25lbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFzZUNvbXBvbmVudEpzQmFzZUNvbXBvbmVudCk7XG5cbnZhciBfYWN0aW9uSW5wdXRBY3Rpb25zID0gcmVxdWlyZSgnLi9hY3Rpb24taW5wdXQtYWN0aW9ucycpO1xuXG52YXIgX2FjdGlvbklucHV0QWN0aW9uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hY3Rpb25JbnB1dEFjdGlvbnMpO1xuXG52YXIgX2FjdGlvbklucHV0U3RvcmUgPSByZXF1aXJlKCcuL2FjdGlvbi1pbnB1dC1zdG9yZScpO1xuXG52YXIgX2FjdGlvbklucHV0U3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWN0aW9uSW5wdXRTdG9yZSk7XG5cbnZhciBBY3Rpb25JbnB1dCA9IChmdW5jdGlvbiAoX0Jhc2VDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEFjdGlvbklucHV0LCBfQmFzZUNvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQWN0aW9uSW5wdXQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFjdGlvbklucHV0KTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKEFjdGlvbklucHV0LnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmNhbGwodGhpcyk7XG4gICAgdGhpcy5fYmluZCgnaGFuZGxlQ2hhbmdlJywgJ2hhbmRsZVN1Ym1pdCcpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogJydcbiAgICB9O1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEFjdGlvbklucHV0LCBbe1xuICAgIGtleTogJ2hhbmRsZUNoYW5nZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldmVudCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBldmVudC50YXJnZXQudmFsdWUgfSk7XG4gICAgICBfYWN0aW9uSW5wdXRBY3Rpb25zMlsnZGVmYXVsdCddLmlucHV0Q2hhbmdlZCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlLFxuICAgICAgICBjYWxsYmFjazogdGhpcy5wcm9wcy5vbkNoYW5nZUNhbGxiYWNrXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVTdWJtaXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVTdWJtaXQoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlICE9PSAxMykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF9hY3Rpb25JbnB1dEFjdGlvbnMyWydkZWZhdWx0J10uaW5wdXRTdWJtaXRlZCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlLFxuICAgICAgICBjYWxsYmFjazogdGhpcy5wcm9wcy5vblN1Ym1pdENhbGxiYWNrXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogJycgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdkaXYnLFxuICAgICAgICBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KCdpbnB1dCcsIHsgdHlwZTogJ3RleHQnLCB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSxcbiAgICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZVN1Ym1pdCB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQWN0aW9uSW5wdXQ7XG59KShfYmFzZUNvbXBvbmVudEpzQmFzZUNvbXBvbmVudDJbJ2RlZmF1bHQnXSk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IEFjdGlvbklucHV0O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2J1aWxkL2NvbXBvbmVudHMvYWN0aW9uLWlucHV0L2pzL2FjdGlvbi1pbnB1dC5qc1xuICoqIG1vZHVsZSBpZCA9IDMzXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIEFjdGlvbklucHV0QWN0aW9ucyA9IFJlZmx1eC5jcmVhdGVBY3Rpb25zKFsnaW5wdXRDaGFuZ2VkJywgJ2lucHV0U3VibWl0ZWQnXSk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IEFjdGlvbklucHV0QWN0aW9ucztcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9idWlsZC9jb21wb25lbnRzL2FjdGlvbi1pbnB1dC9qcy9hY3Rpb24taW5wdXQtYWN0aW9ucy5qc1xuICoqIG1vZHVsZSBpZCA9IDM0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZSgnYmFiZWwtcnVudGltZS9oZWxwZXJzL2ludGVyb3AtcmVxdWlyZS1kZWZhdWx0JylbJ2RlZmF1bHQnXTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfYWN0aW9uSW5wdXRBY3Rpb25zID0gcmVxdWlyZSgnLi9hY3Rpb24taW5wdXQtYWN0aW9ucycpO1xuXG52YXIgX2FjdGlvbklucHV0QWN0aW9uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hY3Rpb25JbnB1dEFjdGlvbnMpO1xuXG52YXIgQWN0aW9uSW5wdXRTdG9yZSA9IFJlZmx1eC5jcmVhdGVTdG9yZSh7XG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgY29uc29sZS5sb2codGhpcywgJ1N0b3JlJyk7XG4gICAgdGhpcy5saXN0ZW5UbyhfYWN0aW9uSW5wdXRBY3Rpb25zMlsnZGVmYXVsdCddLmlucHV0Q2hhbmdlZCwgdGhpcy5vbklucHV0Q2hhbmdlZCk7XG4gICAgdGhpcy5saXN0ZW5UbyhfYWN0aW9uSW5wdXRBY3Rpb25zMlsnZGVmYXVsdCddLmlucHV0U3VibWl0ZWQsIHRoaXMub25JbnB1dFN1Ym1pdGVkKTtcbiAgfSxcbiAgb25JbnB1dENoYW5nZWQ6IGZ1bmN0aW9uIG9uSW5wdXRDaGFuZ2VkKG9iaikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvYmouY2FsbGJhY2sob2JqLnZhbHVlKTtcbiAgfSxcbiAgb25JbnB1dFN1Ym1pdGVkOiBmdW5jdGlvbiBvbklucHV0U3VibWl0ZWQob2JqKSB7XG4gICAgaWYgKHR5cGVvZiBvYmouY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb2JqLmNhbGxiYWNrKG9iai52YWx1ZSk7XG4gIH1cbn0pO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBBY3Rpb25JbnB1dFN0b3JlO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2J1aWxkL2NvbXBvbmVudHMvYWN0aW9uLWlucHV0L2pzL2FjdGlvbi1pbnB1dC1zdG9yZS5qc1xuICoqIG1vZHVsZSBpZCA9IDM1XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIExpc3RBY3Rpb25zID0gUmVmbHV4LmNyZWF0ZUFjdGlvbnMoWydhZGRJdGVtJ10pO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBMaXN0QWN0aW9ucztcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9idWlsZC9jb21wb25lbnRzL2xpc3QvanMvbGlzdC1hY3Rpb25zLmpzXG4gKiogbW9kdWxlIGlkID0gMzZcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIid1c2Ugc3RyaWN0JztcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKCdiYWJlbC1ydW50aW1lL2hlbHBlcnMvaW50ZXJvcC1yZXF1aXJlLWRlZmF1bHQnKVsnZGVmYXVsdCddO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9saXN0QWN0aW9ucyA9IHJlcXVpcmUoJy4vbGlzdC1hY3Rpb25zJyk7XG5cbnZhciBfbGlzdEFjdGlvbnMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGlzdEFjdGlvbnMpO1xuXG52YXIgTGlzdFN0b3JlID0gUmVmbHV4LmNyZWF0ZVN0b3JlKHtcbiAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLmxpc3RlblRvKF9saXN0QWN0aW9uczJbJ2RlZmF1bHQnXS5hZGRJdGVtLCB0aGlzLm9uQWRkSXRlbSk7XG4gIH0sXG4gIGdldExpc3Q6IGZ1bmN0aW9uIGdldExpc3QoKSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xpc3QnKSkgfHwgW107XG4gIH0sXG4gIHNhdmVMaXN0OiBmdW5jdGlvbiBzYXZlTGlzdChhcnIpIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xpc3QnLCBKU09OLnN0cmluZ2lmeShhcnIpKTtcbiAgfSxcbiAgb25BZGRJdGVtOiBmdW5jdGlvbiBvbkFkZEl0ZW0oYXJyKSB7XG4gICAgdmFyIGxpc3QgPSB0aGlzLmdldExpc3QoKTtcbiAgICBjb25zb2xlLmxvZyhsaXN0KTtcbiAgICBsaXN0LnB1c2goYXJyKTtcbiAgICB0aGlzLnNhdmVMaXN0KGxpc3QpO1xuICAgIHRoaXMudHJpZ2dlcihsaXN0KTtcbiAgfVxufSk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IExpc3RTdG9yZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9idWlsZC9jb21wb25lbnRzL2xpc3QvanMvbGlzdC1zdG9yZS5qc1xuICoqIG1vZHVsZSBpZCA9IDM3XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9nZXQgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2dldFwiKVtcImRlZmF1bHRcIl07XG5cbnZhciBfaW5oZXJpdHMgPSByZXF1aXJlKFwiYmFiZWwtcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCIpW1wiZGVmYXVsdFwiXTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlLWNsYXNzXCIpW1wiZGVmYXVsdFwiXTtcblxudmFyIF9jbGFzc0NhbGxDaGVjayA9IHJlcXVpcmUoXCJiYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3MtY2FsbC1jaGVja1wiKVtcImRlZmF1bHRcIl07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBMaXN0SXRlbSA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoTGlzdEl0ZW0sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIExpc3RJdGVtKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMaXN0SXRlbSk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihMaXN0SXRlbS5wcm90b3R5cGUpLCBcImNvbnN0cnVjdG9yXCIsIHRoaXMpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTGlzdEl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJsaVwiLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnByb3BzLmNvbnRlbnRcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIExpc3RJdGVtO1xufSkoUmVhY3QuQ29tcG9uZW50KTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBMaXN0SXRlbTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2J1aWxkL2NvbXBvbmVudHMvbGlzdC9jb21wb25lbnRzL2xpc3QtaXRlbS9qcy9saXN0LWl0ZW0uanNcbiAqKiBtb2R1bGUgaWQgPSAzOFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==