/*! For license information please see referral-form.js.LICENSE.txt */ (()=>{var e={172(e,t,r){"use strict";r.d(t,{FK:()=>w,Ob:()=>W,Qv:()=>H,XX:()=>$,_3:()=>I,fF:()=>i,n:()=>E,q6:()=>Y,uA:()=>N,v2:()=>U});var n,i,o,a,s,l,u,c,d,f,p,h,m={},_=[],g=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,v=Array.isArray;function y(e,t){for(var r in t)e[r]=t[r];return e}function b(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function E(e,t,r){var i,o,a,s={};for(a in t)"key"==a?i=t[a]:"ref"==a?o=t[a]:s[a]=t[a];if(arguments.length>2&&(s.children=arguments.length>3?n.call(arguments,2):r),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===s[a]&&(s[a]=e.defaultProps[a]);return O(e,s,i,o,null)}function O(e,t,r,n,a){var s={type:e,props:t,key:r,ref:n,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==a?++o:a,__i:-1,__u:0};return null==a&&null!=i.vnode&&i.vnode(s),s}function I(){return{current:null}}function w(e){return e.children}function N(e,t){this.props=e,this.context=t}function R(e,t){if(null==t)return e.__?R(e.__,e.__i+1):null;for(var r;tc&&a.sort(u),e=a.shift(),c=a.length,e.__d&&(r=void 0,n=void 0,o=(n=(t=e).__v).__e,s=[],l=[],t.__P&&((r=y({},n)).__v=n.__v+1,i.vnode&&i.vnode(r),V(t.__P,r,n,t.__n,t.__P.namespaceURI,32&n.__u?[o]:null,s,null==o?R(n):o,!!(32&n.__u),l),r.__v=n.__v,r.__.__k[r.__i]=r,j(s,r,l),n.__e=n.__=null,r.__e!=o&&S(r)));T.__r=0}function A(e,t,r,n,i,o,a,s,l,u,c){var d,f,p,h,g,v,y,b=n&&n.__k||_,E=t.length;for(l=D(r,t,b,l,E),d=0;d0?a=e.__k[o]=O(a.type,a.props,a.key,a.ref?a.ref:null,a.__v):e.__k[o]=a,l=o+f,a.__=e,a.__b=e.__b+1,s=null,-1!=(u=a.__i=L(a,r,l,d))&&(d--,(s=r[u])&&(s.__u|=2)),null==s||null==s.__v?(-1==u&&(i>c?f--:il?f--:f++,a.__u|=4))):e.__k[o]=null;if(d)for(o=0;o(c?1:0))for(i=r-1,o=r+1;i>=0||o=0?i--:o++])&&!(2&u.__u)&&s==u.key&&l==u.type)return a;return-1}function P(e,t,r){"-"==t[0]?e.setProperty(t,null==r?"":r):e[t]=null==r?"":"number"!=typeof r||g.test(t)?r:r+"px"}function k(e,t,r,n,i){var o,a;e:if("style"==t)if("string"==typeof r)e.style.cssText=r;else{if("string"==typeof n&&(e.style.cssText=n=""),n)for(t in n)r&&t in r||P(e.style,t,"");if(r)for(t in r)n&&r[t]==n[t]||P(e.style,t,r[t])}else if("o"==t[0]&&"n"==t[1])o=t!=(t=t.replace(c,"$1")),a=t.toLowerCase(),t=a in e||"onFocusOut"==t||"onFocusIn"==t?a.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=r,r?n?r.u=n.u:(r.u=d,e.addEventListener(t,o?p:f,o)):e.removeEventListener(t,o?p:f,o);else{if("http://www.w3.org/2000/svg"==i)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=t&&"height"!=t&&"href"!=t&&"list"!=t&&"form"!=t&&"tabIndex"!=t&&"download"!=t&&"rowSpan"!=t&&"colSpan"!=t&&"role"!=t&&"popover"!=t&&t in e)try{e[t]=null==r?"":r;break e}catch(e){}"function"==typeof r||(null==r||!1===r&&"-"!=t[4]?e.removeAttribute(t):e.setAttribute(t,"popover"==t&&1==r?"":r))}}function F(e){return function(t){if(this.l){var r=this.l[t.type+e];if(null==t.t)t.t=d++;else if(t.t0?e:v(e)?e.map(z):y({},e)}function B(e,t,r,o,a,s,l,u,c){var d,f,p,h,_,g,y,E=r.props||m,O=t.props,I=t.type;if("svg"==I?a="http://www.w3.org/2000/svg":"math"==I?a="http://www.w3.org/1998/Math/MathML":a||(a="http://www.w3.org/1999/xhtml"),null!=s)for(d=0;d2&&(l.children=arguments.length>3?n.call(arguments,2):r),O(e.type,l,i||e.key,o||e.ref,null)}function Y(e){function t(e){var r,n;return this.getChildContext||(r=new Set,(n={})[t.__c]=this,this.getChildContext=function(){return n},this.componentWillUnmount=function(){r=null},this.shouldComponentUpdate=function(e){this.props.value!=e.value&&r.forEach(function(e){e.__e=!0,x(e)})},this.sub=function(e){r.add(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){r&&r.delete(e),t&&t.call(e)}}),e.children}return t.__c="__cC"+h++,t.__=e,t.Provider=t.__l=(t.Consumer=function(e,t){return e.children(t)}).contextType=t,t}n=_.slice,i={__e:function(e,t,r,n){for(var i,o,a;t=t.__;)if((i=t.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(e)),a=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(e,n||{}),a=i.__d),a)return i.__E=i}catch(t){e=t}throw e}},o=0,N.prototype.setState=function(e,t){var r;r=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=y({},this.state),"function"==typeof e&&(e=e(y({},r),this.props)),e&&y(r,e),null!=e&&this.__v&&(t&&this._sb.push(t),x(this))},N.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),x(this))},N.prototype.render=w,a=[],l="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,u=function(e,t){return e.__v.__b-t.__v.__b},T.__r=0,c=/(PointerCapture)$|Capture$/i,d=0,f=F(!1),p=F(!0),h=0},519(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class r{static get(){return(new r).environment()}static prefix(){return(new r).prefix()}constructor(){this.host=this._getHostname()}environment(){return this.host.match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/)||this.host.indexOf(".local")>-1||this.host.indexOf("localhost")>-1?"dev":this.host.indexOf("test.")>-1?"test":this.host.indexOf("qa.")>-1?"qa":"prod"}prefix(){return{dev:"test.",test:"test.",qa:"qa.",prod:""}[this.environment()]}_getHostname(){return window.location.hostname}}t.default=r},813(e,t,r){"use strict";var n=r(5299),i=r(9624),o=r(4146);function a(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,Object.freeze(t)}var s=a(n),l=a(i),u=n.createContext({optimizely:null,isServerSide:!1,timeout:0}),c=u.Consumer,d=u.Provider,f=function(e,t){return f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},f(e,t)};function p(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}f(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var h=function(){return h=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&i[i.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]=0&&r.observers.splice(e,1)}},e.prototype.notify=function(e){this.observers.filter(function(t){return t.key===e}).forEach(function(e){return e.callback()})},e}().getInstance(),N=l.getLogger("ReactSDK"),R=function(e){for(var t=[],r=1;r-1&&t.onUserUpdateHandlers.splice(r,1)}},e.prototype.onForcedVariationsUpdate=function(e){var t=this;return this.onForcedVariationsUpdateHandlers.push(e),function(){var r=t.onForcedVariationsUpdateHandlers.indexOf(e);r>-1&&t.onForcedVariationsUpdateHandlers.splice(r,1)}},e.prototype.isReady=function(){return this.isClientReady&&this.isUserReady},e.prototype.activate=function(e,t,r){if(!this._client)return R('Unable to activate experiment "%s" because Optimizely client failed to initialize.',e),null;var n=this.getUserWithOverrides(t,r);return null===n.id?(S('Unable to activate experiment "%s" because User ID is not set',e),null):this._client.activate(e,n.id,n.attributes)},e.prototype.decide=function(e,t,r,n){if(void 0===t&&(t=[]),!this._client)return R('Unable to evaluate feature "%s" because Optimizely client failed to initialize.',e),E(e,"Unable to evaluate flag ".concat(e," because Optimizely client failed to initialize."),this.user);var i=this.getUserWithOverrides(r,n);if(null===i.id)return S('Unable to evaluate feature "%s" because User ID is not set.',e),E(e,"Unable to evaluate flag ".concat(e," because User ID is not set."),i);var o=this.makeUserContextInstance(i);return o?h(h({},o.decide(e,t)),{userContext:{id:i.id,attributes:i.attributes}}):E(e,"Not Evaluating flag ".concat(e," because user id or attributes are not valid"),i)},e.prototype.decideForKeys=function(e,t,r,n){if(void 0===t&&(t=[]),!this._client)return R("Unable to evaluate features for keys because Optimizely client failed to initialize."),{};var i=this.getUserWithOverrides(r,n);if(null===i.id)return S("Unable to evaluate features for keys because User ID is not set"),{};var o=this.makeUserContextInstance(i);return o?Object.entries(o.decideForKeys(e,t)).reduce(function(e,t){var r=t[0],n=t[1];return e[r]=h(h({},n),{userContext:{id:i.id||"",attributes:i.attributes}}),e},{}):{}},e.prototype.decideAll=function(e,t,r){if(void 0===e&&(e=[]),!this._client)return R("Unable to evaluate all feature decisions because Optimizely client is not initialized."),{};var n=this.getUserWithOverrides(t,r);if(null===n.id)return S("Unable to evaluate all feature decisions because User ID is not set"),{};var i=this.makeUserContextInstance(n);return i?Object.entries(i.decideAll(e)).reduce(function(e,t){var r=t[0],i=t[1];return e[r]=h(h({},i),{userContext:{id:n.id||"",attributes:n.attributes}}),e},{}):{}},e.prototype.getVariation=function(e,t,r){if(!this._client)return R('Unable to get variation for experiment "%s" because Optimizely client failed to initialize.',e),null;var n=this.getUserWithOverrides(t,r);return null===n.id?(S('Unable to get variation for experiment "%s" because User ID is not set',e),null):this._client.getVariation(e,n.id,n.attributes)},e.prototype.track=function(e,t,r,n){if(this._client){void 0!==t&&"string"!=typeof t&&(n=t,t=void 0);var i=this.getUserWithOverrides(t,r);null!==i.id?this._client.track(e,i.id,i.attributes,n):S('Unable to send tracking event "%s" because User ID is not set',e)}else R('Unable to send tracking event "%s" because Optimizely client failed to initialize.',e)},e.prototype.setForcedDecision=function(e,t){this.userContext?this.userContext.setForcedDecision(e,t)&&(this.forcedDecisionFlagKeys.add(e.flagKey),w.notify(e.flagKey)):R("Unable to set a forced decision because the user context has not been set yet.")},e.prototype.getForcedDecision=function(e){return this.userContext?this.userContext.getForcedDecision(e):(R("Unable to get a forced decision because the user context has not been set yet."),null)},e.prototype.removeForcedDecision=function(e){if(!this.userContext)return R("Unable to remove forced decisions because the user context has not been set yet."),!1;var t=this.userContext.removeForcedDecision(e);return t&&(this.forcedDecisionFlagKeys.delete(e.flagKey),w.notify(e.flagKey)),t},e.prototype.removeAllForcedDecisions=function(){if(!this.userContext)return R("Unable to remove all forced decisions because the user context has not been set yet."),!1;var e=this.userContext.removeAllForcedDecisions();return e&&(this.forcedDecisionFlagKeys.forEach(function(e){return w.notify(e)}),this.forcedDecisionFlagKeys.clear()),e},e.prototype.isFeatureEnabled=function(e,t,r){if(!this._client)return R('Unable to determine if feature "%s" is enabled because Optimizely client failed to initialize.',e),!1;var n=this.getUserWithOverrides(t,r);return null===n.id?(S('Unable to determine if feature "%s" is enabled because User ID is not set',e),!1):this._client.isFeatureEnabled(e,n.id,n.attributes)},e.prototype.getFeatureVariables=function(e,t,r){var n=this;if(!this._client)return R('Unable to get feature variables for feature "%s" because Optimizely client failed to initialize.',e),{};var i=this.getUserWithOverrides(t,r),o=i.id;if(null===o)return R('Unable to get feature variables for feature "%s" because User ID is not set',e),{};var a=i.attributes,s={},l=this._client.getOptimizelyConfig();if(!l)return R('Unable to retrieve feature variables for feature "%s" because Optimizely client failed to initialize.',e),{};var u=l.featuresMap[e];return u?(Object.keys(u.variablesMap).forEach(function(t){var r=u.variablesMap[t];s[r.key]=n._client.getFeatureVariable(e,r.key,o,a)}),s):(S('Unable to retrieve feature variables for feature "%s" because config features map is not set',e),{})},e.prototype.getFeatureVariableString=function(e,t,r,n){if(!this._client)return R('Unable to get feature variable string from feature "%s" because Optimizely client failed to initialize.',e),null;var i=this.getUserWithOverrides(r,n);return null===i.id?(S('Unable to get feature variable string from feature "%s" because User ID is not set',e),null):this._client.getFeatureVariableString(e,t,i.id,i.attributes)},e.prototype.getFeatureVariableBoolean=function(e,t,r,n){if(!this._client)return R('Unable to get feature variable boolean from feature "%s" because Optimizely client failed to initialize.',e),null;var i=this.getUserWithOverrides(r,n);return null===i.id?(S('Unable to get feature variable boolean from feature "%s" because User ID is not set',e),null):this._client.getFeatureVariableBoolean(e,t,i.id,i.attributes)},e.prototype.getFeatureVariableInteger=function(e,t,r,n){if(!this._client)return R('Unable to get feature variable integer from feature "%s" because Optimizely client failed to initialize.',e),null;var i=this.getUserWithOverrides(r,n);return null===i.id?(S('Unable to get feature variable integer from feature "%s" because User ID is not set',e),null):this._client.getFeatureVariableInteger(e,t,i.id,i.attributes)},e.prototype.getFeatureVariableDouble=function(e,t,r,n){if(!this._client)return R('Unable to get feature variable double from feature "%s" because Optimizely client failed to initialize.',e),null;var i=this.getUserWithOverrides(r,n);return null===i.id?(S('Unable to get feature variable double from feature "%s" because User ID is not set',e),null):this._client.getFeatureVariableDouble(e,t,i.id,i.attributes)},e.prototype.getFeatureVariableJSON=function(e,t,r,n){if(!this._client)return R('Unable to get feature variable JSON from feature "%s" because Optimizely client failed to initialize.',e),null;var i=this.getUserWithOverrides(r,n);return null===i.id?(S('Unable to get feature variable JSON from feature "%s" because User ID is not set',e),null):this._client.getFeatureVariableJSON(e,t,i.id,i.attributes)},e.prototype.getFeatureVariable=function(e,t,r,n){if(!this._client)return R('Unable to get feature variable from feature "%s" because Optimizely client failed to initialize.',e,t),null;var i=this.getUserWithOverrides(r,n);return null===i.id?(S('Unable to get feature variable from feature "%s" because User ID is not set',e,t),null):this._client.getFeatureVariable(e,t,i.id,i.attributes)},e.prototype.getAllFeatureVariables=function(e,t,r){if(!this._client)return R('Unable to get all feature variables from feature "%s" because Optimizely client failed to initialize.',e),{};var n=this.getUserWithOverrides(t,r);return null===n.id?(S('Unable to get all feature variables from feature "%s" because User ID is not set',e),{}):this._client.getAllFeatureVariables(e,n.id,n.attributes)},e.prototype.getEnabledFeatures=function(e,t){if(!this._client)return R("Unable to get list of enabled features because Optimizely client failed to initialize."),[];var r=this.getUserWithOverrides(e,t);return null===r.id?(S("Unable to get list of enabled features because User ID is not set"),[]):this._client.getEnabledFeatures(r.id,r.attributes)},e.prototype.getForcedVariation=function(e,t){if(!this._client)return R('Unable to get forced variation for experiment "%s" because Optimizely client failed to initialize.',e),null;var r=this.getUserWithOverrides(t);return null===r.id?(S('Unable to get forced variation for experiment "%s" because User ID is not set',e),null):this._client.getForcedVariation(e,r.id)},e.prototype.setForcedVariation=function(e,t,r){if(!this._client)return R('Unable to set forced variation for experiment "%s" because Optimizely client failed to initialize.',e),!1;var n=null,i=null;if(2===arguments.length)i=t,n=this.getUserWithOverrides().id;else if(3===arguments.length){if(n=this.getUserWithOverrides(t).id,void 0===r)return!1;i=r}if(null===n)return R('Unable to set forced variation for experiment "%s" because User ID is not set',e),!1;var o=this._client.setForcedVariation(e,n,i);return this.onForcedVariationsUpdateHandlers.forEach(function(e){return e()}),o},e.prototype.getOptimizelyConfig=function(){return this._client?this._client.getOptimizelyConfig():(R("Unable to get Optimizely configuration because Optimizely client failed to initialize."),null)},e.prototype.close=function(){return this._client?this._client.close():new Promise(function(e,t){return e({success:!0,reason:"Optimizely client is not initialized."})})},Object.defineProperty(e.prototype,"client",{get:function(){return this._client?this._client:(R("Unable to get client because Optimizely client failed to initialize."),null)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"notificationCenter",{get:function(){return this._client?this._client.notificationCenter:{addNotificationListener:function(){return R("Unable to add notification listener because Optimizely client failed to initialize."),0},removeNotificationListener:function(){return R("Unable to remove notification listener because Optimizely client failed to initialize."),!1},clearAllNotificationListeners:function(){R("Unable to clear all notification listeners because Optimizely client failed to initialize.")},clearNotificationListeners:function(){R("Unable to clear notification listeners because Optimizely client failed to initialize.")}}},enumerable:!1,configurable:!0}),e.prototype.sendOdpEvent=function(e,t,r,n){var i;e&&e.trim()?null===(i=this.client)||void 0===i||i.sendOdpEvent(e,t,r,n):x("ODP action is not valid (cannot be empty).")},e.prototype.getVuid=function(){if(this._client)return this._client.getVuid();R("Unable to get VUID because Optimizely client failed to initialize.")},e}();var D,C=i.getLogger(""),U=function(e){function t(t){var r=e.call(this,t)||this;return r.setUserInOptimizely(),r}return p(t,e),t.prototype.setUserInOptimizely=function(){return m(this,void 0,void 0,function(){var e,t,r,n,i,o,a,s,l;return _(this,function(u){switch(u.label){case 0:if(e=this.props,t=e.optimizely,r=e.userId,n=e.userAttributes,i=e.user,!t)return C.error("OptimizelyProvider must be passed an instance of the Optimizely SDK client"),[2];if(o=null,i?"then"in i?i.then(function(e){t.setUser(e)}):o={id:i.id,attributes:i.attributes||{}}:r?(o={id:r,attributes:n||{}},C.warn("Passing userId and userAttributes as props is deprecated, please switch to using `user` prop")):t.user?(a=t.user,s=a.id,l=a.attributes,o={id:s,attributes:n||l||{}}):o={id:T.id,attributes:n||T.attributes},!o)return[3,4];u.label=1;case 1:return u.trys.push([1,3,,4]),[4,t.setUser(o)];case 2:return u.sent(),[3,4];case 3:return u.sent(),C.error("Error while trying to set user."),[3,4];case 4:return[2]}})})},t.prototype.componentDidUpdate=function(e){if(!e.isServerSide){var t=this.props.optimizely;this.props.user&&"id"in this.props.user&&(t.user.id&&v({id:t.user.id,attributes:t.user.attributes||{}},{id:this.props.user.id,attributes:this.props.user.attributes||{}})||t.setUser(this.props.user))}},t.prototype.render=function(){var e=this.props,t=e.optimizely,r=e.children,n=e.timeout,i={optimizely:t,isServerSide:!!this.props.isServerSide,timeout:n};return s.createElement(d,{value:i},r)},t}(s.Component),L=function(e,t,r,n,o){var a="re-evaluating ".concat(t,'="').concat(r,'" for user="').concat(e.user.id,'"'),s=e.notificationCenter.addNotificationListener(i.enums.NOTIFICATION_TYPES.OPTIMIZELY_CONFIG_UPDATE,function(){n.info("".concat(i.enums.NOTIFICATION_TYPES.OPTIMIZELY_CONFIG_UPDATE,", ").concat(a)),o()}),l=e.onUserUpdate(function(){n.info("User update, ".concat(a)),o()});return function(){e.notificationCenter.removeNotificationListener(s),l()}},P=i.getLogger("ReactSDK"),k="The 'optimizely' prop must be supplied via a parent ";function F(e,t){return e.entityKey===t.entityKey&&e.overrideUserId===t.overrideUserId&&b(e.overrideAttributes,t.overrideAttributes)}function V(e,t,r){e.onReady({timeout:t}).then(function(e){var n,i,o,a;if(e.success)return P.info("Client immediately ready"),void r({clientReady:!0,didTimeout:!1});switch(e.reason){case I.NO_CLIENT:P.warn('Client not ready, reason="'.concat(e.message,'"')),r({clientReady:!1,didTimeout:!1}),null===(n=e.dataReadyPromise)||void 0===n||n.then(function(e){if(e){var t=e.success,n=e.message;t?P.info("Client became ready."):P.warn('Client not ready, reason="'.concat(n,'"')),r({clientReady:t,didTimeout:!1})}});break;case I.USER_NOT_READY:P.warn('User was not ready, reason="'.concat(e.message,'"')),r({clientReady:!1,didTimeout:!1}),null===(i=e.dataReadyPromise)||void 0===i||i.then(function(e){if(e){var t=e.success,n=e.message;t?P.info("User became ready later."):P.warn('Client not ready, reason="'.concat(n,'"')),r({clientReady:t,didTimeout:!1})}});break;case I.TIMEOUT:P.info("Client did not become ready before timeout of ".concat(t,' ms, reason="').concat(e.message,'"')),r({clientReady:!1,didTimeout:!0}),null===(o=e.dataReadyPromise)||void 0===o||o.then(function(e){if(e){var t=e.success,n=e.message;t?P.info("Client became ready after timeout already elapsed"):P.warn('Client not ready, reason="'.concat(n,'"')),r({clientReady:t,didTimeout:!0})}});break;default:P.warn('Other reason client not ready, reason="'.concat(e.message,'"')),r({clientReady:!1,didTimeout:!1}),null===(a=e.dataReadyPromise)||void 0===a||a.then(function(e){if(e){var t=e.success,n=e.message;t?P.info("Client became ready later"):P.warn('Client not ready, reason="'.concat(n,'"')),r({clientReady:t,didTimeout:!1})}})}}).catch(function(){P.error("Error initializing client. The core client or user promise(s) rejected.")})}function M(e){var t=n.useRef();return b(e,t.current)||(t.current=e),t.current}!function(e){e.EXPERIMENT="Experiment",e.FEATURE="Feature"}(D||(D={}));var j=function(e,t,r){void 0===t&&(t={}),void 0===r&&(r={});var i=n.useContext(u),o=i.optimizely,a=i.isServerSide,s=i.timeout,l=M(r.overrideAttributes),c=n.useCallback(function(){return{variation:(null==o?void 0:o.activate(e,r.overrideUserId,l))||null}},[o,e,r.overrideUserId,l]),d=a||!!(null==o?void 0:o.isReady()),f=!!(null==o?void 0:o.getIsReadyPromiseFulfilled()),p=n.useState(function(){var e=d?c():{variation:null};return h(h({},e),{clientReady:d,didTimeout:!1})}),m=p[0],_=p[1],g={entityKey:e,overrideUserId:r.overrideUserId,overrideAttributes:l},v=n.useState(g),y=v[0],b=v[1];F(y,g)||(b(g),_(function(e){return h(h({},e),c())}));var E=void 0!==t.timeout?t.timeout:s;return n.useEffect(function(){o&&(o.getIsUsingSdkKey()&&!f||!d)&&V(o,E,function(e){_(h(h({},c()),e))})},[E,c,d,f,o]),n.useEffect(function(){return o&&f&&t.autoUpdate?L(o,D.EXPERIMENT,e,P,function(){_(function(e){return h(h({},e),c())})}):function(){}},[f,t.autoUpdate,o,e,c]),n.useEffect(function(){return null==o?void 0:o.onForcedVariationsUpdate(function(){_(function(e){return h(h({},e),c())})})},[c,o]),o||P.error("Unable to use experiment ".concat(e,". ").concat(k)),[m.variation,m.clientReady,m.didTimeout]},z=function(e,t,r){void 0===t&&(t={}),void 0===r&&(r={});var i=n.useContext(u),o=i.optimizely,a=i.isServerSide,s=i.timeout,l=M(r.overrideAttributes),c=n.useCallback(function(){return{isEnabled:!!(null==o?void 0:o.isFeatureEnabled(e,r.overrideUserId,l)),variables:(null==o?void 0:o.getFeatureVariables(e,r.overrideUserId,l))||{}}},[o,e,r.overrideUserId,l]),d=a||!!(null==o?void 0:o.isReady()),f=!!(null==o?void 0:o.getIsReadyPromiseFulfilled()),p=n.useState(function(){var e=d?c():{isEnabled:!1,variables:{}};return h(h({},e),{clientReady:d,didTimeout:!1})}),m=p[0],_=p[1],g={entityKey:e,overrideUserId:r.overrideUserId,overrideAttributes:r.overrideAttributes},v=n.useState(g),y=v[0],b=v[1];F(y,g)||(b(g),_(function(e){return h(h({},e),c())}));var E=void 0!==t.timeout?t.timeout:s;return n.useEffect(function(){!o||!o.getIsUsingSdkKey()&&d||V(o,E,function(e){_(h(h({},c()),e))})},[E,c,o]),n.useEffect(function(){return o&&f&&t.autoUpdate?L(o,D.FEATURE,e,P,function(){_(function(e){return h(h({},e),c())})}):function(){}},[f,t.autoUpdate,o,e,c]),o||P.error("Unable to properly use feature ".concat(e,". ").concat(k)),[m.isEnabled,m.variables,m.clientReady,m.didTimeout]},B=function(e){var t=e.feature,r=e.timeout,n=e.autoUpdate,i=e.children,o=e.overrideUserId,a=e.overrideAttributes,l=z(t,{timeout:r,autoUpdate:n},{overrideUserId:o,overrideAttributes:a}),u=l[0],c=l[1],d=l[2],f=l[3];return d||f?s.createElement(s.Fragment,null,i(u,c,d,f)):null};var q=function(e){var t=e.experiment,r=e.autoUpdate,n=e.timeout,i=e.overrideUserId,o=e.overrideAttributes,a=e.children,l=j(t,{timeout:n,autoUpdate:r},{overrideUserId:i,overrideAttributes:o}),u=l[0],c=l[1],d=l[2];if(!c&&!d)return null;if(null!=a&&"function"==typeof a)return s.createElement(s.Fragment,null,a(u,c,d));var f=null,p=null;s.Children.forEach(a,function(e){s.isValidElement(e)&&(e.props.variation&&u===e.props.variation&&(p=e),e.props.default&&(f=e))});var h=null;return p?h=p:f&&(h=f),h},G=function(e){var t=e.children;return s.createElement(s.Fragment,null,t)},K=l.getLogger("ReactSDK"),$={dispatchEvent:function(e,t){K.debug("Event not dispatched by disabled event dispatcher: %s",function(){var t;try{t=JSON.stringify(e)}catch(e){t="error stringifying event"}return t}),t({statusCode:204})}};t.wP=u,t.Wv=q,t.WY=U,t.e1=G,t.Q_=function(e){return new A(e)}},875(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return l.default}});var n=f(r(2402)),i=f(r(9784)),o=f(r(2221)),a=f(r(6206)),s=f(r(8236)),l=f(r(2691)),u=f(r(6001)),c=f(r(2682)),d=f(r(5588));function f(e){return e&&e.__esModule?e:{default:e}}},1502(e,t){"use strict";let r;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!r&&(r="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!r))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return r(n)};const n=new Uint8Array(16)},1543(e,t,r){"use strict";t.v=void 0;const n=r(5650),i=r(9578),o=["registration","lead","form_option","prospect","applicant","quote","calculator","download","tax_quiz","assessment quiz"];t.v=({formId:e})=>{const t=[];return{trackConfirmation:({referenceId:t,score:r})=>{if(!t&&!r)throw new Error("Must provide referenceId and/or score");n.default.push({event:"formConfirmation",formId:e,referenceId:t,score:r})},trackError:({field:t,message:r})=>{n.default.push({event:"formError",formId:e,errorField:(0,i.getFieldName)(t),errorMessage:r})},trackInvalidSubmission:()=>{n.default.push({event:"formSubmissionAttempt",formId:e})},trackModule:({type:t,category:r,label:i,value:a,flag:s})=>{if(!t||!r||!i)throw new Error("Must provide type, category, and label");if(!o.includes(t))throw new Error(`Module type must be one of ${o}`);n.default.push({event:"formModule",formId:e,moduleType:t,moduleCategory:r,moduleLabel:i,moduleValue:a,moduleFlag:s})},trackStepSkip:({stepName:t})=>{n.default.push({event:"formStepSkip",formId:e,formStepName:t})},trackStepView:({stepName:t})=>{n.default.push({event:"formStepView",formId:e,formStepName:t})},trackValidSubmission:({emailAddress:t}={})=>{n.default.push({event:"formSubmissionAttempt",formId:e,formEmail:t}),n.default.push({event:"formSubmission",formId:e,formEmail:t})},registerFormElement:r=>{r.addEventListener("focus",({target:o})=>{const a=o;if(0===t.length&&n.default.push({event:"formStart",formId:e}),t.includes(a))return;t.push(a);const s=(0,i.getFieldName)(a);if(!s)return;const l=(0,i.getFieldIndex)(a,r);n.default.push({event:"formInteraction",formId:e,formFieldName:s,formFieldIndex:l})},!0)}}}},2221(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=a(r(7080)),i=a(r(1502)),o=r(2682);function a(e){return e&&e.__esModule?e:{default:e}}var s=function(e,t,r){if(n.default.randomUUID&&!t&&!e)return n.default.randomUUID();const a=(e=e||{}).random||(e.rng||i.default)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=a[e];return t}return(0,o.unsafeStringify)(a)};t.default=s},2402(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,i=(n=r(1502))&&n.__esModule?n:{default:n},o=r(2682);let a,s,l=0,u=0;var c=function(e,t,r){let n=t&&r||0;const c=t||new Array(16);let d=(e=e||{}).node||a,f=void 0!==e.clockseq?e.clockseq:s;if(null==d||null==f){const t=e.random||(e.rng||i.default)();null==d&&(d=a=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==f&&(f=s=16383&(t[6]<<8|t[7]))}let p=void 0!==e.msecs?e.msecs:Date.now(),h=void 0!==e.nsecs?e.nsecs:u+1;const m=p-l+(h-u)/1e4;if(m<0&&void 0===e.clockseq&&(f=f+1&16383),(m<0||p>l)&&void 0===e.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");l=p,u=h,s=f,p+=122192928e5;const _=(1e4*(268435455&p)+h)%4294967296;c[n++]=_>>>24&255,c[n++]=_>>>16&255,c[n++]=_>>>8&255,c[n++]=255&_;const g=p/4294967296*1e4&268435455;c[n++]=g>>>8&255,c[n++]=255&g,c[n++]=g>>>24&15|16,c[n++]=g>>>16&255,c[n++]=f>>>8|128,c[n++]=255&f;for(let e=0;e<6;++e)c[n+e]=d[e];return t||(0,o.unsafeStringify)(c)};t.default=c},2655(e,t,r){const n=r(5986),i=(...e)=>{if(!window.hj)throw new Error("Hotjar is not initialized");window.hj(...e)};e.exports={hotjar:{initialize:function({id:e,sv:t,debug:r,nonce:i}){n({id:e,sv:t,debug:r,nonce:i})},initialized:function(){return"undefined"!=typeof window&&"function"==typeof window?.hj},identify:function(e,t){i("identify",e,t)},event:function(e){i("event",e)},stateChange:function(e){i("stateChange",e)}}}},2682(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=a;var n,i=(n=r(6001))&&n.__esModule?n:{default:n};const o=[];for(let e=0;e<256;++e)o.push((e+256).toString(16).slice(1));function a(e,t=0){return o[e[t+0]]+o[e[t+1]]+o[e[t+2]]+o[e[t+3]]+"-"+o[e[t+4]]+o[e[t+5]]+"-"+o[e[t+6]]+o[e[t+7]]+"-"+o[e[t+8]]+o[e[t+9]]+"-"+o[e[t+10]]+o[e[t+11]]+o[e[t+12]]+o[e[t+13]]+o[e[t+14]]+o[e[t+15]]}var s=function(e,t=0){const r=a(e,t);if(!(0,i.default)(r))throw TypeError("Stringified UUID is invalid");return r};t.default=s},2691(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,i=(n=r(6001))&&n.__esModule?n:{default:n};var o=function(e){if(!(0,i.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)};t.default=o},2799(e,t){"use strict";var r="function"==typeof Symbol&&Symbol.for,n=r?Symbol.for("react.element"):60103,i=r?Symbol.for("react.portal"):60106,o=r?Symbol.for("react.fragment"):60107,a=r?Symbol.for("react.strict_mode"):60108,s=r?Symbol.for("react.profiler"):60114,l=r?Symbol.for("react.provider"):60109,u=r?Symbol.for("react.context"):60110,c=r?Symbol.for("react.async_mode"):60111,d=r?Symbol.for("react.concurrent_mode"):60111,f=r?Symbol.for("react.forward_ref"):60112,p=r?Symbol.for("react.suspense"):60113,h=r?Symbol.for("react.suspense_list"):60120,m=r?Symbol.for("react.memo"):60115,_=r?Symbol.for("react.lazy"):60116,g=r?Symbol.for("react.block"):60121,v=r?Symbol.for("react.fundamental"):60117,y=r?Symbol.for("react.responder"):60118,b=r?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case c:case d:case o:case s:case a:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case _:case m:case l:return e;default:return t}}case i:return t}}}function O(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=l,t.Element=n,t.ForwardRef=f,t.Fragment=o,t.Lazy=_,t.Memo=m,t.Portal=i,t.Profiler=s,t.StrictMode=a,t.Suspense=p,t.isAsyncMode=function(e){return O(e)||E(e)===c},t.isConcurrentMode=O,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===n},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===o},t.isLazy=function(e){return E(e)===_},t.isMemo=function(e){return E(e)===m},t.isPortal=function(e){return E(e)===i},t.isProfiler=function(e){return E(e)===s},t.isStrictMode=function(e){return E(e)===a},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===s||e===a||e===p||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===_||e.$$typeof===m||e.$$typeof===l||e.$$typeof===u||e.$$typeof===f||e.$$typeof===v||e.$$typeof===y||e.$$typeof===b||e.$$typeof===g)},t.typeOf=E},2981(e){function t(e,t){var r=e.length,n=new Array(r),i={},o=r,a=function(e){for(var t=new Map,r=0,n=e.length;r>>9<<4)+1}function n(e,t){const r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function i(e,t,r,i,o,a){return n((s=n(n(t,e),n(i,a)))<<(l=o)|s>>>32-l,r);var s,l}function o(e,t,r,n,o,a,s){return i(t&r|~t&n,e,t,o,a,s)}function a(e,t,r,n,o,a,s){return i(t&n|r&~n,e,t,o,a,s)}function s(e,t,r,n,o,a,s){return i(t^r^n,e,t,o,a,s)}function l(e,t,r,n,o,a,s){return i(r^(t|~n),e,t,o,a,s)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var u=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let r=0;r>5]>>>i%32&255,o=parseInt(n.charAt(r>>>4&15)+n.charAt(15&r),16);t.push(o)}return t}(function(e,t){e[t>>5]|=128<>5]|=(255&e[r/8])<=this._maxSize&&this.clear(),e in this._values||this._size++,this._values[e]=t};var r=/[^.^\]^[]+|(?=\[\]|\.\.)/g,n=/^\d+$/,i=/^\d/,o=/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g,a=/^\s*(['"]?)(.*?)(\1)\s*$/,s=new t(512),l=new t(512),u=new t(512);function c(e){return s.get(e)||s.set(e,d(e).map(function(e){return e.replace(a,"$2")}))}function d(e){return e.match(r)||[""]}function f(e){return"string"==typeof e&&e&&-1!==["'",'"'].indexOf(e.charAt(0))}function p(e){return!f(e)&&(function(e){return e.match(i)&&!e.match(n)}(e)||function(e){return o.test(e)}(e))}e.exports={Cache:t,split:d,normalizePath:c,setter:function(e){var t=c(e);return l.get(e)||l.set(e,function(e,r){for(var n=0,i=t.length,o=e;nJ,Component:()=>s.uA,Fragment:()=>s.FK,PureComponent:()=>K,StrictMode:()=>Ve,Suspense:()=>re,SuspenseList:()=>oe,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:()=>Se,cloneElement:()=>Ue,createContext:()=>s.q6,createElement:()=>s.n,createFactory:()=>Te,createPortal:()=>ue,createRef:()=>s._3,default:()=>je,findDOMNode:()=>Pe,flushSync:()=>Fe,forwardRef:()=>Y,hydrate:()=>ge,isElement:()=>Me,isFragment:()=>De,isMemo:()=>Ce,isValidElement:()=>Ae,lazy:()=>ie,memo:()=>$,render:()=>_e,startTransition:()=>z,unmountComponentAtNode:()=>Le,unstable_batchedUpdates:()=>ke,useCallback:()=>N,useContext:()=>R,useDebugValue:()=>S,useDeferredValue:()=>B,useEffect:()=>b,useErrorBoundary:()=>x,useId:()=>T,useImperativeHandle:()=>I,useInsertionEffect:()=>G,useLayoutEffect:()=>E,useMemo:()=>w,useReducer:()=>y,useRef:()=>O,useState:()=>v,useSyncExternalStore:()=>M,useTransition:()=>q,version:()=>xe});var n,i,o,a,s=r(172),l=0,u=[],c=s.fF,d=c.__b,f=c.__r,p=c.diffed,h=c.__c,m=c.unmount,_=c.__;function g(e,t){c.__h&&c.__h(i,e,l||t),l=0;var r=i.__H||(i.__H={__:[],__h:[]});return e>=r.__.length&&r.__.push({}),r.__[e]}function v(e){return l=1,y(k,e)}function y(e,t,r){var o=g(n++,2);if(o.t=e,!o.__c&&(o.__=[r?r(t):k(void 0,t),function(e){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,e);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=i,!i.__f)){var a=function(e,t,r){if(!o.__c.__H)return!0;var n=o.__c.__H.__.filter(function(e){return!!e.__c});if(n.every(function(e){return!e.__N}))return!s||s.call(this,e,t,r);var i=o.__c.props!==e;return n.forEach(function(e){if(e.__N){var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(i=!0)}}),s&&s.call(this,e,t,r)||i};i.__f=!0;var s=i.shouldComponentUpdate,l=i.componentWillUpdate;i.componentWillUpdate=function(e,t,r){if(this.__e){var n=s;s=void 0,a(e,t,r),s=n}l&&l.call(this,e,t,r)},i.shouldComponentUpdate=a}return o.__N||o.__}function b(e,t){var r=g(n++,3);!c.__s&&P(r.__H,t)&&(r.__=e,r.u=t,i.__H.__h.push(r))}function E(e,t){var r=g(n++,4);!c.__s&&P(r.__H,t)&&(r.__=e,r.u=t,i.__h.push(r))}function O(e){return l=5,w(function(){return{current:e}},[])}function I(e,t,r){l=6,E(function(){if("function"==typeof e){var r=e(t());return function(){e(null),r&&"function"==typeof r&&r()}}if(e)return e.current=t(),function(){return e.current=null}},null==r?r:r.concat(e))}function w(e,t){var r=g(n++,7);return P(r.__H,t)&&(r.__=e(),r.__H=t,r.__h=e),r.__}function N(e,t){return l=8,w(function(){return e},t)}function R(e){var t=i.context[e.__c],r=g(n++,9);return r.c=e,t?(null==r.__&&(r.__=!0,t.sub(i)),t.props.value):e.__}function S(e,t){c.useDebugValue&&c.useDebugValue(t?t(e):e)}function x(e){var t=g(n++,10),r=v();return t.__=e,i.componentDidCatch||(i.componentDidCatch=function(e,n){t.__&&t.__(e,n),r[1](e)}),[r[0],function(){r[1](void 0)}]}function T(){var e=g(n++,11);if(!e.__){for(var t=i.__v;null!==t&&!t.__m&&null!==t.__;)t=t.__;var r=t.__m||(t.__m=[0,0]);e.__="P"+r[0]+"-"+r[1]++}return e.__}function A(){for(var e;e=u.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(U),e.__H.__h.forEach(L),e.__H.__h=[]}catch(t){e.__H.__h=[],c.__e(t,e.__v)}}c.__b=function(e){i=null,d&&d(e)},c.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),_&&_(e,t)},c.__r=function(e){f&&f(e),n=0;var t=(i=e.__c).__H;t&&(o===i?(t.__h=[],i.__h=[],t.__.forEach(function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0})):(t.__h.forEach(U),t.__h.forEach(L),t.__h=[],n=0)),o=i},c.diffed=function(e){p&&p(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(1!==u.push(t)&&a===c.requestAnimationFrame||((a=c.requestAnimationFrame)||C)(A)),t.__H.__.forEach(function(e){e.u&&(e.__H=e.u),e.u=void 0})),o=i=null},c.__c=function(e,t){t.some(function(e){try{e.__h.forEach(U),e.__h=e.__h.filter(function(e){return!e.__||L(e)})}catch(r){t.some(function(e){e.__h&&(e.__h=[])}),t=[],c.__e(r,e.__v)}}),h&&h(e,t)},c.unmount=function(e){m&&m(e);var t,r=e.__c;r&&r.__H&&(r.__H.__.forEach(function(e){try{U(e)}catch(e){t=e}}),r.__H=void 0,t&&c.__e(t,r.__v))};var D="function"==typeof requestAnimationFrame;function C(e){var t,r=function(){clearTimeout(n),D&&cancelAnimationFrame(t),setTimeout(e)},n=setTimeout(r,35);D&&(t=requestAnimationFrame(r))}function U(e){var t=i,r=e.__c;"function"==typeof r&&(e.__c=void 0,r()),i=t}function L(e){var t=i;e.__c=e.__(),i=t}function P(e,t){return!e||e.length!==t.length||t.some(function(t,r){return t!==e[r]})}function k(e,t){return"function"==typeof t?t(e):t}function F(e,t){for(var r in t)e[r]=t[r];return e}function V(e,t){for(var r in e)if("__source"!==r&&!(r in t))return!0;for(var n in t)if("__source"!==n&&e[n]!==t[n])return!0;return!1}function M(e,t){var r=t(),n=v({t:{__:r,u:t}}),i=n[0].t,o=n[1];return E(function(){i.__=r,i.u=t,j(i)&&o({t:i})},[e,r,t]),b(function(){return j(i)&&o({t:i}),e(function(){j(i)&&o({t:i})})},[e]),r}function j(e){var t,r,n=e.u,i=e.__;try{var o=n();return!((t=i)===(r=o)&&(0!==t||1/t==1/r)||t!=t&&r!=r)}catch(e){return!0}}function z(e){e()}function B(e){return e}function q(){return[!1,z]}var G=E;function K(e,t){this.props=e,this.context=t}function $(e,t){function r(e){var r=this.props.ref,n=r==e.ref;return!n&&r&&(r.call?r(null):r.current=null),t?!t(this.props,e)||!n:V(this.props,e)}function n(t){return this.shouldComponentUpdate=r,(0,s.n)(e,t)}return n.displayName="Memo("+(e.displayName||e.name)+")",n.prototype.isReactComponent=!0,n.__f=!0,n.type=e,n}(K.prototype=new s.uA).isPureReactComponent=!0,K.prototype.shouldComponentUpdate=function(e,t){return V(this.props,e)||V(this.state,t)};var H=s.fF.__b;s.fF.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),H&&H(e)};var W="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function Y(e){function t(t){var r=F({},t);return delete r.ref,e(r,t.ref||null)}return t.$$typeof=W,t.render=e,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t}var X=function(e,t){return null==e?null:(0,s.v2)((0,s.v2)(e).map(t))},J={map:X,forEach:X,count:function(e){return e?(0,s.v2)(e).length:0},only:function(e){var t=(0,s.v2)(e);if(1!==t.length)throw"Children.only";return t[0]},toArray:s.v2},Z=s.fF.__e;s.fF.__e=function(e,t,r,n){if(e.then)for(var i,o=t;o=o.__;)if((i=o.__c)&&i.__c)return null==t.__e&&(t.__e=r.__e,t.__k=r.__k),i.__c(e,t);Z(e,t,r,n)};var Q=s.fF.unmount;function ee(e,t,r){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach(function(e){"function"==typeof e.__c&&e.__c()}),e.__c.__H=null),null!=(e=F({},e)).__c&&(e.__c.__P===r&&(e.__c.__P=t),e.__c.__e=!0,e.__c=null),e.__k=e.__k&&e.__k.map(function(e){return ee(e,t,r)})),e}function te(e,t,r){return e&&r&&(e.__v=null,e.__k=e.__k&&e.__k.map(function(e){return te(e,t,r)}),e.__c&&e.__c.__P===t&&(e.__e&&r.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=r)),e}function re(){this.__u=0,this.o=null,this.__b=null}function ne(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function ie(e){var t,r,n,i=null;function o(o){if(t||(t=e()).then(function(e){e&&(i=e.default||e),n=!0},function(e){r=e,n=!0}),r)throw r;if(!n)throw t;return i?(0,s.n)(i,o):null}return o.displayName="Lazy",o.__f=!0,o}function oe(){this.i=null,this.l=null}s.fF.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),Q&&Q(e)},(re.prototype=new s.uA).__c=function(e,t){var r=t.__c,n=this;null==n.o&&(n.o=[]),n.o.push(r);var i=ne(n.__v),o=!1,a=function(){o||(o=!0,r.__R=null,i?i(s):s())};r.__R=a;var s=function(){if(! --n.__u){if(n.state.__a){var e=n.state.__a;n.__v.__k[0]=te(e,e.__c.__P,e.__c.__O)}var t;for(n.setState({__a:n.__b=null});t=n.o.pop();)t.forceUpdate()}};n.__u++||32&t.__u||n.setState({__a:n.__b=n.__v.__k[0]}),e.then(a,a)},re.prototype.componentWillUnmount=function(){this.o=[]},re.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),n=this.__v.__k[0].__c;this.__v.__k[0]=ee(this.__b,r,n.__O=n.__P)}this.__b=null}var i=t.__a&&(0,s.n)(s.FK,null,e.fallback);return i&&(i.__u&=-33),[(0,s.n)(s.FK,null,t.__a?null:e.children),i]};var ae=function(e,t,r){if(++r[1]===r[0]&&e.l.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.l.size))for(r=e.i;r;){for(;r.length>3;)r.pop()();if(r[1]>>1,1),t.h.removeChild(e)}}}(0,s.XX)((0,s.n)(se,{context:t.context},e.__v),t.v)}function ue(e,t){var r=(0,s.n)(le,{__v:e,h:t});return r.containerInfo=t,r}(oe.prototype=new s.uA).__a=function(e){var t=this,r=ne(t.__v),n=t.l.get(e);return n[0]++,function(i){var o=function(){t.props.revealOrder?(n.push(i),ae(t,e,n)):i()};r?r(o):o()}},oe.prototype.render=function(e){this.i=null,this.l=new Map;var t=(0,s.v2)(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var r=t.length;r--;)this.l.set(t[r],this.i=[1,0,this.i]);return e.children},oe.prototype.componentDidUpdate=oe.prototype.componentDidMount=function(){var e=this;this.l.forEach(function(t,r){ae(e,r,t)})};var ce="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,de=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,fe=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,pe=/[A-Z0-9]/g,he="undefined"!=typeof document,me=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(e)};function _e(e,t,r){return null==t.__k&&(t.textContent=""),(0,s.XX)(e,t),"function"==typeof r&&r(),e?e.__c:null}function ge(e,t,r){return(0,s.Qv)(e,t),"function"==typeof r&&r(),e?e.__c:null}s.uA.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(s.uA.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var ve=s.fF.event;function ye(){}function be(){return this.cancelBubble}function Ee(){return this.defaultPrevented}s.fF.event=function(e){return ve&&(e=ve(e)),e.persist=ye,e.isPropagationStopped=be,e.isDefaultPrevented=Ee,e.nativeEvent=e};var Oe,Ie={enumerable:!1,configurable:!0,get:function(){return this.class}},we=s.fF.vnode;s.fF.vnode=function(e){"string"==typeof e.type&&function(e){var t=e.props,r=e.type,n={},i=-1===r.indexOf("-");for(var o in t){var a=t[o];if(!("value"===o&&"defaultValue"in t&&null==a||he&&"children"===o&&"noscript"===r||"class"===o||"className"===o)){var l=o.toLowerCase();"defaultValue"===o&&"value"in t&&null==t.value?o="value":"download"===o&&!0===a?a="":"translate"===l&&"no"===a?a=!1:"o"===l[0]&&"n"===l[1]?"ondoubleclick"===l?o="ondblclick":"onchange"!==l||"input"!==r&&"textarea"!==r||me(t.type)?"onfocus"===l?o="onfocusin":"onblur"===l?o="onfocusout":fe.test(o)&&(o=l):l=o="oninput":i&&de.test(o)?o=o.replace(pe,"-$&").toLowerCase():null===a&&(a=void 0),"oninput"===l&&n[o=l]&&(o="oninputCapture"),n[o]=a}}"select"==r&&n.multiple&&Array.isArray(n.value)&&(n.value=(0,s.v2)(t.children).forEach(function(e){e.props.selected=-1!=n.value.indexOf(e.props.value)})),"select"==r&&null!=n.defaultValue&&(n.value=(0,s.v2)(t.children).forEach(function(e){e.props.selected=n.multiple?-1!=n.defaultValue.indexOf(e.props.value):n.defaultValue==e.props.value})),t.class&&!t.className?(n.class=t.class,Object.defineProperty(n,"className",Ie)):(t.className&&!t.class||t.class&&t.className)&&(n.class=n.className=t.className),e.props=n}(e),e.$$typeof=ce,we&&we(e)};var Ne=s.fF.__r;s.fF.__r=function(e){Ne&&Ne(e),Oe=e.__c};var Re=s.fF.diffed;s.fF.diffed=function(e){Re&&Re(e);var t=e.props,r=e.__e;null!=r&&"textarea"===e.type&&"value"in t&&t.value!==r.value&&(r.value=null==t.value?"":t.value),Oe=null};var Se={ReactCurrentDispatcher:{current:{readContext:function(e){return Oe.__n[e.__c].props.value},useCallback:N,useContext:R,useDebugValue:S,useDeferredValue:B,useEffect:b,useId:T,useImperativeHandle:I,useInsertionEffect:G,useLayoutEffect:E,useMemo:w,useReducer:y,useRef:O,useState:v,useSyncExternalStore:M,useTransition:q}}},xe="18.3.1";function Te(e){return s.n.bind(null,e)}function Ae(e){return!!e&&e.$$typeof===ce}function De(e){return Ae(e)&&e.type===s.FK}function Ce(e){return!!e&&!!e.displayName&&("string"==typeof e.displayName||e.displayName instanceof String)&&e.displayName.startsWith("Memo(")}function Ue(e){return Ae(e)?s.Ob.apply(null,arguments):e}function Le(e){return!!e.__k&&((0,s.XX)(null,e),!0)}function Pe(e){return e&&(e.base||1===e.nodeType&&e)||null}var ke=function(e,t){return e(t)},Fe=function(e,t){return e(t)},Ve=s.FK,Me=Ae,je={useState:v,useId:T,useReducer:y,useEffect:b,useLayoutEffect:E,useInsertionEffect:G,useTransition:q,useDeferredValue:B,useSyncExternalStore:M,startTransition:z,useRef:O,useImperativeHandle:I,useMemo:w,useCallback:N,useContext:R,useDebugValue:S,version:"18.3.1",Children:J,render:_e,hydrate:ge,unmountComponentAtNode:Le,createPortal:ue,createElement:s.n,createContext:s.q6,createFactory:Te,cloneElement:Ue,createRef:s._3,Fragment:s.FK,isValidElement:Ae,isElement:Me,isFragment:De,isMemo:Ce,findDOMNode:Pe,Component:s.uA,PureComponent:K,memo:$,forwardRef:Y,flushSync:Fe,unstable_batchedUpdates:ke,StrictMode:Ve,Suspense:re,SuspenseList:oe,lazy:ie,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Se}},5406(e,t){"use strict";function r(e,t,r,n){switch(e){case 0:return t&r^~t&n;case 1:case 3:return t^r^n;case 2:return t&r^t&n^r&n}}function n(e,t){return e<>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=function(e){const t=[1518500249,1859775393,2400959708,3395469782],i=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let r=0;r>>0;d=c,c=u,u=n(l,30)>>>0,l=a,a=s}i[0]=i[0]+a>>>0,i[1]=i[1]+l>>>0,i[2]=i[2]+u>>>0,i[3]=i[3]+c>>>0,i[4]=i[4]+d>>>0}return[i[0]>>24&255,i[0]>>16&255,i[0]>>8&255,255&i[0],i[1]>>24&255,i[1]>>16&255,i[1]>>8&255,255&i[1],i[2]>>24&255,i[2]>>16&255,i[2]>>8&255,255&i[2],i[3]>>24&255,i[3]>>16&255,i[3]>>8&255,255&i[3],i[4]>>24&255,i[4]>>16&255,i[4]>>8&255,255&i[4]]};t.default=i},5543(e,t){var r;r=function(){return function(){var e=r;e.Integer={type:"integer"};var t={String,Boolean,Number,Object,Array,Date};function r(e,t){return r(e,t,{changing:!1})}e.validate=r,e.checkPropertyChange=function(e,t,n){return r(e,t,{changing:n||"property"})};var r=e._validate=function(e,r,n){n||(n={});var i=n.changing;function o(e){return e.type||t[e.name]==e&&e.name.toLowerCase()}var a=[];function s(e,t,r,u){var c;function d(e){a.push({property:r,message:e})}if(r+=r?"number"==typeof u?"["+u+"]":void 0===u?"":"."+u:u,("object"!=typeof t||t instanceof Array)&&(r||"function"!=typeof t)&&(!t||!o(t)))return"function"==typeof t?e instanceof t||d("is not an instance of the class/constructor "+t.name):t&&d("Invalid schema/property definition "+t),null;function f(e,t){if(e){if(!("string"!=typeof e||"any"==e||("null"==e?null===t:typeof t==e)||t instanceof Array&&"array"==e||t instanceof Date&&"date"==e||"integer"==e&&t%1==0))return[{property:r,message:t+" - "+typeof t+" value found, but a "+e+" is required"}];if(e instanceof Array){for(var n=[],i=0;it.maxItems&&d("There must be a maximum of "+t.maxItems+" in the array")}else(t.properties||t.additionalProperties)&&a.concat(l(e,t.properties,r,t.additionalProperties));if(t.pattern&&"string"==typeof e&&!e.match(t.pattern)&&d("does not match the regex pattern "+t.pattern),t.maxLength&&"string"==typeof e&&e.length>t.maxLength&&d("may only be "+t.maxLength+" characters long"),t.minLength&&"string"==typeof e&&e.lengthe&&d("must have a minimum value of "+t.minimum),void 0!==t.maximum&&typeof e==typeof t.maximum&&t.maximum>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=255&t,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=255&t,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=255&t,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=255&t,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=255&t,r};t.default=o},5606(e){var t,r,n=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function a(e){if(t===setTimeout)return setTimeout(e,0);if((t===i||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:i}catch(e){t=i}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(e){r=o}}();var s,l=[],u=!1,c=-1;function d(){u&&s&&(u=!1,s.length?l=s.concat(l):c=-1,l.length&&f())}function f(){if(!u){var e=a(d);u=!0;for(var t=l.length;t;){for(s=l,l=[];++c1)for(var r=1;r{window.gtmDataLayer=window.gtmDataLayer||[],window.gtmDataLayer.push(e)}}},5714(e){const t=/[A-Z\xc0-\xd6\xd8-\xde]?[a-z\xdf-\xf6\xf8-\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]|[A-Z\xc0-\xd6\xd8-\xde]|$)|(?:[A-Z\xc0-\xd6\xd8-\xde]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]|[A-Z\xc0-\xd6\xd8-\xde](?:[a-z\xdf-\xf6\xf8-\xff]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])|$)|[A-Z\xc0-\xd6\xd8-\xde]?(?:[a-z\xdf-\xf6\xf8-\xff]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\xc0-\xd6\xd8-\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\d*(?:1ST|2ND|3RD|(?![123])\dTH)(?=\b|[a-z_])|\d*(?:1st|2nd|3rd|(?![123])\dth)(?=\b|[A-Z_])|\d+|(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?)*/g,r=e=>e.match(t)||[],n=e=>e[0].toUpperCase()+e.slice(1),i=(e,t)=>r(e).join(t).toLowerCase(),o=e=>r(e).reduce((e,t)=>`${e}${e?t[0].toUpperCase()+t.slice(1).toLowerCase():t.toLowerCase()}`,"");e.exports={words:r,upperFirst:n,camelCase:o,pascalCase:e=>n(o(e)),snakeCase:e=>i(e,"_"),kebabCase:e=>i(e,"-"),sentenceCase:e=>n(i(e," ")),titleCase:e=>r(e).map(n).join(" ")}},5986(e){e.exports=function({id:e,sv:t,debug:r=!1,nonce:n=null}){!function(i,o,a,s,l,u){i.hj=i.hj||function(){(i.hj.q=i.hj.q||[]).push(arguments)},i._hjSettings={hjid:e,hjsv:t,hjDebug:r},i._scriptPath="https://static.hotjar.com/c/hotjar-"+i._hjSettings.hjid+".js?sv="+i._hjSettings.hjsv,document.querySelector('script[src*="'+i._scriptPath+'"]')||(l=o.getElementsByTagName("head")[0],u=o.createElement("script"),n&&u.setAttribute("nonce",n),u.async=1,u.src=i._scriptPath,l.appendChild(u))}(window,document)}},6001(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,i=(n=r(4164))&&n.__esModule?n:{default:n};var o=function(e){return"string"==typeof e&&i.default.test(e)};t.default=o},6206(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=o(r(7685)),i=o(r(5406));function o(e){return e&&e.__esModule?e:{default:e}}var a=(0,n.default)("v5",80,i.default);t.default=a},6942(e,t){var r;!function(){"use strict";var n={}.hasOwnProperty;function i(){for(var e="",t=0;t0?2===s.length?typeof s[1]==a?this[s[0]]=s[1].call(this,c):this[s[0]]=s[1]:3===s.length?typeof s[1]!==a||s[1].exec&&s[1].test?this[s[0]]=c?c.replace(s[1],s[2]):o:this[s[0]]=c?s[1].call(this,c,s[2]):o:4===s.length&&(this[s[0]]=c?s[3].call(this,c.replace(s[1],s[2])):o):this[s]=c||o;d+=2}},ee=function(e,t){for(var r in t)if(typeof t[r]===l&&t[r].length>0){for(var n=0;n2&&(e[d]="iPad",e[p]=y),e},this.getEngine=function(){var e={};return e[f]=o,e[m]=o,Q.call(e,n,b.engine),e},this.getOS=function(){var e={};return e[f]=o,e[m]=o,Q.call(e,n,b.os),E&&!e[f]&&g&&g.platform&&"Unknown"!=g.platform&&(e[f]=g.platform.replace(/chrome os/i,$).replace(/macos/i,H)),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return n},this.setUA=function(e){return n=typeof e===u&&e.length>500?Z(e,500):e,this},this.setUA(n),this};ne.VERSION="1.0.41",ne.BROWSER=Y([f,m,c]),ne.CPU=Y([_]),ne.DEVICE=Y([d,h,p,g,v,b,y,E,O]),ne.ENGINE=ne.OS=Y([f,m]),typeof t!==s?(e.exports&&(t=e.exports=ne),t.UAParser=ne):r.amdO?(n=function(){return ne}.call(t,r,t,e))===o||(e.exports=n):typeof i!==s&&(i.UAParser=ne);var ie=typeof i!==s&&(i.jQuery||i.Zepto);if(ie&&!ie.ua){var oe=new ne;ie.ua=oe.getResult(),ie.ua.get=function(){return oe.getUA()},ie.ua.set=function(e){oe.setUA(e);var t=oe.getResult();for(var r in t)ie.ua[r]=t[r]}}}("object"==typeof window?window:this)},7654(e,t,r){var n="__lodash_hash_undefined__",i="[object Function]",o="[object GeneratorFunction]",a=/^\[object .+?Constructor\]$/,s="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,l="object"==typeof self&&self&&self.Object===Object&&self,u=s||l||Function("return this")();var c,d=Array.prototype,f=Function.prototype,p=Object.prototype,h=u["__core-js_shared__"],m=(c=/[^.]+$/.exec(h&&h.keys&&h.keys.IE_PROTO||""))?"Symbol(src)_1."+c:"",_=f.toString,g=p.hasOwnProperty,v=p.toString,y=RegExp("^"+_.call(g).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),b=d.splice,E=T(u,"Map"),O=T(Object,"create");function I(e){var t=-1,r=e?e.length:0;for(this.clear();++t-1},w.prototype.set=function(e,t){var r=this.__data__,n=R(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},N.prototype.clear=function(){this.__data__={hash:new I,map:new(E||w),string:new I}},N.prototype.delete=function(e){return x(this,e).delete(e)},N.prototype.get=function(e){return x(this,e).get(e)},N.prototype.has=function(e){return x(this,e).has(e)},N.prototype.set=function(e,t){return x(this,e).set(e,t),this},A.Cache=N,e.exports=A},7685(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,r){function n(e,n,a,s){var l;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let r=0;r(new TextEncoder).encode(e);function r(e,r){let n,i,o,a,s,l,u,c;for("string"==typeof e&&(e=t(e)),n=3&e.length,i=e.length-n,o=r,s=3432918353,l=461845907,c=0;c>>16)*s&65535)<<16)&4294967295,u=u<<15|u>>>17,u=(65535&u)*l+(((u>>>16)*l&65535)<<16)&4294967295,o^=u,o=o<<13|o>>>19,a=5*(65535&o)+((5*(o>>>16)&65535)<<16)&4294967295,o=27492+(65535&a)+(((a>>>16)+58964&65535)<<16);switch(u=0,n){case 3:u^=(255&e[c+2])<<16;case 2:u^=(255&e[c+1])<<8;case 1:u^=255&e[c],u=(65535&u)*s+(((u>>>16)*s&65535)<<16)&4294967295,u=u<<15|u>>>17,u=(65535&u)*l+(((u>>>16)*l&65535)<<16)&4294967295,o^=u}return o^=e.length,o^=o>>>16,o=2246822507*(65535&o)+((2246822507*(o>>>16)&65535)<<16)&4294967295,o^=o>>>13,o=3266489909*(65535&o)+((3266489909*(o>>>16)&65535)<<16)&4294967295,o^=o>>>16,o>>>0}const n=r;n.v2=function(e,r){"string"==typeof e&&(e=t(e));let n,i=e.length,o=r^i,a=0;for(;i>=4;)n=255&e[a]|(255&e[++a])<<8|(255&e[++a])<<16|(255&e[++a])<<24,n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16),n^=n>>>24,n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16),o=1540483477*(65535&o)+((1540483477*(o>>>16)&65535)<<16)^n,i-=4,++a;switch(i){case 3:o^=(255&e[a+2])<<16;case 2:o^=(255&e[a+1])<<8;case 1:o^=255&e[a],o=1540483477*(65535&o)+((1540483477*(o>>>16)&65535)<<16)}return o^=o>>>13,o=1540483477*(65535&o)+((1540483477*(o>>>16)&65535)<<16),o^=o>>>15,o>>>0},n.v3=r,e.exports=n}()},8236(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default="00000000-0000-0000-0000-000000000000"},8628(e,t,r){"use strict";t.A=void 0;var n,i=(n=r(519))&&n.__esModule?n:{default:n};class o{static initialize(e){return new o(e)}async send(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("dev"===this.environment&&(!e||"string"!=typeof e))throw new Error("Cannot send log without event name");const r=this._prepareRecord(e,t);return"dev"===this.environment?(console.log("🗣 Loggly Message: ",r),null):this._sendToLogService(r)}constructor(e){this._enforceConfig(e),this.appId=e.appId,this.environment=i.default.get(),this.logServiceUrl=`https://apophenia.${i.default.prefix()}ramseysolutions.net/v1`,this.logApiKey=e.apiKey}_prepareRecord(e,t){return t.action=e,t.app_id=this.appId,t.time=(new Date).toISOString(),t}_enforceConfig(e){if(!e.appId||!e.apiKey){throw new Error("Logs cannot be initialized without the following settings: `appId` and `apiKey`.")}}_sendToLogService(e){return fetch(this.logServiceUrl,{method:"POST",keepalive:!0,priority:"low",headers:{"Content-Type":"application/json","x-api-key":this.logApiKey},body:JSON.stringify({records:[e]})})}}var a=o;t.A=a},9578(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getFieldName=t.getFieldIndex=void 0;const r={fullName:/full[-_]?name|^name/i,firstName:/first[_-]?name/i,lastName:/last[_-]?name/i,email:/email/i,phone:/phone|^tel$/i,address:/address|street/i,zipcode:/post(al)?[_-]?code|zip/i,city:/city/i,state:/(^|[^e])state/i,radio:/radio/i,checkbox:/checkbox/i,select:/select/i,textarea:/textarea/i,text:/text/i,input:/input/i};t.getFieldIndex=(e,t)=>{if(!t)return 0;return Array.from(t.querySelectorAll("INPUT,SELECT,TEXTAREA")).indexOf(e)+1};t.getFieldName=e=>Object.keys(r).find(t=>r[t].test(e.name)||r[t].test(e.type)||r[t].test(e.nodeName))},9624(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(875),o=r(5543),a=(n=r(8005))&&"object"==typeof n&&"default"in n?n.default:n,s=r(7232),l=function(e,t){return(l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}l(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var c=function(){return(c=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&i[i.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]=this.logLevel},e.prototype.getLogLevelName=function(e){switch(e){case t.LogLevel.DEBUG:return"DEBUG";case t.LogLevel.INFO:return"INFO ";case t.LogLevel.WARNING:return"WARN ";case t.LogLevel.ERROR:return"ERROR";default:return"NOTSET"}},e.prototype.consoleLog=function(e,r){switch(e){case t.LogLevel.DEBUG:console.log.apply(console,r);break;case t.LogLevel.INFO:console.info.apply(console,r);break;case t.LogLevel.WARNING:console.warn.apply(console,r);break;case t.LogLevel.ERROR:console.error.apply(console,r);break;default:console.log.apply(console,r)}},e}(),L=t.LogLevel.NOTSET,P=null,k=function(){function e(e){void 0===e&&(e={}),this.messagePrefix="",e.messagePrefix&&(this.messagePrefix=e.messagePrefix)}return e.prototype.log=function(e,t){for(var r=[],n=2;n=this.maxQueueSize&&this.flush()}else K.warn("Queue is stopped, not accepting event")},e.prototype.flush=function(){this.sink(this.buffer),this.buffer=[],this.timer.stop()},e}(),Y={NOTSET:0,DEBUG:1,INFO:2,WARNING:3,ERROR:4},X={BROWSER_ODP_MANAGER_INITIALIZATION_FAILED:"%s: Error initializing Browser ODP Manager.",CONDITION_EVALUATOR_ERROR:"%s: Error evaluating audience condition of type %s: %s",DATAFILE_AND_SDK_KEY_MISSING:"%s: You must provide at least one of sdkKey or datafile. Cannot start Optimizely",EXPERIMENT_KEY_NOT_IN_DATAFILE:"%s: Experiment key %s is not in datafile.",FEATURE_NOT_IN_DATAFILE:"%s: Feature key %s is not in datafile.",FETCH_SEGMENTS_FAILED_NETWORK_ERROR:"%s: Audience segments fetch failed. (network error)",FETCH_SEGMENTS_FAILED_DECODE_ERROR:"%s: Audience segments fetch failed. (decode error)",IMPROPERLY_FORMATTED_EXPERIMENT:"%s: Experiment key %s is improperly formatted.",INVALID_ATTRIBUTES:"%s: Provided attributes are in an invalid format.",INVALID_BUCKETING_ID:"%s: Unable to generate hash for bucketing ID %s: %s",INVALID_DATAFILE:"%s: Datafile is invalid - property %s: %s",INVALID_DATAFILE_MALFORMED:"%s: Datafile is invalid because it is malformed.",INVALID_CONFIG:"%s: Provided Optimizely config is in an invalid format.",INVALID_JSON:"%s: JSON object is not valid.",INVALID_ERROR_HANDLER:'%s: Provided "errorHandler" is in an invalid format.',INVALID_EVENT_DISPATCHER:'%s: Provided "eventDispatcher" is in an invalid format.',INVALID_EVENT_TAGS:"%s: Provided event tags are in an invalid format.",INVALID_EXPERIMENT_KEY:"%s: Experiment key %s is not in datafile. It is either invalid, paused, or archived.",INVALID_EXPERIMENT_ID:"%s: Experiment ID %s is not in datafile.",INVALID_GROUP_ID:"%s: Group ID %s is not in datafile.",INVALID_LOGGER:'%s: Provided "logger" is in an invalid format.',INVALID_ROLLOUT_ID:"%s: Invalid rollout ID %s attached to feature %s",INVALID_USER_ID:"%s: Provided user ID is in an invalid format.",INVALID_USER_PROFILE_SERVICE:"%s: Provided user profile service instance is in an invalid format: %s.",LOCAL_STORAGE_DOES_NOT_EXIST:"Error accessing window localStorage.",MISSING_INTEGRATION_KEY:"%s: Integration key missing from datafile. All integrations should include a key.",NO_DATAFILE_SPECIFIED:"%s: No datafile specified. Cannot start optimizely.",NO_JSON_PROVIDED:"%s: No JSON object to validate against schema.",NO_VARIATION_FOR_EXPERIMENT_KEY:"%s: No variation key %s defined in datafile for experiment %s.",ODP_CONFIG_NOT_AVAILABLE:"%s: ODP is not integrated to the project.",ODP_EVENT_FAILED:"ODP event send failed.",ODP_FETCH_QUALIFIED_SEGMENTS_SEGMENTS_MANAGER_MISSING:"%s: ODP unable to fetch qualified segments (Segments Manager not initialized).",ODP_IDENTIFY_FAILED_EVENT_MANAGER_MISSING:"%s: ODP identify event %s is not dispatched (Event Manager not instantiated).",ODP_INITIALIZATION_FAILED:"%s: ODP failed to initialize.",ODP_INVALID_DATA:"%s: ODP data is not valid",ODP_EVENT_FAILED_ODP_MANAGER_MISSING:"%s: ODP Event failed to send. (ODP Manager not initialized).",ODP_FETCH_QUALIFIED_SEGMENTS_FAILED_ODP_MANAGER_MISSING:"%s: ODP failed to Fetch Qualified Segments. (ODP Manager not initialized).",ODP_IDENTIFY_USER_FAILED_ODP_MANAGER_MISSING:"%s: ODP failed to Identify User. (ODP Manager not initialized).",ODP_IDENTIFY_USER_FAILED_USER_CONTEXT_INITIALIZATION:"%s: ODP failed to Identify User. (Failed during User Context Initialization).",ODP_MANAGER_UPDATE_SETTINGS_FAILED_EVENT_MANAGER_MISSING:"%s: ODP Manager failed to update OdpConfig settings for internal event manager. (Event Manager not initialized).",ODP_MANAGER_UPDATE_SETTINGS_FAILED_SEGMENTS_MANAGER_MISSING:"%s: ODP Manager failed to update OdpConfig settings for internal segments manager. (Segments Manager not initialized).",ODP_NOT_ENABLED:"ODP is not enabled",ODP_NOT_INTEGRATED:"%s: ODP is not integrated",ODP_SEND_EVENT_FAILED_EVENT_MANAGER_MISSING:"%s: ODP send event %s was not dispatched (Event Manager not instantiated).",ODP_SEND_EVENT_FAILED_UID_MISSING:"%s: ODP send event %s was not dispatched (No valid user identifier provided).",ODP_SEND_EVENT_FAILED_VUID_MISSING:"%s: ODP send event %s was not dispatched (Unable to fetch VUID).",ODP_VUID_INITIALIZATION_FAILED:"%s: ODP VUID initialization failed.",ODP_VUID_REGISTRATION_FAILED:"%s: ODP VUID failed to be registered.",ODP_VUID_REGISTRATION_FAILED_EVENT_MANAGER_MISSING:"%s: ODP register vuid failed. (Event Manager not instantiated).",UNDEFINED_ATTRIBUTE:"%s: Provided attribute: %s has an undefined value.",UNRECOGNIZED_ATTRIBUTE:"%s: Unrecognized attribute %s provided. Pruning before sending event to Optimizely.",UNABLE_TO_CAST_VALUE:"%s: Unable to cast value %s to type %s, returning null.",USER_NOT_IN_FORCED_VARIATION:"%s: User %s is not in the forced variation map. Cannot remove their forced variation.",USER_PROFILE_LOOKUP_ERROR:'%s: Error while looking up user profile for user ID "%s": %s.',USER_PROFILE_SAVE_ERROR:'%s: Error while saving user profile for user ID "%s": %s.',VARIABLE_KEY_NOT_IN_DATAFILE:'%s: Variable with key "%s" associated with feature with key "%s" is not in datafile.',VARIATION_ID_NOT_IN_DATAFILE:"%s: No variation ID %s defined in datafile for experiment %s.",VARIATION_ID_NOT_IN_DATAFILE_NO_EXPERIMENT:"%s: Variation ID %s is not in the datafile.",INVALID_INPUT_FORMAT:"%s: Provided %s is in an invalid format.",INVALID_DATAFILE_VERSION:"%s: This version of the JavaScript SDK does not support the given datafile version: %s",INVALID_VARIATION_KEY:"%s: Provided variation key is in an invalid format."},J={ACTIVATE_USER:"%s: Activating user %s in experiment %s.",DISPATCH_CONVERSION_EVENT:"%s: Dispatching conversion event to URL %s with params %s.",DISPATCH_IMPRESSION_EVENT:"%s: Dispatching impression event to URL %s with params %s.",DEPRECATED_EVENT_VALUE:"%s: Event value is deprecated in %s call.",EVENT_KEY_NOT_FOUND:"%s: Event key %s is not in datafile.",EXPERIMENT_NOT_RUNNING:"%s: Experiment %s is not running.",FEATURE_ENABLED_FOR_USER:"%s: Feature %s is enabled for user %s.",FEATURE_NOT_ENABLED_FOR_USER:"%s: Feature %s is not enabled for user %s.",FEATURE_HAS_NO_EXPERIMENTS:"%s: Feature %s is not attached to any experiments.",FAILED_TO_PARSE_VALUE:'%s: Failed to parse event value "%s" from event tags.',FAILED_TO_PARSE_REVENUE:'%s: Failed to parse revenue value "%s" from event tags.',FORCED_BUCKETING_FAILED:"%s: Variation key %s is not in datafile. Not activating user %s.",INVALID_OBJECT:"%s: Optimizely object is not valid. Failing %s.",INVALID_CLIENT_ENGINE:"%s: Invalid client engine passed: %s. Defaulting to node-sdk.",INVALID_DEFAULT_DECIDE_OPTIONS:"%s: Provided default decide options is not an array.",INVALID_DECIDE_OPTIONS:"%s: Provided decide options is not an array. Using default decide options.",INVALID_VARIATION_ID:"%s: Bucketed into an invalid variation ID. Returning null.",NOTIFICATION_LISTENER_EXCEPTION:"%s: Notification listener for (%s) threw exception: %s",NO_ROLLOUT_EXISTS:"%s: There is no rollout of feature %s.",NOT_ACTIVATING_USER:"%s: Not activating user %s for experiment %s.",NOT_TRACKING_USER:"%s: Not tracking user %s.",ODP_DISABLED:"ODP Disabled.",ODP_IDENTIFY_FAILED_ODP_DISABLED:"%s: ODP identify event for user %s is not dispatched (ODP disabled).",ODP_IDENTIFY_FAILED_ODP_NOT_INTEGRATED:"%s: ODP identify event %s is not dispatched (ODP not integrated).",ODP_SEND_EVENT_IDENTIFIER_CONVERSION_FAILED:"%s: sendOdpEvent failed to parse through and convert fs_user_id aliases",PARSED_REVENUE_VALUE:'%s: Parsed revenue value "%s" from event tags.',PARSED_NUMERIC_VALUE:'%s: Parsed event value "%s" from event tags.',RETURNING_STORED_VARIATION:'%s: Returning previously activated variation "%s" of experiment "%s" for user "%s" from user profile.',ROLLOUT_HAS_NO_EXPERIMENTS:"%s: Rollout of feature %s has no experiments",SAVED_VARIATION:'%s: Saved variation "%s" of experiment "%s" for user "%s".',SAVED_VARIATION_NOT_FOUND:"%s: User %s was previously bucketed into variation with ID %s for experiment %s, but no matching variation was found.",SHOULD_NOT_DISPATCH_ACTIVATE:'%s: Experiment %s is not in "Running" state. Not activating user.',SKIPPING_JSON_VALIDATION:"%s: Skipping JSON schema validation.",TRACK_EVENT:"%s: Tracking event %s for user %s.",UNRECOGNIZED_DECIDE_OPTION:"%s: Unrecognized decide option %s provided.",USER_ASSIGNED_TO_EXPERIMENT_BUCKET:"%s: Assigned bucket %s to user with bucketing ID %s.",USER_BUCKETED_INTO_EXPERIMENT_IN_GROUP:"%s: User %s is in experiment %s of group %s.",USER_BUCKETED_INTO_TARGETING_RULE:"%s: User %s bucketed into targeting rule %s.",USER_IN_FEATURE_EXPERIMENT:"%s: User %s is in variation %s of experiment %s on the feature %s.",USER_IN_ROLLOUT:"%s: User %s is in rollout of feature %s.",USER_NOT_BUCKETED_INTO_EVERYONE_TARGETING_RULE:"%s: User %s not bucketed into everyone targeting rule due to traffic allocation.",USER_NOT_BUCKETED_INTO_EXPERIMENT_IN_GROUP:"%s: User %s is not in experiment %s of group %s.",USER_NOT_BUCKETED_INTO_ANY_EXPERIMENT_IN_GROUP:"%s: User %s is not in any experiment of group %s.",USER_NOT_BUCKETED_INTO_TARGETING_RULE:"%s User %s not bucketed into targeting rule %s due to traffic allocation. Trying everyone rule.",USER_NOT_IN_FEATURE_EXPERIMENT:"%s: User %s is not in any experiment on the feature %s.",USER_NOT_IN_ROLLOUT:"%s: User %s is not in rollout of feature %s.",USER_FORCED_IN_VARIATION:"%s: User %s is forced in variation %s.",USER_MAPPED_TO_FORCED_VARIATION:"%s: Set variation %s for experiment %s and user %s in the forced variation map.",USER_DOESNT_MEET_CONDITIONS_FOR_TARGETING_RULE:"%s: User %s does not meet conditions for targeting rule %s.",USER_MEETS_CONDITIONS_FOR_TARGETING_RULE:"%s: User %s meets conditions for targeting rule %s.",USER_HAS_VARIATION:"%s: User %s is in variation %s of experiment %s.",USER_HAS_FORCED_DECISION_WITH_RULE_SPECIFIED:"Variation (%s) is mapped to flag (%s), rule (%s) and user (%s) in the forced decision map.",USER_HAS_FORCED_DECISION_WITH_NO_RULE_SPECIFIED:"Variation (%s) is mapped to flag (%s) and user (%s) in the forced decision map.",USER_HAS_FORCED_DECISION_WITH_RULE_SPECIFIED_BUT_INVALID:"Invalid variation is mapped to flag (%s), rule (%s) and user (%s) in the forced decision map.",USER_HAS_FORCED_DECISION_WITH_NO_RULE_SPECIFIED_BUT_INVALID:"Invalid variation is mapped to flag (%s) and user (%s) in the forced decision map.",USER_HAS_FORCED_VARIATION:"%s: Variation %s is mapped to experiment %s and user %s in the forced variation map.",USER_HAS_NO_VARIATION:"%s: User %s is in no variation of experiment %s.",USER_HAS_NO_FORCED_VARIATION:"%s: User %s is not in the forced variation map.",USER_HAS_NO_FORCED_VARIATION_FOR_EXPERIMENT:"%s: No experiment %s mapped to user %s in the forced variation map.",USER_NOT_IN_ANY_EXPERIMENT:"%s: User %s is not in any experiment of group %s.",USER_NOT_IN_EXPERIMENT:"%s: User %s does not meet conditions to be in experiment %s.",USER_RECEIVED_DEFAULT_VARIABLE_VALUE:'%s: User "%s" is not in any variation or rollout rule. Returning default value for variable "%s" of feature flag "%s".',FEATURE_NOT_ENABLED_RETURN_DEFAULT_VARIABLE_VALUE:'%s: Feature "%s" is not enabled for user %s. Returning the default variable value "%s".',VARIABLE_NOT_USED_RETURN_DEFAULT_VARIABLE_VALUE:'%s: Variable "%s" is not used in variation "%s". Returning default value.',USER_RECEIVED_VARIABLE_VALUE:'%s: Got variable value "%s" for variable "%s" of feature flag "%s"',VALID_DATAFILE:"%s: Datafile is valid.",VALID_USER_PROFILE_SERVICE:"%s: Valid user profile service provided.",VARIATION_REMOVED_FOR_USER:"%s: Variation mapped to experiment %s has been removed for user %s.",VARIABLE_REQUESTED_WITH_WRONG_TYPE:'%s: Requested variable type "%s", but variable is of type "%s". Use correct API to retrieve value. Returning None.',VALID_BUCKETING_ID:'%s: BucketingId is valid: "%s"',BUCKETING_ID_NOT_STRING:"%s: BucketingID attribute is not a string. Defaulted to userId",EVALUATING_AUDIENCE:'%s: Starting to evaluate audience "%s" with conditions: %s.',EVALUATING_AUDIENCES_COMBINED:'%s: Evaluating audiences for %s "%s": %s.',AUDIENCE_EVALUATION_RESULT:'%s: Audience "%s" evaluated to %s.',AUDIENCE_EVALUATION_RESULT_COMBINED:"%s: Audiences for %s %s collectively evaluated to %s.",MISSING_ATTRIBUTE_VALUE:'%s: Audience condition %s evaluated to UNKNOWN because no value was passed for user attribute "%s".',UNEXPECTED_CONDITION_VALUE:"%s: Audience condition %s evaluated to UNKNOWN because the condition value is not supported.",UNEXPECTED_TYPE:'%s: Audience condition %s evaluated to UNKNOWN because a value of type "%s" was passed for user attribute "%s".',UNEXPECTED_TYPE_NULL:'%s: Audience condition %s evaluated to UNKNOWN because a null value was passed for user attribute "%s".',UNKNOWN_CONDITION_TYPE:"%s: Audience condition %s has an unknown condition type. You may need to upgrade to a newer release of the Optimizely SDK.",UNKNOWN_MATCH_TYPE:"%s: Audience condition %s uses an unknown match type. You may need to upgrade to a newer release of the Optimizely SDK.",UPDATED_OPTIMIZELY_CONFIG:"%s: Updated Optimizely config to revision %s (project id %s)",OUT_OF_BOUNDS:'%s: Audience condition %s evaluated to UNKNOWN because the number value for user attribute "%s" is not in the range [-2^53, +2^53].',UNABLE_TO_ATTACH_UNLOAD:'%s: unable to bind optimizely.close() to page unload event: "%s"'},Z={BOT_FILTERING:"$opt_bot_filtering",BUCKETING_ID:"$opt_bucketing_id",STICKY_BUCKETING_KEY:"$opt_experiment_bucket_map",USER_AGENT:"$opt_user_agent",FORCED_DECISION_NULL_RULE_KEY:"$opt_null_rule_key"},Q={AB_TEST:"ab-test",FEATURE:"feature",FEATURE_TEST:"feature-test",FEATURE_VARIABLE:"feature-variable",ALL_FEATURE_VARIABLES:"all-feature-variables",FLAG:"flag"},ee={FEATURE_TEST:"feature-test",ROLLOUT:"rollout",EXPERIMENT:"experiment"},te={RULE:"rule",EXPERIMENT:"experiment"},re={BOOLEAN:"boolean",DOUBLE:"double",INTEGER:"integer",STRING:"string",JSON:"json"},ne={V2:"2",V3:"3",V4:"4"},ie={SDK_NOT_READY:"Optimizely SDK not configured properly yet.",FLAG_KEY_INVALID:'No flag was found for key "%s".',VARIABLE_VALUE_INVALID:'Variable value for key "%s" is invalid or wrong type.'};!function(e){e.ACTIVATE="ACTIVATE:experiment, user_id,attributes, variation, event",e.DECISION="DECISION:type, userId, attributes, decisionInfo",e.LOG_EVENT="LOG_EVENT:logEvent",e.OPTIMIZELY_CONFIG_UPDATE="OPTIMIZELY_CONFIG_UPDATE",e.TRACK="TRACK:event_key, user_id, attributes, event_tags, event"}(B||(B={})),function(e){e.VUID="vuid",e.FS_USER_ID="fs_user_id"}(q||(q={})),function(e){e.IDENTIFIED="identified",e.INITIALIZED="client_initialized"}(G||(G={}));var oe=Object.freeze({__proto__:null,LOG_LEVEL:Y,ERROR_MESSAGES:X,LOG_MESSAGES:J,CONTROL_ATTRIBUTES:Z,JAVASCRIPT_CLIENT_ENGINE:"javascript-sdk",NODE_CLIENT_ENGINE:"node-sdk",REACT_CLIENT_ENGINE:"react-sdk",REACT_NATIVE_CLIENT_ENGINE:"react-native-sdk",REACT_NATIVE_JS_CLIENT_ENGINE:"react-native-js-sdk",CLIENT_VERSION:"5.4.1",DECISION_NOTIFICATION_TYPES:Q,DECISION_SOURCES:ee,AUDIENCE_EVALUATION_TYPES:te,FEATURE_VARIABLE_TYPES:re,DATAFILE_VERSIONS:ne,DECISION_MESSAGES:ie,get NOTIFICATION_TYPES(){return B},REQUEST_TIMEOUT_MS:6e4,REQUEST_TIMEOUT_ODP_SEGMENTS_MS:1e4,REQUEST_TIMEOUT_ODP_EVENTS_MS:1e4,get ODP_USER_KEY(){return q},FS_USER_ID_ALIAS:"fs-user-id",ODP_DEFAULT_EVENT_TYPE:"fullstack",get ODP_EVENT_ACTION(){return G}}),ae=V("EventProcessor"),se=V("EventProcessor"),le=function(){function e(e){var t=e.key,r=e.maxValues,n=void 0===r?1e3:r;this.LS_KEY=t,this.maxValues=n}return e.prototype.get=function(e){return this.getMap()[e]||null},e.prototype.set=function(e,t){var r=this.getMap();r[e]=t,this.replace(r)},e.prototype.remove=function(e){var t=this.getMap();delete t[e],this.replace(t)},e.prototype.values=function(){return O(this.getMap())},e.prototype.clear=function(){this.replace({})},e.prototype.replace=function(e){try{"undefined"!=typeof window?window&&window.localStorage&&localStorage.setItem(this.LS_KEY,JSON.stringify(e)):localStorage.setItem(this.LS_KEY,JSON.stringify(e)),this.clean()}catch(e){se.error(String(e))}},e.prototype.clean=function(){var e=this.getMap(),t=Object.keys(e),r=t.length-this.maxValues;if(!(r<1)){var n=t.map(function(t){return{key:t,value:e[t]}});n.sort(function(e,t){return e.value.timestamp-t.value.timestamp});for(var i=0;i1?new W({flushInterval:t,maxQueueSize:e,sink:n,closingSink:i,batchComparator:r}):new H({sink:n})}(a,i,z,this.drainQueue.bind(this,!1),this.drainQueue.bind(this,!0))}return e.prototype.drainQueue=function(e,t){var r=this,n=new Promise(function(n){if(pe.debug("draining queue with %s events",t.length),0!==t.length){var i,o,a={url:"https://logx.optimizely.com/v1/events",httpVerb:"POST",params:de(t)};(e&&r.closingDispatcher?r.closingDispatcher:r.dispatcher).dispatchEvent(a,function(){n()}),o=a,(i=r.notificationCenter)&&i.sendNotifications(B.LOG_EVENT,o)}else n()});return this.requestTracker.trackRequest(n),n},e.prototype.process=function(e){this.queue.enqueue(e)},e.prototype.stop=function(){try{return this.queue.stop(),this.requestTracker.onRequestsComplete()}catch(e){pe.error('Error stopping EventProcessor: "%s"',Object(e).message,String(e))}return Promise.resolve()},e.prototype.start=function(){return d(this,void 0,void 0,function(){return f(this,function(e){switch(e.label){case 0:return[4,this.queue.start()];case 1:return e.sent(),[2]}})})},e}(),me="CONFIG_VALIDATOR",_e=[ne.V2,ne.V3,ne.V4],ge={handleError:function(){}},ve={dispatchEvent:function(e,t){var r,n=e.params,i=e.url;"POST"===e.httpVerb?((r=new XMLHttpRequest).open("POST",i,!0),r.setRequestHeader("Content-Type","application/json"),r.onreadystatechange=function(){if(4===r.readyState&&t&&"function"==typeof t)try{t({statusCode:r.status})}catch(e){}},r.send(JSON.stringify(n))):(i+="?wxhr=true",n&&(i+="&"+function(e){return Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&")}(n)),(r=new XMLHttpRequest).open("GET",i,!0),r.onreadystatechange=function(){if(4===r.readyState&&t&&"function"==typeof t)try{t({statusCode:r.status})}catch(e){}},r.send())}},ye={dispatchEvent:function(e,t){var r=e.params,n=e.url,i=new Blob([JSON.stringify(r)],{type:"application/json"});t({statusCode:navigator.sendBeacon(n,i)?200:500})}},be=function(){function e(){}return e.prototype.log=function(){},e}();function Ee(e){return new U(e)}var Oe=Object.freeze({__proto__:null,NoOpLogger:be,createLogger:Ee,createNoOpLogger:function(){return new be}}),Ie=function(){function e(e){var t=this;this.logger=e.logger,this.errorHandler=e.errorHandler,this.notificationListeners={},O(B).forEach(function(e){t.notificationListeners[e]=[]}),this.listenerId=1}return e.prototype.addNotificationListener=function(e,t){try{if(!(O(B).indexOf(e)>-1))return-1;this.notificationListeners[e]||(this.notificationListeners[e]=[]);var r=!1;if((this.notificationListeners[e]||[]).forEach(function(e){e.callback!==t||(r=!0)}),r)return-1;this.notificationListeners[e].push({id:this.listenerId,callback:t});var n=this.listenerId;return this.listenerId+=1,n}catch(e){return this.logger.log(Y.ERROR,e.message),this.errorHandler.handleError(e),-1}},e.prototype.removeNotificationListener=function(e){var t=this;try{var r,n;if(Object.keys(this.notificationListeners).some(function(i){return(t.notificationListeners[i]||[]).every(function(t,o){return t.id!==e||(r=o,n=i,!1)}),void 0!==r&&void 0!==n}),void 0!==r&&void 0!==n)return this.notificationListeners[n].splice(r,1),!0}catch(e){this.logger.log(Y.ERROR,e.message),this.errorHandler.handleError(e)}return!1},e.prototype.clearAllNotificationListeners=function(){var e=this;try{O(B).forEach(function(t){e.notificationListeners[t]=[]})}catch(e){this.logger.log(Y.ERROR,e.message),this.errorHandler.handleError(e)}},e.prototype.clearNotificationListeners=function(e){try{this.notificationListeners[e]=[]}catch(e){this.logger.log(Y.ERROR,e.message),this.errorHandler.handleError(e)}},e.prototype.sendNotifications=function(e,t){var r=this;try{(this.notificationListeners[e]||[]).forEach(function(n){var i=n.callback;try{i(t)}catch(t){r.logger.log(Y.ERROR,J.NOTIFICATION_LISTENER_EXCEPTION,"NOTIFICATION_CENTER",e,t.message)}})}catch(e){this.logger.log(Y.ERROR,e.message),this.errorHandler.handleError(e)}},e}();function we(e){return new Ie(e)}var Ne,Re,Se,xe=function(){for(var e=[],t=0;t=200&&e<400}var Fe={get:function(){return Promise.resolve(void 0)},set:function(){return Promise.resolve()},contains:function(){return Promise.resolve(!1)},remove:function(){return Promise.resolve(!1)}},Ve=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return u(t,e),t.prototype.makeGetRequest=function(e,t){return function(e,t){var r=new XMLHttpRequest;return{responsePromise:new Promise(function(n,i){r.open("GET",e,!0),function(e,t){Object.keys(e).forEach(function(r){var n=e[r];t.setRequestHeader(r,n)})}(t,r),r.onreadystatechange=function(){if(4===r.readyState){if(0===r.status)return void i(new Error("Request error"));var e=function(e){var t=e.getAllResponseHeaders();if(null===t)return{};var r=t.split("\r\n"),n={};return r.forEach(function(e){var t=e.indexOf(": ");if(t>-1){var r=e.slice(0,t),i=e.slice(t+2);i.length>0&&(n[r]=i)}}),n}(r),t={statusCode:r.status,body:r.responseText,headers:e};n(t)}},r.timeout=6e4,r.ontimeout=function(){De.error("Request timed out")},r.send()}),abort:function(){r.abort()}}}(e,t)},t.prototype.getConfigDefaults=function(){return{autoUpdate:!1}},t}(function(){function e(e){var t=this,r=c(c({},this.getConfigDefaults()),e),n=r.datafile,i=r.autoUpdate,o=void 0!==i&&i,a=r.sdkKey,s=r.updateInterval,l=void 0===s?3e5:s,u=r.urlTemplate,d=void 0===u?"https://cdn.optimizely.com/datafiles/%s.json":u,f=r.cache,p=void 0===f?Fe:f,h=r.customHeaders;this.cache=p,this.cacheKey="opt-datafile-"+a,this.sdkKey=a,this.customHeaders=h,this.isReadyPromiseSettled=!1,this.readyPromiseResolver=function(){},this.readyPromiseRejecter=function(){},this.readyPromise=new Promise(function(e,r){t.readyPromiseResolver=e,t.readyPromiseRejecter=r}),n?(this.currentDatafile=n,a||this.resolveReadyPromise()):this.currentDatafile="",this.isStarted=!1,this.datafileUrl=R(d,a),this.emitter=new Ce,this.autoUpdate=o,this.updateInterval=l,this.updateInterval<3e4&&Pe.warn(Te),this.currentTimeout=null,this.currentRequest=null,this.backoffController=new Ue,this.syncOnCurrentRequestComplete=!1}return e.prototype.get=function(){return this.currentDatafile},e.prototype.start=function(){this.isStarted||(Pe.debug("Datafile manager started"),this.isStarted=!0,this.backoffController.reset(),this.setDatafileFromCacheIfAvailable(),this.syncDatafile())},e.prototype.stop=function(){return Pe.debug("Datafile manager stopped"),this.isStarted=!1,this.currentTimeout&&(clearTimeout(this.currentTimeout),this.currentTimeout=null),this.emitter.removeAllListeners(),this.currentRequest&&(this.currentRequest.abort(),this.currentRequest=null),Promise.resolve()},e.prototype.onReady=function(){return this.readyPromise},e.prototype.on=function(e,t){return this.emitter.on(e,t)},e.prototype.onRequestRejected=function(e){this.isStarted&&(this.backoffController.countError(),e instanceof Error?Pe.error("Error fetching datafile: %s",e.message,e):"string"==typeof e?Pe.error("Error fetching datafile: %s",e):Pe.error("Error fetching datafile"))},e.prototype.onRequestResolved=function(e){var t;if(this.isStarted){void 0!==e.statusCode&&ke(e.statusCode)?this.backoffController.reset():this.backoffController.countError(),this.trySavingLastModified(e.headers);var r=this.getNextDatafileFromResponse(e);if(""!==r)if(Pe.info("Updating datafile from response"),this.currentDatafile=r,this.cache.set(this.cacheKey,r),this.isReadyPromiseSettled){var n={datafile:r};null===(t=Le.getNotificationCenter(this.sdkKey,Pe))||void 0===t||t.sendNotifications(B.OPTIMIZELY_CONFIG_UPDATE),this.emitter.emit("update",n)}else this.resolveReadyPromise()}},e.prototype.onRequestComplete=function(){this.isStarted&&(this.currentRequest=null,this.isReadyPromiseSettled||this.autoUpdate||this.rejectReadyPromise(new Error("Failed to become ready")),this.autoUpdate&&this.syncOnCurrentRequestComplete&&this.syncDatafile(),this.syncOnCurrentRequestComplete=!1)},e.prototype.syncDatafile=function(){var e=this,t={};this.customHeaders&&g(t,this.customHeaders),this.lastResponseLastModified&&(t["if-modified-since"]=this.lastResponseLastModified),Pe.debug("Making datafile request to url %s with headers: %s",this.datafileUrl,function(){return JSON.stringify(t)}),this.currentRequest=this.makeGetRequest(this.datafileUrl,t);var r=function(){e.onRequestComplete()};this.currentRequest.responsePromise.then(function(t){e.onRequestResolved(t)},function(t){e.onRequestRejected(t)}).then(r,r),this.autoUpdate&&this.scheduleNextUpdate()},e.prototype.resolveReadyPromise=function(){this.readyPromiseResolver(),this.isReadyPromiseSettled=!0},e.prototype.rejectReadyPromise=function(e){this.readyPromiseRejecter(e),this.isReadyPromiseSettled=!0},e.prototype.scheduleNextUpdate=function(){var e=this,t=this.backoffController.getDelay(),r=Math.max(t,this.updateInterval);Pe.debug("Scheduling sync in %s ms",r),this.currentTimeout=setTimeout(function(){e.currentRequest?e.syncOnCurrentRequestComplete=!0:e.syncDatafile()},r)},e.prototype.getNextDatafileFromResponse=function(e){return Pe.debug("Response status code: %s",e.statusCode),void 0===e.statusCode||304===e.statusCode?"":ke(e.statusCode)?e.body:(Pe.error("Datafile fetch request failed with status: ".concat(e.statusCode)),"")},e.prototype.trySavingLastModified=function(e){var t=e["last-modified"]||e["Last-Modified"];void 0!==t&&(this.lastResponseLastModified=t,Pe.debug("Saved last modified header value from response: %s",this.lastResponseLastModified))},e.prototype.setDatafileFromCacheIfAvailable=function(){var e=this;this.cache.get(this.cacheKey).then(function(t){e.isStarted&&!e.isReadyPromiseSettled&&t&&(Pe.debug("Using datafile from cache"),e.currentDatafile=t,e.resolveReadyPromise())})},e}()),Me=function(){function e(e,t,r,n){this.apiKey=e,this.apiHost=t,this.pixelUrl=r,this.segmentsToCheck=n}return e.prototype.equals=function(e){return this.apiHost===e.apiHost&&this.apiKey===e.apiKey&&this.pixelUrl===e.pixelUrl&&S(this.segmentsToCheck,e.segmentsToCheck)},e}(),je="PROJECT_CONFIG",ze=function(e,t){void 0===t&&(t=null);var r,n,i,o,a=((o=g({},r=e)).events=(r.events||[]).map(function(e){var t=g({},e);return t.experimentsIds=e.experimentIds,t}),o.audiences=(r.audiences||[]).map(function(e){return g({},e)}),o.experiments=(r.experiments||[]).map(function(e){return g({},e)}),o.featureFlags=(r.featureFlags||[]).map(function(e){return g({},e)}),o.groups=(r.groups||[]).map(function(e){var t=g({},e);return t.experiments=(e.experiments||[]).map(function(e){return g({},e)}),t}),o.rollouts=(r.rollouts||[]).map(function(e){var t=g({},e);return t.experiments=(e.experiments||[]).map(function(e){return g({},e)}),t}),o.environmentKey=null!==(n=r.environmentKey)&&void 0!==n?n:"",o.sdkKey=null!==(i=r.sdkKey)&&void 0!==i?i:"",o);a.__datafileStr=null===t?JSON.stringify(e):t,(a.audiences||[]).forEach(function(e){e.conditions=JSON.parse(e.conditions)}),a.audiencesById=v(a.audiences,"id"),g(a.audiencesById,v(a.typedAudiences,"id")),a.attributeKeyMap=v(a.attributes,"key"),a.eventKeyMap=v(a.events,"key"),a.groupIdMap=v(a.groups,"id"),Object.keys(a.groupIdMap||{}).forEach(function(e){(a.groupIdMap[e].experiments||[]).forEach(function(t){a.experiments.push(g(t,{groupId:e}))})}),a.rolloutIdMap=v(a.rollouts||[],"id"),O(a.rolloutIdMap||{}).forEach(function(e){(e.experiments||[]).forEach(function(e){e.isRollout=!0,a.experiments.push(e),e.variationKeyMap=v(e.variations,"key")})});var s=new Set;Object.keys(a.audiencesById).map(function(e){return Be(a.audiencesById[e])}).forEach(function(e){e.forEach(function(e){s.add(e)})});var l=Array.from(s),u=!1,c="",d="",f="";return a.integrations&&(a.integrationKeyMap=v(a.integrations,"key"),a.integrations.forEach(function(e){if(!("key"in e))throw new Error(R(X.MISSING_INTEGRATION_KEY,je));"odp"===e.key&&(u=!0,d=d||e.publicKey||"",c=c||e.host||"",f=f||e.pixelUrl||"")})),a.odpIntegrationConfig=u?{integrated:!0,odpConfig:new Me(d,c,f,l)}:{integrated:!1},a.experimentKeyMap=v(a.experiments,"key"),a.experimentIdMap=v(a.experiments,"id"),a.variationIdMap={},a.variationVariableUsageMap={},(a.experiments||[]).forEach(function(e){e.variationKeyMap=v(e.variations,"key"),g(a.variationIdMap,v(e.variations,"id")),O(e.variationKeyMap||{}).forEach(function(e){e.variables&&(a.variationVariableUsageMap[e.id]=v(e.variables,"id"))})}),a.experimentFeatureMap={},a.featureKeyMap=v(a.featureFlags||[],"key"),O(a.featureKeyMap||{}).forEach(function(e){e.variables.forEach(function(e){e.type===re.STRING&&e.subType===re.JSON&&(e.type=re.JSON,delete e.subType)}),e.variableKeyMap=v(e.variables,"key"),(e.experimentIds||[]).forEach(function(t){a.experimentFeatureMap[t]?a.experimentFeatureMap[t].push(e.id):a.experimentFeatureMap[t]=[e.id]})}),a.flagRulesMap={},(a.featureFlags||[]).forEach(function(e){var t=[];e.experimentIds.forEach(function(e){var r=a.experimentIdMap[e];r&&t.push(r)});var r=a.rolloutIdMap[e.rolloutId];r&&t.push.apply(t,r.experiments),a.flagRulesMap[e.key]=t}),a.flagVariationsMap={},I(a.flagRulesMap||{}).forEach(function(e){var t=e[0],r=e[1],n=[];r.forEach(function(e){e.variations.forEach(function(e){w(n,function(t){return t.id===e.id})||n.push(e)})}),a.flagVariationsMap[t]=n}),a},Be=function(e){return e.conditions?qe(e.conditions):[]},qe=function(e){var t=[];return function(e){return["and","or","not"].includes(e)}(e)?[]:(Array.isArray(e)?e.forEach(function(e){return t.push.apply(t,qe(e))}):"qualified"===e.match&&t.push(e.value),t)},Ge=function(e,t){var r=e.experimentIdMap[t];if(!r)throw new Error(R(X.INVALID_EXPERIMENT_ID,je,t));return r.layerId},Ke=function(e,t,r){var n=e.attributeKeyMap[t],i=0===t.indexOf("$opt_");return n?(i&&r.log(Y.WARNING,"Attribute %s unexpectedly has reserved prefix %s; using attribute ID instead of reserved attribute name.",t,"$opt_"),n.id):i?t:(r.log(Y.DEBUG,X.UNRECOGNIZED_ATTRIBUTE,je,t),null)},$e=function(e,t){var r=e.eventKeyMap[t];return r?r.id:null},He=function(e,t){var r=e.experimentKeyMap[t];if(!r)throw new Error(R(X.INVALID_EXPERIMENT_KEY,je,t));return r.status},We=function(e,t){return e.variationIdMap.hasOwnProperty(t)?e.variationIdMap[t].key:null},Ye=function(e,t){if(e.experimentKeyMap.hasOwnProperty(t)){var r=e.experimentKeyMap[t];if(r)return r}throw new Error(R(X.EXPERIMENT_KEY_NOT_IN_DATAFILE,je,t))},Xe=function(e,t){var r=e.experimentIdMap[t];if(!r)throw new Error(R(X.INVALID_EXPERIMENT_ID,je,t));return r.trafficAllocation},Je=function(e,t,r){if(e.experimentIdMap.hasOwnProperty(t)){var n=e.experimentIdMap[t];if(n)return n}return r.log(Y.ERROR,X.INVALID_EXPERIMENT_ID,je,t),null},Ze=function(e,t,r){if(!e)return null;var n=w(e.flagVariationsMap[t],function(e){return e.key===r});return n||null},Qe=function(e,t,r){if(e.featureKeyMap.hasOwnProperty(t)){var n=e.featureKeyMap[t];if(n)return n}return r.log(Y.ERROR,X.FEATURE_NOT_IN_DATAFILE,je,t),null},et=function(e){return e.__datafileStr},tt=function(e){var t;try{t=function(e){if(!e)throw new Error(R(X.NO_DATAFILE_SPECIFIED,me));if("string"==typeof e)try{e=JSON.parse(e)}catch(e){throw new Error(R(X.INVALID_DATAFILE_MALFORMED,me))}if("object"==typeof e&&!Array.isArray(e)&&null!==e&&-1===_e.indexOf(e.version))throw new Error(R(X.INVALID_DATAFILE_VERSION,me,e.version));return e}(e.datafile)}catch(e){return{configObj:null,error:e}}if(e.jsonSchemaValidator)try{e.jsonSchemaValidator.validate(t),e.logger.log(Y.INFO,J.VALID_DATAFILE,je)}catch(e){return{configObj:null,error:e}}else e.logger.log(Y.INFO,J.SKIPPING_JSON_VALIDATION,je);var r=[t];return"string"==typeof e.datafile&&r.push(e.datafile),{configObj:ze.apply(void 0,r),error:null}},rt=function(e){return!!e.sendFlagDecisions};function nt(e,t,r,n){var i={sdkKey:e};if((void 0===n||"object"==typeof n&&null!==n)&&T.assign(i,n),r){var o=tt({datafile:r,jsonSchemaValidator:void 0,logger:t}),a=o.configObj,s=o.error;s&&t.error(s),a&&(i.datafile=et(a))}return new Ve(i)}var it=function(){function e(e,t){void 0===t&&(t=6e4),this.logger=e,this.timeout=t}return e.prototype.makeRequest=function(e,r,n,i){var o=this,a=new XMLHttpRequest;return{responsePromise:new Promise(function(s,l){a.open(n,e,!0),o.setHeadersInXhr(r,a),a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE){if(0===a.status)return void l(new Error("Request error"));var e=o.parseHeadersFromXhr(a),t={statusCode:a.status,body:a.responseText,headers:e};s(t)}},a.timeout=o.timeout,a.ontimeout=function(){o.logger.log(t.LogLevel.WARNING,"Request timed out")},a.send(i)}),abort:function(){a.abort()}}},e.prototype.setHeadersInXhr=function(e,t){Object.keys(e).forEach(function(r){var n=e[r];"string"==typeof n&&t.setRequestHeader(r,n)})},e.prototype.parseHeadersFromXhr=function(e){var r=this,n=e.getAllResponseHeaders();if(null===n)return{};var i=n.split("\r\n"),o={};return i.forEach(function(e){try{var n=e.indexOf(": ");if(n>-1){var i=e.slice(0,n),a=e.slice(n+2);i&&a&&(o[i]=a)}}catch(n){r.logger.log(t.LogLevel.WARNING,"Unable to parse & skipped header item '".concat(e,"'"))}}),o},e}(),ot=function(e){var t=e.browserCallback,r=e.nonBrowserCallback;return"undefined"!=typeof window?t(null===window||void 0===window?void 0:window.localStorage):r()},at=function(){function e(){this.logger=V()}return e.prototype.contains=function(e){return d(this,void 0,void 0,function(){var t=this;return f(this,function(r){return[2,ot({browserCallback:function(t){return null!==(null==t?void 0:t.getItem(e))},nonBrowserCallback:function(){return t.logger.error(X.LOCAL_STORAGE_DOES_NOT_EXIST),!1}})]})})},e.prototype.get=function(e){return d(this,void 0,void 0,function(){var t=this;return f(this,function(r){return[2,ot({browserCallback:function(t){return(null==t?void 0:t.getItem(e))||void 0},nonBrowserCallback:function(){t.logger.error(X.LOCAL_STORAGE_DOES_NOT_EXIST)}})]})})},e.prototype.remove=function(e){return d(this,void 0,void 0,function(){var t=this;return f(this,function(r){switch(r.label){case 0:return[4,this.contains(e)];case 1:return r.sent()?(ot({browserCallback:function(t){null==t||t.removeItem(e)},nonBrowserCallback:function(){t.logger.error(X.LOCAL_STORAGE_DOES_NOT_EXIST)}}),[2,!0]):[2,!1]}})})},e.prototype.set=function(e,t){return d(this,void 0,void 0,function(){var r=this;return f(this,function(n){return[2,ot({browserCallback:function(r){null==r||r.setItem(e,t)},nonBrowserCallback:function(){r.logger.error(X.LOCAL_STORAGE_DOES_NOT_EXIST)}})]})})},e}(),st=function(){function e(e){void 0===e&&(e=null),this._value=e,this._time=Date.now()}return Object.defineProperty(e.prototype,"value",{get:function(){return this._value},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"time",{get:function(){return this._time},enumerable:!1,configurable:!0}),e.prototype.is_stale=function(e){return!(e<=0)&&Date.now()-this._time>=e},e}(),lt=function(){function e(e){var t=e.maxSize,r=e.timeout;this._map=new Map;var n=V();n.debug("Provisioning cache with maxSize of ".concat(t)),n.debug("Provisioning cache with timeout of ".concat(r)),this._maxSize=t,this._timeout=r}return Object.defineProperty(e.prototype,"map",{get:function(){return this._map},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"maxSize",{get:function(){return this._maxSize},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"timeout",{get:function(){return this._timeout},enumerable:!1,configurable:!0}),e.prototype.lookup=function(e){if(this._maxSize<=0)return null;var t=this._map.get(e);return t?t.is_stale(this._timeout)?(this._map.delete(e),null):(this._map.delete(e),this._map.set(e,t),t.value):null},e.prototype.save=function(e){var t=e.key,r=e.value;if(!(this._maxSize<=0)&&(this._map.get(t)&&this._map.delete(t),this._map.set(t,new st(r)),this._map.size>this._maxSize)){var n=this._map.keys().next().value;this._map.delete(n)}},e.prototype.reset=function(){this._maxSize<=0||this._map.clear()},e.prototype.peek=function(e){var t;if(this._maxSize<=0)return null;var r=this._map.get(e);return null!==(t=null==r?void 0:r.value)&&void 0!==t?t:null},e}(),ut=function(e){function t(t){var r,n;return e.call(this,{maxSize:null!==(r=null==t?void 0:t.maxSize)&&void 0!==r?r:100,timeout:null!==(n=null==t?void 0:t.timeout)&&void 0!==n?n:6e5})||this}return u(t,e),t}(lt),ct=(function(e){u(function(t){var r,n;return e.call(this,{maxSize:null!==(r=null==t?void 0:t.maxSize)&&void 0!==r?r:1e4,timeout:null!==(n=null==t?void 0:t.timeout)&&void 0!==n?n:6e5})||this},e)}(lt),function(){function e(){this._keyForVuid="optimizely-vuid",this._vuid=""}return Object.defineProperty(e.prototype,"vuid",{get:function(){return this._vuid},enumerable:!1,configurable:!0}),e.instance=function(t){return d(this,void 0,void 0,function(){return f(this,function(r){switch(r.label){case 0:return this._instance||(this._instance=new e),this._instance._vuid?[3,2]:[4,this._instance.load(t)];case 1:r.sent(),r.label=2;case 2:return[2,this._instance]}})})},e.prototype.load=function(t){return d(this,void 0,void 0,function(){var r;return f(this,function(n){switch(n.label){case 0:return[4,t.get(this._keyForVuid)];case 1:return(r=n.sent())&&e.isVuid(r)?(this._vuid=r,[3,4]):[3,2];case 2:return this._vuid=this.makeVuid(),[4,this.save(this._vuid,t)];case 3:n.sent(),n.label=4;case 4:return[2,this._vuid]}})})},e.prototype.makeVuid=function(){var t=y().replace(/-/g,"").toLowerCase(),r="".concat(e.vuid_prefix).concat(t);return r.length<=32?r:r.substring(0,32)},e.prototype.save=function(e,t){return d(this,void 0,void 0,function(){return f(this,function(r){switch(r.label){case 0:return[4,t.set(this._keyForVuid,e)];case 1:return r.sent(),[2]}})})},e._reset=function(){this._instance._vuid=""},e.vuid_prefix="vuid_",e.isVuid=function(t){return(null==t?void 0:t.startsWith(e.vuid_prefix))||!1},e}());function dt(e){var t=["string","number","boolean"],r=!1;return e.forEach(function(e){t.includes(typeof e)||null===e||(r=!0)}),r}var ft,pt=function(e,t,r,n){this.type=e,this.action=t,this.identifiers=null!=r?r:new Map,this.data=null!=n?n:new Map},ht=function(){};!function(e){e[e.Running=0]="Running",e[e.Stopped=1]="Stopped"}(ft||(ft={}));var mt,_t=function(){function e(e){var t,r,n,i=e.odpIntegrationConfig,o=e.segmentManager,a=e.eventManager,s=e.logger,l=this;this.ready=!1,this.status=ft.Stopped,this.segmentManager=o,this.eventManager=a,this.logger=s,this.configPromise=(t=ht,r=ht,{promise:n=new Promise(function(e,n){t=e,r=n}),resolve:t,reject:r,then:n.then.bind(n)});var u=[this.configPromise];this.isVuidEnabled()&&u.push(this.initializeVuid()),this.initPromise=Promise.all(u),this.onReady().then(function(){l.ready=!0,l.isVuidEnabled()&&l.status===ft.Running&&l.registerVuid()}),i&&this.updateSettings(i)}return e.prototype.getStatus=function(){return this.status},e.prototype.start=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return this.status===ft.Running?[2]:this.odpIntegrationConfig?this.odpIntegrationConfig.integrated?(this.status=ft.Running,this.segmentManager.updateSettings(this.odpIntegrationConfig.odpConfig),this.eventManager.updateSettings(this.odpIntegrationConfig.odpConfig),this.eventManager.start(),[2,Promise.resolve()]):[2,Promise.reject(new Error("start() called when ODP is not integrated"))]:[2,Promise.reject(new Error("cannot start without ODP config"))]})})},e.prototype.stop=function(){return d(this,void 0,void 0,function(){return f(this,function(e){switch(e.label){case 0:return this.status===ft.Stopped?[2]:(this.status=ft.Stopped,[4,this.eventManager.stop()]);case 1:return e.sent(),[2]}})})},e.prototype.onReady=function(){return this.initPromise},e.prototype.isReady=function(){return this.ready},e.prototype.updateSettings=function(e){return this.configPromise.resolve(),!(this.odpIntegrationConfig&&(t=this.odpIntegrationConfig,r=e,!(t.integrated!==r.integrated||t.integrated&&r.integrated&&!t.odpConfig.equals(r.odpConfig)))||(this.odpIntegrationConfig=e,e.integrated?this.status===ft.Running?(this.segmentManager.updateSettings(e.odpConfig),this.eventManager.updateSettings(e.odpConfig)):this.start():this.stop(),0));var t,r},e.prototype.fetchQualifiedSegments=function(e,r){return void 0===r&&(r=[]),d(this,void 0,void 0,function(){return f(this,function(n){return this.odpIntegrationConfig?this.odpIntegrationConfig.integrated?ct.isVuid(e)?[2,this.segmentManager.fetchQualifiedSegments(q.VUID,e,r)]:[2,this.segmentManager.fetchQualifiedSegments(q.FS_USER_ID,e,r)]:(this.logger.log(t.LogLevel.ERROR,X.ODP_NOT_INTEGRATED),[2,null]):(this.logger.log(t.LogLevel.ERROR,X.ODP_CONFIG_NOT_AVAILABLE),[2,null])})})},e.prototype.identifyUser=function(e,r){this.odpIntegrationConfig?this.odpIntegrationConfig.integrated?e&&ct.isVuid(e)?this.eventManager.identifyUser(void 0,e):this.eventManager.identifyUser(e,r):this.logger.log(t.LogLevel.INFO,X.ODP_NOT_INTEGRATED):this.logger.log(t.LogLevel.ERROR,X.ODP_CONFIG_NOT_AVAILABLE)},e.prototype.sendEvent=function(e){var r=e.type,n=e.action,i=e.identifiers,o=e.data,a=r;if("string"==typeof a&&""!==a||(a="fullstack"),this.odpIntegrationConfig)if(this.odpIntegrationConfig.integrated){if(dt(o))throw new Error(X.ODP_INVALID_DATA);if("string"!=typeof n||""===n)throw new Error("ODP action is not valid (cannot be empty).");this.eventManager.sendEvent(new pt(a,n,i,o))}else this.logger.log(t.LogLevel.ERROR,X.ODP_NOT_INTEGRATED);else this.logger.log(t.LogLevel.ERROR,X.ODP_CONFIG_NOT_AVAILABLE)},e.prototype.initializeVuid=function(){return Promise.resolve()},e.prototype.registerVuid=function(){if(this.odpIntegrationConfig)if(this.odpIntegrationConfig.integrated){var e=this.getVuid();if(e)try{this.eventManager.registerVuid(e)}catch(e){this.logger.log(t.LogLevel.ERROR,X.ODP_VUID_REGISTRATION_FAILED)}}else this.logger.log(t.LogLevel.INFO,X.ODP_NOT_INTEGRATED);else this.logger.log(t.LogLevel.ERROR,X.ODP_CONFIG_NOT_AVAILABLE)},e}(),gt=function(){function e(e,t){this.requestHandler=e,this.logger=t}return e.prototype.getLogger=function(){return this.logger},e.prototype.sendEvents=function(e,r){var n;return d(this,void 0,void 0,function(){var i,o,a,s,l,u,c,d,p,h;return f(this,function(f){switch(f.label){case 0:if(i=!1,0===r.length)return this.logger.log(t.LogLevel.ERROR,"".concat("ODP event send failed"," (no events)")),[2,i];if(!this.shouldSendEvents(r))return[2,i];o=this.generateRequestData(e,r),a=o.method,s=o.endpoint,l=o.headers,u=o.data,c=0,f.label=1;case 1:return f.trys.push([1,3,,4]),[4,this.requestHandler.makeRequest(s,l,a,u).responsePromise];case 2:return d=f.sent(),c=null!==(n=d.statusCode)&&void 0!==n?n:c,[3,4];case 3:return p=f.sent(),h="network error",p instanceof Error&&(h=p.message),this.logger.log(t.LogLevel.ERROR,"".concat("ODP event send failed"," (").concat(h,")")),i=!0,[3,4];case 4:return c>=400&&this.logger.log(t.LogLevel.ERROR,"".concat("ODP event send failed"," (").concat(c,")")),c>=500&&(i=!0),[2,i]}})})},e}(),vt=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return u(r,e),r.prototype.shouldSendEvents=function(e){return e.length<=1||(this.getLogger().log(t.LogLevel.ERROR,"".concat("ODP event send failed"," (browser only supports batch size 1)")),!1)},r.prototype.getPixelApiEndpoint=function(e){var t=e.pixelUrl;return new URL("v2/zaius.gif",t).href},r.prototype.generateRequestData=function(e,t){var r=this.getPixelApiEndpoint(e),n=e.apiKey,i=t[0],o=new URL(r);return i.identifiers.forEach(function(e,t){o.searchParams.append(t,e)}),i.data.forEach(function(e,t){o.searchParams.append(t,e)}),o.searchParams.append("tracker_id",n),o.searchParams.append("event_type",i.type),o.searchParams.append("vdl_action",i.action),{method:"GET",endpoint:o.toString(),headers:{},data:""}},r}(gt),yt=function(e){"function"==typeof queueMicrotask?queueMicrotask(e):setTimeout(e)};!function(e){e[e.Stopped=0]="Stopped",e[e.Running=1]="Running"}(mt||(mt={}));var bt=function(){function e(e){var t=e.odpConfig,r=e.apiManager,n=e.logger,i=e.clientEngine,o=e.clientVersion,a=e.queueSize,s=e.batchSize,l=e.flushInterval,u=e.userAgentParser,c=e.retries;if(this.status=mt.Stopped,this.queue=new Array,this.apiManager=r,this.logger=n,this.clientEngine=i,this.clientVersion=o,this.initParams(s,a,l),this.status=mt.Stopped,this.userAgentParser=u,this.retries=c||3,u){var d=u.parseUserAgentInfo(),f=d.os,p=d.device,h={os:f.name,os_version:f.version,device_type:p.type,model:p.model};this.userAgentData=new Map(Object.entries(h).filter(function(e){e[0];var t=e[1];return null!=t&&null!=t}))}t&&this.updateSettings(t)}return e.prototype.updateSettings=function(e){this.odpConfig&&this.odpConfig.equals(e)||(this.flush(),this.odpConfig=e)},e.prototype.flush=function(){this.processQueue(!0)},e.prototype.start=function(){this.odpConfig?(this.status=mt.Running,this.batchSize>1&&this.setNewTimeout()):this.logger.log(t.LogLevel.ERROR,X.ODP_CONFIG_NOT_AVAILABLE)},e.prototype.stop=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return this.logger.log(t.LogLevel.DEBUG,"Stop requested."),this.flush(),this.clearCurrentTimeout(),this.status=mt.Stopped,this.logger.log(t.LogLevel.DEBUG,"Stopped. Queue Count: %s",this.queue.length),[2]})})},e.prototype.registerVuid=function(e){var t=new Map;t.set(q.VUID,e);var r=new pt("fullstack",G.INITIALIZED,t);this.sendEvent(r)},e.prototype.identifyUser=function(e,r){var n=new Map;if(e||r){r&&n.set(q.VUID,r),e&&n.set(q.FS_USER_ID,e);var i=new pt("fullstack",G.IDENTIFIED,n);this.sendEvent(i)}else this.logger.log(t.LogLevel.ERROR,X.ODP_SEND_EVENT_FAILED_UID_MISSING)},e.prototype.sendEvent=function(e){dt(e.data)?this.logger.log(t.LogLevel.ERROR,"Event data found to be invalid."):(e.data=this.augmentCommonData(e.data),this.enqueue(e))},e.prototype.enqueue=function(e){this.status!==mt.Stopped?this.hasNecessaryIdentifiers(e)?this.queue.length>=this.queueSize?this.logger.log(t.LogLevel.WARNING,"Failed to Process ODP Event. Event Queue full. queueSize = %s.",this.queue.length):(this.queue.push(e),this.processQueue()):this.logger.log(t.LogLevel.ERROR,"ODP events should have at least one key-value pair in identifiers."):this.logger.log(t.LogLevel.WARNING,"Failed to Process ODP Event. ODPEventManager is not running.")},e.prototype.processQueue=function(e){if(void 0===e&&(e=!1),this.status===mt.Running){if(e)for(this.clearCurrentTimeout();this.queueContainsItems();)this.makeAndSend1Batch();else if(this.queueHasBatches())for(this.clearCurrentTimeout();this.queueHasBatches();)this.makeAndSend1Batch();this.batchSize>1&&this.setNewTimeout()}},e.prototype.clearCurrentTimeout=function(){clearTimeout(this.timeoutId),this.timeoutId=void 0},e.prototype.setNewTimeout=function(){var e=this;void 0===this.timeoutId&&(this.timeoutId=setTimeout(function(){return e.processQueue(!0)},this.flushInterval))},e.prototype.makeAndSend1Batch=function(){var e=this;if(this.odpConfig){var t=this.queue.splice(0,this.batchSize),r=this.odpConfig;t.length>0&&yt(function(){return d(e,void 0,void 0,function(){var e,n;return f(this,function(i){switch(i.label){case 0:n=0,i.label=1;case 1:return[4,this.apiManager.sendEvents(r,t)];case 2:e=i.sent(),n+=1,i.label=3;case 3:if(e&&n0},e.prototype.augmentCommonData=function(e){var t=new Map(this.userAgentData);return t.set("idempotence_id",y()),t.set("data_source_type","sdk"),t.set("data_source",this.clientEngine),t.set("data_source_version",this.clientVersion),e.forEach(function(e,r){return t.set(r,e)}),t},e.prototype.getLogger=function(){return this.logger},e.prototype.getQueue=function(){return this.queue},e}(),Et=function(e){function r(){var t=null!==e&&e.apply(this,arguments)||this;return t.hasNecessaryIdentifiers=function(e){return e.identifiers.size>=0},t}return u(r,e),r.prototype.initParams=function(e,r,n){this.queueSize=r||100,this.batchSize=1,this.flushInterval=0,void 0!==e&&1!==e&&this.getLogger().log(t.LogLevel.WARNING,"ODP event batch size must be 1 in the browser."),void 0!==n&&0!==n&&this.getLogger().log(t.LogLevel.WARNING,"ODP event flush interval must be 0 in the browser.")},r.prototype.discardEventsIfNeeded=function(){this.getLogger().log(t.LogLevel.DEBUG,"ODPConfig not ready. Leaving events in queue.")},r}(bt),Ot=function(){function e(e,t,r,n){this.odpConfig=n,this._segmentsCache=e,this.odpSegmentApiManager=t,this.logger=r||V("OdpSegmentManager")}return Object.defineProperty(e.prototype,"segmentsCache",{get:function(){return this._segmentsCache},enumerable:!1,configurable:!0}),e.prototype.fetchQualifiedSegments=function(e,r,n){return d(this,void 0,void 0,function(){var i,o,a,s,l,u;return f(this,function(c){switch(c.label){case 0:if(!this.odpConfig)return this.logger.log(t.LogLevel.WARNING,X.ODP_CONFIG_NOT_AVAILABLE),[2,null];if(!(i=this.odpConfig.segmentsToCheck)||i.length<=0)return this.logger.log(t.LogLevel.DEBUG,"No segments are used in the project. Returning an empty list."),[2,[]];if(o=this.makeCacheKey(e,r),a=n.includes(t.OptimizelySegmentOption.IGNORE_CACHE),(s=n.includes(t.OptimizelySegmentOption.RESET_CACHE))&&this.reset(),!a&&!s){if(l=this._segmentsCache.lookup(o))return this.logger.log(t.LogLevel.DEBUG,'ODP cache hit. Returning segments from cache "%s".',o),[2,l];this.logger.log(t.LogLevel.DEBUG,"ODP cache miss.")}return this.logger.log(t.LogLevel.DEBUG,"Making a call to ODP server."),[4,this.odpSegmentApiManager.fetchSegments(this.odpConfig.apiKey,this.odpConfig.apiHost,e,r,i)];case 1:return(u=c.sent())&&!a&&this._segmentsCache.save({key:o,value:u}),[2,u]}})})},e.prototype.reset=function(){this._segmentsCache.reset()},e.prototype.makeCacheKey=function(e,t){return"".concat(e,"-$-").concat(t)},e.prototype.updateSettings=function(e){this.odpConfig=e,this.reset()},e}(),It={$schema:"http://json-schema.org/draft-04/schema#",title:"Project Config JSON Schema",type:"object",properties:{projectId:{type:"string",required:!0},accountId:{type:"string",required:!0},groups:{type:"array",items:{type:"object",properties:{id:{type:"string",required:!0},policy:{type:"string",required:!0},trafficAllocation:{type:"array",items:{type:"object",properties:{entityId:{type:"string",required:!0},endOfRange:{type:"integer",required:!0}}},required:!0},experiments:{type:"array",items:{type:"object",properties:{id:{type:"string",required:!0},key:{type:"string",required:!0},status:{type:"string",required:!0},layerId:{type:"string",required:!0},variations:{type:"array",items:{type:"object",properties:{id:{type:"string",required:!0},key:{type:"string",required:!0}}},required:!0},trafficAllocation:{type:"array",items:{type:"object",properties:{entityId:{type:"string",required:!0},endOfRange:{type:"integer",required:!0}}},required:!0},audienceIds:{type:"array",items:{type:"string"},required:!0},forcedVariations:{type:"object",required:!0}}},required:!0}}},required:!0},experiments:{type:"array",items:{type:"object",properties:{id:{type:"string",required:!0},key:{type:"string",required:!0},status:{type:"string",required:!0},layerId:{type:"string",required:!0},variations:{type:"array",items:{type:"object",properties:{id:{type:"string",required:!0},key:{type:"string",required:!0}}},required:!0},trafficAllocation:{type:"array",items:{type:"object",properties:{entityId:{type:"string",required:!0},endOfRange:{type:"integer",required:!0}}},required:!0},audienceIds:{type:"array",items:{type:"string"},required:!0},forcedVariations:{type:"object",required:!0}}},required:!0},events:{type:"array",items:{type:"object",properties:{key:{type:"string",required:!0},experimentIds:{type:"array",items:{type:"string",required:!0}},id:{type:"string",required:!0}}},required:!0},audiences:{type:"array",items:{type:"object",properties:{id:{type:"string",required:!0},name:{type:"string",required:!0},conditions:{type:"string",required:!0}}},required:!0},attributes:{type:"array",items:{type:"object",properties:{id:{type:"string",required:!0},key:{type:"string",required:!0}}},required:!0},version:{type:"string",required:!0},revision:{type:"string",required:!0},integrations:{type:"array",items:{type:"object",properties:{key:{type:"string",required:!0},host:{type:"string"},publicKey:{type:"string"},pixelUrl:{type:"string"}}}}}},wt={$schema:"https://json-schema.org/draft/2019-09/schema",$id:"https://example.com/example.json",title:"ODP Response Schema",type:"object",required:["data"],properties:{data:{title:"The data Schema",type:"object",required:["customer"],properties:{customer:{title:"The customer Schema",type:"object",required:[],properties:{audiences:{title:"The audiences Schema",type:"object",required:["edges"],properties:{edges:{title:"The edges Schema",type:"array",items:{title:"A Schema",type:"object",required:["node"],properties:{node:{title:"The node Schema",type:"object",required:["name","state"],properties:{name:{title:"The name Schema",type:"string",examples:["has_email","has_email_opted_in"]},state:{title:"The state Schema",type:"string",examples:["qualified"]}},examples:[]}},examples:[]},examples:[]}},examples:[]}},examples:[]}},examples:[]},errors:{title:"The errors Schema",type:"array",default:[],items:{title:"A Schema",type:"object",required:["message","locations","extensions"],properties:{message:{title:"The message Schema",type:"string",examples:["Exception while fetching data (/customer) : java.lang.RuntimeException: could not resolve _fs_user_id = asdsdaddddd"]},locations:{title:"The locations Schema",type:"array",items:{title:"A Schema",type:"object",required:["line","column"],properties:{line:{title:"The line Schema",type:"integer",examples:[2]},column:{title:"The column Schema",type:"integer",examples:[3]}},examples:[]},examples:[]},path:{title:"The path Schema",type:"array",items:{title:"A Schema",type:"string",examples:["customer"]},examples:[]},extensions:{title:"The extensions Schema",type:"object",required:["classification"],properties:{classification:{title:"The classification Schema",type:"string",examples:["InvalidIdentifierException"]}},examples:[]}},examples:[]},examples:[]}},examples:[]},Nt=[],Rt=function(){function e(e,t){this.toGraphQLJson=function(e,t,r){return p(p(['{"query" : "query {customer',"(".concat(e,' : \\"').concat(t,'\\") '),"{audiences","(subset: ["],(null==r?void 0:r.map(function(e,t){return'\\"'.concat(e,'\\"').concat(t0?(m=h.errors[0].extensions,_=m.code,g=m.classification,"INVALID_IDENTIFIER_EXCEPTION"==_?this.logger.log(t.LogLevel.ERROR,"".concat("Audience segments fetch failed"," (invalid identifier)")):this.logger.log(t.LogLevel.ERROR,"".concat("Audience segments fetch failed"," (").concat(g,")")),[2,null]):(v=null===(u=null===(l=null===(s=null==h?void 0:h.data)||void 0===s?void 0:s.customer)||void 0===l?void 0:l.audiences)||void 0===u?void 0:u.edges)?[2,v.filter(function(e){return"qualified"==e.node.state}).map(function(e){return e.node.name})]:(this.logger.log(t.LogLevel.ERROR,"".concat("Audience segments fetch failed"," (decode error)")),[2,null]):(this.logger.log(t.LogLevel.ERROR,"".concat("Audience segments fetch failed"," (decode error)")),[2,null]):(this.logger.log(t.LogLevel.ERROR,"".concat("Audience segments fetch failed"," (network error)")),[2,null])}})})},e.prototype.querySegments=function(e,t,r,n,i){return d(this,void 0,void 0,function(){var r,n,o,a;return f(this,function(s){switch(s.label){case 0:r="POST",n=t,o={"Content-Type":"application/json","x-api-key":e},s.label=1;case 1:return s.trys.push([1,3,,4]),[4,this.requestHandler.makeRequest(n,o,r,i).responsePromise];case 2:return a=s.sent(),[3,4];case 3:return s.sent(),[2,null];case 4:return[2,a.body]}})})},e.prototype.parseSegmentsResponseJson=function(e){var t={};try{t=JSON.parse(e)}catch(e){return null}return function(e,t,r){void 0===t&&(t=It),void 0===r&&(r=!0);var n="".concat("JSON_SCHEMA_VALIDATOR"," (").concat(t.title,")");if("object"!=typeof e||null===e)throw new Error(R(X.NO_JSON_PROVIDED,n));var i=o.validate(e,t);if(i.valid)return!0;if(!r)return!1;if(Array.isArray(i.errors))throw new Error(R(X.INVALID_DATAFILE,n,i.errors[0].property,i.errors[0].message));throw new Error(R(X.INVALID_JSON,n))}(t,wt,!1)?t:null},e}(),St=function(e){function t(t){return e.call(this,t)||this}return u(t,e),t.createInstance=function(e){var r=e.logger,n=e.odpOptions,i=e.odpIntegrationConfig,o=e.clientEngine,a=e.clientVersion;r=r||V(),o=o||"javascript-sdk",a=a||"5.4.1";var s,l,u,c=void 0;return(null==i?void 0:i.integrated)&&(c=i.odpConfig),s=(null==n?void 0:n.segmentsRequestHandler)?n.segmentsRequestHandler:new it(r,(null==n?void 0:n.segmentsApiTimeout)||1e4),l=(null==n?void 0:n.segmentManager)?n.segmentManager:new Ot((null==n?void 0:n.segmentsCache)||new ut({maxSize:null==n?void 0:n.segmentsCacheSize,timeout:null==n?void 0:n.segmentsCacheTimeout}),new Rt(s,r),r,c),u=(null==n?void 0:n.eventRequestHandler)?n.eventRequestHandler:new it(r,(null==n?void 0:n.eventApiTimeout)||1e4),new t({odpIntegrationConfig:i,segmentManager:l,eventManager:(null==n?void 0:n.eventManager)?n.eventManager:new Et({odpConfig:c,apiManager:new vt(u,r),logger:r,clientEngine:o,clientVersion:a,flushInterval:null==n?void 0:n.eventFlushInterval,batchSize:null==n?void 0:n.eventBatchSize,queueSize:null==n?void 0:n.eventQueueSize,userAgentParser:null==n?void 0:n.userAgentParser}),logger:r})},t.prototype.initializeVuid=function(){return d(this,void 0,void 0,function(){var e;return f(this,function(r){switch(r.label){case 0:return[4,ct.instance(t.cache)];case 1:return e=r.sent(),this.vuid=e.vuid,[2]}})})},t.prototype.identifyUser=function(t,r){t&&ct.isVuid(t)?e.prototype.identifyUser.call(this,void 0,t):t&&r&&ct.isVuid(r)?e.prototype.identifyUser.call(this,t,r):e.prototype.identifyUser.call(this,t,r||this.vuid)},t.prototype.sendEvent=function(t){var r=t.type,n=t.action,i=t.identifiers,o=t.data,a=new Map(i);if(!i.has(q.VUID)){if(!this.vuid)throw new Error(X.ODP_SEND_EVENT_FAILED_VUID_MISSING);a.set(q.VUID,this.vuid)}e.prototype.sendEvent.call(this,{type:r,action:n,identifiers:a,data:o})},t.prototype.isVuidEnabled=function(){return!0},t.prototype.getVuid=function(){return this.vuid},t.cache=new at,t}(_t);function xt(e,t,r){return{variationKey:null,enabled:!1,variables:{},ruleKey:null,flagKey:e,userContext:t,reasons:r}}var Tt=function(){function e(e){var t,r=e.optimizely,n=e.userId,i=e.attributes,o=e.shouldIdentifyUser,a=void 0===o||o,s=this;this._qualifiedSegments=null,this.optimizely=r,this.userId=n,this.attributes=null!==(t=c({},i))&&void 0!==t?t:{},this.forcedDecisionsMap={},a&&r.readyPromise.then(function(e){e.success&&r.isOdpIntegrated()&&s.identifyUser()})}return e.prototype.identifyUser=function(){this.optimizely.identifyUser(this.userId)},e.prototype.setAttribute=function(e,t){this.attributes[e]=t},e.prototype.getUserId=function(){return this.userId},e.prototype.getAttributes=function(){return c({},this.attributes)},e.prototype.getOptimizely=function(){return this.optimizely},Object.defineProperty(e.prototype,"qualifiedSegments",{get:function(){return this._qualifiedSegments},set:function(e){this._qualifiedSegments=e},enumerable:!1,configurable:!0}),e.prototype.decide=function(e,t){return void 0===t&&(t=[]),this.optimizely.decide(this.cloneUserContext(),e,t)},e.prototype.decideForKeys=function(e,t){return void 0===t&&(t=[]),this.optimizely.decideForKeys(this.cloneUserContext(),e,t)},e.prototype.decideAll=function(e){return void 0===e&&(e=[]),this.optimizely.decideAll(this.cloneUserContext(),e)},e.prototype.trackEvent=function(e,t){this.optimizely.track(e,this.userId,this.attributes,t)},e.prototype.setForcedDecision=function(e,t){var r,n=e.flagKey,i=null!==(r=e.ruleKey)&&void 0!==r?r:Z.FORCED_DECISION_NULL_RULE_KEY,o={variationKey:t.variationKey};return this.forcedDecisionsMap[n]||(this.forcedDecisionsMap[n]={}),this.forcedDecisionsMap[n][i]=o,!0},e.prototype.getForcedDecision=function(e){return this.findForcedDecision(e)},e.prototype.removeForcedDecision=function(e){var t,r=null!==(t=e.ruleKey)&&void 0!==t?t:Z.FORCED_DECISION_NULL_RULE_KEY,n=e.flagKey,i=!1;return this.forcedDecisionsMap.hasOwnProperty(n)&&(this.forcedDecisionsMap[n].hasOwnProperty(r)&&(delete this.forcedDecisionsMap[n][r],i=!0),0===Object.keys(this.forcedDecisionsMap[n]).length&&delete this.forcedDecisionsMap[n]),i},e.prototype.removeAllForcedDecisions=function(){return this.forcedDecisionsMap={},!0},e.prototype.findForcedDecision=function(e){var t,r=null!==(t=e.ruleKey)&&void 0!==t?t:Z.FORCED_DECISION_NULL_RULE_KEY,n=e.flagKey;if(this.forcedDecisionsMap.hasOwnProperty(e.flagKey)){var i=this.forcedDecisionsMap[n];if(i.hasOwnProperty(r))return{variationKey:i[r].variationKey}}return null},e.prototype.cloneUserContext=function(){var t=new e({shouldIdentifyUser:!1,optimizely:this.getOptimizely(),userId:this.getUserId(),attributes:this.getAttributes()});return Object.keys(this.forcedDecisionsMap).length>0&&(t.forcedDecisionsMap=c({},this.forcedDecisionsMap)),t._qualifiedSegments=this._qualifiedSegments,t},e.prototype.fetchQualifiedSegments=function(e){return d(this,void 0,void 0,function(){var t;return f(this,function(r){switch(r.label){case 0:return[4,this.optimizely.fetchQualifiedSegments(this.userId,e)];case 1:return t=r.sent(),this.qualifiedSegments=t,[2,null!==t]}})})},e.prototype.isQualifiedFor=function(e){return!!this._qualifiedSegments&&this._qualifiedSegments.indexOf(e)>-1},e}(),At=["and","or","not"];function Dt(e,t){if(Array.isArray(e)){var r=e[0],n=e.slice(1);switch("string"==typeof r&&-1===At.indexOf(r)&&(r="or",n=e),r){case"and":return function(e,t){var r=!1;if(Array.isArray(e)){for(var n=0;n0){var r=Dt(e[0],t);return null===r?null:!r}return null}(n,t);default:return function(e,t){var r=!1;if(Array.isArray(e)){for(var n=0;n-1)i=t.toUpperCase();else{var a=r[t]?r[t].name:t;n||"NOT"===i?(i=""===i?"OR":i,n=""===n?"".concat(i,' "').concat(r[t].name,'"'):n.concat(" ".concat(i,' "').concat(a,'"'))):n='"'.concat(a,'"')}""!==o&&(""!==n||"NOT"===i?(i=""===i?"OR":i,n=""===n?"".concat(i," ").concat(o):n.concat(" ".concat(i," ").concat(o))):n=n.concat(o))})}return n},e.getExperimentAudiences=function(t,r){return t.audienceConditions?e.getSerializedAudiences(t.audienceConditions,r.audiencesById):""},e.mergeFeatureVariables=function(e,t,r,n,i){var o=(e[r]||[]).reduce(function(e,t){return e[t.key]={id:t.id,key:t.key,type:t.type,value:t.defaultValue},e},{});return(n||[]).forEach(function(e){var r=t[e.id],n={id:e.id,key:r.key,type:r.type,value:i?e.value:r.defaultValue};o[r.key]=n}),o},e.getVariationsMap=function(t,r,n,i){return t.reduce(function(t,o){var a=e.mergeFeatureVariables(r,n,i,o.variables,o.featureEnabled);return t[o.key]={id:o.id,key:o.key,featureEnabled:o.featureEnabled,variablesMap:a},t},{})},e.getVariableIdMap=function(e){return(e.featureFlags||[]).reduce(function(e,t){return t.variables.forEach(function(t){e[t.id]=t}),e},{})},e.getDeliveryRules=function(t,r,n,i,o){return i.map(function(i){return{id:i.id,key:i.key,audiences:e.getExperimentAudiences(i,t),variationsMap:e.getVariationsMap(i.variations,r,o,n)}})},e.getRolloutExperimentIds=function(e){var t=[];return(e||[]).forEach(function(e){e.experiments.forEach(function(e){t.push(e.id)})}),t},e.getExperimentsMap=function(t,r,n,i){var o=this.getRolloutExperimentIds(t.rollouts),a={},s={};return(t.experiments||[]).forEach(function(l){if(-1===o.indexOf(l.id)){var u=t.experimentFeatureMap[l.id],c="";u&&u.length>0&&(c=u[0]);var d=e.getVariationsMap(l.variations,r,n,c.toString()),f={id:l.id,key:l.key,audiences:e.getExperimentAudiences(l,t),variationsMap:d};a[l.id]=f,s[l.key]&&i&&i.warn("Duplicate experiment keys found in datafile: ".concat(l.key)),s[l.key]=f}}),{experimentsMapById:a,experimentsMapByKey:s}},e.getExperimentsKeyMap=function(e){var t={};for(var r in e){var n=e[r];t[n.key]=n}return t},e.getFeaturesMap=function(t,r,n,i){var o={};return t.featureFlags.forEach(function(a){var s={},l=[];a.experimentIds.forEach(function(e){var t=n[e];t&&(s[t.key]=t),l.push(n[e])});var u=(a.variables||[]).reduce(function(e,t){return e[t.key]={id:t.id,key:t.key,type:t.type,value:t.defaultValue},e},{}),c=[],d=t.rolloutIdMap[a.rolloutId];d&&(c=e.getDeliveryRules(t,r,a.id,d.experiments,i)),o[a.key]={id:a.id,key:a.key,experimentRules:l,deliveryRules:c,experimentsMap:s,variablesMap:u}}),o},e}(),Ut=V();function Lt(e,t){return e instanceof Error?e.message:t||"Unknown error"}var Pt=function(){function e(e){this.updateListeners=[],this.configObj=null,this.optimizelyConfigObj=null,this.datafileManager=null;try{if(this.jsonSchemaValidator=e.jsonSchemaValidator,!e.datafile&&!e.sdkKey){var t=new Error(R(X.DATAFILE_AND_SDK_KEY_MISSING,"PROJECT_CONFIG_MANAGER"));return this.readyPromise=Promise.resolve({success:!1,reason:Lt(t)}),void Ut.error(t)}var r=null;e.datafile&&(r=this.handleNewDatafile(e.datafile)),e.sdkKey&&e.datafileManager?(this.datafileManager=e.datafileManager,this.datafileManager.start(),this.readyPromise=this.datafileManager.onReady().then(this.onDatafileManagerReadyFulfill.bind(this),this.onDatafileManagerReadyReject.bind(this)),this.datafileManager.on("update",this.onDatafileManagerUpdate.bind(this))):this.configObj?this.readyPromise=Promise.resolve({success:!0}):this.readyPromise=Promise.resolve({success:!1,reason:Lt(r,"Invalid datafile")})}catch(e){Ut.error(e),this.readyPromise=Promise.resolve({success:!1,reason:Lt(e,"Error in initialize")})}}return e.prototype.onDatafileManagerReadyFulfill=function(){if(this.datafileManager){var e=this.handleNewDatafile(this.datafileManager.get());return e?{success:!1,reason:Lt(e)}:{success:!0}}return{success:!1,reason:Lt(null,"Datafile manager is not provided")}},e.prototype.onDatafileManagerReadyReject=function(e){return{success:!1,reason:Lt(e,"Failed to become ready")}},e.prototype.onDatafileManagerUpdate=function(){this.datafileManager&&this.handleNewDatafile(this.datafileManager.get())},e.prototype.handleNewDatafile=function(e){var t=this,r=tt({datafile:e,jsonSchemaValidator:this.jsonSchemaValidator,logger:Ut}),n=r.configObj,i=r.error;if(i)Ut.error(i);else{var o=this.configObj?this.configObj.revision:"null";n&&o!==n.revision&&(this.configObj=n,this.optimizelyConfigObj=null,yt(function(){t.updateListeners.forEach(function(e){return e(n)})}))}return i},e.prototype.getConfig=function(){return this.configObj},e.prototype.getOptimizelyConfig=function(){return!this.optimizelyConfigObj&&this.configObj&&(this.optimizelyConfigObj=function(e,t,r){return new Ct(e,t,r)}(this.configObj,et(this.configObj),Ut)),this.optimizelyConfigObj},e.prototype.onReady=function(){return this.readyPromise},e.prototype.onUpdate=function(e){var t=this;return this.updateListeners.push(e),function(){var r=t.updateListeners.indexOf(e);r>-1&&t.updateListeners.splice(r,1)}},e.prototype.stop=function(){this.datafileManager&&this.datafileManager.stop(),this.updateListeners=[]},e}(),kt=Math.pow(2,32),Ft=function(e){var t=[],r=e.experimentIdMap[e.experimentId].groupId;if(r){var n=e.groupIdMap[r];if(!n)throw new Error(R(X.INVALID_GROUP_ID,"BUCKETER",r));if("random"===n.policy){var i=Vt(n,e.bucketingId,e.userId,e.logger);if(null===i)return e.logger.log(Y.INFO,J.USER_NOT_IN_ANY_EXPERIMENT,"BUCKETER",e.userId,r),t.push([J.USER_NOT_IN_ANY_EXPERIMENT,"BUCKETER",e.userId,r]),{result:null,reasons:t};if(i!==e.experimentId)return e.logger.log(Y.INFO,J.USER_NOT_BUCKETED_INTO_EXPERIMENT_IN_GROUP,"BUCKETER",e.userId,e.experimentKey,r),t.push([J.USER_NOT_BUCKETED_INTO_EXPERIMENT_IN_GROUP,"BUCKETER",e.userId,e.experimentKey,r]),{result:null,reasons:t};e.logger.log(Y.INFO,J.USER_BUCKETED_INTO_EXPERIMENT_IN_GROUP,"BUCKETER",e.userId,e.experimentKey,r),t.push([J.USER_BUCKETED_INTO_EXPERIMENT_IN_GROUP,"BUCKETER",e.userId,e.experimentKey,r])}}var o="".concat(e.bucketingId).concat(e.experimentId),a=jt(o);e.logger.log(Y.DEBUG,J.USER_ASSIGNED_TO_EXPERIMENT_BUCKET,"BUCKETER",a,e.userId),t.push([J.USER_ASSIGNED_TO_EXPERIMENT_BUCKET,"BUCKETER",a,e.userId]);var s=Mt(a,e.trafficAllocationConfig);return null===s||e.variationIdMap[s]?{result:s,reasons:t}:(s&&(e.logger.log(Y.WARNING,J.INVALID_VARIATION_ID,"BUCKETER"),t.push([J.INVALID_VARIATION_ID,"BUCKETER"])),{result:null,reasons:t})},Vt=function(e,t,r,n){var i="".concat(t).concat(e.id),o=jt(i);n.log(Y.DEBUG,J.USER_ASSIGNED_TO_EXPERIMENT_BUCKET,"BUCKETER",o,r);var a=e.trafficAllocation;return Mt(o,a)},Mt=function(e,t){for(var r=0;r2)return zt.warn(J.UNKNOWN_MATCH_TYPE,"SEMANTIC VERSION",e),null;var i=t.split(".");if(i.length!=n+1)return zt.warn(J.UNKNOWN_MATCH_TYPE,"SEMANTIC VERSION",e),null;for(var o=0,a=i;os)return 1;if(an[o])return!qt(e)&&qt(t)?-1:1}}return qt(t)&&!qt(e)?-1:0}(a,i)}Yt.exact=Jt,Yt.exists=function(e,t){return null!=t.getAttributes()[e.name]},Yt.gt=function(e,t){var r=t.getAttributes()[e.name],n=e.value;return Zt(e,t)&&null!==n?r>n:null},Yt.ge=function(e,t){var r=t.getAttributes()[e.name],n=e.value;return Zt(e,t)&&null!==n?r>=n:null},Yt.lt=function(e,t){var r=t.getAttributes()[e.name],n=e.value;return Zt(e,t)&&null!==n?r0},Yt.semver_ge=function(e,t){var r=Qt(e,t);return null===r?null:r>=0},Yt.semver_lt=function(e,t){var r=Qt(e,t);return null===r?null:r<0},Yt.semver_le=function(e,t){var r=Qt(e,t);return null===r?null:r<=0};var er=Object.freeze({__proto__:null,evaluate:function(e,t){var r=t.getAttributes(),n=e.match;if(void 0!==n&&-1===Wt.indexOf(n))return Ht.warn(J.UNKNOWN_MATCH_TYPE,$t,JSON.stringify(e)),null;var i=e.name;return r.hasOwnProperty(i)||"exists"==n?(n&&Yt[n]||Jt)(e,t):(Ht.debug(J.MISSING_ATTRIBUTE_VALUE,$t,JSON.stringify(e),i),null)}}),tr=V(),rr=["qualified"],nr={};function ir(e,t){return t.isQualifiedFor(e.value)}nr.qualified=ir;var or=Object.freeze({__proto__:null,evaluate:function(e,t){var r=e.match;return void 0!==r&&-1===rr.indexOf(r)?(tr.warn(J.UNKNOWN_MATCH_TYPE,"ODP_SEGMENT_CONDITION_EVALUATOR",JSON.stringify(e)),null):(r&&nr[r]||ir)(e,t)}}),ar=V(),sr=function(){function e(e){this.typeToEvaluatorMap=T.assign({},e,{custom_attribute:er,third_party_dimension:or})}return e.prototype.evaluate=function(e,t,r){var n=this;return!e||0===e.length||!!Dt(e,function(e){var i=t[e];if(i){ar.log(Y.DEBUG,J.EVALUATING_AUDIENCE,"AUDIENCE_EVALUATOR",e,JSON.stringify(i.conditions));var o=Dt(i.conditions,n.evaluateConditionWithUserAttributes.bind(n,r)),a=null===o?"UNKNOWN":o.toString().toUpperCase();return ar.log(Y.DEBUG,J.AUDIENCE_EVALUATION_RESULT,"AUDIENCE_EVALUATOR",e,a),o}return null})},e.prototype.evaluateConditionWithUserAttributes=function(e,t){var r=this.typeToEvaluatorMap[t.type];if(!r)return ar.log(Y.WARNING,J.UNKNOWN_CONDITION_TYPE,"AUDIENCE_EVALUATOR",JSON.stringify(t)),null;try{return r.evaluate(t,e)}catch(e){ar.log(Y.ERROR,X.CONDITION_EVALUATOR_ERROR,"AUDIENCE_EVALUATOR",t.type,e.message)}return null},e}();function lr(e){return"string"==typeof e&&""!==e}var ur="DECISION_SERVICE",cr=function(){function e(e){var t;this.audienceEvaluator=(t=e.UNSTABLE_conditionEvaluators,new sr(t)),this.forcedVariationMap={},this.logger=e.logger,this.userProfileService=e.userProfileService||null}return e.prototype.getVariation=function(e,r,n,i){void 0===i&&(i={});var o=n.getUserId(),a=n.getAttributes(),s=this.getBucketingId(o,a),l=[],u=r.key;if(!this.checkIfExperimentIsActive(e,u))return this.logger.log(Y.INFO,J.EXPERIMENT_NOT_RUNNING,ur,u),l.push([J.EXPERIMENT_NOT_RUNNING,ur,u]),{result:null,reasons:l};var c=this.getForcedVariation(e,u,o);l.push.apply(l,c.reasons);var d=c.result;if(d)return{result:d,reasons:l};var f=this.getWhitelistedVariation(r,o);l.push.apply(l,f.reasons);var p=f.result;if(p)return{result:p.key,reasons:l};var h=i[t.OptimizelyDecideOption.IGNORE_USER_PROFILE_SERVICE],m=this.resolveExperimentBucketMap(o,a);if(!h&&(p=this.getStoredVariation(e,r,o,m)))return this.logger.log(Y.INFO,J.RETURNING_STORED_VARIATION,ur,p.key,u,o),l.push([J.RETURNING_STORED_VARIATION,ur,p.key,u,o]),{result:p.key,reasons:l};var _=this.checkIfUserIsInAudience(e,r,te.EXPERIMENT,n,"");if(l.push.apply(l,_.reasons),!_.result)return this.logger.log(Y.INFO,J.USER_NOT_IN_EXPERIMENT,ur,o,u),l.push([J.USER_NOT_IN_EXPERIMENT,ur,o,u]),{result:null,reasons:l};var g=this.buildBucketerParams(e,r,s,o),v=Ft(g);l.push.apply(l,v.reasons);var y=v.result;return y&&(p=e.variationIdMap[y]),p?(this.logger.log(Y.INFO,J.USER_HAS_VARIATION,ur,o,p.key,u),l.push([J.USER_HAS_VARIATION,ur,o,p.key,u]),h||this.saveUserProfile(r,p,o,m),{result:p.key,reasons:l}):(this.logger.log(Y.DEBUG,J.USER_HAS_NO_VARIATION,ur,o,u),l.push([J.USER_HAS_NO_VARIATION,ur,o,u]),{result:null,reasons:l})},e.prototype.resolveExperimentBucketMap=function(e,t){t=t||{};var r=this.getUserProfile(e)||{},n=t[Z.STICKY_BUCKETING_KEY];return T.assign({},r.experiment_bucket_map,n)},e.prototype.checkIfExperimentIsActive=function(e,t){return function(e,t){return"Running"===He(e,t)}(e,t)},e.prototype.getWhitelistedVariation=function(e,t){var r=[];if(e.forcedVariations&&e.forcedVariations.hasOwnProperty(t)){var n=e.forcedVariations[t];return e.variationKeyMap.hasOwnProperty(n)?(this.logger.log(Y.INFO,J.USER_FORCED_IN_VARIATION,ur,t,n),r.push([J.USER_FORCED_IN_VARIATION,ur,t,n]),{result:e.variationKeyMap[n],reasons:r}):(this.logger.log(Y.ERROR,J.FORCED_BUCKETING_FAILED,ur,n,t),r.push([J.FORCED_BUCKETING_FAILED,ur,n,t]),{result:null,reasons:r})}return{result:null,reasons:r}},e.prototype.checkIfUserIsInAudience=function(e,t,r,n,i){var o=[],a=function(e,t){var r=e.experimentIdMap[t];if(!r)throw new Error(R(X.INVALID_EXPERIMENT_ID,je,t));return r.audienceConditions||r.audienceIds}(e,t.id),s=e.audiencesById;this.logger.log(Y.DEBUG,J.EVALUATING_AUDIENCES_COMBINED,ur,r,i||t.key,JSON.stringify(a)),o.push([J.EVALUATING_AUDIENCES_COMBINED,ur,r,i||t.key,JSON.stringify(a)]);var l=this.audienceEvaluator.evaluate(a,s,n);return this.logger.log(Y.INFO,J.AUDIENCE_EVALUATION_RESULT_COMBINED,ur,r,i||t.key,l.toString().toUpperCase()),o.push([J.AUDIENCE_EVALUATION_RESULT_COMBINED,ur,r,i||t.key,l.toString().toUpperCase()]),{result:l,reasons:o}},e.prototype.buildBucketerParams=function(e,t,r,n){return{bucketingId:r,experimentId:t.id,experimentKey:t.key,experimentIdMap:e.experimentIdMap,experimentKeyMap:e.experimentKeyMap,groupIdMap:e.groupIdMap,logger:this.logger,trafficAllocationConfig:Xe(e,t.id),userId:n,variationIdMap:e.variationIdMap}},e.prototype.getStoredVariation=function(e,t,r,n){if(n.hasOwnProperty(t.id)){var i=n[t.id],o=i.variation_id;if(e.variationIdMap.hasOwnProperty(o))return e.variationIdMap[i.variation_id];this.logger.log(Y.INFO,J.SAVED_VARIATION_NOT_FOUND,ur,r,o,t.key)}return null},e.prototype.getUserProfile=function(e){var t={user_id:e,experiment_bucket_map:{}};if(!this.userProfileService)return t;try{return this.userProfileService.lookup(e)}catch(t){this.logger.log(Y.ERROR,X.USER_PROFILE_LOOKUP_ERROR,ur,e,t.message)}return null},e.prototype.saveUserProfile=function(e,t,r,n){if(this.userProfileService)try{n[e.id]={variation_id:t.id},this.userProfileService.save({user_id:r,experiment_bucket_map:n}),this.logger.log(Y.INFO,J.SAVED_VARIATION,ur,t.key,e.key,r)}catch(e){this.logger.log(Y.ERROR,X.USER_PROFILE_SAVE_ERROR,ur,r,e.message)}},e.prototype.getVariationForFeature=function(e,t,r,n){void 0===n&&(n={});var i=[],o=this.getVariationForFeatureExperiment(e,t,r,n);i.push.apply(i,o.reasons);var a=o.result;if(null!==a.variation)return{result:a,reasons:i};var s=this.getVariationForRollout(e,t,r);i.push.apply(i,s.reasons);var l=s.result,u=r.getUserId();return l.variation?(this.logger.log(Y.DEBUG,J.USER_IN_ROLLOUT,ur,u,t.key),i.push([J.USER_IN_ROLLOUT,ur,u,t.key]),{result:l,reasons:i}):(this.logger.log(Y.DEBUG,J.USER_NOT_IN_ROLLOUT,ur,u,t.key),i.push([J.USER_NOT_IN_ROLLOUT,ur,u,t.key]),{result:l,reasons:i})},e.prototype.getVariationForFeatureExperiment=function(e,t,r,n){void 0===n&&(n={});var i,o,a=[],s=null;if(t.experimentIds.length>0)for(o=0;o0)try{r.forEach(function(e,t){"fs-user-id"!==t.toLowerCase()&&q.FS_USER_ID!==t.toLowerCase()||(o.delete(t),o.set(q.FS_USER_ID,e))})}catch(e){this.logger.warn(J.ODP_SEND_EVENT_IDENTIFIER_CONVERSION_FAILED)}try{var a=new pt(i,e,o,n);this.odpManager.sendEvent(a)}catch(e){this.logger.error(X.ODP_EVENT_FAILED,e)}}else this.logger.error(X.ODP_EVENT_FAILED_ODP_MANAGER_MISSING)},e.prototype.isOdpIntegrated=function(){var e,t,r;return null!==(r=null===(t=null===(e=this.projectConfigManager.getConfig())||void 0===e?void 0:e.odpIntegrationConfig)||void 0===t?void 0:t.integrated)&&void 0!==r&&r},e.prototype.identifyUser=function(e){this.odpManager&&this.isOdpIntegrated()&&this.odpManager.identifyUser(e)},e.prototype.fetchQualifiedSegments=function(e,t){return d(this,void 0,void 0,function(){return f(this,function(r){switch(r.label){case 0:return this.odpManager?[4,this.odpManager.fetchQualifiedSegments(e,t)]:[2,null];case 1:return[2,r.sent()]}})})},e.prototype.getVuid=function(){var e;if(this.odpManager){if(this.odpManager.isVuidEnabled())return this.odpManager.getVuid();this.logger.log(Y.WARNING,"getVuid() unavailable for this platform","OPTIMIZELY")}else null===(e=this.logger)||void 0===e||e.error("Unable to get VUID - ODP Manager is not instantiated yet.")},e}(),Nr={parseUserAgentInfo:function(){var e=(new s.UAParser).getResult();return{os:e.os,device:e.device}}};function Rr(){return Nr}var Sr=Object.freeze({__proto__:null,get LogLevel(){return t.LogLevel},getLogger:V,setLogHandler:M,LOG_LEVEL:Y,createLogger:Ee}),xr=V();j.setLogHandler(Ee()),j.setLogLevel(t.LogLevel.INFO);var Tr=!1,Ar=function(e){var r,n;try{var i=!1;e.errorHandler&&(n=e.errorHandler,h=n),e.logger&&(j.setLogHandler(e.logger),j.setLogLevel(t.LogLevel.NOTSET)),void 0!==e.logLevel&&j.setLogLevel(e.logLevel);try{(function(e){if("object"==typeof e&&null!==e){var t=e,r=t.errorHandler,n=t.eventDispatcher,i=t.logger;if(r&&"function"!=typeof r.handleError)throw new Error(R(X.INVALID_ERROR_HANDLER,me));if(n&&"function"!=typeof n.dispatchEvent)throw new Error(R(X.INVALID_EVENT_DISPATCHER,me));if(i&&"function"!=typeof i.log)throw new Error(R(X.INVALID_LOGGER,me));return!0}throw new Error(R(X.INVALID_CONFIG,me))})(e),i=!0}catch(e){xr.error(e)}var o=void 0;null==e.eventDispatcher?(o=new ce({eventDispatcher:ve}),Tr||(o.sendPendingEvents(),Tr=!0)):o=e.eventDispatcher;var a=e.closingEventDispatcher;!e.eventDispatcher&&!a&&window.navigator&&"sendBeacon"in window.navigator&&(a=ye);var s=e.eventBatchSize,l=e.eventFlushInterval;(function(e){return!("number"!=typeof e||!T.isSafeInteger(e))&&e>=1})(e.eventBatchSize)||(xr.warn("Invalid eventBatchSize %s, defaulting to %s",e.eventBatchSize,10),s=10),function(e){return!("number"!=typeof e||!T.isSafeInteger(e))&&e>0}(e.eventFlushInterval)||(xr.warn("Invalid eventFlushInterval %s, defaulting to %s",e.eventFlushInterval,1e3),l=1e3);var u=m(),d=we({logger:xr,errorHandler:u}),f={dispatcher:o,closingDispatcher:a,flushInterval:l,batchSize:s,maxQueueSize:e.eventMaxQueueSize||1e4,notificationCenter:d},p=!0===(null===(r=e.odpOptions)||void 0===r?void 0:r.disabled);p&&xr.info(J.ODP_DISABLED);var _=e.clientEngine,g=e.clientVersion,v=c(c({clientEngine:"javascript-sdk"},e),{eventProcessor:xe(f),logger:xr,errorHandler:u,datafileManager:e.sdkKey?nt(e.sdkKey,xr,e.datafile,e.datafileOptions):void 0,notificationCenter:d,isValidInstance:i,odpManager:p?void 0:St.createInstance({logger:xr,odpOptions:e.odpOptions,clientEngine:_,clientVersion:g})}),y=new wr(v);try{if("function"==typeof window.addEventListener){var b="onpagehide"in window?"pagehide":"unload";window.addEventListener(b,function(){y.close()},!1)}}catch(e){xr.error(J.UNABLE_TO_ATTACH_UNLOAD,"INDEX_BROWSER",e.message)}return y}catch(e){return xr.error(e),null}},Dr=function(){Tr=!1},Cr=j.setLogHandler,Ur=j.setLogLevel,Lr=c(c({},Sr),{logging:Oe,errorHandler:ge,eventDispatcher:ve,sendBeaconEventDispatcher:ye,enums:oe,setLogger:Cr,setLogLevel:Ur,createInstance:Ar,__internalResetRetryState:Dr,OptimizelyDecideOption:t.OptimizelyDecideOption,getUserAgentParser:Rr});t.LOG_LEVEL=Y,t.__internalResetRetryState=Dr,t.createInstance=Ar,t.createLogger=Ee,t.default=Lr,t.enums=oe,t.errorHandler=ge,t.eventDispatcher=ve,t.getLogger=V,t.getUserAgentParser=Rr,t.logging=Oe,t.sendBeaconEventDispatcher=ye,t.setLogHandler=M,t.setLogLevel=Ur,t.setLogger=Cr},9784(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=o(r(7685)),i=o(r(3331));function o(e){return e&&e.__esModule?e:{default:e}}var a=(0,n.default)("v3",48,i.default);t.default=a}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}r.amdO={},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e=r(5299),t=r(172);var n=0;Array.isArray;function i(e,r,i,o,a,s){r||(r={});var l,u,c=r;if("ref"in c)for(u in c={},r)"ref"==u?l=r[u]:c[u]=r[u];var d={type:e,props:c,key:i,ref:l,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--n,__i:-1,__u:0,__source:a,__self:s};if("function"==typeof e&&(l=e.defaultProps))for(u in l)void 0===c[u]&&(c[u]=l[u]);return t.fF.vnode&&t.fF.vnode(d),d}function o(t){return{render:function(r){(0,e.render)(r,t)},unmount:function(){(0,e.unmountComponentAtNode)(t)}}}const a=(0,e.createContext)({referral:{timezone:"",user_agent:"",first_name:"",last_name:"",email:"",phone:"",postal_code:"",interests:[],tax_intents:[],tax_questions:"",tax_advice:[],tax_history:"",complexity_concern:"",tax_confidence:"",importance:"",leadSource:"",tax_situation:"",purpose:""},updateReferral:()=>{},phoneVerificationCountDown:0,updatePhoneVerificationCountDown:e=>{},proInfo:{partner_urn:"",contact_name:"",company_name:"",account_key:""},updateProInfo:e=>{},isProTrackingStatuses:!1,setIsProTrackingStatuses:()=>{}});function s(){return(0,e.useContext)(a)}function l({children:t}){const[r,n]=(0,e.useState)({timezone:"",user_agent:"",first_name:"",last_name:"",email:"",phone:"",postal_code:"",interests:[],tax_intents:[],tax_questions:"",tax_advice:[],tax_history:"",complexity_concern:"",tax_confidence:"",importance:"",leadSource:"",tax_situation:"",purpose:""}),[o,s]=(0,e.useState)({partner_urn:"",contact_name:"",company_name:"",account_key:""}),[l,u]=(0,e.useState)(0),[c,d]=(0,e.useState)(!1),[f,p]=(0,e.useState)(!1);function h(e){n({...r,...e})}function m(e){u(e),d(!0)}function _(e){s(e)}(0,e.useEffect)(()=>{c&&(d(!1),function(){const e=setInterval(()=>{u(t=>t>1?t-1:(clearInterval(e),0))},1e3)}())},[c]);const g=(0,e.useMemo)(()=>({referral:r,updateReferral:h,proInfo:o,updateProInfo:_,phoneVerificationCountDown:l,updatePhoneVerificationCountDown:m,isProTrackingStatuses:f,setIsProTrackingStatuses:p}),[r,o,l,f]);return i(a.Provider,{value:g,children:t})}const u={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let c;const d=new Uint8Array(16);const f=[];for(let e=0;e<256;++e)f.push((e+256).toString(16).slice(1));function p(e,t=0){return(f[e[t+0]]+f[e[t+1]]+f[e[t+2]]+f[e[t+3]]+"-"+f[e[t+4]]+f[e[t+5]]+"-"+f[e[t+6]]+f[e[t+7]]+"-"+f[e[t+8]]+f[e[t+9]]+"-"+f[e[t+10]]+f[e[t+11]]+f[e[t+12]]+f[e[t+13]]+f[e[t+14]]+f[e[t+15]]).toLowerCase()}function h(e,t,r){const n=(e=e||{}).random??e.rng?.()??function(){if(!c){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");c=crypto.getRandomValues.bind(crypto)}return c(d)}();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){if((r=r||0)<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let e=0;e<16;++e)t[r+e]=n[e];return t}return p(n)}const m=function(e,t,r){return!u.randomUUID||t||e?h(e,t,r):u.randomUUID()};function _(){return sessionStorage.getItem("uid")||sessionStorage.setItem("uid",`anonymous+${m()}`),sessionStorage.getItem("uid")??""}var g,v,y,b,E,O,I,w,N;!function(e){e.personal_taxes="Personal Taxes",e.self_employed="Self-Employment Taxes",e.small_business="Small-Business Taxes"}(g||(g={})),function(e){e.withholding_adjustment="Withholding Adjustment",e.real_estate_taxes="Real Estate Taxes",e.inheritance_or_estate_taxes="Inheritance or Estate Taxes",e.other="Other"}(v||(v={})),function(e){e.give_me_advice="Give me advice",e.file_for_me="File a return for me",e.tax_problem_resolution="Resolve a tax problem",e.other="Other"}(y||(y={})),function(e){e[e.failed=0]="failed",e[e.initial=1]="initial",e[e.submittingReferral=2]="submittingReferral",e[e.success=3]="success",e[e.resendingCode=4]="resendingCode",e[e.resendCodeSuccess=5]="resendCodeSuccess",e[e.verifyingCode=6]="verifyingCode"}(b||(b={})),function(e){e.file_taxes="File taxes",e.help_with_tax_issues="Help with tax issues",e.answer_general_questions="Answer general questions",e.something_else="Something else"}(E||(E={})),function(e){e.within_next_week="Within the next week",e.within_next_month="Within the next month",e.within_next_few_months="Within the next few months",e.not_in_a_rush="I'm not in a rush",e.dont_know_yet="I don't know yet"}(O||(O={})),function(e){e.audit="Audit",e.irs_notice="IRS notice",e.paying_back_taxes="Paying back taxes",e.something_else="Something else"}(I||(I={})),function(e){e.refund_or_return="My refund or return status",e.self_filed_correctly="Checking if I self-filed correctly",e.something_else="Something else"}(w||(w={})),function(e){e.file_taxes="File taxes",e.handle_bookkeeping_or_payroll="Handle bookkeeping or payroll",e.help_with_tax_issues="Help with tax issues",e.answer_general_questions="Answer general questions",e.something_else="Something else"}(N||(N={}));const R={dev:"6LcTN8kqAAAAACxr0L7Sbps0EiB5HFlWo0apwedK",test:"6LcTN8kqAAAAACxr0L7Sbps0EiB5HFlWo0apwedK",qa:"6LcTN8kqAAAAACxr0L7Sbps0EiB5HFlWo0apwedK",prod:"6LcTN8kqAAAAACxr0L7Sbps0EiB5HFlWo0apwedK"},S={dev:"TBxEtKj6CKh2ExDUun3yr",test:"RHzQi8eWfb817QRa7M8F4",qa:"7w9bG2YoCowyRaw3zPLW9",prod:"QTBBrim4vGJgStNaAkgZN"},x={dev:"HHwj9IluOy6F6t67pGfRe47Ccn3RoRau3SUJlCtf",test:"HHwj9IluOy6F6t67pGfRe47Ccn3RoRau3SUJlCtf",qa:"lkE3YXON8s8AF8aZT6eMlD0PXWwu5754tVknvHzj",prod:"hnwA7hcquq23YszvXELjx95dkKxhM7Py2yrJLvEA"},T={dev:["urn:lampo:sa_partner_id:10537"],test:["urn:lampo:sa_partner_id:10537"],qa:["urn:lampo:sa_partner_id:41927"],prod:["urn:lampo:sa_partner_id:64005"]},A={dev:["urn:lampo:sa_partner_id:25046","urn:lampo:sa_partner_id:27733"],test:["urn:lampo:sa_partner_id:25046","urn:lampo:sa_partner_id:27733"],qa:["urn:lampo:sa_partner_id:25046","urn:lampo:sa_partner_id:54726"],prod:["urn:lampo:sa_partner_id:50466"]},D={dev:["urn:lampo:sa_partner_id:26955"],test:["urn:lampo:sa_partner_id:26955"],qa:["urn:lampo:sa_partner_id:945"],prod:["urn:lampo:sa_partner_id:63898"]};function C(e=window.location.host){return/localhost|127\.0\.0\.1/.test(e)?"dev":/test\./.test(e)?"test":/qa\./.test(e)?"qa":/ramseysolutions\./.test(e)?"prod":"err"}function U(e=C()){return"err"===e?"err":R[e]}var L=r(8628);m();const P=Object.freeze({appId:"ramsey-trusted.rt-tax-web-app",apiKey:function(e=C()){return"err"===e?"err":x[e]}()});Object.freeze({INFO:"INFO",ERROR:"ERROR",WARN:"WARN"}),new L.A(P);const k=(0,r(1543).v)({formId:"elp/taxForms"});function F(e,t){sessionStorage.getItem(t)||(console.log(t),e?.track(t),sessionStorage.setItem(t,"true"))}function V(){return globalThis?.location?.origin}function M(e=V()){return function(e){return/test\.|localhost|127\.0\.0\.1/.test(e)}(e)?"test.":function(e){return/qa\./.test(e)}(e)?"qa.":""}function j(e=M(),t=V()){return/localhost|127\.0\.0\.1/.test(t)?"http://localhost:8080/tax":`https://trusted.${e}ramseysolutions.com/tax`}r(2655);function z(e){return B(e).replace(/<\/?[^>]+(>|$)/g,"")}function B(e){if("string"==typeof e)return e;if("number"==typeof e)return e.toString();if(null===e)return"";const t=e.props,r=e.type;let n;if(n=Array.isArray(t.children)?t.children?t.children.map(B).join(""):"":t.children?B(t.children):"","string"==typeof r){const e=Object.entries(t).filter(([e])=>"children"!==e).map(([e,t])=>`${e}="${t}"`).join(" ");return`<${r}${e?" "+e:""}>${n}`}if("function"==typeof r){return B(r(t))}return n}function q(e,t,r=j(),n=function(e,t=C()){return"err"===t?"":T[t].includes(e)?"national_pro=PAULHOOD":A[t].includes(e)?"national_pro=KNAPPS":D[t].includes(e)?"national_pro=PRIME":""}(t)){globalThis.location.href=`${r}/results/${e}${n.length?"?"+n:""}`}const G=/^\(?(?!37|96|900|456|555)[2-9](?!11)[0-8]\d\)?[-.\s]?(?!555[-.\s]?(?:1212|01)|(\d)\1{2}[-.\s]?\1{4})[2-9](?!11)\d{2}[-.\s]?\d{4}$/;const K="Page Viewed",$="Form Started",H="Step Completed",W="Form Submitted",Y="Experiment Viewed";function X({form_name:e,feature_name:t,source_email_name:r,page:n,path:i=Q()}){Z()?.track($,{feature_name:t,form_name:e,page:n,path:i,source_email_name:r,form_type:"lead",program:"tax"})}function J({step:e,step_label:t,step_name:r,answer_labels:n,answer_values:i,form_name:o,path:a=Q()}){Z()?.track(H,{answer_labels:n,answer_values:i,form_name:o,path:a,step:e,step_label:t,step_name:r,program:"tax"})}function Z(){return window?._APP_CONFIG?.segmentAnalytics}function Q(){return window?.location?.pathname||""}function ee(){return window?.location?.href||""}function te(){return document.querySelector("title")?.textContent??void 0}var re;function ne(e,t,r,n){!function(e,t,r=k){t?.interests?.includes(g.personal_taxes)&&r.trackModule({type:"form_option",category:"tax_interest",label:"individual_family",value:0}),t?.interests?.includes(g.small_business)&&r.trackModule({type:"form_option",category:"tax_interest",label:"small_business",value:0}),r.trackModule({type:"lead",category:"tax",label:"primary",value:0}),r.trackValidSubmission(),r.trackConfirmation({referenceId:e})}(e.request_key,t),F(n,"submission_completed"),function({fan:e,trusted_referral_key:t,form_name:r,page_name:n=te(),path:i=Q()}){Z()?.track(W,{...e,form_name:r,page_name:n,path:i,trusted_referral_key:t,form_type:"Lead",trusted_program:"tax"})}({trusted_referral_key:e.request_key,fan:{first_name:t.first_name,last_name:t.last_name,email:t.email,phone_number:t.phone,postal_code:t.postal_code},form_name:re.TAX_REFERRAL_FORM}),q(e.request_key,r)}!function(e){e.TAX_REFERRAL_FORM="tax_referral_form",e.TAX_RESULTS_ONBOARDING="tax_results_onboarding",e.TAX_PRO_QUIZ="tax_pro_quiz"}(re||(re={}));const ie=(0,e.createContext)(null);const oe=()=>{const t=(0,e.useContext)(ie);return t},ae=(0,e.memo)(({header:t,footer:r,children:n,onStepChange:i,wrapper:o,startIndex:a=0})=>{const[s,l]=(0,e.useState)(a),[u,c]=(0,e.useState)(!1),d=(0,e.useRef)(!0),f=(0,e.useRef)(!1),p=(0,e.useRef)(()=>{}),h=e.Children.toArray(n).length;d.current=s0;const m=(0,e.useCallback)(()=>{if(d.current){const e=s+1;l(e),null==i||i(e)}},[s,i]),_=(0,e.useCallback)(()=>{if(f.current){p.current=null;const e=s-1;l(e),null==i||i(e)}},[s,i]),g=(0,e.useCallback)(e=>{e>=0&&e{p.current=e}),y=(0,e.useCallback)(async()=>{if(d.current&&p.current)try{c(!0),await p.current(),c(!1),p.current=null,m()}catch(e){throw c(!1),e}else m()},[m]),b=(0,e.useMemo)(()=>({nextStep:y,previousStep:_,handleStep:v.current,isLoading:u,activeStep:s,stepCount:h,isFirstStep:!f.current,isLastStep:!d.current,goToStep:g}),[y,_,u,s,h,g]),E=(0,e.useMemo)(()=>e.Children.toArray(n)[s],[s,n,t,r]),O=(0,e.useMemo)(()=>o?(0,e.cloneElement)(o,{children:E}):E,[o,E]);return(0,e.createElement)(ie.Provider,{value:b},t,O,r)});var se=r(6942),le=r.n(se),ue=function(){return ue=Object.assign||function(e){for(var t,r=1,n=arguments.length;r"checkbox"===e.type,fe=e=>e instanceof Date,pe=e=>null==e;const he=e=>"object"==typeof e;var me=e=>!pe(e)&&!Array.isArray(e)&&he(e)&&!fe(e),_e=e=>me(e)&&e.target?de(e.target)?e.target.checked:e.target.value:e,ge=(e,t)=>e.has((e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e)(t)),ve="undefined"!=typeof window&&void 0!==window.HTMLElement&&"undefined"!=typeof document;function ye(e){if(e instanceof Date)return new Date(e);const t="undefined"!=typeof FileList&&e instanceof FileList;if(ve&&(e instanceof Blob||t))return e;const r=Array.isArray(e);if(!(r||me(e)&&(e=>{const t=e.constructor&&e.constructor.prototype;return me(t)&&t.hasOwnProperty("isPrototypeOf")})(e)))return e;const n=r?[]:Object.create(Object.getPrototypeOf(e));for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=ye(e[t]));return n}var be=e=>/^\w*$/.test(e),Ee=e=>void 0===e,Oe=e=>Array.isArray(e)?e.filter(Boolean):[],Ie=e=>Oe(e.replace(/["|']|\]/g,"").split(/\.|\[/)),we=(e,t,r)=>{if(!t||!me(e))return r;const n=(be(t)?[t]:Ie(t)).reduce((e,t)=>pe(e)?e:e[t],e);return Ee(n)||n===e?Ee(e[t])?r:e[t]:n},Ne=e=>"boolean"==typeof e,Re=e=>"function"==typeof e,Se=(e,t,r)=>{let n=-1;const i=be(t)?[t]:Ie(t),o=i.length,a=o-1;for(;++n{const i={defaultValues:t._defaultValues};for(const o in e)Object.defineProperty(i,o,{get:()=>{const i=o;return t._proxyFormState[i]!==Le&&(t._proxyFormState[i]=!n||Le),r&&(r[i]=!0),e[i]}});return i};const Ge="undefined"!=typeof window?e.default.useLayoutEffect:e.default.useEffect;var Ke=e=>"string"==typeof e,$e=(e,t,r,n,i)=>Ke(e)?(n&&t.watch.add(e),we(r,e,i)):Array.isArray(e)?e.map(e=>(n&&t.watch.add(e),we(r,e))):(n&&(t.watchAll=!0),r),He=e=>pe(e)||!he(e);function We(e,t,r=new WeakSet){if(He(e)||He(t))return Object.is(e,t);if(fe(e)&&fe(t))return Object.is(e.getTime(),t.getTime());const n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;if(r.has(e)||r.has(t))return!0;r.add(e),r.add(t);for(const o of n){const n=e[o];if(!i.includes(o))return!1;if("ref"!==o){const e=t[o];if(fe(n)&&fe(e)||me(n)&&me(e)||Array.isArray(n)&&Array.isArray(e)?!We(n,e,r):!Object.is(n,e))return!1}}return!0}const Ye=e.default.createContext(null);Ye.displayName="HookFormContext";var Xe=(e,t,r,n,i)=>t?{...r[e],types:{...r[e]&&r[e].types?r[e].types:{},[n]:i||!0}}:{},Je=e=>Array.isArray(e)?e:[e],Ze=()=>{let e=[];return{get observers(){return e},next:t=>{for(const r of e)r.next&&r.next(t)},subscribe:t=>(e.push(t),{unsubscribe:()=>{e=e.filter(e=>e!==t)}}),unsubscribe:()=>{e=[]}}};function Qe(e,t){const r={};for(const n in e)if(e.hasOwnProperty(n)){const i=e[n],o=t[n];if(i&&me(i)&&o){const e=Qe(i,o);me(e)&&(r[n]=e)}else e[n]&&(r[n]=o)}return r}var et=e=>me(e)&&!Object.keys(e).length,tt=e=>"file"===e.type,rt=e=>{if(!ve)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},nt=e=>"select-multiple"===e.type,it=e=>"radio"===e.type,ot=e=>rt(e)&&e.isConnected;function at(e,t){const r=Array.isArray(t)?t:be(t)?[t]:Ie(t),n=1===r.length?e:function(e,t){const r=t.slice(0,-1).length;let n=0;for(;n{for(const t in e)if(Re(e[t]))return!0;return!1})(e)}function lt(e,t={}){for(const r in e){const n=e[r];st(n)?(t[r]=Array.isArray(n)?[]:{},lt(n,t[r])):Ee(n)||(t[r]=!0)}return t}function ut(e,t,r){r||(r=lt(t));for(const n in e){const i=e[n];if(st(i))Ee(t)||He(r[n])?r[n]=lt(i,Array.isArray(i)?[]:{}):ut(i,pe(t)?{}:t[n],r[n]);else{const e=t[n];r[n]=!We(i,e)}}return r}const ct={value:!1,isValid:!1},dt={value:!0,isValid:!0};var ft=e=>{if(Array.isArray(e)){if(e.length>1){const t=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!Ee(e[0].attributes.value)?Ee(e[0].value)||""===e[0].value?dt:{value:e[0].value,isValid:!0}:dt:ct}return ct},pt=(e,{valueAsNumber:t,valueAsDate:r,setValueAs:n})=>Ee(e)?e:t?""===e?NaN:e?+e:e:r&&Ke(e)?new Date(e):n?n(e):e;const ht={isValid:!1,value:null};var mt=e=>Array.isArray(e)?e.reduce((e,t)=>t&&t.checked&&!t.disabled?{isValid:!0,value:t.value}:e,ht):ht;function _t(e){const t=e.ref;return tt(t)?t.files:it(t)?mt(e.refs).value:nt(t)?[...t.selectedOptions].map(({value:e})=>e):de(t)?ft(e.refs).value:pt(Ee(t.value)?e.ref.value:t.value,e)}var gt=e=>e instanceof RegExp,vt=e=>Ee(e)?e:gt(e)?e.source:me(e)?gt(e.value)?e.value.source:e.value:e,yt=e=>({isOnSubmit:!e||e===Ce,isOnBlur:e===Ae,isOnChange:e===De,isOnAll:e===Le,isOnTouch:e===Ue});const bt="AsyncFunction";var Et=e=>!!e&&!!e.validate&&!!(Re(e.validate)&&e.validate.constructor.name===bt||me(e.validate)&&Object.values(e.validate).find(e=>e.constructor.name===bt)),Ot=(e,t,r)=>!r&&(t.watchAll||t.watch.has(e)||[...t.watch].some(t=>e.startsWith(t)&&/^\.\w+/.test(e.slice(t.length))));const It=(e,t,r,n)=>{for(const i of r||Object.keys(e)){const r=we(e,i);if(r){const{_f:e,...o}=r;if(e){if(e.refs&&e.refs[0]&&t(e.refs[0],i)&&!n)return!0;if(e.ref&&t(e.ref,e.name)&&!n)return!0;if(It(o,t))break}else if(me(o)&&It(o,t))break}}};function wt(e,t,r){const n=we(e,r);if(n||be(r))return{error:n,name:r};const i=r.split(".");for(;i.length;){const n=i.join("."),o=we(t,n),a=we(e,n);if(o&&!Array.isArray(o)&&r!==n)return{name:r};if(a&&a.type)return{name:n,error:a};if(a&&a.root&&a.root.type)return{name:`${n}.root`,error:a.root};i.pop()}return{name:r}}var Nt=(e,t,r)=>{const n=Je(we(e,r));return Se(n,"root",t[r]),Se(e,r,n),e};function Rt(e,t,r="validate"){if(Ke(e)||Array.isArray(e)&&e.every(Ke)||Ne(e)&&!e)return{type:r,message:Ke(e)?e:"",ref:t}}var St=e=>me(e)&&!gt(e)?e:{value:e,message:""},xt=async(e,t,r,n,i,o)=>{const{ref:a,refs:s,required:l,maxLength:u,minLength:c,min:d,max:f,pattern:p,validate:h,name:m,valueAsNumber:_,mount:g}=e._f,v=we(r,m);if(!g||t.has(m))return{};const y=s?s[0]:a,b=e=>{i&&y.reportValidity&&(y.setCustomValidity(Ne(e)?"":e||""),y.reportValidity())},E={},O=it(a),I=de(a),w=O||I,N=(_||tt(a))&&Ee(a.value)&&Ee(v)||rt(a)&&""===a.value||""===v||Array.isArray(v)&&!v.length,R=Xe.bind(null,m,n,E),S=(e,t,r,n=Fe,i=Ve)=>{const o=e?t:r;E[m]={type:e?n:i,message:o,ref:a,...R(e?n:i,o)}};if(o?!Array.isArray(v)||!v.length:l&&(!w&&(N||pe(v))||Ne(v)&&!v||I&&!ft(s).isValid||O&&!mt(s).isValid)){const{value:e,message:t}=Ke(l)?{value:!!l,message:l}:St(l);if(e&&(E[m]={type:je,message:t,ref:y,...R(je,t)},!n))return b(t),E}if(!(N||pe(d)&&pe(f))){let e,t;const r=St(f),i=St(d);if(pe(v)||isNaN(v)){const n=a.valueAsDate||new Date(v),o=e=>new Date((new Date).toDateString()+" "+e),s="time"==a.type,l="week"==a.type;Ke(r.value)&&v&&(e=s?o(v)>o(r.value):l?v>r.value:n>new Date(r.value)),Ke(i.value)&&v&&(t=s?o(v)r.value),pe(i.value)||(t=n+e.value,i=!pe(t.value)&&v.length<+t.value;if((r||i)&&(S(r,e.message,t.message),!n))return b(E[m].message),E}if(p&&!N&&Ke(v)){const{value:e,message:t}=St(p);if(gt(e)&&!v.match(e)&&(E[m]={type:Me,message:t,ref:a,...R(Me,t)},!n))return b(t),E}if(h)if(Re(h)){const e=Rt(await h(v,r),y);if(e&&(E[m]={...e,...R(ze,e.message)},!n))return b(e.message),E}else if(me(h)){let e={};for(const t in h){if(!et(e)&&!n)break;const i=Rt(await h[t](v,r),y,t);i&&(e={...i,...R(t,i.message)},b(i.message),n&&(E[m]=e))}if(!et(e)&&(E[m]={ref:y,...e},!n))return E}return b(!0),E};const Tt={mode:Ce,reValidateMode:De,shouldFocusError:!0};function At(e={}){let t,r={...Tt,...e},n={submitCount:0,isDirty:!1,isReady:!1,isLoading:Re(r.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:r.errors||{},disabled:r.disabled||!1},i={},o=(me(r.defaultValues)||me(r.values))&&ye(r.defaultValues||r.values)||{},a=r.shouldUnregister?{}:ye(o),s={action:!1,mount:!1,watch:!1,keepIsValid:!1},l={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},u=0;const c={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},d={...c};let f={...d};const p={array:Ze(),state:Ze()},h=r.criteriaMode===Le,m=async e=>{if(!s.keepIsValid&&!r.disabled&&(d.isValid||f.isValid||e)){let e;r.resolver?(e=et((await b()).errors),_()):e=await E(i,!0),e!==n.isValid&&p.state.next({isValid:e})}},_=(e,t)=>{!r.disabled&&(d.isValidating||d.validatingFields||f.isValidating||f.validatingFields)&&((e||Array.from(l.mount)).forEach(e=>{e&&(t?Se(n.validatingFields,e,t):at(n.validatingFields,e))}),p.state.next({validatingFields:n.validatingFields,isValidating:!et(n.validatingFields)}))},g=(e,t,r,n)=>{const l=we(i,e);if(l){const i=we(a,e,Ee(r)?we(o,e):r);Ee(i)||n&&n.defaultChecked||t?Se(a,e,t?i:_t(l._f)):w(e,i),s.mount&&!s.action&&m()}},v=(e,t,i,a,s)=>{let l=!1,u=!1;const c={name:e};if(!r.disabled){if(!i||a){(d.isDirty||f.isDirty)&&(u=n.isDirty,n.isDirty=c.isDirty=O(),l=u!==c.isDirty);const r=We(we(o,e),t);u=!!we(n.dirtyFields,e),r?at(n.dirtyFields,e):Se(n.dirtyFields,e,!0),c.dirtyFields=n.dirtyFields,l=l||(d.dirtyFields||f.dirtyFields)&&u!==!r}if(i){const t=we(n.touchedFields,e);t||(Se(n.touchedFields,e,i),c.touchedFields=n.touchedFields,l=l||(d.touchedFields||f.touchedFields)&&t!==i)}l&&s&&p.state.next(c)}return l?c:{}},y=(e,i,o,a)=>{const s=we(n.errors,e),l=(d.isValid||f.isValid)&&Ne(i)&&n.isValid!==i;var c;if(r.delayError&&o?(c=()=>((e,t)=>{Se(n.errors,e,t),p.state.next({errors:n.errors})})(e,o),t=e=>{clearTimeout(u),u=setTimeout(c,e)},t(r.delayError)):(clearTimeout(u),t=null,o?Se(n.errors,e,o):at(n.errors,e)),(o?!We(s,o):s)||!et(a)||l){const t={...a,...l&&Ne(i)?{isValid:i}:{},errors:n.errors,name:e};n={...n,...t},p.state.next(t)}},b=async e=>{_(e,!0);const t=await r.resolver(a,r.context,((e,t,r,n)=>{const i={};for(const r of e){const e=we(t,r);e&&Se(i,r,e._f)}return{criteriaMode:r,names:[...e],fields:i,shouldUseNativeValidation:n}})(e||l.mount,i,r.criteriaMode,r.shouldUseNativeValidation));return t},E=async(t,i,o={valid:!0})=>{for(const s in t){const u=t[s];if(u){const{_f:t,...s}=u;if(t){const s=l.array.has(t.name),c=u._f&&Et(u._f);c&&d.validatingFields&&_([t.name],!0);const f=await xt(u,l.disabled,a,h,r.shouldUseNativeValidation&&!i,s);if(c&&d.validatingFields&&_([t.name]),f[t.name]&&(o.valid=!1,i||e.shouldUseNativeValidation))break;!i&&(we(f,t.name)?s?Nt(n.errors,f,t.name):Se(n.errors,t.name,f[t.name]):at(n.errors,t.name))}!et(s)&&await E(s,i,o)}}return o.valid},O=(e,t)=>!r.disabled&&(e&&t&&Se(a,e,t),!We(A(),o)),I=(e,t,r)=>$e(e,l,{...s.mount?a:Ee(t)?o:Ke(e)?{[e]:t}:t},r,t),w=(e,t,r={})=>{const n=we(i,e);let o=t;if(n){const r=n._f;r&&(!r.disabled&&Se(a,e,pt(t,r)),o=rt(r.ref)&&pe(t)?"":t,nt(r.ref)?[...r.ref.options].forEach(e=>e.selected=o.includes(e.value)):r.refs?de(r.ref)?r.refs.forEach(e=>{e.defaultChecked&&e.disabled||(Array.isArray(o)?e.checked=!!o.find(t=>t===e.value):e.checked=o===e.value||!!o)}):r.refs.forEach(e=>e.checked=e.value===o):tt(r.ref)?r.ref.value="":(r.ref.value=o,r.ref.type||p.state.next({name:e,values:ye(a)})))}(r.shouldDirty||r.shouldTouch)&&v(e,o,r.shouldTouch,r.shouldDirty,!0),r.shouldValidate&&T(e)},N=(e,t,r)=>{for(const n in t){if(!t.hasOwnProperty(n))return;const o=t[n],a=e+"."+n,s=we(i,a);(l.array.has(e)||me(o)||s&&!s._f)&&!fe(o)?N(a,o,r):w(a,o,r)}},R=(e,t,r={})=>{const u=we(i,e),c=l.array.has(e),h=ye(t);Se(a,e,h),c?(p.array.next({name:e,values:ye(a)}),(d.isDirty||d.dirtyFields||f.isDirty||f.dirtyFields)&&r.shouldDirty&&p.state.next({name:e,dirtyFields:ut(o,a),isDirty:O(e,h)})):!u||u._f||pe(h)?w(e,h,r):N(e,h,r),Ot(e,l)?p.state.next({...n,name:e,values:ye(a)}):p.state.next({name:s.mount?e:void 0,values:ye(a)})},S=async e=>{s.mount=!0;const o=e.target;let u=o.name,c=!0;const g=we(i,u),O=e=>{c=Number.isNaN(e)||fe(e)&&isNaN(e.getTime())||We(e,we(a,u,e))},I=yt(r.mode),w=yt(r.reValidateMode);if(g){let s,R;const S=o.type?_t(g._f):_e(e),x=e.type===xe||e.type===Te,A=!((N=g._f).mount&&(N.required||N.min||N.max||N.maxLength||N.minLength||N.pattern||N.validate)||r.resolver||we(n.errors,u)||g._f.deps)||((e,t,r,n,i)=>!i.isOnAll&&(!r&&i.isOnTouch?!(t||e):(r?n.isOnBlur:i.isOnBlur)?!e:!(r?n.isOnChange:i.isOnChange)||e))(x,we(n.touchedFields,u),n.isSubmitted,w,I),D=Ot(u,l,x);Se(a,u,S),x?o&&o.readOnly||(g._f.onBlur&&g._f.onBlur(e),t&&t(0)):g._f.onChange&&g._f.onChange(e);const C=v(u,S,x),U=!et(C)||D;if(!x&&p.state.next({name:u,type:e.type,values:ye(a)}),A)return(d.isValid||f.isValid)&&("onBlur"===r.mode?x&&m():x||m()),U&&p.state.next({name:u,...D?{}:C});if(!x&&D&&p.state.next({...n}),r.resolver){const{errors:e}=await b([u]);if(_([u]),O(S),c){const t=wt(n.errors,i,u),r=wt(e,i,t.name||u);s=r.error,u=r.name,R=et(e)}}else _([u],!0),s=(await xt(g,l.disabled,a,h,r.shouldUseNativeValidation))[u],_([u]),O(S),c&&(s?R=!1:(d.isValid||f.isValid)&&(R=await E(i,!0)));c&&(g._f.deps&&(!Array.isArray(g._f.deps)||g._f.deps.length>0)&&T(g._f.deps),y(u,R,s,C))}var N},x=(e,t)=>{if(we(n.errors,t)&&e.focus)return e.focus(),1},T=async(e,t={})=>{let o,a;const s=Je(e);if(r.resolver){const t=await(async e=>{const{errors:t}=await b(e);if(_(e),e)for(const r of e){const e=we(t,r);e?Se(n.errors,r,e):at(n.errors,r)}else n.errors=t;return t})(Ee(e)?e:s);o=et(t),a=e?!s.some(e=>we(t,e)):o}else e?(a=(await Promise.all(s.map(async e=>{const t=we(i,e);return await E(t&&t._f?{[e]:t}:t)}))).every(Boolean),(a||n.isValid)&&m()):a=o=await E(i);return p.state.next({...!Ke(e)||(d.isValid||f.isValid)&&o!==n.isValid?{}:{name:e},...r.resolver||!e?{isValid:o}:{},errors:n.errors}),t.shouldFocus&&!a&&It(i,x,e?s:l.mount),a},A=(e,t)=>{let r={...s.mount?a:o};return t&&(r=Qe(t.dirtyFields?n.dirtyFields:n.touchedFields,r)),Ee(e)?r:Ke(e)?we(r,e):e.map(e=>we(r,e))},D=(e,t)=>({invalid:!!we((t||n).errors,e),isDirty:!!we((t||n).dirtyFields,e),error:we((t||n).errors,e),isValidating:!!we(n.validatingFields,e),isTouched:!!we((t||n).touchedFields,e)}),C=(e,t,r)=>{const o=(we(i,e,{_f:{}})._f||{}).ref,a=we(n.errors,e)||{},{ref:s,message:l,type:u,...c}=a;Se(n.errors,e,{...c,...t,ref:o}),p.state.next({name:e,errors:n.errors,isValid:!1}),r&&r.shouldFocus&&o&&o.focus&&o.focus()},U=e=>p.state.subscribe({next:t=>{var r,i,s;r=e.name,i=t.name,s=e.exact,r&&i&&r!==i&&!Je(r).some(e=>e&&(s?e===i:e.startsWith(i)||i.startsWith(e)))||!((e,t,r,n)=>{r(e);const{name:i,...o}=e;return et(o)||Object.keys(o).length>=Object.keys(t).length||Object.keys(o).find(e=>t[e]===(!n||Le))})(t,e.formState||d,z,e.reRenderRoot)||e.callback({values:{...a},...n,...t,defaultValues:o})}}).unsubscribe,L=(e,t={})=>{for(const s of e?Je(e):l.mount)l.mount.delete(s),l.array.delete(s),t.keepValue||(at(i,s),at(a,s)),!t.keepError&&at(n.errors,s),!t.keepDirty&&at(n.dirtyFields,s),!t.keepTouched&&at(n.touchedFields,s),!t.keepIsValidating&&at(n.validatingFields,s),!r.shouldUnregister&&!t.keepDefaultValue&&at(o,s);p.state.next({values:ye(a)}),p.state.next({...n,...t.keepDirty?{isDirty:O()}:{}}),!t.keepIsValid&&m()},P=({disabled:e,name:t})=>{if(Ne(e)&&s.mount||e||l.disabled.has(t)){const r=l.disabled.has(t)!==!!e;e?l.disabled.add(t):l.disabled.delete(t),r&&s.mount&&!s.action&&m()}},k=(e,t={})=>{let n=we(i,e);const a=Ne(t.disabled)||Ne(r.disabled);return Se(i,e,{...n||{},_f:{...n&&n._f?n._f:{ref:{name:e}},name:e,mount:!0,...t}}),l.mount.add(e),n?P({disabled:Ne(t.disabled)?t.disabled:r.disabled,name:e}):g(e,!0,t.value),{...a?{disabled:t.disabled||r.disabled}:{},...r.progressive?{required:!!t.required,min:vt(t.min),max:vt(t.max),minLength:vt(t.minLength),maxLength:vt(t.maxLength),pattern:vt(t.pattern)}:{},name:e,onChange:S,onBlur:S,ref:a=>{if(a){k(e,t),n=we(i,e);const r=Ee(a.value)&&a.querySelectorAll&&a.querySelectorAll("input,select,textarea")[0]||a,s=(e=>it(e)||de(e))(r),l=n._f.refs||[];if(s?l.find(e=>e===r):r===n._f.ref)return;Se(i,e,{_f:{...n._f,...s?{refs:[...l.filter(ot),r,...Array.isArray(we(o,e))?[{}]:[]],ref:{type:r.type,name:e}}:{ref:r}}}),g(e,!1,void 0,r)}else n=we(i,e,{}),n._f&&(n._f.mount=!1),(r.shouldUnregister||t.shouldUnregister)&&(!ge(l.array,e)||!s.action)&&l.unMount.add(e)}}},F=()=>r.shouldFocusError&&It(i,x,l.mount),V=(e,t)=>async o=>{let s;o&&(o.preventDefault&&o.preventDefault(),o.persist&&o.persist());let u=ye(a);if(p.state.next({isSubmitting:!0}),r.resolver){const{errors:e,values:t}=await b();_(),n.errors=e,u=ye(t)}else await E(i);if(l.disabled.size)for(const e of l.disabled)at(u,e);if(at(n.errors,"root"),et(n.errors)){p.state.next({errors:{}});try{await e(u,o)}catch(e){s=e}}else t&&await t({...n.errors},o),F(),setTimeout(F);if(p.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:et(n.errors)&&!s,submitCount:n.submitCount+1,errors:n.errors}),s)throw s},M=(e,t={})=>{const u=e?ye(e):o,c=ye(u),f=et(e),h=f?o:c;if(t.keepDefaultValues||(o=u),!t.keepValues){if(t.keepDirtyValues){const e=new Set([...l.mount,...Object.keys(ut(o,a))]);for(const t of Array.from(e)){const e=we(n.dirtyFields,t),r=we(a,t),i=we(h,t);e&&!Ee(r)?Se(h,t,r):e||Ee(i)||R(t,i)}}else{if(ve&&Ee(e))for(const e of l.mount){const t=we(i,e);if(t&&t._f){const e=Array.isArray(t._f.refs)?t._f.refs[0]:t._f.ref;if(rt(e)){const t=e.closest("form");if(t){t.reset();break}}}}if(t.keepFieldsRef)for(const e of l.mount)R(e,we(h,e));else i={}}a=r.shouldUnregister?t.keepDefaultValues?ye(o):{}:ye(h),p.array.next({values:{...h}}),p.state.next({values:{...h}})}l={mount:t.keepDirtyValues?l.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},s.mount=!d.isValid||!!t.keepIsValid||!!t.keepDirtyValues||!r.shouldUnregister&&!et(h),s.watch=!!r.shouldUnregister,s.keepIsValid=!!t.keepIsValid,s.action=!1,t.keepErrors||(n.errors={}),p.state.next({submitCount:t.keepSubmitCount?n.submitCount:0,isDirty:!f&&(t.keepDirty?n.isDirty:!(!t.keepDefaultValues||We(e,o))),isSubmitted:!!t.keepIsSubmitted&&n.isSubmitted,dirtyFields:f?{}:t.keepDirtyValues?t.keepDefaultValues&&a?ut(o,a):n.dirtyFields:t.keepDefaultValues&&e?ut(o,e):t.keepDirty?n.dirtyFields:{},touchedFields:t.keepTouched?n.touchedFields:{},errors:t.keepErrors?n.errors:{},isSubmitSuccessful:!!t.keepIsSubmitSuccessful&&n.isSubmitSuccessful,isSubmitting:!1,defaultValues:o})},j=(e,t)=>M(Re(e)?e(a):e,{...r.resetOptions,...t}),z=e=>{n={...n,...e}},B={control:{register:k,unregister:L,getFieldState:D,handleSubmit:V,setError:C,_subscribe:U,_runSchema:b,_updateIsValidating:_,_focusError:F,_getWatch:I,_getDirty:O,_setValid:m,_setFieldArray:(e,t=[],l,u,c=!0,h=!0)=>{if(u&&l&&!r.disabled){if(s.action=!0,h&&Array.isArray(we(i,e))){const t=l(we(i,e),u.argA,u.argB);c&&Se(i,e,t)}if(h&&Array.isArray(we(n.errors,e))){const t=l(we(n.errors,e),u.argA,u.argB);c&&Se(n.errors,e,t),((e,t)=>{!Oe(we(e,t)).length&&at(e,t)})(n.errors,e)}if((d.touchedFields||f.touchedFields)&&h&&Array.isArray(we(n.touchedFields,e))){const t=l(we(n.touchedFields,e),u.argA,u.argB);c&&Se(n.touchedFields,e,t)}(d.dirtyFields||f.dirtyFields)&&(n.dirtyFields=ut(o,a)),p.state.next({name:e,isDirty:O(e,t),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else Se(a,e,t)},_setDisabledField:P,_setErrors:e=>{n.errors=e,p.state.next({errors:n.errors,isValid:!1})},_getFieldArray:e=>Oe(we(s.mount?a:o,e,r.shouldUnregister?we(o,e,[]):[])),_reset:M,_resetDefaultValues:()=>Re(r.defaultValues)&&r.defaultValues().then(e=>{j(e,r.resetOptions),p.state.next({isLoading:!1})}),_removeUnmounted:()=>{for(const e of l.unMount){const t=we(i,e);t&&(t._f.refs?t._f.refs.every(e=>!ot(e)):!ot(t._f.ref))&&L(e)}l.unMount=new Set},_disableForm:e=>{Ne(e)&&(p.state.next({disabled:e}),It(i,(t,r)=>{const n=we(i,r);n&&(t.disabled=n._f.disabled||e,Array.isArray(n._f.refs)&&n._f.refs.forEach(t=>{t.disabled=n._f.disabled||e}))},0,!1))},_subjects:p,_proxyFormState:d,get _fields(){return i},get _formValues(){return a},get _state(){return s},set _state(e){s=e},get _defaultValues(){return o},get _names(){return l},set _names(e){l=e},get _formState(){return n},get _options(){return r},set _options(e){r={...r,...e}}},subscribe:e=>(s.mount=!0,f={...f,...e.formState},U({...e,formState:{...c,...e.formState}})),trigger:T,register:k,handleSubmit:V,watch:(e,t)=>Re(e)?p.state.subscribe({next:r=>"values"in r&&e(I(void 0,t),r)}):I(e,t,!0),setValue:R,getValues:A,reset:j,resetField:(e,t={})=>{we(i,e)&&(Ee(t.defaultValue)?R(e,ye(we(o,e))):(R(e,t.defaultValue),Se(o,e,ye(t.defaultValue))),t.keepTouched||at(n.touchedFields,e),t.keepDirty||(at(n.dirtyFields,e),n.isDirty=t.defaultValue?O(e,ye(we(o,e))):O()),t.keepError||(at(n.errors,e),d.isValid&&m()),p.state.next({...n}))},clearErrors:e=>{e&&Je(e).forEach(e=>at(n.errors,e)),p.state.next({errors:e?n.errors:{}})},unregister:L,setError:C,setFocus:(e,t={})=>{const r=we(i,e),n=r&&r._f;if(n){const e=n.refs?n.refs[0]:n.ref;e.focus&&setTimeout(()=>{e.focus(),t.shouldSelect&&Re(e.select)&&e.select()})}},getFieldState:D};return{...B,formControl:B}}function Dt(t={}){const r=e.default.useRef(void 0),n=e.default.useRef(void 0),[i,o]=e.default.useState({isDirty:!1,isValidating:!1,isLoading:Re(t.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1,isReady:!1,defaultValues:Re(t.defaultValues)?void 0:t.defaultValues});if(!r.current)if(t.formControl)r.current={...t.formControl,formState:i},t.defaultValues&&!Re(t.defaultValues)&&t.formControl.reset(t.defaultValues,t.resetOptions);else{const{formControl:e,...n}=At(t);r.current={...n,formState:i}}const a=r.current.control;return a._options=t,Ge(()=>{const e=a._subscribe({formState:a._proxyFormState,callback:()=>o({...a._formState}),reRenderRoot:!0});return o(e=>({...e,isReady:!0})),a._formState.isReady=!0,e},[a]),e.default.useEffect(()=>a._disableForm(t.disabled),[a,t.disabled]),e.default.useEffect(()=>{t.mode&&(a._options.mode=t.mode),t.reValidateMode&&(a._options.reValidateMode=t.reValidateMode)},[a,t.mode,t.reValidateMode]),e.default.useEffect(()=>{t.errors&&(a._setErrors(t.errors),a._focusError())},[a,t.errors]),e.default.useEffect(()=>{t.shouldUnregister&&a._subjects.state.next({values:a._getWatch()})},[a,t.shouldUnregister]),e.default.useEffect(()=>{if(a._proxyFormState.isDirty){const e=a._getDirty();e!==i.isDirty&&a._subjects.state.next({isDirty:e})}},[a,i.isDirty]),e.default.useEffect(()=>{var e;t.values&&!We(t.values,n.current)?(a._reset(t.values,{keepFieldsRef:!0,...a._options.resetOptions}),(null===(e=a._options.resetOptions)||void 0===e?void 0:e.keepIsValid)||a._setValid(),n.current=t.values,o(e=>({...e}))):a._resetDefaultValues()},[a,t.values]),e.default.useEffect(()=>{a._state.mount||(a._setValid(),a._state.mount=!0),a._state.watch&&(a._state.watch=!1,a._subjects.state.next({...a._formState})),a._removeUnmounted()}),r.current.formState=e.default.useMemo(()=>qe(i,a),[a,i]),r.current}const Ct=(e,t,r)=>{if(e&&"reportValidity"in e){const n=we(r,t);e.setCustomValidity(n&&n.message||""),e.reportValidity()}},Ut=(e,t)=>{for(const r in t.fields){const n=t.fields[r];n&&n.ref&&"reportValidity"in n.ref?Ct(n.ref,r,e):n&&n.refs&&n.refs.forEach(t=>Ct(t,r,e))}},Lt=(e,t)=>{t.shouldUseNativeValidation&&Ut(e,t);const r={};for(const n in e){const i=we(t.fields,n),o=Object.assign(e[n]||{},{ref:i&&i.ref});if(Pt(t.names||Object.keys(e),n)){const e=Object.assign({},we(r,n));Se(e,"root",o),Se(r,n,e)}else Se(r,n,o)}return r},Pt=(e,t)=>{const r=kt(t);return e.some(e=>kt(e).match(`^${r}\\.\\d+`))};function kt(e){return e.replace(/\]|\[/g,"")}function Ft(e,t,r){return void 0===r&&(r={}),function(n,i,o){try{return Promise.resolve(function(a,s){try{var l=(null!=t&&t.context,Promise.resolve(e["sync"===r.mode?"validateSync":"validate"](n,Object.assign({abortEarly:!1},t,{context:i}))).then(function(e){return o.shouldUseNativeValidation&&Ut({},o),{values:r.raw?Object.assign({},n):e,errors:{}}}))}catch(e){return s(e)}return l&&l.then?l.then(void 0,s):l}(0,function(e){if(!e.inner)throw e;return{values:{},errors:Lt((t=e,r=!o.shouldUseNativeValidation&&"all"===o.criteriaMode,(t.inner||[]).reduce(function(e,t){if(e[t.path]||(e[t.path]={message:t.message,type:t.type}),r){var n=e[t.path].types,i=n&&n[t.type];e[t.path]=Xe(t.path,r,e,t.type,i?[].concat(i,t.message):t.message)}return e},{})),o)};var t,r}))}catch(e){return Promise.reject(e)}}}var Vt=r(3668),Mt=r(5714),jt=r(2981),zt=r.n(jt);const Bt=Object.prototype.toString,qt=Error.prototype.toString,Gt=RegExp.prototype.toString,Kt="undefined"!=typeof Symbol?Symbol.prototype.toString:()=>"",$t=/^Symbol\((.*)\)(.*)$/;function Ht(e,t=!1){if(null==e||!0===e||!1===e)return""+e;const r=typeof e;if("number"===r)return function(e){return e!=+e?"NaN":0===e&&1/e<0?"-0":""+e}(e);if("string"===r)return t?`"${e}"`:e;if("function"===r)return"[Function "+(e.name||"anonymous")+"]";if("symbol"===r)return Kt.call(e).replace($t,"Symbol($1)");const n=Bt.call(e).slice(8,-1);return"Date"===n?isNaN(e.getTime())?""+e:e.toISOString(e):"Error"===n||e instanceof Error?"["+qt.call(e)+"]":"RegExp"===n?Gt.call(e):null}function Wt(e,t){let r=Ht(e,t);return null!==r?r:JSON.stringify(e,function(e,r){let n=Ht(this[e],t);return null!==n?n:r},2)}function Yt(e){return null==e?[]:[].concat(e)}let Xt,Jt,Zt,Qt=/\$\{\s*(\w+)\s*\}/g;Xt=Symbol.toStringTag;class er{constructor(e,t,r,n){this.name=void 0,this.message=void 0,this.value=void 0,this.path=void 0,this.type=void 0,this.params=void 0,this.errors=void 0,this.inner=void 0,this[Xt]="Error",this.name="ValidationError",this.value=t,this.path=r,this.type=n,this.errors=[],this.inner=[],Yt(e).forEach(e=>{if(tr.isError(e)){this.errors.push(...e.errors);const t=e.inner.length?e.inner:[e];this.inner.push(...t)}else this.errors.push(e)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0]}}Jt=Symbol.hasInstance,Zt=Symbol.toStringTag;class tr extends Error{static formatError(e,t){const r=t.label||t.path||"this";return t=Object.assign({},t,{path:r,originalPath:t.path}),"string"==typeof e?e.replace(Qt,(e,r)=>Wt(t[r])):"function"==typeof e?e(t):e}static isError(e){return e&&"ValidationError"===e.name}constructor(e,t,r,n,i){const o=new er(e,t,r,n);if(i)return o;super(),this.value=void 0,this.path=void 0,this.type=void 0,this.params=void 0,this.errors=[],this.inner=[],this[Zt]="Error",this.name=o.name,this.message=o.message,this.type=o.type,this.value=o.value,this.path=o.path,this.errors=o.errors,this.inner=o.inner,Error.captureStackTrace&&Error.captureStackTrace(this,tr)}static[Jt](e){return er[Symbol.hasInstance](e)||super[Symbol.hasInstance](e)}}let rr={default:"${path} is invalid",required:"${path} is a required field",defined:"${path} must be defined",notNull:"${path} cannot be null",oneOf:"${path} must be one of the following values: ${values}",notOneOf:"${path} must not be one of the following values: ${values}",notType:({path:e,type:t,value:r,originalValue:n})=>{const i=null!=n&&n!==r?` (cast from the value \`${Wt(n,!0)}\`).`:".";return"mixed"!==t?`${e} must be a \`${t}\` type, but the final value was: \`${Wt(r,!0)}\``+i:`${e} must match the configured type. The validated value was: \`${Wt(r,!0)}\``+i}},nr={length:"${path} must be exactly ${length} characters",min:"${path} must be at least ${min} characters",max:"${path} must be at most ${max} characters",matches:'${path} must match the following: "${regex}"',email:"${path} must be a valid email",url:"${path} must be a valid URL",uuid:"${path} must be a valid UUID",datetime:"${path} must be a valid ISO date-time",datetime_precision:"${path} must be a valid ISO date-time with a sub-second precision of exactly ${precision} digits",datetime_offset:'${path} must be a valid ISO date-time with UTC "Z" timezone',trim:"${path} must be a trimmed string",lowercase:"${path} must be a lowercase string",uppercase:"${path} must be a upper case string"},ir={min:"${path} must be greater than or equal to ${min}",max:"${path} must be less than or equal to ${max}",lessThan:"${path} must be less than ${less}",moreThan:"${path} must be greater than ${more}",positive:"${path} must be a positive number",negative:"${path} must be a negative number",integer:"${path} must be an integer"},or={min:"${path} field must be later than ${min}",max:"${path} field must be at earlier than ${max}"},ar={isValue:"${path} field must be ${value}"},sr={noUnknown:"${path} field has unspecified keys: ${unknown}",exact:"${path} object contains unknown properties: ${properties}"},lr={min:"${path} field must have at least ${min} items",max:"${path} field must have less than or equal to ${max} items",length:"${path} must have ${length} items"},ur={notType:e=>{const{path:t,value:r,spec:n}=e,i=n.types.length;if(Array.isArray(r)){if(r.lengthi)return`${t} tuple value has too many items, expected a length of ${i} but got ${r.length} for value: \`${Wt(r,!0)}\``}return tr.formatError(rr.notType,e)}};Object.assign(Object.create(null),{mixed:rr,string:nr,number:ir,date:or,object:sr,array:lr,boolean:ar,tuple:ur});const cr=e=>e&&e.__isYupSchema__;class dr{static fromOptions(e,t){if(!t.then&&!t.otherwise)throw new TypeError("either `then:` or `otherwise:` is required for `when()` conditions");let{is:r,then:n,otherwise:i}=t,o="function"==typeof r?r:(...e)=>e.every(e=>e===r);return new dr(e,(e,t)=>{var r;let a=o(...e)?n:i;return null!=(r=null==a?void 0:a(t))?r:t})}constructor(e,t){this.fn=void 0,this.refs=e,this.refs=e,this.fn=t}resolve(e,t){let r=this.refs.map(e=>e.getValue(null==t?void 0:t.value,null==t?void 0:t.parent,null==t?void 0:t.context)),n=this.fn(r,e,t);if(void 0===n||n===e)return e;if(!cr(n))throw new TypeError("conditions must return a schema object");return n.resolve(t)}}const fr="$",pr=".";class hr{constructor(e,t={}){if(this.key=void 0,this.isContext=void 0,this.isValue=void 0,this.isSibling=void 0,this.path=void 0,this.getter=void 0,this.map=void 0,"string"!=typeof e)throw new TypeError("ref must be a string, got: "+e);if(this.key=e.trim(),""===e)throw new TypeError("ref must be a non-empty string");this.isContext=this.key[0]===fr,this.isValue=this.key[0]===pr,this.isSibling=!this.isContext&&!this.isValue;let r=this.isContext?fr:this.isValue?pr:"";this.path=this.key.slice(r.length),this.getter=this.path&&(0,Vt.getter)(this.path,!0),this.map=t.map}getValue(e,t,r){let n=this.isContext?r:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,null==t?void 0:t.parent,null==t?void 0:t.context)}resolve(){return this}describe(){return{type:"ref",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}}hr.prototype.__isYupRef=!0;const mr=e=>null==e;function _r(e){function t({value:t,path:r="",options:n,originalValue:i,schema:o},a,s){const{name:l,test:u,params:c,message:d,skipAbsent:f}=e;let{parent:p,context:h,abortEarly:m=o.spec.abortEarly,disableStackTrace:_=o.spec.disableStackTrace}=n;const g={value:t,parent:p,context:h};function v(e={}){const n=gr(Object.assign({value:t,originalValue:i,label:o.spec.label,path:e.path||r,spec:o.spec,disableStackTrace:e.disableStackTrace||_},c,e.params),g),a=new tr(tr.formatError(e.message||d,n),t,n.path,e.type||l,n.disableStackTrace);return a.params=n,a}const y=m?a:s;let b={path:r,parent:p,type:l,from:n.from,createError:v,resolve:e=>vr(e,g),options:n,originalValue:i,schema:o};const E=e=>{tr.isError(e)?y(e):e?s(null):y(v())},O=e=>{tr.isError(e)?y(e):a(e)};if(f&&mr(t))return E(!0);let I;try{var w;if(I=u.call(b,t,b),"function"==typeof(null==(w=I)?void 0:w.then)){if(n.sync)throw new Error(`Validation test of type: "${b.type}" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`);return Promise.resolve(I).then(E,O)}}catch(e){return void O(e)}E(I)}return t.OPTIONS=e,t}function gr(e,t){if(!e)return e;for(const r of Object.keys(e))e[r]=vr(e[r],t);return e}function vr(e,t){return hr.isRef(e)?e.getValue(t.value,t.parent,t.context):e}function yr(e,t,r,n=r){let i,o,a;return t?((0,Vt.forEach)(t,(s,l,u)=>{let c=l?s.slice(1,s.length-1):s,d="tuple"===(e=e.resolve({context:n,parent:i,value:r})).type,f=u?parseInt(c,10):0;if(e.innerType||d){if(d&&!u)throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part "${a}" must contain an index to the tuple element, e.g. "${a}[0]"`);if(r&&f>=r.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${s}, in the path: ${t}. because there is no value at that index. `);i=r,r=r&&r[f],e=d?e.spec.types[f]:e.innerType}if(!u){if(!e.fields||!e.fields[c])throw new Error(`The schema does not contain the path: ${t}. (failed at: ${a} which is a type: "${e.type}")`);i=r,r=r&&r[c],e=e.fields[c]}o=c,a=l?"["+s+"]":"."+s}),{schema:e,parent:i,parentPath:o}):{parent:i,parentPath:t,schema:e}}class br extends Set{describe(){const e=[];for(const t of this.values())e.push(hr.isRef(t)?t.describe():t);return e}resolveAll(e){let t=[];for(const r of this.values())t.push(e(r));return t}clone(){return new br(this.values())}merge(e,t){const r=this.clone();return e.forEach(e=>r.add(e)),t.forEach(e=>r.delete(e)),r}}function Er(e,t=new Map){if(cr(e)||!e||"object"!=typeof e)return e;if(t.has(e))return t.get(e);let r;if(e instanceof Date)r=new Date(e.getTime()),t.set(e,r);else if(e instanceof RegExp)r=new RegExp(e),t.set(e,r);else if(Array.isArray(e)){r=new Array(e.length),t.set(e,r);for(let n=0;n({message:e,path:Or(r)}))}(e,t);const n=t?`${t}.${e.path}`:e.path;return e.inner.flatMap(e=>Ir(e,n))}class wr{constructor(e){this.type=void 0,this.deps=[],this.tests=void 0,this.transforms=void 0,this.conditions=[],this._mutate=void 0,this.internalTests={},this._whitelist=new br,this._blacklist=new br,this.exclusiveTests=Object.create(null),this._typeCheck=void 0,this.spec=void 0,this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(rr.notType)}),this.type=e.type,this._typeCheck=e.check,this.spec=Object.assign({strip:!1,strict:!1,abortEarly:!0,recursive:!0,disableStackTrace:!1,nullable:!1,optional:!0,coerce:!0},null==e?void 0:e.spec),this.withMutation(e=>{e.nonNullable()})}get _type(){return this.type}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;const t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeCheck=this._typeCheck,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.internalTests=Object.assign({},this.internalTests),t.exclusiveTests=Object.assign({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=Er(Object.assign({},this.spec,e)),t}label(e){let t=this.clone();return t.spec.label=e,t}meta(...e){if(0===e.length)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let r=e(this);return this._mutate=t,r}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&"mixed"!==this.type)throw new TypeError(`You cannot \`concat()\` schema's of different types: ${this.type} and ${e.type}`);let t=this,r=e.clone();const n=Object.assign({},t.spec,r.spec);return r.spec=n,r.internalTests=Object.assign({},t.internalTests,r.internalTests),r._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),r._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),r.tests=t.tests,r.exclusiveTests=t.exclusiveTests,r.withMutation(t=>{e.tests.forEach(e=>{t.test(e.OPTIONS)})}),r.transforms=[...t.transforms,...r.transforms],r}isType(e){return null==e?!(!this.spec.nullable||null!==e)||!(!this.spec.optional||void 0!==e):this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let r=t.conditions;t=t.clone(),t.conditions=[],t=r.reduce((t,r)=>r.resolve(t,e),t),t=t.resolve(e)}return t}resolveOptions(e){var t,r,n,i;return Object.assign({},e,{from:e.from||[],strict:null!=(t=e.strict)?t:this.spec.strict,abortEarly:null!=(r=e.abortEarly)?r:this.spec.abortEarly,recursive:null!=(n=e.recursive)?n:this.spec.recursive,disableStackTrace:null!=(i=e.disableStackTrace)?i:this.spec.disableStackTrace})}cast(e,t={}){let r=this.resolve(Object.assign({},t,{value:e})),n="ignore-optionality"===t.assert,i=r._cast(e,t);if(!1!==t.assert&&!r.isType(i)){if(n&&mr(i))return i;let o=Wt(e),a=Wt(i);throw new TypeError(`The value of ${t.path||"field"} could not be cast to a value that satisfies the schema type: "${r.type}". \n\nattempted value: ${o} \n`+(a!==o?`result of cast: ${a}`:""))}return i}_cast(e,t){let r=void 0===e?e:this.transforms.reduce((r,n)=>n.call(this,r,e,this,t),e);return void 0===r&&(r=this.getDefault(t)),r}_validate(e,t={},r,n){let{path:i,originalValue:o=e,strict:a=this.spec.strict}=t,s=e;a||(s=this._cast(s,Object.assign({assert:!1},t)));let l=[];for(let e of Object.values(this.internalTests))e&&l.push(e);this.runTests({path:i,value:s,originalValue:o,options:t,tests:l},r,e=>{if(e.length)return n(e,s);this.runTests({path:i,value:s,originalValue:o,options:t,tests:this.tests},r,n)})}runTests(e,t,r){let n=!1,{tests:i,value:o,originalValue:a,path:s,options:l}=e,u=e=>{n||(n=!0,t(e,o))},c=e=>{n||(n=!0,r(e,o))},d=i.length,f=[];if(!d)return c([]);let p={value:o,originalValue:a,path:s,options:l,schema:this};for(let e=0;ethis.resolve(u)._validate(l,u,t,r)}validate(e,t){var r;let n=this.resolve(Object.assign({},t,{value:e})),i=null!=(r=null==t?void 0:t.disableStackTrace)?r:n.spec.disableStackTrace;return new Promise((r,o)=>n._validate(e,t,(e,t)=>{tr.isError(e)&&(e.value=t),o(e)},(e,t)=>{e.length?o(new tr(e,t,void 0,void 0,i)):r(t)}))}validateSync(e,t){var r;let n,i=this.resolve(Object.assign({},t,{value:e})),o=null!=(r=null==t?void 0:t.disableStackTrace)?r:i.spec.disableStackTrace;return i._validate(e,Object.assign({},t,{sync:!0}),(e,t)=>{throw tr.isError(e)&&(e.value=t),e},(t,r)=>{if(t.length)throw new tr(t,e,void 0,void 0,o);n=r}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,e=>{if(tr.isError(e))return!1;throw e})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(e){if(tr.isError(e))return!1;throw e}}_getDefault(e){let t=this.spec.default;return null==t?t:"function"==typeof t?t.call(this,e):Er(t)}getDefault(e){return this.resolve(e||{})._getDefault(e)}default(e){if(0===arguments.length)return this._getDefault();return this.clone({default:e})}strict(e=!0){return this.clone({strict:e})}nullability(e,t){const r=this.clone({nullable:e});return r.internalTests.nullable=_r({message:t,name:"nullable",test(e){return null!==e||this.schema.spec.nullable}}),r}optionality(e,t){const r=this.clone({optional:e});return r.internalTests.optionality=_r({message:t,name:"optionality",test(e){return void 0!==e||this.schema.spec.optional}}),r}optional(){return this.optionality(!0)}defined(e=rr.defined){return this.optionality(!1,e)}nullable(){return this.nullability(!0)}nonNullable(e=rr.notNull){return this.nullability(!1,e)}required(e=rr.required){return this.clone().withMutation(t=>t.nonNullable(e).defined(e))}notRequired(){return this.clone().withMutation(e=>e.nullable().optional())}transform(e){let t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(t=1===e.length?"function"==typeof e[0]?{test:e[0]}:e[0]:2===e.length?{name:e[0],test:e[1]}:{name:e[0],message:e[1],test:e[2]},void 0===t.message&&(t.message=rr.default),"function"!=typeof t.test)throw new TypeError("`test` is a required parameters");let r=this.clone(),n=_r(t),i=t.exclusive||t.name&&!0===r.exclusiveTests[t.name];if(t.exclusive&&!t.name)throw new TypeError("Exclusive tests must provide a unique `name` identifying the test");return t.name&&(r.exclusiveTests[t.name]=!!t.exclusive),r.tests=r.tests.filter(e=>{if(e.OPTIONS.name===t.name){if(i)return!1;if(e.OPTIONS.test===n.OPTIONS.test)return!1}return!0}),r.tests.push(n),r}when(e,t){Array.isArray(e)||"string"==typeof e||(t=e,e=".");let r=this.clone(),n=Yt(e).map(e=>new hr(e));return n.forEach(e=>{e.isSibling&&r.deps.push(e.key)}),r.conditions.push("function"==typeof t?new dr(n,t):dr.fromOptions(n,t)),r}typeError(e){let t=this.clone();return t.internalTests.typeError=_r({message:e,name:"typeError",skipAbsent:!0,test(e){return!!this.schema._typeCheck(e)||this.createError({params:{type:this.schema.type}})}}),t}oneOf(e,t=rr.oneOf){let r=this.clone();return e.forEach(e=>{r._whitelist.add(e),r._blacklist.delete(e)}),r.internalTests.whiteList=_r({message:t,name:"oneOf",skipAbsent:!0,test(e){let t=this.schema._whitelist,r=t.resolveAll(this.resolve);return!!r.includes(e)||this.createError({params:{values:Array.from(t).join(", "),resolved:r}})}}),r}notOneOf(e,t=rr.notOneOf){let r=this.clone();return e.forEach(e=>{r._blacklist.add(e),r._whitelist.delete(e)}),r.internalTests.blacklist=_r({message:t,name:"notOneOf",test(e){let t=this.schema._blacklist,r=t.resolveAll(this.resolve);return!r.includes(e)||this.createError({params:{values:Array.from(t).join(", "),resolved:r}})}}),r}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(e){const t=(e?this.resolve(e):this).clone(),{label:r,meta:n,optional:i,nullable:o}=t.spec,a={meta:n,label:r,optional:i,nullable:o,default:t.getDefault(e),type:t.type,oneOf:t._whitelist.describe(),notOneOf:t._blacklist.describe(),tests:t.tests.filter((e,t,r)=>r.findIndex(t=>t.OPTIONS.name===e.OPTIONS.name)===t).map(t=>{const r=t.OPTIONS.params&&e?gr(Object.assign({},t.OPTIONS.params),e):t.OPTIONS.params;return{name:t.OPTIONS.name,params:r}})};return a}get"~standard"(){const e=this;return{version:1,vendor:"yup",async validate(t){try{return{value:await e.validate(t,{abortEarly:!1})}}catch(e){if(e instanceof tr)return{issues:Ir(e)};throw e}}}}}wr.prototype.__isYupSchema__=!0;for(const e of["validate","validateSync"])wr.prototype[`${e}At`]=function(t,r,n={}){const{parent:i,parentPath:o,schema:a}=yr(this,t,r,n.context);return a[e](i&&i[o],Object.assign({},n,{parent:i,path:t}))};for(const e of["equals","is"])wr.prototype[e]=wr.prototype.oneOf;for(const e of["not","nope"])wr.prototype[e]=wr.prototype.notOneOf;const Nr=()=>!0;class Rr extends wr{constructor(e){super("function"==typeof e?{type:"mixed",check:e}:Object.assign({type:"mixed",check:Nr},e))}}function Sr(){return new xr}Rr.prototype;class xr extends wr{constructor(){super({type:"boolean",check:e=>(e instanceof Boolean&&(e=e.valueOf()),"boolean"==typeof e)}),this.withMutation(()=>{this.transform((e,t)=>{if(this.spec.coerce&&!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}isTrue(e=ar.isValue){return this.test({message:e,name:"is-value",exclusive:!0,params:{value:"true"},test:e=>mr(e)||!0===e})}isFalse(e=ar.isValue){return this.test({message:e,name:"is-value",exclusive:!0,params:{value:"false"},test:e=>mr(e)||!1===e})}default(e){return super.default(e)}defined(e){return super.defined(e)}optional(){return super.optional()}required(e){return super.required(e)}notRequired(){return super.notRequired()}nullable(){return super.nullable()}nonNullable(e){return super.nonNullable(e)}strip(e){return super.strip(e)}}Sr.prototype=xr.prototype;const Tr=/^(\d{4}|[+-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,.](\d{1,}))?)?(?:(Z)|([+-])(\d{2})(?::?(\d{2}))?)?)?$/;function Ar(e){var t,r;const n=Tr.exec(e);return n?{year:Dr(n[1]),month:Dr(n[2],1)-1,day:Dr(n[3],1),hour:Dr(n[4]),minute:Dr(n[5]),second:Dr(n[6]),millisecond:n[7]?Dr(n[7].substring(0,3)):0,precision:null!=(t=null==(r=n[7])?void 0:r.length)?t:void 0,z:n[8]||void 0,plusMinus:n[9]||void 0,hourOffset:Dr(n[10]),minuteOffset:Dr(n[11])}:null}function Dr(e,t=0){return Number(e)||t}let Cr=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Ur=/^((https?|ftp):)?\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,Lr=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,Pr=new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}(:?\\d{2})?)|Z)$"),kr=e=>mr(e)||e===e.trim(),Fr={}.toString();function Vr(){return new Mr}class Mr extends wr{constructor(){super({type:"string",check:e=>(e instanceof String&&(e=e.valueOf()),"string"==typeof e)}),this.withMutation(()=>{this.transform((e,t)=>{if(!this.spec.coerce||this.isType(e))return e;if(Array.isArray(e))return e;const r=null!=e&&e.toString?e.toString():e;return r===Fr?e:r})})}required(e){return super.required(e).withMutation(t=>t.test({message:e||rr.required,name:"required",skipAbsent:!0,test:e=>!!e.length}))}notRequired(){return super.notRequired().withMutation(e=>(e.tests=e.tests.filter(e=>"required"!==e.OPTIONS.name),e))}length(e,t=nr.length){return this.test({message:t,name:"length",exclusive:!0,params:{length:e},skipAbsent:!0,test(t){return t.length===this.resolve(e)}})}min(e,t=nr.min){return this.test({message:t,name:"min",exclusive:!0,params:{min:e},skipAbsent:!0,test(t){return t.length>=this.resolve(e)}})}max(e,t=nr.max){return this.test({name:"max",exclusive:!0,message:t,params:{max:e},skipAbsent:!0,test(t){return t.length<=this.resolve(e)}})}matches(e,t){let r,n,i=!1;return t&&("object"==typeof t?({excludeEmptyString:i=!1,message:r,name:n}=t):r=t),this.test({name:n||"matches",message:r||nr.matches,params:{regex:e},skipAbsent:!0,test:t=>""===t&&i||-1!==t.search(e)})}email(e=nr.email){return this.matches(Cr,{name:"email",message:e,excludeEmptyString:!0})}url(e=nr.url){return this.matches(Ur,{name:"url",message:e,excludeEmptyString:!0})}uuid(e=nr.uuid){return this.matches(Lr,{name:"uuid",message:e,excludeEmptyString:!1})}datetime(e){let t,r,n="";return e&&("object"==typeof e?({message:n="",allowOffset:t=!1,precision:r}=e):n=e),this.matches(Pr,{name:"datetime",message:n||nr.datetime,excludeEmptyString:!0}).test({name:"datetime_offset",message:n||nr.datetime_offset,params:{allowOffset:t},skipAbsent:!0,test:e=>{if(!e||t)return!0;const r=Ar(e);return!!r&&!!r.z}}).test({name:"datetime_precision",message:n||nr.datetime_precision,params:{precision:r},skipAbsent:!0,test:e=>{if(!e||null==r)return!0;const t=Ar(e);return!!t&&t.precision===r}})}ensure(){return this.default("").transform(e=>null===e?"":e)}trim(e=nr.trim){return this.transform(e=>null!=e?e.trim():e).test({message:e,name:"trim",test:kr})}lowercase(e=nr.lowercase){return this.transform(e=>mr(e)?e:e.toLowerCase()).test({message:e,name:"string_case",exclusive:!0,skipAbsent:!0,test:e=>mr(e)||e===e.toLowerCase()})}uppercase(e=nr.uppercase){return this.transform(e=>mr(e)?e:e.toUpperCase()).test({message:e,name:"string_case",exclusive:!0,skipAbsent:!0,test:e=>mr(e)||e===e.toUpperCase()})}}Vr.prototype=Mr.prototype;class jr extends wr{constructor(){super({type:"number",check:e=>(e instanceof Number&&(e=e.valueOf()),"number"==typeof e&&!(e=>e!=+e)(e))}),this.withMutation(()=>{this.transform((e,t)=>{if(!this.spec.coerce)return e;let r=e;if("string"==typeof r){if(r=r.replace(/\s/g,""),""===r)return NaN;r=+r}return this.isType(r)||null===r?r:parseFloat(r)})})}min(e,t=ir.min){return this.test({message:t,name:"min",exclusive:!0,params:{min:e},skipAbsent:!0,test(t){return t>=this.resolve(e)}})}max(e,t=ir.max){return this.test({message:t,name:"max",exclusive:!0,params:{max:e},skipAbsent:!0,test(t){return t<=this.resolve(e)}})}lessThan(e,t=ir.lessThan){return this.test({message:t,name:"max",exclusive:!0,params:{less:e},skipAbsent:!0,test(t){return tthis.resolve(e)}})}positive(e=ir.positive){return this.moreThan(0,e)}negative(e=ir.negative){return this.lessThan(0,e)}integer(e=ir.integer){return this.test({name:"integer",message:e,skipAbsent:!0,test:e=>Number.isInteger(e)})}truncate(){return this.transform(e=>mr(e)?e:0|e)}round(e){var t;let r=["ceil","floor","round","trunc"];if("trunc"===(e=(null==(t=e)?void 0:t.toLowerCase())||"round"))return this.truncate();if(-1===r.indexOf(e.toLowerCase()))throw new TypeError("Only valid options for round() are: "+r.join(", "));return this.transform(t=>mr(t)?t:Math[e](t))}}jr.prototype;let zr=new Date("");function Br(){return new qr}class qr extends wr{constructor(){super({type:"date",check(e){return t=e,"[object Date]"===Object.prototype.toString.call(t)&&!isNaN(e.getTime());var t}}),this.withMutation(()=>{this.transform((e,t)=>!this.spec.coerce||this.isType(e)||null===e?e:(e=function(e){const t=Ar(e);if(!t)return Date.parse?Date.parse(e):Number.NaN;if(void 0===t.z&&void 0===t.plusMinus)return new Date(t.year,t.month,t.day,t.hour,t.minute,t.second,t.millisecond).valueOf();let r=0;return"Z"!==t.z&&void 0!==t.plusMinus&&(r=60*t.hourOffset+t.minuteOffset,"+"===t.plusMinus&&(r=0-r)),Date.UTC(t.year,t.month,t.day,t.hour,t.minute+r,t.second,t.millisecond)}(e),isNaN(e)?qr.INVALID_DATE:new Date(e)))})}prepareParam(e,t){let r;if(hr.isRef(e))r=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\`${t}\` must be a Date or a value that can be \`cast()\` to a Date`);r=n}return r}min(e,t=or.min){let r=this.prepareParam(e,"min");return this.test({message:t,name:"min",exclusive:!0,params:{min:e},skipAbsent:!0,test(e){return e>=this.resolve(r)}})}max(e,t=or.max){let r=this.prepareParam(e,"max");return this.test({message:t,name:"max",exclusive:!0,params:{max:e},skipAbsent:!0,test(e){return e<=this.resolve(r)}})}}function Gr(e,t){let r=1/0;return e.some((e,n)=>{var i;if(null!=(i=t.path)&&i.includes(e))return r=n,!0}),r}function Kr(e){return(t,r)=>Gr(e,t)-Gr(e,r)}qr.INVALID_DATE=zr,Br.prototype=qr.prototype,Br.INVALID_DATE=zr;const $r=(e,t,r)=>{if("string"!=typeof e)return e;let n=e;try{n=JSON.parse(e)}catch(e){}return r.isType(n)?n:e};function Hr(e){if("fields"in e){const t={};for(const[r,n]of Object.entries(e.fields))t[r]=Hr(n);return e.setFields(t)}if("array"===e.type){const t=e.optional();return t.innerType&&(t.innerType=Hr(t.innerType)),t}return"tuple"===e.type?e.optional().clone({types:e.spec.types.map(Hr)}):"optional"in e?e.optional():e}let Wr=e=>"[object Object]"===Object.prototype.toString.call(e);function Yr(e,t){let r=Object.keys(e.fields);return Object.keys(t).filter(e=>-1===r.indexOf(e))}const Xr=Kr([]);function Jr(e){return new Zr(e)}class Zr extends wr{constructor(e){super({type:"object",check:e=>Wr(e)||"function"==typeof e}),this.fields=Object.create(null),this._sortErrors=Xr,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{e&&this.shape(e)})}_cast(e,t={}){var r;let n=super._cast(e,t);if(void 0===n)return this.getDefault(t);if(!this._typeCheck(n))return n;let i=this.fields,o=null!=(r=t.stripUnknown)?r:this.spec.noUnknown,a=[].concat(this._nodes,Object.keys(n).filter(e=>!this._nodes.includes(e))),s={},l=Object.assign({},t,{parent:s,__validating:t.__validating||!1}),u=!1;for(const e of a){let r=i[e],a=e in n,c=n[e];if(r){let i;l.path=(t.path?`${t.path}.`:"")+e,r=r.resolve({value:c,context:t.context,parent:s});let o=r instanceof wr?r.spec:void 0,a=null==o?void 0:o.strict;if(null!=o&&o.strip){u=u||e in n;continue}i=t.__validating&&a?c:r.cast(c,l),void 0!==i&&(s[e]=i)}else a&&!o&&(s[e]=c);a===e in s&&s[e]===c||(u=!0)}return u?s:n}_validate(e,t={},r,n){let{from:i=[],originalValue:o=e,recursive:a=this.spec.recursive}=t;t.from=[{schema:this,value:o},...i],t.__validating=!0,t.originalValue=o,super._validate(e,t,r,(e,i)=>{if(!a||!Wr(i))return void n(e,i);o=o||i;let s=[];for(let e of this._nodes){let r=this.fields[e];r&&!hr.isRef(r)&&s.push(r.asNestedTest({options:t,key:e,parent:i,parentPath:t.path,originalParent:o}))}this.runTests({tests:s,value:i,originalValue:o,options:t},r,t=>{n(t.sort(this._sortErrors).concat(e),i)})})}clone(e){const t=super.clone(e);return t.fields=Object.assign({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),r=t.fields;for(let[e,t]of Object.entries(this.fields)){const n=r[e];r[e]=void 0===n?t:n}return t.withMutation(t=>t.setFields(r,[...this._excludedEdges,...e._excludedEdges]))}_getDefault(e){if("default"in this.spec)return super._getDefault(e);if(!this._nodes.length)return;let t={};return this._nodes.forEach(r=>{var n;const i=this.fields[r];let o=e;null!=(n=o)&&n.value&&(o=Object.assign({},o,{parent:o.value,value:o.value[r]})),t[r]=i&&"getDefault"in i?i.getDefault(o):void 0}),t}setFields(e,t){let r=this.clone();return r.fields=e,r._nodes=function(e,t=[]){let r=[],n=new Set,i=new Set(t.map(([e,t])=>`${e}-${t}`));function o(e,t){let o=(0,Vt.split)(e)[0];n.add(o),i.has(`${t}-${o}`)||r.push([t,o])}for(const t of Object.keys(e)){let r=e[t];n.add(t),hr.isRef(r)&&r.isSibling?o(r.path,t):cr(r)&&"deps"in r&&r.deps.forEach(e=>o(e,t))}return zt().array(Array.from(n),r).reverse()}(e,t),r._sortErrors=Kr(Object.keys(e)),t&&(r._excludedEdges=t),r}shape(e,t=[]){return this.clone().withMutation(r=>{let n=r._excludedEdges;return t.length&&(Array.isArray(t[0])||(t=[t]),n=[...r._excludedEdges,...t]),r.setFields(Object.assign(r.fields,e),n)})}partial(){const e={};for(const[t,r]of Object.entries(this.fields))e[t]="optional"in r&&r.optional instanceof Function?r.optional():r;return this.setFields(e)}deepPartial(){return Hr(this)}pick(e){const t={};for(const r of e)this.fields[r]&&(t[r]=this.fields[r]);return this.setFields(t,this._excludedEdges.filter(([t,r])=>e.includes(t)&&e.includes(r)))}omit(e){const t=[];for(const r of Object.keys(this.fields))e.includes(r)||t.push(r);return this.pick(t)}from(e,t,r){let n=(0,Vt.getter)(e,!0);return this.transform(i=>{if(!i)return i;let o=i;return((e,t)=>{const r=[...(0,Vt.normalizePath)(t)];if(1===r.length)return r[0]in e;let n=r.pop(),i=(0,Vt.getter)((0,Vt.join)(r),!0)(e);return!(!i||!(n in i))})(i,e)&&(o=Object.assign({},i),r||delete o[e],o[t]=n(i)),o})}json(){return this.transform($r)}exact(e){return this.test({name:"exact",exclusive:!0,message:e||sr.exact,test(e){if(null==e)return!0;const t=Yr(this.schema,e);return 0===t.length||this.createError({params:{properties:t.join(", ")}})}})}stripUnknown(){return this.clone({noUnknown:!0})}noUnknown(e=!0,t=sr.noUnknown){"boolean"!=typeof e&&(t=e,e=!0);let r=this.test({name:"noUnknown",exclusive:!0,message:t,test(t){if(null==t)return!0;const r=Yr(this.schema,t);return!e||0===r.length||this.createError({params:{unknown:r.join(", ")}})}});return r.spec.noUnknown=e,r}unknown(e=!0,t=sr.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>{if(!t)return t;const r={};for(const n of Object.keys(t))r[e(n)]=t[n];return r})}camelCase(){return this.transformKeys(Mt.camelCase)}snakeCase(){return this.transformKeys(Mt.snakeCase)}constantCase(){return this.transformKeys(e=>(0,Mt.snakeCase)(e).toUpperCase())}describe(e){const t=(e?this.resolve(e):this).clone(),r=super.describe(e);r.fields={};for(const[i,o]of Object.entries(t.fields)){var n;let t=e;null!=(n=t)&&n.value&&(t=Object.assign({},t,{parent:t.value,value:t.value[i]})),r.fields[i]=o.describe(t)}return r}}Jr.prototype=Zr.prototype;class Qr extends wr{constructor(e){super({type:"array",spec:{types:e},check:e=>Array.isArray(e)}),this.innerType=void 0,this.innerType=e}_cast(e,t){const r=super._cast(e,t);if(!this._typeCheck(r)||!this.innerType)return r;let n=!1;const i=r.map((e,i)=>{const o=this.innerType.cast(e,Object.assign({},t,{path:`${t.path||""}[${i}]`,parent:r,originalValue:e,value:e,index:i}));return o!==e&&(n=!0),o});return n?i:r}_validate(e,t={},r,n){var i;let o=this.innerType,a=null!=(i=t.recursive)?i:this.spec.recursive;null!=t.originalValue&&t.originalValue,super._validate(e,t,r,(i,s)=>{var l;if(!a||!o||!this._typeCheck(s))return void n(i,s);let u=new Array(s.length);for(let r=0;rn(e.concat(i),s))})}clone(e){const t=super.clone(e);return t.innerType=this.innerType,t}json(){return this.transform($r)}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!cr(e))throw new TypeError("`array.of()` sub-schema must be a valid yup schema not: "+Wt(e));return t.innerType=e,t.spec=Object.assign({},t.spec,{types:e}),t}length(e,t=lr.length){return this.test({message:t,name:"length",exclusive:!0,params:{length:e},skipAbsent:!0,test(t){return t.length===this.resolve(e)}})}min(e,t){return t=t||lr.min,this.test({message:t,name:"min",exclusive:!0,params:{min:e},skipAbsent:!0,test(t){return t.length>=this.resolve(e)}})}max(e,t){return t=t||lr.max,this.test({message:t,name:"max",exclusive:!0,params:{max:e},skipAbsent:!0,test(t){return t.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:null==t?[]:[].concat(t))}compact(e){let t=e?(t,r,n)=>!e(t,r,n):e=>!!e;return this.transform(e=>null!=e?e.filter(t):e)}describe(e){const t=(e?this.resolve(e):this).clone(),r=super.describe(e);if(t.innerType){var n;let i=e;null!=(n=i)&&n.value&&(i=Object.assign({},i,{parent:i.value,value:i.value[0]})),r.innerType=t.innerType.describe(i)}return r}}Qr.prototype;class en extends wr{constructor(e){super({type:"tuple",spec:{types:e},check(e){const t=this.spec.types;return Array.isArray(e)&&e.length===t.length}}),this.withMutation(()=>{this.typeError(ur.notType)})}_cast(e,t){const{types:r}=this.spec,n=super._cast(e,t);if(!this._typeCheck(n))return n;let i=!1;const o=r.map((e,r)=>{const o=e.cast(n[r],Object.assign({},t,{path:`${t.path||""}[${r}]`,parent:n,originalValue:n[r],value:n[r],index:r}));return o!==n[r]&&(i=!0),o});return i?o:n}_validate(e,t={},r,n){let i=this.spec.types;super._validate(e,t,r,(o,a)=>{var s;if(!this._typeCheck(a))return void n(o,a);let l=[];for(let[r,n]of i.entries()){var u;l[r]=n.asNestedTest({options:t,index:r,parent:a,parentPath:t.path,originalParent:null!=(u=t.originalValue)?u:e})}this.runTests({value:a,tests:l,originalValue:null!=(s=t.originalValue)?s:e,options:t},r,e=>n(e.concat(o),a))})}describe(e){const t=(e?this.resolve(e):this).clone(),r=super.describe(e);return r.innerType=t.spec.types.map((t,r)=>{var n;let i=e;return null!=(n=i)&&n.value&&(i=Object.assign({},i,{parent:i.value,value:i.value[r]})),t.describe(i)}),r}}en.prototype;const tn=Jr().test("atLeastOneRequired","Please choose at least one option to continue.",e=>!!e&&Object.values(e).some(e=>!1!==e));var rn=r(813);function nn(){const[t,r]=(0,e.useState)({width:window.innerWidth,height:window.innerHeight});return(0,e.useEffect)(()=>{function e(){r({width:window.innerWidth,height:window.innerHeight})}return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),t}function on(t,r){const n=(0,e.useRef)(null);return(0,e.useEffect)(()=>{n.current&&k.registerFormElement(n.current)},[n]),(0,e.useEffect)(()=>{k.trackStepView({stepName:r}),F(t,`${r}_started`)},[]),n}function an({children:e}){return i("p",{className:"text-6 sm:text-7 font-semibold m-block-xs","data-testid":"standard_step_title",children:e})}function sn({children:e}){return i("p",{className:"text-3 m-block-xl sm:text-4",children:e})}var ln=function(){return ln=Object.assign||function(e){for(var t,r=1,n=arguments.length;rt()})}function gn({children:e}){const{activeStep:t,stepCount:r}=oe();return i("div",{"data-testid":"step-wrapper",className:"flex justify-center",children:i(un,{className:"w-[345px] sm:!w-[418px]",hasBorder:!0,padding:"lg",children:[i("div",{className:"flex justify-between items-center mb-4",children:[i(_n,{dataTestID:"tax_referral_form_back_button"}),i(dn,{value:(t+1)/(r+.5)*100,className:"ml-4 mr-4",size:"large"}),i("div",{className:"w-[18.5px] h-[18.5px]"})]}),e]})})}mn.displayName="ChevronLeftIcon";const vn=JSON.parse('{"R_o":"14px","K4M":"16px","qEL":"24px"}');var yn=function(){return yn=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0?`Resend Code in ${t}`:"Resend Code"}(t,r);return i(wn,{"data-testid":"tax_resend_code_button",type:"button",className:"!w-full",iconPosition:"right",appearance:"subtle",fullWidthOnMobile:!0,size:nn()?.width>599?"large":"medium",onClick:e,loading:t===b.resendingCode,disabled:r>0||t===b.resendingCode,children:n})}function Rn({status:e}){const t=function(e){return b.verifyingCode===e?"Verifying Code...":b.submittingReferral===e?"Finding Pros...":"See My Pro"}(e);return i(wn,{type:"submit",className:"!w-full",fullWidthOnMobile:!0,size:nn()?.width>599?"large":"medium",id:"see_pros","data-testid":"tax_see_pros_submit",loading:"See My Pro"!==t,children:t})}In.displayName="Button";var Sn=function(){return Sn=Object.assign||function(e){for(var t,r=1,n=arguments.length;r599?"large":"medium",children:"Next"})}function An({errorText:e}){return!!e&&i("div",{"data-testid":"tax_referral_form_error_text",className:"text-2 text-red-60",children:e})}function Dn(e,t){const r=Object.entries(e),[,n]=r.find(([e])=>e===t)??[];return n}function Cn(e,t,r){return Object.keys(e).reduce(function(n,i){const o=Dn(t,r)??[];return n[i]=o.includes(e[i]||""),n},{})}function Un({title:t,subtitle:r,checkboxOptions:n,referralFieldName:o,stepName:a=`${o}_checkbox_step`}){const{optimizely:l}=(0,e.useContext)(rn.wP),u=on(l,a),{nextStep:c,activeStep:d}=oe(),{referral:f,updateReferral:p}=s(),{register:h,handleSubmit:m,formState:_}=Dt({defaultValues:Cn(n,f,o),resolver:Ft(tn)}),g=function(e){const t=Dn(e.errors,"");return t?.message}(_);return i(gn,{children:i("form",{ref:u,onSubmit:m(async function(e){const r=function(e,t){return Object.entries(e).filter(([,e])=>e).map(([e])=>e).map(e=>t[e])}(e,n);p({...f,[o]:r}),J({step:d+1,step_name:a,step_label:t.replaceAll(" "," "),answer_labels:Object.values(n),answer_values:r,form_name:re.TAX_REFERRAL_FORM}),F(l,`${a}_completed`),await c()}),children:[i(an,{children:t}),i(sn,{children:r}),i("div",{className:"m-block-xl space-y-2",children:[Object.entries(n)?.map(e=>{const t=e[0],r=e[1];return i(ce,{...h(`${t}`),name:`${t}`,label:r,"data-testid":`${t}_checkbox`,id:`${t}`,size:"sm"},t)}),i(An,{errorText:g})]}),i(Tn,{})]})})}function Ln(){return i(Un,{title:"What would you like advice on?",subtitle:"Select all that apply.",checkboxOptions:v,referralFieldName:"tax_advice",stepName:"advice_step"})}xn.displayName="ArrowRightIcon";var Pn=function(){return Pn=Object.assign||function(e){for(var t,r=1,n=arguments.length;rF(r,"tax_withholding_article_clicked"),children:["Tax Withholding",i(kn,{className:"fill-blue-50 h-2 sm:h-[18px] w-auto"})]}),i("div",{className:"h-[1px] bg-gray-40"})]}),u.includes(v.real_estate_taxes)&&i(t.FK,{children:[i("a",{href:"https://theramseysolutions.com/search/results?q=Real%20Estate%20Taxes&size=n_10_n&int_fmt=button&int_dscpn=click%20on%20suggested%20real%20estate%20article&int_dept=investing_tax_bu&int_lctn=marketing_page%20-%20text_link&int_cmpgn=tax%20form%20redirect%20to%20article",target:"_blank","data-testid":"real_estate_taxes_article_link",className:"flex justify-between no-underline text-blue-50 py-[13px] sm:py-[17px] text-3 sm:text-4",onClick:()=>F(r,"real_estate_taxes_article_clicked"),children:["Real Estate Taxes",i(kn,{className:"fill-blue-50 h-2 sm:h-[18px] w-auto"})]}),i("div",{className:"h-[1px] bg-gray-40"})]}),u.includes(v.inheritance_or_estate_taxes)&&i(t.FK,{children:[i("a",{href:"https://theramseysolutions.com/search/results?q=Inheritance%20or%20Estate%20Taxes&size=n_10_n&int_fmt=button&int_dscpn=click%20on%20suggested%20inheritance%20or%20estate%20taxes%20article&int_dept=investing_tax_bu&int_lctn=marketing_page%20-%20text_link&int_cmpgn=tax%20form%20redirect%20to%20article",target:"_blank","data-testid":"inheritance_or_estate_taxes_article_link",className:"flex justify-between no-underline text-blue-50 py-[13px] sm:py-[17px] text-3 sm:text-4",onClick:()=>F(r,"inheritance_or_estate_taxes_article_clicked"),children:["Inheritance or Estate Taxes",i(kn,{className:"fill-blue-50 h-2 sm:h-[18px] w-auto"})]}),i("div",{className:"h-[1px] bg-gray-40"})]}),i("a",{href:"https://theramseysolutions.com/search/results?q=Taxes&size=n_10_n&int_fmt=button&int_dscpn=click%20on%20suggested%20all%20tax%20articles&int_dept=investing_tax_bu&int_lctn=marketing_page%20-%20text_link&int_cmpgn=tax%20form%20redirect%20to%20article",target:"_blank","data-testid":"all_tax_articles_link",className:"flex justify-between no-underline text-blue-50 py-[13px] sm:py-[17px] text-3 sm:text-4",onClick:()=>F(r,"all_tax_articles_clicked"),children:["All Tax Articles",i(kn,{className:"fill-blue-50 h-2 sm:h-[18px] w-auto"})]})]}),i("div",{className:"text-center",children:i("button",{className:"text-2 leading-lg text-gray-70 hover:text-gray-80 hover:underline bg-transparent border-none cursor-pointer",onClick:()=>F(r,"advice_education_step_completed"),"data-testid":"continue_connecting_with_a_pro_button",children:"Continue Connecting With a Pro"})})]})]})})}kn.displayName="ChevronRightIcon";var Vn=function(){return Vn=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&v),b=le()("rds-Textarea",((n={})["rds-Textarea--".concat(p)]="md"!==p,n["is-invalid"]=c,n["is-disabled"]=l,n),i),E=(0,e.useRef)(null),O=(0,e.useState)(d),I=O[0],w=O[1],N=(0,e.useRef)(v);(0,e.useEffect)(function(){d&&void 0!==_&&w(d-_.length)},[]);var R=(0,e.useState)("auto"),S=R[0],x=R[1];(0,e.useLayoutEffect)(function(){a&&"auto"===S&&x("".concat(function(e){if(!e)return"auto";var t=Number(getComputedStyle(e).getPropertyValue("border-width").split("px")[0]),r=Math.round(t);return"".concat(e.scrollHeight+2*r)}(E.current),"px"))},[S,a]);return e.default.createElement("div",{className:b},y&&e.default.createElement("span",{className:"rds-Textarea-counter","aria-live":"polite",id:N.current},I),e.default.createElement("textarea",Vn({},g,{disabled:l,"aria-describedby":y?v:void 0,"aria-invalid":c||void 0,ref:function(e){"function"==typeof r?r(e):null!==r&&(r.current=e),E.current=e},onChange:function(e){var t=e.target.value.length;d&&w(d-t),a&&x("auto"),g.onChange&&g.onChange(e)},maxLength:d,value:_,style:Mn(m,a,S)})))});jn.displayName="Textarea";var zn=function(){return zn=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&(s["aria-describedby"]=l),s}(c,h,s,E,I,l,d),N=le()("rds-FormField",((r={})["rds-FormField--".concat(E)]="md"!==E,r["is-disabled"]=s,r["is-invalid"]=h,r["on-darkCanvas"]=_,r),o),R=le()("rds-FormField-control",((n={})["rds-FormField-control--".concat(v)]=v,n)),S=c?"fieldset":"div",x=c?"legend":"label",T=h&&l&&!s;return e.default.createElement(S,zn({},O,function(e,t){var r={};return e&&t&&(r.disabled=!0),r}(c,s),{className:N}),g&&e.default.createElement(x,zn({className:"rds-FormField-label"},function(e,t){var r={};return!e&&t&&(r.htmlFor=t),r}(c,I)),g,y&&e.default.createElement("span",{className:"rds-FormField-note"},y)),e.default.createElement("div",{className:R},i(w)),d&&e.default.createElement("p",{id:"helper-form-field-".concat(I),className:"rds-FormField-helper"},d),T&&e.default.createElement("div",{id:"error-form-field-".concat(I),role:"alert"},l.map(function(t,r){return e.default.createElement("p",{key:r,className:"rds-FormField-error"},t)})))};Bn.displayName="FormField";const qn=[/(?!e||!qn.some(t=>t.test(e)));function Kn(e){const t={};return t[e]=Gn,Jr().shape(t)}function $n(){const{optimizely:t}=(0,e.useContext)(rn.wP),r=on(t,"questions_step"),{nextStep:n,activeStep:o}=oe(),[a,l]=(0,e.useState)(""),{referral:u,updateReferral:c}=s(),{width:d}=nn(),f=Kn("tax_questions"),{register:p,handleSubmit:h,formState:m}=Dt({defaultValues:{...u},resolver:Ft(f)}),_=m.errors.tax_questions?.message;return i(gn,{children:i("form",{ref:r,onSubmit:h(async function(e){c(e),F(t,"question_step_completed"),J({step:o+1,step_name:"questions_step",step_label:"What questions do you have for your tax pro?",answer_labels:["What questions do you have for your tax pro?"],answer_values:[e.tax_questions],form_name:re.TAX_REFERRAL_FORM}),await n()}),children:[i(an,{children:"What questions do you have for your tax pro?"}),i(sn,{children:"Optional"}),i(Bn,{id:"question_box",size:"lg",children:()=>i("div",{children:i(jn,{...p("tax_questions"),size:d>599?"lg":"md",maxLength:250,id:"tax_questions_textbox","aria-describedby":"tax_questions_textbox","data-testid":"tax_questions_textbox",value:a,onChange:e=>l(e.target.value),defaultValue:""})})}),_&&i("p",{className:"text-2 text-red-60 pt-1 pb-4",children:_})||i("p",{className:"pb-4"}),i(Tn,{})]})})}const Hn=Jr().shape({phone:Vr().trim().required("Please enter your phone number.").test("test-phone","Please enter a valid phone number.",function(e=""){return G.test(e.replace(/\D/g,""))})});async function Wn(e,t,r=j()){const n=new URLSearchParams(window.location.search).get("bypass_verification")??"",i=n?.length>0?{phoneNumber:e,type:t,bypassVerificationQuery:n}:{phoneNumber:e,type:t},o=`${r}/api/phone-validation-start/`,a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!a.ok)throw new Error(a.statusText);return await a.json()}var Yn=function(){return Yn=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=s?i+=oi("0",a-s):i=(i.substring(0,a)||"0")+"."+i.substring(a),r+i}function si(e,t){if(e.value=e.value,null!==e){if(e.createTextRange){var r=e.createTextRange();return r.move("character",t),r.select(),!0}return e.selectionStart||0===e.selectionStart?(e.focus(),e.setSelectionRange(t,t),!0):(e.focus(),!1)}}Qn.displayName="PhoneIcon",function(e){e.event="event",e.props="prop"}(Zn||(Zn={}));var li,ui,ci,di=(li=function(e,t){for(var r=0,n=0,i=e.length,o=t.length;e[r]===t[r]&&rr&&i-n>r;)n++;return{from:{start:r,end:i-n},to:{start:r,end:o-n}}},ci=void 0,function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return ui&&e.length===ui.length&&e.every(function(e,t){return e===ui[t]})?ci:(ui=e,ci=li.apply(void 0,e))});function fi(e){return Math.max(e.selectionStart,e.selectionEnd)}function pi(e){return{from:{start:0,end:0},to:{start:0,end:e.length},lastValue:""}}function hi(e,t){return void 0===e&&(e=" "),"string"==typeof e?e:e[t]||" "}function mi(e){var t=e.currentValue,r=e.formattedValue,n=e.currentValueIndex,i=e.formattedValueIndex;return t[n]===r[i]}function _i(e,t,r,n){var i,o,a,s=e.length;if(i=t,o=0,a=s,t=Math.min(Math.max(i,o),a),"left"===n){for(;t>=0&&!r[t];)t--;-1===t&&(t=r.indexOf(!0))}else{for(;t<=s&&!r[t];)t++;t>s&&(t=r.lastIndexOf(!0))}return-1===t&&(t=s),t}function gi(e){for(var t=Array.from({length:e.length+1}).map(function(){return!0}),r=0,n=t.length;r0&&-1===f[_];)_--;var v=-1===_||-1===f[_]?0:f[_]+1;return v>g?g:n-v0&&t[c-1]!==i;)c--;d="left"}else{for(var f=t.length;c599?"lg":"md",{referral:f,updateReferral:p,phoneVerificationCountDown:h,updatePhoneVerificationCountDown:m}=s(),{register:_,handleSubmit:g,formState:{errors:v},setValue:y}=Dt({defaultValues:{...f},resolver:Ft(Hn)});function b(){u.current="call",r.current?.dispatchEvent(new Event("submit",{cancelable:!0}))}function E(){u.current="sms",r.current?.dispatchEvent(new Event("submit",{cancelable:!0}))}return i(gn,{children:i("form",{ref:r,onSubmit:g(async function(e){try{const r="call"===u.current?"call":"sms";l("");const i=e.phone.replaceAll(/\D/g,"");p({phone:i,verification_type:r}),await Wn(i,r),F(t,"phone_step_completed"),m(30),await n()}catch(e){l("Sorry, we couldn’t send a verification code. Try again."),console.error(e)}finally{u.current=""}J({step:o+1,step_name:"phone_step",step_label:"What's your phone number?",answer_labels:["Phone"],answer_values:[f.phone??""],form_name:re.TAX_REFERRAL_FORM})}),children:[i(an,{children:"What's your phone number?"}),i(sn,{children:["To make sure we’ve got the right number, we’ll send you a six","‑","digit"," ","code."]}),i("div",{className:"space-y-2 m-block-xl",children:i(Bn,{id:"phone",label:"Phone",size:d,invalid:!!v.phone,errors:[v.phone?.message],children:()=>i(Ii,{..._("phone"),type:"tel",id:"phone",autoComplete:"tel",defaultValue:f?.phone,size:d,invalid:!!v.phone,"data-testid":"tax_phone_input",placeholder:"(___) ___-____",format:"(###) ###-####",mask:"_",onValueChange:e=>{y("phone",e.formattedValue)},customInput:Ri})})}),h>0&&i(Fi,{phoneVerificationCountDown:h}),a&&i(ji,{errorMessage:a}),i("div",{className:"flex flex-col gap-2 items-center m-block-xl",children:[i(wn,{type:"submit",icon:Xn,className:"!w-full",fullWidthOnMobile:!0,"data-testid":"tax_text_me_button",size:nn()?.width>599?"large":"medium","aria-label":"Send verification code via text",loading:"sms"===u.current,onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||E()},onClick:()=>{E()},disabled:h>0,children:"sms"===u.current?"Texting...":"Text Me"}),i(wn,{type:"submit",icon:Qn,className:"!w-full",appearance:"subtle",fullWidthOnMobile:!0,"data-testid":"tax_call_me_button",size:c>599?"large":"medium","aria-label":"Send verification code via phone call",loading:"call"===u.current,onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||b()},onClick:()=>{b()},disabled:h>0,children:"call"===u.current?"Calling...":"Call Me"})]}),i(Ki,{})]})})}Bi.displayName="SuccessIcon";const Hi=Jr().shape({verification_code:Vr().trim().required("Please enter your six‑digit verification code.").matches(/^\d{6}$/,"Please enter a valid six‑digit verification code.")});async function Wi(e,t,r,n,i,o=j()){e.leadSource=new URLSearchParams(window.location.search).get("lead_source")??"";const a=function(e,t,r,n,i){const o={taxReferral:{firstName:e.first_name,lastName:e.last_name,email:e.email,phone:e.phone.replace(/\D/g,""),postalCode:e.postal_code,interests:e.interests,intents:e.tax_intents,questions:e.tax_questions,advice:e.tax_advice,taxHistory:e.tax_history,complexityConcern:e.complexity_concern,taxConfidence:e.tax_confidence,importance:e.importance,leadSource:e.leadSource,taxSituation:e.tax_situation,pros:[{partnerUrn:r.partner_urn,contactName:r.contact_name,companyName:r.company_name,agreement:n}],agreement:i},recaptcha:Yi(t)};return _a(r)?(a=o,s=e,{...a,taxReferral:{...a.taxReferral,phPersonalIntents:s.ph_personal_intents,phSelfEmployedSmallBusinessIntent:s.ph_self_employed_small_business_intent,phTaxIssues:s.ph_tax_issues,phTaxAdvice:s.ph_tax_advice,phSomethingElse:s.ph_something_else,phUrgency:s.ph_urgency}}):o;var a,s}(e,t,r,n,i),s=`${o}/api/referral`,l=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!l.ok)throw new Error(l.statusText);return await l.json()}function Yi(e){const t=new URLSearchParams(window.location.search).get("bypass_verification")??"";return t?{override:t}:{response:e}}var Xi=r(5606),Ji=function(){return Ji=Object.assign||function(e){for(var t,r=1,n=arguments.length;r "+Zi.SCRIPT_NOT_AVAILABLE)},onError:function(){eo("Error loading google recaptcha script")}}),function(){Qi(e,null==u?void 0:u.element)}}eo(" recaptcha key not provided")},[i,a,m,_,l,r,null==u?void 0:u.element]);var g=(0,e.useCallback)(function(e){if(!f||!f.execute)throw new Error(" Google Recaptcha has not been loaded");return f.execute(h.current,{action:e})},[f,h]),v=(0,e.useMemo)(function(){return{executeRecaptcha:f?g:void 0,container:null==u?void 0:u.element}},[g,f,null==u?void 0:u.element]);return e.default.createElement(to.Provider,{value:v},c)}var no=function(){return(0,e.useContext)(to)};function io(e,t){return e(t={exports:{}},t.exports),t.exports}var oo="function"==typeof Symbol&&Symbol.for,ao=oo?Symbol.for("react.element"):60103,so=oo?Symbol.for("react.portal"):60106,lo=oo?Symbol.for("react.fragment"):60107,uo=oo?Symbol.for("react.strict_mode"):60108,co=oo?Symbol.for("react.profiler"):60114,fo=oo?Symbol.for("react.provider"):60109,po=oo?Symbol.for("react.context"):60110,ho=oo?Symbol.for("react.async_mode"):60111,mo=oo?Symbol.for("react.concurrent_mode"):60111,_o=oo?Symbol.for("react.forward_ref"):60112,go=oo?Symbol.for("react.suspense"):60113,vo=oo?Symbol.for("react.suspense_list"):60120,yo=oo?Symbol.for("react.memo"):60115,bo=oo?Symbol.for("react.lazy"):60116,Eo=oo?Symbol.for("react.block"):60121,Oo=oo?Symbol.for("react.fundamental"):60117,Io=oo?Symbol.for("react.responder"):60118,wo=oo?Symbol.for("react.scope"):60119;function No(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case ao:switch(e=e.type){case ho:case mo:case lo:case co:case uo:case go:return e;default:switch(e=e&&e.$$typeof){case po:case _o:case bo:case yo:case fo:return e;default:return t}}case so:return t}}}function Ro(e){return No(e)===mo}var So={AsyncMode:ho,ConcurrentMode:mo,ContextConsumer:po,ContextProvider:fo,Element:ao,ForwardRef:_o,Fragment:lo,Lazy:bo,Memo:yo,Portal:so,Profiler:co,StrictMode:uo,Suspense:go,isAsyncMode:function(e){return Ro(e)||No(e)===ho},isConcurrentMode:Ro,isContextConsumer:function(e){return No(e)===po},isContextProvider:function(e){return No(e)===fo},isElement:function(e){return"object"==typeof e&&null!==e&&e.$$typeof===ao},isForwardRef:function(e){return No(e)===_o},isFragment:function(e){return No(e)===lo},isLazy:function(e){return No(e)===bo},isMemo:function(e){return No(e)===yo},isPortal:function(e){return No(e)===so},isProfiler:function(e){return No(e)===co},isStrictMode:function(e){return No(e)===uo},isSuspense:function(e){return No(e)===go},isValidElementType:function(e){return"string"==typeof e||"function"==typeof e||e===lo||e===mo||e===co||e===uo||e===go||e===vo||"object"==typeof e&&null!==e&&(e.$$typeof===bo||e.$$typeof===yo||e.$$typeof===fo||e.$$typeof===po||e.$$typeof===_o||e.$$typeof===Oo||e.$$typeof===Io||e.$$typeof===wo||e.$$typeof===Eo)},typeOf:No},xo=io(function(e,t){}),To=(xo.AsyncMode,xo.ConcurrentMode,xo.ContextConsumer,xo.ContextProvider,xo.Element,xo.ForwardRef,xo.Fragment,xo.Lazy,xo.Memo,xo.Portal,xo.Profiler,xo.StrictMode,xo.Suspense,xo.isAsyncMode,xo.isConcurrentMode,xo.isContextConsumer,xo.isContextProvider,xo.isElement,xo.isForwardRef,xo.isFragment,xo.isLazy,xo.isMemo,xo.isPortal,xo.isProfiler,xo.isStrictMode,xo.isSuspense,xo.isValidElementType,xo.typeOf,io(function(e){e.exports=So})),Ao={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Do={};Do[To.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Do[To.Memo]=Ao;Object.defineProperty,Object.getOwnPropertyNames,Object.getOwnPropertySymbols,Object.getOwnPropertyDescriptor,Object.getPrototypeOf,Object.prototype;function Co(){const{optimizely:t}=(0,e.useContext)(rn.wP),r=on(t,"verification_step"),[n,o]=(0,e.useState)(b.initial),{width:a}=nn(),[l,u]=(0,e.useState)(""),[c,d]=(0,e.useState)(""),[f,p]=(0,e.useState)(""),{referral:h,updatePhoneVerificationCountDown:m,proInfo:_}=s(),{phone:g}=h,v=z(i(Gi,{})),y=z(i(Ki,{})),{executeRecaptcha:E}=no(),{activeStep:O}=oe(),{register:I,handleSubmit:w,formState:{errors:N}}=Dt({resolver:Ft(Hi)});function R(e){e?.validated?async function(){if(J({step:O+1,step_name:"verification_step",step_label:"Enter verification code.",answer_labels:[],answer_values:[],form_name:re.TAX_REFERRAL_FORM}),!E)return console.error("Recaptcha not available"),void u("Sorry, we weren't able to connect you with any pros. Try again.");try{o(b.submittingReferral);const e=await E("verification_step");Wi(h,e,_,v,y).then(e=>{ne(e,h,_.partner_urn,t)}).catch(e=>{console.error("Create referral failure",e),u("Sorry, we weren't able to connect you with any pros. Try again."),o(b.initial)})}catch(e){console.error("reCAPTCHA execution failed",e),u("Sorry, we weren't able to connect you with any pros. Try again."),o(b.initial)}}():(o(b.initial),p("Please enter a valid six‑digit verification code."),console.warn("Twilio responded with incorrect verification code"))}return i(gn,{children:i("form",{ref:r,onSubmit:w(async function(e){u(""),p("");try{const t=await async function(e,t){const r=new URLSearchParams(window.location.search).get("bypass_verification")??"",n=r?.length>0?{phoneNumber:e,verificationCode:t,bypassVerificationQuery:r}:{phoneNumber:e,verificationCode:t};o(b.verifyingCode);const i=await fetch(`${j()}/api/phone-validation-finish/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),a=await(i?.json());if("boolean"!=typeof a?.validated)throw new Error("Invalid response from phone-validation-finish endpoint");return a}(g,e.verification_code);R(t)}catch(e){console.error(e),u("Sorry, we weren't able to verify your code. Try again."),o(b.initial)}}),children:[i(an,{children:"Enter verification code."}),i("p",{className:"text-3 text-left m-block-xl sm:text-4",children:["Next, you can look over the pros’ info to get ready for when they"," ","call."]}),i("div",{className:"space-y-2 m-block-xl",children:i(Bn,{id:"verification_code",label:"Code",size:a>599?"lg":"md",invalid:!!N?.verification_code||!!f,errors:[N?.verification_code?.message??f],children:()=>i(Ri,{...I("verification_code",{onChange:()=>p("")}),className:"!w-full",size:a>599?"lg":"md",id:"verification_code",maxLength:6,"data-testid":"tax_verification_code_input",invalid:!!N?.verification_code||!!f})})}),l&&i(ji,{errorMessage:l}),c&&i(qi,{successMessage:c}),i("div",{className:"flex flex-col gap-2 items-center mb-4",children:[i(Rn,{status:n}),i(Nn,{status:n,onClick:function(){u(""),d(""),o(b.resendingCode),Wn(h.phone,h?.verification_type??"sms").then(()=>{o(b.resendCodeSuccess),m(30),d("Code resend successful.")}).catch(e=>{o(b.initial),u("Sorry, we couldn't resend a code. Try again."),console.error(e)})}})]}),i(Gi,{})]})})}const Uo=/^[A-z\s-'.,]*$/,Lo=Jr().shape({first_name:Vr().trim().required("Please enter your first name.").min(2,"Please enter two or more characters for your first name.").max(40,"Please enter 40 characters or less for your first name.").matches(Uo,"Please enter letters (a–z) for your first name."),last_name:Vr().trim().required("Please enter your last name.").min(2,"Please enter two or more characters for your last name.").max(80,"Please enter 80 characters or less for your last name.").matches(Uo,"Please enter letters (a–z) for your last name.")});function Po(){const{optimizely:t}=(0,e.useContext)(rn.wP),r=on(t,"name_step"),{nextStep:n,activeStep:o}=oe(),{referral:a,updateReferral:l}=s(),{register:u,handleSubmit:c,formState:{errors:d},setValue:f,watch:p}=Dt({defaultValues:{...a},resolver:Ft(Lo)}),h=p("first_name")+" "+p("last_name"),{width:m}=nn(),_=m>599?"lg":"md",g=function(e){const t=e.first_name,r=e.last_name;return"required"===t?.type&&"required"===r?.type?"Please enter your first and last name.":t?t.message:r?r.message:void 0}(d);function v(e){const t=e.target.value.split(" ").filter(e=>""!==e.trim()),r=t[0]||"",n=t.length>1&&t[t.length-1]||"";f("first_name",r),f("last_name",n)}return i(gn,{children:i("form",{ref:r,onSubmit:c(async function(e){l(e),F(t,"name_step_complete"),J({step:o+1,step_name:"name_step",step_label:"What's your name?",answer_labels:["First Name","Last Name"],answer_values:[e.first_name,e.last_name],form_name:re.TAX_REFERRAL_FORM}),await n()}),children:[i("p",{className:"text-6 sm:text-7 font-semibold m-block-xl",children:"What's your name?"}),i("div",{className:"space-y-2 m-block-xl",children:[i(Bn,{id:"full_name",label:"Full Name",size:_,invalid:!!d.first_name||!!d.last_name,errors:g?[g]:[],children:()=>i(Ri,{size:_,invalid:!!d.first_name||!!d.last_name,id:"full_name","data-testid":"tax_full_name_input",autoComplete:"name",defaultValue:h,onChange:v})}),i("input",{...u("first_name"),className:"hidden","aria-hidden":!0,tabIndex:-1}),i("input",{...u("last_name"),className:"hidden","aria-hidden":!0,tabIndex:-1})]}),i("div",{className:"m-block-xl"}),i(Tn,{})]})})}const ko=Vr().trim().required("Please enter your email address.").email("Please use a valid email address.").max(80,"Please use 80 characters or less.").matches(/^.+\.[a-zA-Z]{2,}$/,"Please use a valid email address."),Fo=Jr().shape({email:ko});function Vo(){const{optimizely:t}=(0,e.useContext)(rn.wP),r=on(t,"email_step"),{nextStep:n,activeStep:o}=oe(),{referral:a,updateReferral:l}=s(),{register:u,handleSubmit:c,formState:{errors:d}}=Dt({defaultValues:{...a},resolver:Ft(Fo)}),{width:f}=nn(),p=f>599?"lg":"md";return i(gn,{children:i("form",{ref:r,onSubmit:c(async function(e){l(e),F(t,"email_step_completed"),J({step:o+1,step_name:"email_step",step_label:"What's your email info?",answer_labels:["Email"],answer_values:[e.email],form_name:re.TAX_REFERRAL_FORM}),await n()}),children:[i(an,{children:"What's your email?"}),i(sn,{children:["We'll use this to send the pros' contact info to"," ","you."]}),i("div",{className:"space-y-2 m-block-xl",children:i(Bn,{id:"email",label:"Email",size:p,invalid:!!d.email,errors:[d.email?.message],children:()=>i(Ri,{...u("email"),invalid:!!d.email,size:p,id:"email","data-testid":"tax_email_input",autoComplete:"email"})})}),i(Tn,{})]})})}var Mo=r(7654);const jo="Please enter a valid zip code.",zo=r.n(Mo)()(async function(e){const t=`https://api.drtlgi.com/location-gateway/postal-codes/?${new URLSearchParams({postal_codes:e})}`;return(await fetch(t,{method:"GET",keepalive:!0})).json()}),Bo=Jr().shape({postal_code:Vr().trim().required("Please enter your zip code.").max(5,"Please enter five characters for your zip code.").matches(/^\d{5}$/,jo).test("test-zip",jo,async e=>{if(!e)return!0;try{return(await zo(e)).length>0}catch{return console.error(`Error while fetching locations for zip code: ${e}`),!0}})});function qo(){const{optimizely:t}=(0,e.useContext)(rn.wP),r=on(t,"complexity_where_are_you_located_step"),{nextStep:n,activeStep:o}=oe(),{referral:a,updateReferral:l,updateProInfo:u}=s(),{register:c,handleSubmit:d,formState:{errors:f}}=Dt({defaultValues:{postal_code:a.postal_code},resolver:Ft(Bo)}),{width:p}=nn(),[h,m]=(0,e.useState)(!1);async function _(e){try{const t=await async function(e,t=j()){const r=`${t}/api/pro-lookup`,n={programs:["tax"],postal_code:e},i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!i.ok)throw new Error("Failed to fetch pro lookup");return(await i.json())[0]??{}}(e);u(t)}catch{console.error("ProLookup Failed")}}return i(gn,{children:[i("form",{ref:r,onSubmit:d(async function(e){m(!0),l(e),F(t,"location_step_completed"),J({step:o+1,step_name:"location_step",step_label:"We'll look for a tax pro near you (and if there are none, we'll connect you with our national partner).",answer_labels:["Zip Code"],answer_values:[e.postal_code],form_name:re.TAX_REFERRAL_FORM}),await _(e.postal_code??""),await n(),m(!1)}),children:[i(an,{children:"Where are you located?"}),i(sn,{children:"We'll find a tax pro serving your area."}),i("div",{className:"m-block-xl",children:i(Bn,{id:"zip_code",label:"Zip Code",size:p>599?"lg":"md",invalid:!!f.postal_code,errors:[f.postal_code?.message],children:()=>i(Ri,{...c("postal_code"),className:"!max-w-full",size:p>599?"lg":"md",invalid:!!f.postal_code,id:"zip_code","data-testid":"tax_zip_code_input",autoComplete:"postal-code"})})}),i(wn,{"data-testid":"standard_next_button",type:"submit",icon:h?void 0:xn,iconPosition:"right",className:"!w-full",fullWidthOnMobile:!0,size:p>599?"large":"medium",loading:h,children:h?"Loading":"Next"})]}),i(ta,{})]})}function Go(){return i(Un,{title:"What do you need help with?",subtitle:"This will give your pro an idea of how they can serve you.",checkboxOptions:g,referralFieldName:"interests",stepName:"services_step"})}function Ko(){return i(Un,{title:"How can a tax pro best support you?",subtitle:"Select all that apply.",checkboxOptions:y,referralFieldName:"tax_intents",stepName:"intent_step"})}const $o=Vr().required("Please choose one option to continue."),Ho=Jr().shape({complexity_concern:$o});var Wo=function(){return Wo=Object.assign||function(e){for(var t,r=1,n=arguments.length;ri(Yo,{"data-testid":e.toLowerCase().replace(" ","_").concat("_tax_complexity_concern_radio_tile"),...u("complexity_concern"),label:e,value:e,id:e.toLowerCase().replace(" ","_").concat("_tax_complexity_concern_radio_tile"),size:"sm"})),h&&i("p",{className:"text-2 text-red-60",children:h})]}),i(Tn,{})]})})}function Jo(){const{referral:t,proInfo:r}=s(),n=(0,e.useRef)(null),o=(0,e.useRef)(!1);function a(){o.current||(X({form_name:re.TAX_REFERRAL_FORM}),o.current=!0)}return(0,e.useEffect)(()=>{const e=n.current;if(e)return e.addEventListener("focusin",a),()=>{e.removeEventListener("focusin",a)}},[]),i("div",{ref:n,children:i(ae,{children:[i(qo,{}),i(Go,{}),ga(r)&&ca(t),!ga(r)&&da(t),fa(t),i(Xo,{}),i(Po,{}),i(Vo,{}),i($i,{}),i(Co,{})]})})}Yo.displayName="RadioTile";var Zo=function(){return Zo=Object.assign||function(e){for(var t,r=1,n=arguments.length;r599?"large":"medium",className:"!underline",target:"_blank","data-testid":"tax_b2b_link",children:["Join"," ","our"," ","program"]}),"."]})}function ra(){return i(Un,{title:"How can a tax pro best support you?",subtitle:"Select all that apply.",checkboxOptions:E,referralFieldName:"ph_personal_intents"})}function na(){return i(Un,{title:"What do you have questions about?",subtitle:"Select all that apply.",checkboxOptions:w,referralFieldName:"ph_tax_advice"})}function ia(){return i(Un,{title:"How can a tax pro best support you?",subtitle:"Select all that apply.",checkboxOptions:N,referralFieldName:"ph_self_employed_small_business_intent"})}function oa(){const{nextStep:t,activeStep:r}=oe(),{optimizely:n}=(0,e.useContext)(rn.wP),o=on(n,"ph_personal_intent_step"),{referral:a,updateReferral:l}=s(),u=Kn("situation"),{register:c,handleSubmit:d,formState:f}=Dt({defaultValues:{situation:""},resolver:Ft(u)}),p=f.errors.situation?.message;return i(gn,{children:i("form",{ref:o,onSubmit:d(async function(e){J({step:r+1,step_name:"ph_something_else_step",step_label:"Tell us more about your situation.",answer_labels:["Tell us more about your situation"],answer_values:[e.situation],form_name:re.TAX_REFERRAL_FORM}),l({...a,ph_something_else:e.situation}),F(n,"ph_something_else_step_completed"),await t()}),children:[i(an,{children:"Tell us more about your situation."}),i(sn,{children:"Optional"}),i("div",{children:i(jn,{...c("situation"),maxLength:250,id:"ph_something_else_textbox","aria-describedby":"ph_something_else_textbox","data-testid":"ph_something_else_textbox",value:a?.ph_something_else,onChange:e=>l({...a,ph_something_else:e.target.value}),defaultValue:a?.ph_something_else})}),p&&i("p",{className:"text-2 text-red-60 pt-1 pb-4",children:p})||i("p",{className:"pb-4"}),i(Tn,{})]})})}function aa(){return i(Un,{title:"What kind of tax issue are you dealing with?",subtitle:"Select all that apply.",checkboxOptions:I,referralFieldName:"ph_tax_issues"})}ea.displayName="Link";const sa=Vr().required("Please choose one option to continue."),la=Jr().shape({ph_urgency:sa});function ua(){const{nextStep:t,activeStep:r}=oe(),{optimizely:n}=(0,e.useContext)(rn.wP),o=on(n,"ph_urgency_step"),{referral:a,updateReferral:l}=s(),{register:u,handleSubmit:c,formState:d}=Dt({defaultValues:{ph_urgency:a.ph_urgency},resolver:Ft(la)}),f="When are you hoping to have this done?",p=d.errors.ph_urgency?.message;return i(gn,{children:i("form",{ref:o,onSubmit:c(async function(e){J({step:r+1,step_name:"ph_urgency_step",step_label:f,answer_labels:Object.values(O),answer_values:[e.ph_urgency],form_name:re.TAX_REFERRAL_FORM}),l({...a,ph_urgency:e.ph_urgency}),F(n,"ph_urgency_step_completed"),await t()}),children:[i(an,{children:f}),i(sn,{children:"We'll connect you right away - this just helps us understand your timeline."}),i("div",{className:"m-block-xl space-y-2",children:[Object.entries(O).map(e=>{const t=e[0],r=e[1],n=t.concat("_ph_urgency_radio_tile");return i(Yo,{"data-testid":n,...u("ph_urgency"),label:r,value:r,id:n,size:"sm"})}),p&&i("p",{className:"text-2 text-red-60",children:p})]}),i(Tn,{})]})})}function ca(e){const t=[];return pa(e)||ha(e)||t.push(i(ra,{})),(pa(e)||ha(e))&&t.push(i(ia,{})),function(e){const t=e.ph_personal_intents?.filter(e=>""!==e),r=e.ph_self_employed_small_business_intent?.filter(e=>""!==e);return!!t?.includes(E.help_with_tax_issues)||r?.includes(N.help_with_tax_issues)}(e)&&t.push(i(aa,{})),(function(e){const t=e.ph_tax_issues?.filter(e=>""!==e);return t?.includes(I.something_else)}(e)||function(e){const t=e.ph_self_employed_small_business_intent?.filter(e=>""!==e);return t?.includes(N.something_else)}(e)||function(e){const t=e.ph_personal_intents?.filter(e=>""!==e);return t?.includes(E.something_else)}(e))&&t.push(i(oa,{})),t.push(i(ua,{})),function(e){const t=e.ph_personal_intents?.filter(e=>""!==e),r=e.ph_self_employed_small_business_intent?.filter(e=>""!==e);return!!t?.includes(E.answer_general_questions)||r?.includes(N.answer_general_questions)}(e)&&t.push(i(na,{})),t}function da(e){const t=[];return pa(e)||t.push(i(Ko,{})),ma(e)&&!pa(e)&&t.push(i(Ln,{})),!ma(e)||pa(e)||function(e){const t=e.tax_advice.filter(e=>""!==e),r=t.includes(v.other),n=1===t.length;return r&&n}(e)||t.push(i(Fn,{})),t}function fa(e){if(!pa(e)&&ma(e)||function(e){const t=e.ph_tax_advice?.filter(e=>""!==e);return t?.includes(w.something_else)}(e))return i($n,{})}function pa(e){return e.interests.includes(g.small_business)}function ha(e){return e.interests.includes(g.self_employed)}function ma(e){const t=e.tax_intents.filter(e=>""!==e),r=t.includes(y.give_me_advice),n=1===t.length;return r&&n}function _a(e){const t=e.account_key,r=window?._APP_CONFIG?.paulhoodAccountKey;return t===r}function ga(e){return _a(e)}var va;!function(e){e.i_sold_stock_or_crypto="I sold stock or crypto",e.my_marital_status_changed="My marital status changed",e.i_need_to_file_multiple_years="I need to file for multiple years",e.my_spouse_or_i_serve_as_clergy="My spouse or I serve as pastor or clergy",e.i_have_self_employment_income="I have self-employment income",e.none_of_these_apply="None of these"}(va||(va={}));(0,e.createContext)({taxQuestions:{situationOptions:[],complexityConcern:""},updateTaxQuestions:()=>{}});Jr().shape({i_sold_stock_or_crypto:Sr().required(),my_marital_status_changed:Sr().required(),i_need_to_file_multiple_years:Sr().required(),my_spouse_or_i_serve_as_clergy:Sr().required(),i_have_self_employment_income:Sr().required(),none_of_these_apply:Sr().required()}).test("atLeastOneRequired","Please choose at least one option to continue.",e=>Object.values(e).some(e=>e));var ya=function(){return ya=Object.assign||function(e){for(var t,r=1,n=arguments.length;ri(Yo,{"data-testid":e.toLowerCase().replace(" ","_").concat("_tax_purpose_radio_tile"),...u("purpose"),label:e,value:e,id:e.toLowerCase().replace(" ","_").concat("_tax_purpose_radio_tile"),size:"sm"})),h&&i("p",{className:"text-2 text-red-60",children:h})]}),i(Tn,{})]})})}var Ia;function wa(){return i(Un,{title:"How can a tax pro best support you?",subtitle:"Select all that apply.",checkboxOptions:Ia,referralFieldName:"tax_personal_intents",stepName:"personal_intent_step"})}function Na(){const{referral:t,proInfo:r}=s(),n=(0,e.useRef)(null),o=(0,e.useRef)(!1);function a(){o.current||(X({form_name:re.TAX_REFERRAL_FORM}),o.current=!0)}return(0,e.useEffect)(()=>{const e=n.current;if(e)return e.addEventListener("focusin",a),()=>{e.removeEventListener("focusin",a)}},[]),i("div",{ref:n,children:i(ae,{children:[i(qo,{}),i(Oa,{}),i(Go,{}),ga(r)&&ca(t),ga(r)&&fa(t),!ga(r)&&function(e){const t=[];if(e.interests.includes(g.small_business))return t;if(t.push(i(wa,{})),e.tax_personal_intents?.includes(Ia.answer_general_questions)&&1===e.tax_personal_intents.length){function r(e){const t=e.tax_advice.filter(e=>""!==e),r=t.includes(v.other),n=1===t.length;return r&&n}t.push(i(Ln,{})),r(e)||t.push(i(Fn,{})),t.push(i($n,{}))}return t}(t),i(Po,{}),i(Vo,{}),i($i,{}),i(Co,{})]})})}!function(e){e.file_taxes="File taxes",e.help_with_tax_issues="Help with tax issues",e.answer_general_questions="Answer general questions",e.something_else="Something else"}(Ia||(Ia={}));const Ra="purpose_question_test_rule",Sa="tax_referral_purpose_question_test",xa="9300002903780",Ta={purpose_flow_off:"1592150",purpose_flow_on:"1592149"};function Aa(e){const t=e?.getVariation(Ra),r=Ta,n=Object.keys(Ta),i=t?.length?n.indexOf(t):-1,o=!!t&&-1!==i;o||console.error(`Optimizely Purpose Experiment: Invalid variation name "${t}"`);!function({experiment_id:e,variation_id:t,experiment_name:r,variation_name:n,experimentation_platform:i}){Z()?.track(Y,{experiment_id:e,variation_id:t,variation_name:n,experiment_name:r,experimentation_platform:i})}({experiment_id:xa,variation_id:o?r[t]:r.purpose_flow_off,experiment_name:Sa,variation_name:o?t:"purpose_flow_off",experimentation_platform:"Other"})}function Da(){const{optimizely:t}=(0,e.useContext)(rn.wP);return t?.onReady().then(()=>{Aa(t)}),i(rn.Wv,{experiment:Ra,children:[i(rn.e1,{default:!0,variation:"purpose_flow_off",children:i(Jo,{})}),i(rn.e1,{variation:"purpose_flow_on",children:i(Na,{})})]})}const Ca=(0,rn.Q_)({sdkKey:function(e=C()){return"err"===e?"err":S[e]}()});function Ua(){(0,e.useEffect)(()=>{!function({name:e,title:t,keywords:r,referrer:n,url:i=ee(),path:o=Q()}){Z()?.track(K,{keywords:r,name:e,path:o,referrer:n,title:t,url:i})}({name:"ramsey_tax_advisor_referral",title:"RamseyTrusted Tax Advisors | RamseySolutions.com",keywords:["tax","referral","advisor","form"]})},[])}let La=document.getElementById("tax-root");La||(La=document.getElementById("root"));const Pa=La;console.log("%cMark 12:17 \"Render unto Caesar the things that are Caesar's, and unto God the things that are God's.\"","color: green");o(Pa).render(i(function(){return Ua(),i(e.default.StrictMode,{children:i(l,{children:i(ro,{reCaptchaKey:U(),children:i(rn.WY,{optimizely:Ca,user:{id:_(),attributes:{userId:_()}},children:i(Da,{})})})})})},{}))})()})(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVltekMsR0FFbEJwbkUsUUFBUTN6QixJQUNOLDRHQUNBLGdCQUdXMm5ELEVBQVdDLElBQ25CN3pELE9BQU8sRURPWixXQUVFLE9BREE0bUcsS0FFRSxFQUFDLHFCQUFnQixVQUNmLEVBQUNoeEMsRUFBdUIsVUFDdEIsRUFBQyxHQUF1QixDQUFDdW5DLGFBQWN2bEMsSUFBZ0IsU0FDckQsRUFBQyxNQUFrQixDQUNqQjd5RCxXQUFZQSxHQUNaOEUsS0FBTSxDQUNKckIsR0FBSW11RCxJQUNKeDBELFdBQVksQ0FBRWtRLE9BQVFza0QsTUFDdkIsU0FFRCxFQUFDK3ZDLEdBQWdDLFdBTTdDLEVDMUJnQixJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3ByZWFjdC9kaXN0L3ByZWFjdC5tb2R1bGUuanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2Fwb3BoZW5pYS1qYXZhc2NyaXB0LWxvZ2dlci9kaXN0L3V0aWxzL0Vudmlyb25tZW50LmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9Ab3B0aW1pemVseS9yZWFjdC1zZGsvZGlzdC9yZWFjdC1zZGsuanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BvcHRpbWl6ZWx5L29wdGltaXplbHktc2RrL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQG9wdGltaXplbHkvb3B0aW1pemVseS1zZGsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3JuZy5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHJzL2Zvcm0tdHJhY2tpbmctc2RrL2xpYi9mb3Jtcy9Gb3JtVHJhY2tlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQG9wdGltaXplbHkvb3B0aW1pemVseS1zZGsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3Y0LmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9Ab3B0aW1pemVseS9vcHRpbWl6ZWx5LXNkay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjEuanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdGphci9pbmRleC5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQG9wdGltaXplbHkvb3B0aW1pemVseS1zZGsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQG9wdGltaXplbHkvb3B0aW1pemVseS1zZGsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3ZlcnNpb24uanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvdG9wb3NvcnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BvcHRpbWl6ZWx5L29wdGltaXplbHktc2RrL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9tZDUuanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWV4cHIvaW5kZXguanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9Ab3B0aW1pemVseS9vcHRpbWl6ZWx5LXNkay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcmVnZXguanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvZGlzdC9jb21wYXQubW9kdWxlLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9Ab3B0aW1pemVseS9vcHRpbWl6ZWx5LXNkay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvc2hhMS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvanNvbi1zY2hlbWEvbGliL3ZhbGlkYXRlLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9Ab3B0aW1pemVseS9vcHRpbWl6ZWx5LXNkay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcGFyc2UuanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHJzL2Zvcm0tdHJhY2tpbmctc2RrL2xpYi91dGlsL2RhdGFMYXllci5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvdGlueS1jYXNlL2luZGV4LmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RqYXIvc3JjL3JlYWN0LWhvdGphci5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQG9wdGltaXplbHkvb3B0aW1pemVseS1zZGsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3ZhbGlkYXRlLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9Ab3B0aW1pemVseS9vcHRpbWl6ZWx5LXNkay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjUuanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BvcHRpbWl6ZWx5L29wdGltaXplbHktc2RrL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9uYXRpdmUuanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3VhLXBhcnNlci1qcy9zcmMvdWEtcGFyc2VyLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gubWVtb2l6ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQG9wdGltaXplbHkvb3B0aW1pemVseS1zZGsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzNS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbXVybXVyaGFzaC9tdXJtdXJoYXNoLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9Ab3B0aW1pemVseS9vcHRpbWl6ZWx5LXNkay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvbmlsLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9hcG9waGVuaWEtamF2YXNjcmlwdC1sb2dnZXIvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHJzL2Zvcm0tdHJhY2tpbmctc2RrL2xpYi9mb3Jtcy9maWVsZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BvcHRpbWl6ZWx5L29wdGltaXplbHktc2RrL2Rpc3Qvb3B0aW1pemVseS5icm93c2VyLm1pbi5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQG9wdGltaXplbHkvb3B0aW1pemVseS1zZGsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvd2VicGFjay9ydW50aW1lL2FtZCBvcHRpb25zIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9wcmVhY3QvanN4LXJ1bnRpbWUvZGlzdC9qc3hSdW50aW1lLm1vZHVsZS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9jbGllbnQubWpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb250ZXh0L1JlZmVycmFsQ29udGV4dC50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29udGV4dC9SZWZlcnJhbERhdGEudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL3NoYXJlZC90eXBlcy9Qcm9EYXRhLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb250ZXh0L1JlZmVycmFsQ29udGV4dFByb3ZpZGVyLnRzeCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L25hdGl2ZS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3JuZy5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3Y0LmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS91dGlscy9nZXRVbmlxdWVTZXNzaW9uVXNlcklkLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9lbnVtcy9UYXhTZXJ2aWNlT3B0aW9ucy50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vZW51bXMvVGF4QWR2aWNlT3B0aW9ucy50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vZW51bXMvVGF4SW50ZW50T3B0aW9ucy50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vZW51bXMvVmVyaWZpY2F0aW9uU3RhdHVzLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9lbnVtcy9QSFBlcnNvbmFsSW50ZW50T3B0aW9ucy50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vZW51bXMvUEhVcmdlbmN5T3B0aW9ucy50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vZW51bXMvUEhUYXhJc3N1ZU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2VudW1zL1BIQWR2aWNlT3B0aW9ucy50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vZW51bXMvUEhTZWxmRW1wU21hbGxCdXNJbnRlbnRPcHRpb25zLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9zaGFyZWQvdXRpbHMvZW52aXJvbm1lbnRTZXJ2aWNlLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9zaGFyZWQvdXRpbHMvbG9nZ2VyLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9zaGFyZWQvdXRpbHMvZm9ybVRyYWNrZXIudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL3NoYXJlZC91dGlscy9maXJlT3B0aW1pemVseUV2ZW50LnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9zaGFyZWQvdXRpbHMvYmFzZVVybC50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vdXRpbHMvZ2V0UmF3VGV4dC50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vdXRpbHMvbmF2aWdhdGVUb1Jlc3VsdHNQYWdlLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9zY2hlbWFzL3Bob25lVmFsaWRhdGlvblJlZ2V4LnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9zaGFyZWQvYW5hbHl0aWNzLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9lbnVtcy9Gb3JtTmFtZU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL3V0aWxzL2hhbmRsZVJlZmVycmFsUmVzcG9uc2UudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL3V0aWxzL2xvZ0dBRXZlbnRzLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9yZWFjdC11c2Utd2l6YXJkL2Rpc3QvcmVhY3QtdXNlLXdpemFyZC5tanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0ByYW1zZXktZGVzaWduLXN5c3RlbS9jaGVja2JveC10aWxlL2Rpc3QvQ2hlY2tib3hUaWxlLmVzbS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcmVhY3QtaG9vay1mb3JtL2Rpc3QvaW5kZXguZXNtLm1qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGhvb2tmb3JtL3Jlc29sdmVycy9kaXN0L3Jlc29sdmVycy5tanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bob29rZm9ybS9yZXNvbHZlcnMveXVwL2Rpc3QveXVwLm1qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMveXVwL2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vc2NoZW1hcy9nZW5lcmljQ2hlY2tib3hTY2hlbWEudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL3NoYXJlZC9ob29rcy91c2VXaW5kb3dTaXplLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9zaGFyZWQvaG9va3MvdXNlR0FGb3JtVHJhY2tpbmcudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvc3RlcENvbXBvbmVudHMvU3RhbmRhcmRTdGVwVGl0bGUudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL3N0ZXBDb21wb25lbnRzL1N0YW5kYXJkU3RlcFN1YnRpdGxlVGV4dC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0ByYW1zZXktZGVzaWduLXN5c3RlbS9ib3gvZGlzdC9Cb3guZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AcmFtc2V5LWRlc2lnbi1zeXN0ZW0vcHJvZ3Jlc3MtYmFyL2Rpc3QvUHJvZ3Jlc3NCYXIuZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaWNvbi9kaXN0L0ljb24uZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaWNvbnMvZGlzdC9DaGV2cm9uTGVmdEljb24uZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL0JhY2tDaGV2cm9uLnRzeCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29tcG9uZW50cy9zdGVwQ29tcG9uZW50cy9TdGVwV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0ByYW1zZXktZGVzaWduLXN5c3RlbS9pY29ucy9kaXN0L1Byb2Nlc3NpbmdJY29uLmVzbS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHJhbXNleS1kZXNpZ24tc3lzdGVtL2J1dHRvbi9kaXN0L0J1dHRvbi5lc20uanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvYnV0dG9ucy9SZXN1Ym1pdEJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvYnV0dG9ucy9TdWJtaXRCdXR0b24udHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaWNvbnMvZGlzdC9BcnJvd1JpZ2h0SWNvbi5lc20uanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvYnV0dG9ucy9TdGFuZGFyZE5leHRCdXR0b24udHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL0Vycm9yVGV4dC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvc3RlcHMvR2VuZXJpY0NoZWNrYm94U3RlcC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvc3RlcHMvYWR2aWNlU3RlcHMvQWR2aWNlU3RlcC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0ByYW1zZXktZGVzaWduLXN5c3RlbS9pY29ucy9kaXN0L0NoZXZyb25SaWdodEljb24uZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL3N0ZXBzL2FkdmljZVN0ZXBzL0FkdmljZUVkdWNhdGlvblN0ZXAudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AcmFtc2V5LWRlc2lnbi1zeXN0ZW0vdGV4dGFyZWEvZGlzdC9UZXh0YXJlYS5lc20uanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0ByYW1zZXktZGVzaWduLXN5c3RlbS9mb3JtLWZpZWxkL2Rpc3QvRm9ybUZpZWxkLmVzbS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vc2NoZW1hcy9zZW5zaXRpdmVEYXRhU2NoZW1hLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL3N0ZXBzL2FkdmljZVN0ZXBzL1F1ZXN0aW9uc1N0ZXAudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9zY2hlbWFzL3Bob25lU2NoZW1hLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS91dGlscy9waG9uZU51bWJlcklzVmFsaWQudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2FwaS9zdGFydFZlcmlmaWNhdGlvbi50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHJhbXNleS1kZXNpZ24tc3lzdGVtL2ljb25zL2Rpc3QvQ2hhdEljb24uZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaWNvbnMvZGlzdC9QaG9uZUljb24uZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9yZWFjdC1udW1iZXItZm9ybWF0L2Rpc3QvcmVhY3QtbnVtYmVyLWZvcm1hdC5lcy5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHJhbXNleS1kZXNpZ24tc3lzdGVtL2lucHV0L2Rpc3QvSW5wdXQuZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaWNvbnMvZGlzdC9DbG9zZUljb24uZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AcmFtc2V5LWRlc2lnbi1zeXN0ZW0vYWxlcnQvZGlzdC9BbGVydC5lc20uanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0ByYW1zZXktZGVzaWduLXN5c3RlbS9pY29ucy9kaXN0L0luZm9ybWF0aW9uSWNvbi5lc20uanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0ByYW1zZXktZGVzaWduLXN5c3RlbS90ZXh0L2Rpc3QvVGV4dC5lc20uanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvUGhvbmVWZXJpZmljYXRpb25Db3VudERvd25BbGVydC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0ByYW1zZXktZGVzaWduLXN5c3RlbS9pY29ucy9kaXN0L0Vycm9ySWNvbi5lc20uanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvbWVzc2FnZXMvRXJyb3JNZXNzYWdlLnRzeCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHJhbXNleS1kZXNpZ24tc3lzdGVtL2ljb25zL2Rpc3QvU3VjY2Vzc0ljb24uZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL21lc3NhZ2VzL1N1Y2Nlc3NNZXNzYWdlLnRzeCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29tcG9uZW50cy9hZ3JlZW1lbnRzL1Byb0FncmVlbWVudFRleHQudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL2FncmVlbWVudHMvUmFtc2V5QWdyZWVtZW50VGV4dC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvc3RlcHMvY29udGFjdEluZm9TdGVwcy9QaG9uZVN0ZXAudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9zY2hlbWFzL3Bob25lVmVyaWZpY2F0aW9uQ29kZVJlZ2V4LnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9zY2hlbWFzL3Bob25lVmVyaWZpY2F0aW9uU2NoZW1hLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9hcGkvY3JlYXRlUmVmZXJyYWwudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEtdjMvZGlzdC9yZWFjdC1nb29nbGUtcmVjYXB0Y2hhLXYzLmVzbS5qcyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29tcG9uZW50cy9zdGVwcy9jb250YWN0SW5mb1N0ZXBzL1ZlcmlmaWNhdGlvblN0ZXAudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9zY2hlbWFzL25vU3BlY2lhbENoYXJhY3RlcnNSZWdleC50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vc2NoZW1hcy9GdWxsTmFtZVNjaGVtYS50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29tcG9uZW50cy9zdGVwcy9jb250YWN0SW5mb1N0ZXBzL0Z1bGxOYW1lU3RlcC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL3NjaGVtYXMvZW1haWxTY2hlbWEudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvc3RlcHMvY29udGFjdEluZm9TdGVwcy9FbWFpbFN0ZXAudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9zY2hlbWFzL3ppcFNjaGVtYS50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vdXRpbHMvZ2V0TG9jYXRpb25zRnJvbVppcC50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29tcG9uZW50cy9zdGVwcy9Mb2NhdGlvblN0ZXAudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9hcGkvemlwUHJvTG9va3VwLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL3N0ZXBzL1NlcnZpY2VzU3RlcC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvc3RlcHMvSW50ZW50U3RlcC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL3NjaGVtYXMvY29tcGxleGl0eVNjaGVtYS50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHJhbXNleS1kZXNpZ24tc3lzdGVtL3JhZGlvLXRpbGUvZGlzdC9SYWRpb1RpbGUuZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL3N0ZXBzL1ByZVJlZmVycmFsQ29tcGxleGl0eUNvbmNlcm5TdGVwLnRzeCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29tcG9uZW50cy9SZWZlcnJhbEZvcm0udHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AcmFtc2V5LWRlc2lnbi1zeXN0ZW0vbGluay9kaXN0L0xpbmsuZXNtLmpzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL1Byb0pvaW5PdXJQcm9ncmFtLnRzeCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29tcG9uZW50cy9wYXVsSG9vZC9QSFBlcnNvbmFsSW50ZW50U3RlcC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMvcGF1bEhvb2QvUEhBZHZpY2VTdGVwLnRzeCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29tcG9uZW50cy9wYXVsSG9vZC9QSFNlbGZFbXBTbWFsbEJ1c0ludGVudFN0ZXAudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL3BhdWxIb29kL1BIU29tZXRoaW5nRWxzZVN0ZXAudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL3BhdWxIb29kL1BIVGF4SXNzdWVzU3RlcC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL3NjaGVtYXMvc2luZ2xlT3B0aW9uU2NoZW1hLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzL3BhdWxIb29kL1BIVXJnZW5jeVN0ZXAudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS91dGlscy9mb3JtRmxvd0dlbmVyYXRvcnMudHN4Iiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9tb2R1bGVzL1JlZmVycmFsRm9ybS91dGlscy9pc1BhdWxIb29kUmVmZXJyYWwudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL3V0aWxzL3Nob3VsZFJlY2VpdmVQSFF1ZXN0aW9uc0Zsb3cudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL2V4cGVyaW1lbnQvVGF4UXVlc3Rpb25zL2VudW1zL1NpdHVhdGlvbk9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL2V4cGVyaW1lbnQvVGF4UXVlc3Rpb25zL2NvbnRleHQvVGF4UXVlc3Rpb25zQ29udGV4dC50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvZXhwZXJpbWVudC9UYXhRdWVzdGlvbnMvY29udGV4dC9UYXhRdWVzdGlvbnNEYXRhLnRzIiwid2VicGFjazovL2tvdGxpbi1yZWFjdC1mcm9udGVuZC8uL3NyYy9leHBlcmltZW50L1RheFF1ZXN0aW9ucy9zY2hlbWFzL1NpdHVhdGlvbnNTY2hlbWEudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0ByYW1zZXktZGVzaWduLXN5c3RlbS9oZWFkaW5nL2Rpc3QvSGVhZGluZy5lc20uanMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL2V4cGVyaW1lbnQvUHVycG9zZVF1ZXN0aW9uVGVzdC9zY2hlbWFzL3B1cnBvc2VTY2hlbWEudHMiLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL2V4cGVyaW1lbnQvUHVycG9zZVF1ZXN0aW9uVGVzdC9jb21wb25lbnRzL3N0ZXBzL1B1cnBvc2VTdGVwLnRzeCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvZXhwZXJpbWVudC9QdXJwb3NlUXVlc3Rpb25UZXN0L2VudW1zL1BlcnNvbmFsSW50ZW50T3B0aW9ucy50cyIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvZXhwZXJpbWVudC9QdXJwb3NlUXVlc3Rpb25UZXN0L2NvbXBvbmVudHMvc3RlcHMvUGVyc29uYWxJbnRlbnRTdGVwLnRzeCIsIndlYnBhY2s6Ly9rb3RsaW4tcmVhY3QtZnJvbnRlbmQvLi9zcmMvZXhwZXJpbWVudC9QdXJwb3NlUXVlc3Rpb25UZXN0L2NvbXBvbmVudHMvUHVycG9zZVJlZmVycmFsRm9ybS50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL2V4cGVyaW1lbnQvUHVycG9zZVF1ZXN0aW9uVGVzdC9QdXJwb3NlUXVlc3Rpb25FeHBlcmltZW50V3JhcHBlci50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL0FwcC50c3giLCJ3ZWJwYWNrOi8va290bGluLXJlYWN0LWZyb250ZW5kLy4vc3JjL21vZHVsZXMvUmVmZXJyYWxGb3JtL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbixsLHUsdCxpLG8scixlLGYsYyxzLGEsaCxwPXt9LHY9W10seT0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLGQ9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiB3KG4sbCl7Zm9yKHZhciB1IGluIGwpblt1XT1sW3VdO3JldHVybiBufWZ1bmN0aW9uIGcobil7biYmbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9ZnVuY3Rpb24gXyhsLHUsdCl7dmFyIGksbyxyLGU9e307Zm9yKHIgaW4gdSlcImtleVwiPT1yP2k9dVtyXTpcInJlZlwiPT1yP289dVtyXTplW3JdPXVbcl07aWYoYXJndW1lbnRzLmxlbmd0aD4yJiYoZS5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/bi5jYWxsKGFyZ3VtZW50cywyKTp0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBsJiZudWxsIT1sLmRlZmF1bHRQcm9wcylmb3IociBpbiBsLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1lW3JdJiYoZVtyXT1sLmRlZmF1bHRQcm9wc1tyXSk7cmV0dXJuIG0obCxlLGksbyxudWxsKX1mdW5jdGlvbiBtKG4sdCxpLG8scil7dmFyIGU9e3R5cGU6bixwcm9wczp0LGtleTppLHJlZjpvLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpudWxsPT1yPysrdTpyLF9faTotMSxfX3U6MH07cmV0dXJuIG51bGw9PXImJm51bGwhPWwudm5vZGUmJmwudm5vZGUoZSksZX1mdW5jdGlvbiBiKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19ZnVuY3Rpb24gayhuKXtyZXR1cm4gbi5jaGlsZHJlbn1mdW5jdGlvbiB4KG4sbCl7dGhpcy5wcm9wcz1uLHRoaXMuY29udGV4dD1sfWZ1bmN0aW9uIFMobixsKXtpZihudWxsPT1sKXJldHVybiBuLl9fP1Mobi5fXyxuLl9faSsxKTpudWxsO2Zvcih2YXIgdTtsPG4uX19rLmxlbmd0aDtsKyspaWYobnVsbCE9KHU9bi5fX2tbbF0pJiZudWxsIT11Ll9fZSlyZXR1cm4gdS5fX2U7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50eXBlP1Mobik6bnVsbH1mdW5jdGlvbiBDKG4pe3ZhciBsLHU7aWYobnVsbCE9KG49bi5fXykmJm51bGwhPW4uX19jKXtmb3Iobi5fX2U9bi5fX2MuYmFzZT1udWxsLGw9MDtsPG4uX19rLmxlbmd0aDtsKyspaWYobnVsbCE9KHU9bi5fX2tbbF0pJiZudWxsIT11Ll9fZSl7bi5fX2U9bi5fX2MuYmFzZT11Ll9fZTticmVha31yZXR1cm4gQyhuKX19ZnVuY3Rpb24gTShuKXsoIW4uX19kJiYobi5fX2Q9ITApJiZpLnB1c2gobikmJiEkLl9fcisrfHxvIT1sLmRlYm91bmNlUmVuZGVyaW5nKSYmKChvPWwuZGVib3VuY2VSZW5kZXJpbmcpfHxyKSgkKX1mdW5jdGlvbiAkKCl7Zm9yKHZhciBuLHUsdCxvLHIsZixjLHM9MTtpLmxlbmd0aDspaS5sZW5ndGg+cyYmaS5zb3J0KGUpLG49aS5zaGlmdCgpLHM9aS5sZW5ndGgsbi5fX2QmJih0PXZvaWQgMCxvPXZvaWQgMCxyPShvPSh1PW4pLl9fdikuX19lLGY9W10sYz1bXSx1Ll9fUCYmKCh0PXcoe30sbykpLl9fdj1vLl9fdisxLGwudm5vZGUmJmwudm5vZGUodCksTyh1Ll9fUCx0LG8sdS5fX24sdS5fX1AubmFtZXNwYWNlVVJJLDMyJm8uX191P1tyXTpudWxsLGYsbnVsbD09cj9TKG8pOnIsISEoMzImby5fX3UpLGMpLHQuX192PW8uX192LHQuX18uX19rW3QuX19pXT10LE4oZix0LGMpLG8uX19lPW8uX189bnVsbCx0Ll9fZSE9ciYmQyh0KSkpOyQuX19yPTB9ZnVuY3Rpb24gSShuLGwsdSx0LGksbyxyLGUsZixjLHMpe3ZhciBhLGgseSxkLHcsZyxfLG09dCYmdC5fX2t8fHYsYj1sLmxlbmd0aDtmb3IoZj1QKHUsbCxtLGYsYiksYT0wO2E8YjthKyspbnVsbCE9KHk9dS5fX2tbYV0pJiYoaD0tMT09eS5fX2k/cDptW3kuX19pXXx8cCx5Ll9faT1hLGc9TyhuLHksaCxpLG8scixlLGYsYyxzKSxkPXkuX19lLHkucmVmJiZoLnJlZiE9eS5yZWYmJihoLnJlZiYmQihoLnJlZixudWxsLHkpLHMucHVzaCh5LnJlZix5Ll9fY3x8ZCx5KSksbnVsbD09dyYmbnVsbCE9ZCYmKHc9ZCksKF89ISEoNCZ5Ll9fdSkpfHxoLl9faz09PXkuX19rP2Y9QSh5LGYsbixfKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiB5LnR5cGUmJnZvaWQgMCE9PWc/Zj1nOmQmJihmPWQubmV4dFNpYmxpbmcpLHkuX191Jj0tNyk7cmV0dXJuIHUuX19lPXcsZn1mdW5jdGlvbiBQKG4sbCx1LHQsaSl7dmFyIG8scixlLGYsYyxzPXUubGVuZ3RoLGE9cyxoPTA7Zm9yKG4uX19rPW5ldyBBcnJheShpKSxvPTA7bzxpO28rKyludWxsIT0ocj1sW29dKSYmXCJib29sZWFuXCIhPXR5cGVvZiByJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByPyhcInN0cmluZ1wiPT10eXBlb2Ygcnx8XCJudW1iZXJcIj09dHlwZW9mIHJ8fFwiYmlnaW50XCI9PXR5cGVvZiByfHxyLmNvbnN0cnVjdG9yPT1TdHJpbmc/cj1uLl9fa1tvXT1tKG51bGwscixudWxsLG51bGwsbnVsbCk6ZChyKT9yPW4uX19rW29dPW0oayx7Y2hpbGRyZW46cn0sbnVsbCxudWxsLG51bGwpOnZvaWQgMD09PXIuY29uc3RydWN0b3ImJnIuX19iPjA/cj1uLl9fa1tvXT1tKHIudHlwZSxyLnByb3BzLHIua2V5LHIucmVmP3IucmVmOm51bGwsci5fX3YpOm4uX19rW29dPXIsZj1vK2gsci5fXz1uLHIuX19iPW4uX19iKzEsZT1udWxsLC0xIT0oYz1yLl9faT1MKHIsdSxmLGEpKSYmKGEtLSwoZT11W2NdKSYmKGUuX191fD0yKSksbnVsbD09ZXx8bnVsbD09ZS5fX3Y/KC0xPT1jJiYoaT5zP2gtLTppPHMmJmgrKyksXCJmdW5jdGlvblwiIT10eXBlb2Ygci50eXBlJiYoci5fX3V8PTQpKTpjIT1mJiYoYz09Zi0xP2gtLTpjPT1mKzE/aCsrOihjPmY/aC0tOmgrKyxyLl9fdXw9NCkpKTpuLl9fa1tvXT1udWxsO2lmKGEpZm9yKG89MDtvPHM7bysrKW51bGwhPShlPXVbb10pJiYwPT0oMiZlLl9fdSkmJihlLl9fZT09dCYmKHQ9UyhlKSksRChlLGUpKTtyZXR1cm4gdH1mdW5jdGlvbiBBKG4sbCx1LHQpe3ZhciBpLG87aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50eXBlKXtmb3IoaT1uLl9fayxvPTA7aSYmbzxpLmxlbmd0aDtvKyspaVtvXSYmKGlbb10uX189bixsPUEoaVtvXSxsLHUsdCkpO3JldHVybiBsfW4uX19lIT1sJiYodCYmKGwmJm4udHlwZSYmIWwucGFyZW50Tm9kZSYmKGw9UyhuKSksdS5pbnNlcnRCZWZvcmUobi5fX2UsbHx8bnVsbCkpLGw9bi5fX2UpO2Rve2w9bCYmbC5uZXh0U2libGluZ313aGlsZShudWxsIT1sJiY4PT1sLm5vZGVUeXBlKTtyZXR1cm4gbH1mdW5jdGlvbiBIKG4sbCl7cmV0dXJuIGw9bHx8W10sbnVsbD09bnx8XCJib29sZWFuXCI9PXR5cGVvZiBufHwoZChuKT9uLnNvbWUoZnVuY3Rpb24obil7SChuLGwpfSk6bC5wdXNoKG4pKSxsfWZ1bmN0aW9uIEwobixsLHUsdCl7dmFyIGksbyxyLGU9bi5rZXksZj1uLnR5cGUsYz1sW3VdLHM9bnVsbCE9YyYmMD09KDImYy5fX3UpO2lmKG51bGw9PT1jJiZudWxsPT1lfHxzJiZlPT1jLmtleSYmZj09Yy50eXBlKXJldHVybiB1O2lmKHQ+KHM/MTowKSlmb3IoaT11LTEsbz11KzE7aT49MHx8bzxsLmxlbmd0aDspaWYobnVsbCE9KGM9bFtyPWk+PTA/aS0tOm8rK10pJiYwPT0oMiZjLl9fdSkmJmU9PWMua2V5JiZmPT1jLnR5cGUpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gVChuLGwsdSl7XCItXCI9PWxbMF0/bi5zZXRQcm9wZXJ0eShsLG51bGw9PXU/XCJcIjp1KTpuW2xdPW51bGw9PXU/XCJcIjpcIm51bWJlclwiIT10eXBlb2YgdXx8eS50ZXN0KGwpP3U6dStcInB4XCJ9ZnVuY3Rpb24gaihuLGwsdSx0LGkpe3ZhciBvLHI7bjppZihcInN0eWxlXCI9PWwpaWYoXCJzdHJpbmdcIj09dHlwZW9mIHUpbi5zdHlsZS5jc3NUZXh0PXU7ZWxzZXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKG4uc3R5bGUuY3NzVGV4dD10PVwiXCIpLHQpZm9yKGwgaW4gdCl1JiZsIGluIHV8fFQobi5zdHlsZSxsLFwiXCIpO2lmKHUpZm9yKGwgaW4gdSl0JiZ1W2xdPT10W2xdfHxUKG4uc3R5bGUsbCx1W2xdKX1lbHNlIGlmKFwib1wiPT1sWzBdJiZcIm5cIj09bFsxXSlvPWwhPShsPWwucmVwbGFjZShmLFwiJDFcIikpLHI9bC50b0xvd2VyQ2FzZSgpLGw9ciBpbiBufHxcIm9uRm9jdXNPdXRcIj09bHx8XCJvbkZvY3VzSW5cIj09bD9yLnNsaWNlKDIpOmwuc2xpY2UoMiksbi5sfHwobi5sPXt9KSxuLmxbbCtvXT11LHU/dD91LnU9dC51Oih1LnU9YyxuLmFkZEV2ZW50TGlzdGVuZXIobCxvP2E6cyxvKSk6bi5yZW1vdmVFdmVudExpc3RlbmVyKGwsbz9hOnMsbyk7ZWxzZXtpZihcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI9PWkpbD1sLnJlcGxhY2UoL3hsaW5rKEh8OmgpLyxcImhcIikucmVwbGFjZSgvc05hbWUkLyxcInNcIik7ZWxzZSBpZihcIndpZHRoXCIhPWwmJlwiaGVpZ2h0XCIhPWwmJlwiaHJlZlwiIT1sJiZcImxpc3RcIiE9bCYmXCJmb3JtXCIhPWwmJlwidGFiSW5kZXhcIiE9bCYmXCJkb3dubG9hZFwiIT1sJiZcInJvd1NwYW5cIiE9bCYmXCJjb2xTcGFuXCIhPWwmJlwicm9sZVwiIT1sJiZcInBvcG92ZXJcIiE9bCYmbCBpbiBuKXRyeXtuW2xdPW51bGw9PXU/XCJcIjp1O2JyZWFrIG59Y2F0Y2gobil7fVwiZnVuY3Rpb25cIj09dHlwZW9mIHV8fChudWxsPT11fHwhMT09PXUmJlwiLVwiIT1sWzRdP24ucmVtb3ZlQXR0cmlidXRlKGwpOm4uc2V0QXR0cmlidXRlKGwsXCJwb3BvdmVyXCI9PWwmJjE9PXU/XCJcIjp1KSl9fWZ1bmN0aW9uIEYobil7cmV0dXJuIGZ1bmN0aW9uKHUpe2lmKHRoaXMubCl7dmFyIHQ9dGhpcy5sW3UudHlwZStuXTtpZihudWxsPT11LnQpdS50PWMrKztlbHNlIGlmKHUudDx0LnUpcmV0dXJuO3JldHVybiB0KGwuZXZlbnQ/bC5ldmVudCh1KTp1KX19fWZ1bmN0aW9uIE8obix1LHQsaSxvLHIsZSxmLGMscyl7dmFyIGEsaCxwLHYseSxfLG0sYixTLEMsTSwkLFAsQSxILEwsVCxqPXUudHlwZTtpZih2b2lkIDAhPT11LmNvbnN0cnVjdG9yKXJldHVybiBudWxsOzEyOCZ0Ll9fdSYmKGM9ISEoMzImdC5fX3UpLHI9W2Y9dS5fX2U9dC5fX2VdKSwoYT1sLl9fYikmJmEodSk7bjppZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBqKXRyeXtpZihiPXUucHJvcHMsUz1cInByb3RvdHlwZVwiaW4gaiYmai5wcm90b3R5cGUucmVuZGVyLEM9KGE9ai5jb250ZXh0VHlwZSkmJmlbYS5fX2NdLE09YT9DP0MucHJvcHMudmFsdWU6YS5fXzppLHQuX19jP209KGg9dS5fX2M9dC5fX2MpLl9fPWguX19FOihTP3UuX19jPWg9bmV3IGooYixNKToodS5fX2M9aD1uZXcgeChiLE0pLGguY29uc3RydWN0b3I9aixoLnJlbmRlcj1FKSxDJiZDLnN1YihoKSxoLnN0YXRlfHwoaC5zdGF0ZT17fSksaC5fX249aSxwPWguX19kPSEwLGguX19oPVtdLGguX3NiPVtdKSxTJiZudWxsPT1oLl9fcyYmKGguX19zPWguc3RhdGUpLFMmJm51bGwhPWouZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiYoaC5fX3M9PWguc3RhdGUmJihoLl9fcz13KHt9LGguX19zKSksdyhoLl9fcyxqLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhiLGguX19zKSkpLHY9aC5wcm9wcyx5PWguc3RhdGUsaC5fX3Y9dSxwKVMmJm51bGw9PWouZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZudWxsIT1oLmNvbXBvbmVudFdpbGxNb3VudCYmaC5jb21wb25lbnRXaWxsTW91bnQoKSxTJiZudWxsIT1oLmNvbXBvbmVudERpZE1vdW50JiZoLl9faC5wdXNoKGguY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYoUyYmbnVsbD09ai5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJmIhPT12JiZudWxsIT1oLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmguY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhiLE0pLHUuX192PT10Ll9fdnx8IWguX19lJiZudWxsIT1oLnNob3VsZENvbXBvbmVudFVwZGF0ZSYmITE9PT1oLnNob3VsZENvbXBvbmVudFVwZGF0ZShiLGguX19zLE0pKXtmb3IodS5fX3YhPXQuX192JiYoaC5wcm9wcz1iLGguc3RhdGU9aC5fX3MsaC5fX2Q9ITEpLHUuX19lPXQuX19lLHUuX19rPXQuX19rLHUuX19rLnNvbWUoZnVuY3Rpb24obil7biYmKG4uX189dSl9KSwkPTA7JDxoLl9zYi5sZW5ndGg7JCsrKWguX19oLnB1c2goaC5fc2JbJF0pO2guX3NiPVtdLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpO2JyZWFrIG59bnVsbCE9aC5jb21wb25lbnRXaWxsVXBkYXRlJiZoLmNvbXBvbmVudFdpbGxVcGRhdGUoYixoLl9fcyxNKSxTJiZudWxsIT1oLmNvbXBvbmVudERpZFVwZGF0ZSYmaC5fX2gucHVzaChmdW5jdGlvbigpe2guY29tcG9uZW50RGlkVXBkYXRlKHYseSxfKX0pfWlmKGguY29udGV4dD1NLGgucHJvcHM9YixoLl9fUD1uLGguX19lPSExLFA9bC5fX3IsQT0wLFMpe2ZvcihoLnN0YXRlPWguX19zLGguX19kPSExLFAmJlAodSksYT1oLnJlbmRlcihoLnByb3BzLGguc3RhdGUsaC5jb250ZXh0KSxIPTA7SDxoLl9zYi5sZW5ndGg7SCsrKWguX19oLnB1c2goaC5fc2JbSF0pO2guX3NiPVtdfWVsc2UgZG97aC5fX2Q9ITEsUCYmUCh1KSxhPWgucmVuZGVyKGgucHJvcHMsaC5zdGF0ZSxoLmNvbnRleHQpLGguc3RhdGU9aC5fX3N9d2hpbGUoaC5fX2QmJisrQTwyNSk7aC5zdGF0ZT1oLl9fcyxudWxsIT1oLmdldENoaWxkQ29udGV4dCYmKGk9dyh3KHt9LGkpLGguZ2V0Q2hpbGRDb250ZXh0KCkpKSxTJiYhcCYmbnVsbCE9aC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSYmKF89aC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSh2LHkpKSxMPWEsbnVsbCE9YSYmYS50eXBlPT09ayYmbnVsbD09YS5rZXkmJihMPVYoYS5wcm9wcy5jaGlsZHJlbikpLGY9SShuLGQoTCk/TDpbTF0sdSx0LGksbyxyLGUsZixjLHMpLGguYmFzZT11Ll9fZSx1Ll9fdSY9LTE2MSxoLl9faC5sZW5ndGgmJmUucHVzaChoKSxtJiYoaC5fX0U9aC5fXz1udWxsKX1jYXRjaChuKXtpZih1Ll9fdj1udWxsLGN8fG51bGwhPXIpaWYobi50aGVuKXtmb3IodS5fX3V8PWM/MTYwOjEyODtmJiY4PT1mLm5vZGVUeXBlJiZmLm5leHRTaWJsaW5nOylmPWYubmV4dFNpYmxpbmc7cltyLmluZGV4T2YoZildPW51bGwsdS5fX2U9Zn1lbHNle2ZvcihUPXIubGVuZ3RoO1QtLTspZyhyW1RdKTt6KHUpfWVsc2UgdS5fX2U9dC5fX2UsdS5fX2s9dC5fX2ssbi50aGVufHx6KHUpO2wuX19lKG4sdSx0KX1lbHNlIG51bGw9PXImJnUuX192PT10Ll9fdj8odS5fX2s9dC5fX2ssdS5fX2U9dC5fX2UpOmY9dS5fX2U9cSh0Ll9fZSx1LHQsaSxvLHIsZSxjLHMpO3JldHVybihhPWwuZGlmZmVkKSYmYSh1KSwxMjgmdS5fX3U/dm9pZCAwOmZ9ZnVuY3Rpb24geihuKXtuJiZuLl9fYyYmKG4uX19jLl9fZT0hMCksbiYmbi5fX2smJm4uX19rLmZvckVhY2goeil9ZnVuY3Rpb24gTihuLHUsdCl7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspQih0W2ldLHRbKytpXSx0WysraV0pO2wuX19jJiZsLl9fYyh1LG4pLG4uc29tZShmdW5jdGlvbih1KXt0cnl7bj11Ll9faCx1Ll9faD1bXSxuLnNvbWUoZnVuY3Rpb24obil7bi5jYWxsKHUpfSl9Y2F0Y2gobil7bC5fX2Uobix1Ll9fdil9fSl9ZnVuY3Rpb24gVihuKXtyZXR1cm5cIm9iamVjdFwiIT10eXBlb2Ygbnx8bnVsbD09bnx8bi5fX2ImJm4uX19iPjA/bjpkKG4pP24ubWFwKFYpOncoe30sbil9ZnVuY3Rpb24gcSh1LHQsaSxvLHIsZSxmLGMscyl7dmFyIGEsaCx2LHksdyxfLG0sYj1pLnByb3BzfHxwLGs9dC5wcm9wcyx4PXQudHlwZTtpZihcInN2Z1wiPT14P3I9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiOlwibWF0aFwiPT14P3I9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI6cnx8KHI9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpLG51bGwhPWUpZm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZigodz1lW2FdKSYmXCJzZXRBdHRyaWJ1dGVcImluIHc9PSEheCYmKHg/dy5sb2NhbE5hbWU9PXg6Mz09dy5ub2RlVHlwZSkpe3U9dyxlW2FdPW51bGw7YnJlYWt9aWYobnVsbD09dSl7aWYobnVsbD09eClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoayk7dT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocix4LGsuaXMmJmspLGMmJihsLl9fbSYmbC5fX20odCxlKSxjPSExKSxlPW51bGx9aWYobnVsbD09eCliPT09a3x8YyYmdS5kYXRhPT1rfHwodS5kYXRhPWspO2Vsc2V7aWYoZT1lJiZuLmNhbGwodS5jaGlsZE5vZGVzKSwhYyYmbnVsbCE9ZSlmb3IoYj17fSxhPTA7YTx1LmF0dHJpYnV0ZXMubGVuZ3RoO2ErKyliWyh3PXUuYXR0cmlidXRlc1thXSkubmFtZV09dy52YWx1ZTtmb3IoYSBpbiBiKWlmKHc9YlthXSxcImNoaWxkcmVuXCI9PWEpO2Vsc2UgaWYoXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hKXY9dztlbHNlIGlmKCEoYSBpbiBrKSl7aWYoXCJ2YWx1ZVwiPT1hJiZcImRlZmF1bHRWYWx1ZVwiaW4ga3x8XCJjaGVja2VkXCI9PWEmJlwiZGVmYXVsdENoZWNrZWRcImluIGspY29udGludWU7aih1LGEsbnVsbCx3LHIpfWZvcihhIGluIGspdz1rW2FdLFwiY2hpbGRyZW5cIj09YT95PXc6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP2g9dzpcInZhbHVlXCI9PWE/Xz13OlwiY2hlY2tlZFwiPT1hP209dzpjJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB3fHxiW2FdPT09d3x8aih1LGEsdyxiW2FdLHIpO2lmKGgpY3x8diYmKGguX19odG1sPT12Ll9faHRtbHx8aC5fX2h0bWw9PXUuaW5uZXJIVE1MKXx8KHUuaW5uZXJIVE1MPWguX19odG1sKSx0Ll9faz1bXTtlbHNlIGlmKHYmJih1LmlubmVySFRNTD1cIlwiKSxJKFwidGVtcGxhdGVcIj09dC50eXBlP3UuY29udGVudDp1LGQoeSk/eTpbeV0sdCxpLG8sXCJmb3JlaWduT2JqZWN0XCI9PXg/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6cixlLGYsZT9lWzBdOmkuX19rJiZTKGksMCksYyxzKSxudWxsIT1lKWZvcihhPWUubGVuZ3RoO2EtLTspZyhlW2FdKTtjfHwoYT1cInZhbHVlXCIsXCJwcm9ncmVzc1wiPT14JiZudWxsPT1fP3UucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIik6bnVsbCE9XyYmKF8hPT11W2FdfHxcInByb2dyZXNzXCI9PXgmJiFffHxcIm9wdGlvblwiPT14JiZfIT1iW2FdKSYmaih1LGEsXyxiW2FdLHIpLGE9XCJjaGVja2VkXCIsbnVsbCE9bSYmbSE9dVthXSYmaih1LGEsbSxiW2FdLHIpKX1yZXR1cm4gdX1mdW5jdGlvbiBCKG4sdSx0KXt0cnl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX3U7aSYmbi5fX3UoKSxpJiZudWxsPT11fHwobi5fX3U9bih1KSl9ZWxzZSBuLmN1cnJlbnQ9dX1jYXRjaChuKXtsLl9fZShuLHQpfX1mdW5jdGlvbiBEKG4sdSx0KXt2YXIgaSxvO2lmKGwudW5tb3VudCYmbC51bm1vdW50KG4pLChpPW4ucmVmKSYmKGkuY3VycmVudCYmaS5jdXJyZW50IT1uLl9fZXx8QihpLG51bGwsdSkpLG51bGwhPShpPW4uX19jKSl7aWYoaS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7aS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKG4pe2wuX19lKG4sdSl9aS5iYXNlPWkuX19QPW51bGx9aWYoaT1uLl9faylmb3Iobz0wO288aS5sZW5ndGg7bysrKWlbb10mJkQoaVtvXSx1LHR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4udHlwZSk7dHx8ZyhuLl9fZSksbi5fX2M9bi5fXz1uLl9fZT12b2lkIDB9ZnVuY3Rpb24gRShuLGwsdSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3Iobix1KX1mdW5jdGlvbiBHKHUsdCxpKXt2YXIgbyxyLGUsZjt0PT1kb2N1bWVudCYmKHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxsLl9fJiZsLl9fKHUsdCkscj0obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpKT9udWxsOmkmJmkuX19rfHx0Ll9fayxlPVtdLGY9W10sTyh0LHU9KCFvJiZpfHx0KS5fX2s9XyhrLG51bGwsW3VdKSxyfHxwLHAsdC5uYW1lc3BhY2VVUkksIW8mJmk/W2ldOnI/bnVsbDp0LmZpcnN0Q2hpbGQ/bi5jYWxsKHQuY2hpbGROb2Rlcyk6bnVsbCxlLCFvJiZpP2k6cj9yLl9fZTp0LmZpcnN0Q2hpbGQsbyxmKSxOKGUsdSxmKX1mdW5jdGlvbiBKKG4sbCl7RyhuLGwsSil9ZnVuY3Rpb24gSyhsLHUsdCl7dmFyIGksbyxyLGUsZj13KHt9LGwucHJvcHMpO2ZvcihyIGluIGwudHlwZSYmbC50eXBlLmRlZmF1bHRQcm9wcyYmKGU9bC50eXBlLmRlZmF1bHRQcm9wcyksdSlcImtleVwiPT1yP2k9dVtyXTpcInJlZlwiPT1yP289dVtyXTpmW3JdPXZvaWQgMD09PXVbcl0mJm51bGwhPWU/ZVtyXTp1W3JdO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihmLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLG0obC50eXBlLGYsaXx8bC5rZXksb3x8bC5yZWYsbnVsbCl9ZnVuY3Rpb24gUShuKXtmdW5jdGlvbiBsKG4pe3ZhciB1LHQ7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwodT1uZXcgU2V0LCh0PXt9KVtsLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiB0fSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dT1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLnByb3BzLnZhbHVlIT1uLnZhbHVlJiZ1LmZvckVhY2goZnVuY3Rpb24obil7bi5fX2U9ITAsTShuKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihuKXt1LmFkZChuKTt2YXIgbD1uLmNvbXBvbmVudFdpbGxVbm1vdW50O24uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt1JiZ1LmRlbGV0ZShuKSxsJiZsLmNhbGwobil9fSksbi5jaGlsZHJlbn1yZXR1cm4gbC5fX2M9XCJfX2NDXCIraCsrLGwuX189bixsLlByb3ZpZGVyPWwuX19sPShsLkNvbnN1bWVyPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uY2hpbGRyZW4obCl9KS5jb250ZXh0VHlwZT1sLGx9bj12LnNsaWNlLGw9e19fZTpmdW5jdGlvbihuLGwsdSx0KXtmb3IodmFyIGksbyxyO2w9bC5fXzspaWYoKGk9bC5fX2MpJiYhaS5fXyl0cnl7aWYoKG89aS5jb25zdHJ1Y3RvcikmJm51bGwhPW8uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYoaS5zZXRTdGF0ZShvLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihuKSkscj1pLl9fZCksbnVsbCE9aS5jb21wb25lbnREaWRDYXRjaCYmKGkuY29tcG9uZW50RGlkQ2F0Y2gobix0fHx7fSkscj1pLl9fZCkscilyZXR1cm4gaS5fX0U9aX1jYXRjaChsKXtuPWx9dGhyb3cgbn19LHU9MCx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZ2b2lkIDA9PT1uLmNvbnN0cnVjdG9yfSx4LnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihuLGwpe3ZhciB1O3U9bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPXcoe30sdGhpcy5zdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bih3KHt9LHUpLHRoaXMucHJvcHMpKSxuJiZ3KHUsbiksbnVsbCE9biYmdGhpcy5fX3YmJihsJiZ0aGlzLl9zYi5wdXNoKGwpLE0odGhpcykpfSx4LnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLG4mJnRoaXMuX19oLnB1c2gobiksTSh0aGlzKSl9LHgucHJvdG90eXBlLnJlbmRlcj1rLGk9W10scj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxlPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uX192Ll9fYi1sLl9fdi5fX2J9LCQuX19yPTAsZj0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSxjPTAscz1GKCExKSxhPUYoITApLGg9MDtleHBvcnR7eCBhcyBDb21wb25lbnQsayBhcyBGcmFnbWVudCxLIGFzIGNsb25lRWxlbWVudCxRIGFzIGNyZWF0ZUNvbnRleHQsXyBhcyBjcmVhdGVFbGVtZW50LGIgYXMgY3JlYXRlUmVmLF8gYXMgaCxKIGFzIGh5ZHJhdGUsdCBhcyBpc1ZhbGlkRWxlbWVudCxsIGFzIG9wdGlvbnMsRyBhcyByZW5kZXIsSCBhcyB0b0NoaWxkQXJyYXl9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJlYWN0Lm1vZHVsZS5qcy5tYXBcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0KCkge1xuICAgIHJldHVybiBuZXcgRW52aXJvbm1lbnQoKS5lbnZpcm9ubWVudCgpO1xuICB9XG4gIHN0YXRpYyBwcmVmaXgoKSB7XG4gICAgcmV0dXJuIG5ldyBFbnZpcm9ubWVudCgpLnByZWZpeCgpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaG9zdCA9IHRoaXMuX2dldEhvc3RuYW1lKCk7XG4gIH1cbiAgZW52aXJvbm1lbnQoKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gYWNjZXNzIGEgc2VydmVyIHJ1bm5pbmcgb24gbG9jYWxob3N0IHRocm91Z2ggYSB0b29sXG4gICAgLy8gbGlrZSBWaXJ0dWFsQm94LCB5b3UgbmVlZCB0byB1c2UgYW4gSVAgYWRkcmVzcyBsaWtlIFwiMTAuMC4yLjJcIi5cbiAgICAvLyBUbyBwcmV2ZW50IGxvZ3MgZnJvbSBnb2luZyB0byBwcm9kdWN0aW9uIGluIHRoZXNlIGNhc2VzLCBjaGVja1xuICAgIC8vIGlmIHRoZSBob3N0IGlzIGFuIElQIGFkZHJlc3MuIElmIHNvLCBhc3N1bWUgd2UncmUgaW4gXCJkZXYuXCJcbiAgICAvL1xuICAgIC8vIFJlZ2V4IFBsYXlncm91bmQ6XG4gICAgLy8gaHR0cHM6Ly9yZWdleDEwMS5jb20vci9RUmJIMGovMVxuICAgIGlmICh0aGlzLmhvc3QubWF0Y2goL14oXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30pJC8pKSB7XG4gICAgICByZXR1cm4gJ2Rldic7XG4gICAgfVxuXG4gICAgLy8gU29tZSBkZXZzIG1hc2sgdGhlaXIgbG9jYWxob3N0IHdpdGggYSBcIi5sb2NhbFwiIHByZWZpeFxuICAgIC8vIGUuZy4gXCIxMjcuMC4wLjFcIiAtPiBcImVscC5sb2NhbC5kYXZlcmFtc2V5LmNvbVwiLlxuICAgIC8vIFRoaXMgaXMgYW5vdGhlciBjaGVjayB0byBzZWUgaWYgd2UgYXJlIGluIFwiZGV2XCJcbiAgICBpZiAodGhpcy5ob3N0LmluZGV4T2YoJy5sb2NhbCcpID4gLTEpIHtcbiAgICAgIHJldHVybiAnZGV2JztcbiAgICB9XG4gICAgaWYgKHRoaXMuaG9zdC5pbmRleE9mKCdsb2NhbGhvc3QnKSA+IC0xKSB7XG4gICAgICByZXR1cm4gJ2Rldic7XG4gICAgfVxuICAgIGlmICh0aGlzLmhvc3QuaW5kZXhPZigndGVzdC4nKSA+IC0xKSB7XG4gICAgICByZXR1cm4gJ3Rlc3QnO1xuICAgIH1cbiAgICBpZiAodGhpcy5ob3N0LmluZGV4T2YoJ3FhLicpID4gLTEpIHtcbiAgICAgIHJldHVybiAncWEnO1xuICAgIH1cbiAgICByZXR1cm4gJ3Byb2QnO1xuICB9XG4gIHByZWZpeCgpIHtcbiAgICBjb25zdCBlbnYgPSB0aGlzLmVudmlyb25tZW50KCk7XG4gICAgY29uc3QgcHJlZml4ZXMgPSB7XG4gICAgICBkZXY6ICd0ZXN0LicsXG4gICAgICB0ZXN0OiAndGVzdC4nLFxuICAgICAgcWE6ICdxYS4nLFxuICAgICAgcHJvZDogJydcbiAgICB9O1xuICAgIHJldHVybiBwcmVmaXhlc1tlbnZdO1xuICB9XG4gIF9nZXRIb3N0bmFtZSgpIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBFbnZpcm9ubWVudDsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgb3B0aW1pemVseSA9IHJlcXVpcmUoJ0BvcHRpbWl6ZWx5L29wdGltaXplbHktc2RrJyk7XG52YXIgaG9pc3ROb25SZWFjdFN0YXRpY3MgPSByZXF1aXJlKCdob2lzdC1ub24tcmVhY3Qtc3RhdGljcycpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcE5hbWVzcGFjZURlZmF1bHQoZSkge1xuICB2YXIgbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmIChlKSB7XG4gICAgT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgaWYgKGsgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICB2YXIgZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgayk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCBrLCBkLmdldCA/IGQgOiB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVba107IH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbi5kZWZhdWx0ID0gZTtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUobik7XG59XG5cbnZhciBSZWFjdF9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChSZWFjdCk7XG52YXIgb3B0aW1pemVseV9fbmFtZXNwYWNlID0gLyojX19QVVJFX18qL19pbnRlcm9wTmFtZXNwYWNlRGVmYXVsdChvcHRpbWl6ZWx5KTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxOC0yMDE5LCBPcHRpbWl6ZWx5XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBPcHRpbWl6ZWx5Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoe1xuICAgIG9wdGltaXplbHk6IG51bGwsXG4gICAgaXNTZXJ2ZXJTaWRlOiBmYWxzZSxcbiAgICB0aW1lb3V0OiAwLFxufSk7XG52YXIgT3B0aW1pemVseUNvbnRleHRDb25zdW1lciA9IE9wdGltaXplbHlDb250ZXh0LkNvbnN1bWVyO1xudmFyIE9wdGltaXplbHlDb250ZXh0UHJvdmlkZXIgPSBPcHRpbWl6ZWx5Q29udGV4dC5Qcm92aWRlcjtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTksIE9wdGltaXplbHlcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZnVuY3Rpb24gYXJlVXNlcnNFcXVhbCh1c2VyMSwgdXNlcjIpIHtcbiAgICBpZiAodXNlcjEuaWQgIT09IHVzZXIyLmlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHVzZXIxQXR0cmlidXRlcyA9IHVzZXIxLmF0dHJpYnV0ZXMgfHwge307XG4gICAgdmFyIHVzZXIyQXR0cmlidXRlcyA9IHVzZXIyLmF0dHJpYnV0ZXMgfHwge307XG4gICAgdmFyIHVzZXIxS2V5cyA9IE9iamVjdC5rZXlzKHVzZXIxQXR0cmlidXRlcyk7XG4gICAgdmFyIHVzZXIyS2V5cyA9IE9iamVjdC5rZXlzKHVzZXIyQXR0cmlidXRlcyk7XG4gICAgaWYgKHVzZXIxS2V5cy5sZW5ndGggIT09IHVzZXIyS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBfaSA9IDAsIHVzZXIxS2V5c18xID0gdXNlcjFLZXlzOyBfaSA8IHVzZXIxS2V5c18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIga2V5ID0gdXNlcjFLZXlzXzFbX2ldO1xuICAgICAgICBpZiAodXNlcjFBdHRyaWJ1dGVzW2tleV0gIT09IHVzZXIyQXR0cmlidXRlc1trZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBob2lzdFN0YXRpY3NBbmRGb3J3YXJkUmVmcyhUYXJnZXQsIFNvdXJjZSwgZGlzcGxheU5hbWUpIHtcbiAgICAvLyBNYWtlIHN1cmUgdG8gaG9pc3Qgc3RhdGljcyBhbmQgZm9yd2FyZCBhbnkgcmVmcyB0aHJvdWdoIGZyb20gU291cmNlIHRvIFRhcmdldFxuICAgIC8vIEZyb20gdGhlIFJlYWN0IGRvY3M6XG4gICAgLy8gICBodHRwczovL3JlYWN0anMub3JnL2RvY3MvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMuaHRtbCNzdGF0aWMtbWV0aG9kcy1tdXN0LWJlLWNvcGllZC1vdmVyXG4gICAgLy8gICBodHRwczovL3JlYWN0anMub3JnL2RvY3MvZm9yd2FyZGluZy1yZWZzLmh0bWwjZm9yd2FyZGluZy1yZWZzLWluLWhpZ2hlci1vcmRlci1jb21wb25lbnRzXG4gICAgdmFyIGZvcndhcmRSZWYgPSBmdW5jdGlvbiAocHJvcHMsIHJlZikgeyByZXR1cm4gUmVhY3RfX25hbWVzcGFjZS5jcmVhdGVFbGVtZW50KFRhcmdldCwgX19hc3NpZ24oe30sIHByb3BzLCB7IGZvcndhcmRlZFJlZjogcmVmIH0pKTsgfTtcbiAgICBmb3J3YXJkUmVmLmRpc3BsYXlOYW1lID0gXCJcIi5jb25jYXQoZGlzcGxheU5hbWUsIFwiKFwiKS5jb25jYXQoU291cmNlLmRpc3BsYXlOYW1lIHx8IFNvdXJjZS5uYW1lLCBcIilcIik7XG4gICAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFJlYWN0X19uYW1lc3BhY2UuZm9yd2FyZFJlZihmb3J3YXJkUmVmKSwgU291cmNlKTtcbn1cbmZ1bmN0aW9uIGNvZXJjZVVua25vd25BdHRyc1ZhbHVlRm9yQ29tcGFyaXNvbihtYXliZUF0dHJzKSB7XG4gICAgaWYgKHR5cGVvZiBtYXliZUF0dHJzID09PSAnb2JqZWN0JyAmJiBtYXliZUF0dHJzICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBtYXliZUF0dHJzO1xuICAgIH1cbiAgICByZXR1cm4ge307XG59XG4vKipcbiAqIEVxdWFsaXR5IGNoZWNrIGFwcGxpZWQgdG8gb3ZlcnJpZGUgdXNlciBhdHRyaWJ1dGVzIHBhc3NlZCBpbnRvIGhvb2tzLiBVc2VkIHRvIGRldGVybWluZSB3aGVuIHdlIG5lZWQgdG8gcmVjb21wdXRlXG4gKiBhIGRlY2lzaW9uIGJlY2F1c2UgYSBuZXcgc2V0IG9mIG92ZXJyaWRlIGF0dHJpYnV0ZXMgd2FzIHBhc3NlZCBpbnRvIGEgaG9vay5cbiAqIEBwYXJhbSB7VXNlckF0dHJpYnV0ZXN8dW5kZWZpbmVkfSBvbGRBdHRyc1xuICogQHBhcmFtIHtVc2VyQXR0cmlidXRlc3x1bmRlZmluZWR9IG5ld0F0dHJzXG4gKiBAcmV0dXJucyBib29sZWFuXG4gKi9cbmZ1bmN0aW9uIGFyZUF0dHJpYnV0ZXNFcXVhbChtYXliZU9sZEF0dHJzLCBtYXliZU5ld0F0dHJzKSB7XG4gICAgdmFyIG9sZEF0dHJzID0gY29lcmNlVW5rbm93bkF0dHJzVmFsdWVGb3JDb21wYXJpc29uKG1heWJlT2xkQXR0cnMpO1xuICAgIHZhciBuZXdBdHRycyA9IGNvZXJjZVVua25vd25BdHRyc1ZhbHVlRm9yQ29tcGFyaXNvbihtYXliZU5ld0F0dHJzKTtcbiAgICB2YXIgb2xkQXR0cnNLZXlzID0gT2JqZWN0LmtleXMob2xkQXR0cnMpO1xuICAgIHZhciBuZXdBdHRyc0tleXMgPSBPYmplY3Qua2V5cyhuZXdBdHRycyk7XG4gICAgaWYgKG9sZEF0dHJzS2V5cy5sZW5ndGggIT09IG5ld0F0dHJzS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gRGlmZmVyZW50IGF0dHIgY291bnQgLSBtdXN0IHVwZGF0ZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvbGRBdHRyc0tleXMuZXZlcnkoZnVuY3Rpb24gKG9sZEF0dHJLZXkpIHtcbiAgICAgICAgcmV0dXJuIG9sZEF0dHJLZXkgaW4gbmV3QXR0cnMgJiYgb2xkQXR0cnNbb2xkQXR0cktleV0gPT09IG5ld0F0dHJzW29sZEF0dHJLZXldO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlRmFpbGVkRGVjaXNpb24oZmxhZ0tleSwgbWVzc2FnZSwgdXNlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBmbGFnS2V5OiBmbGFnS2V5LFxuICAgICAgICBydWxlS2V5OiBudWxsLFxuICAgICAgICB2YXJpYXRpb25LZXk6IG51bGwsXG4gICAgICAgIHZhcmlhYmxlczoge30sXG4gICAgICAgIHJlYXNvbnM6IFttZXNzYWdlXSxcbiAgICAgICAgdXNlckNvbnRleHQ6IHtcbiAgICAgICAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgICAgICAgYXR0cmlidXRlczogdXNlci5hdHRyaWJ1dGVzLFxuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiBzcHJpbnRmKGZvcm1hdCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGkgPSAwO1xuICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJnID0gYXJnc1tpKytdO1xuICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiwgMjAyNCwgT3B0aW1pemVseVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTm90aWZpZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm90aWZpZXIoKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgfVxuICAgIE5vdGlmaWVyLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIU5vdGlmaWVyLmluc3RhbmNlKSB7XG4gICAgICAgICAgICBOb3RpZmllci5pbnN0YW5jZSA9IG5ldyBOb3RpZmllcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOb3RpZmllci5pbnN0YW5jZTtcbiAgICB9O1xuICAgIE5vdGlmaWVyLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoa2V5LCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uSWQgPSBcImtleS1cIi5jb25jYXQoTWF0aC5mbG9vcigxMDAwMDAgKyBNYXRoLnJhbmRvbSgpICogOTk5OTk5KSk7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2goeyBzdWJzY3JpcHRpb25JZDogc3Vic2NyaXB0aW9uSWQsIGtleToga2V5LCBjYWxsYmFjazogY2FsbGJhY2sgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2ZXJJbmRleCA9IF90aGlzLm9ic2VydmVycy5maW5kSW5kZXgoZnVuY3Rpb24gKG9ic2VydmVyKSB7IHJldHVybiBvYnNlcnZlci5zdWJzY3JpcHRpb25JZCA9PT0gc3Vic2NyaXB0aW9uSWQ7IH0pO1xuICAgICAgICAgICAgaWYgKG9ic2VydmVySW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIF90aGlzLm9ic2VydmVycy5zcGxpY2Uob2JzZXJ2ZXJJbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBOb3RpZmllci5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKG9ic2VydmVyKSB7IHJldHVybiBvYnNlcnZlci5rZXkgPT09IGtleTsgfSkuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHsgcmV0dXJuIG9ic2VydmVyLmNhbGxiYWNrKCk7IH0pO1xuICAgIH07XG4gICAgcmV0dXJuIE5vdGlmaWVyO1xufSgpKTtcbnZhciBub3RpZmllciA9IE5vdGlmaWVyLmdldEluc3RhbmNlKCk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMjIsMjAyNCBPcHRpbWl6ZWx5XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBsb2dIYW5kbGVyID0gb3B0aW1pemVseV9fbmFtZXNwYWNlLmdldExvZ2dlcignUmVhY3RTREsnKTtcbnZhciBsb2dnZXIkMiA9IHtcbiAgICB3YXJuOiBmdW5jdGlvbiAobXNnKSB7XG4gICAgICAgIHZhciBzcGxhdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgc3BsYXRbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ0hhbmRsZXIubG9nKG9wdGltaXplbHlfX25hbWVzcGFjZS5lbnVtcy5MT0dfTEVWRUwuV0FSTklORywgc3ByaW50Zi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW21zZ10sIHNwbGF0LCBmYWxzZSkpKTtcbiAgICB9LFxuICAgIGluZm86IGZ1bmN0aW9uIChtc2cpIHtcbiAgICAgICAgdmFyIHNwbGF0ID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBzcGxhdFtfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nSGFuZGxlci5sb2cob3B0aW1pemVseV9fbmFtZXNwYWNlLmVudW1zLkxPR19MRVZFTC5JTkZPLCBzcHJpbnRmLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbbXNnXSwgc3BsYXQsIGZhbHNlKSkpO1xuICAgIH0sXG4gICAgZGVidWc6IGZ1bmN0aW9uIChtc2cpIHtcbiAgICAgICAgdmFyIHNwbGF0ID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBzcGxhdFtfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nSGFuZGxlci5sb2cob3B0aW1pemVseV9fbmFtZXNwYWNlLmVudW1zLkxPR19MRVZFTC5ERUJVRywgc3ByaW50Zi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW21zZ10sIHNwbGF0LCBmYWxzZSkpKTtcbiAgICB9LFxuICAgIGVycm9yOiBmdW5jdGlvbiAobXNnKSB7XG4gICAgICAgIHZhciBzcGxhdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgc3BsYXRbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvZ0hhbmRsZXIubG9nKG9wdGltaXplbHlfX25hbWVzcGFjZS5lbnVtcy5MT0dfTEVWRUwuRVJST1IsIHNwcmludGYuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFttc2ddLCBzcGxhdCwgZmFsc2UpKSk7XG4gICAgfSxcbn07XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTktMjAyNCwgT3B0aW1pemVseVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5vdFJlYWR5UmVhc29uO1xuKGZ1bmN0aW9uIChOb3RSZWFkeVJlYXNvbikge1xuICAgIE5vdFJlYWR5UmVhc29uW1wiVElNRU9VVFwiXSA9IFwiVElNRU9VVFwiO1xuICAgIE5vdFJlYWR5UmVhc29uW1wiTk9fQ0xJRU5UXCJdID0gXCJOT19DTElFTlRcIjtcbiAgICBOb3RSZWFkeVJlYXNvbltcIlVTRVJfTk9UX1JFQURZXCJdID0gXCJVU0VSX05PVF9SRUFEWVwiO1xufSkoTm90UmVhZHlSZWFzb24gfHwgKE5vdFJlYWR5UmVhc29uID0ge30pKTtcbnZhciBSRUFDVF9TREtfQ0xJRU5UX0VOR0lORSA9ICdyZWFjdC1zZGsnO1xudmFyIFJFQUNUX1NES19DTElFTlRfVkVSU0lPTiA9ICczLjMuMSc7XG52YXIgRGVmYXVsdFVzZXIgPSB7XG4gICAgaWQ6IG51bGwsXG4gICAgYXR0cmlidXRlczoge30sXG59O1xudmFyIERFRkFVTFRfT05fUkVBRFlfVElNRU9VVCA9IDUwMDA7XG52YXIgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LlxuICAgICAqIEBwYXJhbSB7b3B0aW1pemVseS5Db25maWd9IFtjb25maWc9e31dXG4gICAgICovXG4gICAgZnVuY3Rpb24gT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50KGNvbmZpZykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnVzZXJDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5vblVzZXJVcGRhdGVIYW5kbGVycyA9IFtdO1xuICAgICAgICB0aGlzLmlzVXNlclByb21pc2VSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgICAvLyBJdHMgdXN1YWxseSB0cnVlIGZyb20gdGhlIGJlZ2lubmluZyB3aGVuIHVzZXIgaXMgcHJvdmlkZWQgYXMgYW4gb2JqZWN0IGluIHRoZSBgT3B0aW1pemVseVByb3ZpZGVyYFxuICAgICAgICAvLyBUaGlzIGJlY29tZXMgbW9yZSBzaWduaWZpY2FudCB3aGVuIGEgcHJvbWlzZSBpcyBwcm92aWRlZCBpbnN0ZWFkLlxuICAgICAgICB0aGlzLmlzVXNlclJlYWR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25Gb3JjZWRWYXJpYXRpb25zVXBkYXRlSGFuZGxlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5mb3JjZWREZWNpc2lvbkZsYWdLZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAvLyBJcyB0aGUgamF2YXNjcmlwdCBTREsgaW5zdGFuY2UgcmVhZHkuXG4gICAgICAgIHRoaXMuaXNDbGllbnRSZWFkeSA9IGZhbHNlO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGFkZCBhdXRvdXBkYXRlIGxpc3RlbmVyIHRvIHRoZSBob29rcyBhZnRlciB0aGUgaW5zdGFuY2UgYmVjYW1lIGZ1bGx5IHJlYWR5IHRvIGF2b2lkIHJlZHVuZGFudCB1cGRhdGVzIHRvIGhvb2tzXG4gICAgICAgIHRoaXMuY2xpZW50QW5kVXNlclJlYWR5UHJvbWlzZUZ1bGZpbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzVXNpbmdTZGtLZXkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51c2VyID0gX19hc3NpZ24oe30sIERlZmF1bHRVc2VyKTtcbiAgICAgICAgdGhpcy5pbml0aWFsQ29uZmlnID0gY29uZmlnO1xuICAgICAgICB2YXIgY29uZmlnV2l0aENsaWVudEluZm8gPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29uZmlnKSwgeyBjbGllbnRFbmdpbmU6IFJFQUNUX1NES19DTElFTlRfRU5HSU5FLCBjbGllbnRWZXJzaW9uOiBSRUFDVF9TREtfQ0xJRU5UX1ZFUlNJT04gfSk7XG4gICAgICAgIHRoaXMudXNlclByb21pc2VSZXNvbHZlciA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAgICAgdmFyIHVzZXJSZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgX3RoaXMudXNlclByb21pc2VSZXNvbHZlciA9IHJlc29sdmU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jbGllbnQgPSBvcHRpbWl6ZWx5X19uYW1lc3BhY2UuY3JlYXRlSW5zdGFuY2UoY29uZmlnV2l0aENsaWVudEluZm8pO1xuICAgICAgICB0aGlzLmlzQ2xpZW50UmVhZHkgPSAhIXRoaXMuZ2V0T3B0aW1pemVseUNvbmZpZygpO1xuICAgICAgICB0aGlzLmlzVXNpbmdTZGtLZXkgPSAhIWNvbmZpZ1dpdGhDbGllbnRJbmZvLnNka0tleTtcbiAgICAgICAgaWYgKHRoaXMuX2NsaWVudCkge1xuICAgICAgICAgICAgdmFyIGNsaWVudFJlYWR5UHJvbWlzZSA9IHRoaXMuX2NsaWVudC5vblJlYWR5KCk7XG4gICAgICAgICAgICB0aGlzLmNsaWVudEFuZFVzZXJSZWFkeVByb21pc2UgPSBQcm9taXNlLmFsbChbdXNlclJlYWR5UHJvbWlzZSwgY2xpZW50UmVhZHlQcm9taXNlXSkudGhlbihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB2YXIgdXNlclJlc3VsdCA9IF9hWzBdLCBjbGllbnRSZXN1bHQgPSBfYVsxXTtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc0NsaWVudFJlYWR5ID0gY2xpZW50UmVzdWx0LnN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNVc2VyUmVhZHkgPSB1c2VyUmVzdWx0LnN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgdmFyIGNsaWVudEFuZFVzZXJSZWFkeSA9IF90aGlzLmlzUmVhZHkoKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5jbGllbnRBbmRVc2VyUmVhZHlQcm9taXNlRnVsZmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBjbGllbnRBbmRVc2VyUmVhZHksXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNsaWVudEFuZFVzZXJSZWFkeSA/ICdDbGllbnQgYW5kIHVzZXIgYXJlIGJvdGggcmVhZHkuJyA6ICdDbGllbnQgb3IgdXNlciBkaWQgbm90IGJlY29tZSByZWFkeS4nLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byByZXNvbHZlIGRhdGFmaWxlIGFuZCB1c2VyIGluZm9ybWF0aW9uIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJyk7XG4gICAgICAgICAgICB0aGlzLmNsaWVudEFuZFVzZXJSZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBOb3RSZWFkeVJlYXNvbi5OT19DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4nLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LnByb3RvdHlwZS5nZXRVc2VyV2l0aE92ZXJyaWRlcyA9IGZ1bmN0aW9uIChvdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHZhciBpZCA9IG92ZXJyaWRlVXNlcklkID09PSB1bmRlZmluZWQgPyB0aGlzLnVzZXIuaWQgOiBvdmVycmlkZVVzZXJJZDtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBvdmVycmlkZUF0dHJpYnV0ZXMgPT09IHVuZGVmaW5lZCA/IHRoaXMudXNlci5hdHRyaWJ1dGVzIDogb3ZlcnJpZGVBdHRyaWJ1dGVzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlcyxcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuZ2V0SXNSZWFkeVByb21pc2VGdWxmaWxsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudEFuZFVzZXJSZWFkeVByb21pc2VGdWxmaWxsZWQ7XG4gICAgfTtcbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmdldElzVXNpbmdTZGtLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVXNpbmdTZGtLZXk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LnByb3RvdHlwZSwgXCJvZHBFeHBsaWNpdGx5T2ZmXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5pbml0aWFsQ29uZmlnLm9kcE9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kaXNhYmxlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUub25SZWFkeSA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IHt9OyB9XG4gICAgICAgIHZhciB0aW1lb3V0SWQ7XG4gICAgICAgIHZhciB0aW1lb3V0ID0gREVGQVVMVF9PTl9SRUFEWV9USU1FT1VUO1xuICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRpbWVvdXQgPSBjb25maWcudGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246IE5vdFJlYWR5UmVhc29uLlRJTUVPVVQsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBiZWZvcmUgdGltZW91dCcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFSZWFkeVByb21pc2U6IF90aGlzLmNsaWVudEFuZFVzZXJSZWFkeVByb21pc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW3RoaXMuY2xpZW50QW5kVXNlclJlYWR5UHJvbWlzZSwgdGltZW91dFByb21pc2VdKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcmVzXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgfSk7XG4gICAgfTtcbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmdldFVzZXJDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIGdldCB1c2VyIGNvbnRleHQuIE9wdGltaXplbHkgY2xpZW50IG5vdCBpbml0aWFsaXplZC4nKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy51c2VyQ29udGV4dCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIGdldCB1c2VyIGNvbnRleHQuIFVzZXIgY29udGV4dCBub3Qgc2V0LicpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckNvbnRleHQ7XG4gICAgfTtcbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLnNldEN1cnJlbnRVc2VyQ29udGV4dCA9IGZ1bmN0aW9uICh1c2VySW5mbykge1xuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybihcIlVuYWJsZSB0byBzZXQgdXNlciBjb250ZXh0IGZvciB1c2VyIElEIFwiLmNvbmNhdCh1c2VySW5mby5pZCwgXCIuIE9wdGltaXplbHkgY2xpZW50IG5vdCBpbml0aWFsaXplZC5cIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy51c2VyQ29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy51c2VyQ29udGV4dCA9IHRoaXMuX2NsaWVudC5jcmVhdGVVc2VyQ29udGV4dCh1c2VySW5mby5pZCB8fCB1bmRlZmluZWQsIHVzZXJJbmZvLmF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjdXJyZW50VXNlckNvbnRleHRVc2VySW5mbyA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnVzZXJDb250ZXh0LmdldFVzZXJJZCgpLFxuICAgICAgICAgICAgYXR0cmlidXRlczogdGhpcy51c2VyQ29udGV4dC5nZXRBdHRyaWJ1dGVzKCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICghYXJlVXNlcnNFcXVhbCh1c2VySW5mbywgY3VycmVudFVzZXJDb250ZXh0VXNlckluZm8pKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJDb250ZXh0ID0gdGhpcy5fY2xpZW50LmNyZWF0ZVVzZXJDb250ZXh0KHVzZXJJbmZvLmlkIHx8IHVuZGVmaW5lZCwgdXNlckluZm8uYXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUubWFrZVVzZXJDb250ZXh0SW5zdGFuY2UgPSBmdW5jdGlvbiAodXNlckluZm8pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oXCJVbmFibGUgdG8gY3JlYXRlIHVzZXIgY29udGV4dCBmb3IgXCIuY29uY2F0KHVzZXJJbmZvLmlkLCBcIi4gT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUgb3Igbm90IHJlYWR5LlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51c2VyQ29udGV4dCAmJiBhcmVVc2Vyc0VxdWFsKHVzZXJJbmZvLCB0aGlzLnVzZXIpKSB7XG4gICAgICAgICAgICAvLyBJbXBvcnRhbnQ6IFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBleGlzdGluZyB1c2VyIGNvbnRleHQgaW5zdGFuY2UgaWYgdGhlIHVzZXIgaW5mbyBpcyB0aGUgc2FtZVxuICAgICAgICAgICAgLy8gbmV3IGNvbnRleHQgbWlzc2VzIHRoZSBmb3JjZWQgdmFyaWF0aW9uIHNldCBvbiB0aGUgZXhpc3RpbmcgY29udGV4dFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckNvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5jcmVhdGVVc2VyQ29udGV4dCh1c2VySW5mby5pZCB8fCB1bmRlZmluZWQsIHVzZXJJbmZvLmF0dHJpYnV0ZXMpO1xuICAgIH07XG4gICAgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LnByb3RvdHlwZS5mZXRjaFF1YWxpZmllZFNlZ21lbnRzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZhbHNlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9kcEV4cGxpY2l0bHlPZmYgfHwgISgoX2EgPSB0aGlzLl9jbGllbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pc09kcEludGVncmF0ZWQoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnVzZXJDb250ZXh0LmZldGNoUXVhbGlmaWVkU2VnbWVudHMob3B0aW9ucyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuc2V0VXNlciA9IGZ1bmN0aW9uICh1c2VySW5mbykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZmV0Y2hRdWFsaWZlZFNlZ21lbnRzU3VjY2VlZDtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9kLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHVzZXIgaWQgaXMgbm90IHByZXNlbnQgYW5kIE9EUCBpcyBleHBsaWNpdGx5IG9mZiwgdXNlciBwcm9taXNlIHdpbGwgYmUgcGVuZGluZyB1bnRpbCBzZXRVc2VyIGlzIGNhbGxlZCBhZ2FpbiB3aXRoIHByb3BlciB1c2VyIGlkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlckluZm8uaWQgPT09IG51bGwgJiYgdGhpcy5vZHBFeHBsaWNpdGx5T2ZmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1c2VySW5mby5pZCB8fCBEZWZhdWx0VXNlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB1c2VySW5mby5hdHRyaWJ1dGVzIHx8IERlZmF1bHRVc2VyLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodXNlckluZm8uaWQgPT09IERlZmF1bHRVc2VyLmlkKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgU0RLIGNsaWVudCB0byBiZSByZWFkeSBiZWZvcmUuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sICgoX2EgPSB0aGlzLl9jbGllbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vblJlYWR5KCkpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIFNESyBjbGllbnQgdG8gYmUgcmVhZHkgYmVmb3JlLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICBfZC5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHRoZSB1c2VyIGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFVzZXJDb250ZXh0KHVzZXJJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIChwb3RlbnRpYWxseSkgcmV0cmlldmUgdGhlIFZVSUQgc2V0IGluIEpTIHVzZXJDb250ZXh0IG9yIG5vb3Agb3IgdG8gRGVmYXVsdFVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlci5pZCA9ICgoX2IgPSB0aGlzLnVzZXJDb250ZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0VXNlcklkKCkpIHx8IERlZmF1bHRVc2VyLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN5bmNocm9ub3VzIHVzZXIgY29udGV4dCBzZXR0aW5nIGlzIHJlcXVpcmVkIGluY2x1ZGluZyBmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nIChTU1IpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEN1cnJlbnRVc2VyQ29udGV4dCh1c2VySW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGZldGNoIHF1YWxpZmllZCBzZWdtZW50cyBzdWNjZXNzIGZvciBmYWlsdXJlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCAoKF9jID0gdGhpcy5fY2xpZW50KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Mub25SZWFkeSgpKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gd2FpdCBmb3IgZmV0Y2ggcXVhbGlmaWVkIHNlZ21lbnRzIHN1Y2Nlc3MgZm9yIGZhaWx1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kLmxhYmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmZldGNoUXVhbGlmaWVkU2VnbWVudHMoKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoUXVhbGlmZWRTZWdtZW50c1N1Y2NlZWQgPSBfZC5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNVc2VyUHJvbWlzZVJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUHJvbWlzZVJlc29sdmVyKHsgc3VjY2VzczogZmV0Y2hRdWFsaWZlZFNlZ21lbnRzU3VjY2VlZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVXNlclByb21pc2VSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uVXNlclVwZGF0ZUhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIGhhbmRsZXIoX3RoaXMudXNlcik7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUub25Vc2VyVXBkYXRlID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5vblVzZXJVcGRhdGVIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGluZCA9IF90aGlzLm9uVXNlclVwZGF0ZUhhbmRsZXJzLmluZGV4T2YoaGFuZGxlcik7XG4gICAgICAgICAgICBpZiAoaW5kID4gLTEpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5vblVzZXJVcGRhdGVIYW5kbGVycy5zcGxpY2UoaW5kLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGEgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgc2V0Rm9yY2VkVmFyaWF0aW9uIGlzIGNhbGxlZCBvblxuICAgICAqIHRoaXMgY2xpZW50LiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB1bi1yZWdpc3RlcnMgdGhlIGhhbmRsZXIgd2hlbiBjYWxsZWQuXG4gICAgICogQHBhcmFtIHtPbkZvcmNlZFZhcmlhdGlvbnNVcGRhdGVIYW5kbGVyfSBoYW5kbGVyXG4gICAgICogQHJldHVybnMge0Rpc3Bvc2VGbn1cbiAgICAgKi9cbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLm9uRm9yY2VkVmFyaWF0aW9uc1VwZGF0ZSA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMub25Gb3JjZWRWYXJpYXRpb25zVXBkYXRlSGFuZGxlcnMucHVzaChoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpbmQgPSBfdGhpcy5vbkZvcmNlZFZhcmlhdGlvbnNVcGRhdGVIYW5kbGVycy5pbmRleE9mKGhhbmRsZXIpO1xuICAgICAgICAgICAgaWYgKGluZCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMub25Gb3JjZWRWYXJpYXRpb25zVXBkYXRlSGFuZGxlcnMuc3BsaWNlKGluZCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmlzUmVhZHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2xpZW50UmVhZHkgJiYgdGhpcy5pc1VzZXJSZWFkeTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEJ1Y2tldHMgdmlzaXRvciBhbmQgc2VuZHMgaW1wcmVzc2lvbiBldmVudCB0byBPcHRpbWl6ZWx5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cGVyaW1lbnRLZXlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW292ZXJyaWRlVXNlcklkXVxuICAgICAqIEBwYXJhbSB7b3B0aW1pemVseS5Vc2VyQXR0cmlidXRlc30gW292ZXJyaWRlQXR0cmlidXRlc11cbiAgICAgKiBAcmV0dXJucyB7KHN0cmluZyB8IG51bGwpfVxuICAgICAqIEBtZW1iZXJvZiBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnRcbiAgICAgKi9cbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKGV4cGVyaW1lbnRLZXksIG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBhY3RpdmF0ZSBleHBlcmltZW50IFwiJXNcIiBiZWNhdXNlIE9wdGltaXplbHkgY2xpZW50IGZhaWxlZCB0byBpbml0aWFsaXplLicsIGV4cGVyaW1lbnRLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVzZXIgPSB0aGlzLmdldFVzZXJXaXRoT3ZlcnJpZGVzKG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAodXNlci5pZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIuaW5mbygnVW5hYmxlIHRvIGFjdGl2YXRlIGV4cGVyaW1lbnQgXCIlc1wiIGJlY2F1c2UgVXNlciBJRCBpcyBub3Qgc2V0JywgZXhwZXJpbWVudEtleSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmFjdGl2YXRlKGV4cGVyaW1lbnRLZXksIHVzZXIuaWQsIHVzZXIuYXR0cmlidXRlcyk7XG4gICAgfTtcbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmRlY2lkZSA9IGZ1bmN0aW9uIChrZXksIG9wdGlvbnMsIG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0gW107IH1cbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBldmFsdWF0ZSBmZWF0dXJlIFwiJXNcIiBiZWNhdXNlIE9wdGltaXplbHkgY2xpZW50IGZhaWxlZCB0byBpbml0aWFsaXplLicsIGtleSk7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRmFpbGVkRGVjaXNpb24oa2V5LCBcIlVuYWJsZSB0byBldmFsdWF0ZSBmbGFnIFwiLmNvbmNhdChrZXksIFwiIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuXCIpLCB0aGlzLnVzZXIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1c2VyID0gdGhpcy5nZXRVc2VyV2l0aE92ZXJyaWRlcyhvdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKHVzZXIuaWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLmluZm8oJ1VuYWJsZSB0byBldmFsdWF0ZSBmZWF0dXJlIFwiJXNcIiBiZWNhdXNlIFVzZXIgSUQgaXMgbm90IHNldC4nLCBrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZhaWxlZERlY2lzaW9uKGtleSwgXCJVbmFibGUgdG8gZXZhbHVhdGUgZmxhZyBcIi5jb25jYXQoa2V5LCBcIiBiZWNhdXNlIFVzZXIgSUQgaXMgbm90IHNldC5cIiksIHVzZXIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvcHRseVVzZXJDb250ZXh0ID0gdGhpcy5tYWtlVXNlckNvbnRleHRJbnN0YW5jZSh1c2VyKTtcbiAgICAgICAgaWYgKG9wdGx5VXNlckNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0bHlVc2VyQ29udGV4dC5kZWNpZGUoa2V5LCBvcHRpb25zKSksIHsgdXNlckNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHVzZXIuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB9IH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVGYWlsZWREZWNpc2lvbihrZXksIFwiTm90IEV2YWx1YXRpbmcgZmxhZyBcIi5jb25jYXQoa2V5LCBcIiBiZWNhdXNlIHVzZXIgaWQgb3IgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkXCIpLCB1c2VyKTtcbiAgICB9O1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuZGVjaWRlRm9yS2V5cyA9IGZ1bmN0aW9uIChrZXlzLCBvcHRpb25zLCBvdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IFtdOyB9XG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICAgICAgICBsb2dnZXIkMi53YXJuKCdVbmFibGUgdG8gZXZhbHVhdGUgZmVhdHVyZXMgZm9yIGtleXMgYmVjYXVzZSBPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4nKTtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXNlciA9IHRoaXMuZ2V0VXNlcldpdGhPdmVycmlkZXMob3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cmlidXRlcyk7XG4gICAgICAgIGlmICh1c2VyLmlkID09PSBudWxsKSB7XG4gICAgICAgICAgICBsb2dnZXIkMi5pbmZvKCdVbmFibGUgdG8gZXZhbHVhdGUgZmVhdHVyZXMgZm9yIGtleXMgYmVjYXVzZSBVc2VyIElEIGlzIG5vdCBzZXQnKTtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0bHlVc2VyQ29udGV4dCA9IHRoaXMubWFrZVVzZXJDb250ZXh0SW5zdGFuY2UodXNlcik7XG4gICAgICAgIGlmIChvcHRseVVzZXJDb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob3B0bHlVc2VyQ29udGV4dC5kZWNpZGVGb3JLZXlzKGtleXMsIG9wdGlvbnMpKS5yZWR1Y2UoZnVuY3Rpb24gKGRlY2lzaW9ucywgX2EpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gX2FbMF0sIGRlY2lzaW9uID0gX2FbMV07XG4gICAgICAgICAgICAgICAgZGVjaXNpb25zW2tleV0gPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVjaXNpb24pLCB7IHVzZXJDb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdXNlci5pZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHVzZXIuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgfSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVjaXNpb25zO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9O1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuZGVjaWRlQWxsID0gZnVuY3Rpb24gKG9wdGlvbnMsIG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0gW107IH1cbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBldmFsdWF0ZSBhbGwgZmVhdHVyZSBkZWNpc2lvbnMgYmVjYXVzZSBPcHRpbWl6ZWx5IGNsaWVudCBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVzZXIgPSB0aGlzLmdldFVzZXJXaXRoT3ZlcnJpZGVzKG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAodXNlci5pZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIuaW5mbygnVW5hYmxlIHRvIGV2YWx1YXRlIGFsbCBmZWF0dXJlIGRlY2lzaW9ucyBiZWNhdXNlIFVzZXIgSUQgaXMgbm90IHNldCcpO1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvcHRseVVzZXJDb250ZXh0ID0gdGhpcy5tYWtlVXNlckNvbnRleHRJbnN0YW5jZSh1c2VyKTtcbiAgICAgICAgaWYgKG9wdGx5VXNlckNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvcHRseVVzZXJDb250ZXh0LmRlY2lkZUFsbChvcHRpb25zKSkucmVkdWNlKGZ1bmN0aW9uIChkZWNpc2lvbnMsIF9hKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IF9hWzBdLCBkZWNpc2lvbiA9IF9hWzFdO1xuICAgICAgICAgICAgICAgIGRlY2lzaW9uc1trZXldID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGRlY2lzaW9uKSwgeyB1c2VyQ29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVzZXIuaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB1c2VyLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIH0gfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY2lzaW9ucztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge307XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBHZXRzIHZhcmlhdGlvbiB3aGVyZSB2aXNpdG9yIHdpbGwgYmUgYnVja2V0ZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwZXJpbWVudEtleVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3ZlcnJpZGVVc2VySWRdXG4gICAgICogQHBhcmFtIHtvcHRpbWl6ZWx5LlVzZXJBdHRyaWJ1dGVzfSBbb3ZlcnJpZGVBdHRyaWJ1dGVzXVxuICAgICAqIEByZXR1cm5zIHsoc3RyaW5nIHwgbnVsbCl9XG4gICAgICogQG1lbWJlcm9mIE9wdGltaXplbHlSZWFjdFNES0NsaWVudFxuICAgICAqL1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuZ2V0VmFyaWF0aW9uID0gZnVuY3Rpb24gKGV4cGVyaW1lbnRLZXksIG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBnZXQgdmFyaWF0aW9uIGZvciBleHBlcmltZW50IFwiJXNcIiBiZWNhdXNlIE9wdGltaXplbHkgY2xpZW50IGZhaWxlZCB0byBpbml0aWFsaXplLicsIGV4cGVyaW1lbnRLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVzZXIgPSB0aGlzLmdldFVzZXJXaXRoT3ZlcnJpZGVzKG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAodXNlci5pZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIuaW5mbygnVW5hYmxlIHRvIGdldCB2YXJpYXRpb24gZm9yIGV4cGVyaW1lbnQgXCIlc1wiIGJlY2F1c2UgVXNlciBJRCBpcyBub3Qgc2V0JywgZXhwZXJpbWVudEtleSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldFZhcmlhdGlvbihleHBlcmltZW50S2V5LCB1c2VyLmlkLCB1c2VyLmF0dHJpYnV0ZXMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2VuZHMgY29udmVyc2lvbiBldmVudCB0byBPcHRpbWl6ZWx5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50S2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvdmVycmlkZVVzZXJJZF1cbiAgICAgKiBAcGFyYW0ge29wdGltaXplbHkuVXNlckF0dHJpYnV0ZXN9IFtvdmVycmlkZUF0dHJpYnV0ZXNdXG4gICAgICogQHBhcmFtIHtvcHRpbWl6ZWx5LkV2ZW50VGFnc30gW2V2ZW50VGFnc11cbiAgICAgKiBAbWVtYmVyb2YgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50XG4gICAgICovXG4gICAgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LnByb3RvdHlwZS50cmFjayA9IGZ1bmN0aW9uIChldmVudEtleSwgb3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cmlidXRlcywgZXZlbnRUYWdzKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICAgICAgICBsb2dnZXIkMi53YXJuKCdVbmFibGUgdG8gc2VuZCB0cmFja2luZyBldmVudCBcIiVzXCIgYmVjYXVzZSBPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4nLCBldmVudEtleSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvdmVycmlkZVVzZXJJZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG92ZXJyaWRlVXNlcklkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZXZlbnRUYWdzID0gb3ZlcnJpZGVVc2VySWQ7XG4gICAgICAgICAgICBvdmVycmlkZVVzZXJJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXNlciA9IHRoaXMuZ2V0VXNlcldpdGhPdmVycmlkZXMob3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cmlidXRlcyk7XG4gICAgICAgIGlmICh1c2VyLmlkID09PSBudWxsKSB7XG4gICAgICAgICAgICBsb2dnZXIkMi5pbmZvKCdVbmFibGUgdG8gc2VuZCB0cmFja2luZyBldmVudCBcIiVzXCIgYmVjYXVzZSBVc2VyIElEIGlzIG5vdCBzZXQnLCBldmVudEtleSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2xpZW50LnRyYWNrKGV2ZW50S2V5LCB1c2VyLmlkLCB1c2VyLmF0dHJpYnV0ZXMsIGV2ZW50VGFncyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBmb3JjZWQgZGVjaXNpb24gZm9yIHNwZWNpZmllZCBvcHRpbWl6ZWx5IGRlY2lzaW9uIGNvbnRleHQuXG4gICAgICogQHBhcmFtIHtvcHRpbWl6ZWx5Lk9wdGltaXplbHlEZWNpc2lvbkNvbnRleHR9IGRlY2lzaW9uQ29udGV4dFxuICAgICAqIEBwYXJhbSB7b3B0aW1pemVseS5PcHRpbWl6ZWx5Rm9yY2VkRGVjaXNpb259IGZvcmNlZERlY2lzaW9uXG4gICAgICogQG1lbWJlcm9mIE9wdGltaXplbHlSZWFjdFNES0NsaWVudFxuICAgICAqL1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuc2V0Rm9yY2VkRGVjaXNpb24gPSBmdW5jdGlvbiAoZGVjaXNpb25Db250ZXh0LCBkZWNpc2lvbikge1xuICAgICAgICBpZiAoIXRoaXMudXNlckNvbnRleHQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBzZXQgYSBmb3JjZWQgZGVjaXNpb24gYmVjYXVzZSB0aGUgdXNlciBjb250ZXh0IGhhcyBub3QgYmVlbiBzZXQgeWV0LicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc1N1Y2Nlc3MgPSB0aGlzLnVzZXJDb250ZXh0LnNldEZvcmNlZERlY2lzaW9uKGRlY2lzaW9uQ29udGV4dCwgZGVjaXNpb24pO1xuICAgICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmZvcmNlZERlY2lzaW9uRmxhZ0tleXMuYWRkKGRlY2lzaW9uQ29udGV4dC5mbGFnS2V5KTtcbiAgICAgICAgICAgIG5vdGlmaWVyLm5vdGlmeShkZWNpc2lvbkNvbnRleHQuZmxhZ0tleSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZvcmNlZCBkZWNpc2lvbiBmb3Igc3BlY2lmaWVkIG9wdGltaXplbHkgZGVjaXNpb24gY29udGV4dC5cbiAgICAgKiBAcGFyYW0ge29wdGltaXplbHkuT3B0aW1pemVseURlY2lzaW9uQ29udGV4dH0gZGVjaXNpb25Db250ZXh0XG4gICAgICogQHJldHVybiB7KG9wdGltaXplbHkuT3B0aW1pemVseUZvcmNlZERlY2lzaW9uIHwgbnVsbCl9XG4gICAgICogQG1lbWJlcm9mIE9wdGltaXplbHlSZWFjdFNES0NsaWVudFxuICAgICAqL1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuZ2V0Rm9yY2VkRGVjaXNpb24gPSBmdW5jdGlvbiAoZGVjaXNpb25Db250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51c2VyQ29udGV4dCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIGdldCBhIGZvcmNlZCBkZWNpc2lvbiBiZWNhdXNlIHRoZSB1c2VyIGNvbnRleHQgaGFzIG5vdCBiZWVuIHNldCB5ZXQuJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy51c2VyQ29udGV4dC5nZXRGb3JjZWREZWNpc2lvbihkZWNpc2lvbkNvbnRleHQpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgZm9yY2VkIGRlY2lzaW9uIGZvciBzcGVjaWZpZWQgb3B0aW1pemVseSBkZWNpc2lvbiBjb250ZXh0LlxuICAgICAqIEBwYXJhbSB7b3B0aW1pemVseS5PcHRpbWl6ZWx5RGVjaXNpb25Db250ZXh0fSBkZWNpc2lvbkNvbnRleHRcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnRcbiAgICAgKi9cbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLnJlbW92ZUZvcmNlZERlY2lzaW9uID0gZnVuY3Rpb24gKGRlY2lzaW9uQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXNlckNvbnRleHQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byByZW1vdmUgZm9yY2VkIGRlY2lzaW9ucyBiZWNhdXNlIHRoZSB1c2VyIGNvbnRleHQgaGFzIG5vdCBiZWVuIHNldCB5ZXQuJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzU3VjY2VzcyA9IHRoaXMudXNlckNvbnRleHQucmVtb3ZlRm9yY2VkRGVjaXNpb24oZGVjaXNpb25Db250ZXh0KTtcbiAgICAgICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5mb3JjZWREZWNpc2lvbkZsYWdLZXlzLmRlbGV0ZShkZWNpc2lvbkNvbnRleHQuZmxhZ0tleSk7XG4gICAgICAgICAgICBub3RpZmllci5ub3RpZnkoZGVjaXNpb25Db250ZXh0LmZsYWdLZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N1Y2Nlc3M7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgZm9yY2VkIGRlY2lzaW9uLlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIE9wdGltaXplbHlSZWFjdFNES0NsaWVudFxuICAgICAqL1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUucmVtb3ZlQWxsRm9yY2VkRGVjaXNpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMudXNlckNvbnRleHQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byByZW1vdmUgYWxsIGZvcmNlZCBkZWNpc2lvbnMgYmVjYXVzZSB0aGUgdXNlciBjb250ZXh0IGhhcyBub3QgYmVlbiBzZXQgeWV0LicpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc1N1Y2Nlc3MgPSB0aGlzLnVzZXJDb250ZXh0LnJlbW92ZUFsbEZvcmNlZERlY2lzaW9ucygpO1xuICAgICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmZvcmNlZERlY2lzaW9uRmxhZ0tleXMuZm9yRWFjaChmdW5jdGlvbiAoZmxhZ0tleSkgeyByZXR1cm4gbm90aWZpZXIubm90aWZ5KGZsYWdLZXkpOyB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9yY2VkRGVjaXNpb25GbGFnS2V5cy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N1Y2Nlc3M7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZCBmb3IgdGhlIGdpdmVuIHVzZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3ZlcnJpZGVVc2VySWRdXG4gICAgICogQHBhcmFtIHtvcHRpbWl6ZWx5LlVzZXJBdHRyaWJ1dGVzfSBbb3ZlcnJpZGVBdHRyaWJ1dGVzXVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnRcbiAgICAgKi9cbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmlzRmVhdHVyZUVuYWJsZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgb3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cmlidXRlcykge1xuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIGRldGVybWluZSBpZiBmZWF0dXJlIFwiJXNcIiBpcyBlbmFibGVkIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJywgZmVhdHVyZSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVzZXIgPSB0aGlzLmdldFVzZXJXaXRoT3ZlcnJpZGVzKG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAodXNlci5pZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIuaW5mbygnVW5hYmxlIHRvIGRldGVybWluZSBpZiBmZWF0dXJlIFwiJXNcIiBpcyBlbmFibGVkIGJlY2F1c2UgVXNlciBJRCBpcyBub3Qgc2V0JywgZmVhdHVyZSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5pc0ZlYXR1cmVFbmFibGVkKGZlYXR1cmUsIHVzZXIuaWQsIHVzZXIuYXR0cmlidXRlcyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSAyLjEuMFxuICAgICAqIGdldEFsbEZlYXR1cmVWYXJpYWJsZXMgaXMgYWRkZWQgaW4gSmF2YVNjcmlwdCBTREsgd2hpY2ggaXMgc2ltaWxhcmx5IHJldHVybmluZyBhbGwgdGhlIGZlYXR1cmUgdmFyaWFibGVzLCBidXRcbiAgICAgKiBpdCBzZW5kcyBvbmx5IHNpbmdsZSBub3RpZmljYXRpb24gb2YgdHlwZSBcImFsbC1mZWF0dXJlLXZhcmlhYmxlc1wiIGluc3RlYWQgb2Ygc2VuZGluZyBmb3IgZWFjaCB2YXJpYWJsZS5cbiAgICAgKiBBcyBnZXRGZWF0dXJlVmFyaWFibGVzIHdhcyBhZGRlZCB3aGVuIHRoaXMgZnVuY3Rpb25hbGl0eSB3YXNuJ3QgcHJvdmlkZWQgYnkgSmF2YVNjcmlwdCBTREssIHNvIHRoZXJlIGlzIG5vXG4gICAgICogbmVlZCBvZiBpdCBub3cgYW5kIGl0IHdvdWxkIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICpcbiAgICAgKiBHZXQgYWxsIHZhcmlhYmxlcyBmb3IgYSBmZWF0dXJlLCByZWdhcmRsZXNzIG9mIHRoZSBmZWF0dXJlIGJlaW5nIGVuYWJsZWQvZGlzYWJsZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmVhdHVyZUtleVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3ZlcnJpZGVVc2VySWRdXG4gICAgICogQHBhcmFtIHtvcHRpbWl6ZWx5LlVzZXJBdHRyaWJ1dGVzfSBbb3ZlcnJpZGVBdHRyaWJ1dGVzXVxuICAgICAqIEByZXR1cm5zIHtWYXJpYWJsZVZhbHVlc09iamVjdH1cbiAgICAgKiBAbWVtYmVyb2YgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50XG4gICAgICovXG4gICAgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LnByb3RvdHlwZS5nZXRGZWF0dXJlVmFyaWFibGVzID0gZnVuY3Rpb24gKGZlYXR1cmVLZXksIG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBnZXQgZmVhdHVyZSB2YXJpYWJsZXMgZm9yIGZlYXR1cmUgXCIlc1wiIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJywgZmVhdHVyZUtleSk7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVzZXIgPSB0aGlzLmdldFVzZXJXaXRoT3ZlcnJpZGVzKG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpO1xuICAgICAgICB2YXIgdXNlcklkID0gdXNlci5pZDtcbiAgICAgICAgaWYgKHVzZXJJZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIGdldCBmZWF0dXJlIHZhcmlhYmxlcyBmb3IgZmVhdHVyZSBcIiVzXCIgYmVjYXVzZSBVc2VyIElEIGlzIG5vdCBzZXQnLCBmZWF0dXJlS2V5KTtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXNlckF0dHJpYnV0ZXMgPSB1c2VyLmF0dHJpYnV0ZXM7XG4gICAgICAgIHZhciB2YXJpYWJsZU9iaiA9IHt9O1xuICAgICAgICB2YXIgb3B0bHlDb25maWcgPSB0aGlzLl9jbGllbnQuZ2V0T3B0aW1pemVseUNvbmZpZygpO1xuICAgICAgICBpZiAoIW9wdGx5Q29uZmlnKSB7XG4gICAgICAgICAgICBsb2dnZXIkMi53YXJuKCdVbmFibGUgdG8gcmV0cmlldmUgZmVhdHVyZSB2YXJpYWJsZXMgZm9yIGZlYXR1cmUgXCIlc1wiIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJywgZmVhdHVyZUtleSk7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZlYXR1cmUgPSBvcHRseUNvbmZpZy5mZWF0dXJlc01hcFtmZWF0dXJlS2V5XTtcbiAgICAgICAgaWYgKCFmZWF0dXJlKSB7XG4gICAgICAgICAgICBsb2dnZXIkMi5pbmZvKCdVbmFibGUgdG8gcmV0cmlldmUgZmVhdHVyZSB2YXJpYWJsZXMgZm9yIGZlYXR1cmUgXCIlc1wiIGJlY2F1c2UgY29uZmlnIGZlYXR1cmVzIG1hcCBpcyBub3Qgc2V0JywgZmVhdHVyZUtleSk7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMoZmVhdHVyZS52YXJpYWJsZXNNYXApLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIHZhcmlhYmxlID0gZmVhdHVyZS52YXJpYWJsZXNNYXBba2V5XTtcbiAgICAgICAgICAgIHZhcmlhYmxlT2JqW3ZhcmlhYmxlLmtleV0gPSBfdGhpcy5fY2xpZW50LmdldEZlYXR1cmVWYXJpYWJsZShmZWF0dXJlS2V5LCB2YXJpYWJsZS5rZXksIHVzZXJJZCwgdXNlckF0dHJpYnV0ZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlT2JqO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBmb3IgdGhlIGdpdmVuIHN0cmluZyB2YXJpYWJsZSBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gZmVhdHVyZVxuICAgICAqIGZsYWdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3ZlcnJpZGVVc2VySWRdXG4gICAgICogQHBhcmFtIHtvcHRpbWl6ZWx5LlVzZXJBdHRyaWJ1dGVzfSBbb3ZlcnJpZGVBdHRyaWJ1dGVzXVxuICAgICAqIEByZXR1cm5zIHsoc3RyaW5nIHwgbnVsbCl9XG4gICAgICogQG1lbWJlcm9mIE9wdGltaXplbHlSZWFjdFNES0NsaWVudFxuICAgICAqL1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuZ2V0RmVhdHVyZVZhcmlhYmxlU3RyaW5nID0gZnVuY3Rpb24gKGZlYXR1cmUsIHZhcmlhYmxlLCBvdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICAgICAgICBsb2dnZXIkMi53YXJuKCdVbmFibGUgdG8gZ2V0IGZlYXR1cmUgdmFyaWFibGUgc3RyaW5nIGZyb20gZmVhdHVyZSBcIiVzXCIgYmVjYXVzZSBPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4nLCBmZWF0dXJlKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1c2VyID0gdGhpcy5nZXRVc2VyV2l0aE92ZXJyaWRlcyhvdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKHVzZXIuaWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLmluZm8oJ1VuYWJsZSB0byBnZXQgZmVhdHVyZSB2YXJpYWJsZSBzdHJpbmcgZnJvbSBmZWF0dXJlIFwiJXNcIiBiZWNhdXNlIFVzZXIgSUQgaXMgbm90IHNldCcsIGZlYXR1cmUpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRGZWF0dXJlVmFyaWFibGVTdHJpbmcoZmVhdHVyZSwgdmFyaWFibGUsIHVzZXIuaWQsIHVzZXIuYXR0cmlidXRlcyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlIGZvciB0aGUgZ2l2ZW4gYm9vbGVhbiB2YXJpYWJsZSBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gZmVhdHVyZVxuICAgICAqIGZsYWdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3ZlcnJpZGVVc2VySWRdXG4gICAgICogQHBhcmFtIHtvcHRpbWl6ZWx5LlVzZXJBdHRyaWJ1dGVzfSBbb3ZlcnJpZGVBdHRyaWJ1dGVzXVxuICAgICAqIEByZXR1cm5zIHsoc3RyaW5nIHwgbnVsbCl9XG4gICAgICogQG1lbWJlcm9mIE9wdGltaXplbHlSZWFjdFNES0NsaWVudFxuICAgICAqL1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuZ2V0RmVhdHVyZVZhcmlhYmxlQm9vbGVhbiA9IGZ1bmN0aW9uIChmZWF0dXJlLCB2YXJpYWJsZSwgb3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cmlidXRlcykge1xuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIGdldCBmZWF0dXJlIHZhcmlhYmxlIGJvb2xlYW4gZnJvbSBmZWF0dXJlIFwiJXNcIiBiZWNhdXNlIE9wdGltaXplbHkgY2xpZW50IGZhaWxlZCB0byBpbml0aWFsaXplLicsIGZlYXR1cmUpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVzZXIgPSB0aGlzLmdldFVzZXJXaXRoT3ZlcnJpZGVzKG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAodXNlci5pZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIuaW5mbygnVW5hYmxlIHRvIGdldCBmZWF0dXJlIHZhcmlhYmxlIGJvb2xlYW4gZnJvbSBmZWF0dXJlIFwiJXNcIiBiZWNhdXNlIFVzZXIgSUQgaXMgbm90IHNldCcsIGZlYXR1cmUpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRGZWF0dXJlVmFyaWFibGVCb29sZWFuKGZlYXR1cmUsIHZhcmlhYmxlLCB1c2VyLmlkLCB1c2VyLmF0dHJpYnV0ZXMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBmb3IgdGhlIGdpdmVuIGludGVnZXIgdmFyaWFibGUgYXR0YWNoZWQgdG8gdGhlIGdpdmVuIGZlYXR1cmVcbiAgICAgKiBmbGFnXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZlYXR1cmVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFyaWFibGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW292ZXJyaWRlVXNlcklkXVxuICAgICAqIEBwYXJhbSB7b3B0aW1pemVseS5Vc2VyQXR0cmlidXRlc30gW292ZXJyaWRlQXR0cmlidXRlc11cbiAgICAgKiBAcmV0dXJucyB7KHN0cmluZyB8IG51bGwpfVxuICAgICAqIEBtZW1iZXJvZiBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnRcbiAgICAgKi9cbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmdldEZlYXR1cmVWYXJpYWJsZUludGVnZXIgPSBmdW5jdGlvbiAoZmVhdHVyZSwgdmFyaWFibGUsIG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBnZXQgZmVhdHVyZSB2YXJpYWJsZSBpbnRlZ2VyIGZyb20gZmVhdHVyZSBcIiVzXCIgYmVjYXVzZSBPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4nLCBmZWF0dXJlKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1c2VyID0gdGhpcy5nZXRVc2VyV2l0aE92ZXJyaWRlcyhvdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKHVzZXIuaWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLmluZm8oJ1VuYWJsZSB0byBnZXQgZmVhdHVyZSB2YXJpYWJsZSBpbnRlZ2VyIGZyb20gZmVhdHVyZSBcIiVzXCIgYmVjYXVzZSBVc2VyIElEIGlzIG5vdCBzZXQnLCBmZWF0dXJlKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0RmVhdHVyZVZhcmlhYmxlSW50ZWdlcihmZWF0dXJlLCB2YXJpYWJsZSwgdXNlci5pZCwgdXNlci5hdHRyaWJ1dGVzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdmFsdWUgZm9yIHRoZSBnaXZlbiBkb3VibGUgdmFyaWFibGUgYXR0YWNoZWQgdG8gdGhlIGdpdmVuIGZlYXR1cmVcbiAgICAgKiBmbGFnXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZlYXR1cmVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFyaWFibGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW292ZXJyaWRlVXNlcklkXVxuICAgICAqIEBwYXJhbSB7b3B0aW1pemVseS5Vc2VyQXR0cmlidXRlc30gW292ZXJyaWRlQXR0cmlidXRlc11cbiAgICAgKiBAcmV0dXJucyB7KHN0cmluZyB8IG51bGwpfVxuICAgICAqIEBtZW1iZXJvZiBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnRcbiAgICAgKi9cbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmdldEZlYXR1cmVWYXJpYWJsZURvdWJsZSA9IGZ1bmN0aW9uIChmZWF0dXJlLCB2YXJpYWJsZSwgb3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cmlidXRlcykge1xuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIGdldCBmZWF0dXJlIHZhcmlhYmxlIGRvdWJsZSBmcm9tIGZlYXR1cmUgXCIlc1wiIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJywgZmVhdHVyZSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXNlciA9IHRoaXMuZ2V0VXNlcldpdGhPdmVycmlkZXMob3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cmlidXRlcyk7XG4gICAgICAgIGlmICh1c2VyLmlkID09PSBudWxsKSB7XG4gICAgICAgICAgICBsb2dnZXIkMi5pbmZvKCdVbmFibGUgdG8gZ2V0IGZlYXR1cmUgdmFyaWFibGUgZG91YmxlIGZyb20gZmVhdHVyZSBcIiVzXCIgYmVjYXVzZSBVc2VyIElEIGlzIG5vdCBzZXQnLCBmZWF0dXJlKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0RmVhdHVyZVZhcmlhYmxlRG91YmxlKGZlYXR1cmUsIHZhcmlhYmxlLCB1c2VyLmlkLCB1c2VyLmF0dHJpYnV0ZXMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2YWx1ZSBmb3IgdGhlIGdpdmVuIGpzb24gdmFyaWFibGUgYXR0YWNoZWQgdG8gdGhlIGdpdmVuIGZlYXR1cmVcbiAgICAgKiBmbGFnXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZlYXR1cmVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFyaWFibGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW292ZXJyaWRlVXNlcklkXVxuICAgICAqIEBwYXJhbSB7b3B0aW1pemVseS5Vc2VyQXR0cmlidXRlc30gW292ZXJyaWRlQXR0cmlidXRlc11cbiAgICAgKiBAcmV0dXJucyB7KHVua25vd24gfCBudWxsKX1cbiAgICAgKiBAbWVtYmVyb2YgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50XG4gICAgICovXG4gICAgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LnByb3RvdHlwZS5nZXRGZWF0dXJlVmFyaWFibGVKU09OID0gZnVuY3Rpb24gKGZlYXR1cmUsIHZhcmlhYmxlLCBvdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICAgICAgICBsb2dnZXIkMi53YXJuKCdVbmFibGUgdG8gZ2V0IGZlYXR1cmUgdmFyaWFibGUgSlNPTiBmcm9tIGZlYXR1cmUgXCIlc1wiIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJywgZmVhdHVyZSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXNlciA9IHRoaXMuZ2V0VXNlcldpdGhPdmVycmlkZXMob3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cmlidXRlcyk7XG4gICAgICAgIGlmICh1c2VyLmlkID09PSBudWxsKSB7XG4gICAgICAgICAgICBsb2dnZXIkMi5pbmZvKCdVbmFibGUgdG8gZ2V0IGZlYXR1cmUgdmFyaWFibGUgSlNPTiBmcm9tIGZlYXR1cmUgXCIlc1wiIGJlY2F1c2UgVXNlciBJRCBpcyBub3Qgc2V0JywgZmVhdHVyZSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldEZlYXR1cmVWYXJpYWJsZUpTT04oZmVhdHVyZSwgdmFyaWFibGUsIHVzZXIuaWQsIHVzZXIuYXR0cmlidXRlcyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGR5bmFtaWNhbGx5LXR5cGVkIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBhdHRhY2hlZCB0byB0aGUgZ2l2ZW5cbiAgICAgKiBmZWF0dXJlIGZsYWcuIFJldHVybnMgbnVsbCBpZiB0aGUgZmVhdHVyZSBrZXkgb3IgdmFyaWFibGUga2V5IGlzIGludmFsaWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZlYXR1cmVLZXlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFyaWFibGVLZXlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW292ZXJyaWRlVXNlcklkXVxuICAgICAqIEBwYXJhbSB7b3B0aW1pemVseS5Vc2VyQXR0cmlidXRlc30gW292ZXJyaWRlQXR0cmlidXRlc11cbiAgICAgKiBAcmV0dXJucyB7KEZlYXR1cmVWYXJpYWJsZVZhbHVlIHwgbnVsbCl9XG4gICAgICogQG1lbWJlcm9mIE9wdGltaXplbHlSZWFjdFNES0NsaWVudFxuICAgICAqL1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuZ2V0RmVhdHVyZVZhcmlhYmxlID0gZnVuY3Rpb24gKGZlYXR1cmVLZXksIHZhcmlhYmxlS2V5LCBvdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICAgICAgICBsb2dnZXIkMi53YXJuKCdVbmFibGUgdG8gZ2V0IGZlYXR1cmUgdmFyaWFibGUgZnJvbSBmZWF0dXJlIFwiJXNcIiBiZWNhdXNlIE9wdGltaXplbHkgY2xpZW50IGZhaWxlZCB0byBpbml0aWFsaXplLicsIGZlYXR1cmVLZXksIHZhcmlhYmxlS2V5KTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1c2VyID0gdGhpcy5nZXRVc2VyV2l0aE92ZXJyaWRlcyhvdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKHVzZXIuaWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLmluZm8oJ1VuYWJsZSB0byBnZXQgZmVhdHVyZSB2YXJpYWJsZSBmcm9tIGZlYXR1cmUgXCIlc1wiIGJlY2F1c2UgVXNlciBJRCBpcyBub3Qgc2V0JywgZmVhdHVyZUtleSwgdmFyaWFibGVLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRGZWF0dXJlVmFyaWFibGUoZmVhdHVyZUtleSwgdmFyaWFibGVLZXksIHVzZXIuaWQsIHVzZXIuYXR0cmlidXRlcyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZhbHVlcyBmb3IgYWxsIHRoZSB2YXJpYWJsZXMgYXR0YWNoZWQgdG8gdGhlIGdpdmVuIGZlYXR1cmUgZmxhZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmZWF0dXJlS2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG92ZXJyaWRlVXNlcklkXG4gICAgICogQHBhcmFtIHtvcHRpbWl6ZWx5LlVzZXJBdHRyaWJ1dGVzfSBbb3ZlcnJpZGVBdHRyaWJ1dGVzXVxuICAgICAqIEByZXR1cm5zIHsoeyBbdmFyaWFibGVLZXk6IHN0cmluZ106IHVua25vd24gfSB8IG51bGwpfVxuICAgICAqIEBtZW1iZXJvZiBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnRcbiAgICAgKi9cbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmdldEFsbEZlYXR1cmVWYXJpYWJsZXMgPSBmdW5jdGlvbiAoZmVhdHVyZUtleSwgb3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cmlidXRlcykge1xuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIGdldCBhbGwgZmVhdHVyZSB2YXJpYWJsZXMgZnJvbSBmZWF0dXJlIFwiJXNcIiBiZWNhdXNlIE9wdGltaXplbHkgY2xpZW50IGZhaWxlZCB0byBpbml0aWFsaXplLicsIGZlYXR1cmVLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIHZhciB1c2VyID0gdGhpcy5nZXRVc2VyV2l0aE92ZXJyaWRlcyhvdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKHVzZXIuaWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLmluZm8oJ1VuYWJsZSB0byBnZXQgYWxsIGZlYXR1cmUgdmFyaWFibGVzIGZyb20gZmVhdHVyZSBcIiVzXCIgYmVjYXVzZSBVc2VyIElEIGlzIG5vdCBzZXQnLCBmZWF0dXJlS2V5KTtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldEFsbEZlYXR1cmVWYXJpYWJsZXMoZmVhdHVyZUtleSwgdXNlci5pZCwgdXNlci5hdHRyaWJ1dGVzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdldCBhbiBhcnJheSBvZiBhbGwgZW5hYmxlZCBmZWF0dXJlc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3ZlcnJpZGVVc2VySWRdXG4gICAgICogQHBhcmFtIHtvcHRpbWl6ZWx5LlVzZXJBdHRyaWJ1dGVzfSBbb3ZlcnJpZGVVc2VySWRdXG4gICAgICogQHJldHVybnMge0FycmF5PHN0cmluZz59XG4gICAgICogQG1lbWJlcm9mIE9wdGltaXplbHlSZWFjdFNES0NsaWVudFxuICAgICAqL1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuZ2V0RW5hYmxlZEZlYXR1cmVzID0gZnVuY3Rpb24gKG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBnZXQgbGlzdCBvZiBlbmFibGVkIGZlYXR1cmVzIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJyk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVzZXIgPSB0aGlzLmdldFVzZXJXaXRoT3ZlcnJpZGVzKG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAodXNlci5pZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIuaW5mbygnVW5hYmxlIHRvIGdldCBsaXN0IG9mIGVuYWJsZWQgZmVhdHVyZXMgYmVjYXVzZSBVc2VyIElEIGlzIG5vdCBzZXQnKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldEVuYWJsZWRGZWF0dXJlcyh1c2VyLmlkLCB1c2VyLmF0dHJpYnV0ZXMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZm9yY2VkIHZhcmlhdGlvbiBmb3IgYSBnaXZlbiB1c2VyIGFuZCBleHBlcmltZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cGVyaW1lbnRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW292ZXJyaWRlVXNlcklkXVxuICAgICAqIEByZXR1cm5zIHsoc3RyaW5nIHwgbnVsbCl9XG4gICAgICogQG1lbWJlcm9mIE9wdGltaXplbHlSZWFjdFNES0NsaWVudFxuICAgICAqL1xuICAgIE9wdGltaXplbHlSZWFjdFNES0NsaWVudC5wcm90b3R5cGUuZ2V0Rm9yY2VkVmFyaWF0aW9uID0gZnVuY3Rpb24gKGV4cGVyaW1lbnQsIG92ZXJyaWRlVXNlcklkKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICAgICAgICBsb2dnZXIkMi53YXJuKCdVbmFibGUgdG8gZ2V0IGZvcmNlZCB2YXJpYXRpb24gZm9yIGV4cGVyaW1lbnQgXCIlc1wiIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJywgZXhwZXJpbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXNlciA9IHRoaXMuZ2V0VXNlcldpdGhPdmVycmlkZXMob3ZlcnJpZGVVc2VySWQpO1xuICAgICAgICBpZiAodXNlci5pZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIuaW5mbygnVW5hYmxlIHRvIGdldCBmb3JjZWQgdmFyaWF0aW9uIGZvciBleHBlcmltZW50IFwiJXNcIiBiZWNhdXNlIFVzZXIgSUQgaXMgbm90IHNldCcsIGV4cGVyaW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRGb3JjZWRWYXJpYXRpb24oZXhwZXJpbWVudCwgdXNlci5pZCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGb3JjZSBhIHVzZXIgaW50byBhIHZhcmlhdGlvbiBmb3IgYSBnaXZlbiBleHBlcmltZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cGVyaW1lbnRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3ZlcnJpZGVVc2VySWRPclZhcmlhdGlvbktleVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFyaWF0aW9uS2V5XVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnRcbiAgICAgKi9cbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLnNldEZvcmNlZFZhcmlhdGlvbiA9IGZ1bmN0aW9uIChleHBlcmltZW50LCBvdmVycmlkZVVzZXJJZE9yVmFyaWF0aW9uS2V5LCB2YXJpYXRpb25LZXkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBzZXQgZm9yY2VkIHZhcmlhdGlvbiBmb3IgZXhwZXJpbWVudCBcIiVzXCIgYmVjYXVzZSBPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4nLCBleHBlcmltZW50KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZmluYWxVc2VySWQgPSBudWxsO1xuICAgICAgICB2YXIgZmluYWxWYXJpYXRpb25LZXkgPSBudWxsO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgZmluYWxWYXJpYXRpb25LZXkgPSBvdmVycmlkZVVzZXJJZE9yVmFyaWF0aW9uS2V5O1xuICAgICAgICAgICAgZmluYWxVc2VySWQgPSB0aGlzLmdldFVzZXJXaXRoT3ZlcnJpZGVzKCkuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgZmluYWxVc2VySWQgPSB0aGlzLmdldFVzZXJXaXRoT3ZlcnJpZGVzKG92ZXJyaWRlVXNlcklkT3JWYXJpYXRpb25LZXkpLmlkO1xuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbktleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FuJ3QgaGF2ZSB1bmRlZmluZWQgaWYgc3VwcGx5aW5nIGFsbCAzIGFyZ3VtZW50c1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsVmFyaWF0aW9uS2V5ID0gdmFyaWF0aW9uS2V5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5hbFVzZXJJZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIHNldCBmb3JjZWQgdmFyaWF0aW9uIGZvciBleHBlcmltZW50IFwiJXNcIiBiZWNhdXNlIFVzZXIgSUQgaXMgbm90IHNldCcsIGV4cGVyaW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9jbGllbnQuc2V0Rm9yY2VkVmFyaWF0aW9uKGV4cGVyaW1lbnQsIGZpbmFsVXNlcklkLCBmaW5hbFZhcmlhdGlvbktleSk7XG4gICAgICAgIHRoaXMub25Gb3JjZWRWYXJpYXRpb25zVXBkYXRlSGFuZGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gaGFuZGxlcigpOyB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIE9wdGltaXplbHlDb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgZXhwZXJpbWVudHMgYW5kIGZlYXR1cmVzIGRhdGFcbiAgICAgKiAgQHJldHVybnMge29wdGltaXplbHkuT3B0aW1pemVseUNvbmZpZyB8IG51bGx9IG9wdGltaXplbHkgY29uZmlnXG4gICAgICovXG4gICAgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LnByb3RvdHlwZS5nZXRPcHRpbWl6ZWx5Q29uZmlnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIGdldCBPcHRpbWl6ZWx5IGNvbmZpZ3VyYXRpb24gYmVjYXVzZSBPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4nKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0T3B0aW1pemVseUNvbmZpZygpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2xlYW51cCBtZXRob2QgZm9yIGtpbGxpbmcgYW4gcnVubmluZyB0aW1lcnMgYW5kIGZsdXNoaW5nIGV2ZW50UXVldWVcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IHJlYXNvbj86IHN0cmluZyB9Pn1cbiAgICAgKi9cbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBOb3RlOlxuICAgICAgICAgICAgICogLSBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFzIFwidHJ1ZVwiIGV2ZW4gd2hlbiB0aGlzLl9jbGllbnQgZG9lcyBub3QgZXhpc3QuXG4gICAgICAgICAgICAgKiAtIFRoaXMgaXMgYmVjYXVzZSBjbGVhbnVwIHJlbGllcyBvbiBjbG9zZSgpIHJlc29sdmluZyBhcyBcInRydWVcIi5cbiAgICAgICAgICAgICAqIC0gSWYgd2UgcmVzb2x2ZSBhcyBcImZhbHNlXCIsIHRoZW4gdGhlIGNsZWFudXAgZm9yIHRpbWVycyBhbmQgdGhlIGV2ZW50IHF1ZXVlIHdpbGwgbmV2ZXIgdHJpZ2dlci5cbiAgICAgICAgICAgICAqIC0gTm90IHRyaWdnZXJpbmcgY2xlYW51cCBtYXkgbGVhZCB0byBtZW1vcnkgbGVha3MgYW5kIG90aGVyIGluZWZmaWNpZW5jaWVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiAnT3B0aW1pemVseSBjbGllbnQgaXMgbm90IGluaXRpYWxpemVkLicsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50LmNsb3NlKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LnByb3RvdHlwZSwgXCJjbGllbnRcIiwge1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvdmlkZSBhY2Nlc3MgdG8gaW5uZXIgb3B0aW1pemVseS5DbGllbnQgb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyJDIud2FybignVW5hYmxlIHRvIGdldCBjbGllbnQgYmVjYXVzZSBPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LnByb3RvdHlwZSwgXCJub3RpZmljYXRpb25DZW50ZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBhZGQgbm90aWZpY2F0aW9uIGxpc3RlbmVyIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byByZW1vdmUgbm90aWZpY2F0aW9uIGxpc3RlbmVyIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyQWxsTm90aWZpY2F0aW9uTGlzdGVuZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIkMi53YXJuKCdVbmFibGUgdG8gY2xlYXIgYWxsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMgYmVjYXVzZSBPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJOb3RpZmljYXRpb25MaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlciQyLndhcm4oJ1VuYWJsZSB0byBjbGVhciBub3RpZmljYXRpb24gbGlzdGVuZXJzIGJlY2F1c2UgT3B0aW1pemVseSBjbGllbnQgZmFpbGVkIHRvIGluaXRpYWxpemUuJyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQubm90aWZpY2F0aW9uQ2VudGVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50LnByb3RvdHlwZS5zZW5kT2RwRXZlbnQgPSBmdW5jdGlvbiAoYWN0aW9uLCB0eXBlLCBpZGVudGlmaWVycywgZGF0YSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghYWN0aW9uIHx8ICFhY3Rpb24udHJpbSgpKSB7XG4gICAgICAgICAgICBsb2dnZXIkMi5lcnJvcignT0RQIGFjdGlvbiBpcyBub3QgdmFsaWQgKGNhbm5vdCBiZSBlbXB0eSkuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgKF9hID0gdGhpcy5jbGllbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZW5kT2RwRXZlbnQoYWN0aW9uLCB0eXBlLCBpZGVudGlmaWVycywgZGF0YSk7XG4gICAgfTtcbiAgICBPcHRpbWl6ZWx5UmVhY3RTREtDbGllbnQucHJvdG90eXBlLmdldFZ1aWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICAgICAgICBsb2dnZXIkMi53YXJuKCdVbmFibGUgdG8gZ2V0IFZVSUQgYmVjYXVzZSBPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4nKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRWdWlkKCk7XG4gICAgfTtcbiAgICByZXR1cm4gT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50O1xufSgpKTtcbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgT3B0aW1pemVseVJlYWN0U0RLQ2xpZW50KGNvbmZpZyk7XG59XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMjItMjAyNCwgT3B0aW1pemVseVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGxvZ2dlciQxID0gb3B0aW1pemVseS5nZXRMb2dnZXIoJzxPcHRpbWl6ZWx5UHJvdmlkZXI+Jyk7XG52YXIgT3B0aW1pemVseVByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcHRpbWl6ZWx5UHJvdmlkZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3B0aW1pemVseVByb3ZpZGVyKHByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zZXRVc2VySW5PcHRpbWl6ZWx5KCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3B0aW1pemVseVByb3ZpZGVyLnByb3RvdHlwZS5zZXRVc2VySW5PcHRpbWl6ZWx5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EsIG9wdGltaXplbHksIHVzZXJJZCwgdXNlckF0dHJpYnV0ZXMsIHVzZXIsIGZpbmFsVXNlciwgX2IsIGlkLCBhdHRyaWJ1dGVzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfZCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2QubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSB0aGlzLnByb3BzLCBvcHRpbWl6ZWx5ID0gX2Eub3B0aW1pemVseSwgdXNlcklkID0gX2EudXNlcklkLCB1c2VyQXR0cmlidXRlcyA9IF9hLnVzZXJBdHRyaWJ1dGVzLCB1c2VyID0gX2EudXNlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW1pemVseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlciQxLmVycm9yKCdPcHRpbWl6ZWx5UHJvdmlkZXIgbXVzdCBiZSBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgdGhlIE9wdGltaXplbHkgU0RLIGNsaWVudCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVXNlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgndGhlbicgaW4gdXNlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemVseS5zZXRVc2VyKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxVc2VyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB1c2VyLmF0dHJpYnV0ZXMgfHwge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxVc2VyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB1c2VyQXR0cmlidXRlcyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlcHJlY2F0aW9uIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIkMS53YXJuKCdQYXNzaW5nIHVzZXJJZCBhbmQgdXNlckF0dHJpYnV0ZXMgYXMgcHJvcHMgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHN3aXRjaCB0byB1c2luZyBgdXNlcmAgcHJvcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0aW1pemVseS51c2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2IgPSBvcHRpbWl6ZWx5LnVzZXIsIGlkID0gX2IuaWQsIGF0dHJpYnV0ZXMgPSBfYi5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVXNlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB1c2VyQXR0cmlidXRlcyB8fCBhdHRyaWJ1dGVzIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFVzZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBEZWZhdWx0VXNlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogdXNlckF0dHJpYnV0ZXMgfHwgRGVmYXVsdFVzZXIuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5hbFVzZXIpIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2QubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfZC50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgb3B0aW1pemVseS5zZXRVc2VyKGZpbmFsVXNlcildO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBfZC5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Quc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyJDEuZXJyb3IoJ0Vycm9yIHdoaWxlIHRyeWluZyB0byBzZXQgdXNlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPcHRpbWl6ZWx5UHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIChwcmV2UHJvcHMpIHtcbiAgICAgICAgaWYgKHByZXZQcm9wcy5pc1NlcnZlclNpZGUpIHtcbiAgICAgICAgICAgIC8vIGRvbnQgcmVhY3QgdG8gdXBkYXRlcyBvbiBzZXJ2ZXJcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0aW1pemVseSA9IHRoaXMucHJvcHMub3B0aW1pemVseTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudXNlciAmJiAnaWQnIGluIHRoaXMucHJvcHMudXNlcikge1xuICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWx5LnVzZXIuaWQpIHtcbiAgICAgICAgICAgICAgICAvLyBubyB1c2VyIGlzIHNldCBpbiBvcHRpbWl6ZWx5LCB1cGRhdGVcbiAgICAgICAgICAgICAgICBvcHRpbWl6ZWx5LnNldFVzZXIodGhpcy5wcm9wcy51c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgLy8gaWYgdGhlIHVzZXJzIGFyZW4ndCBlcXVhbCB1cGRhdGVcbiAgICAgICAgICAgICFhcmVVc2Vyc0VxdWFsKHtcbiAgICAgICAgICAgICAgICBpZDogb3B0aW1pemVseS51c2VyLmlkLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IG9wdGltaXplbHkudXNlci5hdHRyaWJ1dGVzIHx8IHt9LFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLnVzZXIuaWQsXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBzZWUgaWYgd2UgY2FuIHVzZSBjb21wdXRlRGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdGhpcy5wcm9wcy51c2VyLmF0dHJpYnV0ZXMgfHwge30sXG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIG9wdGltaXplbHkuc2V0VXNlcih0aGlzLnByb3BzLnVzZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBPcHRpbWl6ZWx5UHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgb3B0aW1pemVseSA9IF9hLm9wdGltaXplbHksIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIHRpbWVvdXQgPSBfYS50aW1lb3V0O1xuICAgICAgICB2YXIgaXNTZXJ2ZXJTaWRlID0gISF0aGlzLnByb3BzLmlzU2VydmVyU2lkZTtcbiAgICAgICAgdmFyIHZhbHVlID0ge1xuICAgICAgICAgICAgb3B0aW1pemVseTogb3B0aW1pemVseSxcbiAgICAgICAgICAgIGlzU2VydmVyU2lkZTogaXNTZXJ2ZXJTaWRlLFxuICAgICAgICAgICAgdGltZW91dDogdGltZW91dCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFJlYWN0X19uYW1lc3BhY2UuY3JlYXRlRWxlbWVudChPcHRpbWl6ZWx5Q29udGV4dFByb3ZpZGVyLCB7IHZhbHVlOiB2YWx1ZSB9LCBjaGlsZHJlbik7XG4gICAgfTtcbiAgICByZXR1cm4gT3B0aW1pemVseVByb3ZpZGVyO1xufShSZWFjdF9fbmFtZXNwYWNlLkNvbXBvbmVudCkpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDIwLCAyMDIzIE9wdGltaXplbHlcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogVXRpbGl0eSB0byBzZXR1cCBsaXN0ZW5lcnMgZm9yIGNoYW5nZXMgdG8gdGhlIGRhdGFmaWxlIG9yIHVzZXIgYXR0cmlidXRlcyBhbmQgaW52b2tlIHRoZSBwcm92aWRlZCBjYWxsYmFjay5cbiAqIFJldHVybnMgYW4gdW5MaXN0ZW4gZnVuY3Rpb25cbiAqL1xudmFyIHNldHVwQXV0b1VwZGF0ZUxpc3RlbmVycyA9IGZ1bmN0aW9uIChvcHRpbWl6ZWx5JDEsIHR5cGUsIHZhbHVlLCBsb2dnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGxvZ2dlclN1ZmZpeCA9IFwicmUtZXZhbHVhdGluZyBcIi5jb25jYXQodHlwZSwgXCI9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIiBmb3IgdXNlcj1cXFwiXCIpLmNvbmNhdChvcHRpbWl6ZWx5JDEudXNlci5pZCwgXCJcXFwiXCIpO1xuICAgIHZhciBvcHRpbWl6ZWx5Tm90aWZpY2F0aW9uSWQgPSBvcHRpbWl6ZWx5JDEubm90aWZpY2F0aW9uQ2VudGVyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKG9wdGltaXplbHkuZW51bXMuTk9USUZJQ0FUSU9OX1RZUEVTLk9QVElNSVpFTFlfQ09ORklHX1VQREFURSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhcIlwiLmNvbmNhdChvcHRpbWl6ZWx5LmVudW1zLk5PVElGSUNBVElPTl9UWVBFUy5PUFRJTUlaRUxZX0NPTkZJR19VUERBVEUsIFwiLCBcIikuY29uY2F0KGxvZ2dlclN1ZmZpeCkpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuICAgIHZhciB1bnJlZ2lzdGVyQ29uZmlnVXBkYXRlTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvcHRpbWl6ZWx5JDEubm90aWZpY2F0aW9uQ2VudGVyLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKG9wdGltaXplbHlOb3RpZmljYXRpb25JZCk7XG4gICAgfTtcbiAgICB2YXIgdW5yZWdpc3RlclVzZXJMaXN0ZW5lciA9IG9wdGltaXplbHkkMS5vblVzZXJVcGRhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhcIlVzZXIgdXBkYXRlLCBcIi5jb25jYXQobG9nZ2VyU3VmZml4KSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdW5yZWdpc3RlckNvbmZpZ1VwZGF0ZUxpc3RlbmVyKCk7XG4gICAgICAgIHVucmVnaXN0ZXJVc2VyTGlzdGVuZXIoKTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxOC0yMDE5LCAyMDIyLTIwMjQsIE9wdGltaXplbHlcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGhvb2tzTG9nZ2VyID0gb3B0aW1pemVseS5nZXRMb2dnZXIoJ1JlYWN0U0RLJyk7XG52YXIgb3B0aW1pemVseVByb3BFcnJvciA9IFwiVGhlICdvcHRpbWl6ZWx5JyBwcm9wIG11c3QgYmUgc3VwcGxpZWQgdmlhIGEgcGFyZW50IDxPcHRpbWl6ZWx5UHJvdmlkZXI+XCI7XG52YXIgSG9va1R5cGU7XG4oZnVuY3Rpb24gKEhvb2tUeXBlKSB7XG4gICAgSG9va1R5cGVbXCJFWFBFUklNRU5UXCJdID0gXCJFeHBlcmltZW50XCI7XG4gICAgSG9va1R5cGVbXCJGRUFUVVJFXCJdID0gXCJGZWF0dXJlXCI7XG59KShIb29rVHlwZSB8fCAoSG9va1R5cGUgPSB7fSkpO1xuLyoqXG4gKiBFcXVhbGl0eSBjaGVjayBhcHBsaWVkIHRvIGRlY2lzaW9uIGlucHV0cyBwYXNzZWQgaW50byBob29rcyAoZXhwZXJpbWVudC9mZWF0dXJlIGtleXMsIG92ZXJyaWRlIHVzZXIgSURzLCBhbmQgb3ZlcnJpZGUgdXNlciBhdHRyaWJ1dGVzKS5cbiAqIFVzZWQgdG8gZGV0ZXJtaW5lIHdoZW4gd2UgbmVlZCB0byByZWNvbXB1dGUgYSBkZWNpc2lvbiBiZWNhdXNlIGRpZmZlcmVudCBpbnB1dHMgd2VyZSBwYXNzZWQgaW50byBhIGhvb2suXG4gKiBAcGFyYW0ge0RlY2lzaW9uSW5wdXRzfSBvbGREZWNpc2lvbklucHV0c1xuICogQHBhcmFtIHtEZWNpc2lvbklucHV0fSBuZXdEZWNpc2lvbklucHV0c1xuICogQHJldHVybnMgYm9vbGVhblxuICovXG5mdW5jdGlvbiBhcmVEZWNpc2lvbklucHV0c0VxdWFsKG9sZERlY2lzaW9uSW5wdXRzLCBuZXdEZWNpc2lvbklucHV0cykge1xuICAgIHJldHVybiAob2xkRGVjaXNpb25JbnB1dHMuZW50aXR5S2V5ID09PSBuZXdEZWNpc2lvbklucHV0cy5lbnRpdHlLZXkgJiZcbiAgICAgICAgb2xkRGVjaXNpb25JbnB1dHMub3ZlcnJpZGVVc2VySWQgPT09IG5ld0RlY2lzaW9uSW5wdXRzLm92ZXJyaWRlVXNlcklkICYmXG4gICAgICAgIGFyZUF0dHJpYnV0ZXNFcXVhbChvbGREZWNpc2lvbklucHV0cy5vdmVycmlkZUF0dHJpYnV0ZXMsIG5ld0RlY2lzaW9uSW5wdXRzLm92ZXJyaWRlQXR0cmlidXRlcykpO1xufVxuLyoqXG4gKiBTdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgYXJndW1lbnQgY2xpZW50LiBvbkluaXRTdGF0ZUNoYW5nZSBjYWxsYmFja1xuICogaXMgY2FsbGVkIG9uIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuICogLSBvcHRpbWl6ZWx5IHN1Y2Nlc3NmdWxseSBiZWNvbWVzIHJlYWR5XG4gKiAtIHRpbWVvdXQgaXMgcmVhY2hlZCBwcmlvciB0byBvcHRpbWl6ZWx5IGJlY29taW5nIHJlYWR5XG4gKiAtIG9wdGltaXplbHkgYmVjb21lcyByZWFkeSBhZnRlciB0aGUgdGltZW91dCBoYXMgYWxyZWFkeSBwYXNzZWRcbiAqIEBwYXJhbSB7UmVhY3RTREtDbGllbnR9IG9wdGltaXplbHlcbiAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gdGltZW91dFxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25Jbml0U3RhdGVDaGFuZ2VcbiAqL1xuZnVuY3Rpb24gc3Vic2NyaWJlVG9Jbml0aWFsaXphdGlvbihvcHRpbWl6ZWx5LCB0aW1lb3V0LCBvbkluaXRTdGF0ZUNoYW5nZSkge1xuICAgIG9wdGltaXplbHlcbiAgICAgICAgLm9uUmVhZHkoeyB0aW1lb3V0OiB0aW1lb3V0IH0pXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGhvb2tzTG9nZ2VyLmluZm8oJ0NsaWVudCBpbW1lZGlhdGVseSByZWFkeScpO1xuICAgICAgICAgICAgb25Jbml0U3RhdGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgIGNsaWVudFJlYWR5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGRpZFRpbWVvdXQ6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChyZXMucmVhc29uKSB7XG4gICAgICAgICAgICAvLyBPcHRpbWl6ZWx5IGNsaWVudCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS5cbiAgICAgICAgICAgIGNhc2UgTm90UmVhZHlSZWFzb24uTk9fQ0xJRU5UOlxuICAgICAgICAgICAgICAgIGhvb2tzTG9nZ2VyLndhcm4oXCJDbGllbnQgbm90IHJlYWR5LCByZWFzb249XFxcIlwiLmNvbmNhdChyZXMubWVzc2FnZSwgXCJcXFwiXCIpKTtcbiAgICAgICAgICAgICAgICBvbkluaXRTdGF0ZUNoYW5nZSh7XG4gICAgICAgICAgICAgICAgICAgIGNsaWVudFJlYWR5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZGlkVGltZW91dDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgKF9hID0gcmVzLmRhdGFSZWFkeVByb21pc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50aGVuKGZ1bmN0aW9uIChyZWFkeVJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlYWR5UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1Y2Nlc3MgPSByZWFkeVJlc3VsdC5zdWNjZXNzLCBtZXNzYWdlID0gcmVhZHlSZXN1bHQubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzTG9nZ2VyLmluZm8oJ0NsaWVudCBiZWNhbWUgcmVhZHkuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBob29rc0xvZ2dlci53YXJuKFwiQ2xpZW50IG5vdCByZWFkeSwgcmVhc29uPVxcXCJcIi5jb25jYXQobWVzc2FnZSwgXCJcXFwiXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvbkluaXRTdGF0ZUNoYW5nZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRSZWFkeTogc3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFRpbWVvdXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTm90UmVhZHlSZWFzb24uVVNFUl9OT1RfUkVBRFk6XG4gICAgICAgICAgICAgICAgaG9va3NMb2dnZXIud2FybihcIlVzZXIgd2FzIG5vdCByZWFkeSwgcmVhc29uPVxcXCJcIi5jb25jYXQocmVzLm1lc3NhZ2UsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgb25Jbml0U3RhdGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBjbGllbnRSZWFkeTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRpZFRpbWVvdXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIChfYiA9IHJlcy5kYXRhUmVhZHlQcm9taXNlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudGhlbihmdW5jdGlvbiAocmVhZHlSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWFkeVJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzID0gcmVhZHlSZXN1bHQuc3VjY2VzcywgbWVzc2FnZSA9IHJlYWR5UmVzdWx0Lm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBob29rc0xvZ2dlci5pbmZvKCdVc2VyIGJlY2FtZSByZWFkeSBsYXRlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzTG9nZ2VyLndhcm4oXCJDbGllbnQgbm90IHJlYWR5LCByZWFzb249XFxcIlwiLmNvbmNhdChtZXNzYWdlLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9uSW5pdFN0YXRlQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFJlYWR5OiBzdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlkVGltZW91dDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOb3RSZWFkeVJlYXNvbi5USU1FT1VUOlxuICAgICAgICAgICAgICAgIGhvb2tzTG9nZ2VyLmluZm8oXCJDbGllbnQgZGlkIG5vdCBiZWNvbWUgcmVhZHkgYmVmb3JlIHRpbWVvdXQgb2YgXCIuY29uY2F0KHRpbWVvdXQsIFwiIG1zLCByZWFzb249XFxcIlwiKS5jb25jYXQocmVzLm1lc3NhZ2UsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgb25Jbml0U3RhdGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBjbGllbnRSZWFkeTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRpZFRpbWVvdXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgKF9jID0gcmVzLmRhdGFSZWFkeVByb21pc2UpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50aGVuKGZ1bmN0aW9uIChyZWFkeVJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlYWR5UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1Y2Nlc3MgPSByZWFkeVJlc3VsdC5zdWNjZXNzLCBtZXNzYWdlID0gcmVhZHlSZXN1bHQubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzTG9nZ2VyLmluZm8oJ0NsaWVudCBiZWNhbWUgcmVhZHkgYWZ0ZXIgdGltZW91dCBhbHJlYWR5IGVsYXBzZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzTG9nZ2VyLndhcm4oXCJDbGllbnQgbm90IHJlYWR5LCByZWFzb249XFxcIlwiLmNvbmNhdChtZXNzYWdlLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9uSW5pdFN0YXRlQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFJlYWR5OiBzdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlkVGltZW91dDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGhvb2tzTG9nZ2VyLndhcm4oXCJPdGhlciByZWFzb24gY2xpZW50IG5vdCByZWFkeSwgcmVhc29uPVxcXCJcIi5jb25jYXQocmVzLm1lc3NhZ2UsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgb25Jbml0U3RhdGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBjbGllbnRSZWFkeTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRpZFRpbWVvdXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIChfZCA9IHJlcy5kYXRhUmVhZHlQcm9taXNlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QudGhlbihmdW5jdGlvbiAocmVhZHlSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWFkeVJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzID0gcmVhZHlSZXN1bHQuc3VjY2VzcywgbWVzc2FnZSA9IHJlYWR5UmVzdWx0Lm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBob29rc0xvZ2dlci5pbmZvKCdDbGllbnQgYmVjYW1lIHJlYWR5IGxhdGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBob29rc0xvZ2dlci53YXJuKFwiQ2xpZW50IG5vdCByZWFkeSwgcmVhc29uPVxcXCJcIi5jb25jYXQobWVzc2FnZSwgXCJcXFwiXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvbkluaXRTdGF0ZUNoYW5nZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRSZWFkeTogc3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFRpbWVvdXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhvb2tzTG9nZ2VyLmVycm9yKFwiRXJyb3IgaW5pdGlhbGl6aW5nIGNsaWVudC4gVGhlIGNvcmUgY2xpZW50IG9yIHVzZXIgcHJvbWlzZShzKSByZWplY3RlZC5cIik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB1c2VDb21wYXJlQXR0cnNNZW1vaXplKHZhbHVlKSB7XG4gICAgdmFyIHJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICAgIGlmICghYXJlQXR0cmlidXRlc0VxdWFsKHZhbHVlLCByZWYuY3VycmVudCkpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZi5jdXJyZW50O1xufVxuLyoqXG4gKiBBIFJlYWN0IEhvb2sgdGhhdCByZXRyaWV2ZXMgdGhlIHZhcmlhdGlvbiBmb3IgYW4gZXhwZXJpbWVudCwgb3B0aW9uYWxseVxuICogYXV0byB1cGRhdGluZyB0aGF0IHZhbHVlIGJhc2VkIG9uIHVuZGVybHlpbmcgdXNlciBvciBkYXRhZmlsZSBjaGFuZ2VzLlxuICpcbiAqIE5vdGU6IFRoZSByZWFjdCBjbGllbnQgY2FuIGJlY29tZSByZWFkeSBBRlRFUiB0aGUgdGltZW91dCBwZXJpb2QuXG4gKiAgICAgICBDbGllbnRSZWFkeSBhbmQgRGlkVGltZW91dCBwcm92aWRlIHNpZ25hbHMgdG8gaGFuZGxlIHRoaXMgc2NlbmFyaW8uXG4gKi9cbnZhciB1c2VFeHBlcmltZW50ID0gZnVuY3Rpb24gKGV4cGVyaW1lbnRLZXksIG9wdGlvbnMsIG92ZXJyaWRlcykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgaWYgKG92ZXJyaWRlcyA9PT0gdm9pZCAwKSB7IG92ZXJyaWRlcyA9IHt9OyB9XG4gICAgdmFyIF9hID0gUmVhY3QudXNlQ29udGV4dChPcHRpbWl6ZWx5Q29udGV4dCksIG9wdGltaXplbHkgPSBfYS5vcHRpbWl6ZWx5LCBpc1NlcnZlclNpZGUgPSBfYS5pc1NlcnZlclNpZGUsIHRpbWVvdXQgPSBfYS50aW1lb3V0O1xuICAgIHZhciBvdmVycmlkZUF0dHJzID0gdXNlQ29tcGFyZUF0dHJzTWVtb2l6ZShvdmVycmlkZXMub3ZlcnJpZGVBdHRyaWJ1dGVzKTtcbiAgICB2YXIgZ2V0Q3VycmVudERlY2lzaW9uID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgdmFyaWF0aW9uOiAob3B0aW1pemVseSA9PT0gbnVsbCB8fCBvcHRpbWl6ZWx5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpbWl6ZWx5LmFjdGl2YXRlKGV4cGVyaW1lbnRLZXksIG92ZXJyaWRlcy5vdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRycykpIHx8IG51bGwsXG4gICAgfSk7IH0sIFtvcHRpbWl6ZWx5LCBleHBlcmltZW50S2V5LCBvdmVycmlkZXMub3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cnNdKTtcbiAgICB2YXIgaXNDbGllbnRSZWFkeSA9IGlzU2VydmVyU2lkZSB8fCAhIShvcHRpbWl6ZWx5ID09PSBudWxsIHx8IG9wdGltaXplbHkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGltaXplbHkuaXNSZWFkeSgpKTtcbiAgICB2YXIgaXNSZWFkeVByb21pc2VGdWxmaWxsZWQgPSAhIShvcHRpbWl6ZWx5ID09PSBudWxsIHx8IG9wdGltaXplbHkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGltaXplbHkuZ2V0SXNSZWFkeVByb21pc2VGdWxmaWxsZWQoKSk7XG4gICAgdmFyIF9iID0gUmVhY3QudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGVjaXNpb25TdGF0ZSA9IGlzQ2xpZW50UmVhZHkgPyBnZXRDdXJyZW50RGVjaXNpb24oKSA6IHsgdmFyaWF0aW9uOiBudWxsIH07XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVjaXNpb25TdGF0ZSksIHsgY2xpZW50UmVhZHk6IGlzQ2xpZW50UmVhZHksIGRpZFRpbWVvdXQ6IGZhbHNlIH0pO1xuICAgIH0pLCBzdGF0ZSA9IF9iWzBdLCBzZXRTdGF0ZSA9IF9iWzFdO1xuICAgIC8vIERlY2lzaW9uIHN0YXRlIGlzIGRlcml2ZWQgZnJvbSBlbnRpdHlLZXkgYW5kIG92ZXJyaWRlcyBhcmd1bWVudHMuXG4gICAgLy8gVHJhY2sgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRob3NlIGFyZ3VtZW50cywgYW5kIHVwZGF0ZSBzdGF0ZSB3aGVuIHRoZXkgY2hhbmdlLlxuICAgIC8vIFRoaXMgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGRlcml2ZWQgc3RhdGUgcGF0dGVybiByZWNvbW1lbmRlZCBoZXJlOlxuICAgIC8vIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1mYXEuaHRtbCNob3ctZG8taS1pbXBsZW1lbnQtZ2V0ZGVyaXZlZHN0YXRlZnJvbXByb3BzXG4gICAgdmFyIGN1cnJlbnREZWNpc2lvbklucHV0cyA9IHtcbiAgICAgICAgZW50aXR5S2V5OiBleHBlcmltZW50S2V5LFxuICAgICAgICBvdmVycmlkZVVzZXJJZDogb3ZlcnJpZGVzLm92ZXJyaWRlVXNlcklkLFxuICAgICAgICBvdmVycmlkZUF0dHJpYnV0ZXM6IG92ZXJyaWRlQXR0cnMsXG4gICAgfTtcbiAgICB2YXIgX2MgPSBSZWFjdC51c2VTdGF0ZShjdXJyZW50RGVjaXNpb25JbnB1dHMpLCBwcmV2RGVjaXNpb25JbnB1dHMgPSBfY1swXSwgc2V0UHJldkRlY2lzaW9uSW5wdXRzID0gX2NbMV07XG4gICAgaWYgKCFhcmVEZWNpc2lvbklucHV0c0VxdWFsKHByZXZEZWNpc2lvbklucHV0cywgY3VycmVudERlY2lzaW9uSW5wdXRzKSkge1xuICAgICAgICBzZXRQcmV2RGVjaXNpb25JbnB1dHMoY3VycmVudERlY2lzaW9uSW5wdXRzKTtcbiAgICAgICAgc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkgeyByZXR1cm4gKF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcmV2U3RhdGUpLCBnZXRDdXJyZW50RGVjaXNpb24oKSkpOyB9KTtcbiAgICB9XG4gICAgdmFyIGZpbmFsUmVhZHlUaW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRpbWVvdXQgOiB0aW1lb3V0O1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFN1YnNjcmliZSB0byBpbml0aWFsemF0aW9uIHByb21pc2Ugb25seVxuICAgICAgICAvLyAxLiBXaGVuIGNsaWVudCBpcyB1c2luZyBTZGsgS2V5LCB3aGljaCBtZWFucyB0aGUgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBhc3luY2hyb25vdXNcbiAgICAgICAgLy8gICAgYW5kIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHByb21pc2UgYW5kIHVwZGF0ZSBkZWNpc2lvbi5cbiAgICAgICAgLy8gMi4gV2hlbiBjbGllbnQgaXMgdXNpbmcgZGF0YWZpbGUgb25seSBidXQgY2xpZW50IGlzIG5vdCByZWFkeSB5ZXQgd2hpY2ggbWVhbnMgdXNlclxuICAgICAgICAvLyAgICB3YXMgcHJvdmlkZWQgYXMgYSBwcm9taXNlIGFuZCB3ZSBuZWVkIHRvIHN1YnNjcmliZSBhbmQgd2FpdCBmb3IgdXNlciB0byBiZWNvbWUgYXZhaWxhYmxlLlxuICAgICAgICBpZiAob3B0aW1pemVseSAmJiAoKG9wdGltaXplbHkuZ2V0SXNVc2luZ1Nka0tleSgpICYmICFpc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCkgfHwgIWlzQ2xpZW50UmVhZHkpKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVUb0luaXRpYWxpemF0aW9uKG9wdGltaXplbHksIGZpbmFsUmVhZHlUaW1lb3V0LCBmdW5jdGlvbiAoaW5pdFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoX19hc3NpZ24oX19hc3NpZ24oe30sIGdldEN1cnJlbnREZWNpc2lvbigpKSwgaW5pdFN0YXRlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtmaW5hbFJlYWR5VGltZW91dCwgZ2V0Q3VycmVudERlY2lzaW9uLCBpc0NsaWVudFJlYWR5LCBpc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCwgb3B0aW1pemVseV0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFN1YnNjcmliZSB0byB1cGRhdGUgYWZ0ZXIgZmlyc3QgZGF0YWZpbGUgaXMgZmV0Y2hlZCBhbmQgcmVhZHlQcm9taXNlIGlzIHJlc29sdmVkIHRvIGF2b2lkIHJlZHVuZGFudCByZW5kZXJpbmcuXG4gICAgICAgIGlmIChvcHRpbWl6ZWx5ICYmIGlzUmVhZHlQcm9taXNlRnVsZmlsbGVkICYmIG9wdGlvbnMuYXV0b1VwZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNldHVwQXV0b1VwZGF0ZUxpc3RlbmVycyhvcHRpbWl6ZWx5LCBIb29rVHlwZS5FWFBFUklNRU5ULCBleHBlcmltZW50S2V5LCBob29rc0xvZ2dlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHsgcmV0dXJuIChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcHJldlN0YXRlKSwgZ2V0Q3VycmVudERlY2lzaW9uKCkpKTsgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB9O1xuICAgIH0sIFtpc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCwgb3B0aW9ucy5hdXRvVXBkYXRlLCBvcHRpbWl6ZWx5LCBleHBlcmltZW50S2V5LCBnZXRDdXJyZW50RGVjaXNpb25dKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3B0aW1pemVseSA9PT0gbnVsbCB8fCBvcHRpbWl6ZWx5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpbWl6ZWx5Lm9uRm9yY2VkVmFyaWF0aW9uc1VwZGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7IHJldHVybiAoX19hc3NpZ24oX19hc3NpZ24oe30sIHByZXZTdGF0ZSksIGdldEN1cnJlbnREZWNpc2lvbigpKSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9LCBbZ2V0Q3VycmVudERlY2lzaW9uLCBvcHRpbWl6ZWx5XSk7XG4gICAgaWYgKCFvcHRpbWl6ZWx5KSB7XG4gICAgICAgIGhvb2tzTG9nZ2VyLmVycm9yKFwiVW5hYmxlIHRvIHVzZSBleHBlcmltZW50IFwiLmNvbmNhdChleHBlcmltZW50S2V5LCBcIi4gXCIpLmNvbmNhdChvcHRpbWl6ZWx5UHJvcEVycm9yKSk7XG4gICAgfVxuICAgIHJldHVybiBbc3RhdGUudmFyaWF0aW9uLCBzdGF0ZS5jbGllbnRSZWFkeSwgc3RhdGUuZGlkVGltZW91dF07XG59O1xuLyoqXG4gKiBBIFJlYWN0IEhvb2sgdGhhdCByZXRyaWV2ZXMgdGhlIHN0YXR1cyBvZiBhIGZlYXR1cmUgZmxhZyBhbmQgaXRzIHZhcmlhYmxlcywgb3B0aW9uYWxseVxuICogYXV0byB1cGRhdGluZyB0aG9zZSB2YWx1ZXMgYmFzZWQgb24gdW5kZXJseWluZyB1c2VyIG9yIGRhdGFmaWxlIGNoYW5nZXMuXG4gKlxuICogTm90ZTogVGhlIHJlYWN0IGNsaWVudCBjYW4gYmVjb21lIHJlYWR5IEFGVEVSIHRoZSB0aW1lb3V0IHBlcmlvZC5cbiAqICAgICAgIENsaWVudFJlYWR5IGFuZCBEaWRUaW1lb3V0IHByb3ZpZGUgc2lnbmFscyB0byBoYW5kbGUgdGhpcyBzY2VuYXJpby5cbiAqL1xudmFyIHVzZUZlYXR1cmUgPSBmdW5jdGlvbiAoZmVhdHVyZUtleSwgb3B0aW9ucywgb3ZlcnJpZGVzKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBpZiAob3ZlcnJpZGVzID09PSB2b2lkIDApIHsgb3ZlcnJpZGVzID0ge307IH1cbiAgICB2YXIgX2EgPSBSZWFjdC51c2VDb250ZXh0KE9wdGltaXplbHlDb250ZXh0KSwgb3B0aW1pemVseSA9IF9hLm9wdGltaXplbHksIGlzU2VydmVyU2lkZSA9IF9hLmlzU2VydmVyU2lkZSwgdGltZW91dCA9IF9hLnRpbWVvdXQ7XG4gICAgdmFyIG92ZXJyaWRlQXR0cnMgPSB1c2VDb21wYXJlQXR0cnNNZW1vaXplKG92ZXJyaWRlcy5vdmVycmlkZUF0dHJpYnV0ZXMpO1xuICAgIHZhciBnZXRDdXJyZW50RGVjaXNpb24gPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgICAgICBpc0VuYWJsZWQ6ICEhKG9wdGltaXplbHkgPT09IG51bGwgfHwgb3B0aW1pemVseSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW1pemVseS5pc0ZlYXR1cmVFbmFibGVkKGZlYXR1cmVLZXksIG92ZXJyaWRlcy5vdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRycykpLFxuICAgICAgICB2YXJpYWJsZXM6IChvcHRpbWl6ZWx5ID09PSBudWxsIHx8IG9wdGltaXplbHkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGltaXplbHkuZ2V0RmVhdHVyZVZhcmlhYmxlcyhmZWF0dXJlS2V5LCBvdmVycmlkZXMub3ZlcnJpZGVVc2VySWQsIG92ZXJyaWRlQXR0cnMpKSB8fCB7fSxcbiAgICB9KTsgfSwgW29wdGltaXplbHksIGZlYXR1cmVLZXksIG92ZXJyaWRlcy5vdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyc10pO1xuICAgIHZhciBpc0NsaWVudFJlYWR5ID0gaXNTZXJ2ZXJTaWRlIHx8ICEhKG9wdGltaXplbHkgPT09IG51bGwgfHwgb3B0aW1pemVseSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW1pemVseS5pc1JlYWR5KCkpO1xuICAgIHZhciBpc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCA9ICEhKG9wdGltaXplbHkgPT09IG51bGwgfHwgb3B0aW1pemVseSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW1pemVseS5nZXRJc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCgpKTtcbiAgICB2YXIgX2IgPSBSZWFjdC51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZWNpc2lvblN0YXRlID0gaXNDbGllbnRSZWFkeSA/IGdldEN1cnJlbnREZWNpc2lvbigpIDogeyBpc0VuYWJsZWQ6IGZhbHNlLCB2YXJpYWJsZXM6IHt9IH07XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVjaXNpb25TdGF0ZSksIHsgY2xpZW50UmVhZHk6IGlzQ2xpZW50UmVhZHksIGRpZFRpbWVvdXQ6IGZhbHNlIH0pO1xuICAgIH0pLCBzdGF0ZSA9IF9iWzBdLCBzZXRTdGF0ZSA9IF9iWzFdO1xuICAgIC8vIERlY2lzaW9uIHN0YXRlIGlzIGRlcml2ZWQgZnJvbSBlbnRpdHlLZXkgYW5kIG92ZXJyaWRlcyBhcmd1bWVudHMuXG4gICAgLy8gVHJhY2sgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRob3NlIGFyZ3VtZW50cywgYW5kIHVwZGF0ZSBzdGF0ZSB3aGVuIHRoZXkgY2hhbmdlLlxuICAgIC8vIFRoaXMgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGRlcml2ZWQgc3RhdGUgcGF0dGVybiByZWNvbW1lbmRlZCBoZXJlOlxuICAgIC8vIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1mYXEuaHRtbCNob3ctZG8taS1pbXBsZW1lbnQtZ2V0ZGVyaXZlZHN0YXRlZnJvbXByb3BzXG4gICAgdmFyIGN1cnJlbnREZWNpc2lvbklucHV0cyA9IHtcbiAgICAgICAgZW50aXR5S2V5OiBmZWF0dXJlS2V5LFxuICAgICAgICBvdmVycmlkZVVzZXJJZDogb3ZlcnJpZGVzLm92ZXJyaWRlVXNlcklkLFxuICAgICAgICBvdmVycmlkZUF0dHJpYnV0ZXM6IG92ZXJyaWRlcy5vdmVycmlkZUF0dHJpYnV0ZXMsXG4gICAgfTtcbiAgICB2YXIgX2MgPSBSZWFjdC51c2VTdGF0ZShjdXJyZW50RGVjaXNpb25JbnB1dHMpLCBwcmV2RGVjaXNpb25JbnB1dHMgPSBfY1swXSwgc2V0UHJldkRlY2lzaW9uSW5wdXRzID0gX2NbMV07XG4gICAgaWYgKCFhcmVEZWNpc2lvbklucHV0c0VxdWFsKHByZXZEZWNpc2lvbklucHV0cywgY3VycmVudERlY2lzaW9uSW5wdXRzKSkge1xuICAgICAgICBzZXRQcmV2RGVjaXNpb25JbnB1dHMoY3VycmVudERlY2lzaW9uSW5wdXRzKTtcbiAgICAgICAgc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkgeyByZXR1cm4gKF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcmV2U3RhdGUpLCBnZXRDdXJyZW50RGVjaXNpb24oKSkpOyB9KTtcbiAgICB9XG4gICAgdmFyIGZpbmFsUmVhZHlUaW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRpbWVvdXQgOiB0aW1lb3V0O1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFN1YnNjcmliZSB0byBpbml0aWFsemF0aW9uIHByb21pc2Ugb25seVxuICAgICAgICAvLyAxLiBXaGVuIGNsaWVudCBpcyB1c2luZyBTZGsgS2V5LCB3aGljaCBtZWFucyB0aGUgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBhc3luY2hyb25vdXNcbiAgICAgICAgLy8gICAgYW5kIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHByb21pc2UgYW5kIHVwZGF0ZSBkZWNpc2lvbi5cbiAgICAgICAgLy8gMi4gV2hlbiBjbGllbnQgaXMgdXNpbmcgZGF0YWZpbGUgb25seSBidXQgY2xpZW50IGlzIG5vdCByZWFkeSB5ZXQgd2hpY2ggbWVhbnMgdXNlclxuICAgICAgICAvLyAgICB3YXMgcHJvdmlkZWQgYXMgYSBwcm9taXNlIGFuZCB3ZSBuZWVkIHRvIHN1YnNjcmliZSBhbmQgd2FpdCBmb3IgdXNlciB0byBiZWNvbWUgYXZhaWxhYmxlLlxuICAgICAgICBpZiAob3B0aW1pemVseSAmJiAob3B0aW1pemVseS5nZXRJc1VzaW5nU2RrS2V5KCkgfHwgIWlzQ2xpZW50UmVhZHkpKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVUb0luaXRpYWxpemF0aW9uKG9wdGltaXplbHksIGZpbmFsUmVhZHlUaW1lb3V0LCBmdW5jdGlvbiAoaW5pdFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoX19hc3NpZ24oX19hc3NpZ24oe30sIGdldEN1cnJlbnREZWNpc2lvbigpKSwgaW5pdFN0YXRlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW2ZpbmFsUmVhZHlUaW1lb3V0LCBnZXRDdXJyZW50RGVjaXNpb24sIG9wdGltaXplbHldKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gdXBkYXRlIGFmdGVyIGZpcnN0IGRhdGFmaWxlIGlzIGZldGNoZWQgYW5kIHJlYWR5UHJvbWlzZSBpcyByZXNvbHZlZCB0byBhdm9pZCByZWR1bmRhbnQgcmVuZGVyaW5nLlxuICAgICAgICBpZiAob3B0aW1pemVseSAmJiBpc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCAmJiBvcHRpb25zLmF1dG9VcGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXR1cEF1dG9VcGRhdGVMaXN0ZW5lcnMob3B0aW1pemVseSwgSG9va1R5cGUuRkVBVFVSRSwgZmVhdHVyZUtleSwgaG9va3NMb2dnZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7IHJldHVybiAoX19hc3NpZ24oX19hc3NpZ24oe30sIHByZXZTdGF0ZSksIGdldEN1cnJlbnREZWNpc2lvbigpKSk7IH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgfTtcbiAgICB9LCBbaXNSZWFkeVByb21pc2VGdWxmaWxsZWQsIG9wdGlvbnMuYXV0b1VwZGF0ZSwgb3B0aW1pemVseSwgZmVhdHVyZUtleSwgZ2V0Q3VycmVudERlY2lzaW9uXSk7XG4gICAgaWYgKCFvcHRpbWl6ZWx5KSB7XG4gICAgICAgIGhvb2tzTG9nZ2VyLmVycm9yKFwiVW5hYmxlIHRvIHByb3Blcmx5IHVzZSBmZWF0dXJlIFwiLmNvbmNhdChmZWF0dXJlS2V5LCBcIi4gXCIpLmNvbmNhdChvcHRpbWl6ZWx5UHJvcEVycm9yKSk7XG4gICAgfVxuICAgIHJldHVybiBbc3RhdGUuaXNFbmFibGVkLCBzdGF0ZS52YXJpYWJsZXMsIHN0YXRlLmNsaWVudFJlYWR5LCBzdGF0ZS5kaWRUaW1lb3V0XTtcbn07XG4vKipcbiAqIEEgUmVhY3QgSG9vayB0aGF0IHJldHJpZXZlcyB0aGUgZmxhZyBkZWNpc2lvbiwgb3B0aW9uYWxseVxuICogYXV0byB1cGRhdGluZyB0aG9zZSB2YWx1ZXMgYmFzZWQgb24gdW5kZXJseWluZyB1c2VyIG9yIGRhdGFmaWxlIGNoYW5nZXMuXG4gKlxuICogTm90ZTogVGhlIHJlYWN0IGNsaWVudCBjYW4gYmVjb21lIHJlYWR5IEFGVEVSIHRoZSB0aW1lb3V0IHBlcmlvZC5cbiAqICAgICAgIENsaWVudFJlYWR5IGFuZCBEaWRUaW1lb3V0IHByb3ZpZGUgc2lnbmFscyB0byBoYW5kbGUgdGhpcyBzY2VuYXJpby5cbiAqL1xudmFyIHVzZURlY2lzaW9uID0gZnVuY3Rpb24gKGZsYWdLZXksIG9wdGlvbnMsIG92ZXJyaWRlcykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgaWYgKG92ZXJyaWRlcyA9PT0gdm9pZCAwKSB7IG92ZXJyaWRlcyA9IHt9OyB9XG4gICAgdmFyIF9hID0gUmVhY3QudXNlQ29udGV4dChPcHRpbWl6ZWx5Q29udGV4dCksIG9wdGltaXplbHkgPSBfYS5vcHRpbWl6ZWx5LCBpc1NlcnZlclNpZGUgPSBfYS5pc1NlcnZlclNpZGUsIHRpbWVvdXQgPSBfYS50aW1lb3V0O1xuICAgIHZhciBvdmVycmlkZUF0dHJzID0gdXNlQ29tcGFyZUF0dHJzTWVtb2l6ZShvdmVycmlkZXMub3ZlcnJpZGVBdHRyaWJ1dGVzKTtcbiAgICB2YXIgZGVmYXVsdERlY2lzaW9uID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGYWlsZWREZWNpc2lvbihmbGFnS2V5LCAnT3B0aW1pemVseSBTREsgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkgeWV0LicsIHtcbiAgICAgICAgICAgIGlkOiBvdmVycmlkZXMub3ZlcnJpZGVVc2VySWQgfHwgbnVsbCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IG92ZXJyaWRlQXR0cnMgfHwge30sXG4gICAgICAgIH0pO1xuICAgIH0sIFtmbGFnS2V5LCBvdmVycmlkZUF0dHJzLCBvdmVycmlkZXMub3ZlcnJpZGVVc2VySWRdKTtcbiAgICB2YXIgZ2V0Q3VycmVudERlY2lzaW9uID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgZGVjaXNpb246IChvcHRpbWl6ZWx5ID09PSBudWxsIHx8IG9wdGltaXplbHkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGltaXplbHkuZGVjaWRlKGZsYWdLZXksIG9wdGlvbnMuZGVjaWRlT3B0aW9ucywgb3ZlcnJpZGVzLm92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJzKSkgfHwgZGVmYXVsdERlY2lzaW9uLFxuICAgIH0pOyB9LCBbZmxhZ0tleSwgZGVmYXVsdERlY2lzaW9uLCBvcHRpbWl6ZWx5LCBvcHRpb25zLmRlY2lkZU9wdGlvbnMsIG92ZXJyaWRlQXR0cnMsIG92ZXJyaWRlcy5vdmVycmlkZVVzZXJJZF0pO1xuICAgIHZhciBpc0NsaWVudFJlYWR5ID0gaXNTZXJ2ZXJTaWRlIHx8ICEhKG9wdGltaXplbHkgPT09IG51bGwgfHwgb3B0aW1pemVseSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW1pemVseS5pc1JlYWR5KCkpO1xuICAgIHZhciBpc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCA9ICEhKG9wdGltaXplbHkgPT09IG51bGwgfHwgb3B0aW1pemVseSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW1pemVseS5nZXRJc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCgpKTtcbiAgICB2YXIgX2IgPSBSZWFjdC51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZWNpc2lvblN0YXRlID0gaXNDbGllbnRSZWFkeVxuICAgICAgICAgICAgPyBnZXRDdXJyZW50RGVjaXNpb24oKVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgZGVjaXNpb246IGRlZmF1bHREZWNpc2lvbixcbiAgICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVjaXNpb25TdGF0ZSksIHsgY2xpZW50UmVhZHk6IGlzQ2xpZW50UmVhZHksIGRpZFRpbWVvdXQ6IGZhbHNlIH0pO1xuICAgIH0pLCBzdGF0ZSA9IF9iWzBdLCBzZXRTdGF0ZSA9IF9iWzFdO1xuICAgIC8vIERlY2lzaW9uIHN0YXRlIGlzIGRlcml2ZWQgZnJvbSBlbnRpdHlLZXkgYW5kIG92ZXJyaWRlcyBhcmd1bWVudHMuXG4gICAgLy8gVHJhY2sgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRob3NlIGFyZ3VtZW50cywgYW5kIHVwZGF0ZSBzdGF0ZSB3aGVuIHRoZXkgY2hhbmdlLlxuICAgIC8vIFRoaXMgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGRlcml2ZWQgc3RhdGUgcGF0dGVybiByZWNvbW1lbmRlZCBoZXJlOlxuICAgIC8vIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1mYXEuaHRtbCNob3ctZG8taS1pbXBsZW1lbnQtZ2V0ZGVyaXZlZHN0YXRlZnJvbXByb3BzXG4gICAgdmFyIGN1cnJlbnREZWNpc2lvbklucHV0cyA9IHtcbiAgICAgICAgZW50aXR5S2V5OiBmbGFnS2V5LFxuICAgICAgICBvdmVycmlkZVVzZXJJZDogb3ZlcnJpZGVzLm92ZXJyaWRlVXNlcklkLFxuICAgICAgICBvdmVycmlkZUF0dHJpYnV0ZXM6IG92ZXJyaWRlcy5vdmVycmlkZUF0dHJpYnV0ZXMsXG4gICAgfTtcbiAgICB2YXIgX2MgPSBSZWFjdC51c2VTdGF0ZShjdXJyZW50RGVjaXNpb25JbnB1dHMpLCBwcmV2RGVjaXNpb25JbnB1dHMgPSBfY1swXSwgc2V0UHJldkRlY2lzaW9uSW5wdXRzID0gX2NbMV07XG4gICAgaWYgKCFhcmVEZWNpc2lvbklucHV0c0VxdWFsKHByZXZEZWNpc2lvbklucHV0cywgY3VycmVudERlY2lzaW9uSW5wdXRzKSkge1xuICAgICAgICBzZXRQcmV2RGVjaXNpb25JbnB1dHMoY3VycmVudERlY2lzaW9uSW5wdXRzKTtcbiAgICAgICAgc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkgeyByZXR1cm4gKF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcmV2U3RhdGUpLCBnZXRDdXJyZW50RGVjaXNpb24oKSkpOyB9KTtcbiAgICB9XG4gICAgdmFyIGZpbmFsUmVhZHlUaW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRpbWVvdXQgOiB0aW1lb3V0O1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFN1YnNjcmliZSB0byBpbml0aWFsemF0aW9uIHByb21pc2Ugb25seVxuICAgICAgICAvLyAxLiBXaGVuIGNsaWVudCBpcyB1c2luZyBTZGsgS2V5LCB3aGljaCBtZWFucyB0aGUgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBhc3luY2hyb25vdXNcbiAgICAgICAgLy8gICAgYW5kIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHByb21pc2UgYW5kIHVwZGF0ZSBkZWNpc2lvbi5cbiAgICAgICAgLy8gMi4gV2hlbiBjbGllbnQgaXMgdXNpbmcgZGF0YWZpbGUgb25seSBidXQgY2xpZW50IGlzIG5vdCByZWFkeSB5ZXQgd2hpY2ggbWVhbnMgdXNlclxuICAgICAgICAvLyAgICB3YXMgcHJvdmlkZWQgYXMgYSBwcm9taXNlIGFuZCB3ZSBuZWVkIHRvIHN1YnNjcmliZSBhbmQgd2FpdCBmb3IgdXNlciB0byBiZWNvbWUgYXZhaWxhYmxlLlxuICAgICAgICBpZiAob3B0aW1pemVseSAmJiAob3B0aW1pemVseS5nZXRJc1VzaW5nU2RrS2V5KCkgfHwgIWlzQ2xpZW50UmVhZHkpKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVUb0luaXRpYWxpemF0aW9uKG9wdGltaXplbHksIGZpbmFsUmVhZHlUaW1lb3V0LCBmdW5jdGlvbiAoaW5pdFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoX19hc3NpZ24oX19hc3NpZ24oe30sIGdldEN1cnJlbnREZWNpc2lvbigpKSwgaW5pdFN0YXRlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW2ZpbmFsUmVhZHlUaW1lb3V0LCBnZXRDdXJyZW50RGVjaXNpb24sIG9wdGltaXplbHldKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAob3ZlcnJpZGVzLm92ZXJyaWRlVXNlcklkIHx8IG92ZXJyaWRlcy5vdmVycmlkZUF0dHJpYnV0ZXMgfHwgIW9wdGlvbnMuYXV0b1VwZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN1YnNjcmliZSB0byBGb3JjZWQgRGVjaXNpb24gY2hhbmdlcy5cbiAgICAgICAgcmV0dXJuIG5vdGlmaWVyLnN1YnNjcmliZShmbGFnS2V5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7IHJldHVybiAoX19hc3NpZ24oX19hc3NpZ24oe30sIHByZXZTdGF0ZSksIGdldEN1cnJlbnREZWNpc2lvbigpKSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9LCBbb3ZlcnJpZGVzLm92ZXJyaWRlVXNlcklkLCBvdmVycmlkZXMub3ZlcnJpZGVBdHRyaWJ1dGVzLCBvcHRpb25zLmF1dG9VcGRhdGUsIGZsYWdLZXksIGdldEN1cnJlbnREZWNpc2lvbl0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFN1YnNjcmliZSB0byB1cGRhdGUgYWZ0ZXIgZmlyc3QgZGF0YWZpbGUgaXMgZmV0Y2hlZCBhbmQgcmVhZHlQcm9taXNlIGlzIHJlc29sdmVkIHRvIGF2b2lkIHJlZHVuZGFudCByZW5kZXJpbmcuXG4gICAgICAgIGlmIChvcHRpbWl6ZWx5ICYmIGlzUmVhZHlQcm9taXNlRnVsZmlsbGVkICYmIG9wdGlvbnMuYXV0b1VwZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNldHVwQXV0b1VwZGF0ZUxpc3RlbmVycyhvcHRpbWl6ZWx5LCBIb29rVHlwZS5GRUFUVVJFLCBmbGFnS2V5LCBob29rc0xvZ2dlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHsgcmV0dXJuIChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcHJldlN0YXRlKSwgZ2V0Q3VycmVudERlY2lzaW9uKCkpKTsgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB9O1xuICAgIH0sIFtpc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCwgb3B0aW9ucy5hdXRvVXBkYXRlLCBvcHRpbWl6ZWx5LCBmbGFnS2V5LCBnZXRDdXJyZW50RGVjaXNpb25dKTtcbiAgICBpZiAoIW9wdGltaXplbHkpIHtcbiAgICAgICAgaG9va3NMb2dnZXIuZXJyb3IoXCJVbmFibGUgdG8gdXNlIGRlY2lzaW9uIFwiLmNvbmNhdChmbGFnS2V5LCBcIi4gXCIpLmNvbmNhdChvcHRpbWl6ZWx5UHJvcEVycm9yKSk7XG4gICAgfVxuICAgIHJldHVybiBbc3RhdGUuZGVjaXNpb24sIHN0YXRlLmNsaWVudFJlYWR5LCBzdGF0ZS5kaWRUaW1lb3V0XTtcbn07XG52YXIgdXNlVHJhY2tFdmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2EgPSBSZWFjdC51c2VDb250ZXh0KE9wdGltaXplbHlDb250ZXh0KSwgb3B0aW1pemVseSA9IF9hLm9wdGltaXplbHksIGlzU2VydmVyU2lkZSA9IF9hLmlzU2VydmVyU2lkZSwgdGltZW91dCA9IF9hLnRpbWVvdXQ7XG4gICAgdmFyIGlzQ2xpZW50UmVhZHkgPSBpc1NlcnZlclNpZGUgfHwgISEob3B0aW1pemVseSA9PT0gbnVsbCB8fCBvcHRpbWl6ZWx5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpbWl6ZWx5LmlzUmVhZHkoKSk7XG4gICAgdmFyIHRyYWNrID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgcmVzdFtfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW1pemVseSkge1xuICAgICAgICAgICAgaG9va3NMb2dnZXIuZXJyb3IoXCJVbmFibGUgdG8gdHJhY2sgZXZlbnRzLiBcIi5jb25jYXQob3B0aW1pemVseVByb3BFcnJvcikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNDbGllbnRSZWFkeSkge1xuICAgICAgICAgICAgaG9va3NMb2dnZXIuZXJyb3IoXCJVbmFibGUgdG8gdHJhY2sgZXZlbnRzLiBPcHRpbWl6ZWx5IGNsaWVudCBpcyBub3QgcmVhZHkgeWV0LlwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBvcHRpbWl6ZWx5LnRyYWNrLmFwcGx5KG9wdGltaXplbHksIHJlc3QpO1xuICAgIH0sIFtvcHRpbWl6ZWx5LCBpc0NsaWVudFJlYWR5XSk7XG4gICAgdmFyIF9iID0gUmVhY3QudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xpZW50UmVhZHk6IGlzQ2xpZW50UmVhZHksXG4gICAgICAgICAgICBkaWRUaW1lb3V0OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9KSwgc3RhdGUgPSBfYlswXSwgc2V0U3RhdGUgPSBfYlsxXTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gaW5pdGlhbGl6YXRpb24gcHJvbWlzZSBvbmx5XG4gICAgICAgIC8vIDEuIFdoZW4gY2xpZW50IGlzIHVzaW5nIFNkayBLZXksIHdoaWNoIG1lYW5zIHRoZSBpbml0aWFsaXphdGlvbiB3aWxsIGJlIGFzeW5jaHJvbm91c1xuICAgICAgICAvLyAgICBhbmQgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgcHJvbWlzZSBhbmQgdXBkYXRlIGRlY2lzaW9uLlxuICAgICAgICAvLyAyLiBXaGVuIGNsaWVudCBpcyB1c2luZyBkYXRhZmlsZSBvbmx5IGJ1dCBjbGllbnQgaXMgbm90IHJlYWR5IHlldCB3aGljaCBtZWFucyB1c2VyXG4gICAgICAgIC8vICAgIHdhcyBwcm92aWRlZCBhcyBhIHByb21pc2UgYW5kIHdlIG5lZWQgdG8gc3Vic2NyaWJlIGFuZCB3YWl0IGZvciB1c2VyIHRvIGJlY29tZSBhdmFpbGFibGUuXG4gICAgICAgIGlmIChvcHRpbWl6ZWx5ICYmIChvcHRpbWl6ZWx5LmdldElzVXNpbmdTZGtLZXkoKSB8fCAhaXNDbGllbnRSZWFkeSkpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZVRvSW5pdGlhbGl6YXRpb24ob3B0aW1pemVseSwgdGltZW91dCwgZnVuY3Rpb24gKGluaXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKGluaXRTdGF0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW29wdGltaXplbHksIHRpbWVvdXRdKTtcbiAgICByZXR1cm4gW3RyYWNrLCBzdGF0ZS5jbGllbnRSZWFkeSwgc3RhdGUuZGlkVGltZW91dF07XG59O1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE4LTIwMTksIE9wdGltaXplbHlcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEZlYXR1cmVDb21wb25lbnQgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgZmVhdHVyZSA9IHByb3BzLmZlYXR1cmUsIHRpbWVvdXQgPSBwcm9wcy50aW1lb3V0LCBhdXRvVXBkYXRlID0gcHJvcHMuYXV0b1VwZGF0ZSwgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgb3ZlcnJpZGVVc2VySWQgPSBwcm9wcy5vdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzID0gcHJvcHMub3ZlcnJpZGVBdHRyaWJ1dGVzO1xuICAgIHZhciBfYSA9IHVzZUZlYXR1cmUoZmVhdHVyZSwgeyB0aW1lb3V0OiB0aW1lb3V0LCBhdXRvVXBkYXRlOiBhdXRvVXBkYXRlIH0sIHsgb3ZlcnJpZGVVc2VySWQ6IG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXM6IG92ZXJyaWRlQXR0cmlidXRlcyB9KSwgaXNFbmFibGVkID0gX2FbMF0sIHZhcmlhYmxlcyA9IF9hWzFdLCBjbGllbnRSZWFkeSA9IF9hWzJdLCBkaWRUaW1lb3V0ID0gX2FbM107XG4gICAgaWYgKCFjbGllbnRSZWFkeSAmJiAhZGlkVGltZW91dCkge1xuICAgICAgICAvLyBPbmx5IGJsb2NrIHJlbmRlcmluZyB3aGlsZSB3ZXJlIHdhaXRpbmcgZm9yIHRoZSBjbGllbnQgd2l0aGluIHRoZSBhbGxvd2VkIHRpbWVvdXQuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBXcmFwIHRoZSByZXR1cm4gdmFsdWUgaGVyZSBpbiBhIEZyYWdtZW50IHRvIHBsZWFzZSB0aGUgSE9DJ3MgZXhwZWN0ZWQgUmVhY3QuQ29tcG9uZW50VHlwZVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvMTgwNTFcbiAgICByZXR1cm4gUmVhY3RfX25hbWVzcGFjZS5jcmVhdGVFbGVtZW50KFJlYWN0X19uYW1lc3BhY2UuRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKGlzRW5hYmxlZCwgdmFyaWFibGVzLCBjbGllbnRSZWFkeSwgZGlkVGltZW91dCkpO1xufTtcbnZhciBPcHRpbWl6ZWx5RmVhdHVyZSA9IEZlYXR1cmVDb21wb25lbnQ7XG5cbmZ1bmN0aW9uIHdpdGhPcHRpbWl6ZWx5KENvbXBvbmVudCkge1xuICAgIHZhciBXaXRoT3B0aW1pemVseSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICAgICAgX19leHRlbmRzKFdpdGhPcHRpbWl6ZWx5LCBfc3VwZXIpO1xuICAgICAgICBmdW5jdGlvbiBXaXRoT3B0aW1pemVseSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICBXaXRoT3B0aW1pemVseS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgZm9yd2FyZGVkUmVmID0gX2EuZm9yd2FyZGVkUmVmLCByZXN0ID0gX19yZXN0KF9hLCBbXCJmb3J3YXJkZWRSZWZcIl0pO1xuICAgICAgICAgICAgLy8gTm90ZTogQ2FzdGluZyBwcm9wcyB0byBQIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIHRoaXMgVHlwZVNjcmlwdCBpc3N1ZTpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjg4ODRcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3RfX25hbWVzcGFjZS5jcmVhdGVFbGVtZW50KE9wdGltaXplbHlDb250ZXh0Q29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gKFJlYWN0X19uYW1lc3BhY2UuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9fYXNzaWduKHt9LCByZXN0LCB7IG9wdGltaXplbHlSZWFkeVRpbWVvdXQ6IHZhbHVlLnRpbWVvdXQsIG9wdGltaXplbHk6IHZhbHVlLm9wdGltaXplbHksIGlzU2VydmVyU2lkZTogdmFsdWUuaXNTZXJ2ZXJTaWRlLCByZWY6IGZvcndhcmRlZFJlZiB9KSkpOyB9KSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBXaXRoT3B0aW1pemVseTtcbiAgICB9KFJlYWN0X19uYW1lc3BhY2UuQ29tcG9uZW50KSk7XG4gICAgdmFyIHdpdGhSZWZzRm9yd2FyZGVkID0gaG9pc3RTdGF0aWNzQW5kRm9yd2FyZFJlZnMoV2l0aE9wdGltaXplbHksIENvbXBvbmVudCwgJ3dpdGhPcHRpbWl6ZWx5Jyk7XG4gICAgcmV0dXJuIHdpdGhSZWZzRm9yd2FyZGVkO1xufVxuXG4vKipcbiAqIENvcHlyaWdodCAyMDE4LTIwMTksIDIwMjMtMjAyNCwgT3B0aW1pemVseVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEV4cGVyaW1lbnQgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgZXhwZXJpbWVudCA9IHByb3BzLmV4cGVyaW1lbnQsIGF1dG9VcGRhdGUgPSBwcm9wcy5hdXRvVXBkYXRlLCB0aW1lb3V0ID0gcHJvcHMudGltZW91dCwgb3ZlcnJpZGVVc2VySWQgPSBwcm9wcy5vdmVycmlkZVVzZXJJZCwgb3ZlcnJpZGVBdHRyaWJ1dGVzID0gcHJvcHMub3ZlcnJpZGVBdHRyaWJ1dGVzLCBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBfYSA9IHVzZUV4cGVyaW1lbnQoZXhwZXJpbWVudCwgeyB0aW1lb3V0OiB0aW1lb3V0LCBhdXRvVXBkYXRlOiBhdXRvVXBkYXRlIH0sIHsgb3ZlcnJpZGVVc2VySWQ6IG92ZXJyaWRlVXNlcklkLCBvdmVycmlkZUF0dHJpYnV0ZXM6IG92ZXJyaWRlQXR0cmlidXRlcyB9KSwgdmFyaWF0aW9uID0gX2FbMF0sIGNsaWVudFJlYWR5ID0gX2FbMV0sIGRpZFRpbWVvdXQgPSBfYVsyXTtcbiAgICBpZiAoIWNsaWVudFJlYWR5ICYmICFkaWRUaW1lb3V0KSB7XG4gICAgICAgIC8vIE9ubHkgYmxvY2sgcmVuZGVyaW5nIHdoaWxlIHdlcmUgd2FpdGluZyBmb3IgdGhlIGNsaWVudCB3aXRoaW4gdGhlIGFsbG93ZWQgdGltZW91dC5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChjaGlsZHJlbiAhPSBudWxsICYmIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBXcmFwIHRoZSByZXR1cm4gdmFsdWUgaGVyZSBpbiBhIEZyYWdtZW50IHRvIHBsZWFzZSB0aGUgSE9DJ3MgZXhwZWN0ZWQgUmVhY3QuQ29tcG9uZW50VHlwZVxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzE4MDUxXG4gICAgICAgIHJldHVybiBSZWFjdF9fbmFtZXNwYWNlLmNyZWF0ZUVsZW1lbnQoUmVhY3RfX25hbWVzcGFjZS5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4odmFyaWF0aW9uLCBjbGllbnRSZWFkeSwgZGlkVGltZW91dCkpO1xuICAgIH1cbiAgICB2YXIgZGVmYXVsdE1hdGNoID0gbnVsbDtcbiAgICB2YXIgdmFyaWF0aW9uTWF0Y2ggPSBudWxsO1xuICAgIC8vIFdlIHVzZSBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoIGluc3RlYWQgb2YgUmVhY3QuQ2hpbGRyZW4udG9BcnJheSgpLmZpbmQoKVxuICAgIC8vIGhlcmUgYmVjYXVzZSB0b0FycmF5IGFkZHMga2V5cyB0byBhbGwgY2hpbGQgZWxlbWVudHMgYW5kIHdlIGRvIG5vdCB3YW50XG4gICAgLy8gdG8gdHJpZ2dlciBhbiB1bm1vdW50L3JlbW91bnRcbiAgICBSZWFjdF9fbmFtZXNwYWNlLkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoIVJlYWN0X19uYW1lc3BhY2UuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkLnByb3BzLnZhcmlhdGlvbikge1xuICAgICAgICAgICAgaWYgKHZhcmlhdGlvbiA9PT0gY2hpbGQucHJvcHMudmFyaWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyaWF0aW9uTWF0Y2ggPSBjaGlsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBMYXN0IGNoaWxkIHdpdGggZGVmYXVsdCBwcm9wIHdpbnNcbiAgICAgICAgaWYgKGNoaWxkLnByb3BzLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIGRlZmF1bHRNYXRjaCA9IGNoaWxkO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgdmFyIG1hdGNoID0gbnVsbDtcbiAgICBpZiAodmFyaWF0aW9uTWF0Y2gpIHtcbiAgICAgICAgbWF0Y2ggPSB2YXJpYXRpb25NYXRjaDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGVmYXVsdE1hdGNoKSB7XG4gICAgICAgIG1hdGNoID0gZGVmYXVsdE1hdGNoO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG59O1xudmFyIE9wdGltaXplbHlFeHBlcmltZW50ID0gRXhwZXJpbWVudDtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxOC0yMDE5LCBPcHRpbWl6ZWx5XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFdyYXAgdGhlIHJldHVybiB2YWx1ZSBoZXJlIGluIGEgRnJhZ21lbnQgdG8gcGxlYXNlIHRoZSBIT0MncyBleHBlY3RlZCBSZWFjdC5Db21wb25lbnRUeXBlXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzE4MDUxXG52YXIgVmFyaWF0aW9uID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX2EuY2hpbGRyZW47XG4gICAgcmV0dXJuIFJlYWN0X19uYW1lc3BhY2UuY3JlYXRlRWxlbWVudChSZWFjdF9fbmFtZXNwYWNlLkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG59O1xudmFyIE9wdGltaXplbHlWYXJpYXRpb24gPSBWYXJpYXRpb247XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTksIDIwMjMtMjAyNCBPcHRpbWl6ZWx5XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbG9nZ2VyID0gb3B0aW1pemVseV9fbmFtZXNwYWNlLmdldExvZ2dlcignUmVhY3RTREsnKTtcbi8qKlxuICogbG9nT25seUV2ZW50RGlzcGF0Y2hlciBvbmx5IGxvZ3MgYSBtZXNzYWdlIGF0IHRoZSBkZWJ1ZyBsZXZlbCwgYW5kIGRvZXMgbm90XG4gKiBzZW5kIGFueSByZXF1ZXN0cyB0byB0aGUgT3B0aW1pemVseSByZXN1bHRzIGJhY2tlbmQuIFVzZSB0aGlzIHRvIGRpc2FibGVcbiAqIGFsbCBldmVudCBkaXNwYXRjaGluZy5cbiAqL1xudmFyIGxvZ09ubHlFdmVudERpc3BhdGNoZXIgPSB7XG4gICAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0V2ZW50IG5vdCBkaXNwYXRjaGVkIGJ5IGRpc2FibGVkIGV2ZW50IGRpc3BhdGNoZXI6ICVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGV2ZW50U3RyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBldmVudFN0ciA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBldmVudFN0ciA9ICdlcnJvciBzdHJpbmdpZnlpbmcgZXZlbnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50U3RyO1xuICAgICAgICB9KTtcbiAgICAgICAgY2FsbGJhY2soeyBzdGF0dXNDb2RlOiAyMDQgfSk7XG4gICAgfSxcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnT3B0aW1pemVseURlY2lkZU9wdGlvbicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvcHRpbWl6ZWx5Lk9wdGltaXplbHlEZWNpZGVPcHRpb247IH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdPcHRpbWl6ZWx5U2VnbWVudE9wdGlvbicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvcHRpbWl6ZWx5Lk9wdGltaXplbHlTZWdtZW50T3B0aW9uOyB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnZW51bXMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb3B0aW1pemVseS5lbnVtczsgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2Vycm9ySGFuZGxlcicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvcHRpbWl6ZWx5LmVycm9ySGFuZGxlcjsgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2V2ZW50RGlzcGF0Y2hlcicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvcHRpbWl6ZWx5LmV2ZW50RGlzcGF0Y2hlcjsgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2xvZ2dpbmcnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb3B0aW1pemVseS5sb2dnaW5nOyB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnc2V0TG9nTGV2ZWwnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb3B0aW1pemVseS5zZXRMb2dMZXZlbDsgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ3NldExvZ2dlcicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvcHRpbWl6ZWx5LnNldExvZ2dlcjsgfVxufSk7XG5leHBvcnRzLk9wdGltaXplbHlDb250ZXh0ID0gT3B0aW1pemVseUNvbnRleHQ7XG5leHBvcnRzLk9wdGltaXplbHlDb250ZXh0Q29uc3VtZXIgPSBPcHRpbWl6ZWx5Q29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5PcHRpbWl6ZWx5Q29udGV4dFByb3ZpZGVyID0gT3B0aW1pemVseUNvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuT3B0aW1pemVseUV4cGVyaW1lbnQgPSBPcHRpbWl6ZWx5RXhwZXJpbWVudDtcbmV4cG9ydHMuT3B0aW1pemVseUZlYXR1cmUgPSBPcHRpbWl6ZWx5RmVhdHVyZTtcbmV4cG9ydHMuT3B0aW1pemVseVByb3ZpZGVyID0gT3B0aW1pemVseVByb3ZpZGVyO1xuZXhwb3J0cy5PcHRpbWl6ZWx5VmFyaWF0aW9uID0gT3B0aW1pemVseVZhcmlhdGlvbjtcbmV4cG9ydHMuY3JlYXRlSW5zdGFuY2UgPSBjcmVhdGVJbnN0YW5jZTtcbmV4cG9ydHMubG9nT25seUV2ZW50RGlzcGF0Y2hlciA9IGxvZ09ubHlFdmVudERpc3BhdGNoZXI7XG5leHBvcnRzLnVzZURlY2lzaW9uID0gdXNlRGVjaXNpb247XG5leHBvcnRzLnVzZUV4cGVyaW1lbnQgPSB1c2VFeHBlcmltZW50O1xuZXhwb3J0cy51c2VGZWF0dXJlID0gdXNlRmVhdHVyZTtcbmV4cG9ydHMudXNlVHJhY2tFdmVudCA9IHVzZVRyYWNrRXZlbnQ7XG5leHBvcnRzLndpdGhPcHRpbWl6ZWx5ID0gd2l0aE9wdGltaXplbHk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5JTFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbmlsLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2MVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92Mi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92My5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY1XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92NC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhbGlkYXRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92YWxpZGF0ZS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZlcnNpb24uZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjEuanNcIikpO1xuXG52YXIgX3YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92My5qc1wiKSk7XG5cbnZhciBfdjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Y0LmpzXCIpKTtcblxudmFyIF92NCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjUuanNcIikpO1xuXG52YXIgX25pbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbmlsLmpzXCIpKTtcblxudmFyIF92ZXJzaW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92ZXJzaW9uLmpzXCIpKTtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpKTtcblxudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcm5nO1xuLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5cbmZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVGb3JtVHJhY2tlciA9IHZvaWQgMDtcbmNvbnN0IGRhdGFMYXllcl8xID0gcmVxdWlyZShcIi4uLy4uL3V0aWwvZGF0YUxheWVyXCIpO1xuY29uc3QgaW5kZXhfMSA9IHJlcXVpcmUoXCIuLi9maWVsZHMvaW5kZXhcIik7XG5jb25zdCBWQUxJRF9NT0RVTEVfVFlQRVMgPSBbXG4gICAgXCJyZWdpc3RyYXRpb25cIixcbiAgICBcImxlYWRcIixcbiAgICBcImZvcm1fb3B0aW9uXCIsXG4gICAgXCJwcm9zcGVjdFwiLFxuICAgIFwiYXBwbGljYW50XCIsXG4gICAgXCJxdW90ZVwiLFxuICAgIFwiY2FsY3VsYXRvclwiLFxuICAgIFwiZG93bmxvYWRcIixcbiAgICBcInRheF9xdWl6XCIsXG4gICAgXCJhc3Nlc3NtZW50IHF1aXpcIixcbl07XG5jb25zdCBjcmVhdGVGb3JtVHJhY2tlciA9ICh7IGZvcm1JZCB9KSA9PiB7XG4gICAgY29uc3QgdHJhY2tTdGVwVmlldyA9ICh7IHN0ZXBOYW1lIH0pID0+IHtcbiAgICAgICAgZGF0YUxheWVyXzEuZGVmYXVsdC5wdXNoKHsgZXZlbnQ6IFwiZm9ybVN0ZXBWaWV3XCIsIGZvcm1JZCwgZm9ybVN0ZXBOYW1lOiBzdGVwTmFtZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRyYWNrU3RlcFNraXAgPSAoeyBzdGVwTmFtZSB9KSA9PiB7XG4gICAgICAgIGRhdGFMYXllcl8xLmRlZmF1bHQucHVzaCh7IGV2ZW50OiBcImZvcm1TdGVwU2tpcFwiLCBmb3JtSWQsIGZvcm1TdGVwTmFtZTogc3RlcE5hbWUgfSk7XG4gICAgfTtcbiAgICBjb25zdCB0cmFja1ZhbGlkU3VibWlzc2lvbiA9ICh7IGVtYWlsQWRkcmVzcywgfSA9IHt9KSA9PiB7XG4gICAgICAgIGRhdGFMYXllcl8xLmRlZmF1bHQucHVzaCh7XG4gICAgICAgICAgICBldmVudDogXCJmb3JtU3VibWlzc2lvbkF0dGVtcHRcIixcbiAgICAgICAgICAgIGZvcm1JZCxcbiAgICAgICAgICAgIGZvcm1FbWFpbDogZW1haWxBZGRyZXNzLFxuICAgICAgICB9KTtcbiAgICAgICAgZGF0YUxheWVyXzEuZGVmYXVsdC5wdXNoKHtcbiAgICAgICAgICAgIGV2ZW50OiBcImZvcm1TdWJtaXNzaW9uXCIsXG4gICAgICAgICAgICBmb3JtSWQsXG4gICAgICAgICAgICBmb3JtRW1haWw6IGVtYWlsQWRkcmVzcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB0cmFja0ludmFsaWRTdWJtaXNzaW9uID0gKCkgPT4ge1xuICAgICAgICBkYXRhTGF5ZXJfMS5kZWZhdWx0LnB1c2goeyBldmVudDogXCJmb3JtU3VibWlzc2lvbkF0dGVtcHRcIiwgZm9ybUlkIH0pO1xuICAgIH07XG4gICAgY29uc3QgdHJhY2tDb25maXJtYXRpb24gPSAoeyByZWZlcmVuY2VJZCwgc2NvcmUsIH0pID0+IHtcbiAgICAgICAgaWYgKCFyZWZlcmVuY2VJZCAmJiAhc2NvcmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSByZWZlcmVuY2VJZCBhbmQvb3Igc2NvcmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YUxheWVyXzEuZGVmYXVsdC5wdXNoKHsgZXZlbnQ6IFwiZm9ybUNvbmZpcm1hdGlvblwiLCBmb3JtSWQsIHJlZmVyZW5jZUlkLCBzY29yZSB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHRyYWNrTW9kdWxlID0gKHsgdHlwZSwgY2F0ZWdvcnksIGxhYmVsLCB2YWx1ZSwgZmxhZywgfSkgPT4ge1xuICAgICAgICBpZiAoIXR5cGUgfHwgIWNhdGVnb3J5IHx8ICFsYWJlbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIHR5cGUsIGNhdGVnb3J5LCBhbmQgbGFiZWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFWQUxJRF9NT0RVTEVfVFlQRVMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIHR5cGUgbXVzdCBiZSBvbmUgb2YgJHtWQUxJRF9NT0RVTEVfVFlQRVN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YUxheWVyXzEuZGVmYXVsdC5wdXNoKHtcbiAgICAgICAgICAgIGV2ZW50OiBcImZvcm1Nb2R1bGVcIixcbiAgICAgICAgICAgIGZvcm1JZCxcbiAgICAgICAgICAgIG1vZHVsZVR5cGU6IHR5cGUsXG4gICAgICAgICAgICBtb2R1bGVDYXRlZ29yeTogY2F0ZWdvcnksXG4gICAgICAgICAgICBtb2R1bGVMYWJlbDogbGFiZWwsXG4gICAgICAgICAgICBtb2R1bGVWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBtb2R1bGVGbGFnOiBmbGFnLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGludGVyYWN0ZWRGaWVsZHMgPSBbXTtcbiAgICBjb25zdCByZWdpc3RlckZvcm1FbGVtZW50ID0gKGZvcm1FbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gKHsgdGFyZ2V0IH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRhcmdldDtcbiAgICAgICAgICAgIGlmIChpbnRlcmFjdGVkRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRhdGFMYXllcl8xLmRlZmF1bHQucHVzaCh7IGV2ZW50OiBcImZvcm1TdGFydFwiLCBmb3JtSWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW50ZXJhY3RlZEZpZWxkcy5pbmNsdWRlcyhmb3JtRmllbGQpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGludGVyYWN0ZWRGaWVsZHMucHVzaChmb3JtRmllbGQpO1xuICAgICAgICAgICAgY29uc3QgZm9ybUZpZWxkTmFtZSA9ICgwLCBpbmRleF8xLmdldEZpZWxkTmFtZSkoZm9ybUZpZWxkKTtcbiAgICAgICAgICAgIGlmICghZm9ybUZpZWxkTmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBmb3JtRmllbGRJbmRleCA9ICgwLCBpbmRleF8xLmdldEZpZWxkSW5kZXgpKGZvcm1GaWVsZCwgZm9ybUVsZW1lbnQpO1xuICAgICAgICAgICAgZGF0YUxheWVyXzEuZGVmYXVsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBldmVudDogXCJmb3JtSW50ZXJhY3Rpb25cIixcbiAgICAgICAgICAgICAgICBmb3JtSWQsXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBmb3JtRmllbGRJbmRleCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBmb3JtRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgaGFuZGxlRm9jdXMsIHRydWUpO1xuICAgIH07XG4gICAgY29uc3QgdHJhY2tFcnJvciA9ICh7IGZpZWxkLCBtZXNzYWdlIH0pID0+IHtcbiAgICAgICAgZGF0YUxheWVyXzEuZGVmYXVsdC5wdXNoKHtcbiAgICAgICAgICAgIGV2ZW50OiBcImZvcm1FcnJvclwiLFxuICAgICAgICAgICAgZm9ybUlkLFxuICAgICAgICAgICAgZXJyb3JGaWVsZDogKDAsIGluZGV4XzEuZ2V0RmllbGROYW1lKShmaWVsZCksXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHJhY2tDb25maXJtYXRpb24sXG4gICAgICAgIHRyYWNrRXJyb3IsXG4gICAgICAgIHRyYWNrSW52YWxpZFN1Ym1pc3Npb24sXG4gICAgICAgIHRyYWNrTW9kdWxlLFxuICAgICAgICB0cmFja1N0ZXBTa2lwLFxuICAgICAgICB0cmFja1N0ZXBWaWV3LFxuICAgICAgICB0cmFja1ZhbGlkU3VibWlzc2lvbixcbiAgICAgICAgcmVnaXN0ZXJGb3JtRWxlbWVudCxcbiAgICB9O1xufTtcbmV4cG9ydHMuY3JlYXRlRm9ybVRyYWNrZXIgPSBjcmVhdGVGb3JtVHJhY2tlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX25hdGl2ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbmF0aXZlLmpzXCIpKTtcblxudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBpZiAoX25hdGl2ZS5kZWZhdWx0LnJhbmRvbVVVSUQgJiYgIWJ1ZiAmJiAhb3B0aW9ucykge1xuICAgIHJldHVybiBfbmF0aXZlLmRlZmF1bHQucmFuZG9tVVVJRCgpO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBfcm5nLmRlZmF1bHQpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkocm5kcyk7XG59XG5cbnZhciBfZGVmYXVsdCA9IHY0O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfcm5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ybmcuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxuLy9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9MaW9zSy9VVUlELmpzXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxubGV0IF9ub2RlSWQ7XG5cbmxldCBfY2xvY2tzZXE7IC8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxuXG5cbmxldCBfbGFzdE1TZWNzID0gMDtcbmxldCBfbGFzdE5TZWNzID0gMDsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcblxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgbGV0IGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIGNvbnN0IGIgPSBidWYgfHwgbmV3IEFycmF5KDE2KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxldCBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XG4gIGxldCBjbG9ja3NlcSA9IG9wdGlvbnMuY2xvY2tzZXEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuY2xvY2tzZXEgOiBfY2xvY2tzZXE7IC8vIG5vZGUgYW5kIGNsb2Nrc2VxIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gcmFuZG9tIHZhbHVlcyBpZiB0aGV5J3JlIG5vdFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcbiAgLy8gc3lzdGVtIGVudHJvcHkuICBTZWUgIzE4OVxuXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBfcm5nLmRlZmF1bHQpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICBsZXQgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIGxldCBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIGNvbnN0IGR0ID0gbXNlY3MgLSBfbGFzdE1TZWNzICsgKG5zZWNzIC0gX2xhc3ROU2VjcykgLyAxMDAwMDsgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH0gLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuXG5cbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH0gLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuXG5cbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7IC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwOyAvLyBgdGltZV9sb3dgXG5cbiAgY29uc3QgdGwgPSAoKG1zZWNzICYgMHhmZmZmZmZmKSAqIDEwMDAwICsgbnNlY3MpICUgMHgxMDAwMDAwMDA7XG4gIGJbaSsrXSA9IHRsID4+PiAyNCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdGwgJiAweGZmOyAvLyBgdGltZV9taWRgXG5cbiAgY29uc3QgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGIpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2MTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsImNvbnN0IGhvdGphckxpYiA9IHJlcXVpcmUoJy4vc3JjL3JlYWN0LWhvdGphcicpO1xuXG5jb25zdCBoaiA9ICguLi5wYXJhbXMpID0+IHtcblx0aWYgKCF3aW5kb3cuaGopIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0hvdGphciBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcblx0fVxuXHR3aW5kb3cuaGooLi4ucGFyYW1zKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRob3RqYXI6IHtcblx0XHRpbml0aWFsaXplOiBmdW5jdGlvbiBpbml0aWFsaXplKHtpZCwgc3YsIGRlYnVnLCBub25jZX0pIHtcblx0XHRcdGhvdGphckxpYih7aWQsIHN2LCBkZWJ1Zywgbm9uY2V9KTtcblx0XHR9LFxuXHRcdGluaXRpYWxpemVkOiBmdW5jdGlvbiBpbml0aWFsaXplZCgpIHtcblx0XHRcdHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93Py5oaiA9PT0gJ2Z1bmN0aW9uJztcblx0XHR9LFxuXHRcdGlkZW50aWZ5OiBmdW5jdGlvbiBpZGVudGlmeSh1c2VySWQsIHByb3BlcnRpZXMpIHtcblx0XHRcdGhqKCdpZGVudGlmeScsIHVzZXJJZCwgcHJvcGVydGllcyk7XG5cdFx0fSxcblx0XHRldmVudDogZnVuY3Rpb24gZXZlbnQoZXZlbnQpIHtcblx0XHRcdGhqKCdldmVudCcsIGV2ZW50KTtcblx0XHR9LFxuXHRcdHN0YXRlQ2hhbmdlOiBmdW5jdGlvbiBzdGF0ZUNoYW5nZShyZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGhqKCdzdGF0ZUNoYW5nZScsIHJlbGF0aXZlUGF0aCk7XG5cdFx0fVxuXHR9LFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy51bnNhZmVTdHJpbmdpZnkgPSB1bnNhZmVTdHJpbmdpZnk7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5jb25zdCBieXRlVG9IZXggPSBbXTtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xufVxuXG5mdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbnZhciBfZGVmYXVsdCA9IHN0cmluZ2lmeTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZlcnNpb24odXVpZCkge1xuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE1KSwgMTYpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2ZXJzaW9uO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19ZXhwb3J0cy5Bc3luY01vZGU9bDtleHBvcnRzLkNvbmN1cnJlbnRNb2RlPW07ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aztleHBvcnRzLkNvbnRleHRQcm92aWRlcj1oO2V4cG9ydHMuRWxlbWVudD1jO2V4cG9ydHMuRm9yd2FyZFJlZj1uO2V4cG9ydHMuRnJhZ21lbnQ9ZTtleHBvcnRzLkxhenk9dDtleHBvcnRzLk1lbW89cjtleHBvcnRzLlBvcnRhbD1kO1xuZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBBKGEpfHx6KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPUE7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ofTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Y307ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1lfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXR9O1xuZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1wfTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT13fHxhLiQkdHlwZW9mPT09eHx8YS4kJHR5cGVvZj09PXl8fGEuJCR0eXBlb2Y9PT12KX07ZXhwb3J0cy50eXBlT2Y9ejtcbiIsIlxuLyoqXG4gKiBUb3BvbG9naWNhbCBzb3J0aW5nIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZWRnZXNcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVkZ2VzKSB7XG4gIHJldHVybiB0b3Bvc29ydCh1bmlxdWVOb2RlcyhlZGdlcyksIGVkZ2VzKVxufVxuXG5tb2R1bGUuZXhwb3J0cy5hcnJheSA9IHRvcG9zb3J0XG5cbmZ1bmN0aW9uIHRvcG9zb3J0KG5vZGVzLCBlZGdlcykge1xuICB2YXIgY3Vyc29yID0gbm9kZXMubGVuZ3RoXG4gICAgLCBzb3J0ZWQgPSBuZXcgQXJyYXkoY3Vyc29yKVxuICAgICwgdmlzaXRlZCA9IHt9XG4gICAgLCBpID0gY3Vyc29yXG4gICAgLy8gQmV0dGVyIGRhdGEgc3RydWN0dXJlcyBtYWtlIGFsZ29yaXRobSBtdWNoIGZhc3Rlci5cbiAgICAsIG91dGdvaW5nRWRnZXMgPSBtYWtlT3V0Z29pbmdFZGdlcyhlZGdlcylcbiAgICAsIG5vZGVzSGFzaCA9IG1ha2VOb2Rlc0hhc2gobm9kZXMpXG5cbiAgLy8gY2hlY2sgZm9yIHVua25vd24gbm9kZXNcbiAgZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKSB7XG4gICAgaWYgKCFub2Rlc0hhc2guaGFzKGVkZ2VbMF0pIHx8ICFub2Rlc0hhc2guaGFzKGVkZ2VbMV0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9kZS4gVGhlcmUgaXMgYW4gdW5rbm93biBub2RlIGluIHRoZSBzdXBwbGllZCBlZGdlcy4nKVxuICAgIH1cbiAgfSlcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKCF2aXNpdGVkW2ldKSB2aXNpdChub2Rlc1tpXSwgaSwgbmV3IFNldCgpKVxuICB9XG5cbiAgcmV0dXJuIHNvcnRlZFxuXG4gIGZ1bmN0aW9uIHZpc2l0KG5vZGUsIGksIHByZWRlY2Vzc29ycykge1xuICAgIGlmKHByZWRlY2Vzc29ycy5oYXMobm9kZSkpIHtcbiAgICAgIHZhciBub2RlUmVwXG4gICAgICB0cnkge1xuICAgICAgICBub2RlUmVwID0gXCIsIG5vZGUgd2FzOlwiICsgSlNPTi5zdHJpbmdpZnkobm9kZSlcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBub2RlUmVwID0gXCJcIlxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDeWNsaWMgZGVwZW5kZW5jeScgKyBub2RlUmVwKVxuICAgIH1cblxuICAgIGlmICghbm9kZXNIYXNoLmhhcyhub2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1bmtub3duIG5vZGUuIE1ha2Ugc3VyZSB0byBwcm92aWRlZCBhbGwgaW52b2x2ZWQgbm9kZXMuIFVua25vd24gbm9kZTogJytKU09OLnN0cmluZ2lmeShub2RlKSlcbiAgICB9XG5cbiAgICBpZiAodmlzaXRlZFtpXSkgcmV0dXJuO1xuICAgIHZpc2l0ZWRbaV0gPSB0cnVlXG5cbiAgICB2YXIgb3V0Z29pbmcgPSBvdXRnb2luZ0VkZ2VzLmdldChub2RlKSB8fCBuZXcgU2V0KClcbiAgICBvdXRnb2luZyA9IEFycmF5LmZyb20ob3V0Z29pbmcpXG5cbiAgICBpZiAoaSA9IG91dGdvaW5nLmxlbmd0aCkge1xuICAgICAgcHJlZGVjZXNzb3JzLmFkZChub2RlKVxuICAgICAgZG8ge1xuICAgICAgICB2YXIgY2hpbGQgPSBvdXRnb2luZ1stLWldXG4gICAgICAgIHZpc2l0KGNoaWxkLCBub2Rlc0hhc2guZ2V0KGNoaWxkKSwgcHJlZGVjZXNzb3JzKVxuICAgICAgfSB3aGlsZSAoaSlcbiAgICAgIHByZWRlY2Vzc29ycy5kZWxldGUobm9kZSlcbiAgICB9XG5cbiAgICBzb3J0ZWRbLS1jdXJzb3JdID0gbm9kZVxuICB9XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZU5vZGVzKGFycil7XG4gIHZhciByZXMgPSBuZXcgU2V0KClcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBlZGdlID0gYXJyW2ldXG4gICAgcmVzLmFkZChlZGdlWzBdKVxuICAgIHJlcy5hZGQoZWRnZVsxXSlcbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZXMpXG59XG5cbmZ1bmN0aW9uIG1ha2VPdXRnb2luZ0VkZ2VzKGFycil7XG4gIHZhciBlZGdlcyA9IG5ldyBNYXAoKVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBhcnJbaV1cbiAgICBpZiAoIWVkZ2VzLmhhcyhlZGdlWzBdKSkgZWRnZXMuc2V0KGVkZ2VbMF0sIG5ldyBTZXQoKSlcbiAgICBpZiAoIWVkZ2VzLmhhcyhlZGdlWzFdKSkgZWRnZXMuc2V0KGVkZ2VbMV0sIG5ldyBTZXQoKSlcbiAgICBlZGdlcy5nZXQoZWRnZVswXSkuYWRkKGVkZ2VbMV0pXG4gIH1cbiAgcmV0dXJuIGVkZ2VzXG59XG5cbmZ1bmN0aW9uIG1ha2VOb2Rlc0hhc2goYXJyKXtcbiAgdmFyIHJlcyA9IG5ldyBNYXAoKVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgcmVzLnNldChhcnJbaV0sIGkpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbi8qXG4gKiBCcm93c2VyLWNvbXBhdGlibGUgSmF2YVNjcmlwdCBNRDVcbiAqXG4gKiBNb2RpZmljYXRpb24gb2YgSmF2YVNjcmlwdCBNRDVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL0phdmFTY3JpcHQtTUQ1XG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIEJhc2VkIG9uXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlXG4gKiBEaWdlc3QgQWxnb3JpdGhtLCBhcyBkZWZpbmVkIGluIFJGQyAxMzIxLlxuICogVmVyc2lvbiAyLjIgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDA5XG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2VcbiAqIFNlZSBodHRwOi8vcGFqaG9tZS5vcmcudWsvY3J5cHQvbWQ1IGZvciBtb3JlIGluZm8uXG4gKi9cbmZ1bmN0aW9uIG1kNShieXRlcykge1xuICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheShtc2cubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlc1tpXSA9IG1zZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZDVUb0hleEVuY29kZWRBcnJheSh3b3Jkc1RvTWQ1KGJ5dGVzVG9Xb3JkcyhieXRlcyksIGJ5dGVzLmxlbmd0aCAqIDgpKTtcbn1cbi8qXG4gKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYW4gYXJyYXkgb2YgYnl0ZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIG1kNVRvSGV4RW5jb2RlZEFycmF5KGlucHV0KSB7XG4gIGNvbnN0IG91dHB1dCA9IFtdO1xuICBjb25zdCBsZW5ndGgzMiA9IGlucHV0Lmxlbmd0aCAqIDMyO1xuICBjb25zdCBoZXhUYWIgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGgzMjsgaSArPSA4KSB7XG4gICAgY29uc3QgeCA9IGlucHV0W2kgPj4gNV0gPj4+IGkgJSAzMiAmIDB4ZmY7XG4gICAgY29uc3QgaGV4ID0gcGFyc2VJbnQoaGV4VGFiLmNoYXJBdCh4ID4+PiA0ICYgMHgwZikgKyBoZXhUYWIuY2hhckF0KHggJiAweDBmKSwgMTYpO1xuICAgIG91dHB1dC5wdXNoKGhleCk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgb3V0cHV0IGxlbmd0aCB3aXRoIHBhZGRpbmcgYW5kIGJpdCBsZW5ndGhcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aDgpIHtcbiAgcmV0dXJuIChpbnB1dExlbmd0aDggKyA2NCA+Pj4gOSA8PCA0KSArIDE0ICsgMTtcbn1cbi8qXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoLlxuICovXG5cblxuZnVuY3Rpb24gd29yZHNUb01kNSh4LCBsZW4pIHtcbiAgLyogYXBwZW5kIHBhZGRpbmcgKi9cbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCBsZW4gJSAzMjtcbiAgeFtnZXRPdXRwdXRMZW5ndGgobGVuKSAtIDFdID0gbGVuO1xuICBsZXQgYSA9IDE3MzI1ODQxOTM7XG4gIGxldCBiID0gLTI3MTczMzg3OTtcbiAgbGV0IGMgPSAtMTczMjU4NDE5NDtcbiAgbGV0IGQgPSAyNzE3MzM4Nzg7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNikge1xuICAgIGNvbnN0IG9sZGEgPSBhO1xuICAgIGNvbnN0IG9sZGIgPSBiO1xuICAgIGNvbnN0IG9sZGMgPSBjO1xuICAgIGNvbnN0IG9sZGQgPSBkO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2ldLCA3LCAtNjgwODc2OTM2KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE3LCA2MDYxMDU4MTkpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgNF0sIDcsIC0xNzY0MTg4OTcpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA1XSwgMTIsIDEyMDAwODA0MjYpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgN10sIDIyLCAtNDU3MDU5ODMpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNywgMTc3MDAzNTQxNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE3LCAtNDIwNjMpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNywgMTgwNDYwMzY4Mik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDEzXSwgMTIsIC00MDM0MTEwMSk7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTcsIC0xNTAyMDAyMjkwKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTVdLCAyMiwgMTIzNjUzNTMyOSk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA1LCAtMTY1Nzk2NTEwKTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgNl0sIDksIC0xMDY5NTAxNjMyKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNCwgNjQzNzE3NzEzKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpXSwgMjAsIC0zNzM4OTczMDIpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNSwgLTcwMTU1ODY5MSk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDEwXSwgOSwgMzgwMTYwODMpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE0LCAtNjYwNDc4MzM1KTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgOV0sIDUsIDU2ODQ0NjQzOCk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDE0XSwgOSwgLTEwMTk4MDM2OTApO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTQsIC0xODczNjM5NjEpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA4XSwgMjAsIDExNjM1MzE1MDEpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDUsIC0xNDQ0NjgxNDY3KTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMl0sIDksIC01MTQwMzc4NCk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNCwgMTczNTMyODQ3Myk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgNV0sIDQsIC0zNzg1NTgpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNiwgMTgzOTAzMDU2Mik7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDE0XSwgMjMsIC0zNTMwOTU1Nik7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA0LCAtMTUzMDk5MjA2MCk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDRdLCAxMSwgMTI3Mjg5MzM1Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNiwgLTE1NTQ5NzYzMik7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMTNdLCA0LCA2ODEyNzkxNzQpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2ldLCAxMSwgLTM1ODUzNzIyMik7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNiwgLTcyMjUyMTk3OSk7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDZdLCAyMywgNzYwMjkxODkpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNCwgLTY0MDM2NDQ4Nyk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDEyXSwgMTEsIC00MjE4MTU4MzUpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE2LCA1MzA3NDI1MjApO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAyXSwgMjMsIC05OTUzMzg2NTEpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2ldLCA2LCAtMTk4NjMwODQ0KTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgN10sIDEwLCAxMTI2ODkxNDE1KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyA1XSwgMjEsIC01NzQzNDA1NSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNiwgMTcwMDQ4NTU3MSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDNdLCAxMCwgLTE4OTQ5ODY2MDYpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE1LCAtMTA1MTUyMyk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNiwgMTg3MzMxMzM1OSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDE1XSwgMTAsIC0zMDYxMTc0NCk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNSwgLTE1NjAxOTgzODApO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxM10sIDIxLCAxMzA5MTUxNjQ5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgNF0sIDYsIC0xNDU1MjMwNzApO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNSwgNzE4Nzg3MjU5KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgOV0sIDIxLCAtMzQzNDg1NTUxKTtcbiAgICBhID0gc2FmZUFkZChhLCBvbGRhKTtcbiAgICBiID0gc2FmZUFkZChiLCBvbGRiKTtcbiAgICBjID0gc2FmZUFkZChjLCBvbGRjKTtcbiAgICBkID0gc2FmZUFkZChkLCBvbGRkKTtcbiAgfVxuXG4gIHJldHVybiBbYSwgYiwgYywgZF07XG59XG4vKlxuICogQ29udmVydCBhbiBhcnJheSBieXRlcyB0byBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gKiBDaGFyYWN0ZXJzID4yNTUgaGF2ZSB0aGVpciBoaWdoLWJ5dGUgc2lsZW50bHkgaWdub3JlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJ5dGVzVG9Xb3JkcyhpbnB1dCkge1xuICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGVuZ3RoOCA9IGlucHV0Lmxlbmd0aCAqIDg7XG4gIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50MzJBcnJheShnZXRPdXRwdXRMZW5ndGgobGVuZ3RoOCkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoODsgaSArPSA4KSB7XG4gICAgb3V0cHV0W2kgPj4gNV0gfD0gKGlucHV0W2kgLyA4XSAmIDB4ZmYpIDw8IGkgJSAzMjtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG4vKlxuICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxuICogdG8gd29yayBhcm91bmQgYnVncyBpbiBzb21lIEpTIGludGVycHJldGVycy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHNhZmVBZGQoeCwgeSkge1xuICBjb25zdCBsc3cgPSAoeCAmIDB4ZmZmZikgKyAoeSAmIDB4ZmZmZik7XG4gIGNvbnN0IG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpO1xuICByZXR1cm4gbXN3IDw8IDE2IHwgbHN3ICYgMHhmZmZmO1xufVxuLypcbiAqIEJpdHdpc2Ugcm90YXRlIGEgMzItYml0IG51bWJlciB0byB0aGUgbGVmdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdFJvdGF0ZUxlZnQobnVtLCBjbnQpIHtcbiAgcmV0dXJuIG51bSA8PCBjbnQgfCBudW0gPj4+IDMyIC0gY250O1xufVxuLypcbiAqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGZvdXIgYmFzaWMgb3BlcmF0aW9ucyB0aGUgYWxnb3JpdGhtIHVzZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBtZDVjbW4ocSwgYSwgYiwgeCwgcywgdCkge1xuICByZXR1cm4gc2FmZUFkZChiaXRSb3RhdGVMZWZ0KHNhZmVBZGQoc2FmZUFkZChhLCBxKSwgc2FmZUFkZCh4LCB0KSksIHMpLCBiKTtcbn1cblxuZnVuY3Rpb24gbWQ1ZmYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgJiBjIHwgfmIgJiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gbWQ1Z2coYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgJiBkIHwgYyAmIH5kLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gbWQ1aGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihjIF4gKGIgfCB+ZCksIGEsIGIsIHgsIHMsIHQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSBtZDU7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCIvKipcbiAqIEJhc2VkIG9uIEtlbmRvIFVJIENvcmUgZXhwcmVzc2lvbiBjb2RlIDxodHRwczovL2dpdGh1Yi5jb20vdGVsZXJpay9rZW5kby11aS1jb3JlI2xpY2Vuc2UtaW5mb3JtYXRpb24+XG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiBDYWNoZShtYXhTaXplKSB7XG4gIHRoaXMuX21heFNpemUgPSBtYXhTaXplXG4gIHRoaXMuY2xlYXIoKVxufVxuQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9zaXplID0gMFxuICB0aGlzLl92YWx1ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG59XG5DYWNoZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gdGhpcy5fdmFsdWVzW2tleV1cbn1cbkNhY2hlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0aGlzLl9zaXplID49IHRoaXMuX21heFNpemUgJiYgdGhpcy5jbGVhcigpXG4gIGlmICghKGtleSBpbiB0aGlzLl92YWx1ZXMpKSB0aGlzLl9zaXplKytcblxuICByZXR1cm4gKHRoaXMuX3ZhbHVlc1trZXldID0gdmFsdWUpXG59XG5cbnZhciBTUExJVF9SRUdFWCA9IC9bXi5eXFxdXltdK3woPz1cXFtcXF18XFwuXFwuKS9nLFxuICBESUdJVF9SRUdFWCA9IC9eXFxkKyQvLFxuICBMRUFEX0RJR0lUX1JFR0VYID0gL15cXGQvLFxuICBTUEVDX0NIQVJfUkVHRVggPSAvW35gISMkJVxcXiYqKz1cXC1cXFtcXF1cXFxcJzssL3t9fFxcXFxcIjo8PlxcP10vZyxcbiAgQ0xFQU5fUVVPVEVTX1JFR0VYID0gL15cXHMqKFsnXCJdPykoLio/KShcXDEpXFxzKiQvLFxuICBNQVhfQ0FDSEVfU0laRSA9IDUxMlxuXG52YXIgcGF0aENhY2hlID0gbmV3IENhY2hlKE1BWF9DQUNIRV9TSVpFKSxcbiAgc2V0Q2FjaGUgPSBuZXcgQ2FjaGUoTUFYX0NBQ0hFX1NJWkUpLFxuICBnZXRDYWNoZSA9IG5ldyBDYWNoZShNQVhfQ0FDSEVfU0laRSlcblxudmFyIGNvbmZpZ1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGU6IENhY2hlLFxuXG4gIHNwbGl0OiBzcGxpdCxcblxuICBub3JtYWxpemVQYXRoOiBub3JtYWxpemVQYXRoLFxuXG4gIHNldHRlcjogZnVuY3Rpb24gKHBhdGgpIHtcbiAgICB2YXIgcGFydHMgPSBub3JtYWxpemVQYXRoKHBhdGgpXG5cbiAgICByZXR1cm4gKFxuICAgICAgc2V0Q2FjaGUuZ2V0KHBhdGgpIHx8XG4gICAgICBzZXRDYWNoZS5zZXQocGF0aCwgZnVuY3Rpb24gc2V0dGVyKG9iaiwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMFxuICAgICAgICB2YXIgbGVuID0gcGFydHMubGVuZ3RoXG4gICAgICAgIHZhciBkYXRhID0gb2JqXG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuIC0gMSkge1xuICAgICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaW5kZXhdXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFydCA9PT0gJ19fcHJvdG9fXycgfHxcbiAgICAgICAgICAgIHBhcnQgPT09ICdjb25zdHJ1Y3RvcicgfHxcbiAgICAgICAgICAgIHBhcnQgPT09ICdwcm90b3R5cGUnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YSA9IGRhdGFbcGFydHNbaW5kZXgrK11dXG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtwYXJ0c1tpbmRleF1dID0gdmFsdWVcbiAgICAgIH0pXG4gICAgKVxuICB9LFxuXG4gIGdldHRlcjogZnVuY3Rpb24gKHBhdGgsIHNhZmUpIHtcbiAgICB2YXIgcGFydHMgPSBub3JtYWxpemVQYXRoKHBhdGgpXG4gICAgcmV0dXJuIChcbiAgICAgIGdldENhY2hlLmdldChwYXRoKSB8fFxuICAgICAgZ2V0Q2FjaGUuc2V0KHBhdGgsIGZ1bmN0aW9uIGdldHRlcihkYXRhKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgbGVuID0gcGFydHMubGVuZ3RoXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbikge1xuICAgICAgICAgIGlmIChkYXRhICE9IG51bGwgfHwgIXNhZmUpIGRhdGEgPSBkYXRhW3BhcnRzW2luZGV4KytdXVxuICAgICAgICAgIGVsc2UgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0pXG4gICAgKVxuICB9LFxuXG4gIGpvaW46IGZ1bmN0aW9uIChzZWdtZW50cykge1xuICAgIHJldHVybiBzZWdtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKHBhdGgsIHBhcnQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHBhdGggK1xuICAgICAgICAoaXNRdW90ZWQocGFydCkgfHwgRElHSVRfUkVHRVgudGVzdChwYXJ0KVxuICAgICAgICAgID8gJ1snICsgcGFydCArICddJ1xuICAgICAgICAgIDogKHBhdGggPyAnLicgOiAnJykgKyBwYXJ0KVxuICAgICAgKVxuICAgIH0sICcnKVxuICB9LFxuXG4gIGZvckVhY2g6IGZ1bmN0aW9uIChwYXRoLCBjYiwgdGhpc0FyZykge1xuICAgIGZvckVhY2goQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBzcGxpdChwYXRoKSwgY2IsIHRoaXNBcmcpXG4gIH0sXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aCkge1xuICByZXR1cm4gKFxuICAgIHBhdGhDYWNoZS5nZXQocGF0aCkgfHxcbiAgICBwYXRoQ2FjaGUuc2V0KFxuICAgICAgcGF0aCxcbiAgICAgIHNwbGl0KHBhdGgpLm1hcChmdW5jdGlvbiAocGFydCkge1xuICAgICAgICByZXR1cm4gcGFydC5yZXBsYWNlKENMRUFOX1FVT1RFU19SRUdFWCwgJyQyJylcbiAgICAgIH0pXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHNwbGl0KHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgubWF0Y2goU1BMSVRfUkVHRVgpIHx8IFsnJ11cbn1cblxuZnVuY3Rpb24gZm9yRWFjaChwYXJ0cywgaXRlciwgdGhpc0FyZykge1xuICB2YXIgbGVuID0gcGFydHMubGVuZ3RoLFxuICAgIHBhcnQsXG4gICAgaWR4LFxuICAgIGlzQXJyYXksXG4gICAgaXNCcmFja2V0XG5cbiAgZm9yIChpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7XG4gICAgcGFydCA9IHBhcnRzW2lkeF1cblxuICAgIGlmIChwYXJ0KSB7XG4gICAgICBpZiAoc2hvdWxkQmVRdW90ZWQocGFydCkpIHtcbiAgICAgICAgcGFydCA9ICdcIicgKyBwYXJ0ICsgJ1wiJ1xuICAgICAgfVxuXG4gICAgICBpc0JyYWNrZXQgPSBpc1F1b3RlZChwYXJ0KVxuICAgICAgaXNBcnJheSA9ICFpc0JyYWNrZXQgJiYgL15cXGQrJC8udGVzdChwYXJ0KVxuXG4gICAgICBpdGVyLmNhbGwodGhpc0FyZywgcGFydCwgaXNCcmFja2V0LCBpc0FycmF5LCBpZHgsIHBhcnRzKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1F1b3RlZChzdHIpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyAmJiBzdHIgJiYgW1wiJ1wiLCAnXCInXS5pbmRleE9mKHN0ci5jaGFyQXQoMCkpICE9PSAtMVxuICApXG59XG5cbmZ1bmN0aW9uIGhhc0xlYWRpbmdOdW1iZXIocGFydCkge1xuICByZXR1cm4gcGFydC5tYXRjaChMRUFEX0RJR0lUX1JFR0VYKSAmJiAhcGFydC5tYXRjaChESUdJVF9SRUdFWClcbn1cblxuZnVuY3Rpb24gaGFzU3BlY2lhbENoYXJzKHBhcnQpIHtcbiAgcmV0dXJuIFNQRUNfQ0hBUl9SRUdFWC50ZXN0KHBhcnQpXG59XG5cbmZ1bmN0aW9uIHNob3VsZEJlUXVvdGVkKHBhcnQpIHtcbiAgcmV0dXJuICFpc1F1b3RlZChwYXJ0KSAmJiAoaGFzTGVhZGluZ051bWJlcihwYXJ0KSB8fCBoYXNTcGVjaWFsQ2hhcnMocGFydCkpXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9kZWZhdWx0ID0gL14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJpbXBvcnR7b3B0aW9ucyBhcyBufWZyb21cInByZWFjdFwiO3ZhciB0LHIsdSxpLG89MCxmPVtdLGM9bixlPWMuX19iLGE9Yy5fX3Isdj1jLmRpZmZlZCxsPWMuX19jLG09Yy51bm1vdW50LHM9Yy5fXztmdW5jdGlvbiBwKG4sdCl7Yy5fX2gmJmMuX19oKHIsbixvfHx0KSxvPTA7dmFyIHU9ci5fX0h8fChyLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuIG4+PXUuX18ubGVuZ3RoJiZ1Ll9fLnB1c2goe30pLHUuX19bbl19ZnVuY3Rpb24gZChuKXtyZXR1cm4gbz0xLGgoRCxuKX1mdW5jdGlvbiBoKG4sdSxpKXt2YXIgbz1wKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6RCh2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIuX19mKSl7dmFyIGY9ZnVuY3Rpb24obix0LHIpe2lmKCFvLl9fYy5fX0gpcmV0dXJuITA7dmFyIHU9by5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hIW4uX19jfSk7aWYodS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4hbi5fX059KSlyZXR1cm4hY3x8Yy5jYWxsKHRoaXMsbix0LHIpO3ZhciBpPW8uX19jLnByb3BzIT09bjtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4uX19OKXt2YXIgdD1uLl9fWzBdO24uX189bi5fX04sbi5fX049dm9pZCAwLHQhPT1uLl9fWzBdJiYoaT0hMCl9fSksYyYmYy5jYWxsKHRoaXMsbix0LHIpfHxpfTtyLl9fZj0hMDt2YXIgYz1yLnNob3VsZENvbXBvbmVudFVwZGF0ZSxlPXIuY29tcG9uZW50V2lsbFVwZGF0ZTtyLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24obix0LHIpe2lmKHRoaXMuX19lKXt2YXIgdT1jO2M9dm9pZCAwLGYobix0LHIpLGM9dX1lJiZlLmNhbGwodGhpcyxuLHQscil9LHIuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ9cmV0dXJuIG8uX19OfHxvLl9ffWZ1bmN0aW9uIHkobix1KXt2YXIgaT1wKHQrKywzKTshYy5fX3MmJkMoaS5fX0gsdSkmJihpLl9fPW4saS51PXUsci5fX0guX19oLnB1c2goaSkpfWZ1bmN0aW9uIF8obix1KXt2YXIgaT1wKHQrKyw0KTshYy5fX3MmJkMoaS5fX0gsdSkmJihpLl9fPW4saS51PXUsci5fX2gucHVzaChpKSl9ZnVuY3Rpb24gQShuKXtyZXR1cm4gbz01LFQoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpufX0sW10pfWZ1bmN0aW9uIEYobix0LHIpe289NixfKGZ1bmN0aW9uKCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7dmFyIHI9bih0KCkpO3JldHVybiBmdW5jdGlvbigpe24obnVsbCksciYmXCJmdW5jdGlvblwiPT10eXBlb2YgciYmcigpfX1pZihuKXJldHVybiBuLmN1cnJlbnQ9dCgpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uY3VycmVudD1udWxsfX0sbnVsbD09cj9yOnIuY29uY2F0KG4pKX1mdW5jdGlvbiBUKG4scil7dmFyIHU9cCh0KyssNyk7cmV0dXJuIEModS5fX0gscikmJih1Ll9fPW4oKSx1Ll9fSD1yLHUuX19oPW4pLHUuX199ZnVuY3Rpb24gcShuLHQpe3JldHVybiBvPTgsVChmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiB4KG4pe3ZhciB1PXIuY29udGV4dFtuLl9fY10saT1wKHQrKyw5KTtyZXR1cm4gaS5jPW4sdT8obnVsbD09aS5fXyYmKGkuX189ITAsdS5zdWIocikpLHUucHJvcHMudmFsdWUpOm4uX199ZnVuY3Rpb24gUChuLHQpe2MudXNlRGVidWdWYWx1ZSYmYy51c2VEZWJ1Z1ZhbHVlKHQ/dChuKTpuKX1mdW5jdGlvbiBiKG4pe3ZhciB1PXAodCsrLDEwKSxpPWQoKTtyZXR1cm4gdS5fXz1uLHIuY29tcG9uZW50RGlkQ2F0Y2h8fChyLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKG4sdCl7dS5fXyYmdS5fXyhuLHQpLGlbMV0obil9KSxbaVswXSxmdW5jdGlvbigpe2lbMV0odm9pZCAwKX1dfWZ1bmN0aW9uIGcoKXt2YXIgbj1wKHQrKywxMSk7aWYoIW4uX18pe2Zvcih2YXIgdT1yLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO3ZhciBpPXUuX19tfHwodS5fX209WzAsMF0pO24uX189XCJQXCIraVswXStcIi1cIitpWzFdKyt9cmV0dXJuIG4uX199ZnVuY3Rpb24gaigpe2Zvcih2YXIgbjtuPWYuc2hpZnQoKTspaWYobi5fX1AmJm4uX19IKXRyeXtuLl9fSC5fX2guZm9yRWFjaCh6KSxuLl9fSC5fX2guZm9yRWFjaChCKSxuLl9fSC5fX2g9W119Y2F0Y2godCl7bi5fX0guX19oPVtdLGMuX19lKHQsbi5fX3YpfX1jLl9fYj1mdW5jdGlvbihuKXtyPW51bGwsZSYmZShuKX0sYy5fXz1mdW5jdGlvbihuLHQpe24mJnQuX19rJiZ0Ll9fay5fX20mJihuLl9fbT10Ll9fay5fX20pLHMmJnMobix0KX0sYy5fX3I9ZnVuY3Rpb24obil7YSYmYShuKSx0PTA7dmFyIGk9KHI9bi5fX2MpLl9fSDtpJiYodT09PXI/KGkuX19oPVtdLHIuX19oPVtdLGkuX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLl9fTiYmKG4uX189bi5fX04pLG4udT1uLl9fTj12b2lkIDB9KSk6KGkuX19oLmZvckVhY2goeiksaS5fX2guZm9yRWFjaChCKSxpLl9faD1bXSx0PTApKSx1PXJ9LGMuZGlmZmVkPWZ1bmN0aW9uKG4pe3YmJnYobik7dmFyIHQ9bi5fX2M7dCYmdC5fX0gmJih0Ll9fSC5fX2gubGVuZ3RoJiYoMSE9PWYucHVzaCh0KSYmaT09PWMucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKGk9Yy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHx3KShqKSksdC5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLnUmJihuLl9fSD1uLnUpLG4udT12b2lkIDB9KSksdT1yPW51bGx9LGMuX19jPWZ1bmN0aW9uKG4sdCl7dC5zb21lKGZ1bmN0aW9uKG4pe3RyeXtuLl9faC5mb3JFYWNoKHopLG4uX19oPW4uX19oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hbi5fX3x8QihuKX0pfWNhdGNoKHIpe3Quc29tZShmdW5jdGlvbihuKXtuLl9faCYmKG4uX19oPVtdKX0pLHQ9W10sYy5fX2UocixuLl9fdil9fSksbCYmbChuLHQpfSxjLnVubW91bnQ9ZnVuY3Rpb24obil7bSYmbShuKTt2YXIgdCxyPW4uX19jO3ImJnIuX19IJiYoci5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXt0cnl7eihuKX1jYXRjaChuKXt0PW59fSksci5fX0g9dm9pZCAwLHQmJmMuX19lKHQsci5fX3YpKX07dmFyIGs9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIHcobil7dmFyIHQscj1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KSxrJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0KSxzZXRUaW1lb3V0KG4pfSx1PXNldFRpbWVvdXQociwzNSk7ayYmKHQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpKX1mdW5jdGlvbiB6KG4pe3ZhciB0PXIsdT1uLl9fYztcImZ1bmN0aW9uXCI9PXR5cGVvZiB1JiYobi5fX2M9dm9pZCAwLHUoKSkscj10fWZ1bmN0aW9uIEIobil7dmFyIHQ9cjtuLl9fYz1uLl9fKCkscj10fWZ1bmN0aW9uIEMobix0KXtyZXR1cm4hbnx8bi5sZW5ndGghPT10Lmxlbmd0aHx8dC5zb21lKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQhPT1uW3JdfSl9ZnVuY3Rpb24gRChuLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChuKTp0fWV4cG9ydHtxIGFzIHVzZUNhbGxiYWNrLHggYXMgdXNlQ29udGV4dCxQIGFzIHVzZURlYnVnVmFsdWUseSBhcyB1c2VFZmZlY3QsYiBhcyB1c2VFcnJvckJvdW5kYXJ5LGcgYXMgdXNlSWQsRiBhcyB1c2VJbXBlcmF0aXZlSGFuZGxlLF8gYXMgdXNlTGF5b3V0RWZmZWN0LFQgYXMgdXNlTWVtbyxoIGFzIHVzZVJlZHVjZXIsQSBhcyB1c2VSZWYsZCBhcyB1c2VTdGF0ZX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob29rcy5tb2R1bGUuanMubWFwXG4iLCJpbXBvcnR7Q29tcG9uZW50IGFzIG4sY3JlYXRlRWxlbWVudCBhcyB0LG9wdGlvbnMgYXMgZSx0b0NoaWxkQXJyYXkgYXMgcixGcmFnbWVudCBhcyB1LHJlbmRlciBhcyBvLGh5ZHJhdGUgYXMgaSxjcmVhdGVDb250ZXh0IGFzIGwsY3JlYXRlUmVmIGFzIGMsY2xvbmVFbGVtZW50IGFzIGZ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0NvbXBvbmVudCxGcmFnbWVudCxjcmVhdGVDb250ZXh0LGNyZWF0ZUVsZW1lbnQsY3JlYXRlUmVmfWZyb21cInByZWFjdFwiO2ltcG9ydHt1c2VTdGF0ZSBhcyBhLHVzZUxheW91dEVmZmVjdCBhcyBzLHVzZUVmZmVjdCBhcyBoLHVzZUNhbGxiYWNrIGFzIHYsdXNlQ29udGV4dCBhcyBkLHVzZURlYnVnVmFsdWUgYXMgbSx1c2VJZCBhcyBwLHVzZUltcGVyYXRpdmVIYW5kbGUgYXMgeSx1c2VNZW1vIGFzIF8sdXNlUmVkdWNlciBhcyBiLHVzZVJlZiBhcyBTfWZyb21cInByZWFjdC9ob29rc1wiO2V4cG9ydCpmcm9tXCJwcmVhY3QvaG9va3NcIjtmdW5jdGlvbiBnKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdO3JldHVybiBufWZ1bmN0aW9uIEUobix0KXtmb3IodmFyIGUgaW4gbilpZihcIl9fc291cmNlXCIhPT1lJiYhKGUgaW4gdCkpcmV0dXJuITA7Zm9yKHZhciByIGluIHQpaWYoXCJfX3NvdXJjZVwiIT09ciYmbltyXSE9PXRbcl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQyhuLHQpe3ZhciBlPXQoKSxyPWEoe3Q6e19fOmUsdTp0fX0pLHU9clswXS50LG89clsxXTtyZXR1cm4gcyhmdW5jdGlvbigpe3UuX189ZSx1LnU9dCx4KHUpJiZvKHt0OnV9KX0sW24sZSx0XSksaChmdW5jdGlvbigpe3JldHVybiB4KHUpJiZvKHt0OnV9KSxuKGZ1bmN0aW9uKCl7eCh1KSYmbyh7dDp1fSl9KX0sW25dKSxlfWZ1bmN0aW9uIHgobil7dmFyIHQsZSxyPW4udSx1PW4uX187dHJ5e3ZhciBvPXIoKTtyZXR1cm4hKCh0PXUpPT09KGU9bykmJigwIT09dHx8MS90PT0xL2UpfHx0IT10JiZlIT1lKX1jYXRjaChuKXtyZXR1cm4hMH19ZnVuY3Rpb24gUihuKXtuKCl9ZnVuY3Rpb24gdyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBrKCl7cmV0dXJuWyExLFJdfXZhciBJPXM7ZnVuY3Rpb24gTihuLHQpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9dH1mdW5jdGlvbiBNKG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZixyPXQ9PW4ucmVmO3JldHVybiFyJiZ0JiYodC5jYWxsP3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8IXI6RSh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUuX19mPSEwLHUudHlwZT1uLHV9KE4ucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxOLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gRSh0aGlzLnByb3BzLG4pfHxFKHRoaXMuc3RhdGUsdCl9O3ZhciBUPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxUJiZUKG4pfTt2YXIgQT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gRChuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPUEsdC5yZW5kZXI9bix0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEw9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxPPXttYXA6TCxmb3JFYWNoOkwsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LEY9ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO0Yobix0LGUscil9O3ZhciBVPWUudW5tb3VudDtmdW5jdGlvbiBWKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jLl9fZT0hMCxuLl9fYz1udWxsKSxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBWKG4sdCxlKX0pKSxufWZ1bmN0aW9uIFcobix0LGUpe3JldHVybiBuJiZlJiYobi5fX3Y9bnVsbCxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBXKG4sdCxlKX0pLG4uX19jJiZuLl9fYy5fX1A9PT10JiYobi5fX2UmJmUuYXBwZW5kQ2hpbGQobi5fX2UpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gUCgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBqKG4pe3ZhciB0PW4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24geihuKXt2YXIgZSxyLHUsbz1udWxsO2Z1bmN0aW9uIGkoaSl7aWYoZXx8KGU9bigpKS50aGVuKGZ1bmN0aW9uKG4pe24mJihvPW4uZGVmYXVsdHx8biksdT0hMH0sZnVuY3Rpb24obil7cj1uLHU9ITB9KSxyKXRocm93IHI7aWYoIXUpdGhyb3cgZTtyZXR1cm4gbz90KG8saSk6bnVsbH1yZXR1cm4gaS5kaXNwbGF5TmFtZT1cIkxhenlcIixpLl9fZj0hMCxpfWZ1bmN0aW9uIEIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmdC5fX1ImJnQuX19SKCksdCYmMzImbi5fX3UmJihuLnR5cGU9bnVsbCksVSYmVShuKX0sKFAucHJvdG90eXBlPW5ldyBuKS5fX2M9ZnVuY3Rpb24obix0KXt2YXIgZT10Ll9fYyxyPXRoaXM7bnVsbD09ci5vJiYoci5vPVtdKSxyLm8ucHVzaChlKTt2YXIgdT1qKHIuX192KSxvPSExLGk9ZnVuY3Rpb24oKXtvfHwobz0hMCxlLl9fUj1udWxsLHU/dShsKTpsKCkpfTtlLl9fUj1pO3ZhciBsPWZ1bmN0aW9uKCl7aWYoIS0tci5fX3Upe2lmKHIuc3RhdGUuX19hKXt2YXIgbj1yLnN0YXRlLl9fYTtyLl9fdi5fX2tbMF09VyhuLG4uX19jLl9fUCxuLl9fYy5fX08pfXZhciB0O2ZvcihyLnNldFN0YXRlKHtfX2E6ci5fX2I9bnVsbH0pO3Q9ci5vLnBvcCgpOyl0LmZvcmNlVXBkYXRlKCl9fTtyLl9fdSsrfHwzMiZ0Ll9fdXx8ci5zZXRTdGF0ZSh7X19hOnIuX19iPXIuX192Ll9fa1swXX0pLG4udGhlbihpLGkpfSxQLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sUC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4sZSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxvPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPVYodGhpcy5fX2IscixvLl9fTz1vLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgaT1lLl9fYSYmdCh1LG51bGwsbi5mYWxsYmFjayk7cmV0dXJuIGkmJihpLl9fdSY9LTMzKSxbdCh1LG51bGwsZS5fX2E/bnVsbDpuLmNoaWxkcmVuKSxpXX07dmFyIEg9ZnVuY3Rpb24obix0LGUpe2lmKCsrZVsxXT09PWVbMF0mJm4ubC5kZWxldGUodCksbi5wcm9wcy5yZXZlYWxPcmRlciYmKFwidFwiIT09bi5wcm9wcy5yZXZlYWxPcmRlclswXXx8IW4ubC5zaXplKSlmb3IoZT1uLmk7ZTspe2Zvcig7ZS5sZW5ndGg+MzspZS5wb3AoKSgpO2lmKGVbMV08ZVswXSlicmVhaztuLmk9ZT1lWzJdfX07ZnVuY3Rpb24gWihuKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5jb250ZXh0fSxuLmNoaWxkcmVufWZ1bmN0aW9uIFkobil7dmFyIGU9dGhpcyxyPW4uaDtpZihlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7byhudWxsLGUudiksZS52PW51bGwsZS5oPW51bGx9LGUuaCYmZS5oIT09ciYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpLCFlLnYpe2Zvcih2YXIgdT1lLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO2UuaD1yLGUudj17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxfX2s6e19fbTp1Ll9fbX0sY29udGFpbnM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5oLmluc2VydEJlZm9yZShuLHQpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKG4pPj4+MSwxKSxlLmgucmVtb3ZlQ2hpbGQobil9fX1vKHQoWix7Y29udGV4dDplLmNvbnRleHR9LG4uX192KSxlLnYpfWZ1bmN0aW9uICQobixlKXt2YXIgcj10KFkse19fdjpuLGg6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShCLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1qKHQuX192KSxyPXQubC5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxIKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sQi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLmwuc2V0KHRbZV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuIG4uY2hpbGRyZW59LEIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1CLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24odCxlKXtIKG4sZSx0KX0pfTt2YXIgcT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsRz0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sSj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLEs9L1tBLVowLTldL2csUT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQsWD1mdW5jdGlvbihuKXtyZXR1cm4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KG4pfTtmdW5jdGlvbiBubihuLHQsZSl7cmV0dXJuIG51bGw9PXQuX19rJiYodC50ZXh0Q29udGVudD1cIlwiKSxvKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1mdW5jdGlvbiB0bihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgZW49ZS5ldmVudDtmdW5jdGlvbiBybigpe31mdW5jdGlvbiB1bigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX1mdW5jdGlvbiBvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gZW4mJihuPWVuKG4pKSxuLnBlcnNpc3Q9cm4sbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD11bixuLmlzRGVmYXVsdFByZXZlbnRlZD1vbixuLm5hdGl2ZUV2ZW50PW59O3ZhciBsbixjbj17ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxmbj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9LG89LTE9PT1lLmluZGV4T2YoXCItXCIpO2Zvcih2YXIgaSBpbiB0KXt2YXIgbD10W2ldO2lmKCEoXCJ2YWx1ZVwiPT09aSYmXCJkZWZhdWx0VmFsdWVcImluIHQmJm51bGw9PWx8fFEmJlwiY2hpbGRyZW5cIj09PWkmJlwibm9zY3JpcHRcIj09PWV8fFwiY2xhc3NcIj09PWl8fFwiY2xhc3NOYW1lXCI9PT1pKSl7dmFyIGM9aS50b0xvd2VyQ2FzZSgpO1wiZGVmYXVsdFZhbHVlXCI9PT1pJiZcInZhbHVlXCJpbiB0JiZudWxsPT10LnZhbHVlP2k9XCJ2YWx1ZVwiOlwiZG93bmxvYWRcIj09PWkmJiEwPT09bD9sPVwiXCI6XCJ0cmFuc2xhdGVcIj09PWMmJlwibm9cIj09PWw/bD0hMTpcIm9cIj09PWNbMF0mJlwiblwiPT09Y1sxXT9cIm9uZG91YmxlY2xpY2tcIj09PWM/aT1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1jfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxYKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1jP2k9XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09Yz9pPVwib25mb2N1c291dFwiOkoudGVzdChpKSYmKGk9Yyk6Yz1pPVwib25pbnB1dFwiOm8mJkcudGVzdChpKT9pPWkucmVwbGFjZShLLFwiLSQmXCIpLnRvTG93ZXJDYXNlKCk6bnVsbD09PWwmJihsPXZvaWQgMCksXCJvbmlucHV0XCI9PT1jJiZ1W2k9Y10mJihpPVwib25pbnB1dENhcHR1cmVcIiksdVtpXT1sfX1cInNlbGVjdFwiPT1lJiZ1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLFwic2VsZWN0XCI9PWUmJm51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpLHQuY2xhc3MmJiF0LmNsYXNzTmFtZT8odS5jbGFzcz10LmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiY2xhc3NOYW1lXCIsY24pKToodC5jbGFzc05hbWUmJiF0LmNsYXNzfHx0LmNsYXNzJiZ0LmNsYXNzTmFtZSkmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9cSxmbiYmZm4obil9O3ZhciBhbj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXthbiYmYW4obiksbG49bi5fX2N9O3ZhciBzbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtzbiYmc24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSxsbj1udWxsfTt2YXIgaG49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBsbi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazp2LHVzZUNvbnRleHQ6ZCx1c2VEZWJ1Z1ZhbHVlOm0sdXNlRGVmZXJyZWRWYWx1ZTp3LHVzZUVmZmVjdDpoLHVzZUlkOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTp5LHVzZUluc2VydGlvbkVmZmVjdDpJLHVzZUxheW91dEVmZmVjdDpzLHVzZU1lbW86Xyx1c2VSZWR1Y2VyOmIsdXNlUmVmOlMsdXNlU3RhdGU6YSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHVzZVRyYW5zaXRpb246a319fSx2bj1cIjE4LjMuMVwiO2Z1bmN0aW9uIGRuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBtbihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1xfWZ1bmN0aW9uIHBuKG4pe3JldHVybiBtbihuKSYmbi50eXBlPT09dX1mdW5jdGlvbiB5bihuKXtyZXR1cm4hIW4mJiEhbi5kaXNwbGF5TmFtZSYmKFwic3RyaW5nXCI9PXR5cGVvZiBuLmRpc3BsYXlOYW1lfHxuLmRpc3BsYXlOYW1lIGluc3RhbmNlb2YgU3RyaW5nKSYmbi5kaXNwbGF5TmFtZS5zdGFydHNXaXRoKFwiTWVtbyhcIil9ZnVuY3Rpb24gX24obil7cmV0dXJuIG1uKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gYm4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24gU24obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgZ249ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sRW49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sQ249dSx4bj1tbixSbj17dXNlU3RhdGU6YSx1c2VJZDpwLHVzZVJlZHVjZXI6Yix1c2VFZmZlY3Q6aCx1c2VMYXlvdXRFZmZlY3Q6cyx1c2VJbnNlcnRpb25FZmZlY3Q6SSx1c2VUcmFuc2l0aW9uOmssdXNlRGVmZXJyZWRWYWx1ZTp3LHVzZVN5bmNFeHRlcm5hbFN0b3JlOkMsc3RhcnRUcmFuc2l0aW9uOlIsdXNlUmVmOlMsdXNlSW1wZXJhdGl2ZUhhbmRsZTp5LHVzZU1lbW86Xyx1c2VDYWxsYmFjazp2LHVzZUNvbnRleHQ6ZCx1c2VEZWJ1Z1ZhbHVlOm0sdmVyc2lvbjpcIjE4LjMuMVwiLENoaWxkcmVuOk8scmVuZGVyOm5uLGh5ZHJhdGU6dG4sdW5tb3VudENvbXBvbmVudEF0Tm9kZTpibixjcmVhdGVQb3J0YWw6JCxjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6ZG4sY2xvbmVFbGVtZW50Ol9uLGNyZWF0ZVJlZjpjLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6bW4saXNFbGVtZW50OnhuLGlzRnJhZ21lbnQ6cG4saXNNZW1vOnluLGZpbmRET01Ob2RlOlNuLENvbXBvbmVudDpuLFB1cmVDb21wb25lbnQ6TixtZW1vOk0sZm9yd2FyZFJlZjpELGZsdXNoU3luYzpFbix1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpnbixTdHJpY3RNb2RlOkNuLFN1c3BlbnNlOlAsU3VzcGVuc2VMaXN0OkIsbGF6eTp6LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmhufTtleHBvcnR7TyBhcyBDaGlsZHJlbixOIGFzIFB1cmVDb21wb25lbnQsQ24gYXMgU3RyaWN0TW9kZSxQIGFzIFN1c3BlbnNlLEIgYXMgU3VzcGVuc2VMaXN0LGhuIGFzIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELF9uIGFzIGNsb25lRWxlbWVudCxkbiBhcyBjcmVhdGVGYWN0b3J5LCQgYXMgY3JlYXRlUG9ydGFsLFJuIGFzIGRlZmF1bHQsU24gYXMgZmluZERPTU5vZGUsRW4gYXMgZmx1c2hTeW5jLEQgYXMgZm9yd2FyZFJlZix0biBhcyBoeWRyYXRlLHhuIGFzIGlzRWxlbWVudCxwbiBhcyBpc0ZyYWdtZW50LHluIGFzIGlzTWVtbyxtbiBhcyBpc1ZhbGlkRWxlbWVudCx6IGFzIGxhenksTSBhcyBtZW1vLG5uIGFzIHJlbmRlcixSIGFzIHN0YXJ0VHJhbnNpdGlvbixibiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLGduIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLHcgYXMgdXNlRGVmZXJyZWRWYWx1ZSxJIGFzIHVzZUluc2VydGlvbkVmZmVjdCxDIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGsgYXMgdXNlVHJhbnNpdGlvbix2biBhcyB2ZXJzaW9ufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBhdC5tb2R1bGUuanMubWFwXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxuLy8gQWRhcHRlZCBmcm9tIENocmlzIFZlbmVzcycgU0hBMSBjb2RlIGF0XG4vLyBodHRwOi8vd3d3Lm1vdmFibGUtdHlwZS5jby51ay9zY3JpcHRzL3NoYTEuaHRtbFxuZnVuY3Rpb24gZihzLCB4LCB5LCB6KSB7XG4gIHN3aXRjaCAocykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiB4ICYgeSBeIH54ICYgejtcblxuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiB4IF4geSBeIHo7XG5cbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4geCAmIHkgXiB4ICYgeiBeIHkgJiB6O1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIHggXiB5IF4gejtcbiAgfVxufVxuXG5mdW5jdGlvbiBST1RMKHgsIG4pIHtcbiAgcmV0dXJuIHggPDwgbiB8IHggPj4+IDMyIC0gbjtcbn1cblxuZnVuY3Rpb24gc2hhMShieXRlcykge1xuICBjb25zdCBLID0gWzB4NWE4Mjc5OTksIDB4NmVkOWViYTEsIDB4OGYxYmJjZGMsIDB4Y2E2MmMxZDZdO1xuICBjb25zdCBIID0gWzB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjBdO1xuXG4gIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgbXNnID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGJ5dGVzKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgICBieXRlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ5dGVzLnB1c2gobXNnLmNoYXJDb2RlQXQoaSkpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShieXRlcykpIHtcbiAgICAvLyBDb252ZXJ0IEFycmF5LWxpa2UgdG8gQXJyYXlcbiAgICBieXRlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ5dGVzKTtcbiAgfVxuXG4gIGJ5dGVzLnB1c2goMHg4MCk7XG4gIGNvbnN0IGwgPSBieXRlcy5sZW5ndGggLyA0ICsgMjtcbiAgY29uc3QgTiA9IE1hdGguY2VpbChsIC8gMTYpO1xuICBjb25zdCBNID0gbmV3IEFycmF5KE4pO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgKytpKSB7XG4gICAgY29uc3QgYXJyID0gbmV3IFVpbnQzMkFycmF5KDE2KTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgYXJyW2pdID0gYnl0ZXNbaSAqIDY0ICsgaiAqIDRdIDw8IDI0IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAxXSA8PCAxNiB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgMl0gPDwgOCB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgM107XG4gICAgfVxuXG4gICAgTVtpXSA9IGFycjtcbiAgfVxuXG4gIE1bTiAtIDFdWzE0XSA9IChieXRlcy5sZW5ndGggLSAxKSAqIDggLyBNYXRoLnBvdygyLCAzMik7XG4gIE1bTiAtIDFdWzE0XSA9IE1hdGguZmxvb3IoTVtOIC0gMV1bMTRdKTtcbiAgTVtOIC0gMV1bMTVdID0gKGJ5dGVzLmxlbmd0aCAtIDEpICogOCAmIDB4ZmZmZmZmZmY7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyArK2kpIHtcbiAgICBjb25zdCBXID0gbmV3IFVpbnQzMkFycmF5KDgwKTtcblxuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgMTY7ICsrdCkge1xuICAgICAgV1t0XSA9IE1baV1bdF07XG4gICAgfVxuXG4gICAgZm9yIChsZXQgdCA9IDE2OyB0IDwgODA7ICsrdCkge1xuICAgICAgV1t0XSA9IFJPVEwoV1t0IC0gM10gXiBXW3QgLSA4XSBeIFdbdCAtIDE0XSBeIFdbdCAtIDE2XSwgMSk7XG4gICAgfVxuXG4gICAgbGV0IGEgPSBIWzBdO1xuICAgIGxldCBiID0gSFsxXTtcbiAgICBsZXQgYyA9IEhbMl07XG4gICAgbGV0IGQgPSBIWzNdO1xuICAgIGxldCBlID0gSFs0XTtcblxuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgODA7ICsrdCkge1xuICAgICAgY29uc3QgcyA9IE1hdGguZmxvb3IodCAvIDIwKTtcbiAgICAgIGNvbnN0IFQgPSBST1RMKGEsIDUpICsgZihzLCBiLCBjLCBkKSArIGUgKyBLW3NdICsgV1t0XSA+Pj4gMDtcbiAgICAgIGUgPSBkO1xuICAgICAgZCA9IGM7XG4gICAgICBjID0gUk9UTChiLCAzMCkgPj4+IDA7XG4gICAgICBiID0gYTtcbiAgICAgIGEgPSBUO1xuICAgIH1cblxuICAgIEhbMF0gPSBIWzBdICsgYSA+Pj4gMDtcbiAgICBIWzFdID0gSFsxXSArIGIgPj4+IDA7XG4gICAgSFsyXSA9IEhbMl0gKyBjID4+PiAwO1xuICAgIEhbM10gPSBIWzNdICsgZCA+Pj4gMDtcbiAgICBIWzRdID0gSFs0XSArIGUgPj4+IDA7XG4gIH1cblxuICByZXR1cm4gW0hbMF0gPj4gMjQgJiAweGZmLCBIWzBdID4+IDE2ICYgMHhmZiwgSFswXSA+PiA4ICYgMHhmZiwgSFswXSAmIDB4ZmYsIEhbMV0gPj4gMjQgJiAweGZmLCBIWzFdID4+IDE2ICYgMHhmZiwgSFsxXSA+PiA4ICYgMHhmZiwgSFsxXSAmIDB4ZmYsIEhbMl0gPj4gMjQgJiAweGZmLCBIWzJdID4+IDE2ICYgMHhmZiwgSFsyXSA+PiA4ICYgMHhmZiwgSFsyXSAmIDB4ZmYsIEhbM10gPj4gMjQgJiAweGZmLCBIWzNdID4+IDE2ICYgMHhmZiwgSFszXSA+PiA4ICYgMHhmZiwgSFszXSAmIDB4ZmYsIEhbNF0gPj4gMjQgJiAweGZmLCBIWzRdID4+IDE2ICYgMHhmZiwgSFs0XSA+PiA4ICYgMHhmZiwgSFs0XSAmIDB4ZmZdO1xufVxuXG52YXIgX2RlZmF1bHQgPSBzaGExO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiLyoqXHJcbiAqIEpTT05TY2hlbWEgVmFsaWRhdG9yIC0gVmFsaWRhdGVzIEphdmFTY3JpcHQgb2JqZWN0cyB1c2luZyBKU09OIFNjaGVtYXNcclxuICpcdChodHRwOi8vd3d3Lmpzb24uY29tL2pzb24tc2NoZW1hLXByb3Bvc2FsLylcclxuICogTGljZW5zZWQgdW5kZXIgQUZMLTIuMSBPUiBCU0QtMy1DbGF1c2VcclxuVG8gdXNlIHRoZSB2YWxpZGF0b3IgY2FsbCB0aGUgdmFsaWRhdGUgZnVuY3Rpb24gd2l0aCBhbiBpbnN0YW5jZSBvYmplY3QgYW5kIGFuIG9wdGlvbmFsIHNjaGVtYSBvYmplY3QuXHJcbklmIGEgc2NoZW1hIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUuIElmIHRoZSBpbnN0YW5jZSBvYmplY3QgcmVmZXJzIHRvIGEgc2NoZW1hIChzZWxmLXZhbGlkYXRpbmcpLFxyXG50aGF0IHNjaGVtYSB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgYW5kIHRoZSBzY2hlbWEgcGFyYW1ldGVyIGlzIG5vdCBuZWNlc3NhcnkgKGlmIGJvdGggZXhpc3QsXHJcbmJvdGggdmFsaWRhdGlvbnMgd2lsbCBvY2N1cikuXHJcblRoZSB2YWxpZGF0ZSBtZXRob2Qgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMuIElmIHRoZXJlIGFyZSBubyBlcnJvcnMsIHRoZW4gYW5cclxuZW1wdHkgbGlzdCB3aWxsIGJlIHJldHVybmVkLiBBIHZhbGlkYXRpb24gZXJyb3Igd2lsbCBoYXZlIHR3byBwcm9wZXJ0aWVzOlxyXG5cInByb3BlcnR5XCIgd2hpY2ggaW5kaWNhdGVzIHdoaWNoIHByb3BlcnR5IGhhZCB0aGUgZXJyb3JcclxuXCJtZXNzYWdlXCIgd2hpY2ggaW5kaWNhdGVzIHdoYXQgdGhlIGVycm9yIHdhc1xyXG4gKi9cclxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XHJcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICAgICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxyXG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gICAgICAgIC8vIE5vZGUuIERvZXMgbm90IHdvcmsgd2l0aCBzdHJpY3QgQ29tbW9uSlMsIGJ1dFxyXG4gICAgICAgIC8vIG9ubHkgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLFxyXG4gICAgICAgIC8vIGxpa2UgTm9kZS5cclxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzXHJcbiAgICAgICAgcm9vdC5qc29uU2NoZW1hID0gZmFjdG9yeSgpO1xyXG4gICAgfVxyXG59KHRoaXMsIGZ1bmN0aW9uICgpIHsvLyBzZXR1cCBwcmltaXRpdmUgY2xhc3NlcyB0byBiZSBKU09OIFNjaGVtYSB0eXBlc1xyXG52YXIgZXhwb3J0cyA9IHZhbGlkYXRlXHJcbmV4cG9ydHMuSW50ZWdlciA9IHt0eXBlOlwiaW50ZWdlclwifTtcclxudmFyIHByaW1pdGl2ZUNvbnN0cnVjdG9ycyA9IHtcclxuXHRTdHJpbmc6IFN0cmluZyxcclxuXHRCb29sZWFuOiBCb29sZWFuLFxyXG5cdE51bWJlcjogTnVtYmVyLFxyXG5cdE9iamVjdDogT2JqZWN0LFxyXG5cdEFycmF5OiBBcnJheSxcclxuXHREYXRlOiBEYXRlXHJcbn1cclxuZXhwb3J0cy52YWxpZGF0ZSA9IHZhbGlkYXRlO1xyXG5mdW5jdGlvbiB2YWxpZGF0ZSgvKkFueSovaW5zdGFuY2UsLypPYmplY3QqL3NjaGVtYSkge1xyXG5cdFx0Ly8gU3VtbWFyeTpcclxuXHRcdC8vICBcdFRvIHVzZSB0aGUgdmFsaWRhdG9yIGNhbGwgSlNPTlNjaGVtYS52YWxpZGF0ZSB3aXRoIGFuIGluc3RhbmNlIG9iamVjdCBhbmQgYW4gb3B0aW9uYWwgc2NoZW1hIG9iamVjdC5cclxuXHRcdC8vIFx0XHRJZiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlLiBJZiB0aGUgaW5zdGFuY2Ugb2JqZWN0IHJlZmVycyB0byBhIHNjaGVtYSAoc2VsZi12YWxpZGF0aW5nKSxcclxuXHRcdC8vIFx0XHR0aGF0IHNjaGVtYSB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgYW5kIHRoZSBzY2hlbWEgcGFyYW1ldGVyIGlzIG5vdCBuZWNlc3NhcnkgKGlmIGJvdGggZXhpc3QsXHJcblx0XHQvLyBcdFx0Ym90aCB2YWxpZGF0aW9ucyB3aWxsIG9jY3VyKS5cclxuXHRcdC8vIFx0XHRUaGUgdmFsaWRhdGUgbWV0aG9kIHdpbGwgcmV0dXJuIGFuIG9iamVjdCB3aXRoIHR3byBwcm9wZXJ0aWVzOlxyXG5cdFx0Ly8gXHRcdFx0dmFsaWQ6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBpbnN0YW5jZSBpcyB2YWxpZCBieSB0aGUgc2NoZW1hXHJcblx0XHQvLyBcdFx0XHRlcnJvcnM6IEFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCB0aGVuIGFuXHJcblx0XHQvLyBcdFx0XHRcdFx0ZW1wdHkgbGlzdCB3aWxsIGJlIHJldHVybmVkLiBBIHZhbGlkYXRpb24gZXJyb3Igd2lsbCBoYXZlIHR3byBwcm9wZXJ0aWVzOlxyXG5cdFx0Ly8gXHRcdFx0XHRcdFx0cHJvcGVydHk6IHdoaWNoIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0eSBoYWQgdGhlIGVycm9yXHJcblx0XHQvLyBcdFx0XHRcdFx0XHRtZXNzYWdlOiB3aGljaCBpbmRpY2F0ZXMgd2hhdCB0aGUgZXJyb3Igd2FzXHJcblx0XHQvL1xyXG5cdFx0cmV0dXJuIHZhbGlkYXRlKGluc3RhbmNlLCBzY2hlbWEsIHtjaGFuZ2luZzogZmFsc2V9KTsvLywgY29lcmNlOiBmYWxzZSwgZXhpc3RpbmdPbmx5OiBmYWxzZX0pO1xyXG5cdH07XHJcbmV4cG9ydHMuY2hlY2tQcm9wZXJ0eUNoYW5nZSA9IGZ1bmN0aW9uKC8qQW55Ki92YWx1ZSwvKk9iamVjdCovc2NoZW1hLCAvKlN0cmluZyovcHJvcGVydHkpIHtcclxuXHRcdC8vIFN1bW1hcnk6XHJcblx0XHQvLyBcdFx0VGhlIGNoZWNrUHJvcGVydHlDaGFuZ2UgbWV0aG9kIHdpbGwgY2hlY2sgdG8gc2VlIGlmIGFuIHZhbHVlIGNhbiBsZWdhbGx5IGJlIGluIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHNjaGVtYVxyXG5cdFx0Ly8gXHRcdFRoaXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4gdGhlIHZhbGlkYXRlIG1ldGhvZCBpbiB0aGF0IGl0IHdpbGwgZmFpbCBpZiB0aGUgc2NoZW1hIGlzIHJlYWRvbmx5IGFuZCBpdCB3aWxsXHJcblx0XHQvLyBcdFx0bm90IGNoZWNrIGZvciBzZWxmLXZhbGlkYXRpb24sIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgcGFzc2VkIGluIHZhbHVlIGlzIGFscmVhZHkgaW50ZXJuYWxseSB2YWxpZC5cclxuXHRcdC8vIFx0XHRUaGUgY2hlY2tQcm9wZXJ0eUNoYW5nZSBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHR5cGUgYXMgdmFsaWRhdGUsIHNlZSBKU09OU2NoZW1hLnZhbGlkYXRlIGZvclxyXG5cdFx0Ly8gXHRcdGluZm9ybWF0aW9uLlxyXG5cdFx0Ly9cclxuXHRcdHJldHVybiB2YWxpZGF0ZSh2YWx1ZSwgc2NoZW1hLCB7Y2hhbmdpbmc6IHByb3BlcnR5IHx8IFwicHJvcGVydHlcIn0pO1xyXG5cdH07XHJcbnZhciB2YWxpZGF0ZSA9IGV4cG9ydHMuX3ZhbGlkYXRlID0gZnVuY3Rpb24oLypBbnkqL2luc3RhbmNlLC8qT2JqZWN0Ki9zY2hlbWEsLypPYmplY3QqL29wdGlvbnMpIHtcclxuXHJcblx0aWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XHJcblx0dmFyIF9jaGFuZ2luZyA9IG9wdGlvbnMuY2hhbmdpbmc7XHJcblxyXG5cdGZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hKXtcclxuXHRcdHJldHVybiBzY2hlbWEudHlwZSB8fCAocHJpbWl0aXZlQ29uc3RydWN0b3JzW3NjaGVtYS5uYW1lXSA9PSBzY2hlbWEgJiYgc2NoZW1hLm5hbWUudG9Mb3dlckNhc2UoKSk7XHJcblx0fVxyXG5cdHZhciBlcnJvcnMgPSBbXTtcclxuXHQvLyB2YWxpZGF0ZSBhIHZhbHVlIGFnYWluc3QgYSBwcm9wZXJ0eSBkZWZpbml0aW9uXHJcblx0ZnVuY3Rpb24gY2hlY2tQcm9wKHZhbHVlLCBzY2hlbWEsIHBhdGgsaSl7XHJcblxyXG5cdFx0dmFyIGw7XHJcblx0XHRwYXRoICs9IHBhdGggPyB0eXBlb2YgaSA9PSAnbnVtYmVyJyA/ICdbJyArIGkgKyAnXScgOiB0eXBlb2YgaSA9PSAndW5kZWZpbmVkJyA/ICcnIDogJy4nICsgaSA6IGk7XHJcblx0XHRmdW5jdGlvbiBhZGRFcnJvcihtZXNzYWdlKXtcclxuXHRcdFx0ZXJyb3JzLnB1c2goe3Byb3BlcnR5OnBhdGgsbWVzc2FnZTptZXNzYWdlfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYoKHR5cGVvZiBzY2hlbWEgIT0gJ29iamVjdCcgfHwgc2NoZW1hIGluc3RhbmNlb2YgQXJyYXkpICYmIChwYXRoIHx8IHR5cGVvZiBzY2hlbWEgIT0gJ2Z1bmN0aW9uJykgJiYgIShzY2hlbWEgJiYgZ2V0VHlwZShzY2hlbWEpKSl7XHJcblx0XHRcdGlmKHR5cGVvZiBzY2hlbWEgPT0gJ2Z1bmN0aW9uJyl7XHJcblx0XHRcdFx0aWYoISh2YWx1ZSBpbnN0YW5jZW9mIHNjaGVtYSkpe1xyXG5cdFx0XHRcdFx0YWRkRXJyb3IoXCJpcyBub3QgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzL2NvbnN0cnVjdG9yIFwiICsgc2NoZW1hLm5hbWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fWVsc2UgaWYoc2NoZW1hKXtcclxuXHRcdFx0XHRhZGRFcnJvcihcIkludmFsaWQgc2NoZW1hL3Byb3BlcnR5IGRlZmluaXRpb24gXCIgKyBzY2hlbWEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cdFx0aWYoX2NoYW5naW5nICYmIHNjaGVtYS5yZWFkb25seSl7XHJcblx0XHRcdGFkZEVycm9yKFwiaXMgYSByZWFkb25seSBmaWVsZCwgaXQgY2FuIG5vdCBiZSBjaGFuZ2VkXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYoc2NoZW1hWydleHRlbmRzJ10peyAvLyBpZiBpdCBleHRlbmRzIGFub3RoZXIgc2NoZW1hLCBpdCBtdXN0IHBhc3MgdGhhdCBzY2hlbWEgYXMgd2VsbFxyXG5cdFx0XHRjaGVja1Byb3AodmFsdWUsc2NoZW1hWydleHRlbmRzJ10scGF0aCxpKTtcclxuXHRcdH1cclxuXHRcdC8vIHZhbGlkYXRlIGEgdmFsdWUgYWdhaW5zdCBhIHR5cGUgZGVmaW5pdGlvblxyXG5cdFx0ZnVuY3Rpb24gY2hlY2tUeXBlKHR5cGUsdmFsdWUpe1xyXG5cdFx0XHRpZih0eXBlKXtcclxuXHRcdFx0XHRpZih0eXBlb2YgdHlwZSA9PSAnc3RyaW5nJyAmJiB0eXBlICE9ICdhbnknICYmXHJcblx0XHRcdFx0XHRcdCh0eXBlID09ICdudWxsJyA/IHZhbHVlICE9PSBudWxsIDogdHlwZW9mIHZhbHVlICE9IHR5cGUpICYmXHJcblx0XHRcdFx0XHRcdCEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiB0eXBlID09ICdhcnJheScpICYmXHJcblx0XHRcdFx0XHRcdCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIHR5cGUgPT0gJ2RhdGUnKSAmJlxyXG5cdFx0XHRcdFx0XHQhKHR5cGUgPT0gJ2ludGVnZXInICYmIHZhbHVlJTE9PT0wKSl7XHJcblx0XHRcdFx0XHRyZXR1cm4gW3twcm9wZXJ0eTpwYXRoLG1lc3NhZ2U6dmFsdWUgKyBcIiAtIFwiICsgKHR5cGVvZiB2YWx1ZSkgKyBcIiB2YWx1ZSBmb3VuZCwgYnV0IGEgXCIgKyB0eXBlICsgXCIgaXMgcmVxdWlyZWRcIn1dO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZih0eXBlIGluc3RhbmNlb2YgQXJyYXkpe1xyXG5cdFx0XHRcdFx0dmFyIHVuaW9uRXJyb3JzPVtdO1xyXG5cdFx0XHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IHR5cGUubGVuZ3RoOyBqKyspeyAvLyBhIHVuaW9uIHR5cGVcclxuXHRcdFx0XHRcdFx0aWYoISh1bmlvbkVycm9ycz1jaGVja1R5cGUodHlwZVtqXSx2YWx1ZSkpLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKHVuaW9uRXJyb3JzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRcdHJldHVybiB1bmlvbkVycm9ycztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ZWxzZSBpZih0eXBlb2YgdHlwZSA9PSAnb2JqZWN0Jyl7XHJcblx0XHRcdFx0XHR2YXIgcHJpb3JFcnJvcnMgPSBlcnJvcnM7XHJcblx0XHRcdFx0XHRlcnJvcnMgPSBbXTtcclxuXHRcdFx0XHRcdGNoZWNrUHJvcCh2YWx1ZSx0eXBlLHBhdGgpO1xyXG5cdFx0XHRcdFx0dmFyIHRoZXNlRXJyb3JzID0gZXJyb3JzO1xyXG5cdFx0XHRcdFx0ZXJyb3JzID0gcHJpb3JFcnJvcnM7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhlc2VFcnJvcnM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHRcdGlmKHZhbHVlID09PSB1bmRlZmluZWQpe1xyXG5cdFx0XHRpZihzY2hlbWEucmVxdWlyZWQpe1xyXG5cdFx0XHRcdGFkZEVycm9yKFwiaXMgbWlzc2luZyBhbmQgaXQgaXMgcmVxdWlyZWRcIik7XHJcblx0XHRcdH1cclxuXHRcdH1lbHNle1xyXG5cdFx0XHRlcnJvcnMgPSBlcnJvcnMuY29uY2F0KGNoZWNrVHlwZShnZXRUeXBlKHNjaGVtYSksdmFsdWUpKTtcclxuXHRcdFx0aWYoc2NoZW1hLmRpc2FsbG93ICYmICFjaGVja1R5cGUoc2NoZW1hLmRpc2FsbG93LHZhbHVlKS5sZW5ndGgpe1xyXG5cdFx0XHRcdGFkZEVycm9yKFwiIGRpc2FsbG93ZWQgdmFsdWUgd2FzIG1hdGNoZWRcIik7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYodmFsdWUgIT09IG51bGwpe1xyXG5cdFx0XHRcdGlmKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpe1xyXG5cdFx0XHRcdFx0aWYoc2NoZW1hLml0ZW1zKXtcclxuXHRcdFx0XHRcdFx0dmFyIGl0ZW1zSXNBcnJheSA9IHNjaGVtYS5pdGVtcyBpbnN0YW5jZW9mIEFycmF5O1xyXG5cdFx0XHRcdFx0XHR2YXIgcHJvcERlZiA9IHNjaGVtYS5pdGVtcztcclxuXHRcdFx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkgKz0gMSkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtc0lzQXJyYXkpXHJcblx0XHRcdFx0XHRcdFx0XHRwcm9wRGVmID0gc2NoZW1hLml0ZW1zW2ldO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLmNvZXJjZSlcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlW2ldID0gb3B0aW9ucy5jb2VyY2UodmFsdWVbaV0sIHByb3BEZWYpO1xyXG5cdFx0XHRcdFx0XHRcdGVycm9ycy5jb25jYXQoY2hlY2tQcm9wKHZhbHVlW2ldLHByb3BEZWYscGF0aCxpKSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKHNjaGVtYS5taW5JdGVtcyAmJiB2YWx1ZS5sZW5ndGggPCBzY2hlbWEubWluSXRlbXMpe1xyXG5cdFx0XHRcdFx0XHRhZGRFcnJvcihcIlRoZXJlIG11c3QgYmUgYSBtaW5pbXVtIG9mIFwiICsgc2NoZW1hLm1pbkl0ZW1zICsgXCIgaW4gdGhlIGFycmF5XCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYoc2NoZW1hLm1heEl0ZW1zICYmIHZhbHVlLmxlbmd0aCA+IHNjaGVtYS5tYXhJdGVtcyl7XHJcblx0XHRcdFx0XHRcdGFkZEVycm9yKFwiVGhlcmUgbXVzdCBiZSBhIG1heGltdW0gb2YgXCIgKyBzY2hlbWEubWF4SXRlbXMgKyBcIiBpbiB0aGUgYXJyYXlcIik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fWVsc2UgaWYoc2NoZW1hLnByb3BlcnRpZXMgfHwgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKXtcclxuXHRcdFx0XHRcdGVycm9ycy5jb25jYXQoY2hlY2tPYmoodmFsdWUsIHNjaGVtYS5wcm9wZXJ0aWVzLCBwYXRoLCBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoc2NoZW1hLnBhdHRlcm4gJiYgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnICYmICF2YWx1ZS5tYXRjaChzY2hlbWEucGF0dGVybikpe1xyXG5cdFx0XHRcdFx0YWRkRXJyb3IoXCJkb2VzIG5vdCBtYXRjaCB0aGUgcmVnZXggcGF0dGVybiBcIiArIHNjaGVtYS5wYXR0ZXJuKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoc2NoZW1hLm1heExlbmd0aCAmJiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gc2NoZW1hLm1heExlbmd0aCl7XHJcblx0XHRcdFx0XHRhZGRFcnJvcihcIm1heSBvbmx5IGJlIFwiICsgc2NoZW1hLm1heExlbmd0aCArIFwiIGNoYXJhY3RlcnMgbG9uZ1wiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoc2NoZW1hLm1pbkxlbmd0aCAmJiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoIDwgc2NoZW1hLm1pbkxlbmd0aCl7XHJcblx0XHRcdFx0XHRhZGRFcnJvcihcIm11c3QgYmUgYXQgbGVhc3QgXCIgKyBzY2hlbWEubWluTGVuZ3RoICsgXCIgY2hhcmFjdGVycyBsb25nXCIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZih0eXBlb2Ygc2NoZW1hLm1pbmltdW0gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB2YWx1ZSA9PSB0eXBlb2Ygc2NoZW1hLm1pbmltdW0gJiZcclxuXHRcdFx0XHRcdFx0c2NoZW1hLm1pbmltdW0gPiB2YWx1ZSl7XHJcblx0XHRcdFx0XHRhZGRFcnJvcihcIm11c3QgaGF2ZSBhIG1pbmltdW0gdmFsdWUgb2YgXCIgKyBzY2hlbWEubWluaW11bSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHR5cGVvZiBzY2hlbWEubWF4aW11bSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHZhbHVlID09IHR5cGVvZiBzY2hlbWEubWF4aW11bSAmJlxyXG5cdFx0XHRcdFx0XHRzY2hlbWEubWF4aW11bSA8IHZhbHVlKXtcclxuXHRcdFx0XHRcdGFkZEVycm9yKFwibXVzdCBoYXZlIGEgbWF4aW11bSB2YWx1ZSBvZiBcIiArIHNjaGVtYS5tYXhpbXVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoc2NoZW1hWydlbnVtJ10pe1xyXG5cdFx0XHRcdFx0dmFyIGVudW1lciA9IHNjaGVtYVsnZW51bSddO1xyXG5cdFx0XHRcdFx0bCA9IGVudW1lci5sZW5ndGg7XHJcblx0XHRcdFx0XHR2YXIgZm91bmQ7XHJcblx0XHRcdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgbDsgaisrKXtcclxuXHRcdFx0XHRcdFx0aWYoZW51bWVyW2pdPT09dmFsdWUpe1xyXG5cdFx0XHRcdFx0XHRcdGZvdW5kPTE7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKCFmb3VuZCl7XHJcblx0XHRcdFx0XHRcdGFkZEVycm9yKFwiZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGluIHRoZSBlbnVtZXJhdGlvbiBcIiArIGVudW1lci5qb2luKFwiLCBcIikpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZih0eXBlb2Ygc2NoZW1hLm1heERlY2ltYWwgPT0gJ251bWJlcicgJiZcclxuXHRcdFx0XHRcdCh2YWx1ZS50b1N0cmluZygpLm1hdGNoKG5ldyBSZWdFeHAoXCJcXFxcLlswLTlde1wiICsgKHNjaGVtYS5tYXhEZWNpbWFsICsgMSkgKyBcIix9XCIpKSkpe1xyXG5cdFx0XHRcdFx0YWRkRXJyb3IoXCJtYXkgb25seSBoYXZlIFwiICsgc2NoZW1hLm1heERlY2ltYWwgKyBcIiBkaWdpdHMgb2YgZGVjaW1hbCBwbGFjZXNcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblx0Ly8gdmFsaWRhdGUgYW4gb2JqZWN0IGFnYWluc3QgYSBzY2hlbWFcclxuXHRmdW5jdGlvbiBjaGVja09iaihpbnN0YW5jZSxvYmpUeXBlRGVmLHBhdGgsYWRkaXRpb25hbFByb3Ape1xyXG5cclxuXHRcdGlmKHR5cGVvZiBvYmpUeXBlRGVmID09J29iamVjdCcpe1xyXG5cdFx0XHRpZih0eXBlb2YgaW5zdGFuY2UgIT0gJ29iamVjdCcgfHwgaW5zdGFuY2UgaW5zdGFuY2VvZiBBcnJheSl7XHJcblx0XHRcdFx0ZXJyb3JzLnB1c2goe3Byb3BlcnR5OnBhdGgsbWVzc2FnZTpcImFuIG9iamVjdCBpcyByZXF1aXJlZFwifSk7XHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHRcdGZvcih2YXIgaSBpbiBvYmpUeXBlRGVmKXsgXHJcblx0XHRcdFx0aWYob2JqVHlwZURlZi5oYXNPd25Qcm9wZXJ0eShpKSAmJiBpICE9ICdfX3Byb3RvX18nICYmIGkgIT0gJ2NvbnN0cnVjdG9yJyl7XHJcblx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpbnN0YW5jZS5oYXNPd25Qcm9wZXJ0eShpKSA/IGluc3RhbmNlW2ldIDogdW5kZWZpbmVkO1xyXG5cdFx0XHRcdFx0Ly8gc2tpcCBfbm90XyBzcGVjaWZpZWQgcHJvcGVydGllc1xyXG5cdFx0XHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5leGlzdGluZ09ubHkpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0dmFyIHByb3BEZWYgPSBvYmpUeXBlRGVmW2ldO1xyXG5cdFx0XHRcdFx0Ly8gc2V0IGRlZmF1bHRcclxuXHRcdFx0XHRcdGlmKHZhbHVlID09PSB1bmRlZmluZWQgJiYgcHJvcERlZltcImRlZmF1bHRcIl0pe1xyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGluc3RhbmNlW2ldID0gcHJvcERlZltcImRlZmF1bHRcIl07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZihvcHRpb25zLmNvZXJjZSAmJiBpIGluIGluc3RhbmNlKXtcclxuXHRcdFx0XHRcdFx0dmFsdWUgPSBpbnN0YW5jZVtpXSA9IG9wdGlvbnMuY29lcmNlKHZhbHVlLCBwcm9wRGVmKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNoZWNrUHJvcCh2YWx1ZSxwcm9wRGVmLHBhdGgsaSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRmb3IoaSBpbiBpbnN0YW5jZSl7XHJcblx0XHRcdGlmKGluc3RhbmNlLmhhc093blByb3BlcnR5KGkpICYmICEoaS5jaGFyQXQoMCkgPT0gJ18nICYmIGkuY2hhckF0KDEpID09ICdfJykgJiYgb2JqVHlwZURlZiAmJiAhb2JqVHlwZURlZltpXSAmJiBhZGRpdGlvbmFsUHJvcD09PWZhbHNlKXtcclxuXHRcdFx0XHRpZiAob3B0aW9ucy5maWx0ZXIpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBpbnN0YW5jZVtpXTtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRlcnJvcnMucHVzaCh7cHJvcGVydHk6cGF0aCxtZXNzYWdlOlwiVGhlIHByb3BlcnR5IFwiICsgaSArXHJcblx0XHRcdFx0XHRcdFwiIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBzY2hlbWEgYW5kIHRoZSBzY2hlbWEgZG9lcyBub3QgYWxsb3cgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXCJ9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIHJlcXVpcmVzID0gb2JqVHlwZURlZiAmJiBvYmpUeXBlRGVmW2ldICYmIG9ialR5cGVEZWZbaV0ucmVxdWlyZXM7XHJcblx0XHRcdGlmKHJlcXVpcmVzICYmICEocmVxdWlyZXMgaW4gaW5zdGFuY2UpKXtcclxuXHRcdFx0XHRlcnJvcnMucHVzaCh7cHJvcGVydHk6cGF0aCxtZXNzYWdlOlwidGhlIHByZXNlbmNlIG9mIHRoZSBwcm9wZXJ0eSBcIiArIGkgKyBcIiByZXF1aXJlcyB0aGF0IFwiICsgcmVxdWlyZXMgKyBcIiBhbHNvIGJlIHByZXNlbnRcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlID0gaW5zdGFuY2VbaV07XHJcblx0XHRcdGlmKGFkZGl0aW9uYWxQcm9wICYmICghKG9ialR5cGVEZWYgJiYgdHlwZW9mIG9ialR5cGVEZWYgPT0gJ29iamVjdCcpIHx8ICEoaSBpbiBvYmpUeXBlRGVmKSkpe1xyXG5cdFx0XHRcdGlmKG9wdGlvbnMuY29lcmNlKXtcclxuXHRcdFx0XHRcdHZhbHVlID0gaW5zdGFuY2VbaV0gPSBvcHRpb25zLmNvZXJjZSh2YWx1ZSwgYWRkaXRpb25hbFByb3ApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjaGVja1Byb3AodmFsdWUsYWRkaXRpb25hbFByb3AscGF0aCxpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZighX2NoYW5naW5nICYmIHZhbHVlICYmIHZhbHVlLiRzY2hlbWEpe1xyXG5cdFx0XHRcdGVycm9ycyA9IGVycm9ycy5jb25jYXQoY2hlY2tQcm9wKHZhbHVlLHZhbHVlLiRzY2hlbWEscGF0aCxpKSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBlcnJvcnM7XHJcblx0fVxyXG5cdGlmKHNjaGVtYSl7XHJcblx0XHRjaGVja1Byb3AoaW5zdGFuY2Usc2NoZW1hLCcnLF9jaGFuZ2luZyB8fCAnJyk7XHJcblx0fVxyXG5cdGlmKCFfY2hhbmdpbmcgJiYgaW5zdGFuY2UgJiYgaW5zdGFuY2UuJHNjaGVtYSl7XHJcblx0XHRjaGVja1Byb3AoaW5zdGFuY2UsaW5zdGFuY2UuJHNjaGVtYSwnJywnJyk7XHJcblx0fVxyXG5cdHJldHVybiB7dmFsaWQ6IWVycm9ycy5sZW5ndGgsZXJyb3JzOmVycm9yc307XHJcbn07XHJcbmV4cG9ydHMubXVzdEJlVmFsaWQgPSBmdW5jdGlvbihyZXN1bHQpe1xyXG5cdC8vXHRzdW1tYXJ5OlxyXG5cdC8vXHRcdFRoaXMgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IHRoZSByZXN1bHQgaXMgdmFsaWQgYW5kIHdpbGwgdGhyb3cgYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSBpZiBpdCBpcyBub3RcclxuXHQvLyByZXN1bHQ6IHRoZSByZXN1bHQgcmV0dXJuZWQgZnJvbSBjaGVja1Byb3BlcnR5Q2hhbmdlIG9yIHZhbGlkYXRlXHJcblx0aWYoIXJlc3VsdC52YWxpZCl7XHJcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKHJlc3VsdC5lcnJvcnMubWFwKGZ1bmN0aW9uKGVycm9yKXtyZXR1cm4gXCJmb3IgcHJvcGVydHkgXCIgKyBlcnJvci5wcm9wZXJ0eSArICc6ICcgKyBlcnJvci5tZXNzYWdlO30pLmpvaW4oXCIsIFxcblwiKSk7XHJcblx0fVxyXG59XHJcblxyXG5yZXR1cm4gZXhwb3J0cztcclxufSkpO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBwYXJzZSh1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICBsZXQgdjtcbiAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBQYXJzZSAjIyMjIyMjIy0uLi4uLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMCwgOCksIDE2KSkgPj4+IDI0O1xuICBhcnJbMV0gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsyXSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbM10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tIyMjIy0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzRdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDksIDEzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzVdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tIyMjIy0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls2XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTgpLCAxNikpID4+PiA4O1xuICBhcnJbN10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLSMjIyMtLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzhdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE5LCAyMyksIDE2KSkgPj4+IDg7XG4gIGFycls5XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tLi4uLi0jIyMjIyMjIyMjIyNcbiAgLy8gKFVzZSBcIi9cIiB0byBhdm9pZCAzMi1iaXQgdHJ1bmNhdGlvbiB3aGVuIGJpdC1zaGlmdGluZyBoaWdoLW9yZGVyIGJ5dGVzKVxuXG4gIGFyclsxMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMjQsIDM2KSwgMTYpKSAvIDB4MTAwMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTFdID0gdiAvIDB4MTAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzEyXSA9IHYgPj4+IDI0ICYgMHhmZjtcbiAgYXJyWzEzXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzE0XSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbMTVdID0gdiAmIDB4ZmY7XG4gIHJldHVybiBhcnI7XG59XG5cbnZhciBfZGVmYXVsdCA9IHBhcnNlO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcHVzaCA9IChkYXRhKSA9PiB7XG4gICAgd2luZG93Lmd0bURhdGFMYXllciA9IHdpbmRvdy5ndG1EYXRhTGF5ZXIgfHwgW107XG4gICAgd2luZG93Lmd0bURhdGFMYXllci5wdXNoKGRhdGEpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBwdXNoLFxufTtcbiIsImNvbnN0IHJlV29yZHMgPSAvW0EtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdP1thLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmXSsoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/KD89W1xceGFjXFx4YjFcXHhkN1xceGY3XFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4YmZcXHUyMDAwLVxcdTIwNmYgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBdfFtBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXXwkKXwoPzpbQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV18W15cXHVkODAwLVxcdWRmZmZcXHhhY1xceGIxXFx4ZDdcXHhmN1xceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmXFx1MjAwMC1cXHUyMDZmIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFxkK1xcdTI3MDAtXFx1MjdiZmEtelxceGRmLVxceGY2XFx4ZjgtXFx4ZmZBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXSkrKD86WyfigJldKD86RHxMTHxNfFJFfFN8VHxWRSkpPyg/PVtcXHhhY1xceGIxXFx4ZDdcXHhmN1xceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmXFx1MjAwMC1cXHUyMDZmIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXXxbQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV0oPzpbYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZl18W15cXHVkODAwLVxcdWRmZmZcXHhhY1xceGIxXFx4ZDdcXHhmN1xceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmXFx1MjAwMC1cXHUyMDZmIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFxkK1xcdTI3MDAtXFx1MjdiZmEtelxceGRmLVxceGY2XFx4ZjgtXFx4ZmZBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXSl8JCl8W0EtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdPyg/OlthLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmXXxbXlxcdWQ4MDAtXFx1ZGZmZlxceGFjXFx4YjFcXHhkN1xceGY3XFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4YmZcXHUyMDAwLVxcdTIwNmYgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXGQrXFx1MjcwMC1cXHUyN2JmYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZkEtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdKSsoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/fFtBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXSsoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/fFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXGRUSCkoPz1cXGJ8W2Etel9dKXxcXGQqKD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxkdGgpKD89XFxifFtBLVpfXSl8XFxkK3woPzpbXFx1MjcwMC1cXHUyN2JmXXwoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9fFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0pW1xcdWZlMGVcXHVmZTBmXT8oPzpbXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXXxcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0pPyg/OlxcdTIwMGQoPzpbXlxcdWQ4MDAtXFx1ZGZmZl18KD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfXxbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdKVtcXHVmZTBlXFx1ZmUwZl0/KD86W1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl18XFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdKT8pKi9nXG5cbmNvbnN0IHdvcmRzID0gKHN0cikgPT4gc3RyLm1hdGNoKHJlV29yZHMpIHx8IFtdXG5cbmNvbnN0IHVwcGVyRmlyc3QgPSAoc3RyKSA9PiBzdHJbMF0udG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKVxuXG5jb25zdCBqb2luID0gKHN0ciwgZCkgPT4gd29yZHMoc3RyKS5qb2luKGQpLnRvTG93ZXJDYXNlKClcblxuY29uc3QgY2FtZWxDYXNlID0gKHN0cikgPT5cbiAgd29yZHMoc3RyKS5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dCkgPT5cbiAgICAgIGAke2FjY30ke1xuICAgICAgICAhYWNjXG4gICAgICAgICAgPyBuZXh0LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICA6IG5leHRbMF0udG9VcHBlckNhc2UoKSArIG5leHQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKVxuICAgICAgfWAsXG4gICAgJycsXG4gIClcblxuY29uc3QgcGFzY2FsQ2FzZSA9IChzdHIpID0+IHVwcGVyRmlyc3QoY2FtZWxDYXNlKHN0cikpXG5cbmNvbnN0IHNuYWtlQ2FzZSA9IChzdHIpID0+IGpvaW4oc3RyLCAnXycpXG5cbmNvbnN0IGtlYmFiQ2FzZSA9IChzdHIpID0+IGpvaW4oc3RyLCAnLScpXG5cbmNvbnN0IHNlbnRlbmNlQ2FzZSA9IChzdHIpID0+IHVwcGVyRmlyc3Qoam9pbihzdHIsICcgJykpXG5cbmNvbnN0IHRpdGxlQ2FzZSA9IChzdHIpID0+IHdvcmRzKHN0cikubWFwKHVwcGVyRmlyc3QpLmpvaW4oJyAnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd29yZHMsXG4gIHVwcGVyRmlyc3QsXG4gIGNhbWVsQ2FzZSxcbiAgcGFzY2FsQ2FzZSxcbiAgc25ha2VDYXNlLFxuICBrZWJhYkNhc2UsXG4gIHNlbnRlbmNlQ2FzZSxcbiAgdGl0bGVDYXNlLFxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih7aWQsIHN2LCBkZWJ1ZyA9IGZhbHNlLCBub25jZSA9IG51bGx9KSB7XG5cdChmdW5jdGlvbihoLCBvLCB0LCBqLCBhLCByKSB7XG5cdFx0aC5oaiA9XG5cdFx0XHRoLmhqIHx8XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0KGguaGoucSA9IGguaGoucSB8fCBbXSkucHVzaChhcmd1bWVudHMpO1xuXHRcdFx0fTtcblx0XHRoLl9oalNldHRpbmdzID0geyBoamlkOiBpZCwgaGpzdjogc3YsIGhqRGVidWc6IGRlYnVnIH07XG5cdFx0aC5fc2NyaXB0UGF0aCA9IHQgKyBoLl9oalNldHRpbmdzLmhqaWQgKyBqICsgaC5faGpTZXR0aW5ncy5oanN2O1xuXHRcdGlmKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0J3NjcmlwdFtzcmMqPVwiJyArIGguX3NjcmlwdFBhdGggKyAnXCJdJ1xuXHRcdCkpe1xuXHRcdFx0YSA9IG8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcblx0XHRcdHIgPSBvLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdFx0aWYgKG5vbmNlKSByLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSk7XG5cdFx0XHRyLmFzeW5jID0gMTtcblx0XHRcdHIuc3JjID0gaC5fc2NyaXB0UGF0aDtcblx0XHRcdGEuYXBwZW5kQ2hpbGQocik7XG5cdFx0fVxuXHR9KSh3aW5kb3csIGRvY3VtZW50LCAnaHR0cHM6Ly9zdGF0aWMuaG90amFyLmNvbS9jL2hvdGphci0nLCAnLmpzP3N2PScpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWdleC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBfcmVnZXguZGVmYXVsdC50ZXN0KHV1aWQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2YWxpZGF0ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzNS5qc1wiKSk7XG5cbnZhciBfc2hhID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGExLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuY29uc3QgdjUgPSAoMCwgX3YuZGVmYXVsdCkoJ3Y1JywgMHg1MCwgX3NoYS5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IHY1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5jb25zdCByYW5kb21VVUlEID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnJhbmRvbVVVSUQgJiYgY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pO1xudmFyIF9kZWZhdWx0ID0ge1xuICByYW5kb21VVUlEXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vKiBVQVBhcnNlci5qcyB2MS4wLjQxXG4gICBDb3B5cmlnaHQgwqkgMjAxMi0yMDI1IEZhaXNhbCBTYWxtYW4gPGZAZmFpc2FsbWFuLmNvbT5cbiAgIE1JVCBMaWNlbnNlICovLypcbiAgIERldGVjdCBCcm93c2VyLCBFbmdpbmUsIE9TLCBDUFUsIGFuZCBEZXZpY2UgdHlwZS9tb2RlbCBmcm9tIFVzZXItQWdlbnQgZGF0YS5cbiAgIFN1cHBvcnRzIGJyb3dzZXIgJiBub2RlLmpzIGVudmlyb25tZW50LiBcbiAgIERlbW8gICA6IGh0dHBzOi8vZmFpc2FsbWFuLmdpdGh1Yi5pby91YS1wYXJzZXItanNcbiAgIFNvdXJjZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWlzYWxtYW4vdWEtcGFyc2VyLWpzICovXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuKGZ1bmN0aW9uICh3aW5kb3csIHVuZGVmaW5lZCkge1xuXG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb25zdGFudHNcbiAgICAvLy8vLy8vLy8vLy8vXG5cblxuICAgIHZhciBMSUJWRVJTSU9OICA9ICcxLjAuNDEnLFxuICAgICAgICBFTVBUWSAgICAgICA9ICcnLFxuICAgICAgICBVTktOT1dOICAgICA9ICc/JyxcbiAgICAgICAgRlVOQ19UWVBFICAgPSAnZnVuY3Rpb24nLFxuICAgICAgICBVTkRFRl9UWVBFICA9ICd1bmRlZmluZWQnLFxuICAgICAgICBPQkpfVFlQRSAgICA9ICdvYmplY3QnLFxuICAgICAgICBTVFJfVFlQRSAgICA9ICdzdHJpbmcnLFxuICAgICAgICBNQUpPUiAgICAgICA9ICdtYWpvcicsXG4gICAgICAgIE1PREVMICAgICAgID0gJ21vZGVsJyxcbiAgICAgICAgTkFNRSAgICAgICAgPSAnbmFtZScsXG4gICAgICAgIFRZUEUgICAgICAgID0gJ3R5cGUnLFxuICAgICAgICBWRU5ET1IgICAgICA9ICd2ZW5kb3InLFxuICAgICAgICBWRVJTSU9OICAgICA9ICd2ZXJzaW9uJyxcbiAgICAgICAgQVJDSElURUNUVVJFPSAnYXJjaGl0ZWN0dXJlJyxcbiAgICAgICAgQ09OU09MRSAgICAgPSAnY29uc29sZScsXG4gICAgICAgIE1PQklMRSAgICAgID0gJ21vYmlsZScsXG4gICAgICAgIFRBQkxFVCAgICAgID0gJ3RhYmxldCcsXG4gICAgICAgIFNNQVJUVFYgICAgID0gJ3NtYXJ0dHYnLFxuICAgICAgICBXRUFSQUJMRSAgICA9ICd3ZWFyYWJsZScsXG4gICAgICAgIEVNQkVEREVEICAgID0gJ2VtYmVkZGVkJyxcbiAgICAgICAgVUFfTUFYX0xFTkdUSCA9IDUwMDtcblxuICAgIHZhciBBTUFaT04gID0gJ0FtYXpvbicsXG4gICAgICAgIEFQUExFICAgPSAnQXBwbGUnLFxuICAgICAgICBBU1VTICAgID0gJ0FTVVMnLFxuICAgICAgICBCTEFDS0JFUlJZID0gJ0JsYWNrQmVycnknLFxuICAgICAgICBCUk9XU0VSID0gJ0Jyb3dzZXInLFxuICAgICAgICBDSFJPTUUgID0gJ0Nocm9tZScsXG4gICAgICAgIEVER0UgICAgPSAnRWRnZScsXG4gICAgICAgIEZJUkVGT1ggPSAnRmlyZWZveCcsXG4gICAgICAgIEdPT0dMRSAgPSAnR29vZ2xlJyxcbiAgICAgICAgSE9OT1IgICA9ICdIb25vcicsXG4gICAgICAgIEhVQVdFSSAgPSAnSHVhd2VpJyxcbiAgICAgICAgTEVOT1ZPICA9ICdMZW5vdm8nLFxuICAgICAgICBMRyAgICAgID0gJ0xHJyxcbiAgICAgICAgTUlDUk9TT0ZUID0gJ01pY3Jvc29mdCcsXG4gICAgICAgIE1PVE9ST0xBICA9ICdNb3Rvcm9sYScsXG4gICAgICAgIE5WSURJQSAgPSAnTnZpZGlhJyxcbiAgICAgICAgT05FUExVUyA9ICdPbmVQbHVzJyxcbiAgICAgICAgT1BFUkEgICA9ICdPcGVyYScsXG4gICAgICAgIE9QUE8gICAgPSAnT1BQTycsXG4gICAgICAgIFNBTVNVTkcgPSAnU2Ftc3VuZycsXG4gICAgICAgIFNIQVJQICAgPSAnU2hhcnAnLFxuICAgICAgICBTT05ZICAgID0gJ1NvbnknLFxuICAgICAgICBYSUFPTUkgID0gJ1hpYW9taScsXG4gICAgICAgIFpFQlJBICAgPSAnWmVicmEnLFxuICAgICAgICBGQUNFQk9PSyAgICA9ICdGYWNlYm9vaycsXG4gICAgICAgIENIUk9NSVVNX09TID0gJ0Nocm9taXVtIE9TJyxcbiAgICAgICAgTUFDX09TICA9ICdNYWMgT1MnLFxuICAgICAgICBTVUZGSVhfQlJPV1NFUiA9ICcgQnJvd3Nlcic7XG5cbiAgICAvLy8vLy8vLy8vL1xuICAgIC8vIEhlbHBlclxuICAgIC8vLy8vLy8vLy9cblxuICAgIHZhciBleHRlbmQgPSBmdW5jdGlvbiAocmVnZXhlcywgZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgdmFyIG1lcmdlZFJlZ2V4ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gcmVnZXhlcykge1xuICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zW2ldICYmIGV4dGVuc2lvbnNbaV0ubGVuZ3RoICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBtZXJnZWRSZWdleGVzW2ldID0gZXh0ZW5zaW9uc1tpXS5jb25jYXQocmVnZXhlc1tpXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkUmVnZXhlc1tpXSA9IHJlZ2V4ZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlZFJlZ2V4ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcml6ZSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgICAgICAgIHZhciBlbnVtcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGVudW1zW2FycltpXS50b1VwcGVyQ2FzZSgpXSA9IGFycltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbnVtcztcbiAgICAgICAgfSxcbiAgICAgICAgaGFzID0gZnVuY3Rpb24gKHN0cjEsIHN0cjIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygc3RyMSA9PT0gU1RSX1RZUEUgPyBsb3dlcml6ZShzdHIyKS5pbmRleE9mKGxvd2VyaXplKHN0cjEpKSAhPT0gLTEgOiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgbG93ZXJpemUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1ham9yaXplID0gZnVuY3Rpb24gKHZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YodmVyc2lvbikgPT09IFNUUl9UWVBFID8gdmVyc2lvbi5yZXBsYWNlKC9bXlxcZFxcLl0vZywgRU1QVFkpLnNwbGl0KCcuJylbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHRyaW0gPSBmdW5jdGlvbiAoc3RyLCBsZW4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RyKSA9PT0gU1RSX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcc1xccyovLCBFTVBUWSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZihsZW4pID09PSBVTkRFRl9UWVBFID8gc3RyIDogc3RyLnN1YnN0cmluZygwLCBVQV9NQVhfTEVOR1RIKTtcbiAgICAgICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gTWFwIGhlbHBlclxuICAgIC8vLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgcmd4TWFwcGVyID0gZnVuY3Rpb24gKHVhLCBhcnJheXMpIHtcblxuICAgICAgICAgICAgdmFyIGkgPSAwLCBqLCBrLCBwLCBxLCBtYXRjaGVzLCBtYXRjaDtcblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCByZWdleGVzIG1hcHNcbiAgICAgICAgICAgIHdoaWxlIChpIDwgYXJyYXlzLmxlbmd0aCAmJiAhbWF0Y2hlcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZ2V4ID0gYXJyYXlzW2ldLCAgICAgICAvLyBldmVuIHNlcXVlbmNlICgwLDIsNCwuLilcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSBhcnJheXNbaSArIDFdOyAgIC8vIG9kZCBzZXF1ZW5jZSAoMSwzLDUsLi4pXG4gICAgICAgICAgICAgICAgaiA9IGsgPSAwO1xuXG4gICAgICAgICAgICAgICAgLy8gdHJ5IG1hdGNoaW5nIHVhc3RyaW5nIHdpdGggcmVnZXhlc1xuICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgcmVnZXgubGVuZ3RoICYmICFtYXRjaGVzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdleFtqXSkgeyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gcmVnZXhbaisrXS5leGVjKHVhKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoISFtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNbKytrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gcHJvcHNbcF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZ2l2ZW4gcHJvcGVydHkgaXMgYWN0dWFsbHkgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHEgPT09IE9CSl9UWVBFICYmIHEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcVsxXSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ24gbW9kaWZpZWQgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXS5jYWxsKHRoaXMsIG1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWduIGdpdmVuIHZhbHVlLCBpZ25vcmUgcmVnZXggbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciBmdW5jdGlvbiBvciByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBxWzFdID09PSBGVU5DX1RZUEUgJiYgIShxWzFdLmV4ZWMgJiYgcVsxXS50ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwgZnVuY3Rpb24gKHVzdWFsbHkgc3RyaW5nIG1hcHBlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzFdLmNhbGwodGhpcywgbWF0Y2gsIHFbMl0pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW5pdGl6ZSBtYXRjaCB1c2luZyBnaXZlbiByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcVswXV0gPSBtYXRjaCA/IG1hdGNoLnJlcGxhY2UocVsxXSwgcVsyXSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzNdLmNhbGwodGhpcywgbWF0Y2gucmVwbGFjZShxWzFdLCBxWzJdKSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3FdID0gbWF0Y2ggPyBtYXRjaCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHN0ck1hcHBlciA9IGZ1bmN0aW9uIChzdHIsIG1hcCkge1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIG1hcCkge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgdmFsdWUgaXMgYXJyYXlcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hcFtpXSA9PT0gT0JKX1RZUEUgJiYgbWFwW2ldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXBbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXMobWFwW2ldW2pdLCBzdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpID09PSBVTktOT1dOKSA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhcyhtYXBbaV0sIHN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpID09PSBVTktOT1dOKSA/IHVuZGVmaW5lZCA6IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hcC5oYXNPd25Qcm9wZXJ0eSgnKicpID8gbWFwWycqJ10gOiBzdHI7XG4gICAgfTtcblxuICAgIC8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFN0cmluZyBtYXBcbiAgICAvLy8vLy8vLy8vLy8vL1xuXG4gICAgLy8gU2FmYXJpIDwgMy4wXG4gICAgdmFyIG9sZFNhZmFyaU1hcCA9IHtcbiAgICAgICAgICAgICcxLjAnICAgOiAnLzgnLFxuICAgICAgICAgICAgJzEuMicgICA6ICcvMScsXG4gICAgICAgICAgICAnMS4zJyAgIDogJy8zJyxcbiAgICAgICAgICAgICcyLjAnICAgOiAnLzQxMicsXG4gICAgICAgICAgICAnMi4wLjInIDogJy80MTYnLFxuICAgICAgICAgICAgJzIuMC4zJyA6ICcvNDE3JyxcbiAgICAgICAgICAgICcyLjAuNCcgOiAnLzQxOScsXG4gICAgICAgICAgICAnPycgICAgIDogJy8nXG4gICAgICAgIH0sXG4gICAgICAgIHdpbmRvd3NWZXJzaW9uTWFwID0ge1xuICAgICAgICAgICAgJ01FJyAgICAgICAgOiAnNC45MCcsXG4gICAgICAgICAgICAnTlQgMy4xMScgICA6ICdOVDMuNTEnLFxuICAgICAgICAgICAgJ05UIDQuMCcgICAgOiAnTlQ0LjAnLFxuICAgICAgICAgICAgJzIwMDAnICAgICAgOiAnTlQgNS4wJyxcbiAgICAgICAgICAgICdYUCcgICAgICAgIDogWydOVCA1LjEnLCAnTlQgNS4yJ10sXG4gICAgICAgICAgICAnVmlzdGEnICAgICA6ICdOVCA2LjAnLFxuICAgICAgICAgICAgJzcnICAgICAgICAgOiAnTlQgNi4xJyxcbiAgICAgICAgICAgICc4JyAgICAgICAgIDogJ05UIDYuMicsXG4gICAgICAgICAgICAnOC4xJyAgICAgICA6ICdOVCA2LjMnLFxuICAgICAgICAgICAgJzEwJyAgICAgICAgOiBbJ05UIDYuNCcsICdOVCAxMC4wJ10sXG4gICAgICAgICAgICAnUlQnICAgICAgICA6ICdBUk0nXG4gICAgfTtcblxuICAgIC8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUmVnZXggbWFwXG4gICAgLy8vLy8vLy8vLy8vL1xuXG4gICAgdmFyIHJlZ2V4ZXMgPSB7XG5cbiAgICAgICAgYnJvd3NlciA6IFtbXG5cbiAgICAgICAgICAgIC9cXGIoPzpjcm1vfGNyaW9zKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENocm9tZSBmb3IgQW5kcm9pZC9pT1NcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ0Nocm9tZSddXSwgW1xuICAgICAgICAgICAgL2VkZyg/OmV8aW9zfGEpP1xcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaWNyb3NvZnQgRWRnZVxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnRWRnZSddXSwgW1xuXG4gICAgICAgICAgICAvLyBQcmVzdG8gYmFzZWRcbiAgICAgICAgICAgIC8ob3BlcmEgbWluaSlcXC8oWy1cXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmEgTWluaVxuICAgICAgICAgICAgLyhvcGVyYSBbbW9iaWxldGFiXXszLDZ9KVxcYi4rdmVyc2lvblxcLyhbLVxcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgLy8gT3BlcmEgTW9iaS9UYWJsZXRcbiAgICAgICAgICAgIC8ob3BlcmEpKD86Lit2ZXJzaW9uXFwvfFtcXC8gXSspKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC9vcGlvc1tcXC8gXSsoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmEgbWluaSBvbiBpcGhvbmUgPj0gOC4wXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgTWluaSddXSwgW1xuICAgICAgICAgICAgL1xcYm9wKD86cmcpP3hcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmEgR1hcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgT1BFUkErJyBHWCddXSwgW1xuICAgICAgICAgICAgL1xcYm9wclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmEgV2Via2l0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBXV0sIFtcblxuICAgICAgICAgICAgLy8gTWl4ZWRcbiAgICAgICAgICAgIC9cXGJiW2FpXSpkKD86dWhkfFt1Yl0qW2Fla29wcnN3eF17NSw2fSlbXFwvIF0/KFtcXHdcXC5dKykvaSAgICAgICAgICAgIC8vIEJhaWR1XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdCYWlkdSddXSwgW1xuICAgICAgICAgICAgL1xcYig/Om14YnJvd3NlcnxteGlvc3xteWllMilcXC8/KFstXFx3XFwuXSopXFxiL2kgICAgICAgICAgICAgICAgICAgICAgIC8vIE1heHRob25cbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ01heHRob24nXV0sIFtcbiAgICAgICAgICAgIC8oa2luZGxlKVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2luZGxlXG4gICAgICAgICAgICAvKGx1bmFzY2FwZXxtYXh0aG9ufG5ldGZyb250fGphc21pbmV8YmxhemVyfHNsZWlwbmlyKVtcXC8gXT8oW1xcd1xcLl0qKS9pLCAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMdW5hc2NhcGUvTWF4dGhvbi9OZXRmcm9udC9KYXNtaW5lL0JsYXplci9TbGVpcG5pclxuICAgICAgICAgICAgLy8gVHJpZGVudCBiYXNlZFxuICAgICAgICAgICAgLyhhdmFudHxpZW1vYmlsZXxzbGltKD86YnJvd3Nlcnxib2F0fGpldCkpW1xcLyBdPyhbXFxkXFwuXSopL2ksICAgICAgICAvLyBBdmFudC9JRU1vYmlsZS9TbGltQnJvd3Nlci9TbGltQm9hdC9TbGltamV0XG4gICAgICAgICAgICAvKD86bXN8XFwoKShpZSkgKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyXG5cbiAgICAgICAgICAgIC8vIEJsaW5rL1dlYmtpdC9LSFRNTCBiYXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmxvY2svUm9ja01lbHQvTWlkb3JpL0VwaXBoYW55L1NpbGsvU2t5ZmlyZS9Cb2x0L0lyb24vSXJpZGl1bS9QaGFudG9tSlMvQm93c2VyL1F1cFppbGxhL0ZhbGtvblxuICAgICAgICAgICAgLyhmbG9ja3xyb2NrbWVsdHxtaWRvcml8ZXBpcGhhbnl8c2lsa3xza3lmaXJlfG92aWJyb3dzZXJ8Ym9sdHxpcm9ufHZpdmFsZGl8aXJpZGl1bXxwaGFudG9tanN8Ym93c2VyfHF1cHppbGxhfGZhbGtvbnxyZWtvbnF8cHVmZmlufGJyYXZlfHdoYWxlKD8hLituYXZlcil8cXFicm93c2VybGl0ZXxkdWNrZHVja2dvfGtsYXJ8aGVsaW98KD89Y29tb2RvXyk/ZHJhZ29uKVxcLyhbLVxcd1xcLl0rKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWtvbnEvUHVmZmluL0JyYXZlL1doYWxlL1FRQnJvd3NlckxpdGUvUVEvL1ZpdmFsZGkvRHVja0R1Y2tHby9LbGFyL0hlbGlvL0RyYWdvblxuICAgICAgICAgICAgLyhoZXl0YXB8b3ZpfDExNSlicm93c2VyXFwvKFtcXGRcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIZXlUYXAvT3ZpLzExNVxuICAgICAgICAgICAgLyh3ZWlibylfXyhbXFxkXFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlaWJvXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC9xdWFyayg/OnBjKT9cXC8oWy1cXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhcmtcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1F1YXJrJ11dLCBbXG4gICAgICAgICAgICAvXFxiZGRnXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEdWNrRHVja0dvXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdEdWNrRHVja0dvJ11dLCBbXG4gICAgICAgICAgICAvKD86XFxidWM/ID9icm93c2VyfCg/Omp1Yy4rKXVjd2ViKVtcXC8gXT8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAvLyBVQ0Jyb3dzZXJcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1VDJytCUk9XU0VSXV0sIFtcbiAgICAgICAgICAgIC9taWNyb20uK1xcYnFiY29yZVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlQ2hhdCBEZXNrdG9wIGZvciBXaW5kb3dzIEJ1aWx0LWluIEJyb3dzZXJcbiAgICAgICAgICAgIC9cXGJxYmNvcmVcXC8oW1xcd1xcLl0rKS4rbWljcm9tL2ksXG4gICAgICAgICAgICAvbWljcm9tZXNzZW5nZXJcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlQ2hhdFxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnV2VDaGF0J11dLCBbXG4gICAgICAgICAgICAva29ucXVlcm9yXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtvbnF1ZXJvclxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnS29ucXVlcm9yJ11dLCBbXG4gICAgICAgICAgICAvdHJpZGVudC4rcnZbOiBdKFtcXHdcXC5dezEsOX0pXFxiLitsaWtlIGdlY2tvL2kgICAgICAgICAgICAgICAgICAgICAgIC8vIElFMTFcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ0lFJ11dLCBbXG4gICAgICAgICAgICAveWEoPzpzZWFyY2gpP2Jyb3dzZXJcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFlhbmRleFxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnWWFuZGV4J11dLCBbXG4gICAgICAgICAgICAvc2xicm93c2VyXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNtYXJ0IExlbm92byBCcm93c2VyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdTbWFydCBMZW5vdm8gJytCUk9XU0VSXV0sIFtcbiAgICAgICAgICAgIC8oYXZhc3R8YXZnKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZhc3QvQVZHIFNlY3VyZSBCcm93c2VyXG4gICAgICAgICAgICBdLCBbW05BTUUsIC8oLispLywgJyQxIFNlY3VyZSAnK0JST1dTRVJdLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgL1xcYmZvY3VzXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCBGb2N1c1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YKycgRm9jdXMnXV0sIFtcbiAgICAgICAgICAgIC9cXGJvcHRcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIFRvdWNoXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgVG91Y2gnXV0sIFtcbiAgICAgICAgICAgIC9jb2NfY29jXFx3K1xcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvYyBDb2MgQnJvd3NlclxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnQ29jIENvYyddXSwgW1xuICAgICAgICAgICAgL2RvbGZpblxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2xwaGluXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdEb2xwaGluJ11dLCBbXG4gICAgICAgICAgICAvY29hc3RcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIENvYXN0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIE9QRVJBKycgQ29hc3QnXV0sIFtcbiAgICAgICAgICAgIC9taXVpYnJvd3NlclxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTUlVSSBCcm93c2VyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdNSVVJJyArIFNVRkZJWF9CUk9XU0VSXV0sIFtcbiAgICAgICAgICAgIC9meGlvc1xcLyhbXFx3XFwuLV0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCBmb3IgaU9TXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIEZJUkVGT1hdXSwgW1xuICAgICAgICAgICAgL1xcYnFpaG9vYnJvd3NlclxcLz8oW1xcd1xcLl0qKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzYwXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICczNjAnXV0sIFtcbiAgICAgICAgICAgIC9cXGIocXEpXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFFRXG4gICAgICAgICAgICBdLCBbW05BTUUsIC8oLispLywgJyQxQnJvd3NlciddLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgLyhvY3VsdXN8c2FpbGZpc2h8aHVhd2VpfHZpdm98cGljbylicm93c2VyXFwvKFtcXHdcXC5dKykvaVxuICAgICAgICAgICAgXSwgW1tOQU1FLCAvKC4rKS8sICckMScgKyBTVUZGSVhfQlJPV1NFUl0sIFZFUlNJT05dLCBbICAgICAgICAgICAgICAvLyBPY3VsdXMvU2FpbGZpc2gvSHVhd2VpQnJvd3Nlci9WaXZvQnJvd3Nlci9QaWNvQnJvd3NlclxuICAgICAgICAgICAgL3NhbXN1bmdicm93c2VyXFwvKFtcXHdcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1zdW5nIEludGVybmV0XG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIFNBTVNVTkcgKyAnIEludGVybmV0J11dLCBbXG4gICAgICAgICAgICAvbWV0YXNyW1xcLyBdPyhbXFxkXFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvZ291IEV4cGxvcmVyXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdTb2dvdSBFeHBsb3JlciddXSwgW1xuICAgICAgICAgICAgLyhzb2dvdSltb1xcdytcXC8oW1xcZFxcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU29nb3UgTW9iaWxlXG4gICAgICAgICAgICBdLCBbW05BTUUsICdTb2dvdSBNb2JpbGUnXSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8oZWxlY3Ryb24pXFwvKFtcXHdcXC5dKykgc2FmYXJpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWxlY3Ryb24tYmFzZWQgQXBwXG4gICAgICAgICAgICAvKHRlc2xhKSg/OiBxdGNhcmJyb3dzZXJ8XFwvKDIwXFxkXFxkXFwuWy1cXHdcXC5dKykpL2ksICAgICAgICAgICAgICAgICAgIC8vIFRlc2xhXG4gICAgICAgICAgICAvbT8ocXFicm93c2VyfDIzNDUoPz1icm93c2VyfGNocm9tZXxleHBsb3JlcikpXFx3KltcXC8gXT92PyhbXFx3XFwuXSspL2kgICAvLyBRUS8yMzQ1XG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8obGJicm93c2VyfHJla29ucSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGllQmFvIEJyb3dzZXIvUmVrb25xXG4gICAgICAgICAgICAvXFxbKGxpbmtlZGluKWFwcFxcXS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlua2VkSW4gQXBwIGZvciBpT1MgJiBBbmRyb2lkXG4gICAgICAgICAgICBdLCBbTkFNRV0sIFtcbiAgICAgICAgICAgIC9vbWVcXC8oW1xcd1xcLl0rKSBcXHcqID8oaXJvbikgc2FmL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElyb25cbiAgICAgICAgICAgIC9vbWVcXC8oW1xcd1xcLl0rKS4rcWlodSAoMzYwKVtlc11lL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzYwXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgTkFNRV0sIFtcblxuICAgICAgICAgICAgLy8gV2ViVmlld1xuICAgICAgICAgICAgLygoPzpmYmFuXFwvZmJpb3N8ZmJfaWFiXFwvZmI0YSkoPyEuK2ZiYXYpfDtmYmF2XFwvKFtcXHdcXC5dKyk7KS9pICAgICAgIC8vIEZhY2Vib29rIEFwcCBmb3IgaU9TICYgQW5kcm9pZFxuICAgICAgICAgICAgXSwgW1tOQU1FLCBGQUNFQk9PS10sIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvKEtsYXJuYSlcXC8oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtsYXJuYSBTaG9wcGluZyBCcm93c2VyIGZvciBpT1MgJiBBbmRyb2lkXG4gICAgICAgICAgICAvKGtha2FvKD86dGFsa3xzdG9yeSkpW1xcLyBdKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtha2FvIEFwcFxuICAgICAgICAgICAgLyhuYXZlcilcXCguKj8oXFxkK1xcLltcXHdcXC5dKykuKlxcKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOYXZlciBJbkFwcFxuICAgICAgICAgICAgLyhkYXVtKWFwcHNbXFwvIF0oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXVtIEFwcFxuICAgICAgICAgICAgL3NhZmFyaSAobGluZSlcXC8oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5lIEFwcCBmb3IgaU9TXG4gICAgICAgICAgICAvXFxiKGxpbmUpXFwvKFtcXHdcXC5dKylcXC9pYWIvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGluZSBBcHAgZm9yIEFuZHJvaWRcbiAgICAgICAgICAgIC8oYWxpcGF5KWNsaWVudFxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxpcGF5XG4gICAgICAgICAgICAvKHR3aXR0ZXIpKD86YW5kfCBmLitlXFwvKFtcXHdcXC5dKykpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR3aXR0ZXJcbiAgICAgICAgICAgIC8oY2hyb21pdW18aW5zdGFncmFtfHNuYXBjaGF0KVtcXC8gXShbLVxcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21pdW0vSW5zdGFncmFtL1NuYXBjaGF0XG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC9cXGJnc2FcXC8oW1xcd1xcLl0rKSAuKnNhZmFyaVxcLy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgU2VhcmNoIEFwcGxpYW5jZSBvbiBpT1NcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ0dTQSddXSwgW1xuICAgICAgICAgICAgL211c2ljYWxfbHkoPzouK2FwcF8/dmVyc2lvblxcL3xfKShbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaWtUb2tcbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBbTkFNRSwgJ1Rpa1RvayddXSwgW1xuXG4gICAgICAgICAgICAvaGVhZGxlc3NjaHJvbWUoPzpcXC8oW1xcd1xcLl0rKXwgKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENocm9tZSBIZWFkbGVzc1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBDSFJPTUUrJyBIZWFkbGVzcyddXSwgW1xuXG4gICAgICAgICAgICAvIHd2XFwpLisoY2hyb21lKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWUgV2ViVmlld1xuICAgICAgICAgICAgXSwgW1tOQU1FLCBDSFJPTUUrJyBXZWJWaWV3J10sIFZFUlNJT05dLCBbXG5cbiAgICAgICAgICAgIC9kcm9pZC4rIHZlcnNpb25cXC8oW1xcd1xcLl0rKVxcYi4rKD86bW9iaWxlIHNhZmFyaXxzYWZhcmkpL2kgICAgICAgICAgIC8vIEFuZHJvaWQgQnJvd3NlclxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnQW5kcm9pZCAnK0JST1dTRVJdXSwgW1xuXG4gICAgICAgICAgICAvKGNocm9tZXxvbW5pd2VifGFyb3JhfFt0aXplbm9rYV17NX0gP2Jyb3dzZXIpXFwvdj8oW1xcd1xcLl0rKS9pICAgICAgIC8vIENocm9tZS9PbW5pV2ViL0Fyb3JhL1RpemVuL05va2lhXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgL3ZlcnNpb25cXC8oW1xcd1xcLlxcLF0rKSAuKm1vYmlsZVxcL1xcdysgKHNhZmFyaSkvaSAgICAgICAgICAgICAgICAgICAgICAvLyBNb2JpbGUgU2FmYXJpXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdNb2JpbGUgU2FmYXJpJ11dLCBbXG4gICAgICAgICAgICAvdmVyc2lvblxcLyhbXFx3KFxcLnxcXCwpXSspIC4qKG1vYmlsZSA/c2FmYXJpfHNhZmFyaSkvaSAgICAgICAgICAgICAgICAvLyBTYWZhcmkgJiBTYWZhcmkgTW9iaWxlXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgTkFNRV0sIFtcbiAgICAgICAgICAgIC93ZWJraXQuKz8obW9iaWxlID9zYWZhcml8c2FmYXJpKShcXC9bXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIDwgMy4wXG4gICAgICAgICAgICBdLCBbTkFNRSwgW1ZFUlNJT04sIHN0ck1hcHBlciwgb2xkU2FmYXJpTWFwXV0sIFtcblxuICAgICAgICAgICAgLyh3ZWJraXR8a2h0bWwpXFwvKFtcXHdcXC5dKykvaVxuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG5cbiAgICAgICAgICAgIC8vIEdlY2tvIGJhc2VkXG4gICAgICAgICAgICAvKG5hdmlnYXRvcnxuZXRzY2FwZVxcZD8pXFwvKFstXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXRzY2FwZVxuICAgICAgICAgICAgXSwgW1tOQU1FLCAnTmV0c2NhcGUnXSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8od29sdmljfGxpYnJld29sZilcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV29sdmljL0xpYnJlV29sZlxuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvbW9iaWxlIHZyOyBydjooW1xcd1xcLl0rKVxcKS4rZmlyZWZveC9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggUmVhbGl0eVxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBGSVJFRk9YKycgUmVhbGl0eSddXSwgW1xuICAgICAgICAgICAgL2VraW9oZi4rKGZsb3cpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbG93XG4gICAgICAgICAgICAvKHN3aWZ0Zm94KS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN3aWZ0Zm94XG4gICAgICAgICAgICAvKGljZWRyYWdvbnxpY2V3ZWFzZWx8Y2FtaW5vfGNoaW1lcmF8ZmVubmVjfG1hZW1vIGJyb3dzZXJ8bWluaW1vfGNvbmtlcm9yKVtcXC8gXT8oW1xcd1xcLlxcK10rKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJY2VEcmFnb24vSWNld2Vhc2VsL0NhbWluby9DaGltZXJhL0Zlbm5lYy9NYWVtby9NaW5pbW8vQ29ua2Vyb3JcbiAgICAgICAgICAgIC8oc2VhbW9ua2V5fGstbWVsZW9ufGljZWNhdHxpY2VhcGV8ZmlyZWJpcmR8cGhvZW5peHxwYWxlbW9vbnxiYXNpbGlza3x3YXRlcmZveClcXC8oWy1cXHdcXC5dKykkL2ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVmb3gvU2VhTW9ua2V5L0stTWVsZW9uL0ljZUNhdC9JY2VBcGUvRmlyZWJpcmQvUGhvZW5peFxuICAgICAgICAgICAgLyhmaXJlZm94KVxcLyhbXFx3XFwuXSspL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlciBGaXJlZm94LWJhc2VkXG4gICAgICAgICAgICAvKG1vemlsbGEpXFwvKFtcXHdcXC5dKykgLitydlxcOi4rZ2Vja29cXC9cXGQrL2ksICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vemlsbGFcblxuICAgICAgICAgICAgLy8gT3RoZXJcbiAgICAgICAgICAgIC8oYW1heWF8ZGlsbG98ZG9yaXN8aWNhYnxsYWR5YmlyZHxseW54fG1vc2FpY3xuZXRzdXJmfG9iaWdvfHBvbGFyaXN8dzNtfCg/OmdvfGljZXx1cClbXFwuIF0/YnJvd3NlcilbLVxcLyBdP3Y/KFtcXHdcXC5dKykvaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9sYXJpcy9MeW54L0RpbGxvL2lDYWIvRG9yaXMvQW1heWEvdzNtL05ldFN1cmYvT2JpZ28vTW9zYWljL0dvL0lDRS9VUC5Ccm93c2VyL0xhZHliaXJkXG4gICAgICAgICAgICAvXFxiKGxpbmtzKSBcXCgoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5rc1xuICAgICAgICAgICAgXSwgW05BTUUsIFtWRVJTSU9OLCAvXy9nLCAnLiddXSwgW1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKGNvYmFsdClcXC8oW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvYmFsdFxuICAgICAgICAgICAgXSwgW05BTUUsIFtWRVJTSU9OLCAvbWFzdGVyLnxsdHMuLywgXCJcIl1dXG4gICAgICAgIF0sXG5cbiAgICAgICAgY3B1IDogW1tcblxuICAgICAgICAgICAgL1xcYigoYW1kfHh8eDg2Wy1fXT98d293fHdpbik2NClcXGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFNRDY0ICh4NjQpXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ2FtZDY0J11dLCBbXG5cbiAgICAgICAgICAgIC8oaWEzMig/PTspKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUEzMiAocXVpY2t0aW1lKVxuICAgICAgICAgICAgL1xcYigoaVszNDZdfHgpODYpKHBjKT9cXGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElBMzIgKHg4NilcbiAgICAgICAgICAgIF0sIFtbQVJDSElURUNUVVJFLCAnaWEzMiddXSwgW1xuXG4gICAgICAgICAgICAvXFxiKGFhcmNoNjR8YXJtKHY/Wzg5XWU/bD98Xz82NCkpXFxiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQVJNNjRcbiAgICAgICAgICAgIF0sIFtbQVJDSElURUNUVVJFLCAnYXJtNjQnXV0sIFtcblxuICAgICAgICAgICAgL1xcYihhcm0odls2N10pP2h0P24/W2ZsXXA/KVxcYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFSTUhGXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgJ2FybWhmJ11dLCBbXG5cbiAgICAgICAgICAgIC8vIFBvY2tldFBDIG1pc3Rha2VubHkgaWRlbnRpZmllZCBhcyBQb3dlclBDXG4gICAgICAgICAgICAvKCAoY2V8bW9iaWxlKTsgcHBjO3xcXC9bXFx3XFwuXSthcm1cXGIpL2lcbiAgICAgICAgICAgIF0sIFtbQVJDSElURUNUVVJFLCAnYXJtJ11dLCBbXG5cbiAgICAgICAgICAgIC8oKHBwY3xwb3dlcnBjKSg2NCk/KSggbWFjfDt8XFwpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBvd2VyUENcbiAgICAgICAgICAgIF0sIFtbQVJDSElURUNUVVJFLCAvb3dlci8sIEVNUFRZLCBsb3dlcml6ZV1dLCBbXG5cbiAgICAgICAgICAgIC8gc3VuNFxcd1s7XFwpXS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTUEFSQ1xuICAgICAgICAgICAgXSwgW1tBUkNISVRFQ1RVUkUsICdzcGFyYyddXSwgW1xuXG4gICAgICAgICAgICAvXFxiKGF2cjMyfGlhNjQoPz07KXw2OGsoPz1cXCkpfFxcYmFybSg/PXYoWzEtN118WzUtN10xKWw/fDt8ZWFiaSl8KGlyaXh8bWlwc3xzcGFyYykoNjQpP1xcYnxwYS1yaXNjKS9pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElBNjQsIDY4SywgQVJNLzY0LCBBVlIvMzIsIElSSVgvNjQsIE1JUFMvNjQsIFNQQVJDLzY0LCBQQS1SSVNDXG4gICAgICAgICAgICBdLCBbW0FSQ0hJVEVDVFVSRSwgbG93ZXJpemVdXVxuICAgICAgICBdLFxuXG4gICAgICAgIGRldmljZSA6IFtbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBNT0JJTEVTICYgVEFCTEVUU1xuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgICAvLyBTYW1zdW5nXG4gICAgICAgICAgICAvXFxiKHNjaC1pWzg5XTBcXGR8c2h3LW0zODBzfHNtLVtwdHhdXFx3ezIsNH18Z3QtW3BuXVxcZHsyLDR9fHNnaC10OFs1Nl05fG5leHVzIDEwKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNBTVNVTkddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoKD86c1tjZ3BdaHxndHxzbSktKD8hW2xyXSlcXHcrfHNjW2ctXT9bXFxkXSthP3xnYWxheHkgbmV4dXMpL2ksXG4gICAgICAgICAgICAvc2Ftc3VuZ1stIF0oKD8hc20tW2xyXSlbLVxcd10rKS9pLFxuICAgICAgICAgICAgL3NlYy0oc2doXFx3KykvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBTQU1TVU5HXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIEFwcGxlXG4gICAgICAgICAgICAvKD86XFwvfFxcKCkoaXAoPzpob25lfG9kKVtcXHcsIF0qKSg/OlxcL3w7KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpUG9kL2lQaG9uZVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBUFBMRV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcKChpcGFkKTtbLVxcd1xcKSw7IF0rYXBwbGUvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpUGFkXG4gICAgICAgICAgICAvYXBwbGVjb3JlbWVkaWFcXC9bXFx3XFwuXSsgXFwoKGlwYWQpL2ksXG4gICAgICAgICAgICAvXFxiKGlwYWQpXFxkXFxkPyxcXGRcXGQ/WztcXF1dLitpb3MvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBUFBMRV0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyhtYWNpbnRvc2gpOy9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFQUExFXV0sIFtcblxuICAgICAgICAgICAgLy8gU2hhcnBcbiAgICAgICAgICAgIC9cXGIoc2gtP1thbHR2el0/XFxkXFxkW2EtZWttXT8pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU0hBUlBdLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gSG9ub3JcbiAgICAgICAgICAgIC9cXGIoKD86YnJ0fGVsbnxoZXkyP3xnZGl8amRuKS1hP1tsbnddMDl8KD86YWdbcm1dMz98amRuMnxrb2IyKS1hP1tsd10wWzA5XWhuKSg/OiBidWl8XFwpfDspL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgSE9OT1JdLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9ob25vcihbLVxcdyBdKylbO1xcKV0vaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBIT05PUl0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBIdWF3ZWlcbiAgICAgICAgICAgIC9cXGIoKD86YWdbcnNdWzIzNTZdP2s/fGJhaFsyMzRdP3xiZ1syb118YnRba3ZdfGNtcnxjcG58ZGJbcnldMj98amRuMnxnb3R8a29iMj9rP3xtb258cGNlfHNjbXxzaHQ/fFt0d11ncnx2cmQpLVthZF0/W2x3XVswMTI1XVswOV1iP3w2MDVod3xiZzItdTAzfCg/OmdlbXxmZHJ8bTJ8cGxlfHQxKS1bN2FdMFsxLTRdW2x1XXx0MS1hMlsxM11bbHddfG1lZGlhcGFkW1xcd1xcLiBdKig/PSBidWl8XFwpKSlcXGIoPyEuK2RcXC9zKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEhVQVdFSV0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyg/Omh1YXdlaSkoWy1cXHcgXSspWztcXCldL2ksXG4gICAgICAgICAgICAvXFxiKG5leHVzIDZwfFxcd3syLDR9ZT8tW2F0dV0/W2xuXVtcXGR4XVswMTIzNTljXVthZG5dPylcXGIoPyEuK2RcXC9zKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEhVQVdFSV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBYaWFvbWlcbiAgICAgICAgICAgIC9vaWRbXlxcKV0rOyAoMltcXGRiY117NH0oMTgyfDI4M3xycFxcd3syfSlbY2dsXXxtMjEwNWs4MWE/YykoPzogYnVpfFxcKSkvaSxcbiAgICAgICAgICAgIC9cXGIoKD86cmVkKT9taVstXyBdP3BhZFtcXHctIF0qKSg/OiBidWl8XFwpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaSBQYWQgdGFibGV0c1xuICAgICAgICAgICAgXSxbW01PREVMLCAvXy9nLCAnICddLCBbVkVORE9SLCBYSUFPTUldLCBbVFlQRSwgVEFCTEVUXV0sIFtcblxuICAgICAgICAgICAgL1xcYihwb2NvW1xcdyBdK3xtMlxcZHszfWpcXGRcXGRbYS16XXsyfSkoPzogYnVpfFxcKSkvaSwgICAgICAgICAgICAgICAgICAvLyBYaWFvbWkgUE9DT1xuICAgICAgICAgICAgL1xcYjsgKFxcdyspIGJ1aWxkXFwvaG1cXDEvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWGlhb21pIEhvbmdtaSAnbnVtZXJpYycgbW9kZWxzXG4gICAgICAgICAgICAvXFxiKGhtWy1fIF0/bm90ZT9bXyBdPyg/OlxcZFxcdyk/KSBidWkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taSBIb25nbWlcbiAgICAgICAgICAgIC9cXGIocmVkbWlbXFwtXyBdPyg/Om5vdGV8ayk/W1xcd18gXSspKD86IGJ1aXxcXCkpL2ksICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taSBSZWRtaVxuICAgICAgICAgICAgL29pZFteXFwpXSs7IChtP1sxMl1bMC0zODldWzAxXVxcd3szLDZ9W2MteV0pKCBidWl8OyB3dnxcXCkpL2ksICAgICAgICAvLyBYaWFvbWkgUmVkbWkgJ251bWVyaWMnIG1vZGVsc1xuICAgICAgICAgICAgL1xcYihtaVstXyBdPyg/OmFcXGR8b25lfG9uZVtfIF1wbHVzfG5vdGUgbHRlfG1heHxjYyk/W18gXT8oPzpcXGQ/XFx3PylbXyBdPyg/OnBsdXN8c2V8bGl0ZXxwcm8pPykoPzogYnVpfFxcKSkvaSwgLy8gWGlhb21pIE1pXG4gICAgICAgICAgICAvIChbXFx3IF0rKSBtaXVpXFwvdj9cXGQvaVxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL18vZywgJyAnXSwgW1ZFTkRPUiwgWElBT01JXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIE9QUE9cbiAgICAgICAgICAgIC87IChcXHcrKSBidWkuKyBvcHBvL2ksXG4gICAgICAgICAgICAvXFxiKGNwaFsxMl1cXGR7M318cCg/OmFmfGNbYWxdfGRcXHd8ZVthcl0pW210XVxcZDB8eDkwMDd8YTEwMW9wKVxcYi9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE9QUE9dLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIob3BkMihcXGR7M31hPykpKD86IGJ1aXxcXCkpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgc3RyTWFwcGVyLCB7ICdPbmVQbHVzJyA6IFsnMzA0JywgJzQwMycsICcyMDMnXSwgJyonIDogT1BQTyB9XSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIFZpdm9cbiAgICAgICAgICAgIC92aXZvIChcXHcrKSg/OiBidWl8XFwpKS9pLFxuICAgICAgICAgICAgL1xcYih2WzEyXVxcZHszfVxcdz9bYXRdKSg/OiBidWl8OykvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnVml2byddLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gUmVhbG1lXG4gICAgICAgICAgICAvXFxiKHJteFsxLTNdXFxkezN9KSg/OiBidWl8O3xcXCkpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ1JlYWxtZSddLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gTW90b3JvbGFcbiAgICAgICAgICAgIC9cXGIobWlsZXN0b25lfGRyb2lkKD86WzItNHhdfCAoPzpiaW9uaWN8eDJ8cHJvfHJhenIpKT86PyggNGcpPylcXGJbXFx3IF0rYnVpbGRcXC8vaSxcbiAgICAgICAgICAgIC9cXGJtb3QoPzpvcm9sYSk/Wy0gXShcXHcqKS9pLFxuICAgICAgICAgICAgLygoPzptb3RvKD8hIDM2MClbXFx3XFwoXFwpIF0rfHh0XFxkezMsNH18bmV4dXMgNikoPz0gYnVpfFxcKSkpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTU9UT1JPTEFdLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGIobXo2MFxcZHx4b29tWzIgXXswLDJ9KSBidWlsZFxcLy9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE1PVE9ST0xBXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIExHXG4gICAgICAgICAgICAvKCg/PWxnKT9bdmxda1xcLT9cXGR7M30pIGJ1aXwgM1xcLlstXFx3OyBdezEwfWxnPy0oWzA2Y3Y5XXszLDR9KS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIExHXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKGxtKD86LT9mMTAwW252XT98LVtcXHdcXC5dKykoPz0gYnVpfFxcKSl8bmV4dXMgWzQ1XSkvaSxcbiAgICAgICAgICAgIC9cXGJsZ1stZTtcXC8gXSsoKD8hYnJvd3NlcnxuZXRjYXN0fGFuZHJvaWQgdHZ8d2F0Y2gpXFx3KykvaSxcbiAgICAgICAgICAgIC9cXGJsZy0/KFtcXGRcXHddKykgYnVpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTEddLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gTGVub3ZvXG4gICAgICAgICAgICAvKGlkZWF0YWJbLVxcdyBdK3w2MDJsdnxkLTQyYXxhMTAxbHZ8YTIxMDlhfGEzNTAwLWh2fHNbNTZdMDAwfHBiLTY1MDVbbXldfHRiLT94P1xcZHszLDR9KD86ZltjdV18eHV8W2F2XSl8eXRcXGQ/LVtqeF0/XFxkK1tsZm14XSkoIGJ1aXw7fFxcKXxcXC8pL2ksXG4gICAgICAgICAgICAvbGVub3ZvID8oYls2OF0wWzA4XTAtP1toZl0/fHRhYig/OltcXHctIF0rPyl8dGJbXFx3LV17Niw3fSkoIGJ1aXw7fFxcKXxcXC8pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTEVOT1ZPXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE5va2lhXG4gICAgICAgICAgICAvKG5va2lhKSAodFsxMl1bMDFdKS9pXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBNT0RFTCwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKD86bWFlbW98bm9raWEpLioobjkwMHxsdW1pYSBcXGQrfHJtLVxcZCspL2ksXG4gICAgICAgICAgICAvbm9raWFbLV8gXT8oKFstXFx3XFwuIF0qKSkvaVxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL18vZywgJyAnXSwgW1RZUEUsIE1PQklMRV0sIFtWRU5ET1IsICdOb2tpYSddXSwgW1xuXG4gICAgICAgICAgICAvLyBHb29nbGVcbiAgICAgICAgICAgIC8ocGl4ZWwgKGN8dGFibGV0KSlcXGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvb2dsZSBQaXhlbCBDL1RhYmxldFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBHT09HTEVdLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rOyAocGl4ZWxbXFxkYXhsIF17MCw2fSkoPzogYnVpfFxcKSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgUGl4ZWxcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgR09PR0xFXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIFNvbnlcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoYT9cXGRbMC0yXXsyfXNvfFtjLWddXFxkezR9fHNvWy1nbF1cXHcrfHhxLWFcXHdbNC03XVsxMl0pKD89IGJ1aXxcXCkuK2Nocm9tZVxcLyg/IVsxLTZdezAsMX1cXGRcXC4pKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9zb255IHRhYmxldCBbcHNdL2ksXG4gICAgICAgICAgICAvXFxiKD86c29ueSk/c2dwXFx3Kyg/OiBidWl8XFwpKS9pXG4gICAgICAgICAgICBdLCBbW01PREVMLCAnWHBlcmlhIFRhYmxldCddLCBbVkVORE9SLCBTT05ZXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE9uZVBsdXNcbiAgICAgICAgICAgIC8gKGtiMjAwNXxpbjIwWzEyXTV8YmUyMFsxMl1bNTldKVxcYi9pLFxuICAgICAgICAgICAgLyg/Om9uZSk/KD86cGx1cyk/IChhXFxkMFxcZFxcZCkoPzogYnxcXCkpL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgT05FUExVU10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBBbWF6b25cbiAgICAgICAgICAgIC8oYWxleGEpd2VibS9pLFxuICAgICAgICAgICAgLyhrZlthLXpdezJ9d2l8YWVvKD8hYmMpXFx3XFx3KSggYnVpfFxcKSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGUgRmlyZSB3aXRob3V0IFNpbGsgLyBFY2hvIFNob3dcbiAgICAgICAgICAgIC8oa2ZbYS16XSspKCBidWl8XFwpKS4rc2lsa1xcLy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLaW5kbGUgRmlyZSBIRFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oKD86c2R8a2YpWzAzNDloaWpvcnN0dXddKykoIGJ1aXxcXCkpLitzaWxrXFwvL2kgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFBob25lXG4gICAgICAgICAgICBdLCBbW01PREVMLCAvKC4rKS9nLCAnRmlyZSBQaG9uZSAkMSddLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQmxhY2tCZXJyeVxuICAgICAgICAgICAgLyhwbGF5Ym9vayk7Wy1cXHdcXCksOyBdKyhyaW0pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsYWNrQmVycnkgUGxheUJvb2tcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgVkVORE9SLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIoKD86YmJbYS1mXXxzdFtodl0pMTAwLVxcZCkvaSxcbiAgICAgICAgICAgIC9cXChiYjEwOyAoXFx3KykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5IDEwXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEJMQUNLQkVSUlldLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQXN1c1xuICAgICAgICAgICAgLyg/OlxcYnxhc3VzXykodHJhbnNmb1twcmltZSBdezQsMTB9IFxcdyt8ZWVlcGN8c2xpZGVyIFxcdyt8bmV4dXMgN3xwYWRmb25lfHAwMFtjal0pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVNVU10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyAoeltiZXNdNlswMjddWzAxMl1ba21dW2xzXXx6ZW5mb25lIFxcZFxcdz8pXFxiL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVNVU10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBIVENcbiAgICAgICAgICAgIC8obmV4dXMgOSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRDIE5leHVzIDlcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0hUQyddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC8oaHRjKVstO18gXXsxLDJ9KFtcXHcgXSsoPz1cXCl8IGJ1aSl8XFx3KykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFRDXG5cbiAgICAgICAgICAgIC8vIFpURVxuICAgICAgICAgICAgLyh6dGUpWy0gXShbXFx3IF0rPykoPzogYnVpfFxcL3xcXCkpL2ksXG4gICAgICAgICAgICAvKGFsY2F0ZWx8Z2Vla3NwaG9uZXxuZXhpYW58cGFuYXNvbmljKD8hKD86O3xcXC4pKXxzb255KD8hLWJyYSkpWy1fIF0/KFstXFx3XSopL2kgICAgICAgICAvLyBBbGNhdGVsL0dlZWtzUGhvbmUvTmV4aWFuL1BhbmFzb25pYy9Tb255XG4gICAgICAgICAgICBdLCBbVkVORE9SLCBbTU9ERUwsIC9fL2csICcgJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBUQ0xcbiAgICAgICAgICAgIC9kcm9pZCBbXFx3XFwuXSs7ICgoPzo4WzE0XTlbMTZdfDkoPzowKD86NDh8NjB8OFswMV0pfDEoPzozWzI3XXw2Nil8Mig/OjZbNjldfDlbNTZdKXw0NjYpKVtncXN3eF0pXFx3KihcXCl8IGJ1aSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnVENMJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuXG4gICAgICAgICAgICAvLyBpdGVsXG4gICAgICAgICAgICAvKGl0ZWwpICgoXFx3KykpL2lcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCBsb3dlcml6ZV0sIE1PREVMLCBbVFlQRSwgc3RyTWFwcGVyLCB7ICd0YWJsZXQnIDogWydwMTAwMDFsJywgJ3c3MDAxJ10sICcqJyA6ICdtb2JpbGUnIH1dXSwgW1xuXG4gICAgICAgICAgICAvLyBBY2VyXG4gICAgICAgICAgICAvZHJvaWQuKzsgKFthYl1bMS03XS0/WzAxNzhhXVxcZFxcZD8pL2lcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0FjZXInXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1laXp1XG4gICAgICAgICAgICAvZHJvaWQuKzsgKG1bMS01XSBub3RlKSBidWkvaSxcbiAgICAgICAgICAgIC9cXGJtei0oWy1cXHddezIsfSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTWVpenUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBVbGVmb25lXG4gICAgICAgICAgICAvOyAoKD86cG93ZXIgKT9hcm1vcig/OltcXHcgXXswLDh9KSkoPzogYnVpfFxcKSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnVWxlZm9uZSddLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gRW5lcmdpemVyXG4gICAgICAgICAgICAvOyAoZW5lcmd5ID9cXHcrKSg/OiBidWl8XFwpKS9pLFxuICAgICAgICAgICAgLzsgZW5lcmdpemVyIChbXFx3IF0rKSg/OiBidWl8XFwpKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdFbmVyZ2l6ZXInXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIENhdFxuICAgICAgICAgICAgLzsgY2F0IChiMzUpOy9pLFxuICAgICAgICAgICAgLzsgKGIxNXE/fHMyMiBmbGlwfHM0OGN8czYyIHBybykoPzogYnVpfFxcKSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnQ2F0J10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBTbWFydGZyZW5cbiAgICAgICAgICAgIC8oKD86bmV3ICk/YW5kcm9tYXhbXFx3LSBdKykoPzogYnVpfFxcKSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnU21hcnRmcmVuJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLyBOb3RoaW5nXG4gICAgICAgICAgICAvZHJvaWQuKzsgKGEoPzowMTV8MDZbMzVdfDE0MnA/KSkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTm90aGluZyddLCBbVFlQRSwgTU9CSUxFXV0sIFtcblxuICAgICAgICAgICAgLy8gQXJjaG9zXG4gICAgICAgICAgICAvOyAoeDY3IDVnfHRpa2Vhc3kgXFx3K3xhY1sxNzg5XVxcZFxcdyspKCBifFxcKSkvaSxcbiAgICAgICAgICAgIC9hcmNob3MgPyg1fGdhbWVwYWQyP3woW1xcdyBdKlt0MTc4OV18aGVsbG8pID9cXGQrW1xcdyBdKikoIGJ8XFwpKS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdBcmNob3MnXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvYXJjaG9zIChbXFx3IF0rKSggYnxcXCkpL2ksXG4gICAgICAgICAgICAvOyAoYWNbMy02XVxcZFxcd3syLDh9KSggYnxcXCkpL2kgXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdBcmNob3MnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vIE1JWEVEXG4gICAgICAgICAgICAvKGltbykgKHRhYiBcXHcrKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJTU9cbiAgICAgICAgICAgIC8oaW5maW5peCkgKHgxMTAxYj8pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5maW5peCBYUGFkXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBNT0RFTCwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8oYmxhY2tiZXJyeXxiZW5xfHBhbG0oPz1cXC0pfHNvbnllcmljc3NvbnxhY2VyfGFzdXMoPyEgemVudyl8ZGVsbHxqb2xsYXxtZWl6dXxtb3Rvcm9sYXxwb2x5dHJvbnxpbmZpbml4fHRlY25vfG1pY3JvbWF4fGFkdmFuKVstXyBdPyhbLVxcd10qKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5L0JlblEvUGFsbS9Tb255LUVyaWNzc29uL0FjZXIvQXN1cy9EZWxsL01laXp1L01vdG9yb2xhL1BvbHl0cm9uL0luZmluaXgvVGVjbm8vTWljcm9tYXgvQWR2YW5cbiAgICAgICAgICAgIC87IChobWR8aW1vKSAoW1xcdyBdKz8pKD86IGJ1aXxcXCkpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBITUQvSU1PXG4gICAgICAgICAgICAvKGhwKSAoW1xcdyBdK1xcdykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSFAgaVBBUVxuICAgICAgICAgICAgLyhtaWNyb3NvZnQpOyAobHVtaWFbXFx3IF0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWljcm9zb2Z0IEx1bWlhXG4gICAgICAgICAgICAvKGxlbm92bylbLV8gXT8oWy1cXHcgXSs/KSg/OiBidWl8XFwpfFxcLykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExlbm92b1xuICAgICAgICAgICAgLyhvcHBvKSA/KFtcXHcgXSspIGJ1aS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT1BQT1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvKGtvYm8pXFxzKGVyZWFkZXJ8dG91Y2gpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLb2JvXG4gICAgICAgICAgICAvKGhwKS4rKHRvdWNocGFkKD8hLit0YWJsZXQpfHRhYmxldCkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhQIFRvdWNoUGFkXG4gICAgICAgICAgICAvKGtpbmRsZSlcXC8oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtpbmRsZVxuICAgICAgICAgICAgLyhub29rKVtcXHcgXStidWlsZFxcLyhcXHcrKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb29rXG4gICAgICAgICAgICAvKGRlbGwpIChzdHJlYVtrcHJcXGQgXSpbXFxka29dKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsbCBTdHJlYWtcbiAgICAgICAgICAgIC8obGVbLSBdK3BhbilbLSBdKyhcXHd7MSw5fSkgYnVpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExlIFBhbiBUYWJsZXRzXG4gICAgICAgICAgICAvKHRyaW5pdHkpWy0gXSoodFxcZHszfSkgYnVpL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmluaXR5IFRhYmxldHNcbiAgICAgICAgICAgIC8oZ2lnYXNldClbLSBdKyhxXFx3ezEsOX0pIGJ1aS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdpZ2FzZXQgVGFibGV0c1xuICAgICAgICAgICAgLyh2b2RhZm9uZSkgKFtcXHcgXSspKD86XFwpfCBidWkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZvZGFmb25lXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBNT0RFTCwgW1RZUEUsIFRBQkxFVF1dLCBbXG5cbiAgICAgICAgICAgIC8oc3VyZmFjZSBkdW8pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VyZmFjZSBEdW9cbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTUlDUk9TT0ZUXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvZHJvaWQgW1xcZFxcLl0rOyAoZnBcXGR1PykoPzogYnxcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWlycGhvbmVcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0ZhaXJwaG9uZSddLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC8odTMwNGFhKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQVQmVFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnQVQmVCddLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9cXGJzaWUtKFxcdyopL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaWVtZW5zXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdTaWVtZW5zJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihyY3RcXHcrKSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJDQSBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdSQ0EnXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxiKHZlbnVlW1xcZCBdezIsN30pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsbCBWZW51ZSBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdEZWxsJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihxKD86bXZ8dGEpXFx3KykgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZlcml6b24gVGFibGV0XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdWZXJpem9uJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYig/OmJhcm5lc1smIF0rbm9ibGUgfGJuW3J0XSkoW1xcd1xcKyBdKikgYi9pICAgICAgICAgICAgICAgICAgICAgICAvLyBCYXJuZXMgJiBOb2JsZSBUYWJsZXRcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0Jhcm5lcyAmIE5vYmxlJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYih0bVxcZHszfVxcdyspIGIvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnTnVWaXNpb24nXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxiKGs4OCkgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBaVEUgSyBTZXJpZXMgVGFibGV0XG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdaVEUnXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxiKG54XFxkezN9aikgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWlRFIE51YmlhXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdaVEUnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxiKGdlblxcZHszfSkgYi4rNDloL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3dpc3MgR0VOIE1vYmlsZVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnU3dpc3MnXSwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxiKHp1clxcZHszfSkgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3dpc3MgWlVSIFRhYmxldFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnU3dpc3MnXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvXFxiKCh6ZWtpKT90Yi4qXFxiKSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWmVraSBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsICdaZWtpJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihbeXJdXFxkezJ9KSBiL2ksXG4gICAgICAgICAgICAvXFxiKGRyYWdvblstIF0rdG91Y2ggfGR0KShcXHd7NX0pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHJhZ29uIFRvdWNoIFRhYmxldFxuICAgICAgICAgICAgXSwgW1tWRU5ET1IsICdEcmFnb24gVG91Y2gnXSwgTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYihucy0/XFx3ezAsOX0pIGIvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc2lnbmlhIFRhYmxldHNcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ0luc2lnbmlhJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigobnhhfG5leHQpLT9cXHd7MCw5fSkgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5leHRCb29rIFRhYmxldHNcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ05leHRCb29rJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYih4dHJlbWVcXF8pPyh2KDFbMDQ1XXwyWzAxNV18WzM0NjldMHw3WzA1XSkpIGIvaSAgICAgICAgICAgICAgICAgIC8vIFZvaWNlIFh0cmVtZSBQaG9uZXNcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCAnVm9pY2UnXSwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYihsdnRlbFxcLSk/KHYxWzEyXSkgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEx2VGVsIFBob25lc1xuICAgICAgICAgICAgXSwgW1tWRU5ET1IsICdMdlRlbCddLCBNT0RFTCwgW1RZUEUsIE1PQklMRV1dLCBbXG4gICAgICAgICAgICAvXFxiKHBoLTEpIC9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFc3NlbnRpYWwgUEgtMVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnRXNzZW50aWFsJ10sIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgL1xcYih2KDEwMG1kfDcwMG5hfDcwMTF8OTE3ZykuKlxcYikgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVudml6ZW4gVGFibGV0c1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnRW52aXplbiddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGIodHJpb1stXFx3XFwuIF0rKSBiL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFjaFNwZWVkIFRhYmxldHNcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ01hY2hTcGVlZCddLCBbVFlQRSwgVEFCTEVUXV0sIFtcbiAgICAgICAgICAgIC9cXGJ0dV8oMTQ5MSkgYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJvdG9yIFRhYmxldHNcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgJ1JvdG9yJ10sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLygoPzp0ZWdyYW5vdGV8c2hpZWxkIHQoPyEuK2QgdHYpKVtcXHctIF0qPykoPzogYnxcXCkpL2kgICAgICAgICAgICAgIC8vIE52aWRpYSBUYWJsZXRzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE5WSURJQV0sIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgLyhzcHJpbnQpIChcXHcrKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ByaW50IFBob25lc1xuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgW1xuICAgICAgICAgICAgLyhraW5cXC5bb25ldHddezN9KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWljcm9zb2Z0IEtpblxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgL1xcLi9nLCAnICddLCBbVkVORE9SLCBNSUNST1NPRlRdLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoY2M2NjY2P3xldDVbMTZdfG1jWzIzOV1bMjNdeD98dmM4WzAzXXg/KVxcKS9pICAgICAgICAgICAgIC8vIFplYnJhXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFpFQlJBXSwgW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvZHJvaWQuKzsgKGVjMzB8cHMyMHx0Y1syLThdXFxkW2t4XSlcXCkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBaRUJSQV0sIFtUWVBFLCBNT0JJTEVdXSwgW1xuXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBTTUFSVFRWU1xuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgICAvc21hcnQtdHYuKyhzYW1zdW5nKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbXN1bmdcbiAgICAgICAgICAgIF0sIFtWRU5ET1IsIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9oYmJ0di4rbWFwbGU7KFxcZCspL2lcbiAgICAgICAgICAgIF0sIFtbTU9ERUwsIC9eLywgJ1NtYXJ0VFYnXSwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC8obnV4OyBuZXRjYXN0LitzbWFydHR2fGxnIChuZXRjYXN0XFwudHYtMjAxXFxkfGFuZHJvaWQgdHYpKS9pICAgICAgICAvLyBMRyBTbWFydFRWXG4gICAgICAgICAgICBdLCBbW1ZFTkRPUiwgTEddLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvKGFwcGxlKSA/dHYvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGxlIFRWXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBbTU9ERUwsIEFQUExFKycgVFYnXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgL2Nya2V5L2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lY2FzdFxuICAgICAgICAgICAgXSwgW1tNT0RFTCwgQ0hST01FKydjYXN0J10sIFtWRU5ET1IsIEdPT0dMRV0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZC4rYWZ0KFxcdyspKCBidWl8XFwpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlIFRWXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFNQVpPTl0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC8oc2hpZWxkIFxcdysgdHYpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE52aWRpYSBTaGllbGQgVFZcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTlZJRElBXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgL1xcKGR0dltcXCk7XS4rKGFxdW9zKS9pLFxuICAgICAgICAgICAgLyhhcXVvcy10dltcXHcgXSspXFwpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNoYXJwXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNIQVJQXSwgW1RZUEUsIFNNQVJUVFZdXSxbXG4gICAgICAgICAgICAvKGJyYXZpYVtcXHcgXSspKCBidWl8XFwpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbnlcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU09OWV0sIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC8obWkodHZ8Ym94KS0/XFx3KykgYnVpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhpYW9taVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBYSUFPTUldLCBbVFlQRSwgU01BUlRUVl1dLCBbXG4gICAgICAgICAgICAvSGJidHYuKih0ZWNobmlzYXQpICguKik7L2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlY2huaVNBVFxuICAgICAgICAgICAgXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9cXGIocm9rdSlbXFxkeF0qW1xcKVxcL10oKD86ZHZwLSk/W1xcZFxcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm9rdVxuICAgICAgICAgICAgL2hiYnR2XFwvXFxkK1xcLlxcZCtcXC5cXGQrICtcXChbXFx3XFwrIF0qOyAqKFtcXHdcXGRdW147XSopOyhbXjtdKikvaSAgICAgICAgIC8vIEhiYlRWIGRldmljZXNcbiAgICAgICAgICAgIF0sIFtbVkVORE9SLCB0cmltXSwgW01PREVMLCB0cmltXSwgW1RZUEUsIFNNQVJUVFZdXSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTbWFydFRWIGZyb20gVW5pZGVudGlmaWVkIFZlbmRvcnNcbiAgICAgICAgICAgIC9kcm9pZC4rOyAoW1xcdy0gXSspICg/OmFuZHJvaWQgdHZ8c21hcnRbLSBdP3R2KS9pXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtUWVBFLCBTTUFSVFRWXV0sIFtcbiAgICAgICAgICAgIC9cXGIoYW5kcm9pZCB0dnxzbWFydFstIF0/dHZ8b3BlcmEgdHZ8dHY7IHJ2OilcXGIvaVxuICAgICAgICAgICAgXSwgW1tUWVBFLCBTTUFSVFRWXV0sIFtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAgICAgLy8gQ09OU09MRVNcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICAgLyhvdXlhKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdXlhXG4gICAgICAgICAgICAvKG5pbnRlbmRvKSAoW3dpZHMzdXRjaF0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5pbnRlbmRvXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBNT0RFTCwgW1RZUEUsIENPTlNPTEVdXSwgW1xuICAgICAgICAgICAgL2Ryb2lkLis7IChzaGllbGQpKCBidWl8XFwpKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnZpZGlhIFBvcnRhYmxlXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE5WSURJQV0sIFtUWVBFLCBDT05TT0xFXV0sIFtcbiAgICAgICAgICAgIC8ocGxheXN0YXRpb24gXFx3KykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBsYXlzdGF0aW9uXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgQ09OU09MRV1dLCBbXG4gICAgICAgICAgICAvXFxiKHhib3goPzogb25lKT8oPyE7IHhib3gpKVtcXCk7IF0vaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWljcm9zb2Z0IFhib3hcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTUlDUk9TT0ZUXSwgW1RZUEUsIENPTlNPTEVdXSwgW1xuXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgICAvLyBXRUFSQUJMRVNcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICAgL1xcYihzbS1bbHJdXFxkXFxkWzAxNTZdW2ZudXddP3M/fGdlYXIgbGl2ZSlcXGIvaSAgICAgICAgICAgICAgICAgICAgICAgLy8gU2Ftc3VuZyBHYWxheHkgV2F0Y2hcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgU0FNU1VOR10sIFtUWVBFLCBXRUFSQUJMRV1dLCBbXG4gICAgICAgICAgICAvKChwZWJibGUpKWFwcC9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBlYmJsZVxuICAgICAgICAgICAgLyhhc3VzfGdvb2dsZXxsZ3xvcHBvKSAoKHBpeGVsIHx6ZW4pP3dhdGNoW1xcdyBdKikoIGJ1aXxcXCkpL2kgICAgICAgIC8vIEFzdXMgWmVuV2F0Y2ggLyBMRyBXYXRjaCAvIFBpeGVsIFdhdGNoXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBNT0RFTCwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8ob3coPzoxOXwyMCk/d2U/WzEtM117MSwzfSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BwbyBXYXRjaFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBPUFBPXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8od2F0Y2gpKD86ID9vc1ssXFwvXXxcXGQsXFxkXFwvKVtcXGRcXC5dKy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGUgV2F0Y2hcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgQVBQTEVdLCBbVFlQRSwgV0VBUkFCTEVdXSwgW1xuICAgICAgICAgICAgLyhvcHd3ZVxcZHszfSkvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25lUGx1cyBXYXRjaFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBPTkVQTFVTXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8obW90byAzNjApL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW90b3JvbGEgMzYwXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIE1PVE9ST0xBXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC8oc21hcnR3YXRjaCAzKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU29ueSBTbWFydFdhdGNoXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIFNPTlldLCBbVFlQRSwgV0VBUkFCTEVdXSwgW1xuICAgICAgICAgICAgLyhnIHdhdGNoIHIpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMRyBHIFdhdGNoIFJcbiAgICAgICAgICAgIF0sIFtNT0RFTCwgW1ZFTkRPUiwgTEddLCBbVFlQRSwgV0VBUkFCTEVdXSwgW1xuICAgICAgICAgICAgL2Ryb2lkLis7ICh3dDYzPzB7MiwzfSlcXCkvaVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBaRUJSQV0sIFtUWVBFLCBXRUFSQUJMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIFhSXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC9kcm9pZC4rOyAoZ2xhc3MpIFxcZC9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvb2dsZSBHbGFzc1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBHT09HTEVdLCBbVFlQRSwgV0VBUkFCTEVdXSwgW1xuICAgICAgICAgICAgLyhwaWNvKSAoNHxuZW8zKD86IGxpbmt8cHJvKT8pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQaWNvXG4gICAgICAgICAgICBdLCBbVkVORE9SLCBNT0RFTCwgW1RZUEUsIFdFQVJBQkxFXV0sIFtcbiAgICAgICAgICAgIC87IChxdWVzdCggXFxkfCBwcm8pPykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9jdWx1cyBRdWVzdFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBGQUNFQk9PS10sIFtUWVBFLCBXRUFSQUJMRV1dLCBbXG5cbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIEVNQkVEREVEXG4gICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICAgIC8odGVzbGEpKD86IHF0Y2FyYnJvd3NlcnxcXC9bLVxcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVzbGFcbiAgICAgICAgICAgIF0sIFtWRU5ET1IsIFtUWVBFLCBFTUJFRERFRF1dLCBbXG4gICAgICAgICAgICAvKGFlb2JjKVxcYi9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFY2hvIERvdFxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCBBTUFaT05dLCBbVFlQRSwgRU1CRURERURdXSwgW1xuICAgICAgICAgICAgLyhob21lcG9kKS4rbWFjIG9zL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBsZSBIb21lUG9kXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtWRU5ET1IsIEFQUExFXSwgW1RZUEUsIEVNQkVEREVEXV0sIFtcbiAgICAgICAgICAgIC93aW5kb3dzIGlvdC9pXG4gICAgICAgICAgICBdLCBbW1RZUEUsIEVNQkVEREVEXV0sIFtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgICAgIC8vIE1JWEVEIChHRU5FUklDKVxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgICAvZHJvaWQgLis/OyAoW147XSs/KSg/OiBidWl8OyB3dlxcKXxcXCkgYXBwbGV3KS4rPyBtb2JpbGUgc2FmYXJpL2kgICAgLy8gQW5kcm9pZCBQaG9uZXMgZnJvbSBVbmlkZW50aWZpZWQgVmVuZG9yc1xuICAgICAgICAgICAgXSwgW01PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZCAuKz87IChbXjtdKz8pKD86IGJ1aXxcXCkgYXBwbGV3KS4rPyg/ISBtb2JpbGUpIHNhZmFyaS9pICAgICAgIC8vIEFuZHJvaWQgVGFibGV0cyBmcm9tIFVuaWRlbnRpZmllZCBWZW5kb3JzXG4gICAgICAgICAgICBdLCBbTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgW1xuICAgICAgICAgICAgL1xcYigodGFibGV0fHRhYilbO1xcL118Zm9jdXNcXC9cXGQoPyEuK21vYmlsZSkpL2kgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pZGVudGlmaWFibGUgVGFibGV0XG4gICAgICAgICAgICBdLCBbW1RZUEUsIFRBQkxFVF1dLCBbXG4gICAgICAgICAgICAvKHBob25lfG1vYmlsZSg/Ols7XFwvXXwgWyBcXHdcXC9cXC5dKnNhZmFyaSl8cGRhKD89Lit3aW5kb3dzIGNlKSkvaSAgICAvLyBVbmlkZW50aWZpYWJsZSBNb2JpbGVcbiAgICAgICAgICAgIF0sIFtbVFlQRSwgTU9CSUxFXV0sIFtcbiAgICAgICAgICAgIC9kcm9pZCAuKz87IChbXFx3XFwuIC1dKykoIGJ1aXxcXCkpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2VuZXJpYyBBbmRyb2lkIERldmljZVxuICAgICAgICAgICAgXSwgW01PREVMLCBbVkVORE9SLCAnR2VuZXJpYyddXVxuICAgICAgICBdLFxuXG4gICAgICAgIGVuZ2luZSA6IFtbXG5cbiAgICAgICAgICAgIC93aW5kb3dzLisgZWRnZVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFZGdlSFRNTFxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBFREdFKydIVE1MJ11dLCBbXG5cbiAgICAgICAgICAgIC8oYXJrd2ViKVxcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXJrV2ViXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcblxuICAgICAgICAgICAgL3dlYmtpdFxcLzUzN1xcLjM2LitjaHJvbWVcXC8oPyEyNykoW1xcd1xcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsaW5rXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdCbGluayddXSwgW1xuXG4gICAgICAgICAgICAvKHByZXN0bylcXC8oW1xcd1xcLl0rKS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXN0b1xuICAgICAgICAgICAgLyh3ZWJraXR8dHJpZGVudHxuZXRmcm9udHxuZXRzdXJmfGFtYXlhfGx5bnh8dzNtfGdvYW5uYXxzZXJ2bylcXC8oW1xcd1xcLl0rKS9pLCAvLyBXZWJLaXQvVHJpZGVudC9OZXRGcm9udC9OZXRTdXJmL0FtYXlhL0x5bngvdzNtL0dvYW5uYS9TZXJ2b1xuICAgICAgICAgICAgL2VraW9oKGZsb3cpXFwvKFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGbG93XG4gICAgICAgICAgICAvKGtodG1sfHRhc21hbnxsaW5rcylbXFwvIF1cXCg/KFtcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLSFRNTC9UYXNtYW4vTGlua3NcbiAgICAgICAgICAgIC8oaWNhYilbXFwvIF0oWzIzXVxcLltcXGRcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlDYWJcblxuICAgICAgICAgICAgL1xcYihsaWJ3ZWIpL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGliV2ViXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC9sYWR5YmlyZFxcLy9pXG4gICAgICAgICAgICBdLCBbW05BTUUsICdMaWJXZWInXV0sIFtcblxuICAgICAgICAgICAgL3J2XFw6KFtcXHdcXC5dezEsOX0pXFxiLisoZ2Vja28pL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2Vja29cbiAgICAgICAgICAgIF0sIFtWRVJTSU9OLCBOQU1FXVxuICAgICAgICBdLFxuXG4gICAgICAgIG9zIDogW1tcblxuICAgICAgICAgICAgLy8gV2luZG93c1xuICAgICAgICAgICAgL21pY3Jvc29mdCAod2luZG93cykgKHZpc3RhfHhwKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaW5kb3dzIChpVHVuZXMpXG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8od2luZG93cyAoPzpwaG9uZSg/OiBvcyk/fG1vYmlsZXxpb3QpKVtcXC8gXT8oW1xcZFxcLlxcdyBdKikvaSAgICAgICAgIC8vIFdpbmRvd3MgUGhvbmVcbiAgICAgICAgICAgIF0sIFtOQU1FLCBbVkVSU0lPTiwgc3RyTWFwcGVyLCB3aW5kb3dzVmVyc2lvbk1hcF1dLCBbXG4gICAgICAgICAgICAvd2luZG93cyBudCA2XFwuMjsgKGFybSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaW5kb3dzIFJUXG4gICAgICAgICAgICAvd2luZG93c1tcXC8gXShbbnRjZVxcZFxcLiBdK1xcdykoPyEuK3hib3gpL2ksXG4gICAgICAgICAgICAvKD86d2luKD89M3w5fG4pfHdpbiA5eCApKFtudFxcZFxcLl0rKS9pXG4gICAgICAgICAgICBdLCBbW1ZFUlNJT04sIHN0ck1hcHBlciwgd2luZG93c1ZlcnNpb25NYXBdLCBbTkFNRSwgJ1dpbmRvd3MnXV0sIFtcblxuICAgICAgICAgICAgLy8gaU9TL21hY09TXG4gICAgICAgICAgICAvW2FkZWhpbW5vcF17NCw3fVxcYig/Oi4qb3MgKFtcXHddKykgbGlrZSBtYWN8OyBvcGVyYSkvaSwgICAgICAgICAgICAgLy8gaU9TXG4gICAgICAgICAgICAvKD86aW9zO2Zic3ZcXC98aXBob25lLitpb3NbXFwvIF0pKFtcXGRcXC5dKykvaSxcbiAgICAgICAgICAgIC9jZm5ldHdvcmtcXC8uK2Rhcndpbi9pXG4gICAgICAgICAgICBdLCBbW1ZFUlNJT04sIC9fL2csICcuJ10sIFtOQU1FLCAnaU9TJ11dLCBbXG4gICAgICAgICAgICAvKG1hYyBvcyB4KSA/KFtcXHdcXC4gXSopL2ksXG4gICAgICAgICAgICAvKG1hY2ludG9zaHxtYWNfcG93ZXJwY1xcYikoPyEuK2hhaWt1KS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWMgT1NcbiAgICAgICAgICAgIF0sIFtbTkFNRSwgTUFDX09TXSwgW1ZFUlNJT04sIC9fL2csICcuJ11dLCBbXG5cbiAgICAgICAgICAgIC8vIE1vYmlsZSBPU2VzXG4gICAgICAgICAgICAvZHJvaWQgKFtcXHdcXC5dKylcXGIuKyhhbmRyb2lkWy0gXXg4NnxoYXJtb255b3MpL2kgICAgICAgICAgICAgICAgICAgIC8vIEFuZHJvaWQteDg2L0hhcm1vbnlPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIE5BTUVdLCBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8odWJ1bnR1KSAoW1xcd1xcLl0rKSBsaWtlIGFuZHJvaWQvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVYnVudHUgVG91Y2hcbiAgICAgICAgICAgIF0sIFtbTkFNRSwgLyguKykvLCAnJDEgVG91Y2gnXSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kcm9pZC9CbGFja2JlcnJ5L1dlYk9TL1FOWC9CYWRhL1JJTS9LYWlPUy9NYWVtby9NZWVHby9TNDAvU2FpbGZpc2ggT1MvT3Blbkhhcm1vbnkvVGl6ZW5cbiAgICAgICAgICAgIC8oYW5kcm9pZHxiYWRhfGJsYWNrYmVycnl8a2Fpb3N8bWFlbW98bWVlZ298b3Blbmhhcm1vbnl8cW54fHJpbSB0YWJsZXQgb3N8c2FpbGZpc2h8c2VyaWVzNDB8c3ltYmlhbnx0aXplbnx3ZWJvcylcXHcqWy1cXC87IF0/KFtcXGRcXC5dKikvaVxuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dLCBbXG4gICAgICAgICAgICAvXFwoYmIoMTApOy9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5IDEwXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIEJMQUNLQkVSUlldXSwgW1xuICAgICAgICAgICAgLyg/OnN5bWJpYW4gP29zfHN5bWJvc3xzNjAoPz07KXxzZXJpZXMgPzYwKVstXFwvIF0/KFtcXHdcXC5dKikvaSAgICAgICAvLyBTeW1iaWFuXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsICdTeW1iaWFuJ11dLCBbXG4gICAgICAgICAgICAvbW96aWxsYVxcL1tcXGRcXC5dKyBcXCgoPzptb2JpbGV8dGFibGV0fHR2fG1vYmlsZTsgW1xcdyBdKyk7IHJ2Oi4rIGdlY2tvXFwvKFtcXHdcXC5dKykvaSAvLyBGaXJlZm94IE9TXG4gICAgICAgICAgICBdLCBbVkVSU0lPTiwgW05BTUUsIEZJUkVGT1grJyBPUyddXSwgW1xuICAgICAgICAgICAgL3dlYjBzOy4rcnQodHYpL2ksXG4gICAgICAgICAgICAvXFxiKD86aHApP3dvcyg/OmJyb3dzZXIpP1xcLyhbXFx3XFwuXSspL2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWJPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnd2ViT1MnXV0sIFtcbiAgICAgICAgICAgIC93YXRjaCg/OiA/b3NbLFxcL118XFxkLFxcZFxcLykoW1xcZFxcLl0rKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2F0Y2hPU1xuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCAnd2F0Y2hPUyddXSwgW1xuXG4gICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lY2FzdFxuICAgICAgICAgICAgL2Nya2V5XFwvKFtcXGRcXC5dKykvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lY2FzdFxuICAgICAgICAgICAgXSwgW1ZFUlNJT04sIFtOQU1FLCBDSFJPTUUrJ2Nhc3QnXV0sIFtcbiAgICAgICAgICAgIC8oY3JvcykgW1xcd10rKD86XFwpfCAoW1xcd1xcLl0rKVxcYikvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWl1bSBPU1xuICAgICAgICAgICAgXSwgW1tOQU1FLCBDSFJPTUlVTV9PU10sIFZFUlNJT05dLFtcblxuICAgICAgICAgICAgLy8gU21hcnQgVFZzXG4gICAgICAgICAgICAvcGFuYXNvbmljOyh2aWVyYSkvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhbmFzb25pYyBWaWVyYVxuICAgICAgICAgICAgLyhuZXRyYW5nZSltbWgvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXRyYW5nZVxuICAgICAgICAgICAgLyhuZXR0dilcXC8oXFxkK1xcLltcXHdcXC5dKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldFRWXG5cbiAgICAgICAgICAgIC8vIENvbnNvbGVcbiAgICAgICAgICAgIC8obmludGVuZG98cGxheXN0YXRpb24pIChbd2lkczM0NXBvcnRhYmxldnVjaF0rKS9pLCAgICAgICAgICAgICAgICAgLy8gTmludGVuZG8vUGxheXN0YXRpb25cbiAgICAgICAgICAgIC8oeGJveCk7ICt4Ym94IChbXlxcKTtdKykvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pY3Jvc29mdCBYYm94ICgzNjAsIE9uZSwgWCwgUywgU2VyaWVzIFgsIFNlcmllcyBTKVxuXG4gICAgICAgICAgICAvLyBPdGhlclxuICAgICAgICAgICAgL1xcYihqb2xpfHBhbG0pXFxiID8oPzpvcyk/XFwvPyhbXFx3XFwuXSopL2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpvbGkvUGFsbVxuICAgICAgICAgICAgLyhtaW50KVtcXC9cXChcXCkgXT8oXFx3KikvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWludFxuICAgICAgICAgICAgLyhtYWdlaWF8dmVjdG9ybGludXgpWzsgXS9pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWdlaWEvVmVjdG9yTGludXhcbiAgICAgICAgICAgIC8oW2t4bG5dP3VidW50dXxkZWJpYW58c3VzZXxvcGVuc3VzZXxnZW50b298YXJjaCg/PSBsaW51eCl8c2xhY2t3YXJlfGZlZG9yYXxtYW5kcml2YXxjZW50b3N8cGNsaW51eG9zfHJlZCA/aGF0fHplbndhbGt8bGlucHVzfHJhc3BiaWFufHBsYW4gOXxtaW5peHxyaXNjIG9zfGNvbnRpa2l8ZGVlcGlufG1hbmphcm98ZWxlbWVudGFyeSBvc3xzYWJheW9ufGxpbnNwaXJlKSg/OiBnbnVcXC9saW51eCk/KD86IGVudGVycHJpc2UpPyg/OlstIF1saW51eCk/KD86LWdudSk/Wy1cXC8gXT8oPyFjaHJvbXxwYWNrYWdlKShbLVxcd1xcLl0qKS9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVYnVudHUvRGViaWFuL1NVU0UvR2VudG9vL0FyY2gvU2xhY2t3YXJlL0ZlZG9yYS9NYW5kcml2YS9DZW50T1MvUENMaW51eE9TL1JlZEhhdC9aZW53YWxrL0xpbnB1cy9SYXNwYmlhbi9QbGFuOS9NaW5peC9SSVNDT1MvQ29udGlraS9EZWVwaW4vTWFuamFyby9lbGVtZW50YXJ5L1NhYmF5b24vTGluc3BpcmVcbiAgICAgICAgICAgIC8oaHVyZHxsaW51eCkoPzogYXJtXFx3KnwgeDg2XFx3KnwgPykoW1xcd1xcLl0qKS9pLCAgICAgICAgICAgICAgICAgICAgIC8vIEh1cmQvTGludXhcbiAgICAgICAgICAgIC8oZ251KSA/KFtcXHdcXC5dKikvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHTlVcbiAgICAgICAgICAgIC9cXGIoWy1mcmVudG9wY2doc117MCw1fWJzZHxkcmFnb25mbHkpW1xcLyBdPyg/IWFtZHxbaXgzNDZdezEsMn04NikoW1xcd1xcLl0qKS9pLCAvLyBGcmVlQlNEL05ldEJTRC9PcGVuQlNEL1BDLUJTRC9HaG9zdEJTRC9EcmFnb25GbHlcbiAgICAgICAgICAgIC8oaGFpa3UpIChcXHcrKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhaWt1XG4gICAgICAgICAgICBdLCBbTkFNRSwgVkVSU0lPTl0sIFtcbiAgICAgICAgICAgIC8oc3Vub3MpID8oW1xcd1xcLlxcZF0qKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU29sYXJpc1xuICAgICAgICAgICAgXSwgW1tOQU1FLCAnU29sYXJpcyddLCBWRVJTSU9OXSwgW1xuICAgICAgICAgICAgLygoPzpvcGVuKT9zb2xhcmlzKVstXFwvIF0/KFtcXHdcXC5dKikvaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb2xhcmlzXG4gICAgICAgICAgICAvKGFpeCkgKChcXGQpKD89XFwufFxcKXwgKVtcXHdcXC5dKSovaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQUlYXG4gICAgICAgICAgICAvXFxiKGJlb3N8b3NcXC8yfGFtaWdhb3N8bW9ycGhvc3xvcGVudm1zfGZ1Y2hzaWF8aHAtdXh8c2VyZW5pdHlvcykvaSwgLy8gQmVPUy9PUzIvQW1pZ2FPUy9Nb3JwaE9TL09wZW5WTVMvRnVjaHNpYS9IUC1VWC9TZXJlbml0eU9TXG4gICAgICAgICAgICAvKHVuaXgpID8oW1xcd1xcLl0qKS9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVU5JWFxuICAgICAgICAgICAgXSwgW05BTUUsIFZFUlNJT05dXG4gICAgICAgIF1cbiAgICB9O1xuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDb25zdHJ1Y3RvclxuICAgIC8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHZhciBVQVBhcnNlciA9IGZ1bmN0aW9uICh1YSwgZXh0ZW5zaW9ucykge1xuXG4gICAgICAgIGlmICh0eXBlb2YgdWEgPT09IE9CSl9UWVBFKSB7XG4gICAgICAgICAgICBleHRlbnNpb25zID0gdWE7XG4gICAgICAgICAgICB1YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVQVBhcnNlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVUFQYXJzZXIodWEsIGV4dGVuc2lvbnMpLmdldFJlc3VsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9uYXZpZ2F0b3IgPSAodHlwZW9mIHdpbmRvdyAhPT0gVU5ERUZfVFlQRSAmJiB3aW5kb3cubmF2aWdhdG9yKSA/IHdpbmRvdy5uYXZpZ2F0b3IgOiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBfdWEgPSB1YSB8fCAoKF9uYXZpZ2F0b3IgJiYgX25hdmlnYXRvci51c2VyQWdlbnQpID8gX25hdmlnYXRvci51c2VyQWdlbnQgOiBFTVBUWSk7XG4gICAgICAgIHZhciBfdWFjaCA9IChfbmF2aWdhdG9yICYmIF9uYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPyBfbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEgOiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBfcmd4bWFwID0gZXh0ZW5zaW9ucyA/IGV4dGVuZChyZWdleGVzLCBleHRlbnNpb25zKSA6IHJlZ2V4ZXM7XG4gICAgICAgIHZhciBfaXNTZWxmTmF2ID0gX25hdmlnYXRvciAmJiBfbmF2aWdhdG9yLnVzZXJBZ2VudCA9PSBfdWE7XG5cbiAgICAgICAgdGhpcy5nZXRCcm93c2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9icm93c2VyID0ge307XG4gICAgICAgICAgICBfYnJvd3NlcltOQU1FXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9icm93c2VyW1ZFUlNJT05dID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmd4TWFwcGVyLmNhbGwoX2Jyb3dzZXIsIF91YSwgX3JneG1hcC5icm93c2VyKTtcbiAgICAgICAgICAgIF9icm93c2VyW01BSk9SXSA9IG1ham9yaXplKF9icm93c2VyW1ZFUlNJT05dKTtcbiAgICAgICAgICAgIC8vIEJyYXZlLXNwZWNpZmljIGRldGVjdGlvblxuICAgICAgICAgICAgaWYgKF9pc1NlbGZOYXYgJiYgX25hdmlnYXRvciAmJiBfbmF2aWdhdG9yLmJyYXZlICYmIHR5cGVvZiBfbmF2aWdhdG9yLmJyYXZlLmlzQnJhdmUgPT0gRlVOQ19UWVBFKSB7XG4gICAgICAgICAgICAgICAgX2Jyb3dzZXJbTkFNRV0gPSAnQnJhdmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9icm93c2VyO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldENQVSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfY3B1ID0ge307XG4gICAgICAgICAgICBfY3B1W0FSQ0hJVEVDVFVSRV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZ3hNYXBwZXIuY2FsbChfY3B1LCBfdWEsIF9yZ3htYXAuY3B1KTtcbiAgICAgICAgICAgIHJldHVybiBfY3B1O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldERldmljZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfZGV2aWNlID0ge307XG4gICAgICAgICAgICBfZGV2aWNlW1ZFTkRPUl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBfZGV2aWNlW01PREVMXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9kZXZpY2VbVFlQRV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZ3hNYXBwZXIuY2FsbChfZGV2aWNlLCBfdWEsIF9yZ3htYXAuZGV2aWNlKTtcbiAgICAgICAgICAgIGlmIChfaXNTZWxmTmF2ICYmICFfZGV2aWNlW1RZUEVdICYmIF91YWNoICYmIF91YWNoLm1vYmlsZSkge1xuICAgICAgICAgICAgICAgIF9kZXZpY2VbVFlQRV0gPSBNT0JJTEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpUGFkT1Mtc3BlY2lmaWMgZGV0ZWN0aW9uOiBpZGVudGlmaWVkIGFzIE1hYywgYnV0IGhhcyBzb21lIGlPUy1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICAgIGlmIChfaXNTZWxmTmF2ICYmIF9kZXZpY2VbTU9ERUxdID09ICdNYWNpbnRvc2gnICYmIF9uYXZpZ2F0b3IgJiYgdHlwZW9mIF9uYXZpZ2F0b3Iuc3RhbmRhbG9uZSAhPT0gVU5ERUZfVFlQRSAmJiBfbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzICYmIF9uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAyKSB7XG4gICAgICAgICAgICAgICAgX2RldmljZVtNT0RFTF0gPSAnaVBhZCc7XG4gICAgICAgICAgICAgICAgX2RldmljZVtUWVBFXSA9IFRBQkxFVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfZGV2aWNlO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldEVuZ2luZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfZW5naW5lID0ge307XG4gICAgICAgICAgICBfZW5naW5lW05BTUVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgX2VuZ2luZVtWRVJTSU9OXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJneE1hcHBlci5jYWxsKF9lbmdpbmUsIF91YSwgX3JneG1hcC5lbmdpbmUpO1xuICAgICAgICAgICAgcmV0dXJuIF9lbmdpbmU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0T1MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX29zID0ge307XG4gICAgICAgICAgICBfb3NbTkFNRV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBfb3NbVkVSU0lPTl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZ3hNYXBwZXIuY2FsbChfb3MsIF91YSwgX3JneG1hcC5vcyk7XG4gICAgICAgICAgICBpZiAoX2lzU2VsZk5hdiAmJiAhX29zW05BTUVdICYmIF91YWNoICYmIF91YWNoLnBsYXRmb3JtICYmIF91YWNoLnBsYXRmb3JtICE9ICdVbmtub3duJykge1xuICAgICAgICAgICAgICAgIF9vc1tOQU1FXSA9IF91YWNoLnBsYXRmb3JtICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9jaHJvbWUgb3MvaSwgQ0hST01JVU1fT1MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvbWFjb3MvaSwgTUFDX09TKTsgICAgICAgICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfb3M7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0UmVzdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1YSAgICAgIDogdGhpcy5nZXRVQSgpLFxuICAgICAgICAgICAgICAgIGJyb3dzZXIgOiB0aGlzLmdldEJyb3dzZXIoKSxcbiAgICAgICAgICAgICAgICBlbmdpbmUgIDogdGhpcy5nZXRFbmdpbmUoKSxcbiAgICAgICAgICAgICAgICBvcyAgICAgIDogdGhpcy5nZXRPUygpLFxuICAgICAgICAgICAgICAgIGRldmljZSAgOiB0aGlzLmdldERldmljZSgpLFxuICAgICAgICAgICAgICAgIGNwdSAgICAgOiB0aGlzLmdldENQVSgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldFVBID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF91YTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXRVQSA9IGZ1bmN0aW9uICh1YSkge1xuICAgICAgICAgICAgX3VhID0gKHR5cGVvZiB1YSA9PT0gU1RSX1RZUEUgJiYgdWEubGVuZ3RoID4gVUFfTUFYX0xFTkdUSCkgPyB0cmltKHVhLCBVQV9NQVhfTEVOR1RIKSA6IHVhO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2V0VUEoX3VhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFVBUGFyc2VyLlZFUlNJT04gPSBMSUJWRVJTSU9OO1xuICAgIFVBUGFyc2VyLkJST1dTRVIgPSAgZW51bWVyaXplKFtOQU1FLCBWRVJTSU9OLCBNQUpPUl0pO1xuICAgIFVBUGFyc2VyLkNQVSA9IGVudW1lcml6ZShbQVJDSElURUNUVVJFXSk7XG4gICAgVUFQYXJzZXIuREVWSUNFID0gZW51bWVyaXplKFtNT0RFTCwgVkVORE9SLCBUWVBFLCBDT05TT0xFLCBNT0JJTEUsIFNNQVJUVFYsIFRBQkxFVCwgV0VBUkFCTEUsIEVNQkVEREVEXSk7XG4gICAgVUFQYXJzZXIuRU5HSU5FID0gVUFQYXJzZXIuT1MgPSBlbnVtZXJpemUoW05BTUUsIFZFUlNJT05dKTtcblxuICAgIC8vLy8vLy8vLy8vXG4gICAgLy8gRXhwb3J0XG4gICAgLy8vLy8vLy8vL1xuXG4gICAgLy8gY2hlY2sganMgZW52aXJvbm1lbnRcbiAgICBpZiAodHlwZW9mKGV4cG9ydHMpICE9PSBVTkRFRl9UWVBFKSB7XG4gICAgICAgIC8vIG5vZGVqcyBlbnZcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFVOREVGX1RZUEUgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IFVBUGFyc2VyO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydHMuVUFQYXJzZXIgPSBVQVBhcnNlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZXF1aXJlanMgZW52IChvcHRpb25hbClcbiAgICAgICAgaWYgKHR5cGVvZihkZWZpbmUpID09PSBGVU5DX1RZUEUgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAgICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVUFQYXJzZXI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBVTkRFRl9UWVBFKSB7XG4gICAgICAgICAgICAvLyBicm93c2VyIGVudlxuICAgICAgICAgICAgd2luZG93LlVBUGFyc2VyID0gVUFQYXJzZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBqUXVlcnkvWmVwdG8gc3BlY2lmaWMgKG9wdGlvbmFsKVxuICAgIC8vIE5vdGU6XG4gICAgLy8gICBJbiBBTUQgZW52IHRoZSBnbG9iYWwgc2NvcGUgc2hvdWxkIGJlIGtlcHQgY2xlYW4sIGJ1dCBqUXVlcnkgaXMgYW4gZXhjZXB0aW9uLlxuICAgIC8vICAgalF1ZXJ5IGFsd2F5cyBleHBvcnRzIHRvIGdsb2JhbCBzY29wZSwgdW5sZXNzIGpRdWVyeS5ub0NvbmZsaWN0KHRydWUpIGlzIHVzZWQsXG4gICAgLy8gICBhbmQgd2Ugc2hvdWxkIGNhdGNoIHRoYXQuXG4gICAgdmFyICQgPSB0eXBlb2Ygd2luZG93ICE9PSBVTkRFRl9UWVBFICYmICh3aW5kb3cualF1ZXJ5IHx8IHdpbmRvdy5aZXB0byk7XG4gICAgaWYgKCQgJiYgISQudWEpIHtcbiAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBVQVBhcnNlcigpO1xuICAgICAgICAkLnVhID0gcGFyc2VyLmdldFJlc3VsdCgpO1xuICAgICAgICAkLnVhLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIuZ2V0VUEoKTtcbiAgICAgICAgfTtcbiAgICAgICAgJC51YS5zZXQgPSBmdW5jdGlvbiAodWEpIHtcbiAgICAgICAgICAgIHBhcnNlci5zZXRVQSh1YSk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VyLmdldFJlc3VsdCgpO1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAkLnVhW3Byb3BdID0gcmVzdWx0W3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxufSkodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgPyB3aW5kb3cgOiB0aGlzKTtcbiIsIi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyB0aGUgYFR5cGVFcnJvcmAgbWVzc2FnZSBmb3IgXCJGdW5jdGlvbnNcIiBtZXRob2RzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBob3N0IG9iamVjdCBpbiBJRSA8IDkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBob3N0IG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0hvc3RPYmplY3QodmFsdWUpIHtcbiAgLy8gTWFueSBob3N0IG9iamVjdHMgYXJlIGBPYmplY3RgIG9iamVjdHMgdGhhdCBjYW4gY29lcmNlIHRvIHN0cmluZ3NcbiAgLy8gZGVzcGl0ZSBoYXZpbmcgaW1wcm9wZXJseSBkZWZpbmVkIGB0b1N0cmluZ2AgbWV0aG9kcy5cbiAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSAhISh2YWx1ZSArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKSxcbiAgICBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgcmV0dXJuIHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyBkYXRhW2tleV0gIT09IHVuZGVmaW5lZCA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIGdldE1hcERhdGEodGhpcywga2V5KS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gKGlzRnVuY3Rpb24odmFsdWUpIHx8IGlzSG9zdE9iamVjdCh2YWx1ZSkpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBBc3NpZ24gY2FjaGUgdG8gYF8ubWVtb2l6ZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDgtOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheSBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gaXNPYmplY3QodmFsdWUpID8gb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVVJMID0gZXhwb3J0cy5ETlMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHQgPSB2MzU7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTsgLy8gVVRGOCBlc2NhcGVcblxuICBjb25zdCBieXRlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgYnl0ZXMucHVzaChzdHIuY2hhckNvZGVBdChpKSk7XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmNvbnN0IEROUyA9ICc2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xuZXhwb3J0cy5ETlMgPSBETlM7XG5jb25zdCBVUkwgPSAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuVVJMID0gVVJMO1xuXG5mdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9ICgwLCBfcGFyc2UuZGVmYXVsdCkobmFtZXNwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoKChfbmFtZXNwYWNlID0gbmFtZXNwYWNlKSA9PT0gbnVsbCB8fCBfbmFtZXNwYWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmFtZXNwYWNlLmxlbmd0aCkgIT09IDE2KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ05hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSknKTtcbiAgICB9IC8vIENvbXB1dGUgaGFzaCBvZiBuYW1lc3BhY2UgYW5kIHZhbHVlLCBQZXIgNC4zXG4gICAgLy8gRnV0dXJlOiBVc2Ugc3ByZWFkIHN5bnRheCB3aGVuIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLCBlLmcuIGBieXRlcyA9XG4gICAgLy8gaGFzaGZ1bmMoWy4uLm5hbWVzcGFjZSwgLi4uIHZhbHVlXSlgXG5cblxuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWUubGVuZ3RoKTtcbiAgICBieXRlcy5zZXQobmFtZXNwYWNlKTtcbiAgICBieXRlcy5zZXQodmFsdWUsIG5hbWVzcGFjZS5sZW5ndGgpO1xuICAgIGJ5dGVzID0gaGFzaGZ1bmMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gYnl0ZXNbNl0gJiAweDBmIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IGJ5dGVzWzhdICYgMHgzZiB8IDB4ODA7XG5cbiAgICBpZiAoYnVmKSB7XG4gICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGJ5dGVzKTtcbiAgfSAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcblxuXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZXJyKSB7fSAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuXG5cbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iLCIoZnVuY3Rpb24oKXtcbiAgY29uc3QgX2dsb2JhbCA9IHRoaXM7XG5cbiAgY29uc3QgY3JlYXRlQnVmZmVyID0gKHZhbCkgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbClcblxuICAvKipcbiAgICogSlMgSW1wbGVtZW50YXRpb24gb2YgTXVybXVySGFzaDJcbiAgICpcbiAgICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmdhcnkuY291cnRAZ21haWwuY29tXCI+R2FyeSBDb3VydDwvYT5cbiAgICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuICAgKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86YWFwcGxlYnlAZ21haWwuY29tXCI+QXVzdGluIEFwcGxlYnk8L2E+XG4gICAqIEBzZWUgaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9tdXJtdXJoYXNoL1xuICAgKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXkgfCBzdHJpbmd9IHN0ciBBU0NJSSBvbmx5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWVkIFBvc2l0aXZlIGludGVnZXIgb25seVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IDMyLWJpdCBwb3NpdGl2ZSBpbnRlZ2VyIGhhc2hcbiAgICovXG4gIGZ1bmN0aW9uIE11cm11ckhhc2hWMihzdHIsIHNlZWQpIHtcbiAgICBpZiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycpIHN0ciA9IGNyZWF0ZUJ1ZmZlcihzdHIpO1xuICAgIGxldFxuICAgICAgbCA9IHN0ci5sZW5ndGgsXG4gICAgICBoID0gc2VlZCBeIGwsXG4gICAgICBpID0gMCxcbiAgICAgIGs7XG5cbiAgICB3aGlsZSAobCA+PSA0KSB7XG4gICAgICBrID1cbiAgICAgICAgKChzdHJbaV0gJiAweGZmKSkgfFxuICAgICAgICAoKHN0clsrK2ldICYgMHhmZikgPDwgOCkgfFxuICAgICAgICAoKHN0clsrK2ldICYgMHhmZikgPDwgMTYpIHxcbiAgICAgICAgKChzdHJbKytpXSAmIDB4ZmYpIDw8IDI0KTtcblxuICAgICAgayA9ICgoKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoayA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSk7XG4gICAgICBrIF49IGsgPj4+IDI0O1xuICAgICAgayA9ICgoKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoayA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSk7XG5cbiAgICBoID0gKCgoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1KSArICgoKChoID4+PiAxNikgKiAweDViZDFlOTk1KSAmIDB4ZmZmZikgPDwgMTYpKSBeIGs7XG5cbiAgICAgIGwgLT0gNDtcbiAgICAgICsraTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGwpIHtcbiAgICBjYXNlIDM6IGggXj0gKHN0cltpICsgMl0gJiAweGZmKSA8PCAxNjtcbiAgICBjYXNlIDI6IGggXj0gKHN0cltpICsgMV0gJiAweGZmKSA8PCA4O1xuICAgIGNhc2UgMTogaCBePSAoc3RyW2ldICYgMHhmZik7XG4gICAgICAgICAgICBoID0gKCgoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1KSArICgoKChoID4+PiAxNikgKiAweDViZDFlOTk1KSAmIDB4ZmZmZikgPDwgMTYpKTtcbiAgICB9XG5cbiAgICBoIF49IGggPj4+IDEzO1xuICAgIGggPSAoKChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuICAgIGggXj0gaCA+Pj4gMTU7XG5cbiAgICByZXR1cm4gaCA+Pj4gMDtcbiAgfTtcblxuICAvKlxuICAgKiBKUyBJbXBsZW1lbnRhdGlvbiBvZiBNdXJtdXJIYXNoMyAocjEzNikgKGFzIG9mIE1heSAyMCwgMjAxMSlcbiAgICpcbiAgICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmdhcnkuY291cnRAZ21haWwuY29tXCI+R2FyeSBDb3VydDwvYT5cbiAgICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuICAgKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86YWFwcGxlYnlAZ21haWwuY29tXCI+QXVzdGluIEFwcGxlYnk8L2E+XG4gICAqIEBzZWUgaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9tdXJtdXJoYXNoL1xuICAgKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXkgfCBzdHJpbmd9IGtleSBBU0NJSSBvbmx5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWVkIFBvc2l0aXZlIGludGVnZXIgb25seVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IDMyLWJpdCBwb3NpdGl2ZSBpbnRlZ2VyIGhhc2hcbiAgICovXG4gIGZ1bmN0aW9uIE11cm11ckhhc2hWMyhrZXksIHNlZWQpIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIGtleSA9IGNyZWF0ZUJ1ZmZlcihrZXkpO1xuXG4gICAgbGV0IHJlbWFpbmRlciwgYnl0ZXMsIGgxLCBoMWIsIGMxLCBjMWIsIGMyLCBjMmIsIGsxLCBpO1xuXG4gICAgcmVtYWluZGVyID0ga2V5Lmxlbmd0aCAmIDM7IC8vIGtleS5sZW5ndGggJSA0XG4gICAgYnl0ZXMgPSBrZXkubGVuZ3RoIC0gcmVtYWluZGVyO1xuICAgIGgxID0gc2VlZDtcbiAgICBjMSA9IDB4Y2M5ZTJkNTE7XG4gICAgYzIgPSAweDFiODczNTkzO1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBieXRlcykge1xuICAgICAgICBrMSA9XG4gICAgICAgICAgKChrZXlbaV0gJiAweGZmKSkgfFxuICAgICAgICAgICgoa2V5WysraV0gJiAweGZmKSA8PCA4KSB8XG4gICAgICAgICAgKChrZXlbKytpXSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgKChrZXlbKytpXSAmIDB4ZmYpIDw8IDI0KTtcbiAgICAgICsraTtcblxuICAgICAgazEgPSAoKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICAgIGsxID0gKGsxIDw8IDE1KSB8IChrMSA+Pj4gMTcpO1xuICAgICAgazEgPSAoKCgoazEgJiAweGZmZmYpICogYzIpICsgKCgoKGsxID4+PiAxNikgKiBjMikgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblxuICAgICAgaDEgXj0gazE7XG4gICAgICAgICAgaDEgPSAoaDEgPDwgMTMpIHwgKGgxID4+PiAxOSk7XG4gICAgICBoMWIgPSAoKCgoaDEgJiAweGZmZmYpICogNSkgKyAoKCgoaDEgPj4+IDE2KSAqIDUpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG4gICAgICBoMSA9ICgoKGgxYiAmIDB4ZmZmZikgKyAweDZiNjQpICsgKCgoKGgxYiA+Pj4gMTYpICsgMHhlNjU0KSAmIDB4ZmZmZikgPDwgMTYpKTtcbiAgICB9XG5cbiAgICBrMSA9IDA7XG5cbiAgICBzd2l0Y2ggKHJlbWFpbmRlcikge1xuICAgICAgY2FzZSAzOiBrMSBePSAoa2V5W2kgKyAyXSAmIDB4ZmYpIDw8IDE2O1xuICAgICAgY2FzZSAyOiBrMSBePSAoa2V5W2kgKyAxXSAmIDB4ZmYpIDw8IDg7XG4gICAgICBjYXNlIDE6IGsxIF49IChrZXlbaV0gJiAweGZmKTtcblxuICAgICAgazEgPSAoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSAmIDB4ZmZmZmZmZmY7XG4gICAgICBrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcbiAgICAgIGsxID0gKCgoazEgJiAweGZmZmYpICogYzIpICsgKCgoKGsxID4+PiAxNikgKiBjMikgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgICAgaDEgXj0gazE7XG4gICAgfVxuXG4gICAgaDEgXj0ga2V5Lmxlbmd0aDtcblxuICAgIGgxIF49IGgxID4+PiAxNjtcbiAgICBoMSA9ICgoKGgxICYgMHhmZmZmKSAqIDB4ODVlYmNhNmIpICsgKCgoKGgxID4+PiAxNikgKiAweDg1ZWJjYTZiKSAmIDB4ZmZmZikgPDwgMTYpKSAmIDB4ZmZmZmZmZmY7XG4gICAgaDEgXj0gaDEgPj4+IDEzO1xuICAgIGgxID0gKCgoKGgxICYgMHhmZmZmKSAqIDB4YzJiMmFlMzUpICsgKCgoKGgxID4+PiAxNikgKiAweGMyYjJhZTM1KSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuICAgIGgxIF49IGgxID4+PiAxNjtcblxuICAgIHJldHVybiBoMSA+Pj4gMDtcbiAgfVxuXG4gIGNvbnN0IG11cm11ciA9IE11cm11ckhhc2hWMztcbiAgbXVybXVyLnYyID0gTXVybXVySGFzaFYyO1xuICBtdXJtdXIudjMgPSBNdXJtdXJIYXNoVjM7XG5cbiAgaWYgKHR5cGVvZihtb2R1bGUpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBtdXJtdXI7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgX3ByZXZpb3VzUm9vdCA9IF9nbG9iYWwubXVybXVyO1xuICAgIG11cm11ci5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBfZ2xvYmFsLm11cm11ciA9IF9wcmV2aW91c1Jvb3Q7XG4gICAgICByZXR1cm4gbXVybXVyO1xuICAgIH1cbiAgICBfZ2xvYmFsLm11cm11ciA9IG11cm11cjtcbiAgfVxufSgpKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9kZWZhdWx0ID0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfRW52aXJvbm1lbnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL0Vudmlyb25tZW50XCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5jbGFzcyBBcG9waGVuaWFMb2dnZXIge1xuICBzdGF0aWMgaW5pdGlhbGl6ZShjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IEFwb3BoZW5pYUxvZ2dlcihjb25maWcpO1xuICB9XG4gIGFzeW5jIHNlbmQoZXZlbnROYW1lKSB7XG4gICAgbGV0IGZpZWxkcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQgPT09ICdkZXYnKSB7XG4gICAgICBpZiAoIWV2ZW50TmFtZSB8fCB0eXBlb2YgZXZlbnROYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZW5kIGxvZyB3aXRob3V0IGV2ZW50IG5hbWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcHJlcGFyZWRSZWNvcmQgPSB0aGlzLl9wcmVwYXJlUmVjb3JkKGV2ZW50TmFtZSwgZmllbGRzKTtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudCA9PT0gJ2RldicpIHtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5ejIExvZ2dseSBNZXNzYWdlOiAnLCBwcmVwYXJlZFJlY29yZCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zZW5kVG9Mb2dTZXJ2aWNlKHByZXBhcmVkUmVjb3JkKTtcbiAgfVxuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLl9lbmZvcmNlQ29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5hcHBJZCA9IGNvbmZpZy5hcHBJZDtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gX0Vudmlyb25tZW50LmRlZmF1bHQuZ2V0KCk7XG4gICAgdGhpcy5sb2dTZXJ2aWNlVXJsID0gYGh0dHBzOi8vYXBvcGhlbmlhLiR7X0Vudmlyb25tZW50LmRlZmF1bHQucHJlZml4KCl9cmFtc2V5c29sdXRpb25zLm5ldC92MWA7XG4gICAgdGhpcy5sb2dBcGlLZXkgPSBjb25maWcuYXBpS2V5O1xuICB9XG4gIF9wcmVwYXJlUmVjb3JkKGV2ZW50TmFtZSwgcmVjb3JkKSB7XG4gICAgcmVjb3JkLmFjdGlvbiA9IGV2ZW50TmFtZTtcbiAgICByZWNvcmQuYXBwX2lkID0gdGhpcy5hcHBJZDtcbiAgICByZWNvcmQudGltZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG4gIF9lbmZvcmNlQ29uZmlnKGNvbmZpZykge1xuICAgIGlmICghY29uZmlnLmFwcElkIHx8ICFjb25maWcuYXBpS2V5KSB7XG4gICAgICBsZXQgbWlzc2luZ1NldHRpbmdzRXJyb3IgPSAnTG9ncyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGUgZm9sbG93aW5nIHNldHRpbmdzOiBgYXBwSWRgIGFuZCBgYXBpS2V5YC4nO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1pc3NpbmdTZXR0aW5nc0Vycm9yKTtcbiAgICB9XG4gIH1cbiAgX3NlbmRUb0xvZ1NlcnZpY2UocmVjb3JkKSB7XG4gICAgcmV0dXJuIGZldGNoKHRoaXMubG9nU2VydmljZVVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBrZWVwYWxpdmU6IHRydWUsXG4gICAgICBwcmlvcml0eTogJ2xvdycsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICd4LWFwaS1rZXknOiB0aGlzLmxvZ0FwaUtleVxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcmVjb3JkczogW3JlY29yZF1cbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IEFwb3BoZW5pYUxvZ2dlcjtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRGaWVsZE5hbWUgPSBleHBvcnRzLmdldEZpZWxkSW5kZXggPSB2b2lkIDA7XG5jb25zdCBmaWVsZE5hbWVzID0ge1xuICAgIGZ1bGxOYW1lOiAvZnVsbFstX10/bmFtZXxebmFtZS9pLFxuICAgIGZpcnN0TmFtZTogL2ZpcnN0W18tXT9uYW1lL2ksXG4gICAgbGFzdE5hbWU6IC9sYXN0W18tXT9uYW1lL2ksXG4gICAgZW1haWw6IC9lbWFpbC9pLFxuICAgIHBob25lOiAvcGhvbmV8XnRlbCQvaSxcbiAgICBhZGRyZXNzOiAvYWRkcmVzc3xzdHJlZXQvaSxcbiAgICB6aXBjb2RlOiAvcG9zdChhbCk/W18tXT9jb2RlfHppcC9pLFxuICAgIGNpdHk6IC9jaXR5L2ksXG4gICAgc3RhdGU6IC8oXnxbXmVdKXN0YXRlL2ksXG4gICAgcmFkaW86IC9yYWRpby9pLFxuICAgIGNoZWNrYm94OiAvY2hlY2tib3gvaSxcbiAgICBzZWxlY3Q6IC9zZWxlY3QvaSxcbiAgICB0ZXh0YXJlYTogL3RleHRhcmVhL2ksXG4gICAgdGV4dDogL3RleHQvaSxcbiAgICBpbnB1dDogL2lucHV0L2ksXG59O1xuY29uc3QgZ2V0RmllbGRJbmRleCA9ICh0YXJnZXRGaWVsZCwgZm9ybUVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWZvcm1FbGVtZW50KVxuICAgICAgICByZXR1cm4gMDtcbiAgICBjb25zdCBmaWVsZHMgPSBBcnJheS5mcm9tKGZvcm1FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJJTlBVVCxTRUxFQ1QsVEVYVEFSRUFcIikpO1xuICAgIHJldHVybiBmaWVsZHMuaW5kZXhPZih0YXJnZXRGaWVsZCkgKyAxO1xufTtcbmV4cG9ydHMuZ2V0RmllbGRJbmRleCA9IGdldEZpZWxkSW5kZXg7XG5jb25zdCBnZXRGaWVsZE5hbWUgPSAodGFyZ2V0RmllbGQpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmllbGROYW1lcykuZmluZCgobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gKGZpZWxkTmFtZXNbbmFtZV0udGVzdCh0YXJnZXRGaWVsZC5uYW1lKSB8fFxuICAgICAgICAgICAgZmllbGROYW1lc1tuYW1lXS50ZXN0KHRhcmdldEZpZWxkLnR5cGUpIHx8XG4gICAgICAgICAgICBmaWVsZE5hbWVzW25hbWVdLnRlc3QodGFyZ2V0RmllbGQubm9kZU5hbWUpKTtcbiAgICB9KTtcbn07XG5leHBvcnRzLmdldEZpZWxkTmFtZSA9IGdldEZpZWxkTmFtZTtcbiIsIlwidXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBlLHQ9cmVxdWlyZShcInV1aWRcIikscj1yZXF1aXJlKFwianNvbi1zY2hlbWFcIiksaT0oZT1yZXF1aXJlKFwibXVybXVyaGFzaFwiKSkmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZS5kZWZhdWx0OmUsbj1yZXF1aXJlKFwidWEtcGFyc2VyLWpzXCIpLG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4obz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfTtmdW5jdGlvbiBzKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIrU3RyaW5nKHQpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1vKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfXZhciBhPWZ1bmN0aW9uKCl7cmV0dXJuKGE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MSxpPWFyZ3VtZW50cy5sZW5ndGg7cjxpO3IrKylmb3IodmFyIG4gaW4gdD1hcmd1bWVudHNbcl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiB1KGUsdCxyLGkpe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihuLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e3UoaS5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXt1KGkudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHUoZSl7dmFyIHQ7ZS5kb25lP24oZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9dSgoaT1pLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcixpLG4sbyxzPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm5bMF0pdGhyb3cgblsxXTtyZXR1cm4gblsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvPXtuZXh0OmEoMCksdGhyb3c6YSgxKSxyZXR1cm46YSgyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIGEoYSl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBmdW5jdGlvbihhKXtpZihyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7byYmKG89MCxhWzBdJiYocz0wKSksczspdHJ5e2lmKHI9MSxpJiYobj0yJmFbMF0/aS5yZXR1cm46YVswXT9pLnRocm93fHwoKG49aS5yZXR1cm4pJiZuLmNhbGwoaSksMCk6aS5uZXh0KSYmIShuPW4uY2FsbChpLGFbMV0pKS5kb25lKXJldHVybiBuO3N3aXRjaChpPTAsbiYmKGE9WzImYVswXSxuLnZhbHVlXSksYVswXSl7Y2FzZSAwOmNhc2UgMTpuPWE7YnJlYWs7Y2FzZSA0OnJldHVybiBzLmxhYmVsKysse3ZhbHVlOmFbMV0sZG9uZTohMX07Y2FzZSA1OnMubGFiZWwrKyxpPWFbMV0sYT1bMF07Y29udGludWU7Y2FzZSA3OmE9cy5vcHMucG9wKCkscy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShuPXMudHJ5cywobj1uLmxlbmd0aD4wJiZuW24ubGVuZ3RoLTFdKXx8NiE9PWFbMF0mJjIhPT1hWzBdKSl7cz0wO2NvbnRpbnVlfWlmKDM9PT1hWzBdJiYoIW58fGFbMV0+blswXSYmYVsxXTxuWzNdKSl7cy5sYWJlbD1hWzFdO2JyZWFrfWlmKDY9PT1hWzBdJiZzLmxhYmVsPG5bMV0pe3MubGFiZWw9blsxXSxuPWE7YnJlYWt9aWYobiYmcy5sYWJlbDxuWzJdKXtzLmxhYmVsPW5bMl0scy5vcHMucHVzaChhKTticmVha31uWzJdJiZzLm9wcy5wb3AoKSxzLnRyeXMucG9wKCk7Y29udGludWV9YT10LmNhbGwoZSxzKX1jYXRjaChlKXthPVs2LGVdLGk9MH1maW5hbGx5e3I9bj0wfWlmKDUmYVswXSl0aHJvdyBhWzFdO3JldHVybnt2YWx1ZTphWzBdP2FbMV06dm9pZCAwLGRvbmU6ITB9fShbYSx1XSl9fX1mdW5jdGlvbiBjKGUsdCxyKXtpZihyfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIGksbj0wLG89dC5sZW5ndGg7bjxvO24rKykhaSYmbiBpbiB0fHwoaXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLG4pKSxpW25dPXRbbl0pO3JldHVybiBlLmNvbmNhdChpfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9XCJmdW5jdGlvblwiPT10eXBlb2YgU3VwcHJlc3NlZEVycm9yJiZTdXBwcmVzc2VkRXJyb3I7dmFyIHA9bmV3KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuaGFuZGxlRXJyb3I9ZnVuY3Rpb24oZSl7fSxlfSgpKTtmdW5jdGlvbiBkKCl7cmV0dXJuIHB9dmFyIGY9TWF0aC5wb3coMiw1Myk7ZnVuY3Rpb24gZyhlKXtmb3IodmFyIHQ9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTtpZighZSlyZXR1cm57fTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuYXNzaWduKXJldHVybiBPYmplY3QuYXNzaWduLmFwcGx5KE9iamVjdCxjKFtlXSx0LCExKSk7Zm9yKHZhciBpPU9iamVjdChlKSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBvPXRbbl07aWYobnVsbCE9bylmb3IodmFyIHMgaW4gbylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobyxzKSYmKGlbc109b1tzXSl9cmV0dXJuIGl9ZnVuY3Rpb24gRShlLHQpe3JldHVybiBlP1IoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdF19KSk6e319ZnVuY3Rpb24gaCgpe3JldHVybiB0LnY0KCl9ZnVuY3Rpb24gSSgpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfWZ1bmN0aW9uIF8oZSx0KXtmb3IodmFyIHI9ITEsaT1PYmplY3Qua2V5cyhlKSxuPTA7bjxpLmxlbmd0aDtuKyspaWYodD09PWVbaVtuXV0pe3I9ITA7YnJlYWt9cmV0dXJuIHJ9ZnVuY3Rpb24gdihlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKX1mdW5jdGlvbiB5KGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVyblt0LGVbdF1dfSkpfWZ1bmN0aW9uIE8oZSx0KXtmb3IodmFyIHIsaT0wLG49ZTtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtpZih0KG8pKXtyPW87YnJlYWt9fXJldHVybiByfWZ1bmN0aW9uIFIoZSx0KXt2YXIgcj17fTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgaT10KGUpO3JbaV09ZX0pKSxyfWZ1bmN0aW9uIE4oZSl7Zm9yKHZhciB0PVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07dmFyIGk9MDtyZXR1cm4gZS5yZXBsYWNlKC8lcy9nLChmdW5jdGlvbigpe3ZhciBlPXRbaSsrXSxyPXR5cGVvZiBlO3JldHVyblwiZnVuY3Rpb25cIj09PXI/ZSgpOlwic3RyaW5nXCI9PT1yP2U6U3RyaW5nKGUpfSkpfWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm4gZS5sZW5ndGg9PT10Lmxlbmd0aCYmZS5ldmVyeSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXRbcl19KSl9dmFyIG0sQT17YXNzaWduOmcsY2hlY2tBcnJheUVxdWFsaXR5OlQsY3VycmVudFRpbWVzdGFtcDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKChuZXcgRGF0ZSkuZ2V0VGltZSgpKX0saXNTYWZlSW50ZWdlcjpmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmTWF0aC5hYnMoZSk8PWZ9LGtleUJ5OkUsdXVpZDpoLGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSxnZXRUaW1lc3RhbXA6SSxpc1ZhbGlkRW51bTpfLGdyb3VwQnk6ZnVuY3Rpb24oZSx0KXt2YXIgcj17fTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgaT10KGUpO3JbaV09cltpXXx8W10scltpXS5wdXNoKGUpfSkpLHYocil9LG9iamVjdFZhbHVlczp2LG9iamVjdEVudHJpZXM6eSxmaW5kOk8sa2V5QnlVdGlsOlIsc3ByaW50ZjpOfTsobT1leHBvcnRzLkxvZ0xldmVsfHwoZXhwb3J0cy5Mb2dMZXZlbD17fSkpW20uTk9UU0VUPTBdPVwiTk9UU0VUXCIsbVttLkRFQlVHPTFdPVwiREVCVUdcIixtW20uSU5GTz0yXT1cIklORk9cIixtW20uV0FSTklORz0zXT1cIldBUk5JTkdcIixtW20uRVJST1I9NF09XCJFUlJPUlwiO3ZhciBEPXtOT1RTRVQ6MCxERUJVRzoxLElORk86MixXQVJOSU5HOjMsRVJST1I6NH07ZnVuY3Rpb24gUyhlKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZT9lOihcIldBUk5cIj09PShlPWUudG9VcHBlckNhc2UoKSkmJihlPVwiV0FSTklOR1wiKSxEW2VdP0RbZV06ZSl9dmFyIEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5kZWZhdWx0TG9nZ2VyRmFjYWRlPW5ldyBiLHRoaXMubG9nZ2Vycz17fX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0TG9nZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiBlPyh0aGlzLmxvZ2dlcnNbZV18fCh0aGlzLmxvZ2dlcnNbZV09bmV3IGIoe21lc3NhZ2VQcmVmaXg6ZX0pKSx0aGlzLmxvZ2dlcnNbZV0pOnRoaXMuZGVmYXVsdExvZ2dlckZhY2FkZX0sZX0oKSxVPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5sb2dMZXZlbD1leHBvcnRzLkxvZ0xldmVsLk5PVFNFVCx2b2lkIDAhPT1lLmxvZ0xldmVsJiZfKGV4cG9ydHMuTG9nTGV2ZWwsZS5sb2dMZXZlbCkmJnRoaXMuc2V0TG9nTGV2ZWwoZS5sb2dMZXZlbCksdGhpcy5sb2dUb0NvbnNvbGU9dm9pZCAwPT09ZS5sb2dUb0NvbnNvbGV8fCEhZS5sb2dUb0NvbnNvbGUsdGhpcy5wcmVmaXg9dm9pZCAwIT09ZS5wcmVmaXg/ZS5wcmVmaXg6XCJbT1BUSU1JWkVMWV1cIn1yZXR1cm4gZS5wcm90b3R5cGUubG9nPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5zaG91bGRMb2coZSkmJnRoaXMubG9nVG9Db25zb2xlKXt2YXIgcj1cIlwiLmNvbmNhdCh0aGlzLnByZWZpeCxcIiAtIFwiKS5jb25jYXQodGhpcy5nZXRMb2dMZXZlbE5hbWUoZSksXCIgXCIpLmNvbmNhdCh0aGlzLmdldFRpbWUoKSxcIiBcIikuY29uY2F0KHQpO3RoaXMuY29uc29sZUxvZyhlLFtyXSl9fSxlLnByb3RvdHlwZS5zZXRMb2dMZXZlbD1mdW5jdGlvbihlKXtlPVMoZSksXyhleHBvcnRzLkxvZ0xldmVsLGUpJiZ2b2lkIDAhPT1lP3RoaXMubG9nTGV2ZWw9ZTp0aGlzLmxvZ0xldmVsPWV4cG9ydHMuTG9nTGV2ZWwuRVJST1J9LGUucHJvdG90eXBlLmdldFRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLnRvSVNPU3RyaW5nKCl9LGUucHJvdG90eXBlLnNob3VsZExvZz1mdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5sb2dMZXZlbH0sZS5wcm90b3R5cGUuZ2V0TG9nTGV2ZWxOYW1lPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIGV4cG9ydHMuTG9nTGV2ZWwuREVCVUc6cmV0dXJuXCJERUJVR1wiO2Nhc2UgZXhwb3J0cy5Mb2dMZXZlbC5JTkZPOnJldHVyblwiSU5GTyBcIjtjYXNlIGV4cG9ydHMuTG9nTGV2ZWwuV0FSTklORzpyZXR1cm5cIldBUk4gXCI7Y2FzZSBleHBvcnRzLkxvZ0xldmVsLkVSUk9SOnJldHVyblwiRVJST1JcIjtkZWZhdWx0OnJldHVyblwiTk9UU0VUXCJ9fSxlLnByb3RvdHlwZS5jb25zb2xlTG9nPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgZXhwb3J0cy5Mb2dMZXZlbC5ERUJVRzpjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLHQpO2JyZWFrO2Nhc2UgZXhwb3J0cy5Mb2dMZXZlbC5JTkZPOmNvbnNvbGUuaW5mby5hcHBseShjb25zb2xlLHQpO2JyZWFrO2Nhc2UgZXhwb3J0cy5Mb2dMZXZlbC5XQVJOSU5HOmNvbnNvbGUud2Fybi5hcHBseShjb25zb2xlLHQpO2JyZWFrO2Nhc2UgZXhwb3J0cy5Mb2dMZXZlbC5FUlJPUjpjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUsdCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLHQpfX0sZX0oKSxDPWV4cG9ydHMuTG9nTGV2ZWwuTk9UU0VULFA9bnVsbCxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5tZXNzYWdlUHJlZml4PVwiXCIsZS5tZXNzYWdlUHJlZml4JiYodGhpcy5tZXNzYWdlUHJlZml4PWUubWVzc2FnZVByZWZpeCl9cmV0dXJuIGUucHJvdG90eXBlLmxvZz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKylyW2ktMl09YXJndW1lbnRzW2ldO3RoaXMuaW50ZXJuYWxMb2coUyhlKSx7bWVzc2FnZTp0LHNwbGF0OnJ9KX0sZS5wcm90b3R5cGUuaW5mbz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLm5hbWVkTG9nKGV4cG9ydHMuTG9nTGV2ZWwuSU5GTyxlLHQpfSxlLnByb3RvdHlwZS5kZWJ1Zz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLm5hbWVkTG9nKGV4cG9ydHMuTG9nTGV2ZWwuREVCVUcsZSx0KX0sZS5wcm90b3R5cGUud2Fybj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLm5hbWVkTG9nKGV4cG9ydHMuTG9nTGV2ZWwuV0FSTklORyxlLHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLm5hbWVkTG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsZSx0KX0sZS5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVyblwiXCIuY29uY2F0KHRoaXMubWVzc2FnZVByZWZpeD90aGlzLm1lc3NhZ2VQcmVmaXgrXCI6IFwiOlwiXCIpLmNvbmNhdChOLmFwcGx5KHZvaWQgMCxjKFtlLm1lc3NhZ2VdLGUuc3BsYXQsITEpKSl9LGUucHJvdG90eXBlLmludGVybmFsTG9nPWZ1bmN0aW9uKGUsdCl7UCYmKGU8Q3x8KFAubG9nKGUsdGhpcy5mb3JtYXQodCkpLHQuZXJyb3ImJnQuZXJyb3IgaW5zdGFuY2VvZiBFcnJvciYmZCgpLmhhbmRsZUVycm9yKHQuZXJyb3IpKSl9LGUucHJvdG90eXBlLm5hbWVkTG9nPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaTtpZih0IGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIHQ9KGk9dCkubWVzc2FnZSx2b2lkIHRoaXMuaW50ZXJuYWxMb2coZSx7ZXJyb3I6aSxtZXNzYWdlOnQsc3BsYXQ6cn0pO2lmKDAhPT1yLmxlbmd0aCl7dmFyIG49cltyLmxlbmd0aC0xXTtuIGluc3RhbmNlb2YgRXJyb3ImJihpPW4sci5zcGxpY2UoLTEpKSx0aGlzLmludGVybmFsTG9nKGUse21lc3NhZ2U6dCxlcnJvcjppLHNwbGF0OnJ9KX1lbHNlIHRoaXMuaW50ZXJuYWxMb2coZSx7bWVzc2FnZTp0LHNwbGF0OnJ9KX0sZX0oKSxWPW5ldyBMO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIFYuZ2V0TG9nZ2VyKGUpfWZ1bmN0aW9uIEYoZSl7UD1lfXZhciB4PXtzZXRMb2dMZXZlbDpmdW5jdGlvbihlKXtlPVMoZSksQz1fKGV4cG9ydHMuTG9nTGV2ZWwsZSkmJnZvaWQgMCE9PWU/ZTpleHBvcnRzLkxvZ0xldmVsLkVSUk9SfSxzZXRMb2dIYW5kbGVyOkZ9O2Z1bmN0aW9uIGsoZSx0KXt2YXIgcj1lLmNvbnRleHQsaT10LmNvbnRleHQ7cmV0dXJuIHIuYWNjb3VudElkPT09aS5hY2NvdW50SWQmJnIucHJvamVjdElkPT09aS5wcm9qZWN0SWQmJnIuY2xpZW50TmFtZT09PWkuY2xpZW50TmFtZSYmci5jbGllbnRWZXJzaW9uPT09aS5jbGllbnRWZXJzaW9uJiZyLnJldmlzaW9uPT09aS5yZXZpc2lvbiYmci5hbm9ueW1pemVJUD09PWkuYW5vbnltaXplSVAmJnIuYm90RmlsdGVyaW5nPT09aS5ib3RGaWx0ZXJpbmd9dmFyIHcsRz1NKFwiRXZlbnRQcm9jZXNzb3JcIiksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS50aW1lb3V0LHI9ZS5jYWxsYmFjazt0aGlzLnRpbWVvdXQ9TWF0aC5tYXgodCwwKSx0aGlzLmNhbGxiYWNrPXJ9cmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy50aW1lb3V0SWQ9c2V0VGltZW91dCh0aGlzLmNhbGxiYWNrLHRoaXMudGltZW91dCl9LGUucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt0aGlzLnN0b3AoKSx0aGlzLnN0YXJ0KCl9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLnRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKX0sZX0oKSxLPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lLnNpbms7dGhpcy5zaW5rPXR9cmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxlLnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0aW9uKGUpe3RoaXMuc2luayhbZV0pfSxlfSgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PWUuZmx1c2hJbnRlcnZhbCxyPWUubWF4UXVldWVTaXplLGk9ZS5zaW5rLG49ZS5jbG9zaW5nU2luayxvPWUuYmF0Y2hDb21wYXJhdG9yO3RoaXMuYnVmZmVyPVtdLHRoaXMubWF4UXVldWVTaXplPU1hdGgubWF4KHIsMSksdGhpcy5zaW5rPWksdGhpcy5jbG9zaW5nU2luaz1uLHRoaXMuYmF0Y2hDb21wYXJhdG9yPW8sdGhpcy50aW1lcj1uZXcgQih7Y2FsbGJhY2s6dGhpcy5mbHVzaC5iaW5kKHRoaXMpLHRpbWVvdXQ6dH0pLHRoaXMuc3RhcnRlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGVkPSEwLFByb21pc2UucmVzb2x2ZSgpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5zdGFydGVkPSExO3ZhciBlPXRoaXMuY2xvc2luZ1Npbms/dGhpcy5jbG9zaW5nU2luayh0aGlzLmJ1ZmZlcik6dGhpcy5zaW5rKHRoaXMuYnVmZmVyKTtyZXR1cm4gdGhpcy5idWZmZXI9W10sdGhpcy50aW1lci5zdG9wKCksZX0sZS5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbihlKXtpZih0aGlzLnN0YXJ0ZWQpe3ZhciB0PXRoaXMuYnVmZmVyWzBdO3QmJiF0aGlzLmJhdGNoQ29tcGFyYXRvcih0LGUpJiZ0aGlzLmZsdXNoKCksMD09PXRoaXMuYnVmZmVyLmxlbmd0aCYmdGhpcy50aW1lci5yZWZyZXNoKCksdGhpcy5idWZmZXIucHVzaChlKSx0aGlzLmJ1ZmZlci5sZW5ndGg+PXRoaXMubWF4UXVldWVTaXplJiZ0aGlzLmZsdXNoKCl9ZWxzZSBHLndhcm4oXCJRdWV1ZSBpcyBzdG9wcGVkLCBub3QgYWNjZXB0aW5nIGV2ZW50XCIpfSxlLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe3RoaXMuc2luayh0aGlzLmJ1ZmZlciksdGhpcy5idWZmZXI9W10sdGhpcy50aW1lci5zdG9wKCl9LGV9KCkscT17Tk9UU0VUOjAsREVCVUc6MSxJTkZPOjIsV0FSTklORzozLEVSUk9SOjR9LEg9e0JST1dTRVJfT0RQX01BTkFHRVJfSU5JVElBTElaQVRJT05fRkFJTEVEOlwiJXM6IEVycm9yIGluaXRpYWxpemluZyBCcm93c2VyIE9EUCBNYW5hZ2VyLlwiLENPTkRJVElPTl9FVkFMVUFUT1JfRVJST1I6XCIlczogRXJyb3IgZXZhbHVhdGluZyBhdWRpZW5jZSBjb25kaXRpb24gb2YgdHlwZSAlczogJXNcIixEQVRBRklMRV9BTkRfU0RLX0tFWV9NSVNTSU5HOlwiJXM6IFlvdSBtdXN0IHByb3ZpZGUgYXQgbGVhc3Qgb25lIG9mIHNka0tleSBvciBkYXRhZmlsZS4gQ2Fubm90IHN0YXJ0IE9wdGltaXplbHlcIixFWFBFUklNRU5UX0tFWV9OT1RfSU5fREFUQUZJTEU6XCIlczogRXhwZXJpbWVudCBrZXkgJXMgaXMgbm90IGluIGRhdGFmaWxlLlwiLEZFQVRVUkVfTk9UX0lOX0RBVEFGSUxFOlwiJXM6IEZlYXR1cmUga2V5ICVzIGlzIG5vdCBpbiBkYXRhZmlsZS5cIixGRVRDSF9TRUdNRU5UU19GQUlMRURfTkVUV09SS19FUlJPUjpcIiVzOiBBdWRpZW5jZSBzZWdtZW50cyBmZXRjaCBmYWlsZWQuIChuZXR3b3JrIGVycm9yKVwiLEZFVENIX1NFR01FTlRTX0ZBSUxFRF9ERUNPREVfRVJST1I6XCIlczogQXVkaWVuY2Ugc2VnbWVudHMgZmV0Y2ggZmFpbGVkLiAoZGVjb2RlIGVycm9yKVwiLElNUFJPUEVSTFlfRk9STUFUVEVEX0VYUEVSSU1FTlQ6XCIlczogRXhwZXJpbWVudCBrZXkgJXMgaXMgaW1wcm9wZXJseSBmb3JtYXR0ZWQuXCIsSU5WQUxJRF9BVFRSSUJVVEVTOlwiJXM6IFByb3ZpZGVkIGF0dHJpYnV0ZXMgYXJlIGluIGFuIGludmFsaWQgZm9ybWF0LlwiLElOVkFMSURfQlVDS0VUSU5HX0lEOlwiJXM6IFVuYWJsZSB0byBnZW5lcmF0ZSBoYXNoIGZvciBidWNrZXRpbmcgSUQgJXM6ICVzXCIsSU5WQUxJRF9EQVRBRklMRTpcIiVzOiBEYXRhZmlsZSBpcyBpbnZhbGlkIC0gcHJvcGVydHkgJXM6ICVzXCIsSU5WQUxJRF9EQVRBRklMRV9NQUxGT1JNRUQ6XCIlczogRGF0YWZpbGUgaXMgaW52YWxpZCBiZWNhdXNlIGl0IGlzIG1hbGZvcm1lZC5cIixJTlZBTElEX0NPTkZJRzpcIiVzOiBQcm92aWRlZCBPcHRpbWl6ZWx5IGNvbmZpZyBpcyBpbiBhbiBpbnZhbGlkIGZvcm1hdC5cIixJTlZBTElEX0pTT046XCIlczogSlNPTiBvYmplY3QgaXMgbm90IHZhbGlkLlwiLElOVkFMSURfRVJST1JfSEFORExFUjonJXM6IFByb3ZpZGVkIFwiZXJyb3JIYW5kbGVyXCIgaXMgaW4gYW4gaW52YWxpZCBmb3JtYXQuJyxJTlZBTElEX0VWRU5UX0RJU1BBVENIRVI6JyVzOiBQcm92aWRlZCBcImV2ZW50RGlzcGF0Y2hlclwiIGlzIGluIGFuIGludmFsaWQgZm9ybWF0LicsSU5WQUxJRF9FVkVOVF9UQUdTOlwiJXM6IFByb3ZpZGVkIGV2ZW50IHRhZ3MgYXJlIGluIGFuIGludmFsaWQgZm9ybWF0LlwiLElOVkFMSURfRVhQRVJJTUVOVF9LRVk6XCIlczogRXhwZXJpbWVudCBrZXkgJXMgaXMgbm90IGluIGRhdGFmaWxlLiBJdCBpcyBlaXRoZXIgaW52YWxpZCwgcGF1c2VkLCBvciBhcmNoaXZlZC5cIixJTlZBTElEX0VYUEVSSU1FTlRfSUQ6XCIlczogRXhwZXJpbWVudCBJRCAlcyBpcyBub3QgaW4gZGF0YWZpbGUuXCIsSU5WQUxJRF9HUk9VUF9JRDpcIiVzOiBHcm91cCBJRCAlcyBpcyBub3QgaW4gZGF0YWZpbGUuXCIsSU5WQUxJRF9MT0dHRVI6JyVzOiBQcm92aWRlZCBcImxvZ2dlclwiIGlzIGluIGFuIGludmFsaWQgZm9ybWF0LicsSU5WQUxJRF9ST0xMT1VUX0lEOlwiJXM6IEludmFsaWQgcm9sbG91dCBJRCAlcyBhdHRhY2hlZCB0byBmZWF0dXJlICVzXCIsSU5WQUxJRF9VU0VSX0lEOlwiJXM6IFByb3ZpZGVkIHVzZXIgSUQgaXMgaW4gYW4gaW52YWxpZCBmb3JtYXQuXCIsSU5WQUxJRF9VU0VSX1BST0ZJTEVfU0VSVklDRTpcIiVzOiBQcm92aWRlZCB1c2VyIHByb2ZpbGUgc2VydmljZSBpbnN0YW5jZSBpcyBpbiBhbiBpbnZhbGlkIGZvcm1hdDogJXMuXCIsTE9DQUxfU1RPUkFHRV9ET0VTX05PVF9FWElTVDpcIkVycm9yIGFjY2Vzc2luZyB3aW5kb3cgbG9jYWxTdG9yYWdlLlwiLE1JU1NJTkdfSU5URUdSQVRJT05fS0VZOlwiJXM6IEludGVncmF0aW9uIGtleSBtaXNzaW5nIGZyb20gZGF0YWZpbGUuIEFsbCBpbnRlZ3JhdGlvbnMgc2hvdWxkIGluY2x1ZGUgYSBrZXkuXCIsTk9fREFUQUZJTEVfU1BFQ0lGSUVEOlwiJXM6IE5vIGRhdGFmaWxlIHNwZWNpZmllZC4gQ2Fubm90IHN0YXJ0IG9wdGltaXplbHkuXCIsTk9fSlNPTl9QUk9WSURFRDpcIiVzOiBObyBKU09OIG9iamVjdCB0byB2YWxpZGF0ZSBhZ2FpbnN0IHNjaGVtYS5cIixOT19WQVJJQVRJT05fRk9SX0VYUEVSSU1FTlRfS0VZOlwiJXM6IE5vIHZhcmlhdGlvbiBrZXkgJXMgZGVmaW5lZCBpbiBkYXRhZmlsZSBmb3IgZXhwZXJpbWVudCAlcy5cIixPRFBfQ09ORklHX05PVF9BVkFJTEFCTEU6XCIlczogT0RQIGlzIG5vdCBpbnRlZ3JhdGVkIHRvIHRoZSBwcm9qZWN0LlwiLE9EUF9FVkVOVF9GQUlMRUQ6XCJPRFAgZXZlbnQgc2VuZCBmYWlsZWQuXCIsT0RQX0ZFVENIX1FVQUxJRklFRF9TRUdNRU5UU19TRUdNRU5UU19NQU5BR0VSX01JU1NJTkc6XCIlczogT0RQIHVuYWJsZSB0byBmZXRjaCBxdWFsaWZpZWQgc2VnbWVudHMgKFNlZ21lbnRzIE1hbmFnZXIgbm90IGluaXRpYWxpemVkKS5cIixPRFBfSURFTlRJRllfRkFJTEVEX0VWRU5UX01BTkFHRVJfTUlTU0lORzpcIiVzOiBPRFAgaWRlbnRpZnkgZXZlbnQgJXMgaXMgbm90IGRpc3BhdGNoZWQgKEV2ZW50IE1hbmFnZXIgbm90IGluc3RhbnRpYXRlZCkuXCIsT0RQX0lOSVRJQUxJWkFUSU9OX0ZBSUxFRDpcIiVzOiBPRFAgZmFpbGVkIHRvIGluaXRpYWxpemUuXCIsT0RQX0lOVkFMSURfREFUQTpcIiVzOiBPRFAgZGF0YSBpcyBub3QgdmFsaWRcIixPRFBfRVZFTlRfRkFJTEVEX09EUF9NQU5BR0VSX01JU1NJTkc6XCIlczogT0RQIEV2ZW50IGZhaWxlZCB0byBzZW5kLiAoT0RQIE1hbmFnZXIgbm90IGluaXRpYWxpemVkKS5cIixPRFBfRkVUQ0hfUVVBTElGSUVEX1NFR01FTlRTX0ZBSUxFRF9PRFBfTUFOQUdFUl9NSVNTSU5HOlwiJXM6IE9EUCBmYWlsZWQgdG8gRmV0Y2ggUXVhbGlmaWVkIFNlZ21lbnRzLiAoT0RQIE1hbmFnZXIgbm90IGluaXRpYWxpemVkKS5cIixPRFBfSURFTlRJRllfVVNFUl9GQUlMRURfT0RQX01BTkFHRVJfTUlTU0lORzpcIiVzOiBPRFAgZmFpbGVkIHRvIElkZW50aWZ5IFVzZXIuIChPRFAgTWFuYWdlciBub3QgaW5pdGlhbGl6ZWQpLlwiLE9EUF9JREVOVElGWV9VU0VSX0ZBSUxFRF9VU0VSX0NPTlRFWFRfSU5JVElBTElaQVRJT046XCIlczogT0RQIGZhaWxlZCB0byBJZGVudGlmeSBVc2VyLiAoRmFpbGVkIGR1cmluZyBVc2VyIENvbnRleHQgSW5pdGlhbGl6YXRpb24pLlwiLE9EUF9NQU5BR0VSX1VQREFURV9TRVRUSU5HU19GQUlMRURfRVZFTlRfTUFOQUdFUl9NSVNTSU5HOlwiJXM6IE9EUCBNYW5hZ2VyIGZhaWxlZCB0byB1cGRhdGUgT2RwQ29uZmlnIHNldHRpbmdzIGZvciBpbnRlcm5hbCBldmVudCBtYW5hZ2VyLiAoRXZlbnQgTWFuYWdlciBub3QgaW5pdGlhbGl6ZWQpLlwiLE9EUF9NQU5BR0VSX1VQREFURV9TRVRUSU5HU19GQUlMRURfU0VHTUVOVFNfTUFOQUdFUl9NSVNTSU5HOlwiJXM6IE9EUCBNYW5hZ2VyIGZhaWxlZCB0byB1cGRhdGUgT2RwQ29uZmlnIHNldHRpbmdzIGZvciBpbnRlcm5hbCBzZWdtZW50cyBtYW5hZ2VyLiAoU2VnbWVudHMgTWFuYWdlciBub3QgaW5pdGlhbGl6ZWQpLlwiLE9EUF9OT1RfRU5BQkxFRDpcIk9EUCBpcyBub3QgZW5hYmxlZFwiLE9EUF9OT1RfSU5URUdSQVRFRDpcIiVzOiBPRFAgaXMgbm90IGludGVncmF0ZWRcIixPRFBfU0VORF9FVkVOVF9GQUlMRURfRVZFTlRfTUFOQUdFUl9NSVNTSU5HOlwiJXM6IE9EUCBzZW5kIGV2ZW50ICVzIHdhcyBub3QgZGlzcGF0Y2hlZCAoRXZlbnQgTWFuYWdlciBub3QgaW5zdGFudGlhdGVkKS5cIixPRFBfU0VORF9FVkVOVF9GQUlMRURfVUlEX01JU1NJTkc6XCIlczogT0RQIHNlbmQgZXZlbnQgJXMgd2FzIG5vdCBkaXNwYXRjaGVkIChObyB2YWxpZCB1c2VyIGlkZW50aWZpZXIgcHJvdmlkZWQpLlwiLE9EUF9TRU5EX0VWRU5UX0ZBSUxFRF9WVUlEX01JU1NJTkc6XCIlczogT0RQIHNlbmQgZXZlbnQgJXMgd2FzIG5vdCBkaXNwYXRjaGVkIChVbmFibGUgdG8gZmV0Y2ggVlVJRCkuXCIsT0RQX1ZVSURfSU5JVElBTElaQVRJT05fRkFJTEVEOlwiJXM6IE9EUCBWVUlEIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cIixPRFBfVlVJRF9SRUdJU1RSQVRJT05fRkFJTEVEOlwiJXM6IE9EUCBWVUlEIGZhaWxlZCB0byBiZSByZWdpc3RlcmVkLlwiLE9EUF9WVUlEX1JFR0lTVFJBVElPTl9GQUlMRURfRVZFTlRfTUFOQUdFUl9NSVNTSU5HOlwiJXM6IE9EUCByZWdpc3RlciB2dWlkIGZhaWxlZC4gKEV2ZW50IE1hbmFnZXIgbm90IGluc3RhbnRpYXRlZCkuXCIsVU5ERUZJTkVEX0FUVFJJQlVURTpcIiVzOiBQcm92aWRlZCBhdHRyaWJ1dGU6ICVzIGhhcyBhbiB1bmRlZmluZWQgdmFsdWUuXCIsVU5SRUNPR05JWkVEX0FUVFJJQlVURTpcIiVzOiBVbnJlY29nbml6ZWQgYXR0cmlidXRlICVzIHByb3ZpZGVkLiBQcnVuaW5nIGJlZm9yZSBzZW5kaW5nIGV2ZW50IHRvIE9wdGltaXplbHkuXCIsVU5BQkxFX1RPX0NBU1RfVkFMVUU6XCIlczogVW5hYmxlIHRvIGNhc3QgdmFsdWUgJXMgdG8gdHlwZSAlcywgcmV0dXJuaW5nIG51bGwuXCIsVVNFUl9OT1RfSU5fRk9SQ0VEX1ZBUklBVElPTjpcIiVzOiBVc2VyICVzIGlzIG5vdCBpbiB0aGUgZm9yY2VkIHZhcmlhdGlvbiBtYXAuIENhbm5vdCByZW1vdmUgdGhlaXIgZm9yY2VkIHZhcmlhdGlvbi5cIixVU0VSX1BST0ZJTEVfTE9PS1VQX0VSUk9SOiclczogRXJyb3Igd2hpbGUgbG9va2luZyB1cCB1c2VyIHByb2ZpbGUgZm9yIHVzZXIgSUQgXCIlc1wiOiAlcy4nLFVTRVJfUFJPRklMRV9TQVZFX0VSUk9SOiclczogRXJyb3Igd2hpbGUgc2F2aW5nIHVzZXIgcHJvZmlsZSBmb3IgdXNlciBJRCBcIiVzXCI6ICVzLicsVkFSSUFCTEVfS0VZX05PVF9JTl9EQVRBRklMRTonJXM6IFZhcmlhYmxlIHdpdGgga2V5IFwiJXNcIiBhc3NvY2lhdGVkIHdpdGggZmVhdHVyZSB3aXRoIGtleSBcIiVzXCIgaXMgbm90IGluIGRhdGFmaWxlLicsVkFSSUFUSU9OX0lEX05PVF9JTl9EQVRBRklMRTpcIiVzOiBObyB2YXJpYXRpb24gSUQgJXMgZGVmaW5lZCBpbiBkYXRhZmlsZSBmb3IgZXhwZXJpbWVudCAlcy5cIixWQVJJQVRJT05fSURfTk9UX0lOX0RBVEFGSUxFX05PX0VYUEVSSU1FTlQ6XCIlczogVmFyaWF0aW9uIElEICVzIGlzIG5vdCBpbiB0aGUgZGF0YWZpbGUuXCIsSU5WQUxJRF9JTlBVVF9GT1JNQVQ6XCIlczogUHJvdmlkZWQgJXMgaXMgaW4gYW4gaW52YWxpZCBmb3JtYXQuXCIsSU5WQUxJRF9EQVRBRklMRV9WRVJTSU9OOlwiJXM6IFRoaXMgdmVyc2lvbiBvZiB0aGUgSmF2YVNjcmlwdCBTREsgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4gZGF0YWZpbGUgdmVyc2lvbjogJXNcIixJTlZBTElEX1ZBUklBVElPTl9LRVk6XCIlczogUHJvdmlkZWQgdmFyaWF0aW9uIGtleSBpcyBpbiBhbiBpbnZhbGlkIGZvcm1hdC5cIn0sej17QUNUSVZBVEVfVVNFUjpcIiVzOiBBY3RpdmF0aW5nIHVzZXIgJXMgaW4gZXhwZXJpbWVudCAlcy5cIixESVNQQVRDSF9DT05WRVJTSU9OX0VWRU5UOlwiJXM6IERpc3BhdGNoaW5nIGNvbnZlcnNpb24gZXZlbnQgdG8gVVJMICVzIHdpdGggcGFyYW1zICVzLlwiLERJU1BBVENIX0lNUFJFU1NJT05fRVZFTlQ6XCIlczogRGlzcGF0Y2hpbmcgaW1wcmVzc2lvbiBldmVudCB0byBVUkwgJXMgd2l0aCBwYXJhbXMgJXMuXCIsREVQUkVDQVRFRF9FVkVOVF9WQUxVRTpcIiVzOiBFdmVudCB2YWx1ZSBpcyBkZXByZWNhdGVkIGluICVzIGNhbGwuXCIsRVZFTlRfS0VZX05PVF9GT1VORDpcIiVzOiBFdmVudCBrZXkgJXMgaXMgbm90IGluIGRhdGFmaWxlLlwiLEVYUEVSSU1FTlRfTk9UX1JVTk5JTkc6XCIlczogRXhwZXJpbWVudCAlcyBpcyBub3QgcnVubmluZy5cIixGRUFUVVJFX0VOQUJMRURfRk9SX1VTRVI6XCIlczogRmVhdHVyZSAlcyBpcyBlbmFibGVkIGZvciB1c2VyICVzLlwiLEZFQVRVUkVfTk9UX0VOQUJMRURfRk9SX1VTRVI6XCIlczogRmVhdHVyZSAlcyBpcyBub3QgZW5hYmxlZCBmb3IgdXNlciAlcy5cIixGRUFUVVJFX0hBU19OT19FWFBFUklNRU5UUzpcIiVzOiBGZWF0dXJlICVzIGlzIG5vdCBhdHRhY2hlZCB0byBhbnkgZXhwZXJpbWVudHMuXCIsRkFJTEVEX1RPX1BBUlNFX1ZBTFVFOiclczogRmFpbGVkIHRvIHBhcnNlIGV2ZW50IHZhbHVlIFwiJXNcIiBmcm9tIGV2ZW50IHRhZ3MuJyxGQUlMRURfVE9fUEFSU0VfUkVWRU5VRTonJXM6IEZhaWxlZCB0byBwYXJzZSByZXZlbnVlIHZhbHVlIFwiJXNcIiBmcm9tIGV2ZW50IHRhZ3MuJyxGT1JDRURfQlVDS0VUSU5HX0ZBSUxFRDpcIiVzOiBWYXJpYXRpb24ga2V5ICVzIGlzIG5vdCBpbiBkYXRhZmlsZS4gTm90IGFjdGl2YXRpbmcgdXNlciAlcy5cIixJTlZBTElEX09CSkVDVDpcIiVzOiBPcHRpbWl6ZWx5IG9iamVjdCBpcyBub3QgdmFsaWQuIEZhaWxpbmcgJXMuXCIsSU5WQUxJRF9DTElFTlRfRU5HSU5FOlwiJXM6IEludmFsaWQgY2xpZW50IGVuZ2luZSBwYXNzZWQ6ICVzLiBEZWZhdWx0aW5nIHRvIG5vZGUtc2RrLlwiLElOVkFMSURfREVGQVVMVF9ERUNJREVfT1BUSU9OUzpcIiVzOiBQcm92aWRlZCBkZWZhdWx0IGRlY2lkZSBvcHRpb25zIGlzIG5vdCBhbiBhcnJheS5cIixJTlZBTElEX0RFQ0lERV9PUFRJT05TOlwiJXM6IFByb3ZpZGVkIGRlY2lkZSBvcHRpb25zIGlzIG5vdCBhbiBhcnJheS4gVXNpbmcgZGVmYXVsdCBkZWNpZGUgb3B0aW9ucy5cIixJTlZBTElEX1ZBUklBVElPTl9JRDpcIiVzOiBCdWNrZXRlZCBpbnRvIGFuIGludmFsaWQgdmFyaWF0aW9uIElELiBSZXR1cm5pbmcgbnVsbC5cIixOT1RJRklDQVRJT05fTElTVEVORVJfRVhDRVBUSU9OOlwiJXM6IE5vdGlmaWNhdGlvbiBsaXN0ZW5lciBmb3IgKCVzKSB0aHJldyBleGNlcHRpb246ICVzXCIsTk9fUk9MTE9VVF9FWElTVFM6XCIlczogVGhlcmUgaXMgbm8gcm9sbG91dCBvZiBmZWF0dXJlICVzLlwiLE5PVF9BQ1RJVkFUSU5HX1VTRVI6XCIlczogTm90IGFjdGl2YXRpbmcgdXNlciAlcyBmb3IgZXhwZXJpbWVudCAlcy5cIixOT1RfVFJBQ0tJTkdfVVNFUjpcIiVzOiBOb3QgdHJhY2tpbmcgdXNlciAlcy5cIixPRFBfRElTQUJMRUQ6XCJPRFAgRGlzYWJsZWQuXCIsT0RQX0lERU5USUZZX0ZBSUxFRF9PRFBfRElTQUJMRUQ6XCIlczogT0RQIGlkZW50aWZ5IGV2ZW50IGZvciB1c2VyICVzIGlzIG5vdCBkaXNwYXRjaGVkIChPRFAgZGlzYWJsZWQpLlwiLE9EUF9JREVOVElGWV9GQUlMRURfT0RQX05PVF9JTlRFR1JBVEVEOlwiJXM6IE9EUCBpZGVudGlmeSBldmVudCAlcyBpcyBub3QgZGlzcGF0Y2hlZCAoT0RQIG5vdCBpbnRlZ3JhdGVkKS5cIixPRFBfU0VORF9FVkVOVF9JREVOVElGSUVSX0NPTlZFUlNJT05fRkFJTEVEOlwiJXM6IHNlbmRPZHBFdmVudCBmYWlsZWQgdG8gcGFyc2UgdGhyb3VnaCBhbmQgY29udmVydCBmc191c2VyX2lkIGFsaWFzZXNcIixQQVJTRURfUkVWRU5VRV9WQUxVRTonJXM6IFBhcnNlZCByZXZlbnVlIHZhbHVlIFwiJXNcIiBmcm9tIGV2ZW50IHRhZ3MuJyxQQVJTRURfTlVNRVJJQ19WQUxVRTonJXM6IFBhcnNlZCBldmVudCB2YWx1ZSBcIiVzXCIgZnJvbSBldmVudCB0YWdzLicsUkVUVVJOSU5HX1NUT1JFRF9WQVJJQVRJT046JyVzOiBSZXR1cm5pbmcgcHJldmlvdXNseSBhY3RpdmF0ZWQgdmFyaWF0aW9uIFwiJXNcIiBvZiBleHBlcmltZW50IFwiJXNcIiBmb3IgdXNlciBcIiVzXCIgZnJvbSB1c2VyIHByb2ZpbGUuJyxST0xMT1VUX0hBU19OT19FWFBFUklNRU5UUzpcIiVzOiBSb2xsb3V0IG9mIGZlYXR1cmUgJXMgaGFzIG5vIGV4cGVyaW1lbnRzXCIsU0FWRURfVkFSSUFUSU9OOiclczogU2F2ZWQgdmFyaWF0aW9uIFwiJXNcIiBvZiBleHBlcmltZW50IFwiJXNcIiBmb3IgdXNlciBcIiVzXCIuJyxTQVZFRF9WQVJJQVRJT05fTk9UX0ZPVU5EOlwiJXM6IFVzZXIgJXMgd2FzIHByZXZpb3VzbHkgYnVja2V0ZWQgaW50byB2YXJpYXRpb24gd2l0aCBJRCAlcyBmb3IgZXhwZXJpbWVudCAlcywgYnV0IG5vIG1hdGNoaW5nIHZhcmlhdGlvbiB3YXMgZm91bmQuXCIsU0hPVUxEX05PVF9ESVNQQVRDSF9BQ1RJVkFURTonJXM6IEV4cGVyaW1lbnQgJXMgaXMgbm90IGluIFwiUnVubmluZ1wiIHN0YXRlLiBOb3QgYWN0aXZhdGluZyB1c2VyLicsU0tJUFBJTkdfSlNPTl9WQUxJREFUSU9OOlwiJXM6IFNraXBwaW5nIEpTT04gc2NoZW1hIHZhbGlkYXRpb24uXCIsVFJBQ0tfRVZFTlQ6XCIlczogVHJhY2tpbmcgZXZlbnQgJXMgZm9yIHVzZXIgJXMuXCIsVU5SRUNPR05JWkVEX0RFQ0lERV9PUFRJT046XCIlczogVW5yZWNvZ25pemVkIGRlY2lkZSBvcHRpb24gJXMgcHJvdmlkZWQuXCIsVVNFUl9BU1NJR05FRF9UT19FWFBFUklNRU5UX0JVQ0tFVDpcIiVzOiBBc3NpZ25lZCBidWNrZXQgJXMgdG8gdXNlciB3aXRoIGJ1Y2tldGluZyBJRCAlcy5cIixVU0VSX0JVQ0tFVEVEX0lOVE9fRVhQRVJJTUVOVF9JTl9HUk9VUDpcIiVzOiBVc2VyICVzIGlzIGluIGV4cGVyaW1lbnQgJXMgb2YgZ3JvdXAgJXMuXCIsVVNFUl9CVUNLRVRFRF9JTlRPX1RBUkdFVElOR19SVUxFOlwiJXM6IFVzZXIgJXMgYnVja2V0ZWQgaW50byB0YXJnZXRpbmcgcnVsZSAlcy5cIixVU0VSX0lOX0ZFQVRVUkVfRVhQRVJJTUVOVDpcIiVzOiBVc2VyICVzIGlzIGluIHZhcmlhdGlvbiAlcyBvZiBleHBlcmltZW50ICVzIG9uIHRoZSBmZWF0dXJlICVzLlwiLFVTRVJfSU5fUk9MTE9VVDpcIiVzOiBVc2VyICVzIGlzIGluIHJvbGxvdXQgb2YgZmVhdHVyZSAlcy5cIixVU0VSX05PVF9CVUNLRVRFRF9JTlRPX0VWRVJZT05FX1RBUkdFVElOR19SVUxFOlwiJXM6IFVzZXIgJXMgbm90IGJ1Y2tldGVkIGludG8gZXZlcnlvbmUgdGFyZ2V0aW5nIHJ1bGUgZHVlIHRvIHRyYWZmaWMgYWxsb2NhdGlvbi5cIixVU0VSX05PVF9CVUNLRVRFRF9JTlRPX0VYUEVSSU1FTlRfSU5fR1JPVVA6XCIlczogVXNlciAlcyBpcyBub3QgaW4gZXhwZXJpbWVudCAlcyBvZiBncm91cCAlcy5cIixVU0VSX05PVF9CVUNLRVRFRF9JTlRPX0FOWV9FWFBFUklNRU5UX0lOX0dST1VQOlwiJXM6IFVzZXIgJXMgaXMgbm90IGluIGFueSBleHBlcmltZW50IG9mIGdyb3VwICVzLlwiLFVTRVJfTk9UX0JVQ0tFVEVEX0lOVE9fVEFSR0VUSU5HX1JVTEU6XCIlcyBVc2VyICVzIG5vdCBidWNrZXRlZCBpbnRvIHRhcmdldGluZyBydWxlICVzIGR1ZSB0byB0cmFmZmljIGFsbG9jYXRpb24uIFRyeWluZyBldmVyeW9uZSBydWxlLlwiLFVTRVJfTk9UX0lOX0ZFQVRVUkVfRVhQRVJJTUVOVDpcIiVzOiBVc2VyICVzIGlzIG5vdCBpbiBhbnkgZXhwZXJpbWVudCBvbiB0aGUgZmVhdHVyZSAlcy5cIixVU0VSX05PVF9JTl9ST0xMT1VUOlwiJXM6IFVzZXIgJXMgaXMgbm90IGluIHJvbGxvdXQgb2YgZmVhdHVyZSAlcy5cIixVU0VSX0ZPUkNFRF9JTl9WQVJJQVRJT046XCIlczogVXNlciAlcyBpcyBmb3JjZWQgaW4gdmFyaWF0aW9uICVzLlwiLFVTRVJfTUFQUEVEX1RPX0ZPUkNFRF9WQVJJQVRJT046XCIlczogU2V0IHZhcmlhdGlvbiAlcyBmb3IgZXhwZXJpbWVudCAlcyBhbmQgdXNlciAlcyBpbiB0aGUgZm9yY2VkIHZhcmlhdGlvbiBtYXAuXCIsVVNFUl9ET0VTTlRfTUVFVF9DT05ESVRJT05TX0ZPUl9UQVJHRVRJTkdfUlVMRTpcIiVzOiBVc2VyICVzIGRvZXMgbm90IG1lZXQgY29uZGl0aW9ucyBmb3IgdGFyZ2V0aW5nIHJ1bGUgJXMuXCIsVVNFUl9NRUVUU19DT05ESVRJT05TX0ZPUl9UQVJHRVRJTkdfUlVMRTpcIiVzOiBVc2VyICVzIG1lZXRzIGNvbmRpdGlvbnMgZm9yIHRhcmdldGluZyBydWxlICVzLlwiLFVTRVJfSEFTX1ZBUklBVElPTjpcIiVzOiBVc2VyICVzIGlzIGluIHZhcmlhdGlvbiAlcyBvZiBleHBlcmltZW50ICVzLlwiLFVTRVJfSEFTX0ZPUkNFRF9ERUNJU0lPTl9XSVRIX1JVTEVfU1BFQ0lGSUVEOlwiVmFyaWF0aW9uICglcykgaXMgbWFwcGVkIHRvIGZsYWcgKCVzKSwgcnVsZSAoJXMpIGFuZCB1c2VyICglcykgaW4gdGhlIGZvcmNlZCBkZWNpc2lvbiBtYXAuXCIsVVNFUl9IQVNfRk9SQ0VEX0RFQ0lTSU9OX1dJVEhfTk9fUlVMRV9TUEVDSUZJRUQ6XCJWYXJpYXRpb24gKCVzKSBpcyBtYXBwZWQgdG8gZmxhZyAoJXMpIGFuZCB1c2VyICglcykgaW4gdGhlIGZvcmNlZCBkZWNpc2lvbiBtYXAuXCIsVVNFUl9IQVNfRk9SQ0VEX0RFQ0lTSU9OX1dJVEhfUlVMRV9TUEVDSUZJRURfQlVUX0lOVkFMSUQ6XCJJbnZhbGlkIHZhcmlhdGlvbiBpcyBtYXBwZWQgdG8gZmxhZyAoJXMpLCBydWxlICglcykgYW5kIHVzZXIgKCVzKSBpbiB0aGUgZm9yY2VkIGRlY2lzaW9uIG1hcC5cIixVU0VSX0hBU19GT1JDRURfREVDSVNJT05fV0lUSF9OT19SVUxFX1NQRUNJRklFRF9CVVRfSU5WQUxJRDpcIkludmFsaWQgdmFyaWF0aW9uIGlzIG1hcHBlZCB0byBmbGFnICglcykgYW5kIHVzZXIgKCVzKSBpbiB0aGUgZm9yY2VkIGRlY2lzaW9uIG1hcC5cIixVU0VSX0hBU19GT1JDRURfVkFSSUFUSU9OOlwiJXM6IFZhcmlhdGlvbiAlcyBpcyBtYXBwZWQgdG8gZXhwZXJpbWVudCAlcyBhbmQgdXNlciAlcyBpbiB0aGUgZm9yY2VkIHZhcmlhdGlvbiBtYXAuXCIsVVNFUl9IQVNfTk9fVkFSSUFUSU9OOlwiJXM6IFVzZXIgJXMgaXMgaW4gbm8gdmFyaWF0aW9uIG9mIGV4cGVyaW1lbnQgJXMuXCIsVVNFUl9IQVNfTk9fRk9SQ0VEX1ZBUklBVElPTjpcIiVzOiBVc2VyICVzIGlzIG5vdCBpbiB0aGUgZm9yY2VkIHZhcmlhdGlvbiBtYXAuXCIsVVNFUl9IQVNfTk9fRk9SQ0VEX1ZBUklBVElPTl9GT1JfRVhQRVJJTUVOVDpcIiVzOiBObyBleHBlcmltZW50ICVzIG1hcHBlZCB0byB1c2VyICVzIGluIHRoZSBmb3JjZWQgdmFyaWF0aW9uIG1hcC5cIixVU0VSX05PVF9JTl9BTllfRVhQRVJJTUVOVDpcIiVzOiBVc2VyICVzIGlzIG5vdCBpbiBhbnkgZXhwZXJpbWVudCBvZiBncm91cCAlcy5cIixVU0VSX05PVF9JTl9FWFBFUklNRU5UOlwiJXM6IFVzZXIgJXMgZG9lcyBub3QgbWVldCBjb25kaXRpb25zIHRvIGJlIGluIGV4cGVyaW1lbnQgJXMuXCIsVVNFUl9SRUNFSVZFRF9ERUZBVUxUX1ZBUklBQkxFX1ZBTFVFOiclczogVXNlciBcIiVzXCIgaXMgbm90IGluIGFueSB2YXJpYXRpb24gb3Igcm9sbG91dCBydWxlLiBSZXR1cm5pbmcgZGVmYXVsdCB2YWx1ZSBmb3IgdmFyaWFibGUgXCIlc1wiIG9mIGZlYXR1cmUgZmxhZyBcIiVzXCIuJyxGRUFUVVJFX05PVF9FTkFCTEVEX1JFVFVSTl9ERUZBVUxUX1ZBUklBQkxFX1ZBTFVFOiclczogRmVhdHVyZSBcIiVzXCIgaXMgbm90IGVuYWJsZWQgZm9yIHVzZXIgJXMuIFJldHVybmluZyB0aGUgZGVmYXVsdCB2YXJpYWJsZSB2YWx1ZSBcIiVzXCIuJyxWQVJJQUJMRV9OT1RfVVNFRF9SRVRVUk5fREVGQVVMVF9WQVJJQUJMRV9WQUxVRTonJXM6IFZhcmlhYmxlIFwiJXNcIiBpcyBub3QgdXNlZCBpbiB2YXJpYXRpb24gXCIlc1wiLiBSZXR1cm5pbmcgZGVmYXVsdCB2YWx1ZS4nLFVTRVJfUkVDRUlWRURfVkFSSUFCTEVfVkFMVUU6JyVzOiBHb3QgdmFyaWFibGUgdmFsdWUgXCIlc1wiIGZvciB2YXJpYWJsZSBcIiVzXCIgb2YgZmVhdHVyZSBmbGFnIFwiJXNcIicsVkFMSURfREFUQUZJTEU6XCIlczogRGF0YWZpbGUgaXMgdmFsaWQuXCIsVkFMSURfVVNFUl9QUk9GSUxFX1NFUlZJQ0U6XCIlczogVmFsaWQgdXNlciBwcm9maWxlIHNlcnZpY2UgcHJvdmlkZWQuXCIsVkFSSUFUSU9OX1JFTU9WRURfRk9SX1VTRVI6XCIlczogVmFyaWF0aW9uIG1hcHBlZCB0byBleHBlcmltZW50ICVzIGhhcyBiZWVuIHJlbW92ZWQgZm9yIHVzZXIgJXMuXCIsVkFSSUFCTEVfUkVRVUVTVEVEX1dJVEhfV1JPTkdfVFlQRTonJXM6IFJlcXVlc3RlZCB2YXJpYWJsZSB0eXBlIFwiJXNcIiwgYnV0IHZhcmlhYmxlIGlzIG9mIHR5cGUgXCIlc1wiLiBVc2UgY29ycmVjdCBBUEkgdG8gcmV0cmlldmUgdmFsdWUuIFJldHVybmluZyBOb25lLicsVkFMSURfQlVDS0VUSU5HX0lEOiclczogQnVja2V0aW5nSWQgaXMgdmFsaWQ6IFwiJXNcIicsQlVDS0VUSU5HX0lEX05PVF9TVFJJTkc6XCIlczogQnVja2V0aW5nSUQgYXR0cmlidXRlIGlzIG5vdCBhIHN0cmluZy4gRGVmYXVsdGVkIHRvIHVzZXJJZFwiLEVWQUxVQVRJTkdfQVVESUVOQ0U6JyVzOiBTdGFydGluZyB0byBldmFsdWF0ZSBhdWRpZW5jZSBcIiVzXCIgd2l0aCBjb25kaXRpb25zOiAlcy4nLEVWQUxVQVRJTkdfQVVESUVOQ0VTX0NPTUJJTkVEOiclczogRXZhbHVhdGluZyBhdWRpZW5jZXMgZm9yICVzIFwiJXNcIjogJXMuJyxBVURJRU5DRV9FVkFMVUFUSU9OX1JFU1VMVDonJXM6IEF1ZGllbmNlIFwiJXNcIiBldmFsdWF0ZWQgdG8gJXMuJyxBVURJRU5DRV9FVkFMVUFUSU9OX1JFU1VMVF9DT01CSU5FRDpcIiVzOiBBdWRpZW5jZXMgZm9yICVzICVzIGNvbGxlY3RpdmVseSBldmFsdWF0ZWQgdG8gJXMuXCIsTUlTU0lOR19BVFRSSUJVVEVfVkFMVUU6JyVzOiBBdWRpZW5jZSBjb25kaXRpb24gJXMgZXZhbHVhdGVkIHRvIFVOS05PV04gYmVjYXVzZSBubyB2YWx1ZSB3YXMgcGFzc2VkIGZvciB1c2VyIGF0dHJpYnV0ZSBcIiVzXCIuJyxVTkVYUEVDVEVEX0NPTkRJVElPTl9WQUxVRTpcIiVzOiBBdWRpZW5jZSBjb25kaXRpb24gJXMgZXZhbHVhdGVkIHRvIFVOS05PV04gYmVjYXVzZSB0aGUgY29uZGl0aW9uIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQuXCIsVU5FWFBFQ1RFRF9UWVBFOiclczogQXVkaWVuY2UgY29uZGl0aW9uICVzIGV2YWx1YXRlZCB0byBVTktOT1dOIGJlY2F1c2UgYSB2YWx1ZSBvZiB0eXBlIFwiJXNcIiB3YXMgcGFzc2VkIGZvciB1c2VyIGF0dHJpYnV0ZSBcIiVzXCIuJyxVTkVYUEVDVEVEX1RZUEVfTlVMTDonJXM6IEF1ZGllbmNlIGNvbmRpdGlvbiAlcyBldmFsdWF0ZWQgdG8gVU5LTk9XTiBiZWNhdXNlIGEgbnVsbCB2YWx1ZSB3YXMgcGFzc2VkIGZvciB1c2VyIGF0dHJpYnV0ZSBcIiVzXCIuJyxVTktOT1dOX0NPTkRJVElPTl9UWVBFOlwiJXM6IEF1ZGllbmNlIGNvbmRpdGlvbiAlcyBoYXMgYW4gdW5rbm93biBjb25kaXRpb24gdHlwZS4gWW91IG1heSBuZWVkIHRvIHVwZ3JhZGUgdG8gYSBuZXdlciByZWxlYXNlIG9mIHRoZSBPcHRpbWl6ZWx5IFNESy5cIixVTktOT1dOX01BVENIX1RZUEU6XCIlczogQXVkaWVuY2UgY29uZGl0aW9uICVzIHVzZXMgYW4gdW5rbm93biBtYXRjaCB0eXBlLiBZb3UgbWF5IG5lZWQgdG8gdXBncmFkZSB0byBhIG5ld2VyIHJlbGVhc2Ugb2YgdGhlIE9wdGltaXplbHkgU0RLLlwiLFVQREFURURfT1BUSU1JWkVMWV9DT05GSUc6XCIlczogVXBkYXRlZCBPcHRpbWl6ZWx5IGNvbmZpZyB0byByZXZpc2lvbiAlcyAocHJvamVjdCBpZCAlcylcIixPVVRfT0ZfQk9VTkRTOiclczogQXVkaWVuY2UgY29uZGl0aW9uICVzIGV2YWx1YXRlZCB0byBVTktOT1dOIGJlY2F1c2UgdGhlIG51bWJlciB2YWx1ZSBmb3IgdXNlciBhdHRyaWJ1dGUgXCIlc1wiIGlzIG5vdCBpbiB0aGUgcmFuZ2UgWy0yXjUzLCArMl41M10uJyxVTkFCTEVfVE9fQVRUQUNIX1VOTE9BRDonJXM6IHVuYWJsZSB0byBiaW5kIG9wdGltaXplbHkuY2xvc2UoKSB0byBwYWdlIHVubG9hZCBldmVudDogXCIlc1wiJ30sWT17Qk9UX0ZJTFRFUklORzpcIiRvcHRfYm90X2ZpbHRlcmluZ1wiLEJVQ0tFVElOR19JRDpcIiRvcHRfYnVja2V0aW5nX2lkXCIsU1RJQ0tZX0JVQ0tFVElOR19LRVk6XCIkb3B0X2V4cGVyaW1lbnRfYnVja2V0X21hcFwiLFVTRVJfQUdFTlQ6XCIkb3B0X3VzZXJfYWdlbnRcIixGT1JDRURfREVDSVNJT05fTlVMTF9SVUxFX0tFWTpcIiRvcHRfbnVsbF9ydWxlX2tleVwifSxYPXtBQl9URVNUOlwiYWItdGVzdFwiLEZFQVRVUkU6XCJmZWF0dXJlXCIsRkVBVFVSRV9URVNUOlwiZmVhdHVyZS10ZXN0XCIsRkVBVFVSRV9WQVJJQUJMRTpcImZlYXR1cmUtdmFyaWFibGVcIixBTExfRkVBVFVSRV9WQVJJQUJMRVM6XCJhbGwtZmVhdHVyZS12YXJpYWJsZXNcIixGTEFHOlwiZmxhZ1wifSxKPXtGRUFUVVJFX1RFU1Q6XCJmZWF0dXJlLXRlc3RcIixST0xMT1VUOlwicm9sbG91dFwiLEVYUEVSSU1FTlQ6XCJleHBlcmltZW50XCJ9LFc9e1JVTEU6XCJydWxlXCIsRVhQRVJJTUVOVDpcImV4cGVyaW1lbnRcIn0sWj17Qk9PTEVBTjpcImJvb2xlYW5cIixET1VCTEU6XCJkb3VibGVcIixJTlRFR0VSOlwiaW50ZWdlclwiLFNUUklORzpcInN0cmluZ1wiLEpTT046XCJqc29uXCJ9LFE9e1YyOlwiMlwiLFYzOlwiM1wiLFY0OlwiNFwifSwkPXtTREtfTk9UX1JFQURZOlwiT3B0aW1pemVseSBTREsgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkgeWV0LlwiLEZMQUdfS0VZX0lOVkFMSUQ6J05vIGZsYWcgd2FzIGZvdW5kIGZvciBrZXkgXCIlc1wiLicsVkFSSUFCTEVfVkFMVUVfSU5WQUxJRDonVmFyaWFibGUgdmFsdWUgZm9yIGtleSBcIiVzXCIgaXMgaW52YWxpZCBvciB3cm9uZyB0eXBlLid9OyFmdW5jdGlvbihlKXtlLkFDVElWQVRFPVwiQUNUSVZBVEU6ZXhwZXJpbWVudCwgdXNlcl9pZCxhdHRyaWJ1dGVzLCB2YXJpYXRpb24sIGV2ZW50XCIsZS5ERUNJU0lPTj1cIkRFQ0lTSU9OOnR5cGUsIHVzZXJJZCwgYXR0cmlidXRlcywgZGVjaXNpb25JbmZvXCIsZS5MT0dfRVZFTlQ9XCJMT0dfRVZFTlQ6bG9nRXZlbnRcIixlLk9QVElNSVpFTFlfQ09ORklHX1VQREFURT1cIk9QVElNSVpFTFlfQ09ORklHX1VQREFURVwiLGUuVFJBQ0s9XCJUUkFDSzpldmVudF9rZXksIHVzZXJfaWQsIGF0dHJpYnV0ZXMsIGV2ZW50X3RhZ3MsIGV2ZW50XCJ9KHd8fCh3PXt9KSk7dmFyIGVlOyFmdW5jdGlvbihlKXtlLlZVSUQ9XCJ2dWlkXCIsZS5GU19VU0VSX0lEPVwiZnNfdXNlcl9pZFwifShlZXx8KGVlPXt9KSk7dmFyIHRlOyFmdW5jdGlvbihlKXtlLklERU5USUZJRUQ9XCJpZGVudGlmaWVkXCIsZS5JTklUSUFMSVpFRD1cImNsaWVudF9pbml0aWFsaXplZFwifSh0ZXx8KHRlPXt9KSk7dmFyIHJlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLExPR19MRVZFTDpxLEVSUk9SX01FU1NBR0VTOkgsTE9HX01FU1NBR0VTOnosQ09OVFJPTF9BVFRSSUJVVEVTOlksSkFWQVNDUklQVF9DTElFTlRfRU5HSU5FOlwiamF2YXNjcmlwdC1zZGtcIixOT0RFX0NMSUVOVF9FTkdJTkU6XCJub2RlLXNka1wiLFJFQUNUX0NMSUVOVF9FTkdJTkU6XCJyZWFjdC1zZGtcIixSRUFDVF9OQVRJVkVfQ0xJRU5UX0VOR0lORTpcInJlYWN0LW5hdGl2ZS1zZGtcIixSRUFDVF9OQVRJVkVfSlNfQ0xJRU5UX0VOR0lORTpcInJlYWN0LW5hdGl2ZS1qcy1zZGtcIixDTElFTlRfVkVSU0lPTjpcIjUuNC4xXCIsREVDSVNJT05fTk9USUZJQ0FUSU9OX1RZUEVTOlgsREVDSVNJT05fU09VUkNFUzpKLEFVRElFTkNFX0VWQUxVQVRJT05fVFlQRVM6VyxGRUFUVVJFX1ZBUklBQkxFX1RZUEVTOlosREFUQUZJTEVfVkVSU0lPTlM6USxERUNJU0lPTl9NRVNTQUdFUzokLGdldCBOT1RJRklDQVRJT05fVFlQRVMoKXtyZXR1cm4gd30sUkVRVUVTVF9USU1FT1VUX01TOjZlNCxSRVFVRVNUX1RJTUVPVVRfT0RQX1NFR01FTlRTX01TOjFlNCxSRVFVRVNUX1RJTUVPVVRfT0RQX0VWRU5UU19NUzoxZTQsZ2V0IE9EUF9VU0VSX0tFWSgpe3JldHVybiBlZX0sRlNfVVNFUl9JRF9BTElBUzpcImZzLXVzZXItaWRcIixPRFBfREVGQVVMVF9FVkVOVF9UWVBFOlwiZnVsbHN0YWNrXCIsZ2V0IE9EUF9FVkVOVF9BQ1RJT04oKXtyZXR1cm4gdGV9fSksaWU9TShcIkV2ZW50UHJvY2Vzc29yXCIpO3ZhciBuZT1NKFwiRXZlbnRQcm9jZXNzb3JcIiksb2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PWUua2V5LHI9ZS5tYXhWYWx1ZXMsaT12b2lkIDA9PT1yPzFlMzpyO3RoaXMuTFNfS0VZPXQsdGhpcy5tYXhWYWx1ZXM9aX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldE1hcCgpW2VdfHxudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldE1hcCgpO3JbZV09dCx0aGlzLnJlcGxhY2Uocil9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldE1hcCgpO2RlbGV0ZSB0W2VdLHRoaXMucmVwbGFjZSh0KX0sZS5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5nZXRNYXAoKSl9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yZXBsYWNlKHt9KX0sZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlKXt0cnl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3cmJndpbmRvdy5sb2NhbFN0b3JhZ2UmJmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTFNfS0VZLEpTT04uc3RyaW5naWZ5KGUpKTpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkxTX0tFWSxKU09OLnN0cmluZ2lmeShlKSksdGhpcy5jbGVhbigpfWNhdGNoKGUpe25lLmVycm9yKFN0cmluZyhlKSl9fSxlLnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0TWFwKCksdD1PYmplY3Qua2V5cyhlKSxyPXQubGVuZ3RoLXRoaXMubWF4VmFsdWVzO2lmKCEocjwxKSl7dmFyIGk9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntrZXk6dCx2YWx1ZTplW3RdfX0pKTtpLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudmFsdWUudGltZXN0YW1wLXQudmFsdWUudGltZXN0YW1wfSkpO2Zvcih2YXIgbj0wO248cjtuKyspZGVsZXRlIGVbaVtuXS5rZXldO3RoaXMucmVwbGFjZShlKX19LGUucHJvdG90eXBlLmdldE1hcD1mdW5jdGlvbigpe3RyeXt2YXIgZT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdyYmd2luZG93LmxvY2FsU3RvcmFnZSYmbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MU19LRVkpOmxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTFNfS0VZKTtpZihlKXJldHVybiBKU09OLnBhcnNlKGUpfHx7fX1jYXRjaChlKXtuZS5lcnJvcihlKX1yZXR1cm57fX0sZX0oKSxzZT1NKFwiRXZlbnRQcm9jZXNzb3JcIiksYWU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgcj10LmV2ZW50RGlzcGF0Y2hlcjtyZXR1cm4gZS5jYWxsKHRoaXMse2V2ZW50RGlzcGF0Y2hlcjpyLHN0b3JlOm5ldyBvZSh7bWF4VmFsdWVzOjEwMCxrZXk6XCJmc19vcHRseV9wZW5kaW5nX2V2ZW50c1wifSl9KXx8dGhpc31yZXR1cm4gcyh0LGUpLHR9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lLmV2ZW50RGlzcGF0Y2hlcixyPWUuc3RvcmU7dGhpcy5kaXNwYXRjaGVyPXQsdGhpcy5zdG9yZT1yfXJldHVybiBlLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKGUsdCl7dGhpcy5zZW5kKHt1dWlkOmgoKSx0aW1lc3RhbXA6SSgpLHJlcXVlc3Q6ZX0sdCl9LGUucHJvdG90eXBlLnNlbmRQZW5kaW5nRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuc3RvcmUudmFsdWVzKCk7c2UuZGVidWcoXCJTZW5kaW5nICVzIHBlbmRpbmcgZXZlbnRzIGZyb20gcHJldmlvdXMgcGFnZVwiLHQubGVuZ3RoKSx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3RyeXtlLnNlbmQodCwoZnVuY3Rpb24oKXt9KSl9Y2F0Y2goZSl7c2UuZGVidWcoU3RyaW5nKGUpKX19KSl9LGUucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3RoaXMuc3RvcmUuc2V0KGUudXVpZCxlKSx0aGlzLmRpc3BhdGNoZXIuZGlzcGF0Y2hFdmVudChlLnJlcXVlc3QsKGZ1bmN0aW9uKGkpe3Iuc3RvcmUucmVtb3ZlKGUudXVpZCksdChpKX0pKX0sZX0oKSk7ZnVuY3Rpb24gdWUoZSl7dmFyIHQ9W10scj1lWzBdO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKFwiY29udmVyc2lvblwiPT09ZS50eXBlfHxcImltcHJlc3Npb25cIj09PWUudHlwZSl7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9e3NuYXBzaG90czpbXSx2aXNpdG9yX2lkOmUudXNlci5pZCxhdHRyaWJ1dGVzOltdfTtlLnVzZXIuYXR0cmlidXRlcy5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmF0dHJpYnV0ZXMucHVzaCh7ZW50aXR5X2lkOmUuZW50aXR5SWQsa2V5OmUua2V5LHR5cGU6XCJjdXN0b21cIix2YWx1ZTplLnZhbHVlfSl9KSksXCJib29sZWFuXCI9PXR5cGVvZiBlLmNvbnRleHQuYm90RmlsdGVyaW5nJiZ0LmF0dHJpYnV0ZXMucHVzaCh7ZW50aXR5X2lkOlwiJG9wdF9ib3RfZmlsdGVyaW5nXCIsa2V5OlwiJG9wdF9ib3RfZmlsdGVyaW5nXCIsdHlwZTpcImN1c3RvbVwiLHZhbHVlOmUuY29udGV4dC5ib3RGaWx0ZXJpbmd9KTtyZXR1cm4gdH0oZSk7XCJpbXByZXNzaW9uXCI9PT1lLnR5cGU/ci5zbmFwc2hvdHMucHVzaChmdW5jdGlvbihlKXt2YXIgdCxyLGk9ZS5sYXllcixuPWUuZXhwZXJpbWVudCxvPWUudmFyaWF0aW9uLHM9ZS5ydWxlS2V5LGE9ZS5mbGFnS2V5LHU9ZS5ydWxlVHlwZSxsPWUuZW5hYmxlZCxjPWk/aS5pZDpudWxsLHA9bnVsbCE9PSh0PW51bGw9PW4/dm9pZCAwOm4uaWQpJiZ2b2lkIDAhPT10P3Q6XCJcIixkPW51bGwhPT0ocj1udWxsPT1vP3ZvaWQgMDpvLmlkKSYmdm9pZCAwIT09cj9yOlwiXCIsZj1vP28ua2V5OlwiXCI7cmV0dXJue2RlY2lzaW9uczpbe2NhbXBhaWduX2lkOmMsZXhwZXJpbWVudF9pZDpwLHZhcmlhdGlvbl9pZDpkLG1ldGFkYXRhOntmbGFnX2tleTphLHJ1bGVfa2V5OnMscnVsZV90eXBlOnUsdmFyaWF0aW9uX2tleTpmLGVuYWJsZWQ6bH19XSxldmVudHM6W3tlbnRpdHlfaWQ6Yyx0aW1lc3RhbXA6ZS50aW1lc3RhbXAsa2V5OlwiY2FtcGFpZ25fYWN0aXZhdGVkXCIsdXVpZDplLnV1aWR9XX19KGUpKTpcImNvbnZlcnNpb25cIj09PWUudHlwZSYmci5zbmFwc2hvdHMucHVzaChmdW5jdGlvbihlKXt2YXIgdD1hKHt9LGUudGFncyk7ZGVsZXRlIHQucmV2ZW51ZSxkZWxldGUgdC52YWx1ZTt2YXIgcj17ZW50aXR5X2lkOmUuZXZlbnQuaWQsa2V5OmUuZXZlbnQua2V5LHRpbWVzdGFtcDplLnRpbWVzdGFtcCx1dWlkOmUudXVpZH07ZS50YWdzJiYoci50YWdzPWUudGFncyk7bnVsbCE9ZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSk7bnVsbCE9ZS5yZXZlbnVlJiYoci5yZXZlbnVlPWUucmV2ZW51ZSk7cmV0dXJue2V2ZW50czpbcl19fShlKSksdC5wdXNoKHIpfX0pKSx7Y2xpZW50X25hbWU6ci5jb250ZXh0LmNsaWVudE5hbWUsY2xpZW50X3ZlcnNpb246ci5jb250ZXh0LmNsaWVudFZlcnNpb24sYWNjb3VudF9pZDpyLmNvbnRleHQuYWNjb3VudElkLHByb2plY3RfaWQ6ci5jb250ZXh0LnByb2plY3RJZCxyZXZpc2lvbjpyLmNvbnRleHQucmV2aXNpb24sYW5vbnltaXplX2lwOnIuY29udGV4dC5hbm9ueW1pemVJUCxlbnJpY2hfZGVjaXNpb25zOiEwLHZpc2l0b3JzOnR9fXZhciBsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnJlcXNJbkZsaWdodENvdW50PTAsdGhpcy5yZXFzQ29tcGxldGVSZXNvbHZlcnM9W119cmV0dXJuIGUucHJvdG90eXBlLnRyYWNrUmVxdWVzdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMucmVxc0luRmxpZ2h0Q291bnQrKzt2YXIgcj1mdW5jdGlvbigpe3QucmVxc0luRmxpZ2h0Q291bnQtLSwwPT09dC5yZXFzSW5GbGlnaHRDb3VudCYmKHQucmVxc0NvbXBsZXRlUmVzb2x2ZXJzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSksdC5yZXFzQ29tcGxldGVSZXNvbHZlcnM9W10pfTtlLnRoZW4ocixyKX0sZS5wcm90b3R5cGUub25SZXF1ZXN0c0NvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpezA9PT1lLnJlcXNJbkZsaWdodENvdW50P3QoKTplLnJlcXNDb21wbGV0ZVJlc29sdmVycy5wdXNoKHQpfSkpfSxlfSgpLGNlPU0oXCJMb2dUaWVyVjFFdmVudFByb2Nlc3NvclwiKSxwZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS5kaXNwYXRjaGVyLHI9ZS5jbG9zaW5nRGlzcGF0Y2hlcixpPWUuZmx1c2hJbnRlcnZhbCxuPXZvaWQgMD09PWk/M2U0Omksbz1lLmJhdGNoU2l6ZSxzPXZvaWQgMD09PW8/MTA6byxhPWUubm90aWZpY2F0aW9uQ2VudGVyO3RoaXMuZGlzcGF0Y2hlcj10LHRoaXMuY2xvc2luZ0Rpc3BhdGNoZXI9cix0aGlzLm5vdGlmaWNhdGlvbkNlbnRlcj1hLHRoaXMucmVxdWVzdFRyYWNrZXI9bmV3IGxlLG49ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTAmJihpZS53YXJuKFwiSW52YWxpZCBmbHVzaEludGVydmFsIFwiLmNvbmNhdChlLFwiLCBkZWZhdWx0aW5nIHRvIFwiKS5jb25jYXQoM2U0KSksZT0zZTQpLGV9KG4pLHM9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9TWF0aC5mbG9vcihlKSk8MSYmKGllLndhcm4oXCJJbnZhbGlkIGJhdGNoU2l6ZSBcIi5jb25jYXQoZSxcIiwgZGVmYXVsdGluZyB0byBcIikuY29uY2F0KDEwKSksZT0xMCksZT1NYXRoLm1heCgxLGUpfShzKSx0aGlzLnF1ZXVlPWZ1bmN0aW9uKGUsdCxyLGksbil7cmV0dXJuIGU+MT9uZXcgaih7Zmx1c2hJbnRlcnZhbDp0LG1heFF1ZXVlU2l6ZTplLHNpbms6aSxjbG9zaW5nU2luazpuLGJhdGNoQ29tcGFyYXRvcjpyfSk6bmV3IEsoe3Npbms6aX0pfShzLG4sayx0aGlzLmRyYWluUXVldWUuYmluZCh0aGlzLCExKSx0aGlzLmRyYWluUXVldWUuYmluZCh0aGlzLCEwKSl9cmV0dXJuIGUucHJvdG90eXBlLmRyYWluUXVldWU9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLGk9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGkpe2lmKGNlLmRlYnVnKFwiZHJhaW5pbmcgcXVldWUgd2l0aCAlcyBldmVudHNcIix0Lmxlbmd0aCksMCE9PXQubGVuZ3RoKXt2YXIgbixvLHM9e3VybDpcImh0dHBzOi8vbG9neC5vcHRpbWl6ZWx5LmNvbS92MS9ldmVudHNcIixodHRwVmVyYjpcIlBPU1RcIixwYXJhbXM6dWUodCl9OyhlJiZyLmNsb3NpbmdEaXNwYXRjaGVyP3IuY2xvc2luZ0Rpc3BhdGNoZXI6ci5kaXNwYXRjaGVyKS5kaXNwYXRjaEV2ZW50KHMsKGZ1bmN0aW9uKCl7aSgpfSkpLG49ci5ub3RpZmljYXRpb25DZW50ZXIsbz1zLG4mJm4uc2VuZE5vdGlmaWNhdGlvbnMody5MT0dfRVZFTlQsbyl9ZWxzZSBpKCl9KSk7cmV0dXJuIHRoaXMucmVxdWVzdFRyYWNrZXIudHJhY2tSZXF1ZXN0KGkpLGl9LGUucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oZSl7dGhpcy5xdWV1ZS5lbnF1ZXVlKGUpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiB0aGlzLnF1ZXVlLnN0b3AoKSx0aGlzLnJlcXVlc3RUcmFja2VyLm9uUmVxdWVzdHNDb21wbGV0ZSgpfWNhdGNoKGUpe2NlLmVycm9yKCdFcnJvciBzdG9wcGluZyBFdmVudFByb2Nlc3NvcjogXCIlc1wiJyxPYmplY3QoZSkubWVzc2FnZSxTdHJpbmcoZSkpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcywoZnVuY3Rpb24oZSl7c3dpdGNoKGUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnF1ZXVlLnN0YXJ0KCldO2Nhc2UgMTpyZXR1cm4gZS5zZW50KCksWzJdfX0pKX0pKX0sZX0oKSxkZT1cIkNPTkZJR19WQUxJREFUT1JcIixmZT1bUS5WMixRLlYzLFEuVjRdLGdlPWZ1bmN0aW9uKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSl7dmFyIHQ9ZSxyPXQuZXJyb3JIYW5kbGVyLGk9dC5ldmVudERpc3BhdGNoZXIsbj10LmxvZ2dlcjtpZihyJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByLmhhbmRsZUVycm9yKXRocm93IG5ldyBFcnJvcihOKEguSU5WQUxJRF9FUlJPUl9IQU5ETEVSLGRlKSk7aWYoaSYmXCJmdW5jdGlvblwiIT10eXBlb2YgaS5kaXNwYXRjaEV2ZW50KXRocm93IG5ldyBFcnJvcihOKEguSU5WQUxJRF9FVkVOVF9ESVNQQVRDSEVSLGRlKSk7aWYobiYmXCJmdW5jdGlvblwiIT10eXBlb2Ygbi5sb2cpdGhyb3cgbmV3IEVycm9yKE4oSC5JTlZBTElEX0xPR0dFUixkZSkpO3JldHVybiEwfXRocm93IG5ldyBFcnJvcihOKEguSU5WQUxJRF9DT05GSUcsZGUpKX0sRWU9ZnVuY3Rpb24oZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKE4oSC5OT19EQVRBRklMRV9TUEVDSUZJRUQsZGUpKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl0cnl7ZT1KU09OLnBhcnNlKGUpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihOKEguSU5WQUxJRF9EQVRBRklMRV9NQUxGT1JNRUQsZGUpKX1pZihcIm9iamVjdFwiPT10eXBlb2YgZSYmIUFycmF5LmlzQXJyYXkoZSkmJm51bGwhPT1lJiYtMT09PWZlLmluZGV4T2YoZS52ZXJzaW9uKSl0aHJvdyBuZXcgRXJyb3IoTihILklOVkFMSURfREFUQUZJTEVfVkVSU0lPTixkZSxlLnZlcnNpb24pKTtyZXR1cm4gZX07dmFyIGhlPXtoYW5kbGVFcnJvcjpmdW5jdGlvbigpe319LEllPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KGVbdF0pfSkpLmpvaW4oXCImXCIpfSxfZT17ZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihlLHQpe3ZhciByLGk9ZS5wYXJhbXMsbj1lLnVybDtcIlBPU1RcIj09PWUuaHR0cFZlcmI/KChyPW5ldyBYTUxIdHRwUmVxdWVzdCkub3BlbihcIlBPU1RcIixuLCEwKSxyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIixcImFwcGxpY2F0aW9uL2pzb25cIiksci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZig0PT09ci5yZWFkeVN0YXRlJiZ0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXRyeXt0KHtzdGF0dXNDb2RlOnIuc3RhdHVzfSl9Y2F0Y2goZSl7fX0sci5zZW5kKEpTT04uc3RyaW5naWZ5KGkpKSk6KG4rPVwiP3d4aHI9dHJ1ZVwiLGkmJihuKz1cIiZcIitJZShpKSksKHI9bmV3IFhNTEh0dHBSZXF1ZXN0KS5vcGVuKFwiR0VUXCIsbiwhMCksci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZig0PT09ci5yZWFkeVN0YXRlJiZ0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXRyeXt0KHtzdGF0dXNDb2RlOnIuc3RhdHVzfSl9Y2F0Y2goZSl7fX0sci5zZW5kKCkpfX0sdmU9e2Rpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnBhcmFtcyxpPWUudXJsLG49bmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHIpXSx7dHlwZTpcImFwcGxpY2F0aW9uL2pzb25cIn0pO3Qoe3N0YXR1c0NvZGU6bmF2aWdhdG9yLnNlbmRCZWFjb24oaSxuKT8yMDA6NTAwfSl9fSx5ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmxvZz1mdW5jdGlvbigpe30sZX0oKTtmdW5jdGlvbiBPZShlKXtyZXR1cm4gbmV3IFUoZSl9dmFyIFJlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLE5vT3BMb2dnZXI6eWUsY3JlYXRlTG9nZ2VyOk9lLGNyZWF0ZU5vT3BMb2dnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHllfX0pLE5lPWZ1bmN0aW9uKGUpe3JldHVybiEoXCJudW1iZXJcIiE9dHlwZW9mIGV8fCFBLmlzU2FmZUludGVnZXIoZSkpJiZlPj0xfSxUZT1mdW5jdGlvbihlKXtyZXR1cm4hKFwibnVtYmVyXCIhPXR5cGVvZiBlfHwhQS5pc1NhZmVJbnRlZ2VyKGUpKSYmZT4wfSxtZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9dGhpczt0aGlzLmxvZ2dlcj1lLmxvZ2dlcix0aGlzLmVycm9ySGFuZGxlcj1lLmVycm9ySGFuZGxlcix0aGlzLm5vdGlmaWNhdGlvbkxpc3RlbmVycz17fSx2KHcpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Qubm90aWZpY2F0aW9uTGlzdGVuZXJzW2VdPVtdfSkpLHRoaXMubGlzdGVuZXJJZD0xfXJldHVybiBlLnByb3RvdHlwZS5hZGROb3RpZmljYXRpb25MaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3RyeXtpZighKHYodykuaW5kZXhPZihlKT4tMSkpcmV0dXJuLTE7dGhpcy5ub3RpZmljYXRpb25MaXN0ZW5lcnNbZV18fCh0aGlzLm5vdGlmaWNhdGlvbkxpc3RlbmVyc1tlXT1bXSk7dmFyIHI9ITE7aWYoKHRoaXMubm90aWZpY2F0aW9uTGlzdGVuZXJzW2VdfHxbXSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jYWxsYmFjayE9PXR8fChyPSEwKX0pKSxyKXJldHVybi0xO3RoaXMubm90aWZpY2F0aW9uTGlzdGVuZXJzW2VdLnB1c2goe2lkOnRoaXMubGlzdGVuZXJJZCxjYWxsYmFjazp0fSk7dmFyIGk9dGhpcy5saXN0ZW5lcklkO3JldHVybiB0aGlzLmxpc3RlbmVySWQrPTEsaX1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSwtMX19LGUucHJvdG90eXBlLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dHJ5e3ZhciByLGk7aWYoT2JqZWN0LmtleXModGhpcy5ub3RpZmljYXRpb25MaXN0ZW5lcnMpLnNvbWUoKGZ1bmN0aW9uKG4pe3JldHVybih0Lm5vdGlmaWNhdGlvbkxpc3RlbmVyc1tuXXx8W10pLmV2ZXJ5KChmdW5jdGlvbih0LG8pe3JldHVybiB0LmlkIT09ZXx8KHI9byxpPW4sITEpfSkpLHZvaWQgMCE9PXImJnZvaWQgMCE9PWl9KSksdm9pZCAwIT09ciYmdm9pZCAwIT09aSlyZXR1cm4gdGhpcy5ub3RpZmljYXRpb25MaXN0ZW5lcnNbaV0uc3BsaWNlKHIsMSksITB9Y2F0Y2goZSl7dGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKX1yZXR1cm4hMX0sZS5wcm90b3R5cGUuY2xlYXJBbGxOb3RpZmljYXRpb25MaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RyeXt2KHcpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Uubm90aWZpY2F0aW9uTGlzdGVuZXJzW3RdPVtdfSkpfWNhdGNoKGUpe3RoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLGUubWVzc2FnZSksdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZSl9fSxlLnByb3RvdHlwZS5jbGVhck5vdGlmaWNhdGlvbkxpc3RlbmVycz1mdW5jdGlvbihlKXt0cnl7dGhpcy5ub3RpZmljYXRpb25MaXN0ZW5lcnNbZV09W119Y2F0Y2goZSl7dGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKX19LGUucHJvdG90eXBlLnNlbmROb3RpZmljYXRpb25zPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpczt0cnl7KHRoaXMubm90aWZpY2F0aW9uTGlzdGVuZXJzW2VdfHxbXSkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIG49aS5jYWxsYmFjazt0cnl7bih0KX1jYXRjaCh0KXtyLmxvZ2dlci5sb2cocS5FUlJPUix6Lk5PVElGSUNBVElPTl9MSVNURU5FUl9FWENFUFRJT04sXCJOT1RJRklDQVRJT05fQ0VOVEVSXCIsZSx0Lm1lc3NhZ2UpfX0pKX1jYXRjaChlKXt0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixlLm1lc3NhZ2UpLHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGUpfX0sZX0oKTtmdW5jdGlvbiBBZShlKXtyZXR1cm4gbmV3IG1lKGUpfXZhciBEZSxTZSxMZSxVZT17Y3JlYXRlRXZlbnRQcm9jZXNzb3I6ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIG5ldyhwZS5iaW5kLmFwcGx5KHBlLGMoW3ZvaWQgMF0sZSwhMSkpKX0sTG9jYWxTdG9yYWdlUGVuZGluZ0V2ZW50c0Rpc3BhdGNoZXI6YWV9OyhEZT1leHBvcnRzLk9wdGltaXplbHlTZWdtZW50T3B0aW9ufHwoZXhwb3J0cy5PcHRpbWl6ZWx5U2VnbWVudE9wdGlvbj17fSkpLklHTk9SRV9DQUNIRT1cIklHTk9SRV9DQUNIRVwiLERlLlJFU0VUX0NBQ0hFPVwiUkVTRVRfQ0FDSEVcIixmdW5jdGlvbihlKXtlLkJPT0xFQU49XCJib29sZWFuXCIsZS5ET1VCTEU9XCJkb3VibGVcIixlLklOVEVHRVI9XCJpbnRlZ2VyXCIsZS5TVFJJTkc9XCJzdHJpbmdcIixlLkpTT049XCJqc29uXCJ9KFNlfHwoU2U9e30pKSwoTGU9ZXhwb3J0cy5PcHRpbWl6ZWx5RGVjaWRlT3B0aW9ufHwoZXhwb3J0cy5PcHRpbWl6ZWx5RGVjaWRlT3B0aW9uPXt9KSkuRElTQUJMRV9ERUNJU0lPTl9FVkVOVD1cIkRJU0FCTEVfREVDSVNJT05fRVZFTlRcIixMZS5FTkFCTEVEX0ZMQUdTX09OTFk9XCJFTkFCTEVEX0ZMQUdTX09OTFlcIixMZS5JR05PUkVfVVNFUl9QUk9GSUxFX1NFUlZJQ0U9XCJJR05PUkVfVVNFUl9QUk9GSUxFX1NFUlZJQ0VcIixMZS5JTkNMVURFX1JFQVNPTlM9XCJJTkNMVURFX1JFQVNPTlNcIixMZS5FWENMVURFX1ZBUklBQkxFUz1cIkVYQ0xVREVfVkFSSUFCTEVTXCI7dmFyIENlPVwiUG9sbGluZyBpbnRlcnZhbHMgYmVsb3cgXCIuY29uY2F0KDMwLFwiIHNlY29uZHMgYXJlIG5vdCByZWNvbW1lbmRlZC5cIiksUGU9WzAsOCwxNiwzMiw2NCwxMjgsMjU2LDUxMl0sYmU9TShcIkRhdGFmaWxlTWFuYWdlclwiKTtmdW5jdGlvbiBWZShlLHQpe3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm57cmVzcG9uc2VQcm9taXNlOm5ldyBQcm9taXNlKChmdW5jdGlvbihpLG4pe3Iub3BlbihcIkdFVFwiLGUsITApLGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9ZVtyXTt0LnNldFJlcXVlc3RIZWFkZXIocixpKX0pKX0odCxyKSxyLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKDQ9PT1yLnJlYWR5U3RhdGUpe2lmKDA9PT1yLnN0YXR1cylyZXR1cm4gdm9pZCBuKG5ldyBFcnJvcihcIlJlcXVlc3QgZXJyb3JcIikpO3ZhciBlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7aWYobnVsbD09PXQpcmV0dXJue307dmFyIHI9dC5zcGxpdChcIlxcclxcblwiKSxpPXt9O3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5kZXhPZihcIjogXCIpO2lmKHQ+LTEpe3ZhciByPWUuc2xpY2UoMCx0KSxuPWUuc2xpY2UodCsyKTtuLmxlbmd0aD4wJiYoaVtyXT1uKX19KSksaX0ociksdD17c3RhdHVzQ29kZTpyLnN0YXR1cyxib2R5OnIucmVzcG9uc2VUZXh0LGhlYWRlcnM6ZX07aSh0KX19LHIudGltZW91dD02ZTQsci5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtiZS5lcnJvcihcIlJlcXVlc3QgdGltZWQgb3V0XCIpfSxyLnNlbmQoKX0pKSxhYm9ydDpmdW5jdGlvbigpe3IuYWJvcnQoKX19fXZhciBNZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmxpc3RlbmVycz17fSx0aGlzLmxpc3RlbmVySWQ9MX1yZXR1cm4gZS5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3RoaXMubGlzdGVuZXJzW2VdfHwodGhpcy5saXN0ZW5lcnNbZV09e30pO3ZhciBpPVN0cmluZyh0aGlzLmxpc3RlbmVySWQpO3JldHVybiB0aGlzLmxpc3RlbmVySWQrKyx0aGlzLmxpc3RlbmVyc1tlXVtpXT10LGZ1bmN0aW9uKCl7ci5saXN0ZW5lcnNbZV0mJmRlbGV0ZSByLmxpc3RlbmVyc1tlXVtpXX19LGUucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmxpc3RlbmVyc1tlXTtyJiZPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChmdW5jdGlvbihlKXsoMCxyW2VdKSh0KX0pKX0sZS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dGhpcy5saXN0ZW5lcnM9e319LGV9KCk7dmFyIEZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuZXJyb3JDb3VudD0wfXJldHVybiBlLnByb3RvdHlwZS5nZXREZWxheT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5lcnJvckNvdW50PzA6MWUzKlBlW01hdGgubWluKFBlLmxlbmd0aC0xLHRoaXMuZXJyb3JDb3VudCldK01hdGgucm91bmQoMWUzKk1hdGgucmFuZG9tKCkpfSxlLnByb3RvdHlwZS5jb3VudEVycm9yPWZ1bmN0aW9uKCl7dGhpcy5lcnJvckNvdW50PFBlLmxlbmd0aC0xJiZ0aGlzLmVycm9yQ291bnQrK30sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmVycm9yQ291bnQ9MH0sZX0oKSx4ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUuZ2V0Tm90aWZpY2F0aW9uQ2VudGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI7aWYodm9pZCAwPT09dCYmKHQ9TSgpKSxlKXJldHVybiB0aGlzLl9ub3RpZmljYXRpb25DZW50ZXJzLmhhcyhlKT9yPXRoaXMuX25vdGlmaWNhdGlvbkNlbnRlcnMuZ2V0KGUpOihyPUFlKHtsb2dnZXI6dCxlcnJvckhhbmRsZXI6e2hhbmRsZUVycm9yOmZ1bmN0aW9uKCl7fX19KSx0aGlzLl9ub3RpZmljYXRpb25DZW50ZXJzLnNldChlLHIpKSxyO3QubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsXCJObyBTREsga2V5IHByb3ZpZGVkIHRvIGdldE5vdGlmaWNhdGlvbkNlbnRlci5cIil9LGUucmVtb3ZlTm90aWZpY2F0aW9uQ2VudGVyPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMuX25vdGlmaWNhdGlvbkNlbnRlcnMuZ2V0KGUpO3QmJih0LmNsZWFyQWxsTm90aWZpY2F0aW9uTGlzdGVuZXJzKCksdGhpcy5fbm90aWZpY2F0aW9uQ2VudGVycy5kZWxldGUoZSkpfX0sZS5fbm90aWZpY2F0aW9uQ2VudGVycz1uZXcgTWFwLGV9KCksa2U9TShcIkRhdGFmaWxlTWFuYWdlclwiKTtmdW5jdGlvbiB3ZShlKXtyZXR1cm4gZT49MjAwJiZlPDQwMH12YXIgR2U9e2dldDpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUodm9pZCAwKX0sc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxjb250YWluczpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoITEpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKX19LEJlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBzKHQsZSksdC5wcm90b3R5cGUubWFrZUdldFJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVmUoZSx0KX0sdC5wcm90b3R5cGUuZ2V0Q29uZmlnRGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm57YXV0b1VwZGF0ZTohMX19LHR9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzLHI9YShhKHt9LHRoaXMuZ2V0Q29uZmlnRGVmYXVsdHMoKSksZSksaT1yLmRhdGFmaWxlLG49ci5hdXRvVXBkYXRlLG89dm9pZCAwIT09biYmbixzPXIuc2RrS2V5LHU9ci51cGRhdGVJbnRlcnZhbCxsPXZvaWQgMD09PXU/M2U1OnUsYz1yLnVybFRlbXBsYXRlLHA9dm9pZCAwPT09Yz9cImh0dHBzOi8vY2RuLm9wdGltaXplbHkuY29tL2RhdGFmaWxlcy8lcy5qc29uXCI6YyxkPXIuY2FjaGUsZj12b2lkIDA9PT1kP0dlOmQsZz1yLmN1c3RvbUhlYWRlcnM7dGhpcy5jYWNoZT1mLHRoaXMuY2FjaGVLZXk9XCJvcHQtZGF0YWZpbGUtXCIrcyx0aGlzLnNka0tleT1zLHRoaXMuY3VzdG9tSGVhZGVycz1nLHRoaXMuaXNSZWFkeVByb21pc2VTZXR0bGVkPSExLHRoaXMucmVhZHlQcm9taXNlUmVzb2x2ZXI9ZnVuY3Rpb24oKXt9LHRoaXMucmVhZHlQcm9taXNlUmVqZWN0ZXI9ZnVuY3Rpb24oKXt9LHRoaXMucmVhZHlQcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe3QucmVhZHlQcm9taXNlUmVzb2x2ZXI9ZSx0LnJlYWR5UHJvbWlzZVJlamVjdGVyPXJ9KSksaT8odGhpcy5jdXJyZW50RGF0YWZpbGU9aSxzfHx0aGlzLnJlc29sdmVSZWFkeVByb21pc2UoKSk6dGhpcy5jdXJyZW50RGF0YWZpbGU9XCJcIix0aGlzLmlzU3RhcnRlZD0hMSx0aGlzLmRhdGFmaWxlVXJsPU4ocCxzKSx0aGlzLmVtaXR0ZXI9bmV3IE1lLHRoaXMuYXV0b1VwZGF0ZT1vLHRoaXMudXBkYXRlSW50ZXJ2YWw9bCx0aGlzLnVwZGF0ZUludGVydmFsPDNlNCYma2Uud2FybihDZSksdGhpcy5jdXJyZW50VGltZW91dD1udWxsLHRoaXMuY3VycmVudFJlcXVlc3Q9bnVsbCx0aGlzLmJhY2tvZmZDb250cm9sbGVyPW5ldyBGZSx0aGlzLnN5bmNPbkN1cnJlbnRSZXF1ZXN0Q29tcGxldGU9ITF9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnREYXRhZmlsZX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLmlzU3RhcnRlZHx8KGtlLmRlYnVnKFwiRGF0YWZpbGUgbWFuYWdlciBzdGFydGVkXCIpLHRoaXMuaXNTdGFydGVkPSEwLHRoaXMuYmFja29mZkNvbnRyb2xsZXIucmVzZXQoKSx0aGlzLnNldERhdGFmaWxlRnJvbUNhY2hlSWZBdmFpbGFibGUoKSx0aGlzLnN5bmNEYXRhZmlsZSgpKX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiBrZS5kZWJ1ZyhcIkRhdGFmaWxlIG1hbmFnZXIgc3RvcHBlZFwiKSx0aGlzLmlzU3RhcnRlZD0hMSx0aGlzLmN1cnJlbnRUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudFRpbWVvdXQpLHRoaXMuY3VycmVudFRpbWVvdXQ9bnVsbCksdGhpcy5lbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXMuY3VycmVudFJlcXVlc3QmJih0aGlzLmN1cnJlbnRSZXF1ZXN0LmFib3J0KCksdGhpcy5jdXJyZW50UmVxdWVzdD1udWxsKSxQcm9taXNlLnJlc29sdmUoKX0sZS5wcm90b3R5cGUub25SZWFkeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWR5UHJvbWlzZX0sZS5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbWl0dGVyLm9uKGUsdCl9LGUucHJvdG90eXBlLm9uUmVxdWVzdFJlamVjdGVkPWZ1bmN0aW9uKGUpe3RoaXMuaXNTdGFydGVkJiYodGhpcy5iYWNrb2ZmQ29udHJvbGxlci5jb3VudEVycm9yKCksZSBpbnN0YW5jZW9mIEVycm9yP2tlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgZGF0YWZpbGU6ICVzXCIsZS5tZXNzYWdlLGUpOlwic3RyaW5nXCI9PXR5cGVvZiBlP2tlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgZGF0YWZpbGU6ICVzXCIsZSk6a2UuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBkYXRhZmlsZVwiKSl9LGUucHJvdG90eXBlLm9uUmVxdWVzdFJlc29sdmVkPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKHRoaXMuaXNTdGFydGVkKXt2b2lkIDAhPT1lLnN0YXR1c0NvZGUmJndlKGUuc3RhdHVzQ29kZSk/dGhpcy5iYWNrb2ZmQ29udHJvbGxlci5yZXNldCgpOnRoaXMuYmFja29mZkNvbnRyb2xsZXIuY291bnRFcnJvcigpLHRoaXMudHJ5U2F2aW5nTGFzdE1vZGlmaWVkKGUuaGVhZGVycyk7dmFyIHI9dGhpcy5nZXROZXh0RGF0YWZpbGVGcm9tUmVzcG9uc2UoZSk7aWYoXCJcIiE9PXIpaWYoa2UuaW5mbyhcIlVwZGF0aW5nIGRhdGFmaWxlIGZyb20gcmVzcG9uc2VcIiksdGhpcy5jdXJyZW50RGF0YWZpbGU9cix0aGlzLmNhY2hlLnNldCh0aGlzLmNhY2hlS2V5LHIpLHRoaXMuaXNSZWFkeVByb21pc2VTZXR0bGVkKXt2YXIgaT17ZGF0YWZpbGU6cn07bnVsbD09PSh0PXhlLmdldE5vdGlmaWNhdGlvbkNlbnRlcih0aGlzLnNka0tleSxrZSkpfHx2b2lkIDA9PT10fHx0LnNlbmROb3RpZmljYXRpb25zKHcuT1BUSU1JWkVMWV9DT05GSUdfVVBEQVRFKSx0aGlzLmVtaXR0ZXIuZW1pdChcInVwZGF0ZVwiLGkpfWVsc2UgdGhpcy5yZXNvbHZlUmVhZHlQcm9taXNlKCl9fSxlLnByb3RvdHlwZS5vblJlcXVlc3RDb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNTdGFydGVkJiYodGhpcy5jdXJyZW50UmVxdWVzdD1udWxsLHRoaXMuaXNSZWFkeVByb21pc2VTZXR0bGVkfHx0aGlzLmF1dG9VcGRhdGV8fHRoaXMucmVqZWN0UmVhZHlQcm9taXNlKG5ldyBFcnJvcihcIkZhaWxlZCB0byBiZWNvbWUgcmVhZHlcIikpLHRoaXMuYXV0b1VwZGF0ZSYmdGhpcy5zeW5jT25DdXJyZW50UmVxdWVzdENvbXBsZXRlJiZ0aGlzLnN5bmNEYXRhZmlsZSgpLHRoaXMuc3luY09uQ3VycmVudFJlcXVlc3RDb21wbGV0ZT0hMSl9LGUucHJvdG90eXBlLnN5bmNEYXRhZmlsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD17fTt0aGlzLmN1c3RvbUhlYWRlcnMmJmcodCx0aGlzLmN1c3RvbUhlYWRlcnMpLHRoaXMubGFzdFJlc3BvbnNlTGFzdE1vZGlmaWVkJiYodFtcImlmLW1vZGlmaWVkLXNpbmNlXCJdPXRoaXMubGFzdFJlc3BvbnNlTGFzdE1vZGlmaWVkKSxrZS5kZWJ1ZyhcIk1ha2luZyBkYXRhZmlsZSByZXF1ZXN0IHRvIHVybCAlcyB3aXRoIGhlYWRlcnM6ICVzXCIsdGhpcy5kYXRhZmlsZVVybCwoZnVuY3Rpb24oKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9KSksdGhpcy5jdXJyZW50UmVxdWVzdD10aGlzLm1ha2VHZXRSZXF1ZXN0KHRoaXMuZGF0YWZpbGVVcmwsdCk7dmFyIHI9ZnVuY3Rpb24oKXtlLm9uUmVxdWVzdENvbXBsZXRlKCl9O3RoaXMuY3VycmVudFJlcXVlc3QucmVzcG9uc2VQcm9taXNlLnRoZW4oKGZ1bmN0aW9uKHQpe2Uub25SZXF1ZXN0UmVzb2x2ZWQodCl9KSwoZnVuY3Rpb24odCl7ZS5vblJlcXVlc3RSZWplY3RlZCh0KX0pKS50aGVuKHIsciksdGhpcy5hdXRvVXBkYXRlJiZ0aGlzLnNjaGVkdWxlTmV4dFVwZGF0ZSgpfSxlLnByb3RvdHlwZS5yZXNvbHZlUmVhZHlQcm9taXNlPWZ1bmN0aW9uKCl7dGhpcy5yZWFkeVByb21pc2VSZXNvbHZlcigpLHRoaXMuaXNSZWFkeVByb21pc2VTZXR0bGVkPSEwfSxlLnByb3RvdHlwZS5yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oZSl7dGhpcy5yZWFkeVByb21pc2VSZWplY3RlcihlKSx0aGlzLmlzUmVhZHlQcm9taXNlU2V0dGxlZD0hMH0sZS5wcm90b3R5cGUuc2NoZWR1bGVOZXh0VXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuYmFja29mZkNvbnRyb2xsZXIuZ2V0RGVsYXkoKSxyPU1hdGgubWF4KHQsdGhpcy51cGRhdGVJbnRlcnZhbCk7a2UuZGVidWcoXCJTY2hlZHVsaW5nIHN5bmMgaW4gJXMgbXNcIixyKSx0aGlzLmN1cnJlbnRUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5jdXJyZW50UmVxdWVzdD9lLnN5bmNPbkN1cnJlbnRSZXF1ZXN0Q29tcGxldGU9ITA6ZS5zeW5jRGF0YWZpbGUoKX0pLHIpfSxlLnByb3RvdHlwZS5nZXROZXh0RGF0YWZpbGVGcm9tUmVzcG9uc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGtlLmRlYnVnKFwiUmVzcG9uc2Ugc3RhdHVzIGNvZGU6ICVzXCIsZS5zdGF0dXNDb2RlKSx2b2lkIDA9PT1lLnN0YXR1c0NvZGV8fDMwND09PWUuc3RhdHVzQ29kZT9cIlwiOndlKGUuc3RhdHVzQ29kZSk/ZS5ib2R5OihrZS5lcnJvcihcIkRhdGFmaWxlIGZldGNoIHJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzOiBcIi5jb25jYXQoZS5zdGF0dXNDb2RlKSksXCJcIil9LGUucHJvdG90eXBlLnRyeVNhdmluZ0xhc3RNb2RpZmllZD1mdW5jdGlvbihlKXt2YXIgdD1lW1wibGFzdC1tb2RpZmllZFwiXXx8ZVtcIkxhc3QtTW9kaWZpZWRcIl07dm9pZCAwIT09dCYmKHRoaXMubGFzdFJlc3BvbnNlTGFzdE1vZGlmaWVkPXQsa2UuZGVidWcoXCJTYXZlZCBsYXN0IG1vZGlmaWVkIGhlYWRlciB2YWx1ZSBmcm9tIHJlc3BvbnNlOiAlc1wiLHRoaXMubGFzdFJlc3BvbnNlTGFzdE1vZGlmaWVkKSl9LGUucHJvdG90eXBlLnNldERhdGFmaWxlRnJvbUNhY2hlSWZBdmFpbGFibGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuY2FjaGUuZ2V0KHRoaXMuY2FjaGVLZXkpLnRoZW4oKGZ1bmN0aW9uKHQpe2UuaXNTdGFydGVkJiYhZS5pc1JlYWR5UHJvbWlzZVNldHRsZWQmJnQmJihrZS5kZWJ1ZyhcIlVzaW5nIGRhdGFmaWxlIGZyb20gY2FjaGVcIiksZS5jdXJyZW50RGF0YWZpbGU9dCxlLnJlc29sdmVSZWFkeVByb21pc2UoKSl9KSl9LGV9KCkpLEtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixpKXt0aGlzLmFwaUtleT1lLHRoaXMuYXBpSG9zdD10LHRoaXMucGl4ZWxVcmw9cix0aGlzLnNlZ21lbnRzVG9DaGVjaz1pfXJldHVybiBlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYXBpSG9zdD09PWUuYXBpSG9zdCYmdGhpcy5hcGlLZXk9PT1lLmFwaUtleSYmdGhpcy5waXhlbFVybD09PWUucGl4ZWxVcmwmJlQodGhpcy5zZWdtZW50c1RvQ2hlY2ssZS5zZWdtZW50c1RvQ2hlY2spfSxlfSgpLGplPVwiUFJPSkVDVF9DT05GSUdcIjt2YXIgcWU9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1udWxsKTt2YXIgcixpLG4sbyxzPSgobz1nKHt9LHI9ZSkpLmV2ZW50cz0oci5ldmVudHN8fFtdKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWcoe30sZSk7cmV0dXJuIHQuZXhwZXJpbWVudHNJZHM9ZS5leHBlcmltZW50SWRzLHR9KSksby5hdWRpZW5jZXM9KHIuYXVkaWVuY2VzfHxbXSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZyh7fSxlKX0pKSxvLmV4cGVyaW1lbnRzPShyLmV4cGVyaW1lbnRzfHxbXSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZyh7fSxlKX0pKSxvLmZlYXR1cmVGbGFncz0oci5mZWF0dXJlRmxhZ3N8fFtdKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBnKHt9LGUpfSkpLG8uZ3JvdXBzPShyLmdyb3Vwc3x8W10pLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9Zyh7fSxlKTtyZXR1cm4gdC5leHBlcmltZW50cz0oZS5leHBlcmltZW50c3x8W10pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGcoe30sZSl9KSksdH0pKSxvLnJvbGxvdXRzPShyLnJvbGxvdXRzfHxbXSkubWFwKChmdW5jdGlvbihlKXt2YXIgdD1nKHt9LGUpO3JldHVybiB0LmV4cGVyaW1lbnRzPShlLmV4cGVyaW1lbnRzfHxbXSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZyh7fSxlKX0pKSx0fSkpLG8uZW52aXJvbm1lbnRLZXk9bnVsbCE9PShpPXIuZW52aXJvbm1lbnRLZXkpJiZ2b2lkIDAhPT1pP2k6XCJcIixvLnNka0tleT1udWxsIT09KG49ci5zZGtLZXkpJiZ2b2lkIDAhPT1uP246XCJcIixvKTtzLl9fZGF0YWZpbGVTdHI9bnVsbD09PXQ/SlNPTi5zdHJpbmdpZnkoZSk6dCwocy5hdWRpZW5jZXN8fFtdKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNvbmRpdGlvbnM9SlNPTi5wYXJzZShlLmNvbmRpdGlvbnMpfSkpLHMuYXVkaWVuY2VzQnlJZD1FKHMuYXVkaWVuY2VzLFwiaWRcIiksZyhzLmF1ZGllbmNlc0J5SWQsRShzLnR5cGVkQXVkaWVuY2VzLFwiaWRcIikpLHMuYXR0cmlidXRlS2V5TWFwPUUocy5hdHRyaWJ1dGVzLFwia2V5XCIpLHMuZXZlbnRLZXlNYXA9RShzLmV2ZW50cyxcImtleVwiKSxzLmdyb3VwSWRNYXA9RShzLmdyb3VwcyxcImlkXCIpLE9iamVjdC5rZXlzKHMuZ3JvdXBJZE1hcHx8e30pLmZvckVhY2goKGZ1bmN0aW9uKGUpeyhzLmdyb3VwSWRNYXBbZV0uZXhwZXJpbWVudHN8fFtdKS5mb3JFYWNoKChmdW5jdGlvbih0KXtzLmV4cGVyaW1lbnRzLnB1c2goZyh0LHtncm91cElkOmV9KSl9KSl9KSkscy5yb2xsb3V0SWRNYXA9RShzLnJvbGxvdXRzfHxbXSxcImlkXCIpLHYocy5yb2xsb3V0SWRNYXB8fHt9KS5mb3JFYWNoKChmdW5jdGlvbihlKXsoZS5leHBlcmltZW50c3x8W10pLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaXNSb2xsb3V0PSEwLHMuZXhwZXJpbWVudHMucHVzaChlKSxlLnZhcmlhdGlvbktleU1hcD1FKGUudmFyaWF0aW9ucyxcImtleVwiKX0pKX0pKTt2YXIgYT1uZXcgU2V0O09iamVjdC5rZXlzKHMuYXVkaWVuY2VzQnlJZCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSGUocy5hdWRpZW5jZXNCeUlkW2VdKX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2EuYWRkKGUpfSkpfSkpO3ZhciB1PUFycmF5LmZyb20oYSksbD0hMSxjPVwiXCIscD1cIlwiLGQ9XCJcIjtyZXR1cm4gcy5pbnRlZ3JhdGlvbnMmJihzLmludGVncmF0aW9uS2V5TWFwPUUocy5pbnRlZ3JhdGlvbnMsXCJrZXlcIikscy5pbnRlZ3JhdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoIShcImtleVwiaW4gZSkpdGhyb3cgbmV3IEVycm9yKE4oSC5NSVNTSU5HX0lOVEVHUkFUSU9OX0tFWSxqZSkpO1wib2RwXCI9PT1lLmtleSYmKGw9ITAscD1wfHxlLnB1YmxpY0tleXx8XCJcIixjPWN8fGUuaG9zdHx8XCJcIixkPWR8fGUucGl4ZWxVcmx8fFwiXCIpfSkpKSxzLm9kcEludGVncmF0aW9uQ29uZmlnPWw/e2ludGVncmF0ZWQ6ITAsb2RwQ29uZmlnOm5ldyBLZShwLGMsZCx1KX06e2ludGVncmF0ZWQ6ITF9LHMuZXhwZXJpbWVudEtleU1hcD1FKHMuZXhwZXJpbWVudHMsXCJrZXlcIikscy5leHBlcmltZW50SWRNYXA9RShzLmV4cGVyaW1lbnRzLFwiaWRcIikscy52YXJpYXRpb25JZE1hcD17fSxzLnZhcmlhdGlvblZhcmlhYmxlVXNhZ2VNYXA9e30sKHMuZXhwZXJpbWVudHN8fFtdKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnZhcmlhdGlvbktleU1hcD1FKGUudmFyaWF0aW9ucyxcImtleVwiKSxnKHMudmFyaWF0aW9uSWRNYXAsRShlLnZhcmlhdGlvbnMsXCJpZFwiKSksdihlLnZhcmlhdGlvbktleU1hcHx8e30pLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UudmFyaWFibGVzJiYocy52YXJpYXRpb25WYXJpYWJsZVVzYWdlTWFwW2UuaWRdPUUoZS52YXJpYWJsZXMsXCJpZFwiKSl9KSl9KSkscy5leHBlcmltZW50RmVhdHVyZU1hcD17fSxzLmZlYXR1cmVLZXlNYXA9RShzLmZlYXR1cmVGbGFnc3x8W10sXCJrZXlcIiksdihzLmZlYXR1cmVLZXlNYXB8fHt9KS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnZhcmlhYmxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnR5cGU9PT1aLlNUUklORyYmZS5zdWJUeXBlPT09Wi5KU09OJiYoZS50eXBlPVouSlNPTixkZWxldGUgZS5zdWJUeXBlKX0pKSxlLnZhcmlhYmxlS2V5TWFwPUUoZS52YXJpYWJsZXMsXCJrZXlcIiksKGUuZXhwZXJpbWVudElkc3x8W10pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3MuZXhwZXJpbWVudEZlYXR1cmVNYXBbdF0/cy5leHBlcmltZW50RmVhdHVyZU1hcFt0XS5wdXNoKGUuaWQpOnMuZXhwZXJpbWVudEZlYXR1cmVNYXBbdF09W2UuaWRdfSkpfSkpLHMuZmxhZ1J1bGVzTWFwPXt9LChzLmZlYXR1cmVGbGFnc3x8W10pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2UuZXhwZXJpbWVudElkcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1zLmV4cGVyaW1lbnRJZE1hcFtlXTtyJiZ0LnB1c2gocil9KSk7dmFyIHI9cy5yb2xsb3V0SWRNYXBbZS5yb2xsb3V0SWRdO3ImJnQucHVzaC5hcHBseSh0LHIuZXhwZXJpbWVudHMpLHMuZmxhZ1J1bGVzTWFwW2Uua2V5XT10fSkpLHMuZmxhZ1ZhcmlhdGlvbnNNYXA9e30seShzLmZsYWdSdWxlc01hcHx8e30pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0scj1lWzFdLGk9W107ci5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnZhcmlhdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7TyhpLChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWUuaWR9KSl8fGkucHVzaChlKX0pKX0pKSxzLmZsYWdWYXJpYXRpb25zTWFwW3RdPWl9KSksc30sSGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29uZGl0aW9ucz96ZShlLmNvbmRpdGlvbnMpOltdfSx6ZT1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuW1wiYW5kXCIsXCJvclwiLFwibm90XCJdLmluY2x1ZGVzKGUpfShlKT9bXTooQXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0LnB1c2guYXBwbHkodCx6ZShlKSl9KSk6XCJxdWFsaWZpZWRcIj09PWUubWF0Y2gmJnQucHVzaChlLnZhbHVlKSx0KX07dmFyIFllPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5leHBlcmltZW50SWRNYXBbdF07aWYoIXIpdGhyb3cgbmV3IEVycm9yKE4oSC5JTlZBTElEX0VYUEVSSU1FTlRfSUQsamUsdCkpO3JldHVybiByLmxheWVySWR9LFhlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1lLmF0dHJpYnV0ZUtleU1hcFt0XSxuPTA9PT10LmluZGV4T2YoXCIkb3B0X1wiKTtyZXR1cm4gaT8obiYmci5sb2cocS5XQVJOSU5HLFwiQXR0cmlidXRlICVzIHVuZXhwZWN0ZWRseSBoYXMgcmVzZXJ2ZWQgcHJlZml4ICVzOyB1c2luZyBhdHRyaWJ1dGUgSUQgaW5zdGVhZCBvZiByZXNlcnZlZCBhdHRyaWJ1dGUgbmFtZS5cIix0LFwiJG9wdF9cIiksaS5pZCk6bj90OihyLmxvZyhxLkRFQlVHLEguVU5SRUNPR05JWkVEX0FUVFJJQlVURSxqZSx0KSxudWxsKX0sSmU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmV2ZW50S2V5TWFwW3RdO3JldHVybiByP3IuaWQ6bnVsbH0sV2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmV4cGVyaW1lbnRLZXlNYXBbdF07aWYoIXIpdGhyb3cgbmV3IEVycm9yKE4oSC5JTlZBTElEX0VYUEVSSU1FTlRfS0VZLGplLHQpKTtyZXR1cm4gci5zdGF0dXN9LFplPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudmFyaWF0aW9uSWRNYXAuaGFzT3duUHJvcGVydHkodCk/ZS52YXJpYXRpb25JZE1hcFt0XS5rZXk6bnVsbH0sUWU9ZnVuY3Rpb24oZSx0KXtpZihlLmV4cGVyaW1lbnRLZXlNYXAuaGFzT3duUHJvcGVydHkodCkpe3ZhciByPWUuZXhwZXJpbWVudEtleU1hcFt0XTtpZihyKXJldHVybiByfXRocm93IG5ldyBFcnJvcihOKEguRVhQRVJJTUVOVF9LRVlfTk9UX0lOX0RBVEFGSUxFLGplLHQpKX0sJGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmV4cGVyaW1lbnRJZE1hcFt0XTtpZighcil0aHJvdyBuZXcgRXJyb3IoTihILklOVkFMSURfRVhQRVJJTUVOVF9JRCxqZSx0KSk7cmV0dXJuIHIudHJhZmZpY0FsbG9jYXRpb259LGV0PWZ1bmN0aW9uKGUsdCxyKXtpZihlLmV4cGVyaW1lbnRJZE1hcC5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGk9ZS5leHBlcmltZW50SWRNYXBbdF07aWYoaSlyZXR1cm4gaX1yZXR1cm4gci5sb2cocS5FUlJPUixILklOVkFMSURfRVhQRVJJTUVOVF9JRCxqZSx0KSxudWxsfSx0dD1mdW5jdGlvbihlLHQscil7aWYoIWUpcmV0dXJuIG51bGw7dmFyIGk9TyhlLmZsYWdWYXJpYXRpb25zTWFwW3RdLChmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXk9PT1yfSkpO3JldHVybiBpfHxudWxsfSxydD1mdW5jdGlvbihlLHQscil7aWYoZS5mZWF0dXJlS2V5TWFwLmhhc093blByb3BlcnR5KHQpKXt2YXIgaT1lLmZlYXR1cmVLZXlNYXBbdF07aWYoaSlyZXR1cm4gaX1yZXR1cm4gci5sb2cocS5FUlJPUixILkZFQVRVUkVfTk9UX0lOX0RBVEFGSUxFLGplLHQpLG51bGx9LGl0PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fZGF0YWZpbGVTdHJ9LG50PWZ1bmN0aW9uKGUpe3ZhciB0O3RyeXt0PUVlKGUuZGF0YWZpbGUpfWNhdGNoKGUpe3JldHVybntjb25maWdPYmo6bnVsbCxlcnJvcjplfX1pZihlLmpzb25TY2hlbWFWYWxpZGF0b3IpdHJ5e2UuanNvblNjaGVtYVZhbGlkYXRvci52YWxpZGF0ZSh0KSxlLmxvZ2dlci5sb2cocS5JTkZPLHouVkFMSURfREFUQUZJTEUsamUpfWNhdGNoKGUpe3JldHVybntjb25maWdPYmo6bnVsbCxlcnJvcjplfX1lbHNlIGUubG9nZ2VyLmxvZyhxLklORk8sei5TS0lQUElOR19KU09OX1ZBTElEQVRJT04samUpO3ZhciByPVt0XTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZS5kYXRhZmlsZSYmci5wdXNoKGUuZGF0YWZpbGUpLHtjb25maWdPYmo6cWUuYXBwbHkodm9pZCAwLHIpLGVycm9yOm51bGx9fSxvdD1mdW5jdGlvbihlKXtyZXR1cm4hIWUuc2VuZEZsYWdEZWNpc2lvbnN9O2Z1bmN0aW9uIHN0KGUsdCxyLGkpe3ZhciBuPXtzZGtLZXk6ZX07aWYoKHZvaWQgMD09PWl8fFwib2JqZWN0XCI9PXR5cGVvZiBpJiZudWxsIT09aSkmJkEuYXNzaWduKG4saSkscil7dmFyIG89bnQoe2RhdGFmaWxlOnIsanNvblNjaGVtYVZhbGlkYXRvcjp2b2lkIDAsbG9nZ2VyOnR9KSxzPW8uY29uZmlnT2JqLGE9by5lcnJvcjthJiZ0LmVycm9yKGEpLHMmJihuLmRhdGFmaWxlPWl0KHMpKX1yZXR1cm4gbmV3IEJlKG4pfXZhciBhdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT10JiYodD02ZTQpLHRoaXMubG9nZ2VyPWUsdGhpcy50aW1lb3V0PXR9cmV0dXJuIGUucHJvdG90eXBlLm1ha2VSZXF1ZXN0PWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBuPXRoaXMsbz1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJue3Jlc3BvbnNlUHJvbWlzZTpuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocyxhKXtvLm9wZW4ocixlLCEwKSxuLnNldEhlYWRlcnNJblhocih0LG8pLG8ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoby5yZWFkeVN0YXRlPT09WE1MSHR0cFJlcXVlc3QuRE9ORSl7aWYoMD09PW8uc3RhdHVzKXJldHVybiB2b2lkIGEobmV3IEVycm9yKFwiUmVxdWVzdCBlcnJvclwiKSk7dmFyIGU9bi5wYXJzZUhlYWRlcnNGcm9tWGhyKG8pLHQ9e3N0YXR1c0NvZGU6by5zdGF0dXMsYm9keTpvLnJlc3BvbnNlVGV4dCxoZWFkZXJzOmV9O3ModCl9fSxvLnRpbWVvdXQ9bi50aW1lb3V0LG8ub250aW1lb3V0PWZ1bmN0aW9uKCl7bi5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuV0FSTklORyxcIlJlcXVlc3QgdGltZWQgb3V0XCIpfSxvLnNlbmQoaSl9KSksYWJvcnQ6ZnVuY3Rpb24oKXtvLmFib3J0KCl9fX0sZS5wcm90b3R5cGUuc2V0SGVhZGVyc0luWGhyPWZ1bmN0aW9uKGUsdCl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9ZVtyXTtcInN0cmluZ1wiPT10eXBlb2YgaSYmdC5zZXRSZXF1ZXN0SGVhZGVyKHIsaSl9KSl9LGUucHJvdG90eXBlLnBhcnNlSGVhZGVyc0Zyb21YaHI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7aWYobnVsbD09PXIpcmV0dXJue307dmFyIGk9ci5zcGxpdChcIlxcclxcblwiKSxuPXt9O3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RyeXt2YXIgcj1lLmluZGV4T2YoXCI6IFwiKTtpZihyPi0xKXt2YXIgaT1lLnNsaWNlKDAsciksbz1lLnNsaWNlKHIrMik7aSYmbyYmKG5baV09byl9fWNhdGNoKHIpe3QubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLldBUk5JTkcsXCJVbmFibGUgdG8gcGFyc2UgJiBza2lwcGVkIGhlYWRlciBpdGVtICdcIi5jb25jYXQoZSxcIidcIikpfX0pKSxufSxlfSgpLHV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuYnJvd3NlckNhbGxiYWNrLHI9ZS5ub25Ccm93c2VyQ2FsbGJhY2s7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz90KG51bGw9PT13aW5kb3d8fHZvaWQgMD09PXdpbmRvdz92b2lkIDA6d2luZG93LmxvY2FsU3RvcmFnZSk6cigpfSxsdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmxvZ2dlcj1NKCl9cmV0dXJuIGUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGUpe3JldHVybiB1KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBsKHRoaXMsKGZ1bmN0aW9uKHIpe3JldHVyblsyLHV0KHticm93c2VyQ2FsbGJhY2s6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT0obnVsbD09dD92b2lkIDA6dC5nZXRJdGVtKGUpKX0sbm9uQnJvd3NlckNhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHQubG9nZ2VyLmVycm9yKEguTE9DQUxfU1RPUkFHRV9ET0VTX05PVF9FWElTVCksITF9fSldfSkpfSkpfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIGwodGhpcywoZnVuY3Rpb24ocil7cmV0dXJuWzIsdXQoe2Jyb3dzZXJDYWxsYmFjazpmdW5jdGlvbih0KXtyZXR1cm4obnVsbD09dD92b2lkIDA6dC5nZXRJdGVtKGUpKXx8dm9pZCAwfSxub25Ccm93c2VyQ2FsbGJhY2s6ZnVuY3Rpb24oKXt0LmxvZ2dlci5lcnJvcihILkxPQ0FMX1NUT1JBR0VfRE9FU19OT1RfRVhJU1QpfX0pXX0pKX0pKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3JldHVybiB1KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBsKHRoaXMsKGZ1bmN0aW9uKHIpe3N3aXRjaChyLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250YWlucyhlKV07Y2FzZSAxOnJldHVybiByLnNlbnQoKT8odXQoe2Jyb3dzZXJDYWxsYmFjazpmdW5jdGlvbih0KXtudWxsPT10fHx0LnJlbW92ZUl0ZW0oZSl9LG5vbkJyb3dzZXJDYWxsYmFjazpmdW5jdGlvbigpe3QubG9nZ2VyLmVycm9yKEguTE9DQUxfU1RPUkFHRV9ET0VTX05PVF9FWElTVCl9fSksWzIsITBdKTpbMiwhMV19fSkpfSkpfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gbCh0aGlzLChmdW5jdGlvbihpKXtyZXR1cm5bMix1dCh7YnJvd3NlckNhbGxiYWNrOmZ1bmN0aW9uKHIpe251bGw9PXJ8fHIuc2V0SXRlbShlLHQpfSxub25Ccm93c2VyQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyLmxvZ2dlci5lcnJvcihILkxPQ0FMX1NUT1JBR0VfRE9FU19OT1RfRVhJU1QpfX0pXX0pKX0pKX0sZX0oKSxjdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9bnVsbCksdGhpcy5fdmFsdWU9ZSx0aGlzLl90aW1lPURhdGUubm93KCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJ0aW1lXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmlzX3N0YWxlPWZ1bmN0aW9uKGUpe3JldHVybiEoZTw9MCkmJkRhdGUubm93KCktdGhpcy5fdGltZT49ZX0sZX0oKSxwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS5tYXhTaXplLHI9ZS50aW1lb3V0O3RoaXMuX21hcD1uZXcgTWFwO3ZhciBpPU0oKTtpLmRlYnVnKFwiUHJvdmlzaW9uaW5nIGNhY2hlIHdpdGggbWF4U2l6ZSBvZiBcIi5jb25jYXQodCkpLGkuZGVidWcoXCJQcm92aXNpb25pbmcgY2FjaGUgd2l0aCB0aW1lb3V0IG9mIFwiLmNvbmNhdChyKSksdGhpcy5fbWF4U2l6ZT10LHRoaXMuX3RpbWVvdXQ9cn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwibWFwXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXB9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwibWF4U2l6ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4U2l6ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJ0aW1lb3V0XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lb3V0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmxvb2t1cD1mdW5jdGlvbihlKXtpZih0aGlzLl9tYXhTaXplPD0wKXJldHVybiBudWxsO3ZhciB0PXRoaXMuX21hcC5nZXQoZSk7cmV0dXJuIHQ/dC5pc19zdGFsZSh0aGlzLl90aW1lb3V0KT8odGhpcy5fbWFwLmRlbGV0ZShlKSxudWxsKToodGhpcy5fbWFwLmRlbGV0ZShlKSx0aGlzLl9tYXAuc2V0KGUsdCksdC52YWx1ZSk6bnVsbH0sZS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmtleSxyPWUudmFsdWU7aWYoISh0aGlzLl9tYXhTaXplPD0wKSYmKHRoaXMuX21hcC5nZXQodCkmJnRoaXMuX21hcC5kZWxldGUodCksdGhpcy5fbWFwLnNldCh0LG5ldyBjdChyKSksdGhpcy5fbWFwLnNpemU+dGhpcy5fbWF4U2l6ZSkpe3ZhciBpPXRoaXMuX21hcC5rZXlzKCkubmV4dCgpLnZhbHVlO3RoaXMuX21hcC5kZWxldGUoaSl9fSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX21heFNpemU8PTB8fHRoaXMuX21hcC5jbGVhcigpfSxlLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKHRoaXMuX21heFNpemU8PTApcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5fbWFwLmdldChlKTtyZXR1cm4gbnVsbCE9PSh0PW51bGw9PXI/dm9pZCAwOnIudmFsdWUpJiZ2b2lkIDAhPT10P3Q6bnVsbH0sZX0oKSxkdD0xMDAsZnQ9NjAwLGd0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIHIsaTtyZXR1cm4gZS5jYWxsKHRoaXMse21heFNpemU6bnVsbCE9PShyPW51bGw9PXQ/dm9pZCAwOnQubWF4U2l6ZSkmJnZvaWQgMCE9PXI/cjpkdCx0aW1lb3V0Om51bGwhPT0oaT1udWxsPT10P3ZvaWQgMDp0LnRpbWVvdXQpJiZ2b2lkIDAhPT1pP2k6MWUzKmZ0fSl8fHRoaXN9cmV0dXJuIHModCxlKSx0fShwdCksRXQ9MWU0LGh0PTYwMCxJdD0oZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgcixpO3JldHVybiBlLmNhbGwodGhpcyx7bWF4U2l6ZTpudWxsIT09KHI9bnVsbD09dD92b2lkIDA6dC5tYXhTaXplKSYmdm9pZCAwIT09cj9yOkV0LHRpbWVvdXQ6bnVsbCE9PShpPW51bGw9PXQ/dm9pZCAwOnQudGltZW91dCkmJnZvaWQgMCE9PWk/aToxZTMqaHR9KXx8dGhpc31zKHQsZSl9KHB0KSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9rZXlGb3JWdWlkPVwib3B0aW1pemVseS12dWlkXCIsdGhpcy5fdnVpZD1cIlwifXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJ2dWlkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92dWlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUuaW5zdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBsKHRoaXMsKGZ1bmN0aW9uKHIpe3N3aXRjaChyLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuX2luc3RhbmNlfHwodGhpcy5faW5zdGFuY2U9bmV3IGUpLHRoaXMuX2luc3RhbmNlLl92dWlkP1szLDJdOls0LHRoaXMuX2luc3RhbmNlLmxvYWQodCldO2Nhc2UgMTpyLnNlbnQoKSxyLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyLHRoaXMuX2luc3RhbmNlXX19KSl9KSl9LGUucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciByO3JldHVybiBsKHRoaXMsKGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdC5nZXQodGhpcy5fa2V5Rm9yVnVpZCldO2Nhc2UgMTpyZXR1cm4ocj1pLnNlbnQoKSkmJmUuaXNWdWlkKHIpPyh0aGlzLl92dWlkPXIsWzMsNF0pOlszLDJdO2Nhc2UgMjpyZXR1cm4gdGhpcy5fdnVpZD10aGlzLm1ha2VWdWlkKCksWzQsdGhpcy5zYXZlKHRoaXMuX3Z1aWQsdCldO2Nhc2UgMzppLnNlbnQoKSxpLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyLHRoaXMuX3Z1aWRdfX0pKX0pKX0sZS5wcm90b3R5cGUubWFrZVZ1aWQ9ZnVuY3Rpb24oKXt2YXIgdD1oKCkucmVwbGFjZSgvLS9nLFwiXCIpLnRvTG93ZXJDYXNlKCkscj1cIlwiLmNvbmNhdChlLnZ1aWRfcHJlZml4KS5jb25jYXQodCk7cmV0dXJuIHIubGVuZ3RoPD0zMj9yOnIuc3Vic3RyaW5nKDAsMzIpfSxlLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBsKHRoaXMsKGZ1bmN0aW9uKHIpe3N3aXRjaChyLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdC5zZXQodGhpcy5fa2V5Rm9yVnVpZCxlKV07Y2FzZSAxOnJldHVybiByLnNlbnQoKSxbMl19fSkpfSkpfSxlLl9yZXNldD1mdW5jdGlvbigpe3RoaXMuX2luc3RhbmNlLl92dWlkPVwiXCJ9LGUudnVpZF9wcmVmaXg9XCJ2dWlkX1wiLGUuaXNWdWlkPWZ1bmN0aW9uKHQpe3JldHVybihudWxsPT10P3ZvaWQgMDp0LnN0YXJ0c1dpdGgoZS52dWlkX3ByZWZpeCkpfHwhMX0sZX0oKSk7ZnVuY3Rpb24gX3QoZSl7dmFyIHQ9W1wic3RyaW5nXCIsXCJudW1iZXJcIixcImJvb2xlYW5cIl0scj0hMTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmluY2x1ZGVzKHR5cGVvZiBlKXx8bnVsbD09PWV8fChyPSEwKX0pKSxyfXZhciB2dCx5dD1mdW5jdGlvbihlLHQscixpKXt0aGlzLnR5cGU9ZSx0aGlzLmFjdGlvbj10LHRoaXMuaWRlbnRpZmllcnM9bnVsbCE9cj9yOm5ldyBNYXAsdGhpcy5kYXRhPW51bGwhPWk/aTpuZXcgTWFwfSxPdD1mdW5jdGlvbigpe307IWZ1bmN0aW9uKGUpe2VbZS5SdW5uaW5nPTBdPVwiUnVubmluZ1wiLGVbZS5TdG9wcGVkPTFdPVwiU3RvcHBlZFwifSh2dHx8KHZ0PXt9KSk7dmFyIFJ0LE50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdCxyLGksbj1lLm9kcEludGVncmF0aW9uQ29uZmlnLG89ZS5zZWdtZW50TWFuYWdlcixzPWUuZXZlbnRNYW5hZ2VyLGE9ZS5sb2dnZXIsdT10aGlzO3RoaXMucmVhZHk9ITEsdGhpcy5zdGF0dXM9dnQuU3RvcHBlZCx0aGlzLnNlZ21lbnRNYW5hZ2VyPW8sdGhpcy5ldmVudE1hbmFnZXI9cyx0aGlzLmxvZ2dlcj1hLHRoaXMuY29uZmlnUHJvbWlzZT0odD1PdCxyPU90LHtwcm9taXNlOmk9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsaSl7dD1lLHI9aX0pKSxyZXNvbHZlOnQscmVqZWN0OnIsdGhlbjppLnRoZW4uYmluZChpKX0pO3ZhciBsPVt0aGlzLmNvbmZpZ1Byb21pc2VdO3RoaXMuaXNWdWlkRW5hYmxlZCgpJiZsLnB1c2godGhpcy5pbml0aWFsaXplVnVpZCgpKSx0aGlzLmluaXRQcm9taXNlPVByb21pc2UuYWxsKGwpLHRoaXMub25SZWFkeSgpLnRoZW4oKGZ1bmN0aW9uKCl7dS5yZWFkeT0hMCx1LmlzVnVpZEVuYWJsZWQoKSYmdS5zdGF0dXM9PT12dC5SdW5uaW5nJiZ1LnJlZ2lzdGVyVnVpZCgpfSkpLG4mJnRoaXMudXBkYXRlU2V0dGluZ3Mobil9cmV0dXJuIGUucHJvdG90eXBlLmdldFN0YXR1cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXR1c30sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RhdHVzPT09dnQuUnVubmluZz9bMl06dGhpcy5vZHBJbnRlZ3JhdGlvbkNvbmZpZz90aGlzLm9kcEludGVncmF0aW9uQ29uZmlnLmludGVncmF0ZWQ/KHRoaXMuc3RhdHVzPXZ0LlJ1bm5pbmcsdGhpcy5zZWdtZW50TWFuYWdlci51cGRhdGVTZXR0aW5ncyh0aGlzLm9kcEludGVncmF0aW9uQ29uZmlnLm9kcENvbmZpZyksdGhpcy5ldmVudE1hbmFnZXIudXBkYXRlU2V0dGluZ3ModGhpcy5vZHBJbnRlZ3JhdGlvbkNvbmZpZy5vZHBDb25maWcpLHRoaXMuZXZlbnRNYW5hZ2VyLnN0YXJ0KCksWzIsUHJvbWlzZS5yZXNvbHZlKCldKTpbMixQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJzdGFydCgpIGNhbGxlZCB3aGVuIE9EUCBpcyBub3QgaW50ZWdyYXRlZFwiKSldOlsyLFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImNhbm5vdCBzdGFydCB3aXRob3V0IE9EUCBjb25maWdcIikpXX0pKX0pKX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLChmdW5jdGlvbihlKXtzd2l0Y2goZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnN0YXR1cz09PXZ0LlN0b3BwZWQ/WzJdOih0aGlzLnN0YXR1cz12dC5TdG9wcGVkLFs0LHRoaXMuZXZlbnRNYW5hZ2VyLnN0b3AoKV0pO2Nhc2UgMTpyZXR1cm4gZS5zZW50KCksWzJdfX0pKX0pKX0sZS5wcm90b3R5cGUub25SZWFkeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXRQcm9taXNlfSxlLnByb3RvdHlwZS5pc1JlYWR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZHl9LGUucHJvdG90eXBlLnVwZGF0ZVNldHRpbmdzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbmZpZ1Byb21pc2UucmVzb2x2ZSgpLCEodGhpcy5vZHBJbnRlZ3JhdGlvbkNvbmZpZyYmKHQ9dGhpcy5vZHBJbnRlZ3JhdGlvbkNvbmZpZyxyPWUsISh0LmludGVncmF0ZWQhPT1yLmludGVncmF0ZWR8fHQuaW50ZWdyYXRlZCYmci5pbnRlZ3JhdGVkJiYhdC5vZHBDb25maWcuZXF1YWxzKHIub2RwQ29uZmlnKSkpKSYmKHRoaXMub2RwSW50ZWdyYXRpb25Db25maWc9ZSxlLmludGVncmF0ZWQ/dGhpcy5zdGF0dXM9PT12dC5SdW5uaW5nPyh0aGlzLnNlZ21lbnRNYW5hZ2VyLnVwZGF0ZVNldHRpbmdzKGUub2RwQ29uZmlnKSx0aGlzLmV2ZW50TWFuYWdlci51cGRhdGVTZXR0aW5ncyhlLm9kcENvbmZpZykpOnRoaXMuc3RhcnQoKTp0aGlzLnN0b3AoKSwhMCk7dmFyIHQscn0sZS5wcm90b3R5cGUuZmV0Y2hRdWFsaWZpZWRTZWdtZW50cz1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1bXSksdSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcywoZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMub2RwSW50ZWdyYXRpb25Db25maWc/dGhpcy5vZHBJbnRlZ3JhdGlvbkNvbmZpZy5pbnRlZ3JhdGVkP0l0LmlzVnVpZChlKT9bMix0aGlzLnNlZ21lbnRNYW5hZ2VyLmZldGNoUXVhbGlmaWVkU2VnbWVudHMoZWUuVlVJRCxlLHQpXTpbMix0aGlzLnNlZ21lbnRNYW5hZ2VyLmZldGNoUXVhbGlmaWVkU2VnbWVudHMoZWUuRlNfVVNFUl9JRCxlLHQpXToodGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsSC5PRFBfTk9UX0lOVEVHUkFURUQpLFsyLG51bGxdKToodGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsSC5PRFBfQ09ORklHX05PVF9BVkFJTEFCTEUpLFsyLG51bGxdKX0pKX0pKX0sZS5wcm90b3R5cGUuaWRlbnRpZnlVc2VyPWZ1bmN0aW9uKGUsdCl7dGhpcy5vZHBJbnRlZ3JhdGlvbkNvbmZpZz90aGlzLm9kcEludGVncmF0aW9uQ29uZmlnLmludGVncmF0ZWQ/ZSYmSXQuaXNWdWlkKGUpP3RoaXMuZXZlbnRNYW5hZ2VyLmlkZW50aWZ5VXNlcih2b2lkIDAsZSk6dGhpcy5ldmVudE1hbmFnZXIuaWRlbnRpZnlVc2VyKGUsdCk6dGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuSU5GTyxILk9EUF9OT1RfSU5URUdSQVRFRCk6dGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsSC5PRFBfQ09ORklHX05PVF9BVkFJTEFCTEUpfSxlLnByb3RvdHlwZS5zZW5kRXZlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlLHI9ZS5hY3Rpb24saT1lLmlkZW50aWZpZXJzLG49ZS5kYXRhLG89dDtpZihcInN0cmluZ1wiPT10eXBlb2YgbyYmXCJcIiE9PW98fChvPVwiZnVsbHN0YWNrXCIpLHRoaXMub2RwSW50ZWdyYXRpb25Db25maWcpaWYodGhpcy5vZHBJbnRlZ3JhdGlvbkNvbmZpZy5pbnRlZ3JhdGVkKXtpZihfdChuKSl0aHJvdyBuZXcgRXJyb3IoSC5PRFBfSU5WQUxJRF9EQVRBKTtpZihcInN0cmluZ1wiIT10eXBlb2Ygcnx8XCJcIj09PXIpdGhyb3cgbmV3IEVycm9yKFwiT0RQIGFjdGlvbiBpcyBub3QgdmFsaWQgKGNhbm5vdCBiZSBlbXB0eSkuXCIpO3RoaXMuZXZlbnRNYW5hZ2VyLnNlbmRFdmVudChuZXcgeXQobyxyLGksbikpfWVsc2UgdGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsSC5PRFBfTk9UX0lOVEVHUkFURUQpO2Vsc2UgdGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsSC5PRFBfQ09ORklHX05PVF9BVkFJTEFCTEUpfSxlLnByb3RvdHlwZS5pbml0aWFsaXplVnVpZD1mdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sZS5wcm90b3R5cGUucmVnaXN0ZXJWdWlkPWZ1bmN0aW9uKCl7aWYodGhpcy5vZHBJbnRlZ3JhdGlvbkNvbmZpZylpZih0aGlzLm9kcEludGVncmF0aW9uQ29uZmlnLmludGVncmF0ZWQpe3ZhciBlPXRoaXMuZ2V0VnVpZCgpO2lmKGUpdHJ5e3RoaXMuZXZlbnRNYW5hZ2VyLnJlZ2lzdGVyVnVpZChlKX1jYXRjaChlKXt0aGlzLmxvZ2dlci5sb2coZXhwb3J0cy5Mb2dMZXZlbC5FUlJPUixILk9EUF9WVUlEX1JFR0lTVFJBVElPTl9GQUlMRUQpfX1lbHNlIHRoaXMubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLklORk8sSC5PRFBfTk9UX0lOVEVHUkFURUQpO2Vsc2UgdGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsSC5PRFBfQ09ORklHX05PVF9BVkFJTEFCTEUpfSxlfSgpLFR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMucmVxdWVzdEhhbmRsZXI9ZSx0aGlzLmxvZ2dlcj10fXJldHVybiBlLnByb3RvdHlwZS5nZXRMb2dnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2dnZXJ9LGUucHJvdG90eXBlLnNlbmRFdmVudHM9ZnVuY3Rpb24oZSx0KXt2YXIgcjtyZXR1cm4gdSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIGksbixvLHMsYSx1LGMscCxkLGY7cmV0dXJuIGwodGhpcywoZnVuY3Rpb24obCl7c3dpdGNoKGwubGFiZWwpe2Nhc2UgMDppZihpPSExLDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsXCJcIi5jb25jYXQoXCJPRFAgZXZlbnQgc2VuZCBmYWlsZWRcIixcIiAobm8gZXZlbnRzKVwiKSksWzIsaV07aWYoIXRoaXMuc2hvdWxkU2VuZEV2ZW50cyh0KSlyZXR1cm5bMixpXTtuPXRoaXMuZ2VuZXJhdGVSZXF1ZXN0RGF0YShlLHQpLG89bi5tZXRob2Qscz1uLmVuZHBvaW50LGE9bi5oZWFkZXJzLHU9bi5kYXRhLGM9MCxsLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBsLnRyeXMucHVzaChbMSwzLCw0XSksWzQsdGhpcy5yZXF1ZXN0SGFuZGxlci5tYWtlUmVxdWVzdChzLGEsbyx1KS5yZXNwb25zZVByb21pc2VdO2Nhc2UgMjpyZXR1cm4gcD1sLnNlbnQoKSxjPW51bGwhPT0ocj1wLnN0YXR1c0NvZGUpJiZ2b2lkIDAhPT1yP3I6YyxbMyw0XTtjYXNlIDM6cmV0dXJuIGQ9bC5zZW50KCksZj1cIm5ldHdvcmsgZXJyb3JcIixkIGluc3RhbmNlb2YgRXJyb3ImJihmPWQubWVzc2FnZSksdGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsXCJcIi5jb25jYXQoXCJPRFAgZXZlbnQgc2VuZCBmYWlsZWRcIixcIiAoXCIpLmNvbmNhdChmLFwiKVwiKSksaT0hMCxbMyw0XTtjYXNlIDQ6cmV0dXJuIGM+PTQwMCYmdGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsXCJcIi5jb25jYXQoXCJPRFAgZXZlbnQgc2VuZCBmYWlsZWRcIixcIiAoXCIpLmNvbmNhdChjLFwiKVwiKSksYz49NTAwJiYoaT0hMCksWzIsaV19fSkpfSkpfSxlfSgpLG10PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBzKHQsZSksdC5wcm90b3R5cGUuc2hvdWxkU2VuZEV2ZW50cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg8PTF8fCh0aGlzLmdldExvZ2dlcigpLmxvZyhleHBvcnRzLkxvZ0xldmVsLkVSUk9SLFwiXCIuY29uY2F0KFwiT0RQIGV2ZW50IHNlbmQgZmFpbGVkXCIsXCIgKGJyb3dzZXIgb25seSBzdXBwb3J0cyBiYXRjaCBzaXplIDEpXCIpKSwhMSl9LHQucHJvdG90eXBlLmdldFBpeGVsQXBpRW5kcG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5waXhlbFVybDtyZXR1cm4gbmV3IFVSTChcInYyL3phaXVzLmdpZlwiLHQpLmhyZWZ9LHQucHJvdG90eXBlLmdlbmVyYXRlUmVxdWVzdERhdGE9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldFBpeGVsQXBpRW5kcG9pbnQoZSksaT1lLmFwaUtleSxuPXRbMF0sbz1uZXcgVVJMKHIpO3JldHVybiBuLmlkZW50aWZpZXJzLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7by5zZWFyY2hQYXJhbXMuYXBwZW5kKHQsZSl9KSksbi5kYXRhLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7by5zZWFyY2hQYXJhbXMuYXBwZW5kKHQsZSl9KSksby5zZWFyY2hQYXJhbXMuYXBwZW5kKFwidHJhY2tlcl9pZFwiLGkpLG8uc2VhcmNoUGFyYW1zLmFwcGVuZChcImV2ZW50X3R5cGVcIixuLnR5cGUpLG8uc2VhcmNoUGFyYW1zLmFwcGVuZChcInZkbF9hY3Rpb25cIixuLmFjdGlvbikse21ldGhvZDpcIkdFVFwiLGVuZHBvaW50Om8udG9TdHJpbmcoKSxoZWFkZXJzOnt9LGRhdGE6XCJcIn19LHR9KFR0KSxBdD1mdW5jdGlvbihlKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBxdWV1ZU1pY3JvdGFzaz9xdWV1ZU1pY3JvdGFzayhlKTpzZXRUaW1lb3V0KGUpfTshZnVuY3Rpb24oZSl7ZVtlLlN0b3BwZWQ9MF09XCJTdG9wcGVkXCIsZVtlLlJ1bm5pbmc9MV09XCJSdW5uaW5nXCJ9KFJ0fHwoUnQ9e30pKTt2YXIgRHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PWUub2RwQ29uZmlnLHI9ZS5hcGlNYW5hZ2VyLGk9ZS5sb2dnZXIsbj1lLmNsaWVudEVuZ2luZSxvPWUuY2xpZW50VmVyc2lvbixzPWUucXVldWVTaXplLGE9ZS5iYXRjaFNpemUsdT1lLmZsdXNoSW50ZXJ2YWwsbD1lLnVzZXJBZ2VudFBhcnNlcixjPWUucmV0cmllcztpZih0aGlzLnN0YXR1cz1SdC5TdG9wcGVkLHRoaXMucXVldWU9bmV3IEFycmF5LHRoaXMuYXBpTWFuYWdlcj1yLHRoaXMubG9nZ2VyPWksdGhpcy5jbGllbnRFbmdpbmU9bix0aGlzLmNsaWVudFZlcnNpb249byx0aGlzLmluaXRQYXJhbXMoYSxzLHUpLHRoaXMuc3RhdHVzPVJ0LlN0b3BwZWQsdGhpcy51c2VyQWdlbnRQYXJzZXI9bCx0aGlzLnJldHJpZXM9Y3x8MyxsKXt2YXIgcD1sLnBhcnNlVXNlckFnZW50SW5mbygpLGQ9cC5vcyxmPXAuZGV2aWNlLGc9e29zOmQubmFtZSxvc192ZXJzaW9uOmQudmVyc2lvbixkZXZpY2VfdHlwZTpmLnR5cGUsbW9kZWw6Zi5tb2RlbH07dGhpcy51c2VyQWdlbnREYXRhPW5ldyBNYXAoT2JqZWN0LmVudHJpZXMoZykuZmlsdGVyKChmdW5jdGlvbihlKXtlWzBdO3ZhciB0PWVbMV07cmV0dXJuIG51bGwhPXQmJm51bGwhPXR9KSkpfXQmJnRoaXMudXBkYXRlU2V0dGluZ3ModCl9cmV0dXJuIGUucHJvdG90eXBlLnVwZGF0ZVNldHRpbmdzPWZ1bmN0aW9uKGUpe3RoaXMub2RwQ29uZmlnJiZ0aGlzLm9kcENvbmZpZy5lcXVhbHMoZSl8fCh0aGlzLmZsdXNoKCksdGhpcy5vZHBDb25maWc9ZSl9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7dGhpcy5wcm9jZXNzUXVldWUoITApfSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3RoaXMub2RwQ29uZmlnPyh0aGlzLnN0YXR1cz1SdC5SdW5uaW5nLHRoaXMuYmF0Y2hTaXplPjEmJnRoaXMuc2V0TmV3VGltZW91dCgpKTp0aGlzLmxvZ2dlci5sb2coZXhwb3J0cy5Mb2dMZXZlbC5FUlJPUixILk9EUF9DT05GSUdfTk9UX0FWQUlMQUJMRSl9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLkRFQlVHLFwiU3RvcCByZXF1ZXN0ZWQuXCIpLHRoaXMuZmx1c2goKSx0aGlzLmNsZWFyQ3VycmVudFRpbWVvdXQoKSx0aGlzLnN0YXR1cz1SdC5TdG9wcGVkLHRoaXMubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLkRFQlVHLFwiU3RvcHBlZC4gUXVldWUgQ291bnQ6ICVzXCIsdGhpcy5xdWV1ZS5sZW5ndGgpLFsyXX0pKX0pKX0sZS5wcm90b3R5cGUucmVnaXN0ZXJWdWlkPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBNYXA7dC5zZXQoZWUuVlVJRCxlKTt2YXIgcj1uZXcgeXQoXCJmdWxsc3RhY2tcIix0ZS5JTklUSUFMSVpFRCx0KTt0aGlzLnNlbmRFdmVudChyKX0sZS5wcm90b3R5cGUuaWRlbnRpZnlVc2VyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IE1hcDtpZihlfHx0KXt0JiZyLnNldChlZS5WVUlELHQpLGUmJnIuc2V0KGVlLkZTX1VTRVJfSUQsZSk7dmFyIGk9bmV3IHl0KFwiZnVsbHN0YWNrXCIsdGUuSURFTlRJRklFRCxyKTt0aGlzLnNlbmRFdmVudChpKX1lbHNlIHRoaXMubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLkVSUk9SLEguT0RQX1NFTkRfRVZFTlRfRkFJTEVEX1VJRF9NSVNTSU5HKX0sZS5wcm90b3R5cGUuc2VuZEV2ZW50PWZ1bmN0aW9uKGUpe190KGUuZGF0YSk/dGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsXCJFdmVudCBkYXRhIGZvdW5kIHRvIGJlIGludmFsaWQuXCIpOihlLmRhdGE9dGhpcy5hdWdtZW50Q29tbW9uRGF0YShlLmRhdGEpLHRoaXMuZW5xdWV1ZShlKSl9LGUucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSl7dGhpcy5zdGF0dXMhPT1SdC5TdG9wcGVkP3RoaXMuaGFzTmVjZXNzYXJ5SWRlbnRpZmllcnMoZSk/dGhpcy5xdWV1ZS5sZW5ndGg+PXRoaXMucXVldWVTaXplP3RoaXMubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLldBUk5JTkcsXCJGYWlsZWQgdG8gUHJvY2VzcyBPRFAgRXZlbnQuIEV2ZW50IFF1ZXVlIGZ1bGwuIHF1ZXVlU2l6ZSA9ICVzLlwiLHRoaXMucXVldWUubGVuZ3RoKToodGhpcy5xdWV1ZS5wdXNoKGUpLHRoaXMucHJvY2Vzc1F1ZXVlKCkpOnRoaXMubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLkVSUk9SLFwiT0RQIGV2ZW50cyBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUga2V5LXZhbHVlIHBhaXIgaW4gaWRlbnRpZmllcnMuXCIpOnRoaXMubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLldBUk5JTkcsXCJGYWlsZWQgdG8gUHJvY2VzcyBPRFAgRXZlbnQuIE9EUEV2ZW50TWFuYWdlciBpcyBub3QgcnVubmluZy5cIil9LGUucHJvdG90eXBlLnByb2Nlc3NRdWV1ZT1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksdGhpcy5zdGF0dXM9PT1SdC5SdW5uaW5nKXtpZihlKWZvcih0aGlzLmNsZWFyQ3VycmVudFRpbWVvdXQoKTt0aGlzLnF1ZXVlQ29udGFpbnNJdGVtcygpOyl0aGlzLm1ha2VBbmRTZW5kMUJhdGNoKCk7ZWxzZSBpZih0aGlzLnF1ZXVlSGFzQmF0Y2hlcygpKWZvcih0aGlzLmNsZWFyQ3VycmVudFRpbWVvdXQoKTt0aGlzLnF1ZXVlSGFzQmF0Y2hlcygpOyl0aGlzLm1ha2VBbmRTZW5kMUJhdGNoKCk7dGhpcy5iYXRjaFNpemU+MSYmdGhpcy5zZXROZXdUaW1lb3V0KCl9fSxlLnByb3RvdHlwZS5jbGVhckN1cnJlbnRUaW1lb3V0PWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKSx0aGlzLnRpbWVvdXRJZD12b2lkIDB9LGUucHJvdG90eXBlLnNldE5ld1RpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3ZvaWQgMD09PXRoaXMudGltZW91dElkJiYodGhpcy50aW1lb3V0SWQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm9jZXNzUXVldWUoITApfSksdGhpcy5mbHVzaEludGVydmFsKSl9LGUucHJvdG90eXBlLm1ha2VBbmRTZW5kMUJhdGNoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLm9kcENvbmZpZyl7dmFyIHQ9dGhpcy5xdWV1ZS5zcGxpY2UoMCx0aGlzLmJhdGNoU2l6ZSkscj10aGlzLm9kcENvbmZpZzt0Lmxlbmd0aD4wJiZBdCgoZnVuY3Rpb24oKXtyZXR1cm4gdShlLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIGUsaTtyZXR1cm4gbCh0aGlzLChmdW5jdGlvbihuKXtzd2l0Y2gobi5sYWJlbCl7Y2FzZSAwOmk9MCxuLmxhYmVsPTE7Y2FzZSAxOnJldHVybls0LHRoaXMuYXBpTWFuYWdlci5zZW5kRXZlbnRzKHIsdCldO2Nhc2UgMjplPW4uc2VudCgpLGkrPTEsbi5sYWJlbD0zO2Nhc2UgMzppZihlJiZpPHRoaXMucmV0cmllcylyZXR1cm5bMywxXTtuLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KSl9KSl9KSl9fSxlLnByb3RvdHlwZS5xdWV1ZUhhc0JhdGNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZUNvbnRhaW5zSXRlbXMoKSYmdGhpcy5xdWV1ZS5sZW5ndGgldGhpcy5iYXRjaFNpemU9PTB9LGUucHJvdG90eXBlLnF1ZXVlQ29udGFpbnNJdGVtcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlLmxlbmd0aD4wfSxlLnByb3RvdHlwZS5hdWdtZW50Q29tbW9uRGF0YT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgTWFwKHRoaXMudXNlckFnZW50RGF0YSk7cmV0dXJuIHQuc2V0KFwiaWRlbXBvdGVuY2VfaWRcIixoKCkpLHQuc2V0KFwiZGF0YV9zb3VyY2VfdHlwZVwiLFwic2RrXCIpLHQuc2V0KFwiZGF0YV9zb3VyY2VcIix0aGlzLmNsaWVudEVuZ2luZSksdC5zZXQoXCJkYXRhX3NvdXJjZV92ZXJzaW9uXCIsdGhpcy5jbGllbnRWZXJzaW9uKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc2V0KHIsZSl9KSksdH0sZS5wcm90b3R5cGUuZ2V0TG9nZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9nZ2VyfSxlLnByb3RvdHlwZS5nZXRRdWV1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlfSxlfSgpLFN0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuaGFzTmVjZXNzYXJ5SWRlbnRpZmllcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWRlbnRpZmllcnMuc2l6ZT49MH0sdH1yZXR1cm4gcyh0LGUpLHQucHJvdG90eXBlLmluaXRQYXJhbXM9ZnVuY3Rpb24oZSx0LHIpe3RoaXMucXVldWVTaXplPXR8fDEwMCx0aGlzLmJhdGNoU2l6ZT0xLHRoaXMuZmx1c2hJbnRlcnZhbD0wLHZvaWQgMCE9PWUmJjEhPT1lJiZ0aGlzLmdldExvZ2dlcigpLmxvZyhleHBvcnRzLkxvZ0xldmVsLldBUk5JTkcsXCJPRFAgZXZlbnQgYmF0Y2ggc2l6ZSBtdXN0IGJlIDEgaW4gdGhlIGJyb3dzZXIuXCIpLHZvaWQgMCE9PXImJjAhPT1yJiZ0aGlzLmdldExvZ2dlcigpLmxvZyhleHBvcnRzLkxvZ0xldmVsLldBUk5JTkcsXCJPRFAgZXZlbnQgZmx1c2ggaW50ZXJ2YWwgbXVzdCBiZSAwIGluIHRoZSBicm93c2VyLlwiKX0sdC5wcm90b3R5cGUuZGlzY2FyZEV2ZW50c0lmTmVlZGVkPWZ1bmN0aW9uKCl7dGhpcy5nZXRMb2dnZXIoKS5sb2coZXhwb3J0cy5Mb2dMZXZlbC5ERUJVRyxcIk9EUENvbmZpZyBub3QgcmVhZHkuIExlYXZpbmcgZXZlbnRzIGluIHF1ZXVlLlwiKX0sdH0oRHQpLEx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixpKXt0aGlzLm9kcENvbmZpZz1pLHRoaXMuX3NlZ21lbnRzQ2FjaGU9ZSx0aGlzLm9kcFNlZ21lbnRBcGlNYW5hZ2VyPXQsdGhpcy5sb2dnZXI9cnx8TShcIk9kcFNlZ21lbnRNYW5hZ2VyXCIpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJzZWdtZW50c0NhY2hlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWdtZW50c0NhY2hlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmZldGNoUXVhbGlmaWVkU2VnbWVudHM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB1KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgaSxuLG8scyxhLHU7cmV0dXJuIGwodGhpcywoZnVuY3Rpb24obCl7c3dpdGNoKGwubGFiZWwpe2Nhc2UgMDppZighdGhpcy5vZHBDb25maWcpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLldBUk5JTkcsSC5PRFBfQ09ORklHX05PVF9BVkFJTEFCTEUpLFsyLG51bGxdO2lmKCEoaT10aGlzLm9kcENvbmZpZy5zZWdtZW50c1RvQ2hlY2spfHxpLmxlbmd0aDw9MClyZXR1cm4gdGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuREVCVUcsXCJObyBzZWdtZW50cyBhcmUgdXNlZCBpbiB0aGUgcHJvamVjdC4gUmV0dXJuaW5nIGFuIGVtcHR5IGxpc3QuXCIpLFsyLFtdXTtpZihuPXRoaXMubWFrZUNhY2hlS2V5KGUsdCksbz1yLmluY2x1ZGVzKGV4cG9ydHMuT3B0aW1pemVseVNlZ21lbnRPcHRpb24uSUdOT1JFX0NBQ0hFKSwocz1yLmluY2x1ZGVzKGV4cG9ydHMuT3B0aW1pemVseVNlZ21lbnRPcHRpb24uUkVTRVRfQ0FDSEUpKSYmdGhpcy5yZXNldCgpLCFvJiYhcyl7aWYoYT10aGlzLl9zZWdtZW50c0NhY2hlLmxvb2t1cChuKSlyZXR1cm4gdGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuREVCVUcsJ09EUCBjYWNoZSBoaXQuIFJldHVybmluZyBzZWdtZW50cyBmcm9tIGNhY2hlIFwiJXNcIi4nLG4pLFsyLGFdO3RoaXMubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLkRFQlVHLFwiT0RQIGNhY2hlIG1pc3MuXCIpfXJldHVybiB0aGlzLmxvZ2dlci5sb2coZXhwb3J0cy5Mb2dMZXZlbC5ERUJVRyxcIk1ha2luZyBhIGNhbGwgdG8gT0RQIHNlcnZlci5cIiksWzQsdGhpcy5vZHBTZWdtZW50QXBpTWFuYWdlci5mZXRjaFNlZ21lbnRzKHRoaXMub2RwQ29uZmlnLmFwaUtleSx0aGlzLm9kcENvbmZpZy5hcGlIb3N0LGUsdCxpKV07Y2FzZSAxOnJldHVybih1PWwuc2VudCgpKSYmIW8mJnRoaXMuX3NlZ21lbnRzQ2FjaGUuc2F2ZSh7a2V5Om4sdmFsdWU6dX0pLFsyLHVdfX0pKX0pKX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9zZWdtZW50c0NhY2hlLnJlc2V0KCl9LGUucHJvdG90eXBlLm1ha2VDYWNoZUtleT1mdW5jdGlvbihlLHQpe3JldHVyblwiXCIuY29uY2F0KGUsXCItJC1cIikuY29uY2F0KHQpfSxlLnByb3RvdHlwZS51cGRhdGVTZXR0aW5ncz1mdW5jdGlvbihlKXt0aGlzLm9kcENvbmZpZz1lLHRoaXMucmVzZXQoKX0sZX0oKSxVdD17JHNjaGVtYTpcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hI1wiLHRpdGxlOlwiUHJvamVjdCBDb25maWcgSlNPTiBTY2hlbWFcIix0eXBlOlwib2JqZWN0XCIscHJvcGVydGllczp7cHJvamVjdElkOnt0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LGFjY291bnRJZDp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfSxncm91cHM6e3R5cGU6XCJhcnJheVwiLGl0ZW1zOnt0eXBlOlwib2JqZWN0XCIscHJvcGVydGllczp7aWQ6e3R5cGU6XCJzdHJpbmdcIixyZXF1aXJlZDohMH0scG9saWN5Ont0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LHRyYWZmaWNBbGxvY2F0aW9uOnt0eXBlOlwiYXJyYXlcIixpdGVtczp7dHlwZTpcIm9iamVjdFwiLHByb3BlcnRpZXM6e2VudGl0eUlkOnt0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LGVuZE9mUmFuZ2U6e3R5cGU6XCJpbnRlZ2VyXCIscmVxdWlyZWQ6ITB9fX0scmVxdWlyZWQ6ITB9LGV4cGVyaW1lbnRzOnt0eXBlOlwiYXJyYXlcIixpdGVtczp7dHlwZTpcIm9iamVjdFwiLHByb3BlcnRpZXM6e2lkOnt0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LGtleTp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfSxzdGF0dXM6e3R5cGU6XCJzdHJpbmdcIixyZXF1aXJlZDohMH0sbGF5ZXJJZDp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfSx2YXJpYXRpb25zOnt0eXBlOlwiYXJyYXlcIixpdGVtczp7dHlwZTpcIm9iamVjdFwiLHByb3BlcnRpZXM6e2lkOnt0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LGtleTp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfX19LHJlcXVpcmVkOiEwfSx0cmFmZmljQWxsb2NhdGlvbjp7dHlwZTpcImFycmF5XCIsaXRlbXM6e3R5cGU6XCJvYmplY3RcIixwcm9wZXJ0aWVzOntlbnRpdHlJZDp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfSxlbmRPZlJhbmdlOnt0eXBlOlwiaW50ZWdlclwiLHJlcXVpcmVkOiEwfX19LHJlcXVpcmVkOiEwfSxhdWRpZW5jZUlkczp7dHlwZTpcImFycmF5XCIsaXRlbXM6e3R5cGU6XCJzdHJpbmdcIn0scmVxdWlyZWQ6ITB9LGZvcmNlZFZhcmlhdGlvbnM6e3R5cGU6XCJvYmplY3RcIixyZXF1aXJlZDohMH19fSxyZXF1aXJlZDohMH19fSxyZXF1aXJlZDohMH0sZXhwZXJpbWVudHM6e3R5cGU6XCJhcnJheVwiLGl0ZW1zOnt0eXBlOlwib2JqZWN0XCIscHJvcGVydGllczp7aWQ6e3R5cGU6XCJzdHJpbmdcIixyZXF1aXJlZDohMH0sa2V5Ont0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LHN0YXR1czp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfSxsYXllcklkOnt0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LHZhcmlhdGlvbnM6e3R5cGU6XCJhcnJheVwiLGl0ZW1zOnt0eXBlOlwib2JqZWN0XCIscHJvcGVydGllczp7aWQ6e3R5cGU6XCJzdHJpbmdcIixyZXF1aXJlZDohMH0sa2V5Ont0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9fX0scmVxdWlyZWQ6ITB9LHRyYWZmaWNBbGxvY2F0aW9uOnt0eXBlOlwiYXJyYXlcIixpdGVtczp7dHlwZTpcIm9iamVjdFwiLHByb3BlcnRpZXM6e2VudGl0eUlkOnt0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LGVuZE9mUmFuZ2U6e3R5cGU6XCJpbnRlZ2VyXCIscmVxdWlyZWQ6ITB9fX0scmVxdWlyZWQ6ITB9LGF1ZGllbmNlSWRzOnt0eXBlOlwiYXJyYXlcIixpdGVtczp7dHlwZTpcInN0cmluZ1wifSxyZXF1aXJlZDohMH0sZm9yY2VkVmFyaWF0aW9uczp7dHlwZTpcIm9iamVjdFwiLHJlcXVpcmVkOiEwfX19LHJlcXVpcmVkOiEwfSxldmVudHM6e3R5cGU6XCJhcnJheVwiLGl0ZW1zOnt0eXBlOlwib2JqZWN0XCIscHJvcGVydGllczp7a2V5Ont0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9LGV4cGVyaW1lbnRJZHM6e3R5cGU6XCJhcnJheVwiLGl0ZW1zOnt0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9fSxpZDp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfX19LHJlcXVpcmVkOiEwfSxhdWRpZW5jZXM6e3R5cGU6XCJhcnJheVwiLGl0ZW1zOnt0eXBlOlwib2JqZWN0XCIscHJvcGVydGllczp7aWQ6e3R5cGU6XCJzdHJpbmdcIixyZXF1aXJlZDohMH0sbmFtZTp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfSxjb25kaXRpb25zOnt0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9fX0scmVxdWlyZWQ6ITB9LGF0dHJpYnV0ZXM6e3R5cGU6XCJhcnJheVwiLGl0ZW1zOnt0eXBlOlwib2JqZWN0XCIscHJvcGVydGllczp7aWQ6e3R5cGU6XCJzdHJpbmdcIixyZXF1aXJlZDohMH0sa2V5Ont0eXBlOlwic3RyaW5nXCIscmVxdWlyZWQ6ITB9fX0scmVxdWlyZWQ6ITB9LHZlcnNpb246e3R5cGU6XCJzdHJpbmdcIixyZXF1aXJlZDohMH0scmV2aXNpb246e3R5cGU6XCJzdHJpbmdcIixyZXF1aXJlZDohMH0saW50ZWdyYXRpb25zOnt0eXBlOlwiYXJyYXlcIixpdGVtczp7dHlwZTpcIm9iamVjdFwiLHByb3BlcnRpZXM6e2tleTp7dHlwZTpcInN0cmluZ1wiLHJlcXVpcmVkOiEwfSxob3N0Ont0eXBlOlwic3RyaW5nXCJ9LHB1YmxpY0tleTp7dHlwZTpcInN0cmluZ1wifSxwaXhlbFVybDp7dHlwZTpcInN0cmluZ1wifX19fX19O3ZhciBDdD17JHNjaGVtYTpcImh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvc2NoZW1hXCIsJGlkOlwiaHR0cHM6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmpzb25cIix0aXRsZTpcIk9EUCBSZXNwb25zZSBTY2hlbWFcIix0eXBlOlwib2JqZWN0XCIscmVxdWlyZWQ6W1wiZGF0YVwiXSxwcm9wZXJ0aWVzOntkYXRhOnt0aXRsZTpcIlRoZSBkYXRhIFNjaGVtYVwiLHR5cGU6XCJvYmplY3RcIixyZXF1aXJlZDpbXCJjdXN0b21lclwiXSxwcm9wZXJ0aWVzOntjdXN0b21lcjp7dGl0bGU6XCJUaGUgY3VzdG9tZXIgU2NoZW1hXCIsdHlwZTpcIm9iamVjdFwiLHJlcXVpcmVkOltdLHByb3BlcnRpZXM6e2F1ZGllbmNlczp7dGl0bGU6XCJUaGUgYXVkaWVuY2VzIFNjaGVtYVwiLHR5cGU6XCJvYmplY3RcIixyZXF1aXJlZDpbXCJlZGdlc1wiXSxwcm9wZXJ0aWVzOntlZGdlczp7dGl0bGU6XCJUaGUgZWRnZXMgU2NoZW1hXCIsdHlwZTpcImFycmF5XCIsaXRlbXM6e3RpdGxlOlwiQSBTY2hlbWFcIix0eXBlOlwib2JqZWN0XCIscmVxdWlyZWQ6W1wibm9kZVwiXSxwcm9wZXJ0aWVzOntub2RlOnt0aXRsZTpcIlRoZSBub2RlIFNjaGVtYVwiLHR5cGU6XCJvYmplY3RcIixyZXF1aXJlZDpbXCJuYW1lXCIsXCJzdGF0ZVwiXSxwcm9wZXJ0aWVzOntuYW1lOnt0aXRsZTpcIlRoZSBuYW1lIFNjaGVtYVwiLHR5cGU6XCJzdHJpbmdcIixleGFtcGxlczpbXCJoYXNfZW1haWxcIixcImhhc19lbWFpbF9vcHRlZF9pblwiXX0sc3RhdGU6e3RpdGxlOlwiVGhlIHN0YXRlIFNjaGVtYVwiLHR5cGU6XCJzdHJpbmdcIixleGFtcGxlczpbXCJxdWFsaWZpZWRcIl19fSxleGFtcGxlczpbXX19LGV4YW1wbGVzOltdfSxleGFtcGxlczpbXX19LGV4YW1wbGVzOltdfX0sZXhhbXBsZXM6W119fSxleGFtcGxlczpbXX0sZXJyb3JzOnt0aXRsZTpcIlRoZSBlcnJvcnMgU2NoZW1hXCIsdHlwZTpcImFycmF5XCIsZGVmYXVsdDpbXSxpdGVtczp7dGl0bGU6XCJBIFNjaGVtYVwiLHR5cGU6XCJvYmplY3RcIixyZXF1aXJlZDpbXCJtZXNzYWdlXCIsXCJsb2NhdGlvbnNcIixcImV4dGVuc2lvbnNcIl0scHJvcGVydGllczp7bWVzc2FnZTp7dGl0bGU6XCJUaGUgbWVzc2FnZSBTY2hlbWFcIix0eXBlOlwic3RyaW5nXCIsZXhhbXBsZXM6W1wiRXhjZXB0aW9uIHdoaWxlIGZldGNoaW5nIGRhdGEgKC9jdXN0b21lcikgOiBqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbjogY291bGQgbm90IHJlc29sdmUgX2ZzX3VzZXJfaWQgPSBhc2RzZGFkZGRkZFwiXX0sbG9jYXRpb25zOnt0aXRsZTpcIlRoZSBsb2NhdGlvbnMgU2NoZW1hXCIsdHlwZTpcImFycmF5XCIsaXRlbXM6e3RpdGxlOlwiQSBTY2hlbWFcIix0eXBlOlwib2JqZWN0XCIscmVxdWlyZWQ6W1wibGluZVwiLFwiY29sdW1uXCJdLHByb3BlcnRpZXM6e2xpbmU6e3RpdGxlOlwiVGhlIGxpbmUgU2NoZW1hXCIsdHlwZTpcImludGVnZXJcIixleGFtcGxlczpbMl19LGNvbHVtbjp7dGl0bGU6XCJUaGUgY29sdW1uIFNjaGVtYVwiLHR5cGU6XCJpbnRlZ2VyXCIsZXhhbXBsZXM6WzNdfX0sZXhhbXBsZXM6W119LGV4YW1wbGVzOltdfSxwYXRoOnt0aXRsZTpcIlRoZSBwYXRoIFNjaGVtYVwiLHR5cGU6XCJhcnJheVwiLGl0ZW1zOnt0aXRsZTpcIkEgU2NoZW1hXCIsdHlwZTpcInN0cmluZ1wiLGV4YW1wbGVzOltcImN1c3RvbWVyXCJdfSxleGFtcGxlczpbXX0sZXh0ZW5zaW9uczp7dGl0bGU6XCJUaGUgZXh0ZW5zaW9ucyBTY2hlbWFcIix0eXBlOlwib2JqZWN0XCIscmVxdWlyZWQ6W1wiY2xhc3NpZmljYXRpb25cIl0scHJvcGVydGllczp7Y2xhc3NpZmljYXRpb246e3RpdGxlOlwiVGhlIGNsYXNzaWZpY2F0aW9uIFNjaGVtYVwiLHR5cGU6XCJzdHJpbmdcIixleGFtcGxlczpbXCJJbnZhbGlkSWRlbnRpZmllckV4Y2VwdGlvblwiXX19LGV4YW1wbGVzOltdfX0sZXhhbXBsZXM6W119LGV4YW1wbGVzOltdfX0sZXhhbXBsZXM6W119LFB0PVtdLGJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudG9HcmFwaFFMSnNvbj1mdW5jdGlvbihlLHQscil7cmV0dXJuIGMoYyhbJ3tcInF1ZXJ5XCIgOiBcInF1ZXJ5IHtjdXN0b21lcicsXCIoXCIuY29uY2F0KGUsJyA6IFxcXFxcIicpLmNvbmNhdCh0LCdcXFxcXCIpICcpLFwie2F1ZGllbmNlc1wiLFwiKHN1YnNldDogW1wiXSwobnVsbD09cj92b2lkIDA6ci5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuJ1xcXFxcIicuY29uY2F0KGUsJ1xcXFxcIicpLmNvbmNhdCh0PHIubGVuZ3RoLTE/XCIsXCI6XCJcIil9KSkpfHxcIlwiLCEwKSxbJ10pIHtlZGdlcyB7bm9kZSB7bmFtZSBzdGF0ZX19fX19XCJ9J10sITEpLmpvaW4oXCJcIil9LHRoaXMucmVxdWVzdEhhbmRsZXI9ZSx0aGlzLmxvZ2dlcj10fXJldHVybiBlLnByb3RvdHlwZS5mZXRjaFNlZ21lbnRzPWZ1bmN0aW9uKGUsdCxyLGksbil7dmFyIG8scyxhLGM7cmV0dXJuIHUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciB1LHAsZCxmLGcsRSxoLEk7cmV0dXJuIGwodGhpcywoZnVuY3Rpb24obCl7c3dpdGNoKGwubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZSYmdD8wPT09KG51bGw9PW4/dm9pZCAwOm4ubGVuZ3RoKT9bMixQdF06KHU9XCJcIi5jb25jYXQodCxcIi92My9ncmFwaHFsXCIpLHA9dGhpcy50b0dyYXBoUUxKc29uKHIsaSxuKSxbNCx0aGlzLnF1ZXJ5U2VnbWVudHMoZSx1LHIsaSxwKV0pOih0aGlzLmxvZ2dlci5sb2coZXhwb3J0cy5Mb2dMZXZlbC5FUlJPUixcIlwiLmNvbmNhdChcIkF1ZGllbmNlIHNlZ21lbnRzIGZldGNoIGZhaWxlZFwiLFwiIChQYXJhbWV0ZXJzIGFwaUtleSBvciBhcGlIb3N0IGludmFsaWQpXCIpKSxbMixudWxsXSk7Y2FzZSAxOnJldHVybihkPWwuc2VudCgpKT8oZj10aGlzLnBhcnNlU2VnbWVudHNSZXNwb25zZUpzb24oZCkpPyhudWxsPT09KG89Zi5lcnJvcnMpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmxlbmd0aCk+MD8oZz1mLmVycm9yc1swXS5leHRlbnNpb25zLEU9Zy5jb2RlLGg9Zy5jbGFzc2lmaWNhdGlvbixcIklOVkFMSURfSURFTlRJRklFUl9FWENFUFRJT05cIj09RT90aGlzLmxvZ2dlci5sb2coZXhwb3J0cy5Mb2dMZXZlbC5FUlJPUixcIlwiLmNvbmNhdChcIkF1ZGllbmNlIHNlZ21lbnRzIGZldGNoIGZhaWxlZFwiLFwiIChpbnZhbGlkIGlkZW50aWZpZXIpXCIpKTp0aGlzLmxvZ2dlci5sb2coZXhwb3J0cy5Mb2dMZXZlbC5FUlJPUixcIlwiLmNvbmNhdChcIkF1ZGllbmNlIHNlZ21lbnRzIGZldGNoIGZhaWxlZFwiLFwiIChcIikuY29uY2F0KGgsXCIpXCIpKSxbMixudWxsXSk6KEk9bnVsbD09PShjPW51bGw9PT0oYT1udWxsPT09KHM9bnVsbD09Zj92b2lkIDA6Zi5kYXRhKXx8dm9pZCAwPT09cz92b2lkIDA6cy5jdXN0b21lcil8fHZvaWQgMD09PWE/dm9pZCAwOmEuYXVkaWVuY2VzKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5lZGdlcyk/WzIsSS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVyblwicXVhbGlmaWVkXCI9PWUubm9kZS5zdGF0ZX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGUubmFtZX0pKV06KHRoaXMubG9nZ2VyLmxvZyhleHBvcnRzLkxvZ0xldmVsLkVSUk9SLFwiXCIuY29uY2F0KFwiQXVkaWVuY2Ugc2VnbWVudHMgZmV0Y2ggZmFpbGVkXCIsXCIgKGRlY29kZSBlcnJvcilcIikpLFsyLG51bGxdKToodGhpcy5sb2dnZXIubG9nKGV4cG9ydHMuTG9nTGV2ZWwuRVJST1IsXCJcIi5jb25jYXQoXCJBdWRpZW5jZSBzZWdtZW50cyBmZXRjaCBmYWlsZWRcIixcIiAoZGVjb2RlIGVycm9yKVwiKSksWzIsbnVsbF0pOih0aGlzLmxvZ2dlci5sb2coZXhwb3J0cy5Mb2dMZXZlbC5FUlJPUixcIlwiLmNvbmNhdChcIkF1ZGllbmNlIHNlZ21lbnRzIGZldGNoIGZhaWxlZFwiLFwiIChuZXR3b3JrIGVycm9yKVwiKSksWzIsbnVsbF0pfX0pKX0pKX0sZS5wcm90b3R5cGUucXVlcnlTZWdtZW50cz1mdW5jdGlvbihlLHQscixpLG4pe3JldHVybiB1KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgcixpLG8scztyZXR1cm4gbCh0aGlzLChmdW5jdGlvbihhKXtzd2l0Y2goYS5sYWJlbCl7Y2FzZSAwOnI9XCJQT1NUXCIsaT10LG89e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCIsXCJ4LWFwaS1rZXlcIjplfSxhLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBhLnRyeXMucHVzaChbMSwzLCw0XSksWzQsdGhpcy5yZXF1ZXN0SGFuZGxlci5tYWtlUmVxdWVzdChpLG8scixuKS5yZXNwb25zZVByb21pc2VdO2Nhc2UgMjpyZXR1cm4gcz1hLnNlbnQoKSxbMyw0XTtjYXNlIDM6cmV0dXJuIGEuc2VudCgpLFsyLG51bGxdO2Nhc2UgNDpyZXR1cm5bMixzLmJvZHldfX0pKX0pKX0sZS5wcm90b3R5cGUucGFyc2VTZWdtZW50c1Jlc3BvbnNlSnNvbj1mdW5jdGlvbihlKXt2YXIgdD17fTt0cnl7dD1KU09OLnBhcnNlKGUpfWNhdGNoKGUpe3JldHVybiBudWxsfXJldHVybiBmdW5jdGlvbihlLHQsaSl7dm9pZCAwPT09dCYmKHQ9VXQpLHZvaWQgMD09PWkmJihpPSEwKTt2YXIgbj1cIlwiLmNvbmNhdChcIkpTT05fU0NIRU1BX1ZBTElEQVRPUlwiLFwiIChcIikuY29uY2F0KHQudGl0bGUsXCIpXCIpO2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHxudWxsPT09ZSl0aHJvdyBuZXcgRXJyb3IoTihILk5PX0pTT05fUFJPVklERUQsbikpO3ZhciBvPXIudmFsaWRhdGUoZSx0KTtpZihvLnZhbGlkKXJldHVybiEwO2lmKCFpKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoby5lcnJvcnMpKXRocm93IG5ldyBFcnJvcihOKEguSU5WQUxJRF9EQVRBRklMRSxuLG8uZXJyb3JzWzBdLnByb3BlcnR5LG8uZXJyb3JzWzBdLm1lc3NhZ2UpKTt0aHJvdyBuZXcgRXJyb3IoTihILklOVkFMSURfSlNPTixuKSl9KHQsQ3QsITEpP3Q6bnVsbH0sZX0oKSxWdD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBlLmNhbGwodGhpcyx0KXx8dGhpc31yZXR1cm4gcyh0LGUpLHQuY3JlYXRlSW5zdGFuY2U9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5sb2dnZXIsaT1lLm9kcE9wdGlvbnMsbj1lLm9kcEludGVncmF0aW9uQ29uZmlnLG89ZS5jbGllbnRFbmdpbmUscz1lLmNsaWVudFZlcnNpb247cj1yfHxNKCksbz1vfHxcImphdmFzY3JpcHQtc2RrXCIscz1zfHxcIjUuNC4xXCI7dmFyIGEsdSxsLGM9dm9pZCAwO3JldHVybihudWxsPT1uP3ZvaWQgMDpuLmludGVncmF0ZWQpJiYoYz1uLm9kcENvbmZpZyksYT0obnVsbD09aT92b2lkIDA6aS5zZWdtZW50c1JlcXVlc3RIYW5kbGVyKT9pLnNlZ21lbnRzUmVxdWVzdEhhbmRsZXI6bmV3IGF0KHIsKG51bGw9PWk/dm9pZCAwOmkuc2VnbWVudHNBcGlUaW1lb3V0KXx8MWU0KSx1PShudWxsPT1pP3ZvaWQgMDppLnNlZ21lbnRNYW5hZ2VyKT9pLnNlZ21lbnRNYW5hZ2VyOm5ldyBMdCgobnVsbD09aT92b2lkIDA6aS5zZWdtZW50c0NhY2hlKXx8bmV3IGd0KHttYXhTaXplOm51bGw9PWk/dm9pZCAwOmkuc2VnbWVudHNDYWNoZVNpemUsdGltZW91dDpudWxsPT1pP3ZvaWQgMDppLnNlZ21lbnRzQ2FjaGVUaW1lb3V0fSksbmV3IGJ0KGEscikscixjKSxsPShudWxsPT1pP3ZvaWQgMDppLmV2ZW50UmVxdWVzdEhhbmRsZXIpP2kuZXZlbnRSZXF1ZXN0SGFuZGxlcjpuZXcgYXQociwobnVsbD09aT92b2lkIDA6aS5ldmVudEFwaVRpbWVvdXQpfHwxZTQpLG5ldyB0KHtvZHBJbnRlZ3JhdGlvbkNvbmZpZzpuLHNlZ21lbnRNYW5hZ2VyOnUsZXZlbnRNYW5hZ2VyOihudWxsPT1pP3ZvaWQgMDppLmV2ZW50TWFuYWdlcik/aS5ldmVudE1hbmFnZXI6bmV3IFN0KHtvZHBDb25maWc6YyxhcGlNYW5hZ2VyOm5ldyBtdChsLHIpLGxvZ2dlcjpyLGNsaWVudEVuZ2luZTpvLGNsaWVudFZlcnNpb246cyxmbHVzaEludGVydmFsOm51bGw9PWk/dm9pZCAwOmkuZXZlbnRGbHVzaEludGVydmFsLGJhdGNoU2l6ZTpudWxsPT1pP3ZvaWQgMDppLmV2ZW50QmF0Y2hTaXplLHF1ZXVlU2l6ZTpudWxsPT1pP3ZvaWQgMDppLmV2ZW50UXVldWVTaXplLHVzZXJBZ2VudFBhcnNlcjpudWxsPT1pP3ZvaWQgMDppLnVzZXJBZ2VudFBhcnNlcn0pLGxvZ2dlcjpyfSl9LHQucHJvdG90eXBlLmluaXRpYWxpemVWdWlkPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciBlO3JldHVybiBsKHRoaXMsKGZ1bmN0aW9uKHIpe3N3aXRjaChyLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsSXQuaW5zdGFuY2UodC5jYWNoZSldO2Nhc2UgMTpyZXR1cm4gZT1yLnNlbnQoKSx0aGlzLnZ1aWQ9ZS52dWlkLFsyXX19KSl9KSl9LHQucHJvdG90eXBlLmlkZW50aWZ5VXNlcj1mdW5jdGlvbih0LHIpe3QmJkl0LmlzVnVpZCh0KT9lLnByb3RvdHlwZS5pZGVudGlmeVVzZXIuY2FsbCh0aGlzLHZvaWQgMCx0KTp0JiZyJiZJdC5pc1Z1aWQocik/ZS5wcm90b3R5cGUuaWRlbnRpZnlVc2VyLmNhbGwodGhpcyx0LHIpOmUucHJvdG90eXBlLmlkZW50aWZ5VXNlci5jYWxsKHRoaXMsdCxyfHx0aGlzLnZ1aWQpfSx0LnByb3RvdHlwZS5zZW5kRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIHI9dC50eXBlLGk9dC5hY3Rpb24sbj10LmlkZW50aWZpZXJzLG89dC5kYXRhLHM9bmV3IE1hcChuKTtpZighbi5oYXMoZWUuVlVJRCkpe2lmKCF0aGlzLnZ1aWQpdGhyb3cgbmV3IEVycm9yKEguT0RQX1NFTkRfRVZFTlRfRkFJTEVEX1ZVSURfTUlTU0lORyk7cy5zZXQoZWUuVlVJRCx0aGlzLnZ1aWQpfWUucHJvdG90eXBlLnNlbmRFdmVudC5jYWxsKHRoaXMse3R5cGU6cixhY3Rpb246aSxpZGVudGlmaWVyczpzLGRhdGE6b30pfSx0LnByb3RvdHlwZS5pc1Z1aWRFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmdldFZ1aWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52dWlkfSx0LmNhY2hlPW5ldyBsdCx0fShOdCk7ZnVuY3Rpb24gTXQoZSx0LHIpe3JldHVybnt2YXJpYXRpb25LZXk6bnVsbCxlbmFibGVkOiExLHZhcmlhYmxlczp7fSxydWxlS2V5Om51bGwsZmxhZ0tleTplLHVzZXJDb250ZXh0OnQscmVhc29uczpyfX12YXIgRnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0LHI9ZS5vcHRpbWl6ZWx5LGk9ZS51c2VySWQsbj1lLmF0dHJpYnV0ZXMsbz1lLnNob3VsZElkZW50aWZ5VXNlcixzPXZvaWQgMD09PW98fG8sdT10aGlzO3RoaXMuX3F1YWxpZmllZFNlZ21lbnRzPW51bGwsdGhpcy5vcHRpbWl6ZWx5PXIsdGhpcy51c2VySWQ9aSx0aGlzLmF0dHJpYnV0ZXM9bnVsbCE9PSh0PWEoe30sbikpJiZ2b2lkIDAhPT10P3Q6e30sdGhpcy5mb3JjZWREZWNpc2lvbnNNYXA9e30scyYmci5yZWFkeVByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7ZS5zdWNjZXNzJiZyLmlzT2RwSW50ZWdyYXRlZCgpJiZ1LmlkZW50aWZ5VXNlcigpfSkpfXJldHVybiBlLnByb3RvdHlwZS5pZGVudGlmeVVzZXI9ZnVuY3Rpb24oKXt0aGlzLm9wdGltaXplbHkuaWRlbnRpZnlVc2VyKHRoaXMudXNlcklkKX0sZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGUsdCl7dGhpcy5hdHRyaWJ1dGVzW2VdPXR9LGUucHJvdG90eXBlLmdldFVzZXJJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVzZXJJZH0sZS5wcm90b3R5cGUuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBhKHt9LHRoaXMuYXR0cmlidXRlcyl9LGUucHJvdG90eXBlLmdldE9wdGltaXplbHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpbWl6ZWx5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCJxdWFsaWZpZWRTZWdtZW50c1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVhbGlmaWVkU2VnbWVudHN9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9xdWFsaWZpZWRTZWdtZW50cz1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRlY2lkZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1bXSksdGhpcy5vcHRpbWl6ZWx5LmRlY2lkZSh0aGlzLmNsb25lVXNlckNvbnRleHQoKSxlLHQpfSxlLnByb3RvdHlwZS5kZWNpZGVGb3JLZXlzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVtdKSx0aGlzLm9wdGltaXplbHkuZGVjaWRlRm9yS2V5cyh0aGlzLmNsb25lVXNlckNvbnRleHQoKSxlLHQpfSxlLnByb3RvdHlwZS5kZWNpZGVBbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPVtdKSx0aGlzLm9wdGltaXplbHkuZGVjaWRlQWxsKHRoaXMuY2xvbmVVc2VyQ29udGV4dCgpLGUpfSxlLnByb3RvdHlwZS50cmFja0V2ZW50PWZ1bmN0aW9uKGUsdCl7dGhpcy5vcHRpbWl6ZWx5LnRyYWNrKGUsdGhpcy51c2VySWQsdGhpcy5hdHRyaWJ1dGVzLHQpfSxlLnByb3RvdHlwZS5zZXRGb3JjZWREZWNpc2lvbj1mdW5jdGlvbihlLHQpe3ZhciByLGk9ZS5mbGFnS2V5LG49bnVsbCE9PShyPWUucnVsZUtleSkmJnZvaWQgMCE9PXI/cjpZLkZPUkNFRF9ERUNJU0lPTl9OVUxMX1JVTEVfS0VZLG89e3ZhcmlhdGlvbktleTp0LnZhcmlhdGlvbktleX07cmV0dXJuIHRoaXMuZm9yY2VkRGVjaXNpb25zTWFwW2ldfHwodGhpcy5mb3JjZWREZWNpc2lvbnNNYXBbaV09e30pLHRoaXMuZm9yY2VkRGVjaXNpb25zTWFwW2ldW25dPW8sITB9LGUucHJvdG90eXBlLmdldEZvcmNlZERlY2lzaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbmRGb3JjZWREZWNpc2lvbihlKX0sZS5wcm90b3R5cGUucmVtb3ZlRm9yY2VkRGVjaXNpb249ZnVuY3Rpb24oZSl7dmFyIHQscj1udWxsIT09KHQ9ZS5ydWxlS2V5KSYmdm9pZCAwIT09dD90OlkuRk9SQ0VEX0RFQ0lTSU9OX05VTExfUlVMRV9LRVksaT1lLmZsYWdLZXksbj0hMTt0aGlzLmZvcmNlZERlY2lzaW9uc01hcC5oYXNPd25Qcm9wZXJ0eShpKSYmKHRoaXMuZm9yY2VkRGVjaXNpb25zTWFwW2ldLmhhc093blByb3BlcnR5KHIpJiYoZGVsZXRlIHRoaXMuZm9yY2VkRGVjaXNpb25zTWFwW2ldW3JdLG49ITApLDA9PT1PYmplY3Qua2V5cyh0aGlzLmZvcmNlZERlY2lzaW9uc01hcFtpXSkubGVuZ3RoJiZkZWxldGUgdGhpcy5mb3JjZWREZWNpc2lvbnNNYXBbaV0pO3JldHVybiBufSxlLnByb3RvdHlwZS5yZW1vdmVBbGxGb3JjZWREZWNpc2lvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JjZWREZWNpc2lvbnNNYXA9e30sITB9LGUucHJvdG90eXBlLmZpbmRGb3JjZWREZWNpc2lvbj1mdW5jdGlvbihlKXt2YXIgdCxyPW51bGwhPT0odD1lLnJ1bGVLZXkpJiZ2b2lkIDAhPT10P3Q6WS5GT1JDRURfREVDSVNJT05fTlVMTF9SVUxFX0tFWSxpPWUuZmxhZ0tleTtpZih0aGlzLmZvcmNlZERlY2lzaW9uc01hcC5oYXNPd25Qcm9wZXJ0eShlLmZsYWdLZXkpKXt2YXIgbj10aGlzLmZvcmNlZERlY2lzaW9uc01hcFtpXTtpZihuLmhhc093blByb3BlcnR5KHIpKXJldHVybnt2YXJpYXRpb25LZXk6bltyXS52YXJpYXRpb25LZXl9fXJldHVybiBudWxsfSxlLnByb3RvdHlwZS5jbG9uZVVzZXJDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUoe3Nob3VsZElkZW50aWZ5VXNlcjohMSxvcHRpbWl6ZWx5OnRoaXMuZ2V0T3B0aW1pemVseSgpLHVzZXJJZDp0aGlzLmdldFVzZXJJZCgpLGF0dHJpYnV0ZXM6dGhpcy5nZXRBdHRyaWJ1dGVzKCl9KTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JjZWREZWNpc2lvbnNNYXApLmxlbmd0aD4wJiYodC5mb3JjZWREZWNpc2lvbnNNYXA9YSh7fSx0aGlzLmZvcmNlZERlY2lzaW9uc01hcCkpLHQuX3F1YWxpZmllZFNlZ21lbnRzPXRoaXMuX3F1YWxpZmllZFNlZ21lbnRzLHR9LGUucHJvdG90eXBlLmZldGNoUXVhbGlmaWVkU2VnbWVudHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciB0O3JldHVybiBsKHRoaXMsKGZ1bmN0aW9uKHIpe3N3aXRjaChyLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5vcHRpbWl6ZWx5LmZldGNoUXVhbGlmaWVkU2VnbWVudHModGhpcy51c2VySWQsZSldO2Nhc2UgMTpyZXR1cm4gdD1yLnNlbnQoKSx0aGlzLnF1YWxpZmllZFNlZ21lbnRzPXQsWzIsbnVsbCE9PXRdfX0pKX0pKX0sZS5wcm90b3R5cGUuaXNRdWFsaWZpZWRGb3I9ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLl9xdWFsaWZpZWRTZWdtZW50cyYmdGhpcy5fcXVhbGlmaWVkU2VnbWVudHMuaW5kZXhPZihlKT4tMX0sZX0oKSx4dD1bXCJhbmRcIixcIm9yXCIsXCJub3RcIl07ZnVuY3Rpb24ga3QoZSx0KXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgcj1lWzBdLGk9ZS5zbGljZSgxKTtzd2l0Y2goXCJzdHJpbmdcIj09dHlwZW9mIHImJi0xPT09eHQuaW5kZXhPZihyKSYmKHI9XCJvclwiLGk9ZSkscil7Y2FzZVwiYW5kXCI6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIHI9ITE7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBuPWt0KGVbaV0sdCk7aWYoITE9PT1uKXJldHVybiExO251bGw9PT1uJiYocj0hMCl9cmV0dXJuIXJ8fG51bGx9cmV0dXJuIG51bGx9KGksdCk7Y2FzZVwibm90XCI6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7dmFyIHI9a3QoZVswXSx0KTtyZXR1cm4gbnVsbD09PXI/bnVsbDohcn1yZXR1cm4gbnVsbH0oaSx0KTtkZWZhdWx0OnJldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPSExO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbj1rdChlW2ldLHQpO2lmKCEwPT09bilyZXR1cm4hMDtudWxsPT09biYmKHI9ITApfXJldHVybiEhciYmbnVsbH1yZXR1cm4gbnVsbH0oaSx0KX19cmV0dXJuIHQoZSl9dmFyIHd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsaSl7dmFyIG4sbzt0aGlzLnNka0tleT1udWxsIT09KG49dC5zZGtLZXkpJiZ2b2lkIDAhPT1uP246XCJcIix0aGlzLmVudmlyb25tZW50S2V5PW51bGwhPT0obz10LmVudmlyb25tZW50S2V5KSYmdm9pZCAwIT09bz9vOlwiXCIsdGhpcy5hdHRyaWJ1dGVzPXQuYXR0cmlidXRlcyx0aGlzLmF1ZGllbmNlcz1lLmdldEF1ZGllbmNlcyh0KSx0aGlzLmV2ZW50cz10LmV2ZW50cyx0aGlzLnJldmlzaW9uPXQucmV2aXNpb247dmFyIHM9KHQuZmVhdHVyZUZsYWdzfHxbXSkucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlW3QuaWRdPXQudmFyaWFibGVzLGV9KSx7fSksYT1lLmdldFZhcmlhYmxlSWRNYXAodCksdT1lLmdldEV4cGVyaW1lbnRzTWFwKHQscyxhLGkpLGw9dS5leHBlcmltZW50c01hcEJ5SWQsYz11LmV4cGVyaW1lbnRzTWFwQnlLZXk7dGhpcy5leHBlcmltZW50c01hcD1jLHRoaXMuZmVhdHVyZXNNYXA9ZS5nZXRGZWF0dXJlc01hcCh0LHMsbCxhKSx0aGlzLmRhdGFmaWxlPXJ9cmV0dXJuIGUucHJvdG90eXBlLmdldERhdGFmaWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YWZpbGV9LGUuZ2V0QXVkaWVuY2VzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLHI9W107cmV0dXJuKGUudHlwZWRBdWRpZW5jZXN8fFtdKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2goe2lkOmUuaWQsY29uZGl0aW9uczpKU09OLnN0cmluZ2lmeShlLmNvbmRpdGlvbnMpLG5hbWU6ZS5uYW1lfSksci5wdXNoKGUuaWQpfSkpLChlLmF1ZGllbmNlc3x8W10pLmZvckVhY2goKGZ1bmN0aW9uKGUpey0xPT09ci5pbmRleE9mKGUuaWQpJiZcIiRvcHRfZHVtbXlfYXVkaWVuY2VcIiE9ZS5pZCYmdC5wdXNoKHtpZDplLmlkLGNvbmRpdGlvbnM6SlNPTi5zdHJpbmdpZnkoZS5jb25kaXRpb25zKSxuYW1lOmUubmFtZX0pfSkpLHR9LGUuZ2V0U2VyaWFsaXplZEF1ZGllbmNlcz1mdW5jdGlvbih0LHIpe3ZhciBpPVwiXCI7aWYodCl7dmFyIG49XCJcIjt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPVwiXCI7aWYodCBpbnN0YW5jZW9mIEFycmF5KW89ZS5nZXRTZXJpYWxpemVkQXVkaWVuY2VzKHQsciksbz1cIihcIi5jb25jYXQobyxcIilcIik7ZWxzZSBpZih4dC5pbmRleE9mKHQpPi0xKW49dC50b1VwcGVyQ2FzZSgpO2Vsc2V7dmFyIHM9clt0XT9yW3RdLm5hbWU6dDtpfHxcIk5PVFwiPT09bj8obj1cIlwiPT09bj9cIk9SXCI6bixpPVwiXCI9PT1pP1wiXCIuY29uY2F0KG4sJyBcIicpLmNvbmNhdChyW3RdLm5hbWUsJ1wiJyk6aS5jb25jYXQoXCIgXCIuY29uY2F0KG4sJyBcIicpLmNvbmNhdChzLCdcIicpKSk6aT0nXCInLmNvbmNhdChzLCdcIicpfVwiXCIhPT1vJiYoXCJcIiE9PWl8fFwiTk9UXCI9PT1uPyhuPVwiXCI9PT1uP1wiT1JcIjpuLGk9XCJcIj09PWk/XCJcIi5jb25jYXQobixcIiBcIikuY29uY2F0KG8pOmkuY29uY2F0KFwiIFwiLmNvbmNhdChuLFwiIFwiKS5jb25jYXQobykpKTppPWkuY29uY2F0KG8pKX0pKX1yZXR1cm4gaX0sZS5nZXRFeHBlcmltZW50QXVkaWVuY2VzPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQuYXVkaWVuY2VDb25kaXRpb25zP2UuZ2V0U2VyaWFsaXplZEF1ZGllbmNlcyh0LmF1ZGllbmNlQ29uZGl0aW9ucyxyLmF1ZGllbmNlc0J5SWQpOlwiXCJ9LGUubWVyZ2VGZWF0dXJlVmFyaWFibGVzPWZ1bmN0aW9uKGUsdCxyLGksbil7dmFyIG89KGVbcl18fFtdKS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdC5rZXldPXtpZDp0LmlkLGtleTp0LmtleSx0eXBlOnQudHlwZSx2YWx1ZTp0LmRlZmF1bHRWYWx1ZX0sZX0pLHt9KTtyZXR1cm4oaXx8W10pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPXRbZS5pZF0saT17aWQ6ZS5pZCxrZXk6ci5rZXksdHlwZTpyLnR5cGUsdmFsdWU6bj9lLnZhbHVlOnIuZGVmYXVsdFZhbHVlfTtvW3Iua2V5XT1pfSkpLG99LGUuZ2V0VmFyaWF0aW9uc01hcD1mdW5jdGlvbih0LHIsaSxuKXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsbyl7dmFyIHM9ZS5tZXJnZUZlYXR1cmVWYXJpYWJsZXMocixpLG4sby52YXJpYWJsZXMsby5mZWF0dXJlRW5hYmxlZCk7cmV0dXJuIHRbby5rZXldPXtpZDpvLmlkLGtleTpvLmtleSxmZWF0dXJlRW5hYmxlZDpvLmZlYXR1cmVFbmFibGVkLHZhcmlhYmxlc01hcDpzfSx0fSkse30pfSxlLmdldFZhcmlhYmxlSWRNYXA9ZnVuY3Rpb24oZSl7cmV0dXJuKGUuZmVhdHVyZUZsYWdzfHxbXSkucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0LnZhcmlhYmxlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3QuaWRdPXR9KSksZX0pLHt9KX0sZS5nZXREZWxpdmVyeVJ1bGVzPWZ1bmN0aW9uKHQscixpLG4sbyl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbihuKXtyZXR1cm57aWQ6bi5pZCxrZXk6bi5rZXksYXVkaWVuY2VzOmUuZ2V0RXhwZXJpbWVudEF1ZGllbmNlcyhuLHQpLHZhcmlhdGlvbnNNYXA6ZS5nZXRWYXJpYXRpb25zTWFwKG4udmFyaWF0aW9ucyxyLG8saSl9fSkpfSxlLmdldFJvbGxvdXRFeHBlcmltZW50SWRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybihlfHxbXSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5leHBlcmltZW50cy5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZS5pZCl9KSl9KSksdH0sZS5nZXRFeHBlcmltZW50c01hcD1mdW5jdGlvbih0LHIsaSxuKXt2YXIgbz10aGlzLmdldFJvbGxvdXRFeHBlcmltZW50SWRzKHQucm9sbG91dHMpLHM9e30sYT17fTtyZXR1cm4odC5leHBlcmltZW50c3x8W10pLmZvckVhY2goKGZ1bmN0aW9uKHUpe2lmKC0xPT09by5pbmRleE9mKHUuaWQpKXt2YXIgbD10LmV4cGVyaW1lbnRGZWF0dXJlTWFwW3UuaWRdLGM9XCJcIjtsJiZsLmxlbmd0aD4wJiYoYz1sWzBdKTt2YXIgcD1lLmdldFZhcmlhdGlvbnNNYXAodS52YXJpYXRpb25zLHIsaSxjLnRvU3RyaW5nKCkpLGQ9e2lkOnUuaWQsa2V5OnUua2V5LGF1ZGllbmNlczplLmdldEV4cGVyaW1lbnRBdWRpZW5jZXModSx0KSx2YXJpYXRpb25zTWFwOnB9O3NbdS5pZF09ZCxhW3Uua2V5XSYmbiYmbi53YXJuKFwiRHVwbGljYXRlIGV4cGVyaW1lbnQga2V5cyBmb3VuZCBpbiBkYXRhZmlsZTogXCIuY29uY2F0KHUua2V5KSksYVt1LmtleV09ZH19KSkse2V4cGVyaW1lbnRzTWFwQnlJZDpzLGV4cGVyaW1lbnRzTWFwQnlLZXk6YX19LGUuZ2V0RXhwZXJpbWVudHNLZXlNYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9e307Zm9yKHZhciByIGluIGUpe3ZhciBpPWVbcl07dFtpLmtleV09aX1yZXR1cm4gdH0sZS5nZXRGZWF0dXJlc01hcD1mdW5jdGlvbih0LHIsaSxuKXt2YXIgbz17fTtyZXR1cm4gdC5mZWF0dXJlRmxhZ3MuZm9yRWFjaCgoZnVuY3Rpb24ocyl7dmFyIGE9e30sdT1bXTtzLmV4cGVyaW1lbnRJZHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9aVtlXTt0JiYoYVt0LmtleV09dCksdS5wdXNoKGlbZV0pfSkpO3ZhciBsPShzLnZhcmlhYmxlc3x8W10pLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0LmtleV09e2lkOnQuaWQsa2V5OnQua2V5LHR5cGU6dC50eXBlLHZhbHVlOnQuZGVmYXVsdFZhbHVlfSxlfSkse30pLGM9W10scD10LnJvbGxvdXRJZE1hcFtzLnJvbGxvdXRJZF07cCYmKGM9ZS5nZXREZWxpdmVyeVJ1bGVzKHQscixzLmlkLHAuZXhwZXJpbWVudHMsbikpLG9bcy5rZXldPXtpZDpzLmlkLGtleTpzLmtleSxleHBlcmltZW50UnVsZXM6dSxkZWxpdmVyeVJ1bGVzOmMsZXhwZXJpbWVudHNNYXA6YSx2YXJpYWJsZXNNYXA6bH19KSksb30sZX0oKTt2YXIgR3Q9TSgpO2Z1bmN0aW9uIEJ0KGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6dHx8XCJVbmtub3duIGVycm9yXCJ9dmFyIEt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnVwZGF0ZUxpc3RlbmVycz1bXSx0aGlzLmNvbmZpZ09iaj1udWxsLHRoaXMub3B0aW1pemVseUNvbmZpZ09iaj1udWxsLHRoaXMuZGF0YWZpbGVNYW5hZ2VyPW51bGw7dHJ5e2lmKHRoaXMuanNvblNjaGVtYVZhbGlkYXRvcj1lLmpzb25TY2hlbWFWYWxpZGF0b3IsIWUuZGF0YWZpbGUmJiFlLnNka0tleSl7dmFyIHQ9bmV3IEVycm9yKE4oSC5EQVRBRklMRV9BTkRfU0RLX0tFWV9NSVNTSU5HLFwiUFJPSkVDVF9DT05GSUdfTUFOQUdFUlwiKSk7cmV0dXJuIHRoaXMucmVhZHlQcm9taXNlPVByb21pc2UucmVzb2x2ZSh7c3VjY2VzczohMSxyZWFzb246QnQodCl9KSx2b2lkIEd0LmVycm9yKHQpfXZhciByPW51bGw7ZS5kYXRhZmlsZSYmKHI9dGhpcy5oYW5kbGVOZXdEYXRhZmlsZShlLmRhdGFmaWxlKSksZS5zZGtLZXkmJmUuZGF0YWZpbGVNYW5hZ2VyPyh0aGlzLmRhdGFmaWxlTWFuYWdlcj1lLmRhdGFmaWxlTWFuYWdlcix0aGlzLmRhdGFmaWxlTWFuYWdlci5zdGFydCgpLHRoaXMucmVhZHlQcm9taXNlPXRoaXMuZGF0YWZpbGVNYW5hZ2VyLm9uUmVhZHkoKS50aGVuKHRoaXMub25EYXRhZmlsZU1hbmFnZXJSZWFkeUZ1bGZpbGwuYmluZCh0aGlzKSx0aGlzLm9uRGF0YWZpbGVNYW5hZ2VyUmVhZHlSZWplY3QuYmluZCh0aGlzKSksdGhpcy5kYXRhZmlsZU1hbmFnZXIub24oXCJ1cGRhdGVcIix0aGlzLm9uRGF0YWZpbGVNYW5hZ2VyVXBkYXRlLmJpbmQodGhpcykpKTp0aGlzLmNvbmZpZ09iaj90aGlzLnJlYWR5UHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoe3N1Y2Nlc3M6ITB9KTp0aGlzLnJlYWR5UHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoe3N1Y2Nlc3M6ITEscmVhc29uOkJ0KHIsXCJJbnZhbGlkIGRhdGFmaWxlXCIpfSl9Y2F0Y2goZSl7R3QuZXJyb3IoZSksdGhpcy5yZWFkeVByb21pc2U9UHJvbWlzZS5yZXNvbHZlKHtzdWNjZXNzOiExLHJlYXNvbjpCdChlLFwiRXJyb3IgaW4gaW5pdGlhbGl6ZVwiKX0pfX1yZXR1cm4gZS5wcm90b3R5cGUub25EYXRhZmlsZU1hbmFnZXJSZWFkeUZ1bGZpbGw9ZnVuY3Rpb24oKXtpZih0aGlzLmRhdGFmaWxlTWFuYWdlcil7dmFyIGU9dGhpcy5oYW5kbGVOZXdEYXRhZmlsZSh0aGlzLmRhdGFmaWxlTWFuYWdlci5nZXQoKSk7cmV0dXJuIGU/e3N1Y2Nlc3M6ITEscmVhc29uOkJ0KGUpfTp7c3VjY2VzczohMH19cmV0dXJue3N1Y2Nlc3M6ITEscmVhc29uOkJ0KG51bGwsXCJEYXRhZmlsZSBtYW5hZ2VyIGlzIG5vdCBwcm92aWRlZFwiKX19LGUucHJvdG90eXBlLm9uRGF0YWZpbGVNYW5hZ2VyUmVhZHlSZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJue3N1Y2Nlc3M6ITEscmVhc29uOkJ0KGUsXCJGYWlsZWQgdG8gYmVjb21lIHJlYWR5XCIpfX0sZS5wcm90b3R5cGUub25EYXRhZmlsZU1hbmFnZXJVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmRhdGFmaWxlTWFuYWdlciYmdGhpcy5oYW5kbGVOZXdEYXRhZmlsZSh0aGlzLmRhdGFmaWxlTWFuYWdlci5nZXQoKSl9LGUucHJvdG90eXBlLmhhbmRsZU5ld0RhdGFmaWxlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1udCh7ZGF0YWZpbGU6ZSxqc29uU2NoZW1hVmFsaWRhdG9yOnRoaXMuanNvblNjaGVtYVZhbGlkYXRvcixsb2dnZXI6R3R9KSxpPXIuY29uZmlnT2JqLG49ci5lcnJvcjtpZihuKUd0LmVycm9yKG4pO2Vsc2V7dmFyIG89dGhpcy5jb25maWdPYmo/dGhpcy5jb25maWdPYmoucmV2aXNpb246XCJudWxsXCI7aSYmbyE9PWkucmV2aXNpb24mJih0aGlzLmNvbmZpZ09iaj1pLHRoaXMub3B0aW1pemVseUNvbmZpZ09iaj1udWxsLEF0KChmdW5jdGlvbigpe3QudXBkYXRlTGlzdGVuZXJzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKGkpfSkpfSkpKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZmlnT2JqfSxlLnByb3RvdHlwZS5nZXRPcHRpbWl6ZWx5Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMub3B0aW1pemVseUNvbmZpZ09iaiYmdGhpcy5jb25maWdPYmomJih0aGlzLm9wdGltaXplbHlDb25maWdPYmo9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuZXcgd3QoZSx0LHIpfSh0aGlzLmNvbmZpZ09iaixpdCh0aGlzLmNvbmZpZ09iaiksR3QpKSx0aGlzLm9wdGltaXplbHlDb25maWdPYmp9LGUucHJvdG90eXBlLm9uUmVhZHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkeVByb21pc2V9LGUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMudXBkYXRlTGlzdGVuZXJzLnB1c2goZSksZnVuY3Rpb24oKXt2YXIgcj10LnVwZGF0ZUxpc3RlbmVycy5pbmRleE9mKGUpO3I+LTEmJnQudXBkYXRlTGlzdGVuZXJzLnNwbGljZShyLDEpfX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3RoaXMuZGF0YWZpbGVNYW5hZ2VyJiZ0aGlzLmRhdGFmaWxlTWFuYWdlci5zdG9wKCksdGhpcy51cGRhdGVMaXN0ZW5lcnM9W119LGV9KCk7dmFyIGp0PU1hdGgucG93KDIsMzIpLHF0PWZ1bmN0aW9uKGUpe3ZhciB0PVtdLHI9ZS5leHBlcmltZW50SWRNYXBbZS5leHBlcmltZW50SWRdLmdyb3VwSWQ7aWYocil7dmFyIGk9ZS5ncm91cElkTWFwW3JdO2lmKCFpKXRocm93IG5ldyBFcnJvcihOKEguSU5WQUxJRF9HUk9VUF9JRCxcIkJVQ0tFVEVSXCIscikpO2lmKFwicmFuZG9tXCI9PT1pLnBvbGljeSl7dmFyIG49SHQoaSxlLmJ1Y2tldGluZ0lkLGUudXNlcklkLGUubG9nZ2VyKTtpZihudWxsPT09bilyZXR1cm4gZS5sb2dnZXIubG9nKHEuSU5GTyx6LlVTRVJfTk9UX0lOX0FOWV9FWFBFUklNRU5ULFwiQlVDS0VURVJcIixlLnVzZXJJZCxyKSx0LnB1c2goW3ouVVNFUl9OT1RfSU5fQU5ZX0VYUEVSSU1FTlQsXCJCVUNLRVRFUlwiLGUudXNlcklkLHJdKSx7cmVzdWx0Om51bGwscmVhc29uczp0fTtpZihuIT09ZS5leHBlcmltZW50SWQpcmV0dXJuIGUubG9nZ2VyLmxvZyhxLklORk8sei5VU0VSX05PVF9CVUNLRVRFRF9JTlRPX0VYUEVSSU1FTlRfSU5fR1JPVVAsXCJCVUNLRVRFUlwiLGUudXNlcklkLGUuZXhwZXJpbWVudEtleSxyKSx0LnB1c2goW3ouVVNFUl9OT1RfQlVDS0VURURfSU5UT19FWFBFUklNRU5UX0lOX0dST1VQLFwiQlVDS0VURVJcIixlLnVzZXJJZCxlLmV4cGVyaW1lbnRLZXkscl0pLHtyZXN1bHQ6bnVsbCxyZWFzb25zOnR9O2UubG9nZ2VyLmxvZyhxLklORk8sei5VU0VSX0JVQ0tFVEVEX0lOVE9fRVhQRVJJTUVOVF9JTl9HUk9VUCxcIkJVQ0tFVEVSXCIsZS51c2VySWQsZS5leHBlcmltZW50S2V5LHIpLHQucHVzaChbei5VU0VSX0JVQ0tFVEVEX0lOVE9fRVhQRVJJTUVOVF9JTl9HUk9VUCxcIkJVQ0tFVEVSXCIsZS51c2VySWQsZS5leHBlcmltZW50S2V5LHJdKX19dmFyIG89XCJcIi5jb25jYXQoZS5idWNrZXRpbmdJZCkuY29uY2F0KGUuZXhwZXJpbWVudElkKSxzPVl0KG8pO2UubG9nZ2VyLmxvZyhxLkRFQlVHLHouVVNFUl9BU1NJR05FRF9UT19FWFBFUklNRU5UX0JVQ0tFVCxcIkJVQ0tFVEVSXCIscyxlLnVzZXJJZCksdC5wdXNoKFt6LlVTRVJfQVNTSUdORURfVE9fRVhQRVJJTUVOVF9CVUNLRVQsXCJCVUNLRVRFUlwiLHMsZS51c2VySWRdKTt2YXIgYT16dChzLGUudHJhZmZpY0FsbG9jYXRpb25Db25maWcpO3JldHVybiBudWxsPT09YXx8ZS52YXJpYXRpb25JZE1hcFthXT97cmVzdWx0OmEscmVhc29uczp0fTooYSYmKGUubG9nZ2VyLmxvZyhxLldBUk5JTkcsei5JTlZBTElEX1ZBUklBVElPTl9JRCxcIkJVQ0tFVEVSXCIpLHQucHVzaChbei5JTlZBTElEX1ZBUklBVElPTl9JRCxcIkJVQ0tFVEVSXCJdKSkse3Jlc3VsdDpudWxsLHJlYXNvbnM6dH0pfSxIdD1mdW5jdGlvbihlLHQscixpKXt2YXIgbj1cIlwiLmNvbmNhdCh0KS5jb25jYXQoZS5pZCksbz1ZdChuKTtpLmxvZyhxLkRFQlVHLHouVVNFUl9BU1NJR05FRF9UT19FWFBFUklNRU5UX0JVQ0tFVCxcIkJVQ0tFVEVSXCIsbyxyKTt2YXIgcz1lLnRyYWZmaWNBbGxvY2F0aW9uO3JldHVybiB6dChvLHMpfSx6dD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGU8dFtyXS5lbmRPZlJhbmdlKXJldHVybiB0W3JdLmVudGl0eUlkO3JldHVybiBudWxsfSxZdD1mdW5jdGlvbihlKXt0cnl7dmFyIHQ9aS52MyhlLDEpL2p0O3JldHVybiBNYXRoLmZsb29yKDFlNCp0KX1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoTihILklOVkFMSURfQlVDS0VUSU5HX0lELFwiQlVDS0VURVJcIixlLHQubWVzc2FnZSkpfX0sWHQ9TSgpO2Z1bmN0aW9uIEp0KGUpe3JldHVybi9eXFxkKyQvLnRlc3QoZSl9ZnVuY3Rpb24gV3QoZSl7dmFyIHQ9ZS5pbmRleE9mKFwiLVwiKSxyPWUuaW5kZXhPZihcIitcIik7cmV0dXJuISh0PDApJiYocjwwfHx0PHIpfWZ1bmN0aW9uIFp0KGUpe3ZhciB0PWUuaW5kZXhPZihcIi1cIikscj1lLmluZGV4T2YoXCIrXCIpO3JldHVybiEocjwwKSYmKHQ8MHx8cjx0KX1mdW5jdGlvbiBRdChlKXt2YXIgdD1lLHI9XCJcIjtpZihmdW5jdGlvbihlKXtyZXR1cm4vXFxzLy50ZXN0KGUpfShlKSlyZXR1cm4gWHQud2Fybih6LlVOS05PV05fTUFUQ0hfVFlQRSxcIlNFTUFOVElDIFZFUlNJT05cIixlKSxudWxsO2lmKFd0KGUpPyh0PWUuc3Vic3RyaW5nKDAsZS5pbmRleE9mKFwiLVwiKSkscj1lLnN1YnN0cmluZyhlLmluZGV4T2YoXCItXCIpKzEpKTpadChlKSYmKHQ9ZS5zdWJzdHJpbmcoMCxlLmluZGV4T2YoXCIrXCIpKSxyPWUuc3Vic3RyaW5nKGUuaW5kZXhPZihcIitcIikrMSkpLFwic3RyaW5nXCIhPXR5cGVvZiB0fHxcInN0cmluZ1wiIT10eXBlb2YgcilyZXR1cm4gbnVsbDt2YXIgaT10LnNwbGl0KFwiLlwiKS5sZW5ndGgtMTtpZihpPjIpcmV0dXJuIFh0Lndhcm4oei5VTktOT1dOX01BVENIX1RZUEUsXCJTRU1BTlRJQyBWRVJTSU9OXCIsZSksbnVsbDt2YXIgbj10LnNwbGl0KFwiLlwiKTtpZihuLmxlbmd0aCE9aSsxKXJldHVybiBYdC53YXJuKHouVU5LTk9XTl9NQVRDSF9UWVBFLFwiU0VNQU5USUMgVkVSU0lPTlwiLGUpLG51bGw7Zm9yKHZhciBvPTAscz1uO288cy5sZW5ndGg7bysrKXtpZighSnQoc1tvXSkpcmV0dXJuIFh0Lndhcm4oei5VTktOT1dOX01BVENIX1RZUEUsXCJTRU1BTlRJQyBWRVJTSU9OXCIsZSksbnVsbH1yZXR1cm4gciYmbi5wdXNoKHIpLG59dmFyICR0PVwiQ1VTVE9NX0FUVFJJQlVURV9DT05ESVRJT05fRVZBTFVBVE9SXCIsZXI9TSgpLHRyPVtcImV4YWN0XCIsXCJleGlzdHNcIixcImd0XCIsXCJnZVwiLFwibHRcIixcImxlXCIsXCJzdWJzdHJpbmdcIixcInNlbXZlcl9lcVwiLFwic2VtdmVyX2x0XCIsXCJzZW12ZXJfbGVcIixcInNlbXZlcl9ndFwiLFwic2VtdmVyX2dlXCJdLHJyPXt9O2Z1bmN0aW9uIGlyKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxcImJvb2xlYW5cIj09dHlwZW9mIGV8fEEuaXNOdW1iZXIoZSl9ZnVuY3Rpb24gbnIoZSx0KXt2YXIgcj10LmdldEF0dHJpYnV0ZXMoKSxpPWUudmFsdWUsbj10eXBlb2YgaSxvPWUubmFtZSxzPXJbb10sYT10eXBlb2YgcztyZXR1cm4haXIoaSl8fEEuaXNOdW1iZXIoaSkmJiFBLmlzU2FmZUludGVnZXIoaSk/KGVyLndhcm4oei5VTkVYUEVDVEVEX0NPTkRJVElPTl9WQUxVRSwkdCxKU09OLnN0cmluZ2lmeShlKSksbnVsbCk6bnVsbD09PXM/KGVyLmRlYnVnKHouVU5FWFBFQ1RFRF9UWVBFX05VTEwsJHQsSlNPTi5zdHJpbmdpZnkoZSksbyksbnVsbCk6aXIocykmJm49PT1hP0EuaXNOdW1iZXIocykmJiFBLmlzU2FmZUludGVnZXIocyk/KGVyLndhcm4oei5PVVRfT0ZfQk9VTkRTLCR0LEpTT04uc3RyaW5naWZ5KGUpLG8pLG51bGwpOmk9PT1zOihlci53YXJuKHouVU5FWFBFQ1RFRF9UWVBFLCR0LEpTT04uc3RyaW5naWZ5KGUpLGEsbyksbnVsbCl9ZnVuY3Rpb24gb3IoZSx0KXt2YXIgcj10LmdldEF0dHJpYnV0ZXMoKSxpPWUubmFtZSxuPXJbaV0sbz10eXBlb2YgbixzPWUudmFsdWU7cmV0dXJuIG51bGwhPT1zJiZBLmlzU2FmZUludGVnZXIocyk/bnVsbD09PW4/KGVyLmRlYnVnKHouVU5FWFBFQ1RFRF9UWVBFX05VTEwsJHQsSlNPTi5zdHJpbmdpZnkoZSksaSksITEpOkEuaXNOdW1iZXIobik/ISFBLmlzU2FmZUludGVnZXIobil8fChlci53YXJuKHouT1VUX09GX0JPVU5EUywkdCxKU09OLnN0cmluZ2lmeShlKSxpKSwhMSk6KGVyLndhcm4oei5VTkVYUEVDVEVEX1RZUEUsJHQsSlNPTi5zdHJpbmdpZnkoZSksbyxpKSwhMSk6KGVyLndhcm4oei5VTkVYUEVDVEVEX0NPTkRJVElPTl9WQUxVRSwkdCxKU09OLnN0cmluZ2lmeShlKSksITEpfWZ1bmN0aW9uIHNyKGUsdCl7dmFyIHI9dC5nZXRBdHRyaWJ1dGVzKCksaT1lLm5hbWUsbj1yW2ldLG89dHlwZW9mIG4scz1lLnZhbHVlO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBzPyhlci53YXJuKHouVU5FWFBFQ1RFRF9DT05ESVRJT05fVkFMVUUsJHQsSlNPTi5zdHJpbmdpZnkoZSkpLG51bGwpOm51bGw9PT1uPyhlci5kZWJ1Zyh6LlVORVhQRUNURURfVFlQRV9OVUxMLCR0LEpTT04uc3RyaW5naWZ5KGUpLGkpLG51bGwpOlwic3RyaW5nXCIhPXR5cGVvZiBuPyhlci53YXJuKHouVU5FWFBFQ1RFRF9UWVBFLCR0LEpTT04uc3RyaW5naWZ5KGUpLG8saSksbnVsbCk6ZnVuY3Rpb24oZSx0KXt2YXIgcj1RdCh0KSxpPVF0KGUpO2lmKCFyfHwhaSlyZXR1cm4gbnVsbDtmb3IodmFyIG49ci5sZW5ndGgsbz0wO288aS5sZW5ndGg7bysrKXtpZihuPD1vKXJldHVybiBXdChlKXx8WnQoZSk/MTotMTtpZihKdChyW29dKSl7dmFyIHM9cGFyc2VJbnQocltvXSksYT1wYXJzZUludChpW29dKTtpZihzPmEpcmV0dXJuIDE7aWYoczxhKXJldHVybi0xfWVsc2V7aWYocltvXTxpW29dKXJldHVybiBXdChlKSYmIVd0KHQpPzE6LTE7aWYocltvXT5pW29dKXJldHVybiFXdChlKSYmV3QodCk/LTE6MX19cmV0dXJuIFd0KHQpJiYhV3QoZSk/LTE6MH0ocyxuKX1yci5leGFjdD1ucixyci5leGlzdHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmdldEF0dHJpYnV0ZXMoKVtlLm5hbWVdO3JldHVybiBudWxsIT1yfSxyci5ndD1mdW5jdGlvbihlLHQpe3ZhciByPXQuZ2V0QXR0cmlidXRlcygpW2UubmFtZV0saT1lLnZhbHVlO2lmKCFvcihlLHQpfHxudWxsPT09aSlyZXR1cm4gbnVsbDtyZXR1cm4gcj5pfSxyci5nZT1mdW5jdGlvbihlLHQpe3ZhciByPXQuZ2V0QXR0cmlidXRlcygpW2UubmFtZV0saT1lLnZhbHVlO2lmKCFvcihlLHQpfHxudWxsPT09aSlyZXR1cm4gbnVsbDtyZXR1cm4gcj49aX0scnIubHQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmdldEF0dHJpYnV0ZXMoKVtlLm5hbWVdLGk9ZS52YWx1ZTtpZighb3IoZSx0KXx8bnVsbD09PWkpcmV0dXJuIG51bGw7cmV0dXJuIHI8aX0scnIubGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmdldEF0dHJpYnV0ZXMoKVtlLm5hbWVdLGk9ZS52YWx1ZTtpZighb3IoZSx0KXx8bnVsbD09PWkpcmV0dXJuIG51bGw7cmV0dXJuIHI8PWl9LHJyLnN1YnN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciByPXQuZ2V0QXR0cmlidXRlcygpLGk9ZS5uYW1lLG49cltlLm5hbWVdLG89dHlwZW9mIG4scz1lLnZhbHVlO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBzKXJldHVybiBlci53YXJuKHouVU5FWFBFQ1RFRF9DT05ESVRJT05fVkFMVUUsJHQsSlNPTi5zdHJpbmdpZnkoZSkpLG51bGw7aWYobnVsbD09PW4pcmV0dXJuIGVyLmRlYnVnKHouVU5FWFBFQ1RFRF9UWVBFX05VTEwsJHQsSlNPTi5zdHJpbmdpZnkoZSksaSksbnVsbDtpZihcInN0cmluZ1wiIT10eXBlb2YgbilyZXR1cm4gZXIud2Fybih6LlVORVhQRUNURURfVFlQRSwkdCxKU09OLnN0cmluZ2lmeShlKSxvLGkpLG51bGw7cmV0dXJuLTEhPT1uLmluZGV4T2Yocyl9LHJyLnNlbXZlcl9lcT1mdW5jdGlvbihlLHQpe3ZhciByPXNyKGUsdCk7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7cmV0dXJuIDA9PT1yfSxyci5zZW12ZXJfZ3Q9ZnVuY3Rpb24oZSx0KXt2YXIgcj1zcihlLHQpO2lmKG51bGw9PT1yKXJldHVybiBudWxsO3JldHVybiByPjB9LHJyLnNlbXZlcl9nZT1mdW5jdGlvbihlLHQpe3ZhciByPXNyKGUsdCk7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7cmV0dXJuIHI+PTB9LHJyLnNlbXZlcl9sdD1mdW5jdGlvbihlLHQpe3ZhciByPXNyKGUsdCk7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7cmV0dXJuIHI8MH0scnIuc2VtdmVyX2xlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9c3IoZSx0KTtpZihudWxsPT09cilyZXR1cm4gbnVsbDtyZXR1cm4gcjw9MH07dmFyIGFyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGV2YWx1YXRlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5nZXRBdHRyaWJ1dGVzKCksaT1lLm1hdGNoO2lmKHZvaWQgMCE9PWkmJi0xPT09dHIuaW5kZXhPZihpKSlyZXR1cm4gZXIud2Fybih6LlVOS05PV05fTUFUQ0hfVFlQRSwkdCxKU09OLnN0cmluZ2lmeShlKSksbnVsbDt2YXIgbj1lLm5hbWU7cmV0dXJuIHIuaGFzT3duUHJvcGVydHkobil8fFwiZXhpc3RzXCI9PWk/KGkmJnJyW2ldfHxucikoZSx0KTooZXIuZGVidWcoei5NSVNTSU5HX0FUVFJJQlVURV9WQUxVRSwkdCxKU09OLnN0cmluZ2lmeShlKSxuKSxudWxsKX19KSx1cj1NKCksbHI9W1wicXVhbGlmaWVkXCJdLGNyPXt9O2Z1bmN0aW9uIHByKGUsdCl7cmV0dXJuIHQuaXNRdWFsaWZpZWRGb3IoZS52YWx1ZSl9Y3IucXVhbGlmaWVkPXByO3ZhciBkcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxldmFsdWF0ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUubWF0Y2g7cmV0dXJuIHZvaWQgMCE9PXImJi0xPT09bHIuaW5kZXhPZihyKT8odXIud2Fybih6LlVOS05PV05fTUFUQ0hfVFlQRSxcIk9EUF9TRUdNRU5UX0NPTkRJVElPTl9FVkFMVUFUT1JcIixKU09OLnN0cmluZ2lmeShlKSksbnVsbCk6KHImJmNyW3JdfHxwcikoZSx0KX19KSxmcj1NKCksZ3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZVRvRXZhbHVhdG9yTWFwPUEuYXNzaWduKHt9LGUse2N1c3RvbV9hdHRyaWJ1dGU6YXIsdGhpcmRfcGFydHlfZGltZW5zaW9uOmRyfSl9cmV0dXJuIGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10aGlzO2lmKCFlfHwwPT09ZS5sZW5ndGgpcmV0dXJuITA7cmV0dXJuISFrdChlLChmdW5jdGlvbihlKXt2YXIgbj10W2VdO2lmKG4pe2ZyLmxvZyhxLkRFQlVHLHouRVZBTFVBVElOR19BVURJRU5DRSxcIkFVRElFTkNFX0VWQUxVQVRPUlwiLGUsSlNPTi5zdHJpbmdpZnkobi5jb25kaXRpb25zKSk7dmFyIG89a3Qobi5jb25kaXRpb25zLGkuZXZhbHVhdGVDb25kaXRpb25XaXRoVXNlckF0dHJpYnV0ZXMuYmluZChpLHIpKSxzPW51bGw9PT1vP1wiVU5LTk9XTlwiOm8udG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO3JldHVybiBmci5sb2cocS5ERUJVRyx6LkFVRElFTkNFX0VWQUxVQVRJT05fUkVTVUxULFwiQVVESUVOQ0VfRVZBTFVBVE9SXCIsZSxzKSxvfXJldHVybiBudWxsfSkpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZUNvbmRpdGlvbldpdGhVc2VyQXR0cmlidXRlcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMudHlwZVRvRXZhbHVhdG9yTWFwW3QudHlwZV07aWYoIXIpcmV0dXJuIGZyLmxvZyhxLldBUk5JTkcsei5VTktOT1dOX0NPTkRJVElPTl9UWVBFLFwiQVVESUVOQ0VfRVZBTFVBVE9SXCIsSlNPTi5zdHJpbmdpZnkodCkpLG51bGw7dHJ5e3JldHVybiByLmV2YWx1YXRlKHQsZSl9Y2F0Y2goZSl7ZnIubG9nKHEuRVJST1IsSC5DT05ESVRJT05fRVZBTFVBVE9SX0VSUk9SLFwiQVVESUVOQ0VfRVZBTFVBVE9SXCIsdC50eXBlLGUubWVzc2FnZSl9cmV0dXJuIG51bGx9LGV9KCk7ZnVuY3Rpb24gRXIoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJlwiXCIhPT1lfXZhciBocj1cIkRFQ0lTSU9OX1NFUlZJQ0VcIixJcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ7dGhpcy5hdWRpZW5jZUV2YWx1YXRvcj0odD1lLlVOU1RBQkxFX2NvbmRpdGlvbkV2YWx1YXRvcnMsbmV3IGdyKHQpKSx0aGlzLmZvcmNlZFZhcmlhdGlvbk1hcD17fSx0aGlzLmxvZ2dlcj1lLmxvZ2dlcix0aGlzLnVzZXJQcm9maWxlU2VydmljZT1lLnVzZXJQcm9maWxlU2VydmljZXx8bnVsbH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFyaWF0aW9uPWZ1bmN0aW9uKGUsdCxyLGkpe3ZvaWQgMD09PWkmJihpPXt9KTt2YXIgbj1yLmdldFVzZXJJZCgpLG89ci5nZXRBdHRyaWJ1dGVzKCkscz10aGlzLmdldEJ1Y2tldGluZ0lkKG4sbyksYT1bXSx1PXQua2V5O2lmKCF0aGlzLmNoZWNrSWZFeHBlcmltZW50SXNBY3RpdmUoZSx1KSlyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuSU5GTyx6LkVYUEVSSU1FTlRfTk9UX1JVTk5JTkcsaHIsdSksYS5wdXNoKFt6LkVYUEVSSU1FTlRfTk9UX1JVTk5JTkcsaHIsdV0pLHtyZXN1bHQ6bnVsbCxyZWFzb25zOmF9O3ZhciBsPXRoaXMuZ2V0Rm9yY2VkVmFyaWF0aW9uKGUsdSxuKTthLnB1c2guYXBwbHkoYSxsLnJlYXNvbnMpO3ZhciBjPWwucmVzdWx0O2lmKGMpcmV0dXJue3Jlc3VsdDpjLHJlYXNvbnM6YX07dmFyIHA9dGhpcy5nZXRXaGl0ZWxpc3RlZFZhcmlhdGlvbih0LG4pO2EucHVzaC5hcHBseShhLHAucmVhc29ucyk7dmFyIGQ9cC5yZXN1bHQ7aWYoZClyZXR1cm57cmVzdWx0OmQua2V5LHJlYXNvbnM6YX07dmFyIGY9aVtleHBvcnRzLk9wdGltaXplbHlEZWNpZGVPcHRpb24uSUdOT1JFX1VTRVJfUFJPRklMRV9TRVJWSUNFXSxnPXRoaXMucmVzb2x2ZUV4cGVyaW1lbnRCdWNrZXRNYXAobixvKTtpZighZiYmKGQ9dGhpcy5nZXRTdG9yZWRWYXJpYXRpb24oZSx0LG4sZykpKXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5JTkZPLHouUkVUVVJOSU5HX1NUT1JFRF9WQVJJQVRJT04saHIsZC5rZXksdSxuKSxhLnB1c2goW3ouUkVUVVJOSU5HX1NUT1JFRF9WQVJJQVRJT04saHIsZC5rZXksdSxuXSkse3Jlc3VsdDpkLmtleSxyZWFzb25zOmF9O3ZhciBFPXRoaXMuY2hlY2tJZlVzZXJJc0luQXVkaWVuY2UoZSx0LFcuRVhQRVJJTUVOVCxyLFwiXCIpO2lmKGEucHVzaC5hcHBseShhLEUucmVhc29ucyksIUUucmVzdWx0KXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5JTkZPLHouVVNFUl9OT1RfSU5fRVhQRVJJTUVOVCxocixuLHUpLGEucHVzaChbei5VU0VSX05PVF9JTl9FWFBFUklNRU5ULGhyLG4sdV0pLHtyZXN1bHQ6bnVsbCxyZWFzb25zOmF9O3ZhciBoPXRoaXMuYnVpbGRCdWNrZXRlclBhcmFtcyhlLHQscyxuKSxJPXF0KGgpO2EucHVzaC5hcHBseShhLEkucmVhc29ucyk7dmFyIF89SS5yZXN1bHQ7cmV0dXJuIF8mJihkPWUudmFyaWF0aW9uSWRNYXBbX10pLGQ/KHRoaXMubG9nZ2VyLmxvZyhxLklORk8sei5VU0VSX0hBU19WQVJJQVRJT04saHIsbixkLmtleSx1KSxhLnB1c2goW3ouVVNFUl9IQVNfVkFSSUFUSU9OLGhyLG4sZC5rZXksdV0pLGZ8fHRoaXMuc2F2ZVVzZXJQcm9maWxlKHQsZCxuLGcpLHtyZXN1bHQ6ZC5rZXkscmVhc29uczphfSk6KHRoaXMubG9nZ2VyLmxvZyhxLkRFQlVHLHouVVNFUl9IQVNfTk9fVkFSSUFUSU9OLGhyLG4sdSksYS5wdXNoKFt6LlVTRVJfSEFTX05PX1ZBUklBVElPTixocixuLHVdKSx7cmVzdWx0Om51bGwscmVhc29uczphfSl9LGUucHJvdG90eXBlLnJlc29sdmVFeHBlcmltZW50QnVja2V0TWFwPWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgcj10aGlzLmdldFVzZXJQcm9maWxlKGUpfHx7fSxpPXRbWS5TVElDS1lfQlVDS0VUSU5HX0tFWV07cmV0dXJuIEEuYXNzaWduKHt9LHIuZXhwZXJpbWVudF9idWNrZXRfbWFwLGkpfSxlLnByb3RvdHlwZS5jaGVja0lmRXhwZXJpbWVudElzQWN0aXZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJSdW5uaW5nXCI9PT1XZShlLHQpfShlLHQpfSxlLnByb3RvdHlwZS5nZXRXaGl0ZWxpc3RlZFZhcmlhdGlvbj1mdW5jdGlvbihlLHQpe3ZhciByPVtdO2lmKGUuZm9yY2VkVmFyaWF0aW9ucyYmZS5mb3JjZWRWYXJpYXRpb25zLmhhc093blByb3BlcnR5KHQpKXt2YXIgaT1lLmZvcmNlZFZhcmlhdGlvbnNbdF07cmV0dXJuIGUudmFyaWF0aW9uS2V5TWFwLmhhc093blByb3BlcnR5KGkpPyh0aGlzLmxvZ2dlci5sb2cocS5JTkZPLHouVVNFUl9GT1JDRURfSU5fVkFSSUFUSU9OLGhyLHQsaSksci5wdXNoKFt6LlVTRVJfRk9SQ0VEX0lOX1ZBUklBVElPTixocix0LGldKSx7cmVzdWx0OmUudmFyaWF0aW9uS2V5TWFwW2ldLHJlYXNvbnM6cn0pOih0aGlzLmxvZ2dlci5sb2cocS5FUlJPUix6LkZPUkNFRF9CVUNLRVRJTkdfRkFJTEVELGhyLGksdCksci5wdXNoKFt6LkZPUkNFRF9CVUNLRVRJTkdfRkFJTEVELGhyLGksdF0pLHtyZXN1bHQ6bnVsbCxyZWFzb25zOnJ9KX1yZXR1cm57cmVzdWx0Om51bGwscmVhc29uczpyfX0sZS5wcm90b3R5cGUuY2hlY2tJZlVzZXJJc0luQXVkaWVuY2U9ZnVuY3Rpb24oZSx0LHIsaSxuKXt2YXIgbz1bXSxzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5leHBlcmltZW50SWRNYXBbdF07aWYoIXIpdGhyb3cgbmV3IEVycm9yKE4oSC5JTlZBTElEX0VYUEVSSU1FTlRfSUQsamUsdCkpO3JldHVybiByLmF1ZGllbmNlQ29uZGl0aW9uc3x8ci5hdWRpZW5jZUlkc30oZSx0LmlkKSxhPWUuYXVkaWVuY2VzQnlJZDt0aGlzLmxvZ2dlci5sb2cocS5ERUJVRyx6LkVWQUxVQVRJTkdfQVVESUVOQ0VTX0NPTUJJTkVELGhyLHIsbnx8dC5rZXksSlNPTi5zdHJpbmdpZnkocykpLG8ucHVzaChbei5FVkFMVUFUSU5HX0FVRElFTkNFU19DT01CSU5FRCxocixyLG58fHQua2V5LEpTT04uc3RyaW5naWZ5KHMpXSk7dmFyIHU9dGhpcy5hdWRpZW5jZUV2YWx1YXRvci5ldmFsdWF0ZShzLGEsaSk7cmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLklORk8sei5BVURJRU5DRV9FVkFMVUFUSU9OX1JFU1VMVF9DT01CSU5FRCxocixyLG58fHQua2V5LHUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpKSxvLnB1c2goW3ouQVVESUVOQ0VfRVZBTFVBVElPTl9SRVNVTFRfQ09NQklORUQsaHIscixufHx0LmtleSx1LnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKV0pLHtyZXN1bHQ6dSxyZWFzb25zOm99fSxlLnByb3RvdHlwZS5idWlsZEJ1Y2tldGVyUGFyYW1zPWZ1bmN0aW9uKGUsdCxyLGkpe3JldHVybntidWNrZXRpbmdJZDpyLGV4cGVyaW1lbnRJZDp0LmlkLGV4cGVyaW1lbnRLZXk6dC5rZXksZXhwZXJpbWVudElkTWFwOmUuZXhwZXJpbWVudElkTWFwLGV4cGVyaW1lbnRLZXlNYXA6ZS5leHBlcmltZW50S2V5TWFwLGdyb3VwSWRNYXA6ZS5ncm91cElkTWFwLGxvZ2dlcjp0aGlzLmxvZ2dlcix0cmFmZmljQWxsb2NhdGlvbkNvbmZpZzokZShlLHQuaWQpLHVzZXJJZDppLHZhcmlhdGlvbklkTWFwOmUudmFyaWF0aW9uSWRNYXB9fSxlLnByb3RvdHlwZS5nZXRTdG9yZWRWYXJpYXRpb249ZnVuY3Rpb24oZSx0LHIsaSl7aWYoaS5oYXNPd25Qcm9wZXJ0eSh0LmlkKSl7dmFyIG49aVt0LmlkXSxvPW4udmFyaWF0aW9uX2lkO2lmKGUudmFyaWF0aW9uSWRNYXAuaGFzT3duUHJvcGVydHkobykpcmV0dXJuIGUudmFyaWF0aW9uSWRNYXBbbi52YXJpYXRpb25faWRdO3RoaXMubG9nZ2VyLmxvZyhxLklORk8sei5TQVZFRF9WQVJJQVRJT05fTk9UX0ZPVU5ELGhyLHIsbyx0LmtleSl9cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmdldFVzZXJQcm9maWxlPWZ1bmN0aW9uKGUpe3ZhciB0PXt1c2VyX2lkOmUsZXhwZXJpbWVudF9idWNrZXRfbWFwOnt9fTtpZighdGhpcy51c2VyUHJvZmlsZVNlcnZpY2UpcmV0dXJuIHQ7dHJ5e3JldHVybiB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5sb29rdXAoZSl9Y2F0Y2godCl7dGhpcy5sb2dnZXIubG9nKHEuRVJST1IsSC5VU0VSX1BST0ZJTEVfTE9PS1VQX0VSUk9SLGhyLGUsdC5tZXNzYWdlKX1yZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2F2ZVVzZXJQcm9maWxlPWZ1bmN0aW9uKGUsdCxyLGkpe2lmKHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlKXRyeXtpW2UuaWRdPXt2YXJpYXRpb25faWQ6dC5pZH0sdGhpcy51c2VyUHJvZmlsZVNlcnZpY2Uuc2F2ZSh7dXNlcl9pZDpyLGV4cGVyaW1lbnRfYnVja2V0X21hcDppfSksdGhpcy5sb2dnZXIubG9nKHEuSU5GTyx6LlNBVkVEX1ZBUklBVElPTixocix0LmtleSxlLmtleSxyKX1jYXRjaChlKXt0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixILlVTRVJfUFJPRklMRV9TQVZFX0VSUk9SLGhyLHIsZS5tZXNzYWdlKX19LGUucHJvdG90eXBlLmdldFZhcmlhdGlvbkZvckZlYXR1cmU9ZnVuY3Rpb24oZSx0LHIsaSl7dm9pZCAwPT09aSYmKGk9e30pO3ZhciBuPVtdLG89dGhpcy5nZXRWYXJpYXRpb25Gb3JGZWF0dXJlRXhwZXJpbWVudChlLHQscixpKTtuLnB1c2guYXBwbHkobixvLnJlYXNvbnMpO3ZhciBzPW8ucmVzdWx0O2lmKG51bGwhPT1zLnZhcmlhdGlvbilyZXR1cm57cmVzdWx0OnMscmVhc29uczpufTt2YXIgYT10aGlzLmdldFZhcmlhdGlvbkZvclJvbGxvdXQoZSx0LHIpO24ucHVzaC5hcHBseShuLGEucmVhc29ucyk7dmFyIHU9YS5yZXN1bHQsbD1yLmdldFVzZXJJZCgpO3JldHVybiB1LnZhcmlhdGlvbj8odGhpcy5sb2dnZXIubG9nKHEuREVCVUcsei5VU0VSX0lOX1JPTExPVVQsaHIsbCx0LmtleSksbi5wdXNoKFt6LlVTRVJfSU5fUk9MTE9VVCxocixsLHQua2V5XSkse3Jlc3VsdDp1LHJlYXNvbnM6bn0pOih0aGlzLmxvZ2dlci5sb2cocS5ERUJVRyx6LlVTRVJfTk9UX0lOX1JPTExPVVQsaHIsbCx0LmtleSksbi5wdXNoKFt6LlVTRVJfTk9UX0lOX1JPTExPVVQsaHIsbCx0LmtleV0pLHtyZXN1bHQ6dSxyZWFzb25zOm59KX0sZS5wcm90b3R5cGUuZ2V0VmFyaWF0aW9uRm9yRmVhdHVyZUV4cGVyaW1lbnQ9ZnVuY3Rpb24oZSx0LHIsaSl7dm9pZCAwPT09aSYmKGk9e30pO3ZhciBuLG8scz1bXSxhPW51bGw7aWYodC5leHBlcmltZW50SWRzLmxlbmd0aD4wKWZvcihvPTA7bzx0LmV4cGVyaW1lbnRJZHMubGVuZ3RoO28rKyl7dmFyIHU9ZXQoZSx0LmV4cGVyaW1lbnRJZHNbb10sdGhpcy5sb2dnZXIpO2lmKHUmJihuPXRoaXMuZ2V0VmFyaWF0aW9uRnJvbUV4cGVyaW1lbnRSdWxlKGUsdC5rZXksdSxyLGkpLHMucHVzaC5hcHBseShzLG4ucmVhc29ucyksYT1uLnJlc3VsdCkpe3ZhciBsPW51bGw7cmV0dXJuKGw9dS52YXJpYXRpb25LZXlNYXBbYV0pfHwobD10dChlLHQua2V5LGEpKSx7cmVzdWx0OntleHBlcmltZW50OnUsdmFyaWF0aW9uOmwsZGVjaXNpb25Tb3VyY2U6Si5GRUFUVVJFX1RFU1R9LHJlYXNvbnM6c319fWVsc2UgdGhpcy5sb2dnZXIubG9nKHEuREVCVUcsei5GRUFUVVJFX0hBU19OT19FWFBFUklNRU5UUyxocix0LmtleSkscy5wdXNoKFt6LkZFQVRVUkVfSEFTX05PX0VYUEVSSU1FTlRTLGhyLHQua2V5XSk7cmV0dXJue3Jlc3VsdDp7ZXhwZXJpbWVudDpudWxsLHZhcmlhdGlvbjpudWxsLGRlY2lzaW9uU291cmNlOkouRkVBVFVSRV9URVNUfSxyZWFzb25zOnN9fSxlLnByb3RvdHlwZS5nZXRWYXJpYXRpb25Gb3JSb2xsb3V0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1bXTtpZighdC5yb2xsb3V0SWQpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkRFQlVHLHouTk9fUk9MTE9VVF9FWElTVFMsaHIsdC5rZXkpLGkucHVzaChbei5OT19ST0xMT1VUX0VYSVNUUyxocix0LmtleV0pLHtyZXN1bHQ6e2V4cGVyaW1lbnQ6bnVsbCx2YXJpYXRpb246bnVsbCxkZWNpc2lvblNvdXJjZTpKLlJPTExPVVR9LHJlYXNvbnM6aX07dmFyIG49ZS5yb2xsb3V0SWRNYXBbdC5yb2xsb3V0SWRdO2lmKCFuKXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixILklOVkFMSURfUk9MTE9VVF9JRCxocix0LnJvbGxvdXRJZCx0LmtleSksaS5wdXNoKFtILklOVkFMSURfUk9MTE9VVF9JRCxocix0LnJvbGxvdXRJZCx0LmtleV0pLHtyZXN1bHQ6e2V4cGVyaW1lbnQ6bnVsbCx2YXJpYXRpb246bnVsbCxkZWNpc2lvblNvdXJjZTpKLlJPTExPVVR9LHJlYXNvbnM6aX07dmFyIG8scyxhLHU9bi5leHBlcmltZW50cztpZigwPT09dS5sZW5ndGgpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLHouUk9MTE9VVF9IQVNfTk9fRVhQRVJJTUVOVFMsaHIsdC5yb2xsb3V0SWQpLGkucHVzaChbei5ST0xMT1VUX0hBU19OT19FWFBFUklNRU5UUyxocix0LnJvbGxvdXRJZF0pLHtyZXN1bHQ6e2V4cGVyaW1lbnQ6bnVsbCx2YXJpYXRpb246bnVsbCxkZWNpc2lvblNvdXJjZTpKLlJPTExPVVR9LHJlYXNvbnM6aX07Zm9yKHZhciBsPTA7bDx1Lmxlbmd0aDspe2lmKG89dGhpcy5nZXRWYXJpYXRpb25Gcm9tRGVsaXZlcnlSdWxlKGUsdC5rZXksdSxsLHIpLGkucHVzaC5hcHBseShpLG8ucmVhc29ucyksYT1vLnJlc3VsdCxzPW8uc2tpcFRvRXZlcnlvbmVFbHNlLGEpcmV0dXJue3Jlc3VsdDp7ZXhwZXJpbWVudDplLmV4cGVyaW1lbnRJZE1hcFt1W2xdLmlkXSx2YXJpYXRpb246YSxkZWNpc2lvblNvdXJjZTpKLlJPTExPVVR9LHJlYXNvbnM6aX07bD1zP3UubGVuZ3RoLTE6bCsxfXJldHVybntyZXN1bHQ6e2V4cGVyaW1lbnQ6bnVsbCx2YXJpYXRpb246bnVsbCxkZWNpc2lvblNvdXJjZTpKLlJPTExPVVR9LHJlYXNvbnM6aX19LGUucHJvdG90eXBlLmdldEJ1Y2tldGluZ0lkPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZTtyZXR1cm4gbnVsbCE9dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQuaGFzT3duUHJvcGVydHkoWS5CVUNLRVRJTkdfSUQpJiYoXCJzdHJpbmdcIj09dHlwZW9mIHRbWS5CVUNLRVRJTkdfSURdPyhyPVN0cmluZyh0W1kuQlVDS0VUSU5HX0lEXSksdGhpcy5sb2dnZXIubG9nKHEuREVCVUcsei5WQUxJRF9CVUNLRVRJTkdfSUQsaHIscikpOnRoaXMubG9nZ2VyLmxvZyhxLldBUk5JTkcsei5CVUNLRVRJTkdfSURfTk9UX1NUUklORyxocikpLHJ9LGUucHJvdG90eXBlLmZpbmRWYWxpZGF0ZWRGb3JjZWREZWNpc2lvbj1mdW5jdGlvbihlLHQscixpKXt2YXIgbixvPVtdLHM9dC5nZXRGb3JjZWREZWNpc2lvbih7ZmxhZ0tleTpyLHJ1bGVLZXk6aX0pLGE9bnVsbCx1PXQuZ2V0VXNlcklkKCk7cmV0dXJuIGUmJnMmJihuPXMudmFyaWF0aW9uS2V5LChhPXR0KGUscixuKSk/aT8odGhpcy5sb2dnZXIubG9nKHEuSU5GTyx6LlVTRVJfSEFTX0ZPUkNFRF9ERUNJU0lPTl9XSVRIX1JVTEVfU1BFQ0lGSUVELG4scixpLHUpLG8ucHVzaChbei5VU0VSX0hBU19GT1JDRURfREVDSVNJT05fV0lUSF9SVUxFX1NQRUNJRklFRCxuLHIsaSx1XSkpOih0aGlzLmxvZ2dlci5sb2cocS5JTkZPLHouVVNFUl9IQVNfRk9SQ0VEX0RFQ0lTSU9OX1dJVEhfTk9fUlVMRV9TUEVDSUZJRUQsbixyLHUpLG8ucHVzaChbei5VU0VSX0hBU19GT1JDRURfREVDSVNJT05fV0lUSF9OT19SVUxFX1NQRUNJRklFRCxuLHIsdV0pKTppPyh0aGlzLmxvZ2dlci5sb2cocS5JTkZPLHouVVNFUl9IQVNfRk9SQ0VEX0RFQ0lTSU9OX1dJVEhfUlVMRV9TUEVDSUZJRURfQlVUX0lOVkFMSUQscixpLHUpLG8ucHVzaChbei5VU0VSX0hBU19GT1JDRURfREVDSVNJT05fV0lUSF9SVUxFX1NQRUNJRklFRF9CVVRfSU5WQUxJRCxyLGksdV0pKToodGhpcy5sb2dnZXIubG9nKHEuSU5GTyx6LlVTRVJfSEFTX0ZPUkNFRF9ERUNJU0lPTl9XSVRIX05PX1JVTEVfU1BFQ0lGSUVEX0JVVF9JTlZBTElELHIsdSksby5wdXNoKFt6LlVTRVJfSEFTX0ZPUkNFRF9ERUNJU0lPTl9XSVRIX05PX1JVTEVfU1BFQ0lGSUVEX0JVVF9JTlZBTElELHIsdV0pKSkse3Jlc3VsdDphLHJlYXNvbnM6b319LGUucHJvdG90eXBlLnJlbW92ZUZvcmNlZFZhcmlhdGlvbj1mdW5jdGlvbihlLHQscil7aWYoIWUpdGhyb3cgbmV3IEVycm9yKE4oSC5JTlZBTElEX1VTRVJfSUQsaHIpKTtpZighdGhpcy5mb3JjZWRWYXJpYXRpb25NYXAuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKE4oSC5VU0VSX05PVF9JTl9GT1JDRURfVkFSSUFUSU9OLGhyLGUpKTtkZWxldGUgdGhpcy5mb3JjZWRWYXJpYXRpb25NYXBbZV1bdF0sdGhpcy5sb2dnZXIubG9nKHEuREVCVUcsei5WQVJJQVRJT05fUkVNT1ZFRF9GT1JfVVNFUixocixyLGUpfSxlLnByb3RvdHlwZS5zZXRJbkZvcmNlZFZhcmlhdGlvbk1hcD1mdW5jdGlvbihlLHQscil7dGhpcy5mb3JjZWRWYXJpYXRpb25NYXAuaGFzT3duUHJvcGVydHkoZSl8fCh0aGlzLmZvcmNlZFZhcmlhdGlvbk1hcFtlXT17fSksdGhpcy5mb3JjZWRWYXJpYXRpb25NYXBbZV1bdF09cix0aGlzLmxvZ2dlci5sb2cocS5ERUJVRyx6LlVTRVJfTUFQUEVEX1RPX0ZPUkNFRF9WQVJJQVRJT04saHIscix0LGUpfSxlLnByb3RvdHlwZS5nZXRGb3JjZWRWYXJpYXRpb249ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG49W10sbz10aGlzLmZvcmNlZFZhcmlhdGlvbk1hcFtyXTtpZighbylyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuREVCVUcsei5VU0VSX0hBU19OT19GT1JDRURfVkFSSUFUSU9OLGhyLHIpLHtyZXN1bHQ6bnVsbCxyZWFzb25zOm59O3RyeXt2YXIgcz1RZShlLHQpO2lmKCFzLmhhc093blByb3BlcnR5KFwiaWRcIikpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLEguSU1QUk9QRVJMWV9GT1JNQVRURURfRVhQRVJJTUVOVCxocix0KSxuLnB1c2goW0guSU1QUk9QRVJMWV9GT1JNQVRURURfRVhQRVJJTUVOVCxocix0XSkse3Jlc3VsdDpudWxsLHJlYXNvbnM6bn07aT1zLmlkfWNhdGNoKGUpe3JldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixlLm1lc3NhZ2UpLG4ucHVzaChlLm1lc3NhZ2UpLHtyZXN1bHQ6bnVsbCxyZWFzb25zOm59fXZhciBhPW9baV07aWYoIWEpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkRFQlVHLHouVVNFUl9IQVNfTk9fRk9SQ0VEX1ZBUklBVElPTl9GT1JfRVhQRVJJTUVOVCxocix0LHIpLHtyZXN1bHQ6bnVsbCxyZWFzb25zOm59O3ZhciB1PVplKGUsYSk7cmV0dXJuIHU/KHRoaXMubG9nZ2VyLmxvZyhxLkRFQlVHLHouVVNFUl9IQVNfRk9SQ0VEX1ZBUklBVElPTixocix1LHQsciksbi5wdXNoKFt6LlVTRVJfSEFTX0ZPUkNFRF9WQVJJQVRJT04saHIsdSx0LHJdKSk6dGhpcy5sb2dnZXIubG9nKHEuREVCVUcsei5VU0VSX0hBU19OT19GT1JDRURfVkFSSUFUSU9OX0ZPUl9FWFBFUklNRU5ULGhyLHQscikse3Jlc3VsdDp1LHJlYXNvbnM6bn19LGUucHJvdG90eXBlLnNldEZvcmNlZFZhcmlhdGlvbj1mdW5jdGlvbihlLHQscixpKXtpZihudWxsIT1pJiYhRXIoaSkpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLEguSU5WQUxJRF9WQVJJQVRJT05fS0VZLGhyKSwhMTt2YXIgbjt0cnl7dmFyIG89UWUoZSx0KTtpZighby5oYXNPd25Qcm9wZXJ0eShcImlkXCIpKXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixILklNUFJPUEVSTFlfRk9STUFUVEVEX0VYUEVSSU1FTlQsaHIsdCksITE7bj1vLmlkfWNhdGNoKGUpe3JldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixlLm1lc3NhZ2UpLCExfWlmKG51bGw9PWkpdHJ5e3JldHVybiB0aGlzLnJlbW92ZUZvcmNlZFZhcmlhdGlvbihyLG4sdCksITB9Y2F0Y2goZSl7cmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLGUubWVzc2FnZSksITF9dmFyIHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPWUuZXhwZXJpbWVudEtleU1hcFt0XTtyZXR1cm4gaS52YXJpYXRpb25LZXlNYXAuaGFzT3duUHJvcGVydHkocik/aS52YXJpYXRpb25LZXlNYXBbcl0uaWQ6bnVsbH0oZSx0LGkpO2lmKCFzKXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixILk5PX1ZBUklBVElPTl9GT1JfRVhQRVJJTUVOVF9LRVksaHIsaSx0KSwhMTt0cnl7cmV0dXJuIHRoaXMuc2V0SW5Gb3JjZWRWYXJpYXRpb25NYXAocixuLHMpLCEwfWNhdGNoKGUpe3JldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixlLm1lc3NhZ2UpLCExfX0sZS5wcm90b3R5cGUuZ2V0VmFyaWF0aW9uRnJvbUV4cGVyaW1lbnRSdWxlPWZ1bmN0aW9uKGUsdCxyLGksbil7dm9pZCAwPT09biYmKG49e30pO3ZhciBvPVtdLHM9dGhpcy5maW5kVmFsaWRhdGVkRm9yY2VkRGVjaXNpb24oZSxpLHQsci5rZXkpO28ucHVzaC5hcHBseShvLHMucmVhc29ucyk7dmFyIGE9cy5yZXN1bHQ7aWYoYSlyZXR1cm57cmVzdWx0OmEua2V5LHJlYXNvbnM6b307dmFyIHU9dGhpcy5nZXRWYXJpYXRpb24oZSxyLGksbik7cmV0dXJuIG8ucHVzaC5hcHBseShvLHUucmVhc29ucykse3Jlc3VsdDp1LnJlc3VsdCxyZWFzb25zOm99fSxlLnByb3RvdHlwZS5nZXRWYXJpYXRpb25Gcm9tRGVsaXZlcnlSdWxlPWZ1bmN0aW9uKGUsdCxyLGksbil7dmFyIG89W10scz0hMSxhPXJbaV0sdT10aGlzLmZpbmRWYWxpZGF0ZWRGb3JjZWREZWNpc2lvbihlLG4sdCxhLmtleSk7by5wdXNoLmFwcGx5KG8sdS5yZWFzb25zKTt2YXIgbD11LnJlc3VsdDtpZihsKXJldHVybntyZXN1bHQ6bCxyZWFzb25zOm8sc2tpcFRvRXZlcnlvbmVFbHNlOnN9O3ZhciBjLHAsZCxmLGcsRT1uLmdldFVzZXJJZCgpLGg9bi5nZXRBdHRyaWJ1dGVzKCksST10aGlzLmdldEJ1Y2tldGluZ0lkKEUsaCksXz1pPT09ci5sZW5ndGgtMSx2PV8/XCJFdmVyeW9uZSBFbHNlXCI6aSsxLHk9bnVsbCxPPXRoaXMuY2hlY2tJZlVzZXJJc0luQXVkaWVuY2UoZSxhLFcuUlVMRSxuLHYpO3JldHVybiBvLnB1c2guYXBwbHkobyxPLnJlYXNvbnMpLE8ucmVzdWx0Pyh0aGlzLmxvZ2dlci5sb2cocS5ERUJVRyx6LlVTRVJfTUVFVFNfQ09ORElUSU9OU19GT1JfVEFSR0VUSU5HX1JVTEUsaHIsRSx2KSxvLnB1c2goW3ouVVNFUl9NRUVUU19DT05ESVRJT05TX0ZPUl9UQVJHRVRJTkdfUlVMRSxocixFLHZdKSxwPXRoaXMuYnVpbGRCdWNrZXRlclBhcmFtcyhlLGEsSSxFKSxkPXF0KHApLG8ucHVzaC5hcHBseShvLGQucmVhc29ucyksKGM9ZC5yZXN1bHQpJiYoZz1jLHk9KGY9ZSkudmFyaWF0aW9uSWRNYXAuaGFzT3duUHJvcGVydHkoZyk/Zi52YXJpYXRpb25JZE1hcFtnXTpudWxsKSx5Pyh0aGlzLmxvZ2dlci5sb2cocS5ERUJVRyx6LlVTRVJfQlVDS0VURURfSU5UT19UQVJHRVRJTkdfUlVMRSxocixFLHYpLG8ucHVzaChbei5VU0VSX0JVQ0tFVEVEX0lOVE9fVEFSR0VUSU5HX1JVTEUsaHIsRSx2XSkpOl98fCh0aGlzLmxvZ2dlci5sb2cocS5ERUJVRyx6LlVTRVJfTk9UX0JVQ0tFVEVEX0lOVE9fVEFSR0VUSU5HX1JVTEUsaHIsRSx2KSxvLnB1c2goW3ouVVNFUl9OT1RfQlVDS0VURURfSU5UT19UQVJHRVRJTkdfUlVMRSxocixFLHZdKSxzPSEwKSk6KHRoaXMubG9nZ2VyLmxvZyhxLkRFQlVHLHouVVNFUl9ET0VTTlRfTUVFVF9DT05ESVRJT05TX0ZPUl9UQVJHRVRJTkdfUlVMRSxocixFLHYpLG8ucHVzaChbei5VU0VSX0RPRVNOVF9NRUVUX0NPTkRJVElPTlNfRk9SX1RBUkdFVElOR19SVUxFLGhyLEUsdl0pKSx7cmVzdWx0OnkscmVhc29uczpvLHNraXBUb0V2ZXJ5b25lRWxzZTpzfX0sZX0oKTtmdW5jdGlvbiBfcihlLHQpe3ZhciByPWUucmV2ZW51ZTtpZihudWxsPT1yKXJldHVybiBudWxsO3ZhciBpPVwic3RyaW5nXCI9PXR5cGVvZiByP3BhcnNlSW50KHIpOk1hdGgudHJ1bmMocik7cmV0dXJuIGlzRmluaXRlKGkpPyh0LmxvZyhxLklORk8sei5QQVJTRURfUkVWRU5VRV9WQUxVRSxcIkVWRU5UX1RBR19VVElMU1wiLGkpLGkpOih0LmxvZyhxLklORk8sei5GQUlMRURfVE9fUEFSU0VfUkVWRU5VRSxcIkVWRU5UX1RBR19VVElMU1wiLHIpLG51bGwpfWZ1bmN0aW9uIHZyKGUsdCl7dmFyIHI9ZS52YWx1ZTtpZihudWxsPT1yKXJldHVybiBudWxsO3ZhciBpPVwic3RyaW5nXCI9PXR5cGVvZiByP3BhcnNlRmxvYXQocik6cjtyZXR1cm4gaXNGaW5pdGUoaSk/KHQubG9nKHEuSU5GTyx6LlBBUlNFRF9OVU1FUklDX1ZBTFVFLFwiRVZFTlRfVEFHX1VUSUxTXCIsaSksaSk6KHQubG9nKHEuSU5GTyx6LkZBSUxFRF9UT19QQVJTRV9WQUxVRSxcIkVWRU5UX1RBR19VVElMU1wiLHIpLG51bGwpfWZ1bmN0aW9uIHlyKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihcInN0cmluZ1wiPT10eXBlb2YgdHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHxBLmlzTnVtYmVyKHQpJiZBLmlzU2FmZUludGVnZXIodCkpfXZhciBPcj1cImh0dHBzOi8vbG9neC5vcHRpbWl6ZWx5LmNvbS92MS9ldmVudHNcIjtmdW5jdGlvbiBScihlKXt2YXIgdD1lLmF0dHJpYnV0ZXMscj1lLnVzZXJJZCxpPWUuY2xpZW50RW5naW5lLG49ZS5jbGllbnRWZXJzaW9uLG89ZS5jb25maWdPYmoscz1lLmxvZ2dlcixhPSEhby5hbm9ueW1pemVJUCYmby5hbm9ueW1pemVJUCx1PW8uYm90RmlsdGVyaW5nLGw9e3NuYXBzaG90czpbXSx2aXNpdG9yX2lkOnIsYXR0cmlidXRlczpbXX0sYz17YWNjb3VudF9pZDpvLmFjY291bnRJZCxwcm9qZWN0X2lkOm8ucHJvamVjdElkLHZpc2l0b3JzOltsXSxyZXZpc2lvbjpvLnJldmlzaW9uLGNsaWVudF9uYW1lOmksY2xpZW50X3ZlcnNpb246bixhbm9ueW1pemVfaXA6YSxlbnJpY2hfZGVjaXNpb25zOiEwfTtyZXR1cm4gdCYmT2JqZWN0LmtleXModHx8e30pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPXRbZV07aWYoeXIoZSxyKSl7dmFyIGk9WGUobyxlLHMpO2kmJmMudmlzaXRvcnNbMF0uYXR0cmlidXRlcy5wdXNoKHtlbnRpdHlfaWQ6aSxrZXk6ZSx0eXBlOlwiY3VzdG9tXCIsdmFsdWU6cn0pfX0pKSxcImJvb2xlYW5cIj09dHlwZW9mIHUmJmMudmlzaXRvcnNbMF0uYXR0cmlidXRlcy5wdXNoKHtlbnRpdHlfaWQ6WS5CT1RfRklMVEVSSU5HLGtleTpZLkJPVF9GSUxURVJJTkcsdHlwZTpcImN1c3RvbVwiLHZhbHVlOnV9KSxjfWZ1bmN0aW9uIE5yKGUpe3ZhciB0LHIsaSxuLG8scyxhLHUsbCxjPVJyKGUpLHA9KHQ9ZS5jb25maWdPYmoscj1lLmV4cGVyaW1lbnRJZCxpPWUudmFyaWF0aW9uSWQsbj1lLnJ1bGVLZXksbz1lLnJ1bGVUeXBlLHM9ZS5mbGFnS2V5LGE9ZS5lbmFibGVkLHU9cj9ZZSh0LHIpOm51bGwsbD1pP1plKHQsaSk6bnVsbCx7ZGVjaXNpb25zOlt7Y2FtcGFpZ25faWQ6dSxleHBlcmltZW50X2lkOnIsdmFyaWF0aW9uX2lkOmksbWV0YWRhdGE6e2ZsYWdfa2V5OnMscnVsZV9rZXk6bixydWxlX3R5cGU6byx2YXJpYXRpb25fa2V5Omw9bHx8XCJcIixlbmFibGVkOmF9fV0sZXZlbnRzOlt7ZW50aXR5X2lkOnUsdGltZXN0YW1wOkEuY3VycmVudFRpbWVzdGFtcCgpLGtleTpcImNhbXBhaWduX2FjdGl2YXRlZFwiLHV1aWQ6QS51dWlkKCl9XX0pO3JldHVybiBjLnZpc2l0b3JzWzBdLnNuYXBzaG90cy5wdXNoKHApLHtodHRwVmVyYjpcIlBPU1RcIix1cmw6T3IscGFyYW1zOmN9fWZ1bmN0aW9uIFRyKGUpe3ZhciB0PVJyKGUpLHI9ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG49e2V2ZW50czpbXX0sbz17ZW50aXR5X2lkOkplKGUsdCksdGltZXN0YW1wOkEuY3VycmVudFRpbWVzdGFtcCgpLHV1aWQ6QS51dWlkKCksa2V5OnR9O2lmKGkpe3ZhciBzPV9yKGkscik7bnVsbCE9PXMmJihvLnJldmVudWU9cyk7dmFyIGE9dnIoaSxyKTtudWxsIT09YSYmKG8udmFsdWU9YSksby50YWdzPWl9cmV0dXJuIG4uZXZlbnRzLnB1c2gobyksbn0oZS5jb25maWdPYmosZS5ldmVudEtleSxlLmxvZ2dlcixlLmV2ZW50VGFncyk7cmV0dXJuIHQudmlzaXRvcnNbMF0uc25hcHNob3RzPVtyXSx7aHR0cFZlcmI6XCJQT1NUXCIsdXJsOk9yLHBhcmFtczp0fX1mdW5jdGlvbiBtcihlKXt2YXIgdCxyO3JldHVybiBudWxsIT09KHI9bnVsbD09PSh0PWUuZXhwZXJpbWVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQua2V5KSYmdm9pZCAwIT09cj9yOlwiXCJ9ZnVuY3Rpb24gQXIoZSl7dmFyIHQscjtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0odD1lLnZhcmlhdGlvbil8fHZvaWQgMD09PXQ/dm9pZCAwOnQua2V5KSYmdm9pZCAwIT09cj9yOlwiXCJ9ZnVuY3Rpb24gRHIoZSl7dmFyIHQscjtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0odD1lLnZhcmlhdGlvbil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZmVhdHVyZUVuYWJsZWQpJiZ2b2lkIDAhPT1yJiZyfWZ1bmN0aW9uIFNyKGUpe3ZhciB0LHI7cmV0dXJuIG51bGwhPT0ocj1udWxsPT09KHQ9ZS5leHBlcmltZW50KXx8dm9pZCAwPT09dD92b2lkIDA6dC5pZCkmJnZvaWQgMCE9PXI/cjpudWxsfWZ1bmN0aW9uIExyKGUpe3ZhciB0LHI7cmV0dXJuIG51bGwhPT0ocj1udWxsPT09KHQ9ZS52YXJpYXRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmlkKSYmdm9pZCAwIT09cj9yOm51bGx9dmFyIFVyPU0oXCJFVkVOVF9CVUlMREVSXCIpO2Z1bmN0aW9uIENyKGUsdCl7dmFyIHI9W107cmV0dXJuIHQmJk9iamVjdC5rZXlzKHR8fHt9KS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgbj10W2ldO2lmKHlyKGksbikpe3ZhciBvPVhlKGUsaSxVcik7byYmci5wdXNoKHtlbnRpdHlJZDpvLGtleTppLHZhbHVlOm59KX19KSkscn12YXIgUHI9XCJVU0VSX1BST0ZJTEVfU0VSVklDRV9WQUxJREFUT1JcIjt2YXIgYnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0LHI9dGhpcyxpPWUuY2xpZW50RW5naW5lO2l8fChlLmxvZ2dlci5sb2cocS5JTkZPLHouSU5WQUxJRF9DTElFTlRfRU5HSU5FLFwiT1BUSU1JWkVMWVwiLGkpLGk9XCJub2RlLXNka1wiKSx0aGlzLmNsaWVudEVuZ2luZT1pLHRoaXMuY2xpZW50VmVyc2lvbj1lLmNsaWVudFZlcnNpb258fFwiNS40LjFcIix0aGlzLmVycm9ySGFuZGxlcj1lLmVycm9ySGFuZGxlcix0aGlzLmlzT3B0aW1pemVseUNvbmZpZ1ZhbGlkPWUuaXNWYWxpZEluc3RhbmNlLHRoaXMubG9nZ2VyPWUubG9nZ2VyLHRoaXMub2RwTWFuYWdlcj1lLm9kcE1hbmFnZXI7dmFyIG49bnVsbCE9PSh0PWUuZGVmYXVsdERlY2lkZU9wdGlvbnMpJiZ2b2lkIDAhPT10P3Q6W107QXJyYXkuaXNBcnJheShuKXx8KHRoaXMubG9nZ2VyLmxvZyhxLkRFQlVHLHouSU5WQUxJRF9ERUZBVUxUX0RFQ0lERV9PUFRJT05TLFwiT1BUSU1JWkVMWVwiKSxuPVtdKTt2YXIgbz17fTtuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2V4cG9ydHMuT3B0aW1pemVseURlY2lkZU9wdGlvbltlXT9vW2VdPSEwOnIubG9nZ2VyLmxvZyhxLldBUk5JTkcsei5VTlJFQ09HTklaRURfREVDSURFX09QVElPTixcIk9QVElNSVpFTFlcIixlKX0pKSx0aGlzLmRlZmF1bHREZWNpZGVPcHRpb25zPW8sdGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEt0KGUpfSh7ZGF0YWZpbGU6ZS5kYXRhZmlsZSxqc29uU2NoZW1hVmFsaWRhdG9yOmUuanNvblNjaGVtYVZhbGlkYXRvcixzZGtLZXk6ZS5zZGtLZXksZGF0YWZpbGVNYW5hZ2VyOmUuZGF0YWZpbGVNYW5hZ2VyfSksdGhpcy5kaXNwb3NlT25VcGRhdGU9dGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5vblVwZGF0ZSgoZnVuY3Rpb24oZSl7ci5sb2dnZXIubG9nKHEuSU5GTyx6LlVQREFURURfT1BUSU1JWkVMWV9DT05GSUcsXCJPUFRJTUlaRUxZXCIsZS5yZXZpc2lvbixlLnByb2plY3RJZCksci5ub3RpZmljYXRpb25DZW50ZXIuc2VuZE5vdGlmaWNhdGlvbnMody5PUFRJTUlaRUxZX0NPTkZJR19VUERBVEUpLHIudXBkYXRlT2RwU2V0dGluZ3MoKX0pKTt2YXIgcyxhPXRoaXMucHJvamVjdENvbmZpZ01hbmFnZXIub25SZWFkeSgpLHU9bnVsbDtpZihlLnVzZXJQcm9maWxlU2VydmljZSl0cnl7KGZ1bmN0aW9uKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5sb29rdXApdGhyb3cgbmV3IEVycm9yKE4oSC5JTlZBTElEX1VTRVJfUFJPRklMRV9TRVJWSUNFLFByLFwiTWlzc2luZyBmdW5jdGlvbiAnbG9va3VwJ1wiKSk7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5zYXZlKXRocm93IG5ldyBFcnJvcihOKEguSU5WQUxJRF9VU0VSX1BST0ZJTEVfU0VSVklDRSxQcixcIk1pc3NpbmcgZnVuY3Rpb24gJ3NhdmUnXCIpKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoTihILklOVkFMSURfVVNFUl9QUk9GSUxFX1NFUlZJQ0UsUHIpKX0pKGUudXNlclByb2ZpbGVTZXJ2aWNlKSYmKHU9ZS51c2VyUHJvZmlsZVNlcnZpY2UsdGhpcy5sb2dnZXIubG9nKHEuSU5GTyx6LlZBTElEX1VTRVJfUFJPRklMRV9TRVJWSUNFLFwiT1BUSU1JWkVMWVwiKSl9Y2F0Y2goZSl7dGhpcy5sb2dnZXIubG9nKHEuV0FSTklORyxlLm1lc3NhZ2UpfXRoaXMuZGVjaXNpb25TZXJ2aWNlPShzPXt1c2VyUHJvZmlsZVNlcnZpY2U6dSxsb2dnZXI6dGhpcy5sb2dnZXIsVU5TVEFCTEVfY29uZGl0aW9uRXZhbHVhdG9yczplLlVOU1RBQkxFX2NvbmRpdGlvbkV2YWx1YXRvcnN9LG5ldyBJcihzKSksdGhpcy5ub3RpZmljYXRpb25DZW50ZXI9ZS5ub3RpZmljYXRpb25DZW50ZXIsdGhpcy5ldmVudFByb2Nlc3Nvcj1lLmV2ZW50UHJvY2Vzc29yO3ZhciBsPXRoaXMuZXZlbnRQcm9jZXNzb3Iuc3RhcnQoKTt0aGlzLnJlYWR5UHJvbWlzZT1Qcm9taXNlLmFsbChbYSxsLGUub2RwTWFuYWdlcj9lLm9kcE1hbmFnZXIub25SZWFkeSgpOlByb21pc2UucmVzb2x2ZSgpXSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KSksdGhpcy5yZWFkeVRpbWVvdXRzPXt9LHRoaXMubmV4dFJlYWR5VGltZW91dElkPTB9cmV0dXJuIGUucHJvdG90eXBlLmdldFByb2plY3RDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKX0sZS5wcm90b3R5cGUuaXNWYWxpZEluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNPcHRpbWl6ZWx5Q29uZmlnVmFsaWQmJiEhdGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKX0sZS5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oZSx0LHIpe3RyeXtpZighdGhpcy5pc1ZhbGlkSW5zdGFuY2UoKSlyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1Isei5JTlZBTElEX09CSkVDVCxcIk9QVElNSVpFTFlcIixcImFjdGl2YXRlXCIpLG51bGw7aWYoIXRoaXMudmFsaWRhdGVJbnB1dHMoe2V4cGVyaW1lbnRfa2V5OmUsdXNlcl9pZDp0fSxyKSlyZXR1cm4gdGhpcy5ub3RBY3RpdmF0aW5nRXhwZXJpbWVudChlLHQpO3ZhciBpPXRoaXMucHJvamVjdENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7aWYoIWkpcmV0dXJuIG51bGw7dHJ5e3ZhciBuPXRoaXMuZ2V0VmFyaWF0aW9uKGUsdCxyKTtpZihudWxsPT09bilyZXR1cm4gdGhpcy5ub3RBY3RpdmF0aW5nRXhwZXJpbWVudChlLHQpO2lmKCFmdW5jdGlvbihlLHQpe3JldHVyblwiUnVubmluZ1wiPT09V2UoZSx0KX0oaSxlKSlyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuREVCVUcsei5TSE9VTERfTk9UX0RJU1BBVENIX0FDVElWQVRFLFwiT1BUSU1JWkVMWVwiLGUpLG47dmFyIG89UWUoaSxlKSxzPXtleHBlcmltZW50Om8sdmFyaWF0aW9uOm8udmFyaWF0aW9uS2V5TWFwW25dLGRlY2lzaW9uU291cmNlOkouRVhQRVJJTUVOVH07cmV0dXJuIHRoaXMuc2VuZEltcHJlc3Npb25FdmVudChzLFwiXCIsdCwhMCxyKSxufWNhdGNoKHIpe3JldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixyLm1lc3NhZ2UpLHRoaXMubG9nZ2VyLmxvZyhxLklORk8sei5OT1RfQUNUSVZBVElOR19VU0VSLFwiT1BUSU1JWkVMWVwiLHQsZSksdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IociksbnVsbH19Y2F0Y2goZSl7cmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLGUubWVzc2FnZSksdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZSksbnVsbH19LGUucHJvdG90eXBlLnNlbmRJbXByZXNzaW9uRXZlbnQ9ZnVuY3Rpb24oZSx0LHIsaSxuKXt2YXIgbz10aGlzLnByb2plY3RDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO2lmKG8pe3ZhciBzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnT2JqLHI9ZS5kZWNpc2lvbk9iaixpPWUudXNlcklkLG49ZS5mbGFnS2V5LG89ZS5lbmFibGVkLHM9ZS51c2VyQXR0cmlidXRlcyxhPWUuY2xpZW50RW5naW5lLHU9ZS5jbGllbnRWZXJzaW9uLGw9ci5kZWNpc2lvblNvdXJjZSxjPW1yKHIpLHA9U3IociksZD1BcihyKSxmPUxyKHIpLGc9bnVsbCE9PXA/WWUodCxwKTpudWxsO3JldHVybnt0eXBlOlwiaW1wcmVzc2lvblwiLHRpbWVzdGFtcDpBLmN1cnJlbnRUaW1lc3RhbXAoKSx1dWlkOkEudXVpZCgpLHVzZXI6e2lkOmksYXR0cmlidXRlczpDcih0LHMpfSxjb250ZXh0OnthY2NvdW50SWQ6dC5hY2NvdW50SWQscHJvamVjdElkOnQucHJvamVjdElkLHJldmlzaW9uOnQucmV2aXNpb24sY2xpZW50TmFtZTphLGNsaWVudFZlcnNpb246dSxhbm9ueW1pemVJUDp0LmFub255bWl6ZUlQfHwhMSxib3RGaWx0ZXJpbmc6dC5ib3RGaWx0ZXJpbmd9LGxheWVyOntpZDpnfSxleHBlcmltZW50OntpZDpwLGtleTpjfSx2YXJpYXRpb246e2lkOmYsa2V5OmR9LHJ1bGVLZXk6YyxmbGFnS2V5Om4scnVsZVR5cGU6bCxlbmFibGVkOm99fSh7ZGVjaXNpb25PYmo6ZSxmbGFnS2V5OnQsZW5hYmxlZDppLHVzZXJJZDpyLHVzZXJBdHRyaWJ1dGVzOm4sY2xpZW50RW5naW5lOnRoaXMuY2xpZW50RW5naW5lLGNsaWVudFZlcnNpb246dGhpcy5jbGllbnRWZXJzaW9uLGNvbmZpZ09iajpvfSk7dGhpcy5ldmVudFByb2Nlc3Nvci5wcm9jZXNzKHMpLHRoaXMuZW1pdE5vdGlmaWNhdGlvbkNlbnRlckFjdGl2YXRlKGUsdCxyLGksbil9fSxlLnByb3RvdHlwZS5lbWl0Tm90aWZpY2F0aW9uQ2VudGVyQWN0aXZhdGU9ZnVuY3Rpb24oZSx0LHIsaSxuKXt2YXIgbz10aGlzLnByb2plY3RDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO2lmKG8pe3ZhciBzLGE9ZS5kZWNpc2lvblNvdXJjZSx1PW1yKGUpLGw9U3IoZSksYz1BcihlKSxwPUxyKGUpO251bGwhPT1sJiZcIlwiIT09YyYmKHM9by5leHBlcmltZW50SWRNYXBbbF0pO3ZhciBkLGY9TnIoe2F0dHJpYnV0ZXM6bixjbGllbnRFbmdpbmU6dGhpcy5jbGllbnRFbmdpbmUsY2xpZW50VmVyc2lvbjp0aGlzLmNsaWVudFZlcnNpb24sY29uZmlnT2JqOm8sZXhwZXJpbWVudElkOmwscnVsZUtleTp1LGZsYWdLZXk6dCxydWxlVHlwZTphLHVzZXJJZDpyLGVuYWJsZWQ6aSx2YXJpYXRpb25JZDpwLGxvZ2dlcjp0aGlzLmxvZ2dlcn0pO3MmJnMudmFyaWF0aW9uS2V5TWFwJiZcIlwiIT09YyYmKGQ9cy52YXJpYXRpb25LZXlNYXBbY10pLHRoaXMubm90aWZpY2F0aW9uQ2VudGVyLnNlbmROb3RpZmljYXRpb25zKHcuQUNUSVZBVEUse2V4cGVyaW1lbnQ6cyx1c2VySWQ6cixhdHRyaWJ1dGVzOm4sdmFyaWF0aW9uOmQsbG9nRXZlbnQ6Zn0pfX0sZS5wcm90b3R5cGUudHJhY2s9ZnVuY3Rpb24oZSx0LHIsaSl7dHJ5e2lmKCF0aGlzLmlzVmFsaWRJbnN0YW5jZSgpKXJldHVybiB2b2lkIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLHouSU5WQUxJRF9PQkpFQ1QsXCJPUFRJTUlaRUxZXCIsXCJ0cmFja1wiKTtpZighdGhpcy52YWxpZGF0ZUlucHV0cyh7dXNlcl9pZDp0LGV2ZW50X2tleTplfSxyLGkpKXJldHVybjt2YXIgbj10aGlzLnByb2plY3RDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO2lmKCFuKXJldHVybjtpZighZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ldmVudEtleU1hcC5oYXNPd25Qcm9wZXJ0eSh0KX0obixlKSlyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuV0FSTklORyx6LkVWRU5UX0tFWV9OT1RfRk9VTkQsXCJPUFRJTUlaRUxZXCIsZSksdm9pZCB0aGlzLmxvZ2dlci5sb2cocS5XQVJOSU5HLHouTk9UX1RSQUNLSU5HX1VTRVIsXCJPUFRJTUlaRUxZXCIsdCk7dmFyIG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb25maWdPYmoscj1lLnVzZXJJZCxpPWUudXNlckF0dHJpYnV0ZXMsbj1lLmNsaWVudEVuZ2luZSxvPWUuY2xpZW50VmVyc2lvbixzPWUuZXZlbnRLZXksYT1lLmV2ZW50VGFncyx1PUplKHQscyksbD1hP19yKGEsVXIpOm51bGwsYz1hP3ZyKGEsVXIpOm51bGw7cmV0dXJue3R5cGU6XCJjb252ZXJzaW9uXCIsdGltZXN0YW1wOkEuY3VycmVudFRpbWVzdGFtcCgpLHV1aWQ6QS51dWlkKCksdXNlcjp7aWQ6cixhdHRyaWJ1dGVzOkNyKHQsaSl9LGNvbnRleHQ6e2FjY291bnRJZDp0LmFjY291bnRJZCxwcm9qZWN0SWQ6dC5wcm9qZWN0SWQscmV2aXNpb246dC5yZXZpc2lvbixjbGllbnROYW1lOm4sY2xpZW50VmVyc2lvbjpvLGFub255bWl6ZUlQOnQuYW5vbnltaXplSVB8fCExLGJvdEZpbHRlcmluZzp0LmJvdEZpbHRlcmluZ30sZXZlbnQ6e2lkOnUsa2V5OnN9LHJldmVudWU6bCx2YWx1ZTpjLHRhZ3M6YX19KHtldmVudEtleTplLGV2ZW50VGFnczppPXRoaXMuZmlsdGVyRW1wdHlWYWx1ZXMoaSksdXNlcklkOnQsdXNlckF0dHJpYnV0ZXM6cixjbGllbnRFbmdpbmU6dGhpcy5jbGllbnRFbmdpbmUsY2xpZW50VmVyc2lvbjp0aGlzLmNsaWVudFZlcnNpb24sY29uZmlnT2JqOm59KTt0aGlzLmxvZ2dlci5sb2cocS5JTkZPLHouVFJBQ0tfRVZFTlQsXCJPUFRJTUlaRUxZXCIsZSx0KSx0aGlzLmV2ZW50UHJvY2Vzc29yLnByb2Nlc3MobyksdGhpcy5lbWl0Tm90aWZpY2F0aW9uQ2VudGVyVHJhY2soZSx0LHIsaSl9Y2F0Y2goZSl7dGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSx0aGlzLmxvZ2dlci5sb2cocS5FUlJPUix6Lk5PVF9UUkFDS0lOR19VU0VSLFwiT1BUSU1JWkVMWVwiLHQpfX0sZS5wcm90b3R5cGUuZW1pdE5vdGlmaWNhdGlvbkNlbnRlclRyYWNrPWZ1bmN0aW9uKGUsdCxyLGkpe3RyeXt2YXIgbj10aGlzLnByb2plY3RDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO2lmKCFuKXJldHVybjt2YXIgbz1Ucih7YXR0cmlidXRlczpyLGNsaWVudEVuZ2luZTp0aGlzLmNsaWVudEVuZ2luZSxjbGllbnRWZXJzaW9uOnRoaXMuY2xpZW50VmVyc2lvbixjb25maWdPYmo6bixldmVudEtleTplLGV2ZW50VGFnczppLGxvZ2dlcjp0aGlzLmxvZ2dlcix1c2VySWQ6dH0pO3RoaXMubm90aWZpY2F0aW9uQ2VudGVyLnNlbmROb3RpZmljYXRpb25zKHcuVFJBQ0sse2V2ZW50S2V5OmUsdXNlcklkOnQsYXR0cmlidXRlczpyLGV2ZW50VGFnczppLGxvZ0V2ZW50Om99KX1jYXRjaChlKXt0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixlLm1lc3NhZ2UpLHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGUpfX0sZS5wcm90b3R5cGUuZ2V0VmFyaWF0aW9uPWZ1bmN0aW9uKGUsdCxyKXt0cnl7aWYoIXRoaXMuaXNWYWxpZEluc3RhbmNlKCkpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLHouSU5WQUxJRF9PQkpFQ1QsXCJPUFRJTUlaRUxZXCIsXCJnZXRWYXJpYXRpb25cIiksbnVsbDt0cnl7aWYoIXRoaXMudmFsaWRhdGVJbnB1dHMoe2V4cGVyaW1lbnRfa2V5OmUsdXNlcl9pZDp0fSxyKSlyZXR1cm4gbnVsbDt2YXIgaT10aGlzLnByb2plY3RDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO2lmKCFpKXJldHVybiBudWxsO3ZhciBuPWkuZXhwZXJpbWVudEtleU1hcFtlXTtpZighbnx8bi5pc1JvbGxvdXQpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkRFQlVHLEguSU5WQUxJRF9FWFBFUklNRU5UX0tFWSxcIk9QVElNSVpFTFlcIixlKSxudWxsO3ZhciBvPXRoaXMuZGVjaXNpb25TZXJ2aWNlLmdldFZhcmlhdGlvbihpLG4sdGhpcy5jcmVhdGVJbnRlcm5hbFVzZXJDb250ZXh0KHQscikpLnJlc3VsdCxzPShhPWksdT1uLmlkLGEuZXhwZXJpbWVudEZlYXR1cmVNYXAuaGFzT3duUHJvcGVydHkodSk/WC5GRUFUVVJFX1RFU1Q6WC5BQl9URVNUKTtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb25DZW50ZXIuc2VuZE5vdGlmaWNhdGlvbnMody5ERUNJU0lPTix7dHlwZTpzLHVzZXJJZDp0LGF0dHJpYnV0ZXM6cnx8e30sZGVjaXNpb25JbmZvOntleHBlcmltZW50S2V5OmUsdmFyaWF0aW9uS2V5Om99fSksb31jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSxudWxsfX1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSxudWxsfXZhciBhLHV9LGUucHJvdG90eXBlLnNldEZvcmNlZFZhcmlhdGlvbj1mdW5jdGlvbihlLHQscil7aWYoIXRoaXMudmFsaWRhdGVJbnB1dHMoe2V4cGVyaW1lbnRfa2V5OmUsdXNlcl9pZDp0fSkpcmV0dXJuITE7dmFyIGk9dGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtpZighaSlyZXR1cm4hMTt0cnl7cmV0dXJuIHRoaXMuZGVjaXNpb25TZXJ2aWNlLnNldEZvcmNlZFZhcmlhdGlvbihpLGUsdCxyKX1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSwhMX19LGUucHJvdG90eXBlLmdldEZvcmNlZFZhcmlhdGlvbj1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLnZhbGlkYXRlSW5wdXRzKHtleHBlcmltZW50X2tleTplLHVzZXJfaWQ6dH0pKXJldHVybiBudWxsO3ZhciByPXRoaXMucHJvamVjdENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7aWYoIXIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiB0aGlzLmRlY2lzaW9uU2VydmljZS5nZXRGb3JjZWRWYXJpYXRpb24ocixlLHQpLnJlc3VsdH1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSxudWxsfX0sZS5wcm90b3R5cGUudmFsaWRhdGVJbnB1dHM9ZnVuY3Rpb24oZSx0LHIpe3RyeXtpZihlLmhhc093blByb3BlcnR5KFwidXNlcl9pZFwiKSl7dmFyIGk9ZS51c2VyX2lkO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBpfHxudWxsPT09aXx8XCJ1bmRlZmluZWRcIj09PWkpdGhyb3cgbmV3IEVycm9yKE4oSC5JTlZBTElEX0lOUFVUX0ZPUk1BVCxcIk9QVElNSVpFTFlcIixcInVzZXJfaWRcIikpO2RlbGV0ZSBlLnVzZXJfaWR9cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCFFcihlW3RdKSl0aHJvdyBuZXcgRXJyb3IoTihILklOVkFMSURfSU5QVVRfRk9STUFULFwiT1BUSU1JWkVMWVwiLHQpKX0pKSx0JiZmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8QXJyYXkuaXNBcnJheShlKXx8bnVsbD09PWUpdGhyb3cgbmV3IEVycm9yKE4oSC5JTlZBTElEX0FUVFJJQlVURVMsXCJBVFRSSUJVVEVTX1ZBTElEQVRPUlwiKSk7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYodm9pZCAwPT09ZVt0XSl0aHJvdyBuZXcgRXJyb3IoTihILlVOREVGSU5FRF9BVFRSSUJVVEUsXCJBVFRSSUJVVEVTX1ZBTElEQVRPUlwiLHQpKX0pKX0odCksciYmZnVuY3Rpb24oZSl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSl8fG51bGw9PT1lKXRocm93IG5ldyBFcnJvcihOKEguSU5WQUxJRF9FVkVOVF9UQUdTLFwiRVZFTlRfVEFHU19WQUxJREFUT1JcIikpfShyKSwhMH1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSwhMX19LGUucHJvdG90eXBlLm5vdEFjdGl2YXRpbmdFeHBlcmltZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLklORk8sei5OT1RfQUNUSVZBVElOR19VU0VSLFwiT1BUSU1JWkVMWVwiLHQsZSksbnVsbH0sZS5wcm90b3R5cGUuZmlsdGVyRW1wdHlWYWx1ZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpIWUuaGFzT3duUHJvcGVydHkodCl8fG51bGwhPT1lW3RdJiZ2b2lkIDAhPT1lW3RdfHxkZWxldGUgZVt0XTtyZXR1cm4gZX0sZS5wcm90b3R5cGUuaXNGZWF0dXJlRW5hYmxlZD1mdW5jdGlvbihlLHQscil7dHJ5e2lmKCF0aGlzLmlzVmFsaWRJbnN0YW5jZSgpKXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUix6LklOVkFMSURfT0JKRUNULFwiT1BUSU1JWkVMWVwiLFwiaXNGZWF0dXJlRW5hYmxlZFwiKSwhMTtpZighdGhpcy52YWxpZGF0ZUlucHV0cyh7ZmVhdHVyZV9rZXk6ZSx1c2VyX2lkOnR9LHIpKXJldHVybiExO3ZhciBpPXRoaXMucHJvamVjdENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7aWYoIWkpcmV0dXJuITE7dmFyIG49cnQoaSxlLHRoaXMubG9nZ2VyKTtpZighbilyZXR1cm4hMTt2YXIgbz17fSxzPXRoaXMuY3JlYXRlSW50ZXJuYWxVc2VyQ29udGV4dCh0LHIpLGE9dGhpcy5kZWNpc2lvblNlcnZpY2UuZ2V0VmFyaWF0aW9uRm9yRmVhdHVyZShpLG4scykucmVzdWx0LHU9YS5kZWNpc2lvblNvdXJjZSxsPW1yKGEpLGM9QXIoYSkscD1EcihhKTt1PT09Si5GRUFUVVJFX1RFU1QmJihvPXtleHBlcmltZW50S2V5OmwsdmFyaWF0aW9uS2V5OmN9KSwodT09PUouRkVBVFVSRV9URVNUfHx1PT09Si5ST0xMT1VUJiZvdChpKSkmJnRoaXMuc2VuZEltcHJlc3Npb25FdmVudChhLG4ua2V5LHQscCxyKSwhMD09PXA/dGhpcy5sb2dnZXIubG9nKHEuSU5GTyx6LkZFQVRVUkVfRU5BQkxFRF9GT1JfVVNFUixcIk9QVElNSVpFTFlcIixlLHQpOih0aGlzLmxvZ2dlci5sb2cocS5JTkZPLHouRkVBVFVSRV9OT1RfRU5BQkxFRF9GT1JfVVNFUixcIk9QVElNSVpFTFlcIixlLHQpLHA9ITEpO3ZhciBkPXtmZWF0dXJlS2V5OmUsZmVhdHVyZUVuYWJsZWQ6cCxzb3VyY2U6YS5kZWNpc2lvblNvdXJjZSxzb3VyY2VJbmZvOm99O3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5zZW5kTm90aWZpY2F0aW9ucyh3LkRFQ0lTSU9OLHt0eXBlOlguRkVBVFVSRSx1c2VySWQ6dCxhdHRyaWJ1dGVzOnJ8fHt9LGRlY2lzaW9uSW5mbzpkfSkscH1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSwhMX19LGUucHJvdG90eXBlLmdldEVuYWJsZWRGZWF0dXJlcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7dHJ5e3ZhciBpPVtdO2lmKCF0aGlzLmlzVmFsaWRJbnN0YW5jZSgpKXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUix6LklOVkFMSURfT0JKRUNULFwiT1BUSU1JWkVMWVwiLFwiZ2V0RW5hYmxlZEZlYXR1cmVzXCIpLGk7aWYoIXRoaXMudmFsaWRhdGVJbnB1dHMoe3VzZXJfaWQ6ZX0pKXJldHVybiBpO3ZhciBuPXRoaXMucHJvamVjdENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7cmV0dXJuIG4/KHYobi5mZWF0dXJlS2V5TWFwKS5mb3JFYWNoKChmdW5jdGlvbihuKXtyLmlzRmVhdHVyZUVuYWJsZWQobi5rZXksZSx0KSYmaS5wdXNoKG4ua2V5KX0pKSxpKTppfWNhdGNoKGUpe3JldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixlLm1lc3NhZ2UpLHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGUpLFtdfX0sZS5wcm90b3R5cGUuZ2V0RmVhdHVyZVZhcmlhYmxlPWZ1bmN0aW9uKGUsdCxyLGkpe3RyeXtyZXR1cm4gdGhpcy5pc1ZhbGlkSW5zdGFuY2UoKT90aGlzLmdldEZlYXR1cmVWYXJpYWJsZUZvclR5cGUoZSx0LG51bGwscixpKToodGhpcy5sb2dnZXIubG9nKHEuRVJST1Isei5JTlZBTElEX09CSkVDVCxcIk9QVElNSVpFTFlcIixcImdldEZlYXR1cmVWYXJpYWJsZVwiKSxudWxsKX1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSxudWxsfX0sZS5wcm90b3R5cGUuZ2V0RmVhdHVyZVZhcmlhYmxlRm9yVHlwZT1mdW5jdGlvbihlLHQscixpLG4pe2lmKCF0aGlzLnZhbGlkYXRlSW5wdXRzKHtmZWF0dXJlX2tleTplLHZhcmlhYmxlX2tleTp0LHVzZXJfaWQ6aX0sbikpcmV0dXJuIG51bGw7dmFyIG89dGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtpZighbylyZXR1cm4gbnVsbDt2YXIgcz1ydChvLGUsdGhpcy5sb2dnZXIpO2lmKCFzKXJldHVybiBudWxsO3ZhciBhPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBuPWUuZmVhdHVyZUtleU1hcFt0XTtpZighbilyZXR1cm4gaS5sb2cocS5FUlJPUixILkZFQVRVUkVfTk9UX0lOX0RBVEFGSUxFLGplLHQpLG51bGw7dmFyIG89bi52YXJpYWJsZUtleU1hcFtyXTtyZXR1cm4gb3x8KGkubG9nKHEuRVJST1IsSC5WQVJJQUJMRV9LRVlfTk9UX0lOX0RBVEFGSUxFLGplLHIsdCksbnVsbCl9KG8sZSx0LHRoaXMubG9nZ2VyKTtpZighYSlyZXR1cm4gbnVsbDtpZihyJiZhLnR5cGUhPT1yKXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5XQVJOSU5HLHouVkFSSUFCTEVfUkVRVUVTVEVEX1dJVEhfV1JPTkdfVFlQRSxcIk9QVElNSVpFTFlcIixyLGEudHlwZSksbnVsbDt2YXIgdT10aGlzLmNyZWF0ZUludGVybmFsVXNlckNvbnRleHQoaSxuKSxsPXRoaXMuZGVjaXNpb25TZXJ2aWNlLmdldFZhcmlhdGlvbkZvckZlYXR1cmUobyxzLHUpLnJlc3VsdCxjPURyKGwpLHA9dGhpcy5nZXRGZWF0dXJlVmFyaWFibGVWYWx1ZUZyb21WYXJpYXRpb24oZSxjLGwudmFyaWF0aW9uLGEsaSksZD17fTtyZXR1cm4gbC5kZWNpc2lvblNvdXJjZT09PUouRkVBVFVSRV9URVNUJiZudWxsIT09bC5leHBlcmltZW50JiZudWxsIT09bC52YXJpYXRpb24mJihkPXtleHBlcmltZW50S2V5OmwuZXhwZXJpbWVudC5rZXksdmFyaWF0aW9uS2V5OmwudmFyaWF0aW9uLmtleX0pLHRoaXMubm90aWZpY2F0aW9uQ2VudGVyLnNlbmROb3RpZmljYXRpb25zKHcuREVDSVNJT04se3R5cGU6WC5GRUFUVVJFX1ZBUklBQkxFLHVzZXJJZDppLGF0dHJpYnV0ZXM6bnx8e30sZGVjaXNpb25JbmZvOntmZWF0dXJlS2V5OmUsZmVhdHVyZUVuYWJsZWQ6Yyxzb3VyY2U6bC5kZWNpc2lvblNvdXJjZSx2YXJpYWJsZUtleTp0LHZhcmlhYmxlVmFsdWU6cCx2YXJpYWJsZVR5cGU6YS50eXBlLHNvdXJjZUluZm86ZH19KSxwfSxlLnByb3RvdHlwZS5nZXRGZWF0dXJlVmFyaWFibGVWYWx1ZUZyb21WYXJpYXRpb249ZnVuY3Rpb24oZSx0LHIsaSxuKXt2YXIgbz10aGlzLnByb2plY3RDb25maWdNYW5hZ2VyLmdldENvbmZpZygpO2lmKCFvKXJldHVybiBudWxsO3ZhciBzPWkuZGVmYXVsdFZhbHVlO2lmKG51bGwhPT1yKXt2YXIgYT1mdW5jdGlvbihlLHQscixpKXtpZighdHx8IXIpcmV0dXJuIG51bGw7aWYoIWUudmFyaWF0aW9uVmFyaWFibGVVc2FnZU1hcC5oYXNPd25Qcm9wZXJ0eShyLmlkKSlyZXR1cm4gaS5sb2cocS5FUlJPUixILlZBUklBVElPTl9JRF9OT1RfSU5fREFUQUZJTEVfTk9fRVhQRVJJTUVOVCxqZSxyLmlkKSxudWxsO3ZhciBuPWUudmFyaWF0aW9uVmFyaWFibGVVc2FnZU1hcFtyLmlkXVt0LmlkXTtyZXR1cm4gbj9uLnZhbHVlOm51bGx9KG8saSxyLHRoaXMubG9nZ2VyKTtudWxsIT09YT90PyhzPWEsdGhpcy5sb2dnZXIubG9nKHEuSU5GTyx6LlVTRVJfUkVDRUlWRURfVkFSSUFCTEVfVkFMVUUsXCJPUFRJTUlaRUxZXCIscyxpLmtleSxlKSk6dGhpcy5sb2dnZXIubG9nKHEuSU5GTyx6LkZFQVRVUkVfTk9UX0VOQUJMRURfUkVUVVJOX0RFRkFVTFRfVkFSSUFCTEVfVkFMVUUsXCJPUFRJTUlaRUxZXCIsZSxuLHMpOnRoaXMubG9nZ2VyLmxvZyhxLklORk8sei5WQVJJQUJMRV9OT1RfVVNFRF9SRVRVUk5fREVGQVVMVF9WQVJJQUJMRV9WQUxVRSxcIk9QVElNSVpFTFlcIixpLmtleSxyLmtleSl9ZWxzZSB0aGlzLmxvZ2dlci5sb2cocS5JTkZPLHouVVNFUl9SRUNFSVZFRF9ERUZBVUxUX1ZBUklBQkxFX1ZBTFVFLFwiT1BUSU1JWkVMWVwiLG4saS5rZXksZSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt2YXIgaTtzd2l0Y2godCl7Y2FzZSBaLkJPT0xFQU46XCJ0cnVlXCIhPT1lJiZcImZhbHNlXCIhPT1lPyhyLmxvZyhxLkVSUk9SLEguVU5BQkxFX1RPX0NBU1RfVkFMVUUsamUsZSx0KSxpPW51bGwpOmk9XCJ0cnVlXCI9PT1lO2JyZWFrO2Nhc2UgWi5JTlRFR0VSOmk9cGFyc2VJbnQoZSwxMCksaXNOYU4oaSkmJihyLmxvZyhxLkVSUk9SLEguVU5BQkxFX1RPX0NBU1RfVkFMVUUsamUsZSx0KSxpPW51bGwpO2JyZWFrO2Nhc2UgWi5ET1VCTEU6aT1wYXJzZUZsb2F0KGUpLGlzTmFOKGkpJiYoci5sb2cocS5FUlJPUixILlVOQUJMRV9UT19DQVNUX1ZBTFVFLGplLGUsdCksaT1udWxsKTticmVhaztjYXNlIFouSlNPTjp0cnl7aT1KU09OLnBhcnNlKGUpfWNhdGNoKG4pe3IubG9nKHEuRVJST1IsSC5VTkFCTEVfVE9fQ0FTVF9WQUxVRSxqZSxlLHQpLGk9bnVsbH1icmVhaztkZWZhdWx0Omk9ZX1yZXR1cm4gaX0ocyxpLnR5cGUsdGhpcy5sb2dnZXIpfSxlLnByb3RvdHlwZS5nZXRGZWF0dXJlVmFyaWFibGVCb29sZWFuPWZ1bmN0aW9uKGUsdCxyLGkpe3RyeXtyZXR1cm4gdGhpcy5pc1ZhbGlkSW5zdGFuY2UoKT90aGlzLmdldEZlYXR1cmVWYXJpYWJsZUZvclR5cGUoZSx0LFouQk9PTEVBTixyLGkpOih0aGlzLmxvZ2dlci5sb2cocS5FUlJPUix6LklOVkFMSURfT0JKRUNULFwiT1BUSU1JWkVMWVwiLFwiZ2V0RmVhdHVyZVZhcmlhYmxlQm9vbGVhblwiKSxudWxsKX1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSxudWxsfX0sZS5wcm90b3R5cGUuZ2V0RmVhdHVyZVZhcmlhYmxlRG91YmxlPWZ1bmN0aW9uKGUsdCxyLGkpe3RyeXtyZXR1cm4gdGhpcy5pc1ZhbGlkSW5zdGFuY2UoKT90aGlzLmdldEZlYXR1cmVWYXJpYWJsZUZvclR5cGUoZSx0LFouRE9VQkxFLHIsaSk6KHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLHouSU5WQUxJRF9PQkpFQ1QsXCJPUFRJTUlaRUxZXCIsXCJnZXRGZWF0dXJlVmFyaWFibGVEb3VibGVcIiksbnVsbCl9Y2F0Y2goZSl7cmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLGUubWVzc2FnZSksdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZSksbnVsbH19LGUucHJvdG90eXBlLmdldEZlYXR1cmVWYXJpYWJsZUludGVnZXI9ZnVuY3Rpb24oZSx0LHIsaSl7dHJ5e3JldHVybiB0aGlzLmlzVmFsaWRJbnN0YW5jZSgpP3RoaXMuZ2V0RmVhdHVyZVZhcmlhYmxlRm9yVHlwZShlLHQsWi5JTlRFR0VSLHIsaSk6KHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLHouSU5WQUxJRF9PQkpFQ1QsXCJPUFRJTUlaRUxZXCIsXCJnZXRGZWF0dXJlVmFyaWFibGVJbnRlZ2VyXCIpLG51bGwpfWNhdGNoKGUpe3JldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixlLm1lc3NhZ2UpLHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGUpLG51bGx9fSxlLnByb3RvdHlwZS5nZXRGZWF0dXJlVmFyaWFibGVTdHJpbmc9ZnVuY3Rpb24oZSx0LHIsaSl7dHJ5e3JldHVybiB0aGlzLmlzVmFsaWRJbnN0YW5jZSgpP3RoaXMuZ2V0RmVhdHVyZVZhcmlhYmxlRm9yVHlwZShlLHQsWi5TVFJJTkcscixpKToodGhpcy5sb2dnZXIubG9nKHEuRVJST1Isei5JTlZBTElEX09CSkVDVCxcIk9QVElNSVpFTFlcIixcImdldEZlYXR1cmVWYXJpYWJsZVN0cmluZ1wiKSxudWxsKX1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSxudWxsfX0sZS5wcm90b3R5cGUuZ2V0RmVhdHVyZVZhcmlhYmxlSlNPTj1mdW5jdGlvbihlLHQscixpKXt0cnl7cmV0dXJuIHRoaXMuaXNWYWxpZEluc3RhbmNlKCk/dGhpcy5nZXRGZWF0dXJlVmFyaWFibGVGb3JUeXBlKGUsdCxaLkpTT04scixpKToodGhpcy5sb2dnZXIubG9nKHEuRVJST1Isei5JTlZBTElEX09CSkVDVCxcIk9QVElNSVpFTFlcIixcImdldEZlYXR1cmVWYXJpYWJsZUpTT05cIiksbnVsbCl9Y2F0Y2goZSl7cmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLGUubWVzc2FnZSksdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZSksbnVsbH19LGUucHJvdG90eXBlLmdldEFsbEZlYXR1cmVWYXJpYWJsZXM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXRoaXM7dHJ5e2lmKCF0aGlzLmlzVmFsaWRJbnN0YW5jZSgpKXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUix6LklOVkFMSURfT0JKRUNULFwiT1BUSU1JWkVMWVwiLFwiZ2V0QWxsRmVhdHVyZVZhcmlhYmxlc1wiKSxudWxsO2lmKCF0aGlzLnZhbGlkYXRlSW5wdXRzKHtmZWF0dXJlX2tleTplLHVzZXJfaWQ6dH0scikpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtpZighbilyZXR1cm4gbnVsbDt2YXIgbz1ydChuLGUsdGhpcy5sb2dnZXIpO2lmKCFvKXJldHVybiBudWxsO3ZhciBzPXRoaXMuY3JlYXRlSW50ZXJuYWxVc2VyQ29udGV4dCh0LHIpLGE9dGhpcy5kZWNpc2lvblNlcnZpY2UuZ2V0VmFyaWF0aW9uRm9yRmVhdHVyZShuLG8scykucmVzdWx0LHU9RHIoYSksbD17fTtvLnZhcmlhYmxlcy5mb3JFYWNoKChmdW5jdGlvbihyKXtsW3Iua2V5XT1pLmdldEZlYXR1cmVWYXJpYWJsZVZhbHVlRnJvbVZhcmlhdGlvbihlLHUsYS52YXJpYXRpb24scix0KX0pKTt2YXIgYz17fTtyZXR1cm4gYS5kZWNpc2lvblNvdXJjZT09PUouRkVBVFVSRV9URVNUJiZudWxsIT09YS5leHBlcmltZW50JiZudWxsIT09YS52YXJpYXRpb24mJihjPXtleHBlcmltZW50S2V5OmEuZXhwZXJpbWVudC5rZXksdmFyaWF0aW9uS2V5OmEudmFyaWF0aW9uLmtleX0pLHRoaXMubm90aWZpY2F0aW9uQ2VudGVyLnNlbmROb3RpZmljYXRpb25zKHcuREVDSVNJT04se3R5cGU6WC5BTExfRkVBVFVSRV9WQVJJQUJMRVMsdXNlcklkOnQsYXR0cmlidXRlczpyfHx7fSxkZWNpc2lvbkluZm86e2ZlYXR1cmVLZXk6ZSxmZWF0dXJlRW5hYmxlZDp1LHNvdXJjZTphLmRlY2lzaW9uU291cmNlLHZhcmlhYmxlVmFsdWVzOmwsc291cmNlSW5mbzpjfX0pLGx9Y2F0Y2goZSl7cmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLGUubWVzc2FnZSksdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZSksbnVsbH19LGUucHJvdG90eXBlLmdldE9wdGltaXplbHlDb25maWc9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHRoaXMucHJvamVjdENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk/dGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5nZXRPcHRpbWl6ZWx5Q29uZmlnKCk6bnVsbH1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSxudWxsfX0sZS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXM7dHJ5e3RoaXMub2RwTWFuYWdlciYmdGhpcy5vZHBNYW5hZ2VyLnN0b3AoKSx0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5jbGVhckFsbE5vdGlmaWNhdGlvbkxpc3RlbmVycygpO3ZhciByPW51bGw9PT0oZT10aGlzLnByb2plY3RDb25maWdNYW5hZ2VyLmdldENvbmZpZygpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zZGtLZXk7ciYmeGUucmVtb3ZlTm90aWZpY2F0aW9uQ2VudGVyKHIpO3ZhciBpPXRoaXMuZXZlbnRQcm9jZXNzb3Iuc3RvcCgpO3JldHVybiB0aGlzLmRpc3Bvc2VPblVwZGF0ZSYmKHRoaXMuZGlzcG9zZU9uVXBkYXRlKCksdGhpcy5kaXNwb3NlT25VcGRhdGU9bnVsbCksdGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlciYmdGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5zdG9wKCksT2JqZWN0LmtleXModGhpcy5yZWFkeVRpbWVvdXRzKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj10LnJlYWR5VGltZW91dHNbZV07Y2xlYXJUaW1lb3V0KHIucmVhZHlUaW1lb3V0KSxyLm9uQ2xvc2UoKX0pKSx0aGlzLnJlYWR5VGltZW91dHM9e30saS50aGVuKChmdW5jdGlvbigpe3JldHVybntzdWNjZXNzOiEwfX0pLChmdW5jdGlvbihlKXtyZXR1cm57c3VjY2VzczohMSxyZWFzb246U3RyaW5nKGUpfX0pKX1jYXRjaChlKXtyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuRVJST1IsZS5tZXNzYWdlKSx0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKSxQcm9taXNlLnJlc29sdmUoe3N1Y2Nlc3M6ITEscmVhc29uOlN0cmluZyhlKX0pfX0sZS5wcm90b3R5cGUub25SZWFkeT1mdW5jdGlvbihlKXt2YXIgdCxyLGk9dGhpcztcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUudGltZW91dCYmKHQ9ZS50aW1lb3V0KSxBLmlzU2FmZUludGVnZXIodCl8fCh0PTNlNCk7dmFyIG49bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3I9ZX0pKSxvPXRoaXMubmV4dFJlYWR5VGltZW91dElkO3RoaXMubmV4dFJlYWR5VGltZW91dElkKys7dmFyIHM9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtkZWxldGUgaS5yZWFkeVRpbWVvdXRzW29dLHIoe3N1Y2Nlc3M6ITEscmVhc29uOk4oXCJvblJlYWR5IHRpbWVvdXQgZXhwaXJlZCBhZnRlciAlcyBtc1wiLHQpfSl9KSx0KTtyZXR1cm4gdGhpcy5yZWFkeVRpbWVvdXRzW29dPXtyZWFkeVRpbWVvdXQ6cyxvbkNsb3NlOmZ1bmN0aW9uKCl7cih7c3VjY2VzczohMSxyZWFzb246XCJJbnN0YW5jZSBjbG9zZWRcIn0pfX0sdGhpcy5yZWFkeVByb21pc2UudGhlbigoZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocyksZGVsZXRlIGkucmVhZHlUaW1lb3V0c1tvXSxyKHtzdWNjZXNzOiEwfSl9KSksUHJvbWlzZS5yYWNlKFt0aGlzLnJlYWR5UHJvbWlzZSxuXSl9LGUucHJvdG90eXBlLmNyZWF0ZVVzZXJDb250ZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIHIsaT1udWxsIT1lP2U6bnVsbD09PShyPXRoaXMub2RwTWFuYWdlcil8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0VnVpZCgpO3JldHVybiB2b2lkIDAhPT1pJiZ0aGlzLnZhbGlkYXRlSW5wdXRzKHt1c2VyX2lkOml9LHQpP25ldyBGdCh7b3B0aW1pemVseTp0aGlzLHVzZXJJZDppLGF0dHJpYnV0ZXM6dCxzaG91bGRJZGVudGlmeVVzZXI6ITB9KTpudWxsfSxlLnByb3RvdHlwZS5jcmVhdGVJbnRlcm5hbFVzZXJDb250ZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBGdCh7b3B0aW1pemVseTp0aGlzLHVzZXJJZDplLGF0dHJpYnV0ZXM6dCxzaG91bGRJZGVudGlmeVVzZXI6ITF9KX0sZS5wcm90b3R5cGUuZGVjaWRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaSxuLG8scyxhPXRoaXM7dm9pZCAwPT09ciYmKHI9W10pO3ZhciB1LGw9ZS5nZXRVc2VySWQoKSxwPWUuZ2V0QXR0cmlidXRlcygpLGQ9dGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKSxmPVtdO2lmKCF0aGlzLmlzVmFsaWRJbnN0YW5jZSgpfHwhZClyZXR1cm4gdGhpcy5sb2dnZXIubG9nKHEuSU5GTyx6LklOVkFMSURfT0JKRUNULFwiT1BUSU1JWkVMWVwiLFwiZGVjaWRlXCIpLE10KHQsZSxbJC5TREtfTk9UX1JFQURZXSk7dmFyIGc9ZC5mZWF0dXJlS2V5TWFwW3RdO2lmKCFnKXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUixILkZFQVRVUkVfTk9UX0lOX0RBVEFGSUxFLFwiT1BUSU1JWkVMWVwiLHQpLE10KHQsZSxbTigkLkZMQUdfS0VZX0lOVkFMSUQsdCldKTt2YXIgRT10aGlzLmdldEFsbERlY2lkZU9wdGlvbnMociksaD10aGlzLmRlY2lzaW9uU2VydmljZS5maW5kVmFsaWRhdGVkRm9yY2VkRGVjaXNpb24oZCxlLHQpO2YucHVzaC5hcHBseShmLGgucmVhc29ucyk7dmFyIEk9aC5yZXN1bHQ7aWYoSSl1PXtleHBlcmltZW50Om51bGwsdmFyaWF0aW9uOkksZGVjaXNpb25Tb3VyY2U6Si5GRUFUVVJFX1RFU1R9O2Vsc2V7dmFyIF89dGhpcy5kZWNpc2lvblNlcnZpY2UuZ2V0VmFyaWF0aW9uRm9yRmVhdHVyZShkLGcsZSxFKTtmLnB1c2guYXBwbHkoZixfLnJlYXNvbnMpLHU9Xy5yZXN1bHR9dmFyIHY9dS5kZWNpc2lvblNvdXJjZSx5PW51bGwhPT0obj1udWxsPT09KGk9dS5leHBlcmltZW50KXx8dm9pZCAwPT09aT92b2lkIDA6aS5rZXkpJiZ2b2lkIDAhPT1uP246bnVsbCxPPW51bGwhPT0ocz1udWxsPT09KG89dS52YXJpYXRpb24pfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmtleSkmJnZvaWQgMCE9PXM/czpudWxsLFI9RHIodSk7ITA9PT1SP3RoaXMubG9nZ2VyLmxvZyhxLklORk8sei5GRUFUVVJFX0VOQUJMRURfRk9SX1VTRVIsXCJPUFRJTUlaRUxZXCIsdCxsKTp0aGlzLmxvZ2dlci5sb2cocS5JTkZPLHouRkVBVFVSRV9OT1RfRU5BQkxFRF9GT1JfVVNFUixcIk9QVElNSVpFTFlcIix0LGwpO3ZhciBUPXt9LG09ITE7RVtleHBvcnRzLk9wdGltaXplbHlEZWNpZGVPcHRpb24uRVhDTFVERV9WQVJJQUJMRVNdfHxnLnZhcmlhYmxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtUW2Uua2V5XT1hLmdldEZlYXR1cmVWYXJpYWJsZVZhbHVlRnJvbVZhcmlhdGlvbih0LFIsdS52YXJpYXRpb24sZSxsKX0pKSwhRVtleHBvcnRzLk9wdGltaXplbHlEZWNpZGVPcHRpb24uRElTQUJMRV9ERUNJU0lPTl9FVkVOVF0mJih2PT09Si5GRUFUVVJFX1RFU1R8fHY9PT1KLlJPTExPVVQmJm90KGQpKSYmKHRoaXMuc2VuZEltcHJlc3Npb25FdmVudCh1LHQsbCxSLHApLG09ITApO3ZhciBBPVtdO0VbZXhwb3J0cy5PcHRpbWl6ZWx5RGVjaWRlT3B0aW9uLklOQ0xVREVfUkVBU09OU10mJihBPWYubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gTi5hcHBseSh2b2lkIDAsYyhbZVswXV0sZS5zbGljZSgxKSwhMSkpfSkpKTt2YXIgRD17ZmxhZ0tleTp0LGVuYWJsZWQ6Uix2YXJpYXRpb25LZXk6TyxydWxlS2V5OnksdmFyaWFibGVzOlQscmVhc29uczpBLGRlY2lzaW9uRXZlbnREaXNwYXRjaGVkOm19O3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5zZW5kTm90aWZpY2F0aW9ucyh3LkRFQ0lTSU9OLHt0eXBlOlguRkxBRyx1c2VySWQ6bCxhdHRyaWJ1dGVzOnAsZGVjaXNpb25JbmZvOkR9KSx7dmFyaWF0aW9uS2V5Ok8sZW5hYmxlZDpSLHZhcmlhYmxlczpULHJ1bGVLZXk6eSxmbGFnS2V5OnQsdXNlckNvbnRleHQ6ZSxyZWFzb25zOkF9fSxlLnByb3RvdHlwZS5nZXRBbGxEZWNpZGVPcHRpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1hKHt9LHRoaXMuZGVmYXVsdERlY2lkZU9wdGlvbnMpO3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZXhwb3J0cy5PcHRpbWl6ZWx5RGVjaWRlT3B0aW9uW2VdP3JbZV09ITA6dC5sb2dnZXIubG9nKHEuV0FSTklORyx6LlVOUkVDT0dOSVpFRF9ERUNJREVfT1BUSU9OLFwiT1BUSU1JWkVMWVwiLGUpfSkpOnRoaXMubG9nZ2VyLmxvZyhxLkRFQlVHLHouSU5WQUxJRF9ERUNJREVfT1BUSU9OUyxcIk9QVElNSVpFTFlcIikscn0sZS5wcm90b3R5cGUuZGVjaWRlRm9yS2V5cz1mdW5jdGlvbihlLHQscil7dmFyIGk9dGhpczt2b2lkIDA9PT1yJiYocj1bXSk7dmFyIG49e307aWYoIXRoaXMuaXNWYWxpZEluc3RhbmNlKCkpcmV0dXJuIHRoaXMubG9nZ2VyLmxvZyhxLkVSUk9SLHouSU5WQUxJRF9PQkpFQ1QsXCJPUFRJTUlaRUxZXCIsXCJkZWNpZGVGb3JLZXlzXCIpLG47aWYoMD09PXQubGVuZ3RoKXJldHVybiBuO3ZhciBvPXRoaXMuZ2V0QWxsRGVjaWRlT3B0aW9ucyhyKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcz1pLmRlY2lkZShlLHQscik7b1tleHBvcnRzLk9wdGltaXplbHlEZWNpZGVPcHRpb24uRU5BQkxFRF9GTEFHU19PTkxZXSYmIXMuZW5hYmxlZHx8KG5bdF09cyl9KSksbn0sZS5wcm90b3R5cGUuZGVjaWRlQWxsPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9W10pO3ZhciByPXRoaXMucHJvamVjdENvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7aWYoIXRoaXMuaXNWYWxpZEluc3RhbmNlKCl8fCFyKXJldHVybiB0aGlzLmxvZ2dlci5sb2cocS5FUlJPUix6LklOVkFMSURfT0JKRUNULFwiT1BUSU1JWkVMWVwiLFwiZGVjaWRlQWxsXCIpLHt9O3ZhciBpPU9iamVjdC5rZXlzKHIuZmVhdHVyZUtleU1hcCk7cmV0dXJuIHRoaXMuZGVjaWRlRm9yS2V5cyhlLGksdCl9LGUucHJvdG90eXBlLnVwZGF0ZU9kcFNldHRpbmdzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtlJiZ0aGlzLm9kcE1hbmFnZXImJnRoaXMub2RwTWFuYWdlci51cGRhdGVTZXR0aW5ncyhlLm9kcEludGVncmF0aW9uQ29uZmlnKX0sZS5wcm90b3R5cGUuc2VuZE9kcEV2ZW50PWZ1bmN0aW9uKGUsdCxyLGkpe2lmKHRoaXMub2RwTWFuYWdlcil7dmFyIG49bnVsbCE9dD90OlwiZnVsbHN0YWNrXCIsbz1uZXcgTWFwKHIpO2lmKHImJnIuc2l6ZT4wKXRyeXtyLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7XCJmcy11c2VyLWlkXCIhPT10LnRvTG93ZXJDYXNlKCkmJmVlLkZTX1VTRVJfSUQhPT10LnRvTG93ZXJDYXNlKCl8fChvLmRlbGV0ZSh0KSxvLnNldChlZS5GU19VU0VSX0lELGUpKX0pKX1jYXRjaChlKXt0aGlzLmxvZ2dlci53YXJuKHouT0RQX1NFTkRfRVZFTlRfSURFTlRJRklFUl9DT05WRVJTSU9OX0ZBSUxFRCl9dHJ5e3ZhciBzPW5ldyB5dChuLGUsbyxpKTt0aGlzLm9kcE1hbmFnZXIuc2VuZEV2ZW50KHMpfWNhdGNoKGUpe3RoaXMubG9nZ2VyLmVycm9yKEguT0RQX0VWRU5UX0ZBSUxFRCxlKX19ZWxzZSB0aGlzLmxvZ2dlci5lcnJvcihILk9EUF9FVkVOVF9GQUlMRURfT0RQX01BTkFHRVJfTUlTU0lORyl9LGUucHJvdG90eXBlLmlzT2RwSW50ZWdyYXRlZD1mdW5jdGlvbigpe3ZhciBlLHQscjtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0odD1udWxsPT09KGU9dGhpcy5wcm9qZWN0Q29uZmlnTWFuYWdlci5nZXRDb25maWcoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUub2RwSW50ZWdyYXRpb25Db25maWcpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmludGVncmF0ZWQpJiZ2b2lkIDAhPT1yJiZyfSxlLnByb3RvdHlwZS5pZGVudGlmeVVzZXI9ZnVuY3Rpb24oZSl7dGhpcy5vZHBNYW5hZ2VyJiZ0aGlzLmlzT2RwSW50ZWdyYXRlZCgpJiZ0aGlzLm9kcE1hbmFnZXIuaWRlbnRpZnlVc2VyKGUpfSxlLnByb3RvdHlwZS5mZXRjaFF1YWxpZmllZFNlZ21lbnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBsKHRoaXMsKGZ1bmN0aW9uKHIpe3N3aXRjaChyLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMub2RwTWFuYWdlcj9bNCx0aGlzLm9kcE1hbmFnZXIuZmV0Y2hRdWFsaWZpZWRTZWdtZW50cyhlLHQpXTpbMixudWxsXTtjYXNlIDE6cmV0dXJuWzIsci5zZW50KCldfX0pKX0pKX0sZS5wcm90b3R5cGUuZ2V0VnVpZD1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMub2RwTWFuYWdlcil7aWYodGhpcy5vZHBNYW5hZ2VyLmlzVnVpZEVuYWJsZWQoKSlyZXR1cm4gdGhpcy5vZHBNYW5hZ2VyLmdldFZ1aWQoKTt0aGlzLmxvZ2dlci5sb2cocS5XQVJOSU5HLFwiZ2V0VnVpZCgpIHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtXCIsXCJPUFRJTUlaRUxZXCIpfWVsc2UgbnVsbD09PShlPXRoaXMubG9nZ2VyKXx8dm9pZCAwPT09ZXx8ZS5lcnJvcihcIlVuYWJsZSB0byBnZXQgVlVJRCAtIE9EUCBNYW5hZ2VyIGlzIG5vdCBpbnN0YW50aWF0ZWQgeWV0LlwiKX0sZX0oKSxWcj17cGFyc2VVc2VyQWdlbnRJbmZvOmZ1bmN0aW9uKCl7dmFyIGU9KG5ldyBuLlVBUGFyc2VyKS5nZXRSZXN1bHQoKTtyZXR1cm57b3M6ZS5vcyxkZXZpY2U6ZS5kZXZpY2V9fX07ZnVuY3Rpb24gTXIoKXtyZXR1cm4gVnJ9dmFyIEZyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGdldCBMb2dMZXZlbCgpe3JldHVybiBleHBvcnRzLkxvZ0xldmVsfSxnZXRMb2dnZXI6TSxzZXRMb2dIYW5kbGVyOkYsTE9HX0xFVkVMOnEsY3JlYXRlTG9nZ2VyOk9lfSkseHI9TSgpO3guc2V0TG9nSGFuZGxlcihPZSgpKSx4LnNldExvZ0xldmVsKGV4cG9ydHMuTG9nTGV2ZWwuSU5GTyk7dmFyIGtyPSExLHdyPWZ1bmN0aW9uKGUpe3ZhciB0LHI7dHJ5e3ZhciBpPSExO2UuZXJyb3JIYW5kbGVyJiYocj1lLmVycm9ySGFuZGxlcixwPXIpLGUubG9nZ2VyJiYoeC5zZXRMb2dIYW5kbGVyKGUubG9nZ2VyKSx4LnNldExvZ0xldmVsKGV4cG9ydHMuTG9nTGV2ZWwuTk9UU0VUKSksdm9pZCAwIT09ZS5sb2dMZXZlbCYmeC5zZXRMb2dMZXZlbChlLmxvZ0xldmVsKTt0cnl7Z2UoZSksaT0hMH1jYXRjaChlKXt4ci5lcnJvcihlKX12YXIgbj12b2lkIDA7bnVsbD09ZS5ldmVudERpc3BhdGNoZXI/KG49bmV3IGFlKHtldmVudERpc3BhdGNoZXI6X2V9KSxrcnx8KG4uc2VuZFBlbmRpbmdFdmVudHMoKSxrcj0hMCkpOm49ZS5ldmVudERpc3BhdGNoZXI7dmFyIG89ZS5jbG9zaW5nRXZlbnREaXNwYXRjaGVyOyFlLmV2ZW50RGlzcGF0Y2hlciYmIW8mJndpbmRvdy5uYXZpZ2F0b3ImJlwic2VuZEJlYWNvblwiaW4gd2luZG93Lm5hdmlnYXRvciYmKG89dmUpO3ZhciBzPWUuZXZlbnRCYXRjaFNpemUsdT1lLmV2ZW50Rmx1c2hJbnRlcnZhbDtOZShlLmV2ZW50QmF0Y2hTaXplKXx8KHhyLndhcm4oXCJJbnZhbGlkIGV2ZW50QmF0Y2hTaXplICVzLCBkZWZhdWx0aW5nIHRvICVzXCIsZS5ldmVudEJhdGNoU2l6ZSwxMCkscz0xMCksVGUoZS5ldmVudEZsdXNoSW50ZXJ2YWwpfHwoeHIud2FybihcIkludmFsaWQgZXZlbnRGbHVzaEludGVydmFsICVzLCBkZWZhdWx0aW5nIHRvICVzXCIsZS5ldmVudEZsdXNoSW50ZXJ2YWwsMWUzKSx1PTFlMyk7dmFyIGw9ZCgpLGM9QWUoe2xvZ2dlcjp4cixlcnJvckhhbmRsZXI6bH0pLGY9e2Rpc3BhdGNoZXI6bixjbG9zaW5nRGlzcGF0Y2hlcjpvLGZsdXNoSW50ZXJ2YWw6dSxiYXRjaFNpemU6cyxtYXhRdWV1ZVNpemU6ZS5ldmVudE1heFF1ZXVlU2l6ZXx8MWU0LG5vdGlmaWNhdGlvbkNlbnRlcjpjfSxnPSEwPT09KG51bGw9PT0odD1lLm9kcE9wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmRpc2FibGVkKTtnJiZ4ci5pbmZvKHouT0RQX0RJU0FCTEVEKTt2YXIgRT1lLmNsaWVudEVuZ2luZSxoPWUuY2xpZW50VmVyc2lvbixJPWEoYSh7Y2xpZW50RW5naW5lOlwiamF2YXNjcmlwdC1zZGtcIn0sZSkse2V2ZW50UHJvY2Vzc29yOlVlLmNyZWF0ZUV2ZW50UHJvY2Vzc29yKGYpLGxvZ2dlcjp4cixlcnJvckhhbmRsZXI6bCxkYXRhZmlsZU1hbmFnZXI6ZS5zZGtLZXk/c3QoZS5zZGtLZXkseHIsZS5kYXRhZmlsZSxlLmRhdGFmaWxlT3B0aW9ucyk6dm9pZCAwLG5vdGlmaWNhdGlvbkNlbnRlcjpjLGlzVmFsaWRJbnN0YW5jZTppLG9kcE1hbmFnZXI6Zz92b2lkIDA6VnQuY3JlYXRlSW5zdGFuY2Uoe2xvZ2dlcjp4cixvZHBPcHRpb25zOmUub2RwT3B0aW9ucyxjbGllbnRFbmdpbmU6RSxjbGllbnRWZXJzaW9uOmh9KX0pLF89bmV3IGJyKEkpO3RyeXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7dmFyIHY9XCJvbnBhZ2VoaWRlXCJpbiB3aW5kb3c/XCJwYWdlaGlkZVwiOlwidW5sb2FkXCI7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIodiwoZnVuY3Rpb24oKXtfLmNsb3NlKCl9KSwhMSl9fWNhdGNoKGUpe3hyLmVycm9yKHouVU5BQkxFX1RPX0FUVEFDSF9VTkxPQUQsXCJJTkRFWF9CUk9XU0VSXCIsZS5tZXNzYWdlKX1yZXR1cm4gX31jYXRjaChlKXtyZXR1cm4geHIuZXJyb3IoZSksbnVsbH19LEdyPWZ1bmN0aW9uKCl7a3I9ITF9LEJyPXguc2V0TG9nSGFuZGxlcixLcj14LnNldExvZ0xldmVsLGpyPWEoYSh7fSxGcikse2xvZ2dpbmc6UmUsZXJyb3JIYW5kbGVyOmhlLGV2ZW50RGlzcGF0Y2hlcjpfZSxzZW5kQmVhY29uRXZlbnREaXNwYXRjaGVyOnZlLGVudW1zOnJlLHNldExvZ2dlcjpCcixzZXRMb2dMZXZlbDpLcixjcmVhdGVJbnN0YW5jZTp3cixfX2ludGVybmFsUmVzZXRSZXRyeVN0YXRlOkdyLE9wdGltaXplbHlEZWNpZGVPcHRpb246ZXhwb3J0cy5PcHRpbWl6ZWx5RGVjaWRlT3B0aW9uLGdldFVzZXJBZ2VudFBhcnNlcjpNcn0pO2V4cG9ydHMuTE9HX0xFVkVMPXEsZXhwb3J0cy5fX2ludGVybmFsUmVzZXRSZXRyeVN0YXRlPUdyLGV4cG9ydHMuY3JlYXRlSW5zdGFuY2U9d3IsZXhwb3J0cy5jcmVhdGVMb2dnZXI9T2UsZXhwb3J0cy5kZWZhdWx0PWpyLGV4cG9ydHMuZW51bXM9cmUsZXhwb3J0cy5lcnJvckhhbmRsZXI9aGUsZXhwb3J0cy5ldmVudERpc3BhdGNoZXI9X2UsZXhwb3J0cy5nZXRMb2dnZXI9TSxleHBvcnRzLmdldFVzZXJBZ2VudFBhcnNlcj1NcixleHBvcnRzLmxvZ2dpbmc9UmUsZXhwb3J0cy5zZW5kQmVhY29uRXZlbnREaXNwYXRjaGVyPXZlLGV4cG9ydHMuc2V0TG9nSGFuZGxlcj1GLGV4cG9ydHMuc2V0TG9nTGV2ZWw9S3IsZXhwb3J0cy5zZXRMb2dnZXI9QnI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcHRpbWl6ZWx5LmJyb3dzZXIubWluLmpzLm1hcFxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjM1LmpzXCIpKTtcblxudmFyIF9tZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWQ1LmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuY29uc3QgdjMgPSAoMCwgX3YuZGVmYXVsdCkoJ3YzJywgMHgzMCwgX21kLmRlZmF1bHQpO1xudmFyIF9kZWZhdWx0ID0gdjM7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnR7b3B0aW9ucyBhcyByLEZyYWdtZW50IGFzIGV9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciB0PS9bXCImPF0vO2Z1bmN0aW9uIG4ocil7aWYoMD09PXIubGVuZ3RofHwhMT09PXQudGVzdChyKSlyZXR1cm4gcjtmb3IodmFyIGU9MCxuPTAsbz1cIlwiLGY9XCJcIjtuPHIubGVuZ3RoO24rKyl7c3dpdGNoKHIuY2hhckNvZGVBdChuKSl7Y2FzZSAzNDpmPVwiJnF1b3Q7XCI7YnJlYWs7Y2FzZSAzODpmPVwiJmFtcDtcIjticmVhaztjYXNlIDYwOmY9XCImbHQ7XCI7YnJlYWs7ZGVmYXVsdDpjb250aW51ZX1uIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksbys9ZixlPW4rMX1yZXR1cm4gbiE9PWUmJihvKz1yLnNsaWNlKGUsbikpLG99dmFyIG89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxmPTAsaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHUoZSx0LG4sbyxpLHUpe3R8fCh0PXt9KTt2YXIgYSxjLHA9dDtpZihcInJlZlwiaW4gcClmb3IoYyBpbiBwPXt9LHQpXCJyZWZcIj09Yz9hPXRbY106cFtjXT10W2NdO3ZhciBsPXt0eXBlOmUscHJvcHM6cCxrZXk6bixyZWY6YSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1mLF9faTotMSxfX3U6MCxfX3NvdXJjZTppLF9fc2VsZjp1fTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoYT1lLmRlZmF1bHRQcm9wcykpZm9yKGMgaW4gYSl2b2lkIDA9PT1wW2NdJiYocFtjXT1hW2NdKTtyZXR1cm4gci52bm9kZSYmci52bm9kZShsKSxsfWZ1bmN0aW9uIGEocil7dmFyIHQ9dShlLHt0cGw6cixleHByczpbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKX0pO3JldHVybiB0LmtleT10Ll9fdix0fXZhciBjPXt9LHA9L1tBLVpdL2c7ZnVuY3Rpb24gbChlLHQpe2lmKHIuYXR0cil7dmFyIGY9ci5hdHRyKGUsdCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGYpcmV0dXJuIGZ9aWYodD1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9PXImJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnZhbHVlT2Y/ci52YWx1ZU9mKCk6cn0odCksXCJyZWZcIj09PWV8fFwia2V5XCI9PT1lKXJldHVyblwiXCI7aWYoXCJzdHlsZVwiPT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIHQpe3ZhciBpPVwiXCI7Zm9yKHZhciB1IGluIHQpe3ZhciBhPXRbdV07aWYobnVsbCE9YSYmXCJcIiE9PWEpe3ZhciBsPVwiLVwiPT11WzBdP3U6Y1t1XXx8KGNbdV09dS5yZXBsYWNlKHAsXCItJCZcIikudG9Mb3dlckNhc2UoKSkscz1cIjtcIjtcIm51bWJlclwiIT10eXBlb2YgYXx8bC5zdGFydHNXaXRoKFwiLS1cIil8fG8udGVzdChsKXx8KHM9XCJweDtcIiksaT1pK2wrXCI6XCIrYStzfX1yZXR1cm4gZSsnPVwiJytuKGkpKydcIid9cmV0dXJuIG51bGw9PXR8fCExPT09dHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdHx8XCJvYmplY3RcIj09dHlwZW9mIHQ/XCJcIjohMD09PXQ/ZTplKyc9XCInK24oXCJcIit0KSsnXCInfWZ1bmN0aW9uIHMocil7aWYobnVsbD09cnx8XCJib29sZWFuXCI9PXR5cGVvZiByfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXJldHVybiBudWxsO2lmKFwib2JqZWN0XCI9PXR5cGVvZiByKXtpZih2b2lkIDA9PT1yLmNvbnN0cnVjdG9yKXJldHVybiByO2lmKGkocikpe2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKXJbZV09cyhyW2VdKTtyZXR1cm4gcn19cmV0dXJuIG4oXCJcIityKX1leHBvcnR7dSBhcyBqc3gsbCBhcyBqc3hBdHRyLHUgYXMganN4REVWLHMgYXMganN4RXNjYXBlLGEgYXMganN4VGVtcGxhdGUsdSBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgcmVuZGVyLCBoeWRyYXRlLCB1bm1vdW50Q29tcG9uZW50QXROb2RlIH0gZnJvbSAncHJlYWN0L2NvbXBhdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb290KGNvbnRhaW5lcikge1xuXHRyZXR1cm4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXHRcdHJlbmRlcjogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG5cdFx0XHRyZW5kZXIoY2hpbGRyZW4sIGNvbnRhaW5lcik7XG5cdFx0fSxcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblx0XHR1bm1vdW50OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcik7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlkcmF0ZVJvb3QoY29udGFpbmVyLCBjaGlsZHJlbikge1xuXHRoeWRyYXRlKGNoaWxkcmVuLCBjb250YWluZXIpO1xuXHRyZXR1cm4gY3JlYXRlUm9vdChjb250YWluZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG5cdGNyZWF0ZVJvb3QsXG5cdGh5ZHJhdGVSb290XG59O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGluaXRpYWxSZWZlcnJhbEZvcm0sIFJlZmVycmFsRm9ybURhdGEgfSBmcm9tICcuL1JlZmVycmFsRGF0YSc7XG5pbXBvcnQgeyBpbml0aWFsUHJvRGF0YSwgUHJvRGF0YSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC90eXBlcyc7XG5cbmludGVyZmFjZSBSZWZlcnJhbENvbnRleHREYXRhIHtcbiAgcmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGE7XG4gIHVwZGF0ZVJlZmVycmFsOiAocmVmZXJyYWw6IFBhcnRpYWw8UmVmZXJyYWxGb3JtRGF0YT4pID0+IHZvaWQ7XG4gIHBob25lVmVyaWZpY2F0aW9uQ291bnREb3duOiBudW1iZXI7XG4gIHVwZGF0ZVBob25lVmVyaWZpY2F0aW9uQ291bnREb3duOiAoY291bnREb3duOiBudW1iZXIpID0+IHZvaWQ7XG4gIHByb0luZm86IFByb0RhdGE7XG4gIHVwZGF0ZVByb0luZm86IChwcm9JbmZvOiBQcm9EYXRhKSA9PiB2b2lkO1xuICBpc1Byb1RyYWNraW5nU3RhdHVzZXM6IGJvb2xlYW47XG4gIHNldElzUHJvVHJhY2tpbmdTdGF0dXNlczogKGlzVHJhY2tpbmc6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmNvbnN0IENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFJlZmVycmFsQ29udGV4dERhdGE+KHtcbiAgcmVmZXJyYWw6IGluaXRpYWxSZWZlcnJhbEZvcm0oKSxcbiAgdXBkYXRlUmVmZXJyYWw6ICgpID0+IHtcbiAgICByZXR1cm47XG4gIH0sXG4gIHBob25lVmVyaWZpY2F0aW9uQ291bnREb3duOiAwLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgdXBkYXRlUGhvbmVWZXJpZmljYXRpb25Db3VudERvd246IChfKSA9PiB7fSxcbiAgcHJvSW5mbzogaW5pdGlhbFByb0RhdGEoKSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIHVwZGF0ZVByb0luZm86IChfKSA9PiB7fSxcbiAgaXNQcm9UcmFja2luZ1N0YXR1c2VzOiBmYWxzZSxcbiAgc2V0SXNQcm9UcmFja2luZ1N0YXR1c2VzOiAoKSA9PiB7fVxufSk7XG5cbmZ1bmN0aW9uIHVzZVJlZmVycmFsQ29udGV4dCgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoQ29udGV4dCk7XG59XG5cbmV4cG9ydCB7IENvbnRleHQsIHVzZVJlZmVycmFsQ29udGV4dCB9O1xuIiwiZXhwb3J0IGludGVyZmFjZSBSZWZlcnJhbEZvcm1EYXRhIHtcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgdXNlcl9hZ2VudDogc3RyaW5nO1xuICBmaXJzdF9uYW1lOiBzdHJpbmc7XG4gIGxhc3RfbmFtZTogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBwaG9uZTogc3RyaW5nO1xuICBwb3N0YWxfY29kZTogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fdHlwZT86IHN0cmluZztcbiAgaW50ZXJlc3RzOiBzdHJpbmdbXTtcbiAgdGF4X2ludGVudHM6IHN0cmluZ1tdO1xuICB0YXhfcXVlc3Rpb25zOiBzdHJpbmc7XG4gIHRheF9hZHZpY2U6IHN0cmluZ1tdO1xuICB0YXhfaGlzdG9yeTogc3RyaW5nO1xuICBjb21wbGV4aXR5X2NvbmNlcm46IHN0cmluZztcbiAgdGF4X2NvbmZpZGVuY2U6IHN0cmluZztcbiAgaW1wb3J0YW5jZTogc3RyaW5nO1xuICBsZWFkU291cmNlOiBzdHJpbmc7XG4gIHRheF9zaXR1YXRpb246IHN0cmluZztcbiAgcHVycG9zZTogc3RyaW5nO1xuICBwaF9wZXJzb25hbF9pbnRlbnRzPzogc3RyaW5nW107XG4gIHBoX3NlbGZfZW1wbG95ZWRfc21hbGxfYnVzaW5lc3NfaW50ZW50Pzogc3RyaW5nW107XG4gIHBoX3RheF9pc3N1ZXM/OiBzdHJpbmdbXTtcbiAgcGhfdGF4X2FkdmljZT86IHN0cmluZ1tdO1xuICBwaF9zb21ldGhpbmdfZWxzZT86IHN0cmluZztcbiAgcGhfdXJnZW5jeT86IHN0cmluZztcbiAgdGF4X2J1c2luZXNzX2ludGVudHM/OiBzdHJpbmdbXTtcbiAgdGF4X3BlcnNvbmFsX2ludGVudHM/OiBzdHJpbmdbXTtcbiAgdGVsbF91c19tb3JlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbFJlZmVycmFsRm9ybSgpOiBSZWZlcnJhbEZvcm1EYXRhIHtcbiAgcmV0dXJuIHtcbiAgICB0aW1lem9uZTogJycsXG4gICAgdXNlcl9hZ2VudDogJycsXG4gICAgZmlyc3RfbmFtZTogJycsXG4gICAgbGFzdF9uYW1lOiAnJyxcbiAgICBlbWFpbDogJycsXG4gICAgcGhvbmU6ICcnLFxuICAgIHBvc3RhbF9jb2RlOiAnJyxcbiAgICBpbnRlcmVzdHM6IFtdLFxuICAgIHRheF9pbnRlbnRzOiBbXSxcbiAgICB0YXhfcXVlc3Rpb25zOiAnJyxcbiAgICB0YXhfYWR2aWNlOiBbXSxcbiAgICB0YXhfaGlzdG9yeTogJycsXG4gICAgY29tcGxleGl0eV9jb25jZXJuOiAnJyxcbiAgICB0YXhfY29uZmlkZW5jZTogJycsXG4gICAgaW1wb3J0YW5jZTogJycsXG4gICAgbGVhZFNvdXJjZTogJycsXG4gICAgdGF4X3NpdHVhdGlvbjogJycsXG4gICAgcHVycG9zZTogJydcbiAgfTtcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgUHJvRGF0YSB7XG4gIHBhcnRuZXJfdXJuOiBzdHJpbmc7XG4gIGNvbnRhY3RfbmFtZTogc3RyaW5nO1xuICBjb21wYW55X25hbWU6IHN0cmluZztcbiAgYWNjb3VudF9rZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxQcm9EYXRhKCk6IFByb0RhdGEge1xuICByZXR1cm4ge1xuICAgIHBhcnRuZXJfdXJuOiAnJyxcbiAgICBjb250YWN0X25hbWU6ICcnLFxuICAgIGNvbXBhbnlfbmFtZTogJycsXG4gICAgYWNjb3VudF9rZXk6ICcnXG4gIH07XG59XG4iLCJpbXBvcnQgeyBSZWFjdE5vZGUsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSAnLi9SZWZlcnJhbENvbnRleHQnO1xuaW1wb3J0IHsgaW5pdGlhbFJlZmVycmFsRm9ybSwgUmVmZXJyYWxGb3JtRGF0YSB9IGZyb20gJy4vUmVmZXJyYWxEYXRhJztcbmltcG9ydCB7IGluaXRpYWxQcm9EYXRhLCBQcm9EYXRhIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcblxuZnVuY3Rpb24gUmVmZXJyYWxDb250ZXh0UHJvdmlkZXIoe1xuICBjaGlsZHJlblxufTogUmVhZG9ubHk8eyBjaGlsZHJlbjogUmVhY3ROb2RlIH0+KSB7XG4gIGNvbnN0IFtyZWZlcnJhbCwgc2V0UmVmZXJyYWxdID0gdXNlU3RhdGUoaW5pdGlhbFJlZmVycmFsRm9ybSgpKTtcbiAgY29uc3QgW3Byb0luZm8sIHNldFByb0luZm9dID0gdXNlU3RhdGUoaW5pdGlhbFByb0RhdGEoKSk7XG4gIGNvbnN0IFtwaG9uZVZlcmlmaWNhdGlvbkNvdW50RG93biwgc2V0UGhvbmVWZXJpZmljYXRpb25Db3VudERvd25dID1cbiAgICB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3N0YXJ0VGltZXIsIHNldFN0YXJ0VGltZXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNQcm9UcmFja2luZ1N0YXR1c2VzLCBzZXRJc1Byb1RyYWNraW5nU3RhdHVzZXNdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZVJlZmVycmFsKHVwZGF0ZTogUGFydGlhbDxSZWZlcnJhbEZvcm1EYXRhPikge1xuICAgIHNldFJlZmVycmFsKHtcbiAgICAgIC4uLnJlZmVycmFsLFxuICAgICAgLi4udXBkYXRlXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQaG9uZVZlcmlmaWNhdGlvbkNvdW50RG93bihjb3VudERvd246IG51bWJlcikge1xuICAgIHNldFBob25lVmVyaWZpY2F0aW9uQ291bnREb3duKGNvdW50RG93bik7XG4gICAgc2V0U3RhcnRUaW1lcih0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0VGltZXJDb3VudGRvd24oKSB7XG4gICAgY29uc3QgbXlJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHNldFBob25lVmVyaWZpY2F0aW9uQ291bnREb3duKChwcmV2Q291bnREb3duKSA9PiB7XG4gICAgICAgIGlmIChwcmV2Q291bnREb3duID4gMSkge1xuICAgICAgICAgIHJldHVybiBwcmV2Q291bnREb3duIC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKG15SW50ZXJ2YWwpO1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIC8vIFRpbWVyIGNvdW50ZG93biB0aGF0IHNldHMgdGhlIG51bWJlciBlYWNoIHNlY29uZC5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXN0YXJ0VGltZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0U3RhcnRUaW1lcihmYWxzZSk7XG4gICAgc3RhcnRUaW1lckNvdW50ZG93bigpO1xuICB9LCBbc3RhcnRUaW1lcl0pO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb0luZm8ocHJvSW5mbzogUHJvRGF0YSkge1xuICAgIHNldFByb0luZm8ocHJvSW5mbyk7XG4gIH1cblxuICBjb25zdCByZWZlcnJhbENvbnRleHRPYmplY3QgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVmZXJyYWwsXG4gICAgICB1cGRhdGVSZWZlcnJhbCxcbiAgICAgIHByb0luZm8sXG4gICAgICB1cGRhdGVQcm9JbmZvLFxuICAgICAgcGhvbmVWZXJpZmljYXRpb25Db3VudERvd24sXG4gICAgICB1cGRhdGVQaG9uZVZlcmlmaWNhdGlvbkNvdW50RG93bixcbiAgICAgIGlzUHJvVHJhY2tpbmdTdGF0dXNlcyxcbiAgICAgIHNldElzUHJvVHJhY2tpbmdTdGF0dXNlc1xuICAgIH07XG4gIH0sIFtyZWZlcnJhbCwgcHJvSW5mbywgcGhvbmVWZXJpZmljYXRpb25Db3VudERvd24sIGlzUHJvVHJhY2tpbmdTdGF0dXNlc10pO1xuICByZXR1cm4gKFxuICAgIDxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtyZWZlcnJhbENvbnRleHRPYmplY3R9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgUmVmZXJyYWxDb250ZXh0UHJvdmlkZXIgfTtcbiIsImNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG5leHBvcnQgZGVmYXVsdCB7IHJhbmRvbVVVSUQgfTtcbiIsImxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgICBpZiAodHlwZW9mIGNyeXB0byA9PT0gJ3VuZGVmaW5lZCcgfHwgIWNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRSYW5kb21WYWx1ZXMgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59XG4iLCJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG5jb25zdCBieXRlVG9IZXggPSBbXTtcbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgICByZXR1cm4gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gK1xuICAgICAgICBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICtcbiAgICAgICAgJy0nICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gK1xuICAgICAgICBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArXG4gICAgICAgICctJyArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gK1xuICAgICAgICAnLScgK1xuICAgICAgICBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICtcbiAgICAgICAgJy0nICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICAgIGNvbnN0IHV1aWQgPSB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQpO1xuICAgIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHV1aWQ7XG59XG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7XG4iLCJpbXBvcnQgbmF0aXZlIGZyb20gJy4vbmF0aXZlLmpzJztcbmltcG9ydCBybmcgZnJvbSAnLi9ybmcuanMnO1xuaW1wb3J0IHsgdW5zYWZlU3RyaW5naWZ5IH0gZnJvbSAnLi9zdHJpbmdpZnkuanMnO1xuZnVuY3Rpb24gX3Y0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tID8/IG9wdGlvbnMucm5nPy4oKSA/PyBybmcoKTtcbiAgICBpZiAocm5kcy5sZW5ndGggPCAxNikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JhbmRvbSBieXRlcyBsZW5ndGggbXVzdCBiZSA+PSAxNicpO1xuICAgIH1cbiAgICBybmRzWzZdID0gKHJuZHNbNl0gJiAweDBmKSB8IDB4NDA7XG4gICAgcm5kc1s4XSA9IChybmRzWzhdICYgMHgzZikgfCAweDgwO1xuICAgIGlmIChidWYpIHtcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCArIDE2ID4gYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVVSUQgYnl0ZSByYW5nZSAke29mZnNldH06JHtvZmZzZXQgKyAxNX0gaXMgb3V0IG9mIGJ1ZmZlciBib3VuZHNgKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG4gICAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgaWYgKG5hdGl2ZS5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZS5yYW5kb21VVUlEKCk7XG4gICAgfVxuICAgIHJldHVybiBfdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpO1xufVxuZXhwb3J0IGRlZmF1bHQgdjQ7XG4iLCJpbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuLy8gUHJvdmlkZXMgYSB1bmlxdWUgdXNlciBJRCBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbi8vIFByaW1hcmlseSB1c2VkIGZvciB0cmFja2luZyB1c2VyIGFjdGl2aXR5LCBub3QgZm9yIGF1dGhlbnRpY2F0aW9uLlxuLy8gSWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluLCB0aGUgSUQgdGhlIHVzZXIncyBheGlkLlxuLy8gSWYgdGhlIHVzZXIgaXMgbm90IGxvZ2dlZCBpbiBhbmQgdGhlIElEIGlzIG5vdCBpbiBzZXNzaW9uU3RvcmFnZSwgYSBuZXcgSUQgaXMgZ2VuZXJhdGVkIGFuZCBzdG9yZWQgaW4gc2Vzc2lvblN0b3JhZ2UuXG5mdW5jdGlvbiBnZXRVbmlxdWVTZXNzaW9uVXNlcklkKCkge1xuICBjb25zdCB1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1aWQnKTtcblxuICBpZiAoIXVpZCkge1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3VpZCcsIGBhbm9ueW1vdXMrJHt1dWlkdjQoKX1gKTtcbiAgfVxuXG4gIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1aWQnKSA/PyAnJztcbn1cblxuZXhwb3J0IHsgZ2V0VW5pcXVlU2Vzc2lvblVzZXJJZCB9O1xuIiwiZW51bSBUYXhTZXJ2aWNlT3B0aW9ucyB7XG4gIC8vICpPcmRlciBtYXR0ZXJzKlxuICBwZXJzb25hbF90YXhlcyA9ICdQZXJzb25hbCBUYXhlcycsXG4gIHNlbGZfZW1wbG95ZWQgPSAnU2VsZi1FbXBsb3ltZW50IFRheGVzJyxcbiAgc21hbGxfYnVzaW5lc3MgPSAnU21hbGwtQnVzaW5lc3MgVGF4ZXMnXG59XG5cbmV4cG9ydCB7IFRheFNlcnZpY2VPcHRpb25zIH07XG4iLCJleHBvcnQgZW51bSBUYXhBZHZpY2VPcHRpb25zIHtcbiAgLy8gKipPcmRlciBtYXR0ZXJzISEqKlxuICB3aXRoaG9sZGluZ19hZGp1c3RtZW50ID0gJ1dpdGhob2xkaW5nIEFkanVzdG1lbnQnLFxuICByZWFsX2VzdGF0ZV90YXhlcyA9ICdSZWFsIEVzdGF0ZSBUYXhlcycsXG4gIGluaGVyaXRhbmNlX29yX2VzdGF0ZV90YXhlcyA9ICdJbmhlcml0YW5jZSBvciBFc3RhdGUgVGF4ZXMnLFxuICBvdGhlciA9ICdPdGhlcidcbn1cbiIsImV4cG9ydCBlbnVtIFRheEludGVudE9wdGlvbnMge1xuICBnaXZlX21lX2FkdmljZSA9ICdHaXZlIG1lIGFkdmljZScsXG4gIGZpbGVfZm9yX21lID0gJ0ZpbGUgYSByZXR1cm4gZm9yIG1lJyxcbiAgdGF4X3Byb2JsZW1fcmVzb2x1dGlvbiA9ICdSZXNvbHZlIGEgdGF4IHByb2JsZW0nLFxuICBvdGhlciA9ICdPdGhlcidcbn1cbiIsImV4cG9ydCBlbnVtIFZlcmlmaWNhdGlvblN0YXR1cyB7XG4gIGZhaWxlZCxcbiAgaW5pdGlhbCxcbiAgc3VibWl0dGluZ1JlZmVycmFsLFxuICBzdWNjZXNzLFxuICByZXNlbmRpbmdDb2RlLFxuICByZXNlbmRDb2RlU3VjY2VzcyxcbiAgdmVyaWZ5aW5nQ29kZVxufVxuIiwiZXhwb3J0IGVudW0gUEhQZXJzb25hbEludGVudE9wdGlvbnMge1xuICBmaWxlX3RheGVzID0gJ0ZpbGUgdGF4ZXMnLFxuICBoZWxwX3dpdGhfdGF4X2lzc3VlcyA9ICdIZWxwIHdpdGggdGF4IGlzc3VlcycsXG4gIGFuc3dlcl9nZW5lcmFsX3F1ZXN0aW9ucyA9ICdBbnN3ZXIgZ2VuZXJhbCBxdWVzdGlvbnMnLFxuICBzb21ldGhpbmdfZWxzZSA9ICdTb21ldGhpbmcgZWxzZSdcbn1cbiIsImV4cG9ydCBlbnVtIFBIVXJnZW5jeU9wdGlvbnMge1xuICB3aXRoaW5fbmV4dF93ZWVrID0gJ1dpdGhpbiB0aGUgbmV4dCB3ZWVrJyxcbiAgd2l0aGluX25leHRfbW9udGggPSAnV2l0aGluIHRoZSBuZXh0IG1vbnRoJyxcbiAgd2l0aGluX25leHRfZmV3X21vbnRocyA9ICdXaXRoaW4gdGhlIG5leHQgZmV3IG1vbnRocycsXG4gIG5vdF9pbl9hX3J1c2ggPSBcIkknbSBub3QgaW4gYSBydXNoXCIsXG4gIGRvbnRfa25vd195ZXQgPSBcIkkgZG9uJ3Qga25vdyB5ZXRcIlxufVxuIiwiZXhwb3J0IGVudW0gUEhUYXhJc3N1ZU9wdGlvbnMge1xuICBhdWRpdCA9ICdBdWRpdCcsXG4gIGlyc19ub3RpY2UgPSAnSVJTIG5vdGljZScsXG4gIHBheWluZ19iYWNrX3RheGVzID0gJ1BheWluZyBiYWNrIHRheGVzJyxcbiAgc29tZXRoaW5nX2Vsc2UgPSAnU29tZXRoaW5nIGVsc2UnXG59XG4iLCJleHBvcnQgZW51bSBQSEFkdmljZU9wdGlvbnMge1xuICByZWZ1bmRfb3JfcmV0dXJuID0gJ015IHJlZnVuZCBvciByZXR1cm4gc3RhdHVzJyxcbiAgc2VsZl9maWxlZF9jb3JyZWN0bHkgPSAnQ2hlY2tpbmcgaWYgSSBzZWxmLWZpbGVkIGNvcnJlY3RseScsXG4gIHNvbWV0aGluZ19lbHNlID0gJ1NvbWV0aGluZyBlbHNlJ1xufVxuIiwiZXhwb3J0IGVudW0gUEhTZWxmRW1wU21hbGxCdXNJbnRlbnRPcHRpb25zIHtcbiAgZmlsZV90YXhlcyA9ICdGaWxlIHRheGVzJyxcbiAgaGFuZGxlX2Jvb2trZWVwaW5nX29yX3BheXJvbGwgPSAnSGFuZGxlIGJvb2trZWVwaW5nIG9yIHBheXJvbGwnLFxuICBoZWxwX3dpdGhfdGF4X2lzc3VlcyA9ICdIZWxwIHdpdGggdGF4IGlzc3VlcycsXG4gIGFuc3dlcl9nZW5lcmFsX3F1ZXN0aW9ucyA9ICdBbnN3ZXIgZ2VuZXJhbCBxdWVzdGlvbnMnLFxuICBzb21ldGhpbmdfZWxzZSA9ICdTb21ldGhpbmcgZWxzZSdcbn1cbiIsImV4cG9ydCB0eXBlIEVudmlyb25tZW50ID0gJ2RldicgfCAndGVzdCcgfCAncWEnIHwgJ3Byb2QnO1xuXG5jb25zdCBSRUNBUFRDSEFfS0VZU19WMzogUmVjb3JkPEVudmlyb25tZW50LCBzdHJpbmc+ID0ge1xuICBkZXY6ICc2TGNUTjhrcUFBQUFBQ3hyMEw3U2JwczBFaUI1SEZsV28wYXB3ZWRLJyxcbiAgdGVzdDogJzZMY1ROOGtxQUFBQUFDeHIwTDdTYnBzMEVpQjVIRmxXbzBhcHdlZEsnLFxuICBxYTogJzZMY1ROOGtxQUFBQUFDeHIwTDdTYnBzMEVpQjVIRmxXbzBhcHdlZEsnLFxuICBwcm9kOiAnNkxjVE44a3FBQUFBQUN4cjBMN1NicHMwRWlCNUhGbFdvMGFwd2VkSydcbn07XG5cbmNvbnN0IE9QVElNSVpFTFlfS0VZUzogUmVjb3JkPEVudmlyb25tZW50LCBzdHJpbmc+ID0ge1xuICBkZXY6ICdUQnhFdEtqNkNLaDJFeERVdW4zeXInLFxuICB0ZXN0OiAnUkh6UWk4ZVdmYjgxN1FSYTdNOEY0JyxcbiAgcWE6ICc3dzliRzJZb0Nvd3lSYXczelBMVzknLFxuICBwcm9kOiAnUVRCQnJpbTR2R0pnU3ROYUFrZ1pOJ1xufTtcblxuY29uc3QgQVBPUEhFTklBX0tFWVM6IFJlY29yZDxFbnZpcm9ubWVudCwgc3RyaW5nPiA9IHtcbiAgZGV2OiAnSEh3ajlJbHVPeTZGNnQ2N3BHZlJlNDdDY24zUm9SYXUzU1VKbEN0ZicsXG4gIHRlc3Q6ICdISHdqOUlsdU95NkY2dDY3cEdmUmU0N0NjbjNSb1JhdTNTVUpsQ3RmJyxcbiAgcWE6ICdsa0UzWVhPTjhzOEFGOGFaVDZlTWxEMFBYV3d1NTc1NHRWa252SHpqJyxcbiAgcHJvZDogJ2hud0E3aGNxdXEyM1lzenZYRUxqeDk1ZGtLeGhNN1B5MnlySkx2RUEnXG59O1xuXG5jb25zdCBQQVVMSE9PRF9QQVJUTkVSX1VSTjogUmVjb3JkPEVudmlyb25tZW50LCBzdHJpbmdbXT4gPSB7XG4gIGRldjogWyd1cm46bGFtcG86c2FfcGFydG5lcl9pZDoxMDUzNyddLFxuICB0ZXN0OiBbJ3VybjpsYW1wbzpzYV9wYXJ0bmVyX2lkOjEwNTM3J10sXG4gIHFhOiBbJ3VybjpsYW1wbzpzYV9wYXJ0bmVyX2lkOjQxOTI3J10sXG4gIHByb2Q6IFsndXJuOmxhbXBvOnNhX3BhcnRuZXJfaWQ6NjQwMDUnXVxufTtcblxuY29uc3QgS05BUFBTX1BBUlRORVJfVVJOOiBSZWNvcmQ8RW52aXJvbm1lbnQsIHN0cmluZ1tdPiA9IHtcbiAgZGV2OiBbJ3VybjpsYW1wbzpzYV9wYXJ0bmVyX2lkOjI1MDQ2JywgJ3VybjpsYW1wbzpzYV9wYXJ0bmVyX2lkOjI3NzMzJ10sXG4gIHRlc3Q6IFsndXJuOmxhbXBvOnNhX3BhcnRuZXJfaWQ6MjUwNDYnLCAndXJuOmxhbXBvOnNhX3BhcnRuZXJfaWQ6Mjc3MzMnXSxcbiAgcWE6IFsndXJuOmxhbXBvOnNhX3BhcnRuZXJfaWQ6MjUwNDYnLCAndXJuOmxhbXBvOnNhX3BhcnRuZXJfaWQ6NTQ3MjYnXSxcbiAgcHJvZDogWyd1cm46bGFtcG86c2FfcGFydG5lcl9pZDo1MDQ2NiddXG59O1xuXG5jb25zdCBQUklNRV9QQVJUTkVSX1VSTjogUmVjb3JkPEVudmlyb25tZW50LCBzdHJpbmdbXT4gPSB7XG4gIGRldjogWyd1cm46bGFtcG86c2FfcGFydG5lcl9pZDoyNjk1NSddLFxuICB0ZXN0OiBbJ3VybjpsYW1wbzpzYV9wYXJ0bmVyX2lkOjI2OTU1J10sXG4gIHFhOiBbJ3VybjpsYW1wbzpzYV9wYXJ0bmVyX2lkOjk0NSddLFxuICBwcm9kOiBbJ3VybjpsYW1wbzpzYV9wYXJ0bmVyX2lkOjYzODk4J11cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnZpcm9ubWVudChob3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3QpOiBFbnZpcm9ubWVudCB8ICdlcnInIHtcbiAgaWYgKC9sb2NhbGhvc3R8MTI3XFwuMFxcLjBcXC4xLy50ZXN0KGhvc3QpKSB7XG4gICAgcmV0dXJuICdkZXYnO1xuICB9XG4gIGlmICgvdGVzdFxcLi8udGVzdChob3N0KSkge1xuICAgIHJldHVybiAndGVzdCc7XG4gIH1cbiAgaWYgKC9xYVxcLi8udGVzdChob3N0KSkge1xuICAgIHJldHVybiAncWEnO1xuICB9XG4gIGlmICgvcmFtc2V5c29sdXRpb25zXFwuLy50ZXN0KGhvc3QpKSB7XG4gICAgcmV0dXJuICdwcm9kJztcbiAgfVxuXG4gIHJldHVybiAnZXJyJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY2FwdGNoYUtleVYzKGVudiA9IGVudmlyb25tZW50KCkpOiBzdHJpbmcge1xuICBpZiAoZW52ID09PSAnZXJyJykge1xuICAgIHJldHVybiAnZXJyJztcbiAgfVxuXG4gIHJldHVybiBSRUNBUFRDSEFfS0VZU19WM1tlbnZdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3B0aW1pemVseUtleShlbnYgPSBlbnZpcm9ubWVudCgpKTogc3RyaW5nIHtcbiAgaWYgKGVudiA9PT0gJ2VycicpIHtcbiAgICByZXR1cm4gJ2Vycic7XG4gIH1cblxuICByZXR1cm4gT1BUSU1JWkVMWV9LRVlTW2Vudl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcG9waGVuaWFLZXkoZW52ID0gZW52aXJvbm1lbnQoKSk6IHN0cmluZyB7XG4gIGlmIChlbnYgPT09ICdlcnInKSB7XG4gICAgcmV0dXJuICdlcnInO1xuICB9XG5cbiAgcmV0dXJuIEFQT1BIRU5JQV9LRVlTW2Vudl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYXRpb25hbFByb1F1ZXJ5UGFyYW0oXG4gIHBhcnRuZXJVcm46IHN0cmluZyxcbiAgZW52ID0gZW52aXJvbm1lbnQoKVxuKTogc3RyaW5nIHtcbiAgaWYgKGVudiA9PT0gJ2VycicpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoUEFVTEhPT0RfUEFSVE5FUl9VUk5bZW52XS5pbmNsdWRlcyhwYXJ0bmVyVXJuKSkge1xuICAgIHJldHVybiBgbmF0aW9uYWxfcHJvPVBBVUxIT09EYDtcbiAgfSBlbHNlIGlmIChLTkFQUFNfUEFSVE5FUl9VUk5bZW52XS5pbmNsdWRlcyhwYXJ0bmVyVXJuKSkge1xuICAgIHJldHVybiBgbmF0aW9uYWxfcHJvPUtOQVBQU2A7XG4gIH0gZWxzZSBpZiAoUFJJTUVfUEFSVE5FUl9VUk5bZW52XS5pbmNsdWRlcyhwYXJ0bmVyVXJuKSkge1xuICAgIHJldHVybiBgbmF0aW9uYWxfcHJvPVBSSU1FYDtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbiIsImltcG9ydCBBcG9waGVuaWFMb2dnZXIgZnJvbSAnYXBvcGhlbmlhLWphdmFzY3JpcHQtbG9nZ2VyJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGFwb3BoZW5pYUtleSB9IGZyb20gJy4vZW52aXJvbm1lbnRTZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IFVVSUQgPSB1dWlkKCk7XG5cbmNvbnN0IEVWRU5UX0ZPUk1BVCA9ICcyLjAnO1xuY29uc3QgUFJPR1JBTSA9ICd0YXgtYWR2aXNvcic7XG5jb25zdCBBQ1RJT05fTkFNRSA9ICdpbnRlcmFjdGlvbi5jb21wbGV0ZS5zdWNjZXNzJztcblxuY29uc3QgY29uZmlnID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGFwcElkOiAncmFtc2V5LXRydXN0ZWQucnQtdGF4LXdlYi1hcHAnLFxuICBhcGlLZXk6IGFwb3BoZW5pYUtleSgpXG59KTtcblxuZXhwb3J0IGNvbnN0IEVWRU5UX1BSSU9SSVRZID0gT2JqZWN0LmZyZWV6ZSh7XG4gIElORk86ICdJTkZPJyxcbiAgRVJST1I6ICdFUlJPUicsXG4gIFdBUk46ICdXQVJOJ1xufSk7XG5cbmV4cG9ydCBjb25zdCBzZW5kSW5mbyA9IChcbiAgZGF0YTogc3RyaW5nLFxuICBjYWxsYmFjayA9ICgpID0+IHtcbiAgICByZXR1cm47XG4gIH1cbikgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgY29uc3QgcmFuZG9tSWQgPSB1dWlkKCk7XG5cbiAgTG9nLnNlbmQoXG4gICAgQUNUSU9OX05BTUUsXG4gICAge1xuICAgICAgaW5zdGFuY2U6IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgICBlcG9jaF9tczogZGF0ZS5nZXRUaW1lKCksXG4gICAgICBldmVudF9mbXQ6IEVWRU5UX0ZPUk1BVCxcbiAgICAgIGV2ZW50X2lkOiByYW5kb21JZCxcbiAgICAgIHByaW9yaXR5OiBFVkVOVF9QUklPUklUWS5JTkZPLFxuICAgICAgdGltZTogZGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgY3Y6IHJhbmRvbUlkLnRvU3RyaW5nKCkuY29uY2F0KCcuMCcpLFxuICAgICAgZGF0YToge1xuICAgICAgICB1c2VyX2lkOiBVVUlELFxuICAgICAgICBwcm9ncmFtX2lkZW50aWZpZXI6IFBST0dSQU0sXG4gICAgICAgIGludGVyYWN0aW9uX3R5cGU6IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbGxiYWNrXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZEVycm9yID0gKFxuICBkYXRhOiBzdHJpbmcsXG4gIGNhbGxiYWNrID0gKCkgPT4ge1xuICAgIHJldHVybjtcbiAgfVxuKSA9PiB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCByYW5kb21JZCA9IHV1aWQoKTtcblxuICBMb2cuc2VuZChcbiAgICBBQ1RJT05fTkFNRSxcbiAgICB7XG4gICAgICBpbnN0YW5jZTogbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICAgIGVwb2NoX21zOiBkYXRlLmdldFRpbWUoKSxcbiAgICAgIGV2ZW50X2ZtdDogRVZFTlRfRk9STUFULFxuICAgICAgZXZlbnRfaWQ6IHJhbmRvbUlkLFxuICAgICAgcHJpb3JpdHk6IEVWRU5UX1BSSU9SSVRZLkVSUk9SLFxuICAgICAgdGltZTogZGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgY3Y6IHJhbmRvbUlkLnRvU3RyaW5nKCkuY29uY2F0KCcuMCcpLFxuICAgICAgZGF0YToge1xuICAgICAgICB1c2VyX2lkOiBVVUlELFxuICAgICAgICBwcm9ncmFtX2lkZW50aWZpZXI6IFBST0dSQU0sXG4gICAgICAgIGludGVyYWN0aW9uX3R5cGU6IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbGxiYWNrXG4gICk7XG59O1xuXG5jb25zdCBMb2cgPSBuZXcgQXBvcGhlbmlhTG9nZ2VyKGNvbmZpZyk7XG5cbmV4cG9ydCBkZWZhdWx0IExvZztcbiIsImltcG9ydCB7IGNyZWF0ZUZvcm1UcmFja2VyIH0gZnJvbSAnQHJzL2Zvcm0tdHJhY2tpbmctc2RrJztcblxuZXhwb3J0IGNvbnN0IGZvcm1UcmFja2VyID0gY3JlYXRlRm9ybVRyYWNrZXIoe1xuICBmb3JtSWQ6ICdlbHAvdGF4Rm9ybXMnXG59KTtcbiIsImltcG9ydCB7IFJlYWN0U0RLQ2xpZW50IH0gZnJvbSAnQG9wdGltaXplbHkvcmVhY3Qtc2RrJztcblxuZnVuY3Rpb24gZmlyZU9wdGltaXplbHlFdmVudChcbiAgb3B0aW1pemVseTogUmVhY3RTREtDbGllbnQgfCBudWxsLFxuICBldmVudE5hbWU6IHN0cmluZ1xuKSB7XG4gIGlmICghc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShldmVudE5hbWUpKSB7XG4gICAgY29uc29sZS5sb2coZXZlbnROYW1lKTtcbiAgICBvcHRpbWl6ZWx5Py50cmFjayhldmVudE5hbWUpO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZXZlbnROYW1lLCAndHJ1ZScpO1xuICB9XG59XG5cbmV4cG9ydCB7IGZpcmVPcHRpbWl6ZWx5RXZlbnQgfTtcbiIsImZ1bmN0aW9uIGdldERvbWFpbigpOiBzdHJpbmcge1xuICByZXR1cm4gZ2xvYmFsVGhpcz8ubG9jYXRpb24/Lm9yaWdpbjtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNUZXN0T3JMb2NhbGhvc3QoZG9tYWluOiBzdHJpbmcpIHtcbiAgcmV0dXJuIC90ZXN0XFwufGxvY2FsaG9zdHwxMjdcXC4wXFwuMFxcLjEvLnRlc3QoZG9tYWluKTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNRQURvbWFpbihkb21haW46IHN0cmluZykge1xuICByZXR1cm4gL3FhXFwuLy50ZXN0KGRvbWFpbik7XG59XG5cbmZ1bmN0aW9uIGdldFN1YmRvbWFpbihkb21haW46IHN0cmluZyA9IGdldERvbWFpbigpKTogc3RyaW5nIHtcbiAgaWYgKGNvbnRhaW5zVGVzdE9yTG9jYWxob3N0KGRvbWFpbikpIHtcbiAgICByZXR1cm4gJ3Rlc3QuJztcbiAgfVxuXG4gIGlmIChjb250YWluc1FBRG9tYWluKGRvbWFpbikpIHtcbiAgICByZXR1cm4gJ3FhLic7XG4gIH1cbiAgLy8gUHJvZHVjdGlvbiFcbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRCYXNlVXJsKHN1YmRvbWFpbiA9IGdldFN1YmRvbWFpbigpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBodHRwczovL3d3dy4ke3N1YmRvbWFpbn1yYW1zZXlzb2x1dGlvbnMuY29tYDtcbn1cblxuZnVuY3Rpb24gZ2V0VGF4RnVsbFVybChcbiAgc3ViZG9tYWluID0gZ2V0U3ViZG9tYWluKCksXG4gIGRvbWFpbjogc3RyaW5nID0gZ2V0RG9tYWluKClcbik6IHN0cmluZyB7XG4gIGlmICgvbG9jYWxob3N0fDEyN1xcLjBcXC4wXFwuMS8udGVzdChkb21haW4pKSB7XG4gICAgcmV0dXJuIGBodHRwOi8vbG9jYWxob3N0OjgwODAvdGF4YDtcbiAgfVxuICByZXR1cm4gYGh0dHBzOi8vdHJ1c3RlZC4ke3N1YmRvbWFpbn1yYW1zZXlzb2x1dGlvbnMuY29tL3RheGA7XG59XG5cbmV4cG9ydCB7IGdldEJhc2VVcmwsIGdldFN1YmRvbWFpbiwgZ2V0VGF4RnVsbFVybCB9O1xuIiwiZnVuY3Rpb24gZ2V0UmF3VGV4dChjb21wb25lbnQ6IFJlYWN0LlJlYWN0RWxlbWVudDxIVE1MRWxlbWVudD4pOiBzdHJpbmcge1xuICByZXR1cm4gZWxlbWVudFRvU3RyaW5nKGNvbXBvbmVudCkucmVwbGFjZSgvPFxcLz9bXj5dKyg+fCQpL2csICcnKTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudFRvU3RyaW5nKFxuICBlbGVtZW50OlxuICAgIHwgUmVhY3QuUmVhY3RFbGVtZW50PEhUTUxFbGVtZW50PlxuICAgIHwgSFRNTENvbGxlY3Rpb25cbiAgICB8IHN0cmluZ1xuICAgIHwgbnVtYmVyXG4gICAgfCBudWxsXG4pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSByZXR1cm4gZWxlbWVudDtcbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJykgcmV0dXJuIGVsZW1lbnQudG9TdHJpbmcoKTtcbiAgaWYgKGVsZW1lbnQgPT09IG51bGwpIHJldHVybiAnJztcbiAgZWxlbWVudCA9IGVsZW1lbnQgYXMgUmVhY3QuUmVhY3RFbGVtZW50PEhUTUxFbGVtZW50PjtcblxuICBjb25zdCBwcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gIGNvbnN0IHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgLy8gSGFuZGxlIGNoaWxkcmVuXG4gIGxldCBjaGlsZHJlbjogc3RyaW5nO1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcy5jaGlsZHJlbikpIHtcbiAgICBpZiAocHJvcHMuY2hpbGRyZW4pIHtcbiAgICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4ubWFwKGVsZW1lbnRUb1N0cmluZykuam9pbignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkcmVuID0gJyc7XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb3BzLmNoaWxkcmVuKSB7XG4gICAgY2hpbGRyZW4gPSBlbGVtZW50VG9TdHJpbmcocHJvcHMuY2hpbGRyZW4pO1xuICB9IGVsc2Uge1xuICAgIGNoaWxkcmVuID0gJyc7XG4gIH1cblxuICAvLyBGb3Igc2ltcGxlIGVsZW1lbnRzXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBwcm9wU3RyID0gT2JqZWN0LmVudHJpZXMocHJvcHMpXG4gICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSAnY2hpbGRyZW4nKVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PVwiJHt2YWx1ZX1cImApXG4gICAgICAuam9pbignICcpO1xuXG4gICAgcmV0dXJuIGA8JHt0eXBlfSR7cHJvcFN0ciA/ICcgJyArIHByb3BTdHIgOiAnJ30+JHtjaGlsZHJlbn08LyR7dHlwZX0+YDtcbiAgfVxuXG4gIC8vIEZvciBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgY29uc3QgdHlwZUZ1bmMgPSB0eXBlIGFzIEZ1bmN0aW9uO1xuICAgIHJldHVybiBlbGVtZW50VG9TdHJpbmcodHlwZUZ1bmMocHJvcHMpKTtcbiAgfVxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmV4cG9ydCB7IGdldFJhd1RleHQgfTtcbiIsImltcG9ydCB7IGdldE5hdGlvbmFsUHJvUXVlcnlQYXJhbSwgZ2V0VGF4RnVsbFVybCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5cbmZ1bmN0aW9uIG5hdmlnYXRlVG9SZXN1bHRzUGFnZShcbiAgcmZpZDogc3RyaW5nLFxuICBwYXJ0bmVyVXJuOiBzdHJpbmcsXG4gIHVybCA9IGdldFRheEZ1bGxVcmwoKSxcbiAgbmF0aW9uYWxQcm9RdWVyeVBhcmFtID0gZ2V0TmF0aW9uYWxQcm9RdWVyeVBhcmFtKHBhcnRuZXJVcm4pXG4pIHtcbiAgZ2xvYmFsVGhpcy5sb2NhdGlvbi5ocmVmID0gYCR7dXJsfS9yZXN1bHRzLyR7cmZpZH0ke25hdGlvbmFsUHJvUXVlcnlQYXJhbS5sZW5ndGggPyAnPycgKyBuYXRpb25hbFByb1F1ZXJ5UGFyYW0gOiAnJ31gO1xufVxuXG5leHBvcnQgeyBuYXZpZ2F0ZVRvUmVzdWx0c1BhZ2UgfTtcbiIsImV4cG9ydCBjb25zdCBQSE9ORV9WQUxJREFUSU9OX1JFR0VYID1cbiAgL15cXCg/KD8hMzd8OTZ8OTAwfDQ1Nnw1NTUpWzItOV0oPyExMSlbMC04XVxcZFxcKT9bLS5cXHNdPyg/ITU1NVstLlxcc10/KD86MTIxMnwwMSl8KFxcZClcXDF7Mn1bLS5cXHNdP1xcMXs0fSlbMi05XSg/ITExKVxcZHsyfVstLlxcc10/XFxkezR9JC87XG4iLCJpbXBvcnQgeyBBbmFseXRpY3NCcm93c2VyIH0gZnJvbSAnQHNlZ21lbnQvYW5hbHl0aWNzLW5leHQnO1xuXG5pbnRlcmZhY2UgVHJhY2tQYWdlVmlld2VkUGFyYW1zIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBrZXl3b3Jkczogc3RyaW5nW107XG4gIHJlZmVycmVyPzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUcmFja0Zvcm1TdGFydGVkUGFyYW1zIHtcbiAgZm9ybV9uYW1lOiBzdHJpbmc7XG4gIGZlYXR1cmVfbmFtZT86IHN0cmluZztcbiAgc291cmNlX2VtYWlsX25hbWU/OiBzdHJpbmc7XG4gIHBhZ2U/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUcmFja1N0ZXBDb21wbGV0ZWRQYXJhbXMge1xuICBzdGVwOiBudW1iZXI7XG4gIHN0ZXBfbGFiZWw6IHN0cmluZztcbiAgc3RlcF9uYW1lOiBzdHJpbmc7XG4gIGFuc3dlcl9sYWJlbHM/OiBzdHJpbmdbXTtcbiAgYW5zd2VyX3ZhbHVlcz86IHN0cmluZ1tdO1xuICBmb3JtX25hbWU6IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFRyYWNrRm9ybVN1Ym1pdHRlZFBhcmFtcyB7XG4gIGZhbjoge1xuICAgIGZpcnN0X25hbWU6IHN0cmluZztcbiAgICBsYXN0X25hbWU6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIHBob25lX251bWJlcjogc3RyaW5nO1xuICAgIHBvc3RhbF9jb2RlOiBzdHJpbmc7XG4gIH07XG4gIHRydXN0ZWRfcmVmZXJyYWxfa2V5OiBzdHJpbmc7XG4gIHBhZ2VfbmFtZT86IHN0cmluZztcbiAgZm9ybV9uYW1lPzogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVHJhY2tFbGVtZW50Q2xpY2tlZFBhcmFtcyB7XG4gIGVsZW1lbnQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgcGFnZTogc3RyaW5nO1xuICByZWZlcnJhbF9rZXk6IHN0cmluZztcbiAgZmVhdHVyZV9uYW1lPzogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVHJhY2tFeHBlcmltZW50Vmlld2VkUGFyYW1zIHtcbiAgZXhwZXJpbWVudF9pZDogc3RyaW5nO1xuICB2YXJpYXRpb25faWQ6IHN0cmluZztcbiAgZXhwZXJpbWVudF9uYW1lOiBzdHJpbmc7XG4gIHZhcmlhdGlvbl9uYW1lOiBzdHJpbmc7XG4gIGV4cGVyaW1lbnRhdGlvbl9wbGF0Zm9ybTogc3RyaW5nO1xufVxuXG5jb25zdCBhbmFseXRpY3NfZXZlbnRfbmFtZXMgPSB7XG4gIFBBR0VfVklFV0VEOiAnUGFnZSBWaWV3ZWQnLFxuICBGT1JNX1NUQVJURUQ6ICdGb3JtIFN0YXJ0ZWQnLFxuICBTVEVQX0NPTVBMRVRFRDogJ1N0ZXAgQ29tcGxldGVkJyxcbiAgRk9STV9TVUJNSVRURUQ6ICdGb3JtIFN1Ym1pdHRlZCcsXG4gIEVMRU1FTlRfQ0xJQ0tFRDogJ0VsZW1lbnQgQ2xpY2tlZCcsXG4gIEVYUEVSSU1FTlRfVklFV0VEOiAnRXhwZXJpbWVudCBWaWV3ZWQnXG59O1xuXG5mdW5jdGlvbiB0cmFja1BhZ2VWaWV3ZWQoe1xuICBuYW1lLFxuICB0aXRsZSxcbiAga2V5d29yZHMsXG4gIHJlZmVycmVyLFxuICB1cmwgPSBnZXRGdWxsVXJsKCksXG4gIHBhdGggPSBnZXRMb2NhdGlvblBhdGgoKVxufTogVHJhY2tQYWdlVmlld2VkUGFyYW1zKTogdm9pZCB7XG4gIGdldEFuYWx5dGljcygpPy50cmFjayhhbmFseXRpY3NfZXZlbnRfbmFtZXMuUEFHRV9WSUVXRUQsIHtcbiAgICBrZXl3b3JkcyxcbiAgICBuYW1lLFxuICAgIHBhdGgsXG4gICAgcmVmZXJyZXIsXG4gICAgdGl0bGUsXG4gICAgdXJsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0cmFja0Zvcm1TdGFydGVkKHtcbiAgZm9ybV9uYW1lLFxuICBmZWF0dXJlX25hbWUsXG4gIHNvdXJjZV9lbWFpbF9uYW1lLFxuICBwYWdlLFxuICBwYXRoID0gZ2V0TG9jYXRpb25QYXRoKClcbn06IFRyYWNrRm9ybVN0YXJ0ZWRQYXJhbXMpOiB2b2lkIHtcbiAgZ2V0QW5hbHl0aWNzKCk/LnRyYWNrKGFuYWx5dGljc19ldmVudF9uYW1lcy5GT1JNX1NUQVJURUQsIHtcbiAgICBmZWF0dXJlX25hbWUsXG4gICAgZm9ybV9uYW1lLFxuICAgIHBhZ2UsXG4gICAgcGF0aCxcbiAgICBzb3VyY2VfZW1haWxfbmFtZSxcbiAgICBmb3JtX3R5cGU6ICdsZWFkJyxcbiAgICBwcm9ncmFtOiAndGF4J1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJhY2tTdGVwQ29tcGxldGVkKHtcbiAgc3RlcCxcbiAgc3RlcF9sYWJlbCxcbiAgc3RlcF9uYW1lLFxuICBhbnN3ZXJfbGFiZWxzLFxuICBhbnN3ZXJfdmFsdWVzLFxuICBmb3JtX25hbWUsXG4gIHBhdGggPSBnZXRMb2NhdGlvblBhdGgoKVxufTogVHJhY2tTdGVwQ29tcGxldGVkUGFyYW1zKTogdm9pZCB7XG4gIGdldEFuYWx5dGljcygpPy50cmFjayhhbmFseXRpY3NfZXZlbnRfbmFtZXMuU1RFUF9DT01QTEVURUQsIHtcbiAgICBhbnN3ZXJfbGFiZWxzLFxuICAgIGFuc3dlcl92YWx1ZXMsXG4gICAgZm9ybV9uYW1lLFxuICAgIHBhdGgsXG4gICAgc3RlcCxcbiAgICBzdGVwX2xhYmVsLFxuICAgIHN0ZXBfbmFtZSxcbiAgICBwcm9ncmFtOiAndGF4J1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJhY2tGb3JtU3VibWl0dGVkKHtcbiAgZmFuLFxuICB0cnVzdGVkX3JlZmVycmFsX2tleSxcbiAgZm9ybV9uYW1lLFxuICBwYWdlX25hbWUgPSBnZXRQYWdlVGl0bGUoKSxcbiAgcGF0aCA9IGdldExvY2F0aW9uUGF0aCgpXG59OiBUcmFja0Zvcm1TdWJtaXR0ZWRQYXJhbXMpOiB2b2lkIHtcbiAgZ2V0QW5hbHl0aWNzKCk/LnRyYWNrKGFuYWx5dGljc19ldmVudF9uYW1lcy5GT1JNX1NVQk1JVFRFRCwge1xuICAgIC4uLmZhbixcbiAgICBmb3JtX25hbWUsXG4gICAgcGFnZV9uYW1lLFxuICAgIHBhdGgsXG4gICAgdHJ1c3RlZF9yZWZlcnJhbF9rZXksXG4gICAgZm9ybV90eXBlOiAnTGVhZCcsXG4gICAgdHJ1c3RlZF9wcm9ncmFtOiAndGF4J1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJhY2tFbGVtZW50Q2xpY2tlZCh7XG4gIGVsZW1lbnQsXG4gIGxhYmVsLFxuICBwYWdlLFxuICByZWZlcnJhbF9rZXksXG4gIGZlYXR1cmVfbmFtZSxcbiAgcGF0aCA9IGdldExvY2F0aW9uUGF0aCgpXG59OiBUcmFja0VsZW1lbnRDbGlja2VkUGFyYW1zKTogdm9pZCB7XG4gIGdldEFuYWx5dGljcygpPy50cmFjayhhbmFseXRpY3NfZXZlbnRfbmFtZXMuRUxFTUVOVF9DTElDS0VELCB7XG4gICAgZWxlbWVudCxcbiAgICBmZWF0dXJlX25hbWUsXG4gICAgbGFiZWwsXG4gICAgcGFnZSxcbiAgICBwYXRoLFxuICAgIHJlZmVycmFsX2tleSxcbiAgICBwcm9ncmFtOiAndGF4J1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJhY2tFeHBlcmltZW50Vmlld2VkKHtcbiAgZXhwZXJpbWVudF9pZCxcbiAgdmFyaWF0aW9uX2lkLFxuICBleHBlcmltZW50X25hbWUsXG4gIHZhcmlhdGlvbl9uYW1lLFxuICBleHBlcmltZW50YXRpb25fcGxhdGZvcm1cbn06IFRyYWNrRXhwZXJpbWVudFZpZXdlZFBhcmFtcyk6IHZvaWQge1xuICBnZXRBbmFseXRpY3MoKT8udHJhY2soYW5hbHl0aWNzX2V2ZW50X25hbWVzLkVYUEVSSU1FTlRfVklFV0VELCB7XG4gICAgZXhwZXJpbWVudF9pZCxcbiAgICB2YXJpYXRpb25faWQsXG4gICAgdmFyaWF0aW9uX25hbWUsXG4gICAgZXhwZXJpbWVudF9uYW1lLFxuICAgIGV4cGVyaW1lbnRhdGlvbl9wbGF0Zm9ybVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdENoZWNrYm94QW5zd2Vyc0ZvclNlZ21lbnQoXG4gIGtleVZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj5cbik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGtleVZhbHVlcykuZmlsdGVyKChrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGtleVZhbHVlc1trZXldO1xuICAgIHJldHVybiB2YWx1ZSAhPT0gZmFsc2U7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRBbmFseXRpY3MoKSB7XG4gIHJldHVybiB3aW5kb3c/Ll9BUFBfQ09ORklHPy5zZWdtZW50QW5hbHl0aWNzIGFzIEFuYWx5dGljc0Jyb3dzZXI7XG59XG5cbmZ1bmN0aW9uIGdldExvY2F0aW9uUGF0aCgpOiBzdHJpbmcge1xuICByZXR1cm4gd2luZG93Py5sb2NhdGlvbj8ucGF0aG5hbWUgfHwgJyc7XG59XG5cbmZ1bmN0aW9uIGdldEZ1bGxVcmwoKSB7XG4gIHJldHVybiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmIHx8ICcnO1xufVxuXG5mdW5jdGlvbiBnZXRQYWdlVGl0bGUoKSB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd0aXRsZScpPy50ZXh0Q29udGVudCA/PyB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCB7XG4gIHRyYWNrUGFnZVZpZXdlZCxcbiAgdHJhY2tGb3JtU3RhcnRlZCxcbiAgdHJhY2tTdGVwQ29tcGxldGVkLFxuICB0cmFja0Zvcm1TdWJtaXR0ZWQsXG4gIHRyYWNrRWxlbWVudENsaWNrZWQsXG4gIHRyYWNrRXhwZXJpbWVudFZpZXdlZCxcbiAgYW5hbHl0aWNzX2V2ZW50X25hbWVzLFxuICBleHRyYWN0Q2hlY2tib3hBbnN3ZXJzRm9yU2VnbWVudFxufTtcbiIsImV4cG9ydCBlbnVtIEZvcm1OYW1lT3B0aW9ucyB7XG4gIFRBWF9SRUZFUlJBTF9GT1JNID0gJ3RheF9yZWZlcnJhbF9mb3JtJyxcbiAgVEFYX1JFU1VMVFNfT05CT0FSRElORyA9ICd0YXhfcmVzdWx0c19vbmJvYXJkaW5nJyxcbiAgVEFYX1BST19RVUlaID0gJ3RheF9wcm9fcXVpeidcbn1cbiIsImltcG9ydCB7IFJlZmVycmFsUmVzcG9uc2UgfSBmcm9tICcuLi9hcGkvY3JlYXRlUmVmZXJyYWwnO1xuaW1wb3J0IHsgUmVmZXJyYWxGb3JtRGF0YSB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgUmVhY3RTREtDbGllbnQgfSBmcm9tICdAb3B0aW1pemVseS9yZWFjdC1zZGsnO1xuaW1wb3J0IHsgbG9nR0FFdmVudHMsIG5hdmlnYXRlVG9SZXN1bHRzUGFnZSB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgZmlyZU9wdGltaXplbHlFdmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyB0cmFja0Zvcm1TdWJtaXR0ZWQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvYW5hbHl0aWNzJztcbmltcG9ydCB7IEZvcm1OYW1lT3B0aW9ucyB9IGZyb20gJy4uL2VudW1zL0Zvcm1OYW1lT3B0aW9ucyc7XG5cbmZ1bmN0aW9uIGhhbmRsZVJlZmVycmFsUmVzcG9uc2UoXG4gIHJlZmVycmFsUmVzcG9uc2U6IFJlZmVycmFsUmVzcG9uc2UsXG4gIHJlZmVycmFsOiBSZWZlcnJhbEZvcm1EYXRhLFxuICBwYXJ0bmVyVXJuOiBzdHJpbmcsXG4gIG9wdGltaXplbHk6IFJlYWN0U0RLQ2xpZW50IHwgbnVsbFxuKSB7XG4gIGxvZ0dBRXZlbnRzKHJlZmVycmFsUmVzcG9uc2UucmVxdWVzdF9rZXksIHJlZmVycmFsKTtcbiAgZmlyZU9wdGltaXplbHlFdmVudChvcHRpbWl6ZWx5LCAnc3VibWlzc2lvbl9jb21wbGV0ZWQnKTtcbiAgdHJhY2tGb3JtU3VibWl0dGVkKHtcbiAgICB0cnVzdGVkX3JlZmVycmFsX2tleTogcmVmZXJyYWxSZXNwb25zZS5yZXF1ZXN0X2tleSxcbiAgICBmYW46IHtcbiAgICAgIGZpcnN0X25hbWU6IHJlZmVycmFsLmZpcnN0X25hbWUsXG4gICAgICBsYXN0X25hbWU6IHJlZmVycmFsLmxhc3RfbmFtZSxcbiAgICAgIGVtYWlsOiByZWZlcnJhbC5lbWFpbCxcbiAgICAgIHBob25lX251bWJlcjogcmVmZXJyYWwucGhvbmUsXG4gICAgICBwb3N0YWxfY29kZTogcmVmZXJyYWwucG9zdGFsX2NvZGVcbiAgICB9LFxuICAgIGZvcm1fbmFtZTogRm9ybU5hbWVPcHRpb25zLlRBWF9SRUZFUlJBTF9GT1JNXG4gIH0pO1xuICBuYXZpZ2F0ZVRvUmVzdWx0c1BhZ2UocmVmZXJyYWxSZXNwb25zZS5yZXF1ZXN0X2tleSwgcGFydG5lclVybik7XG59XG5cbmV4cG9ydCB7IGhhbmRsZVJlZmVycmFsUmVzcG9uc2UgfTtcbiIsImltcG9ydCB7IFJlZmVycmFsRm9ybURhdGEgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IFRheFNlcnZpY2VPcHRpb25zIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgRm9ybVRyYWNrZXIgfSBmcm9tICdAcnMvZm9ybS10cmFja2luZy1zZGsnO1xuaW1wb3J0IHsgZm9ybVRyYWNrZXIgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMnO1xuXG5mdW5jdGlvbiBsb2dHQUV2ZW50cyhcbiAgcmVmZXJlbmNlSWQ6IHN0cmluZyxcbiAgcmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGEsXG4gIGxvY2FsRm9ybVRyYWNrZXI6IEZvcm1UcmFja2VyID0gZm9ybVRyYWNrZXJcbikge1xuICAvLyBUYXggaW50ZXJlc3RzXG4gIGlmIChyZWZlcnJhbD8uaW50ZXJlc3RzPy5pbmNsdWRlcyhUYXhTZXJ2aWNlT3B0aW9ucy5wZXJzb25hbF90YXhlcykpIHtcbiAgICBsb2NhbEZvcm1UcmFja2VyLnRyYWNrTW9kdWxlKHtcbiAgICAgIHR5cGU6ICdmb3JtX29wdGlvbicsXG4gICAgICBjYXRlZ29yeTogJ3RheF9pbnRlcmVzdCcsXG4gICAgICBsYWJlbDogJ2luZGl2aWR1YWxfZmFtaWx5JyxcbiAgICAgIHZhbHVlOiAwXG4gICAgfSk7XG4gIH1cbiAgaWYgKHJlZmVycmFsPy5pbnRlcmVzdHM/LmluY2x1ZGVzKFRheFNlcnZpY2VPcHRpb25zLnNtYWxsX2J1c2luZXNzKSkge1xuICAgIGxvY2FsRm9ybVRyYWNrZXIudHJhY2tNb2R1bGUoe1xuICAgICAgdHlwZTogJ2Zvcm1fb3B0aW9uJyxcbiAgICAgIGNhdGVnb3J5OiAndGF4X2ludGVyZXN0JyxcbiAgICAgIGxhYmVsOiAnc21hbGxfYnVzaW5lc3MnLFxuICAgICAgdmFsdWU6IDBcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFN1Ym1pc3Npb25cbiAgbG9jYWxGb3JtVHJhY2tlci50cmFja01vZHVsZSh7XG4gICAgdHlwZTogJ2xlYWQnLFxuICAgIGNhdGVnb3J5OiAndGF4JyxcbiAgICBsYWJlbDogJ3ByaW1hcnknLFxuICAgIHZhbHVlOiAwXG4gIH0pO1xuICBsb2NhbEZvcm1UcmFja2VyLnRyYWNrVmFsaWRTdWJtaXNzaW9uKCk7XG4gIGxvY2FsRm9ybVRyYWNrZXIudHJhY2tDb25maXJtYXRpb24oe1xuICAgIHJlZmVyZW5jZUlkXG4gIH0pO1xufVxuXG5leHBvcnQgeyBsb2dHQUV2ZW50cyB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgbWVtbywgdXNlU3RhdGUsIHVzZVJlZiwgQ2hpbGRyZW4sIHVzZUNhbGxiYWNrLCB1c2VNZW1vLCBpc1ZhbGlkRWxlbWVudCwgY2xvbmVFbGVtZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBXaXphcmRDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgV2l6YXJkQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdXaXphcmRDb250ZXh0Jztcbn1cblxuY29uc3QgdXNlV2l6YXJkID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChXaXphcmRDb250ZXh0KTtcblxuICBpZiAoIWNvbnRleHQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdGhyb3cgRXJyb3IoJ1dyYXAgeW91ciBzdGVwIHdpdGggYFdpemFyZGAnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufTtcblxuLyoqXHJcbiAqIExvZyBtZXNzYWdlcyBpbiB0aGUgY29uc29sZSB3aXRoIGEgY29ycmVzcG9uZGluZyB1cmdlbmN5XHJcbiAqXHJcbiAqIEBwYXJhbSBsZXZlbCBUaGUgdXJnZW5jeSBvZiB0aGUgbWVzc2FnZVxyXG4gKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBsb2cgaW4gdGhlIGNvbnNvbGVcclxuICovXG5jb25zdCBsb2cgPSAobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gJ1tyZWFjdC11c2Utd2l6YXJkXSc7XG5cbiAgICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgICBjYXNlICd3YXJuJzpcbiAgICAgICAgY29uc29sZS53YXJuKHBhY2thZ2VOYW1lICsgXCIgXCIgKyBtZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgY29uc29sZS5lcnJvcihwYWNrYWdlTmFtZSArIFwiIFwiICsgbWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmxvZyhwYWNrYWdlTmFtZSArIFwiIFwiICsgbWVzc2FnZSk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBXaXphcmQgPSAvKiNfX1BVUkVfXyovbWVtbygoe1xuICBoZWFkZXIsXG4gIGZvb3RlcixcbiAgY2hpbGRyZW4sXG4gIG9uU3RlcENoYW5nZSxcbiAgd3JhcHBlcjogV3JhcHBlcixcbiAgc3RhcnRJbmRleCA9IDBcbn0pID0+IHtcbiAgY29uc3QgW2FjdGl2ZVN0ZXAsIHNldEFjdGl2ZVN0ZXBdID0gdXNlU3RhdGUoc3RhcnRJbmRleCk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGhhc05leHRTdGVwID0gdXNlUmVmKHRydWUpO1xuICBjb25zdCBoYXNQcmV2aW91c1N0ZXAgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBuZXh0U3RlcEhhbmRsZXIgPSB1c2VSZWYoKCkgPT4ge30pO1xuICBjb25zdCBzdGVwQ291bnQgPSBDaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKS5sZW5ndGg7XG4gIGhhc05leHRTdGVwLmN1cnJlbnQgPSBhY3RpdmVTdGVwIDwgc3RlcENvdW50IC0gMTtcbiAgaGFzUHJldmlvdXNTdGVwLmN1cnJlbnQgPSBhY3RpdmVTdGVwID4gMDtcbiAgY29uc3QgZ29Ub05leHRTdGVwID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChoYXNOZXh0U3RlcC5jdXJyZW50KSB7XG4gICAgICBjb25zdCBuZXdBY3RpdmVTdGVwSW5kZXggPSBhY3RpdmVTdGVwICsgMTtcbiAgICAgIHNldEFjdGl2ZVN0ZXAobmV3QWN0aXZlU3RlcEluZGV4KTtcbiAgICAgIG9uU3RlcENoYW5nZSA9PSBudWxsID8gdm9pZCAwIDogb25TdGVwQ2hhbmdlKG5ld0FjdGl2ZVN0ZXBJbmRleCk7XG4gICAgfVxuICB9LCBbYWN0aXZlU3RlcCwgb25TdGVwQ2hhbmdlXSk7XG4gIGNvbnN0IGdvVG9QcmV2aW91c1N0ZXAgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGhhc1ByZXZpb3VzU3RlcC5jdXJyZW50KSB7XG4gICAgICBuZXh0U3RlcEhhbmRsZXIuY3VycmVudCA9IG51bGw7XG4gICAgICBjb25zdCBuZXdBY3RpdmVTdGVwSW5kZXggPSBhY3RpdmVTdGVwIC0gMTtcbiAgICAgIHNldEFjdGl2ZVN0ZXAobmV3QWN0aXZlU3RlcEluZGV4KTtcbiAgICAgIG9uU3RlcENoYW5nZSA9PSBudWxsID8gdm9pZCAwIDogb25TdGVwQ2hhbmdlKG5ld0FjdGl2ZVN0ZXBJbmRleCk7XG4gICAgfVxuICB9LCBbYWN0aXZlU3RlcCwgb25TdGVwQ2hhbmdlXSk7XG4gIGNvbnN0IGdvVG9TdGVwID0gdXNlQ2FsbGJhY2soc3RlcEluZGV4ID0+IHtcbiAgICBpZiAoc3RlcEluZGV4ID49IDAgJiYgc3RlcEluZGV4IDwgc3RlcENvdW50KSB7XG4gICAgICBuZXh0U3RlcEhhbmRsZXIuY3VycmVudCA9IG51bGw7XG4gICAgICBzZXRBY3RpdmVTdGVwKHN0ZXBJbmRleCk7XG4gICAgICBvblN0ZXBDaGFuZ2UgPT0gbnVsbCA/IHZvaWQgMCA6IG9uU3RlcENoYW5nZShzdGVwSW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGxvZygnd2FybicsIFtcIkludmFsaWQgc3RlcCBpbmRleCBbXCIgKyBzdGVwSW5kZXggKyBcIl0gcGFzc2VkIHRvICdnb1RvU3RlcCcuIFwiLCBcIkVuc3VyZSB0aGUgZ2l2ZW4gc3RlcEluZGV4IGlzIG5vdCBvdXQgb2YgYm91bmRhcmllcy5cIl0uam9pbignJykpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3N0ZXBDb3VudCwgb25TdGVwQ2hhbmdlXSk7IC8vIENhbGxiYWNrIHRvIGF0dGFjaCB0aGUgc3RlcCBoYW5kbGVyXG5cbiAgY29uc3QgaGFuZGxlU3RlcCA9IHVzZVJlZihoYW5kbGVyID0+IHtcbiAgICBuZXh0U3RlcEhhbmRsZXIuY3VycmVudCA9IGhhbmRsZXI7XG4gIH0pO1xuICBjb25zdCBkb05leHRTdGVwID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChoYXNOZXh0U3RlcC5jdXJyZW50ICYmIG5leHRTdGVwSGFuZGxlci5jdXJyZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICAgIGF3YWl0IG5leHRTdGVwSGFuZGxlci5jdXJyZW50KCk7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgIG5leHRTdGVwSGFuZGxlci5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgZ29Ub05leHRTdGVwKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZ29Ub05leHRTdGVwKCk7XG4gICAgfVxuICB9LCBbZ29Ub05leHRTdGVwXSk7XG4gIGNvbnN0IHdpemFyZFZhbHVlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgIG5leHRTdGVwOiBkb05leHRTdGVwLFxuICAgIHByZXZpb3VzU3RlcDogZ29Ub1ByZXZpb3VzU3RlcCxcbiAgICBoYW5kbGVTdGVwOiBoYW5kbGVTdGVwLmN1cnJlbnQsXG4gICAgaXNMb2FkaW5nLFxuICAgIGFjdGl2ZVN0ZXAsXG4gICAgc3RlcENvdW50LFxuICAgIGlzRmlyc3RTdGVwOiAhaGFzUHJldmlvdXNTdGVwLmN1cnJlbnQsXG4gICAgaXNMYXN0U3RlcDogIWhhc05leHRTdGVwLmN1cnJlbnQsXG4gICAgZ29Ub1N0ZXBcbiAgfSksIFtkb05leHRTdGVwLCBnb1RvUHJldmlvdXNTdGVwLCBpc0xvYWRpbmcsIGFjdGl2ZVN0ZXAsIHN0ZXBDb3VudCwgZ29Ub1N0ZXBdKTtcbiAgY29uc3QgYWN0aXZlU3RlcENvbnRlbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCByZWFjdENoaWxkcmVuID0gQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAvLyBObyBzdGVwcyBwYXNzZWRcbiAgICAgIGlmIChyZWFjdENoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBsb2coJ3dhcm4nLCAnTWFrZSBzdXJlIHRvIHBhc3MgeW91ciBzdGVwcyBhcyBjaGlsZHJlbiBpbiB5b3VyIDxXaXphcmQ+Jyk7XG4gICAgICB9IC8vIFRoZSBwYXNzZWQgc3RhcnQgaW5kZXggaXMgaW52YWxpZFxuXG5cbiAgICAgIGlmIChhY3RpdmVTdGVwID4gcmVhY3RDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgbG9nKCd3YXJuJywgJ0FuIGludmFsaWQgc3RhcnRJbmRleCBpcyBwYXNzZWQgdG8gPFdpemFyZD4nKTtcbiAgICAgIH0gLy8gSW52YWxpZCBoZWFkZXIgZWxlbWVudFxuXG5cbiAgICAgIGlmIChoZWFkZXIgJiYgIWlzVmFsaWRFbGVtZW50KGhlYWRlcikpIHtcbiAgICAgICAgbG9nKCdlcnJvcicsICdJbnZhbGlkIGhlYWRlciBwYXNzZWQgdG8gPFdpemFyZD4nKTtcbiAgICAgIH0gLy8gSW52YWxpZCBmb290ZXIgZWxlbWVudFxuXG5cbiAgICAgIGlmIChmb290ZXIgJiYgIWlzVmFsaWRFbGVtZW50KGZvb3RlcikpIHtcbiAgICAgICAgbG9nKCdlcnJvcicsICdJbnZhbGlkIGZvb3RlciBwYXNzZWQgdG8gPFdpemFyZD4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVhY3RDaGlsZHJlblthY3RpdmVTdGVwXTtcbiAgfSwgW2FjdGl2ZVN0ZXAsIGNoaWxkcmVuLCBoZWFkZXIsIGZvb3Rlcl0pO1xuICBjb25zdCBlbmhhbmNlZEFjdGl2ZVN0ZXBDb250ZW50ID0gdXNlTWVtbygoKSA9PiBXcmFwcGVyID8gY2xvbmVFbGVtZW50KFdyYXBwZXIsIHtcbiAgICBjaGlsZHJlbjogYWN0aXZlU3RlcENvbnRlbnRcbiAgfSkgOiBhY3RpdmVTdGVwQ29udGVudCwgW1dyYXBwZXIsIGFjdGl2ZVN0ZXBDb250ZW50XSk7XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFdpemFyZENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogd2l6YXJkVmFsdWVcbiAgfSwgaGVhZGVyLCBlbmhhbmNlZEFjdGl2ZVN0ZXBDb250ZW50LCBmb290ZXIpO1xufSk7XG5cbmV4cG9ydCB7IFdpemFyZCwgdXNlV2l6YXJkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC11c2Utd2l6YXJkLm1qcy5tYXBcbiIsImltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxudmFyIGdldEljb25Qcm9wcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHtcbiAgICAgICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwicmRzLUNoZWNrYm94VGlsZS1pY29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgX2FbXCJhcmlhLWhpZGRlblwiXSA9IHRydWUsXG4gICAgICAgIF9hLmZvY3VzYWJsZSA9IGZhbHNlLFxuICAgICAgICBfYSk7XG59O1xuLyoqXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbUkRTIENoZWNrYm94IFRpbGVdKGh0dHBzOi8vZGVzaWduLnJhbXNleXNvbHV0aW9ucy5jb20vc3Rvcnlib29rLz9wYXRoPS9zdG9yeS9kZXNpZ24tc3lzdGVtLWNoZWNrYm94LXRpbGUtLWRlZmF1bHQpXG4gKlxuICogQVBJOlxuICpcbiAqIC0gW1JEUyBDaGVja2JveCBUaWxlIEFQSV0oaHR0cHM6Ly9kZXNpZ24ucmFtc2V5c29sdXRpb25zLmNvbS9jb21wb25lbnRzL2NoZWNrYm94LXRpbGUvP3RhYj10ZWNobm9sb2dpZXMjcmVhY3QpXG4gKi9cbnZhciBDaGVja2JveFRpbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfYSwgcmVmKSB7XG4gICAgdmFyIF9iO1xuICAgIHZhciBfYyA9IF9hLmJvcmRlciwgYm9yZGVyID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYywgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBDaGVja2JveFRpbGVJY29uID0gX2EuaWNvbiwgaWRQcm9wID0gX2EuaWQsIGltYWdlID0gX2EuaW1hZ2UsIGxhYmVsID0gX2EubGFiZWwsIF9kID0gX2Euc2l6ZSwgc2l6ZSA9IF9kID09PSB2b2lkIDAgPyBcIm1kXCIgOiBfZCwgdmVydGljYWwgPSBfYS52ZXJ0aWNhbCwgcmVzdCA9IF9fcmVzdChfYSwgW1wiYm9yZGVyXCIsIFwiY2xhc3NOYW1lXCIsIFwiaWNvblwiLCBcImlkXCIsIFwiaW1hZ2VcIiwgXCJsYWJlbFwiLCBcInNpemVcIiwgXCJ2ZXJ0aWNhbFwiXSk7XG4gICAgdmFyIGRlZmF1bHRJZFJlZiA9IHVzZVJlZihcInJkcy1jaGVja2JveHRpbGUtXCIuY29uY2F0KE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDE2KSkpO1xuICAgIHZhciBpZCA9IGlkUHJvcCB8fCBkZWZhdWx0SWRSZWYuY3VycmVudDtcbiAgICB2YXIgY2hlY2tib3hUaWxlQ2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJyZHMtQ2hlY2tib3hUaWxlXCIsIChfYiA9IHt9LFxuICAgICAgICBfYltcInJkcy1DaGVja2JveFRpbGUtLVwiLmNvbmNhdChzaXplKV0gPSBzaXplICE9PSBcIm1kXCIsXG4gICAgICAgIF9iW1wicmRzLUNoZWNrYm94VGlsZS0tdmVydGljYWxcIl0gPSB2ZXJ0aWNhbCxcbiAgICAgICAgX2JbXCJyZHMtQ2hlY2tib3hUaWxlLS1ib3JkZXJcIl0gPSBib3JkZXIsXG4gICAgICAgIF9iKSwgY2xhc3NOYW1lKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNoZWNrYm94VGlsZUNsYXNzZXMgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9fYXNzaWduKHsgdHlwZTogXCJjaGVja2JveFwiLCByZWY6IHJlZiwgaWQ6IGlkIH0sIHJlc3QpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgaHRtbEZvcjogaWQgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJkcy1DaGVja2JveFRpbGUtYm94XCIgfSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJyZHMtQ2hlY2tib3hUaWxlLWNvbnRlbnRcIiB9LFxuICAgICAgICAgICAgICAgIENoZWNrYm94VGlsZUljb24gJiYgIXZlcnRpY2FsICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94VGlsZUljb24sIF9fYXNzaWduKHt9LCBnZXRJY29uUHJvcHMoKSkpKSxcbiAgICAgICAgICAgICAgICBpbWFnZSAmJiB2ZXJ0aWNhbCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmRzLUNoZWNrYm94VGlsZS1pbWFnZVwiIH0sIGltYWdlKSksXG4gICAgICAgICAgICAgICAgbGFiZWwpKSkpO1xufSk7XG5DaGVja2JveFRpbGUuZGlzcGxheU5hbWUgPSBcIkNoZWNrYm94VGlsZVwiO1xuXG5leHBvcnQgeyBDaGVja2JveFRpbGUgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q2hlY2tib3hUaWxlLmVzbS5qcy5tYXBcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnZhciBpc0NoZWNrQm94SW5wdXQgPSAoZWxlbWVudCkgPT4gZWxlbWVudC50eXBlID09PSAnY2hlY2tib3gnO1xuXG52YXIgaXNEYXRlT2JqZWN0ID0gKHZhbHVlKSA9PiB2YWx1ZSBpbnN0YW5jZW9mIERhdGU7XG5cbnZhciBpc051bGxPclVuZGVmaW5lZCA9ICh2YWx1ZSkgPT4gdmFsdWUgPT0gbnVsbDtcblxuY29uc3QgaXNPYmplY3RUeXBlID0gKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xudmFyIGlzT2JqZWN0ID0gKHZhbHVlKSA9PiAhaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpICYmXG4gICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgaXNPYmplY3RUeXBlKHZhbHVlKSAmJlxuICAgICFpc0RhdGVPYmplY3QodmFsdWUpO1xuXG52YXIgZ2V0RXZlbnRWYWx1ZSA9IChldmVudCkgPT4gaXNPYmplY3QoZXZlbnQpICYmIGV2ZW50LnRhcmdldFxuICAgID8gaXNDaGVja0JveElucHV0KGV2ZW50LnRhcmdldClcbiAgICAgICAgPyBldmVudC50YXJnZXQuY2hlY2tlZFxuICAgICAgICA6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgIDogZXZlbnQ7XG5cbnZhciBnZXROb2RlUGFyZW50TmFtZSA9IChuYW1lKSA9PiBuYW1lLnN1YnN0cmluZygwLCBuYW1lLnNlYXJjaCgvXFwuXFxkKyhcXC58JCkvKSkgfHwgbmFtZTtcblxudmFyIGlzTmFtZUluRmllbGRBcnJheSA9IChuYW1lcywgbmFtZSkgPT4gbmFtZXMuaGFzKGdldE5vZGVQYXJlbnROYW1lKG5hbWUpKTtcblxudmFyIGlzUGxhaW5PYmplY3QgPSAodGVtcE9iamVjdCkgPT4ge1xuICAgIGNvbnN0IHByb3RvdHlwZUNvcHkgPSB0ZW1wT2JqZWN0LmNvbnN0cnVjdG9yICYmIHRlbXBPYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlO1xuICAgIHJldHVybiAoaXNPYmplY3QocHJvdG90eXBlQ29weSkgJiYgcHJvdG90eXBlQ29weS5oYXNPd25Qcm9wZXJ0eSgnaXNQcm90b3R5cGVPZicpKTtcbn07XG5cbnZhciBpc1dlYiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG5mdW5jdGlvbiBjbG9uZU9iamVjdChkYXRhKSB7XG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRhKTtcbiAgICB9XG4gICAgY29uc3QgaXNGaWxlTGlzdEluc3RhbmNlID0gdHlwZW9mIEZpbGVMaXN0ICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgRmlsZUxpc3Q7XG4gICAgaWYgKGlzV2ViICYmIChkYXRhIGluc3RhbmNlb2YgQmxvYiB8fCBpc0ZpbGVMaXN0SW5zdGFuY2UpKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShkYXRhKTtcbiAgICBpZiAoIWlzQXJyYXkgJiYgIShpc09iamVjdChkYXRhKSAmJiBpc1BsYWluT2JqZWN0KGRhdGEpKSkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgY29uc3QgY29weSA9IGlzQXJyYXkgPyBbXSA6IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGRhdGEpKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSkge1xuICAgICAgICAgICAgY29weVtrZXldID0gY2xvbmVPYmplY3QoZGF0YVtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29weTtcbn1cblxudmFyIGlzS2V5ID0gKHZhbHVlKSA9PiAvXlxcdyokLy50ZXN0KHZhbHVlKTtcblxudmFyIGlzVW5kZWZpbmVkID0gKHZhbCkgPT4gdmFsID09PSB1bmRlZmluZWQ7XG5cbnZhciBjb21wYWN0ID0gKHZhbHVlKSA9PiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuXG52YXIgc3RyaW5nVG9QYXRoID0gKGlucHV0KSA9PiBjb21wYWN0KGlucHV0LnJlcGxhY2UoL1tcInwnXXxcXF0vZywgJycpLnNwbGl0KC9cXC58XFxbLykpO1xuXG52YXIgZ2V0ID0gKG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gICAgaWYgKCFwYXRoIHx8ICFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IChpc0tleShwYXRoKSA/IFtwYXRoXSA6IHN0cmluZ1RvUGF0aChwYXRoKSkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4gaXNOdWxsT3JVbmRlZmluZWQocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdFtrZXldLCBvYmplY3QpO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZChyZXN1bHQpIHx8IHJlc3VsdCA9PT0gb2JqZWN0XG4gICAgICAgID8gaXNVbmRlZmluZWQob2JqZWN0W3BhdGhdKVxuICAgICAgICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIDogb2JqZWN0W3BhdGhdXG4gICAgICAgIDogcmVzdWx0O1xufTtcblxudmFyIGlzQm9vbGVhbiA9ICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG5cbnZhciBpc0Z1bmN0aW9uID0gKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG5cbnZhciBzZXQgPSAob2JqZWN0LCBwYXRoLCB2YWx1ZSkgPT4ge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGNvbnN0IHRlbXBQYXRoID0gaXNLZXkocGF0aCkgPyBbcGF0aF0gOiBzdHJpbmdUb1BhdGgocGF0aCk7XG4gICAgY29uc3QgbGVuZ3RoID0gdGVtcFBhdGgubGVuZ3RoO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGVtcFBhdGhbaW5kZXhdO1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgICBuZXdWYWx1ZSA9XG4gICAgICAgICAgICAgICAgaXNPYmplY3Qob2JqVmFsdWUpIHx8IEFycmF5LmlzQXJyYXkob2JqVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgID8gb2JqVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiAhaXNOYU4oK3RlbXBQYXRoW2luZGV4ICsgMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nIHx8IGtleSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCBrZXkgPT09ICdwcm90b3R5cGUnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0W2tleV0gPSBuZXdWYWx1ZTtcbiAgICAgICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gICAgfVxufTtcblxuY29uc3QgRVZFTlRTID0ge1xuICAgIEJMVVI6ICdibHVyJyxcbiAgICBGT0NVU19PVVQ6ICdmb2N1c291dCcsXG4gICAgQ0hBTkdFOiAnY2hhbmdlJyxcbn07XG5jb25zdCBWQUxJREFUSU9OX01PREUgPSB7XG4gICAgb25CbHVyOiAnb25CbHVyJyxcbiAgICBvbkNoYW5nZTogJ29uQ2hhbmdlJyxcbiAgICBvblN1Ym1pdDogJ29uU3VibWl0JyxcbiAgICBvblRvdWNoZWQ6ICdvblRvdWNoZWQnLFxuICAgIGFsbDogJ2FsbCcsXG59O1xuY29uc3QgSU5QVVRfVkFMSURBVElPTl9SVUxFUyA9IHtcbiAgICBtYXg6ICdtYXgnLFxuICAgIG1pbjogJ21pbicsXG4gICAgbWF4TGVuZ3RoOiAnbWF4TGVuZ3RoJyxcbiAgICBtaW5MZW5ndGg6ICdtaW5MZW5ndGgnLFxuICAgIHBhdHRlcm46ICdwYXR0ZXJuJyxcbiAgICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgICB2YWxpZGF0ZTogJ3ZhbGlkYXRlJyxcbn07XG5cbi8qKlxuICogU2VwYXJhdGUgY29udGV4dCBmb3IgYGNvbnRyb2xgIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmVyZW5kZXJzLlxuICogSW50ZXJuYWwgaG9va3MgdGhhdCBvbmx5IG5lZWQgY29udHJvbCB1c2UgdGhpcyBpbnN0ZWFkIG9mIGZ1bGwgZm9ybSBjb250ZXh0LlxuICovXG5jb25zdCBIb29rRm9ybUNvbnRyb2xDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbkhvb2tGb3JtQ29udHJvbENvbnRleHQuZGlzcGxheU5hbWUgPSAnSG9va0Zvcm1Db250cm9sQ29udGV4dCc7XG4vKipcbiAqIEBpbnRlcm5hbCBJbnRlcm5hbCBob29rIHRvIGFjY2VzcyBvbmx5IGNvbnRyb2wgZnJvbSBjb250ZXh0LlxuICovXG5jb25zdCB1c2VGb3JtQ29udHJvbENvbnRleHQgPSAoKSA9PiBSZWFjdC51c2VDb250ZXh0KEhvb2tGb3JtQ29udHJvbENvbnRleHQpO1xuXG52YXIgZ2V0UHJveHlGb3JtU3RhdGUgPSAoZm9ybVN0YXRlLCBjb250cm9sLCBsb2NhbFByb3h5Rm9ybVN0YXRlLCBpc1Jvb3QgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICBkZWZhdWx0VmFsdWVzOiBjb250cm9sLl9kZWZhdWx0VmFsdWVzLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybVN0YXRlKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsIGtleSwge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2tleSA9IGtleTtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5fcHJveHlGb3JtU3RhdGVbX2tleV0gIT09IFZBTElEQVRJT05fTU9ERS5hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5fcHJveHlGb3JtU3RhdGVbX2tleV0gPSAhaXNSb290IHx8IFZBTElEQVRJT05fTU9ERS5hbGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsUHJveHlGb3JtU3RhdGUgJiYgKGxvY2FsUHJveHlGb3JtU3RhdGVbX2tleV0gPSB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybVN0YXRlW19rZXldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiBSZWFjdC51c2VFZmZlY3Q7XG5cbi8qKlxuICogVGhpcyBjdXN0b20gaG9vayBhbGxvd3MgeW91IHRvIHN1YnNjcmliZSB0byBlYWNoIGZvcm0gc3RhdGUsIGFuZCBpc29sYXRlIHRoZSByZS1yZW5kZXIgYXQgdGhlIGN1c3RvbSBob29rIGxldmVsLiBJdCBoYXMgaXRzIHNjb3BlIGluIHRlcm1zIG9mIGZvcm0gc3RhdGUgc3Vic2NyaXB0aW9uLCBzbyBpdCB3b3VsZCBub3QgYWZmZWN0IG90aGVyIHVzZUZvcm1TdGF0ZSBhbmQgdXNlRm9ybS4gVXNpbmcgdGhpcyBob29rIGNhbiByZWR1Y2UgdGhlIHJlLXJlbmRlciBpbXBhY3Qgb24gbGFyZ2UgYW5kIGNvbXBsZXggZm9ybSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogW0FQSV0oaHR0cHM6Ly9yZWFjdC1ob29rLWZvcm0uY29tL2RvY3MvdXNlZm9ybXN0YXRlKSDigKIgW0RlbW9dKGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy91c2Vmb3Jtc3RhdGUtNzV4bHkpXG4gKlxuICogQHBhcmFtIHByb3BzIC0gaW5jbHVkZSBvcHRpb25zIG9uIHNwZWNpZnkgZmllbGRzIHRvIHN1YnNjcmliZS4ge0BsaW5rIFVzZUZvcm1TdGF0ZVJldHVybn1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IHsgcmVnaXN0ZXIsIGhhbmRsZVN1Ym1pdCwgY29udHJvbCB9ID0gdXNlRm9ybSh7XG4gKiAgICAgZGVmYXVsdFZhbHVlczoge1xuICogICAgIGZpcnN0TmFtZTogXCJmaXJzdE5hbWVcIlxuICogICB9fSk7XG4gKiAgIGNvbnN0IHsgZGlydHlGaWVsZHMgfSA9IHVzZUZvcm1TdGF0ZSh7XG4gKiAgICAgY29udHJvbFxuICogICB9KTtcbiAqICAgY29uc3Qgb25TdWJtaXQgPSAoZGF0YSkgPT4gY29uc29sZS5sb2coZGF0YSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXQob25TdWJtaXQpfT5cbiAqICAgICAgIDxpbnB1dCB7Li4ucmVnaXN0ZXIoXCJmaXJzdE5hbWVcIil9IHBsYWNlaG9sZGVyPVwiRmlyc3QgTmFtZVwiIC8+XG4gKiAgICAgICB7ZGlydHlGaWVsZHMuZmlyc3ROYW1lICYmIDxwPkZpZWxkIGlzIGRpcnR5LjwvcD59XG4gKiAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIC8+XG4gKiAgICAgPC9mb3JtPlxuICogICApO1xuICogfVxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHVzZUZvcm1TdGF0ZShwcm9wcykge1xuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2xDb250ZXh0KCk7XG4gICAgY29uc3QgeyBjb250cm9sID0gZm9ybUNvbnRyb2wsIGRpc2FibGVkLCBuYW1lLCBleGFjdCB9ID0gcHJvcHMgfHwge307XG4gICAgY29uc3QgW2Zvcm1TdGF0ZSwgdXBkYXRlRm9ybVN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKGNvbnRyb2wuX2Zvcm1TdGF0ZSk7XG4gICAgY29uc3QgX2xvY2FsUHJveHlGb3JtU3RhdGUgPSBSZWFjdC51c2VSZWYoe1xuICAgICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZGlydHlGaWVsZHM6IGZhbHNlLFxuICAgICAgICB0b3VjaGVkRmllbGRzOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGluZ0ZpZWxkczogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2UsXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcnM6IGZhbHNlLFxuICAgIH0pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4gY29udHJvbC5fc3Vic2NyaWJlKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZm9ybVN0YXRlOiBfbG9jYWxQcm94eUZvcm1TdGF0ZS5jdXJyZW50LFxuICAgICAgICBleGFjdCxcbiAgICAgICAgY2FsbGJhY2s6IChmb3JtU3RhdGUpID0+IHtcbiAgICAgICAgICAgICFkaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAgIHVwZGF0ZUZvcm1TdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNvbnRyb2wuX2Zvcm1TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybVN0YXRlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH0pLCBbbmFtZSwgZGlzYWJsZWQsIGV4YWN0XSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgX2xvY2FsUHJveHlGb3JtU3RhdGUuY3VycmVudC5pc1ZhbGlkICYmIGNvbnRyb2wuX3NldFZhbGlkKHRydWUpO1xuICAgIH0sIFtjb250cm9sXSk7XG4gICAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4gZ2V0UHJveHlGb3JtU3RhdGUoZm9ybVN0YXRlLCBjb250cm9sLCBfbG9jYWxQcm94eUZvcm1TdGF0ZS5jdXJyZW50LCBmYWxzZSksIFtmb3JtU3RhdGUsIGNvbnRyb2xdKTtcbn1cblxudmFyIGlzU3RyaW5nID0gKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuXG52YXIgZ2VuZXJhdGVXYXRjaE91dHB1dCA9IChuYW1lcywgX25hbWVzLCBmb3JtVmFsdWVzLCBpc0dsb2JhbCwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKG5hbWVzKSkge1xuICAgICAgICBpc0dsb2JhbCAmJiBfbmFtZXMud2F0Y2guYWRkKG5hbWVzKTtcbiAgICAgICAgcmV0dXJuIGdldChmb3JtVmFsdWVzLCBuYW1lcywgZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZXMpKSB7XG4gICAgICAgIHJldHVybiBuYW1lcy5tYXAoKGZpZWxkTmFtZSkgPT4gKGlzR2xvYmFsICYmIF9uYW1lcy53YXRjaC5hZGQoZmllbGROYW1lKSxcbiAgICAgICAgICAgIGdldChmb3JtVmFsdWVzLCBmaWVsZE5hbWUpKSk7XG4gICAgfVxuICAgIGlzR2xvYmFsICYmIChfbmFtZXMud2F0Y2hBbGwgPSB0cnVlKTtcbiAgICByZXR1cm4gZm9ybVZhbHVlcztcbn07XG5cbnZhciBpc1ByaW1pdGl2ZSA9ICh2YWx1ZSkgPT4gaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpIHx8ICFpc09iamVjdFR5cGUodmFsdWUpO1xuXG5mdW5jdGlvbiBkZWVwRXF1YWwob2JqZWN0MSwgb2JqZWN0MiwgX2ludGVybmFsX3Zpc2l0ZWQgPSBuZXcgV2Vha1NldCgpKSB7XG4gICAgaWYgKGlzUHJpbWl0aXZlKG9iamVjdDEpIHx8IGlzUHJpbWl0aXZlKG9iamVjdDIpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuaXMob2JqZWN0MSwgb2JqZWN0Mik7XG4gICAgfVxuICAgIGlmIChpc0RhdGVPYmplY3Qob2JqZWN0MSkgJiYgaXNEYXRlT2JqZWN0KG9iamVjdDIpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuaXMob2JqZWN0MS5nZXRUaW1lKCksIG9iamVjdDIuZ2V0VGltZSgpKTtcbiAgICB9XG4gICAgY29uc3Qga2V5czEgPSBPYmplY3Qua2V5cyhvYmplY3QxKTtcbiAgICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKG9iamVjdDIpO1xuICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChfaW50ZXJuYWxfdmlzaXRlZC5oYXMob2JqZWN0MSkgfHwgX2ludGVybmFsX3Zpc2l0ZWQuaGFzKG9iamVjdDIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBfaW50ZXJuYWxfdmlzaXRlZC5hZGQob2JqZWN0MSk7XG4gICAgX2ludGVybmFsX3Zpc2l0ZWQuYWRkKG9iamVjdDIpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMxKSB7XG4gICAgICAgIGNvbnN0IHZhbDEgPSBvYmplY3QxW2tleV07XG4gICAgICAgIGlmICgha2V5czIuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgIT09ICdyZWYnKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwyID0gb2JqZWN0MltrZXldO1xuICAgICAgICAgICAgaWYgKChpc0RhdGVPYmplY3QodmFsMSkgJiYgaXNEYXRlT2JqZWN0KHZhbDIpKSB8fFxuICAgICAgICAgICAgICAgIChpc09iamVjdCh2YWwxKSAmJiBpc09iamVjdCh2YWwyKSkgfHxcbiAgICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheSh2YWwxKSAmJiBBcnJheS5pc0FycmF5KHZhbDIpKVxuICAgICAgICAgICAgICAgID8gIWRlZXBFcXVhbCh2YWwxLCB2YWwyLCBfaW50ZXJuYWxfdmlzaXRlZClcbiAgICAgICAgICAgICAgICA6ICFPYmplY3QuaXModmFsMSwgdmFsMikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ3VzdG9tIGhvb2sgdG8gc3Vic2NyaWJlIHRvIGZpZWxkIGNoYW5nZSBhbmQgaXNvbGF0ZSByZS1yZW5kZXJpbmcgYXQgdGhlIGNvbXBvbmVudCBsZXZlbC5cbiAqXG4gKiBAcmVtYXJrc1xuICpcbiAqIFtBUEldKGh0dHBzOi8vcmVhY3QtaG9vay1mb3JtLmNvbS9kb2NzL3VzZXdhdGNoKSDigKIgW0RlbW9dKGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy9yZWFjdC1ob29rLWZvcm0tdjctdHMtdXNld2F0Y2gtaDlpNWUpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBjb250cm9sIH0gPSB1c2VGb3JtKCk7XG4gKiBjb25zdCB2YWx1ZXMgPSB1c2VXYXRjaCh7XG4gKiAgIG5hbWU6IFwiZmllbGROYW1lXCJcbiAqICAgY29udHJvbCxcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gdXNlV2F0Y2gocHJvcHMpIHtcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sQ29udGV4dCgpO1xuICAgIGNvbnN0IHsgY29udHJvbCA9IGZvcm1Db250cm9sLCBuYW1lLCBkZWZhdWx0VmFsdWUsIGRpc2FibGVkLCBleGFjdCwgY29tcHV0ZSwgfSA9IHByb3BzIHx8IHt9O1xuICAgIGNvbnN0IF9kZWZhdWx0VmFsdWUgPSBSZWFjdC51c2VSZWYoZGVmYXVsdFZhbHVlKTtcbiAgICBjb25zdCBfY29tcHV0ZSA9IFJlYWN0LnVzZVJlZihjb21wdXRlKTtcbiAgICBjb25zdCBfY29tcHV0ZUZvcm1WYWx1ZXMgPSBSZWFjdC51c2VSZWYodW5kZWZpbmVkKTtcbiAgICBjb25zdCBfcHJldkNvbnRyb2wgPSBSZWFjdC51c2VSZWYoY29udHJvbCk7XG4gICAgY29uc3QgX3ByZXZOYW1lID0gUmVhY3QudXNlUmVmKG5hbWUpO1xuICAgIF9jb21wdXRlLmN1cnJlbnQgPSBjb21wdXRlO1xuICAgIGNvbnN0IFt2YWx1ZSwgdXBkYXRlVmFsdWVdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBjb250cm9sLl9nZXRXYXRjaChuYW1lLCBfZGVmYXVsdFZhbHVlLmN1cnJlbnQpO1xuICAgICAgICByZXR1cm4gX2NvbXB1dGUuY3VycmVudCA/IF9jb21wdXRlLmN1cnJlbnQoZGVmYXVsdFZhbHVlKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRDdXJyZW50T3V0cHV0ID0gUmVhY3QudXNlQ2FsbGJhY2soKHZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCBmb3JtVmFsdWVzID0gZ2VuZXJhdGVXYXRjaE91dHB1dChuYW1lLCBjb250cm9sLl9uYW1lcywgdmFsdWVzIHx8IGNvbnRyb2wuX2Zvcm1WYWx1ZXMsIGZhbHNlLCBfZGVmYXVsdFZhbHVlLmN1cnJlbnQpO1xuICAgICAgICByZXR1cm4gX2NvbXB1dGUuY3VycmVudCA/IF9jb21wdXRlLmN1cnJlbnQoZm9ybVZhbHVlcykgOiBmb3JtVmFsdWVzO1xuICAgIH0sIFtjb250cm9sLl9mb3JtVmFsdWVzLCBjb250cm9sLl9uYW1lcywgbmFtZV0pO1xuICAgIGNvbnN0IHJlZnJlc2hWYWx1ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IGdlbmVyYXRlV2F0Y2hPdXRwdXQobmFtZSwgY29udHJvbC5fbmFtZXMsIHZhbHVlcyB8fCBjb250cm9sLl9mb3JtVmFsdWVzLCBmYWxzZSwgX2RlZmF1bHRWYWx1ZS5jdXJyZW50KTtcbiAgICAgICAgICAgIGlmIChfY29tcHV0ZS5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRGb3JtVmFsdWVzID0gX2NvbXB1dGUuY3VycmVudChmb3JtVmFsdWVzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChjb21wdXRlZEZvcm1WYWx1ZXMsIF9jb21wdXRlRm9ybVZhbHVlcy5jdXJyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZShjb21wdXRlZEZvcm1WYWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICBfY29tcHV0ZUZvcm1WYWx1ZXMuY3VycmVudCA9IGNvbXB1dGVkRm9ybVZhbHVlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZShmb3JtVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtjb250cm9sLl9mb3JtVmFsdWVzLCBjb250cm9sLl9uYW1lcywgZGlzYWJsZWQsIG5hbWVdKTtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKF9wcmV2Q29udHJvbC5jdXJyZW50ICE9PSBjb250cm9sIHx8XG4gICAgICAgICAgICAhZGVlcEVxdWFsKF9wcmV2TmFtZS5jdXJyZW50LCBuYW1lKSkge1xuICAgICAgICAgICAgX3ByZXZDb250cm9sLmN1cnJlbnQgPSBjb250cm9sO1xuICAgICAgICAgICAgX3ByZXZOYW1lLmN1cnJlbnQgPSBuYW1lO1xuICAgICAgICAgICAgcmVmcmVzaFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wuX3N1YnNjcmliZSh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgZm9ybVN0YXRlOiB7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4YWN0LFxuICAgICAgICAgICAgY2FsbGJhY2s6IChmb3JtU3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICByZWZyZXNoVmFsdWUoZm9ybVN0YXRlLnZhbHVlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9LCBbY29udHJvbCwgZXhhY3QsIG5hbWUsIHJlZnJlc2hWYWx1ZV0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiBjb250cm9sLl9yZW1vdmVVbm1vdW50ZWQoKSk7XG4gICAgLy8gSWYgbmFtZSBvciBjb250cm9sIGNoYW5nZWQgZm9yIHRoaXMgcmVuZGVyLCBzeW5jaHJvbm91c2x5IHJlZmxlY3QgdGhlXG4gICAgLy8gbGF0ZXN0IHZhbHVlIHNvIGNhbGxlcnMgKGxpa2UgdXNlQ29udHJvbGxlcikgc2VlIHRoZSBjb3JyZWN0IHZhbHVlXG4gICAgLy8gaW1tZWRpYXRlbHkgb24gdGhlIHNhbWUgcmVuZGVyLlxuICAgIC8vIE9wdGltaXplOiBDaGVjayBjb250cm9sIHJlZmVyZW5jZSBmaXJzdCBiZWZvcmUgZXhwZW5zaXZlIGRlZXBFcXVhbFxuICAgIGNvbnN0IGNvbnRyb2xDaGFuZ2VkID0gX3ByZXZDb250cm9sLmN1cnJlbnQgIT09IGNvbnRyb2w7XG4gICAgY29uc3QgcHJldk5hbWUgPSBfcHJldk5hbWUuY3VycmVudDtcbiAgICAvLyBDYWNoZSB0aGUgY29tcHV0ZWQgb3V0cHV0IHRvIGF2b2lkIGR1cGxpY2F0ZSBjYWxscyB3aXRoaW4gdGhlIHNhbWUgcmVuZGVyXG4gICAgLy8gV2UgaW5jbHVkZSBzaG91bGRSZXR1cm5JbW1lZGlhdGUgaW4gZGVwcyB0byBlbnN1cmUgcHJvcGVyIHJlY29tcHV0YXRpb25cbiAgICBjb25zdCBjb21wdXRlZE91dHB1dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWVDaGFuZ2VkID0gIWNvbnRyb2xDaGFuZ2VkICYmICFkZWVwRXF1YWwocHJldk5hbWUsIG5hbWUpO1xuICAgICAgICBjb25zdCBzaG91bGRSZXR1cm5JbW1lZGlhdGUgPSBjb250cm9sQ2hhbmdlZCB8fCBuYW1lQ2hhbmdlZDtcbiAgICAgICAgcmV0dXJuIHNob3VsZFJldHVybkltbWVkaWF0ZSA/IGdldEN1cnJlbnRPdXRwdXQoKSA6IG51bGw7XG4gICAgfSwgW2Rpc2FibGVkLCBjb250cm9sQ2hhbmdlZCwgbmFtZSwgcHJldk5hbWUsIGdldEN1cnJlbnRPdXRwdXRdKTtcbiAgICByZXR1cm4gY29tcHV0ZWRPdXRwdXQgIT09IG51bGwgPyBjb21wdXRlZE91dHB1dCA6IHZhbHVlO1xufVxuXG4vKipcbiAqIEN1c3RvbSBob29rIHRvIHdvcmsgd2l0aCBjb250cm9sbGVkIGNvbXBvbmVudCwgdGhpcyBmdW5jdGlvbiBwcm92aWRlIHlvdSB3aXRoIGJvdGggZm9ybSBhbmQgZmllbGQgbGV2ZWwgc3RhdGUuIFJlLXJlbmRlciBpcyBpc29sYXRlZCBhdCB0aGUgaG9vayBsZXZlbC5cbiAqXG4gKiBAcmVtYXJrc1xuICogW0FQSV0oaHR0cHM6Ly9yZWFjdC1ob29rLWZvcm0uY29tL2RvY3MvdXNlY29udHJvbGxlcikg4oCiIFtEZW1vXShodHRwczovL2NvZGVzYW5kYm94LmlvL3MvdXNlY29udHJvbGxlci0wbzhweClcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSB0aGUgcGF0aCBuYW1lIHRvIHRoZSBmb3JtIGZpZWxkIHZhbHVlLCBhbmQgdmFsaWRhdGlvbiBydWxlcy5cbiAqXG4gKiBAcmV0dXJucyBmaWVsZCBwcm9wZXJ0aWVzLCBmaWVsZCBhbmQgZm9ybSBzdGF0ZS4ge0BsaW5rIFVzZUNvbnRyb2xsZXJSZXR1cm59XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZnVuY3Rpb24gSW5wdXQocHJvcHMpIHtcbiAqICAgY29uc3QgeyBmaWVsZCwgZmllbGRTdGF0ZSwgZm9ybVN0YXRlIH0gPSB1c2VDb250cm9sbGVyKHByb3BzKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPGlucHV0IHsuLi5maWVsZH0gcGxhY2Vob2xkZXI9e3Byb3BzLm5hbWV9IC8+XG4gKiAgICAgICA8cD57ZmllbGRTdGF0ZS5pc1RvdWNoZWQgJiYgXCJUb3VjaGVkXCJ9PC9wPlxuICogICAgICAgPHA+e2Zvcm1TdGF0ZS5pc1N1Ym1pdHRlZCA/IFwic3VibWl0dGVkXCIgOiBcIlwifTwvcD5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICovXG5mdW5jdGlvbiB1c2VDb250cm9sbGVyKHByb3BzKSB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbENvbnRleHQoKTtcbiAgICBjb25zdCB7IG5hbWUsIGRpc2FibGVkLCBjb250cm9sID0gZm9ybUNvbnRyb2wsIHNob3VsZFVucmVnaXN0ZXIsIGRlZmF1bHRWYWx1ZSwgZXhhY3QgPSB0cnVlLCB9ID0gcHJvcHM7XG4gICAgY29uc3QgaXNBcnJheUZpZWxkID0gaXNOYW1lSW5GaWVsZEFycmF5KGNvbnRyb2wuX25hbWVzLmFycmF5LCBuYW1lKTtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVNZW1vID0gUmVhY3QudXNlTWVtbygoKSA9PiBnZXQoY29udHJvbC5fZm9ybVZhbHVlcywgbmFtZSwgZ2V0KGNvbnRyb2wuX2RlZmF1bHRWYWx1ZXMsIG5hbWUsIGRlZmF1bHRWYWx1ZSkpLCBbY29udHJvbCwgbmFtZSwgZGVmYXVsdFZhbHVlXSk7XG4gICAgY29uc3QgdmFsdWUgPSB1c2VXYXRjaCh7XG4gICAgICAgIGNvbnRyb2wsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlTWVtbyxcbiAgICAgICAgZXhhY3QsXG4gICAgfSk7XG4gICAgY29uc3QgZm9ybVN0YXRlID0gdXNlRm9ybVN0YXRlKHtcbiAgICAgICAgY29udHJvbCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZXhhY3QsXG4gICAgfSk7XG4gICAgY29uc3QgX3Byb3BzID0gUmVhY3QudXNlUmVmKHByb3BzKTtcbiAgICBjb25zdCBfcHJldmlvdXNOYW1lUmVmID0gUmVhY3QudXNlUmVmKHVuZGVmaW5lZCk7XG4gICAgY29uc3QgX3JlZ2lzdGVyUHJvcHMgPSBSZWFjdC51c2VSZWYoY29udHJvbC5yZWdpc3RlcihuYW1lLCB7XG4gICAgICAgIC4uLnByb3BzLnJ1bGVzLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgLi4uKGlzQm9vbGVhbihwcm9wcy5kaXNhYmxlZCkgPyB7IGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCB9IDoge30pLFxuICAgIH0pKTtcbiAgICBfcHJvcHMuY3VycmVudCA9IHByb3BzO1xuICAgIGNvbnN0IGZpZWxkU3RhdGUgPSBSZWFjdC51c2VNZW1vKCgpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7XG4gICAgICAgIGludmFsaWQ6IHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBnZXQ6ICgpID0+ICEhZ2V0KGZvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpLFxuICAgICAgICB9LFxuICAgICAgICBpc0RpcnR5OiB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0OiAoKSA9PiAhIWdldChmb3JtU3RhdGUuZGlydHlGaWVsZHMsIG5hbWUpLFxuICAgICAgICB9LFxuICAgICAgICBpc1RvdWNoZWQ6IHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBnZXQ6ICgpID0+ICEhZ2V0KGZvcm1TdGF0ZS50b3VjaGVkRmllbGRzLCBuYW1lKSxcbiAgICAgICAgfSxcbiAgICAgICAgaXNWYWxpZGF0aW5nOiB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0OiAoKSA9PiAhIWdldChmb3JtU3RhdGUudmFsaWRhdGluZ0ZpZWxkcywgbmFtZSksXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0OiAoKSA9PiBnZXQoZm9ybVN0YXRlLmVycm9ycywgbmFtZSksXG4gICAgICAgIH0sXG4gICAgfSksIFtmb3JtU3RhdGUsIG5hbWVdKTtcbiAgICBjb25zdCBvbkNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4gX3JlZ2lzdGVyUHJvcHMuY3VycmVudC5vbkNoYW5nZSh7XG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgdmFsdWU6IGdldEV2ZW50VmFsdWUoZXZlbnQpLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogRVZFTlRTLkNIQU5HRSxcbiAgICB9KSwgW25hbWVdKTtcbiAgICBjb25zdCBvbkJsdXIgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBfcmVnaXN0ZXJQcm9wcy5jdXJyZW50Lm9uQmx1cih7XG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgdmFsdWU6IGdldChjb250cm9sLl9mb3JtVmFsdWVzLCBuYW1lKSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IEVWRU5UUy5CTFVSLFxuICAgIH0pLCBbbmFtZSwgY29udHJvbC5fZm9ybVZhbHVlc10pO1xuICAgIGNvbnN0IHJlZiA9IFJlYWN0LnVzZUNhbGxiYWNrKChlbG0pID0+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoY29udHJvbC5fZmllbGRzLCBuYW1lKTtcbiAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLl9mICYmIGVsbSkge1xuICAgICAgICAgICAgZmllbGQuX2YucmVmID0ge1xuICAgICAgICAgICAgICAgIGZvY3VzOiAoKSA9PiBpc0Z1bmN0aW9uKGVsbS5mb2N1cykgJiYgZWxtLmZvY3VzKCksXG4gICAgICAgICAgICAgICAgc2VsZWN0OiAoKSA9PiBpc0Z1bmN0aW9uKGVsbS5zZWxlY3QpICYmIGVsbS5zZWxlY3QoKSxcbiAgICAgICAgICAgICAgICBzZXRDdXN0b21WYWxpZGl0eTogKG1lc3NhZ2UpID0+IGlzRnVuY3Rpb24oZWxtLnNldEN1c3RvbVZhbGlkaXR5KSAmJiBlbG0uc2V0Q3VzdG9tVmFsaWRpdHkobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgcmVwb3J0VmFsaWRpdHk6ICgpID0+IGlzRnVuY3Rpb24oZWxtLnJlcG9ydFZhbGlkaXR5KSAmJiBlbG0ucmVwb3J0VmFsaWRpdHkoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LCBbY29udHJvbC5fZmllbGRzLCBuYW1lXSk7XG4gICAgY29uc3QgZmllbGQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAuLi4oaXNCb29sZWFuKGRpc2FibGVkKSB8fCBmb3JtU3RhdGUuZGlzYWJsZWRcbiAgICAgICAgICAgID8geyBkaXNhYmxlZDogZm9ybVN0YXRlLmRpc2FibGVkIHx8IGRpc2FibGVkIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgb25CbHVyLFxuICAgICAgICByZWYsXG4gICAgfSksIFtuYW1lLCBkaXNhYmxlZCwgZm9ybVN0YXRlLmRpc2FibGVkLCBvbkNoYW5nZSwgb25CbHVyLCByZWYsIHZhbHVlXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgX3Nob3VsZFVucmVnaXN0ZXJGaWVsZCA9IGNvbnRyb2wuX29wdGlvbnMuc2hvdWxkVW5yZWdpc3RlciB8fCBzaG91bGRVbnJlZ2lzdGVyO1xuICAgICAgICBjb25zdCBwcmV2aW91c05hbWUgPSBfcHJldmlvdXNOYW1lUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmIChwcmV2aW91c05hbWUgJiYgcHJldmlvdXNOYW1lICE9PSBuYW1lICYmICFpc0FycmF5RmllbGQpIHtcbiAgICAgICAgICAgIGNvbnRyb2wudW5yZWdpc3RlcihwcmV2aW91c05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2wucmVnaXN0ZXIobmFtZSwge1xuICAgICAgICAgICAgLi4uX3Byb3BzLmN1cnJlbnQucnVsZXMsXG4gICAgICAgICAgICAuLi4oaXNCb29sZWFuKF9wcm9wcy5jdXJyZW50LmRpc2FibGVkKVxuICAgICAgICAgICAgICAgID8geyBkaXNhYmxlZDogX3Byb3BzLmN1cnJlbnQuZGlzYWJsZWQgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdXBkYXRlTW91bnRlZCA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoY29udHJvbC5fZmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZC5fZikge1xuICAgICAgICAgICAgICAgIGZpZWxkLl9mLm1vdW50ID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHVwZGF0ZU1vdW50ZWQobmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChfc2hvdWxkVW5yZWdpc3RlckZpZWxkKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNsb25lT2JqZWN0KGdldChjb250cm9sLl9vcHRpb25zLmRlZmF1bHRWYWx1ZXMsIG5hbWUsIF9wcm9wcy5jdXJyZW50LmRlZmF1bHRWYWx1ZSkpO1xuICAgICAgICAgICAgc2V0KGNvbnRyb2wuX2RlZmF1bHRWYWx1ZXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChnZXQoY29udHJvbC5fZm9ybVZhbHVlcywgbmFtZSkpKSB7XG4gICAgICAgICAgICAgICAgc2V0KGNvbnRyb2wuX2Zvcm1WYWx1ZXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAhaXNBcnJheUZpZWxkICYmIGNvbnRyb2wucmVnaXN0ZXIobmFtZSk7XG4gICAgICAgIF9wcmV2aW91c05hbWVSZWYuY3VycmVudCA9IG5hbWU7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAoaXNBcnJheUZpZWxkXG4gICAgICAgICAgICAgICAgPyBfc2hvdWxkVW5yZWdpc3RlckZpZWxkICYmICFjb250cm9sLl9zdGF0ZS5hY3Rpb25cbiAgICAgICAgICAgICAgICA6IF9zaG91bGRVbnJlZ2lzdGVyRmllbGQpXG4gICAgICAgICAgICAgICAgPyBjb250cm9sLnVucmVnaXN0ZXIobmFtZSlcbiAgICAgICAgICAgICAgICA6IHVwZGF0ZU1vdW50ZWQobmFtZSwgZmFsc2UpO1xuICAgICAgICB9O1xuICAgIH0sIFtuYW1lLCBjb250cm9sLCBpc0FycmF5RmllbGQsIHNob3VsZFVucmVnaXN0ZXJdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb250cm9sLl9zZXREaXNhYmxlZEZpZWxkKHtcbiAgICAgICAgICAgIGRpc2FibGVkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgfSk7XG4gICAgfSwgW2Rpc2FibGVkLCBuYW1lLCBjb250cm9sXSk7XG4gICAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGZvcm1TdGF0ZSxcbiAgICAgICAgZmllbGRTdGF0ZSxcbiAgICB9KSwgW2ZpZWxkLCBmb3JtU3RhdGUsIGZpZWxkU3RhdGVdKTtcbn1cblxuLyoqXG4gKiBDb21wb25lbnQgYmFzZWQgb24gYHVzZUNvbnRyb2xsZXJgIGhvb2sgdG8gd29yayB3aXRoIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICpcbiAqIEByZW1hcmtzXG4gKiBbQVBJXShodHRwczovL3JlYWN0LWhvb2stZm9ybS5jb20vZG9jcy91c2Vjb250cm9sbGVyL2NvbnRyb2xsZXIpIOKAoiBbRGVtb10oaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL3JlYWN0LWhvb2stZm9ybS12Ni1jb250cm9sbGVyLXRzLWp3eXp3KSDigKIgW1ZpZGVvXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PU4yVU5rX1VDVnlBKVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIHRoZSBwYXRoIG5hbWUgdG8gdGhlIGZvcm0gZmllbGQgdmFsdWUsIGFuZCB2YWxpZGF0aW9uIHJ1bGVzLlxuICpcbiAqIEByZXR1cm5zIHByb3ZpZGUgZmllbGQgaGFuZGxlciBmdW5jdGlvbnMsIGZpZWxkIGFuZCBmb3JtIHN0YXRlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgeyBjb250cm9sIH0gPSB1c2VGb3JtPEZvcm1WYWx1ZXM+KHtcbiAqICAgICBkZWZhdWx0VmFsdWVzOiB7XG4gKiAgICAgICB0ZXN0OiBcIlwiXG4gKiAgICAgfVxuICogICB9KTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGZvcm0+XG4gKiAgICAgICA8Q29udHJvbGxlclxuICogICAgICAgICBjb250cm9sPXtjb250cm9sfVxuICogICAgICAgICBuYW1lPVwidGVzdFwiXG4gKiAgICAgICAgIHJlbmRlcj17KHsgZmllbGQ6IHsgb25DaGFuZ2UsIG9uQmx1ciwgdmFsdWUsIHJlZiB9LCBmb3JtU3RhdGUsIGZpZWxkU3RhdGUgfSkgPT4gKFxuICogICAgICAgICAgIDw+XG4gKiAgICAgICAgICAgICA8aW5wdXRcbiAqICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfSAvLyBzZW5kIHZhbHVlIHRvIGhvb2sgZm9ybVxuICogICAgICAgICAgICAgICBvbkJsdXI9e29uQmx1cn0gLy8gbm90aWZ5IHdoZW4gaW5wdXQgaXMgdG91Y2hlZFxuICogICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9IC8vIHJldHVybiB1cGRhdGVkIHZhbHVlXG4gKiAgICAgICAgICAgICAgIHJlZj17cmVmfSAvLyBzZXQgcmVmIGZvciBmb2N1cyBtYW5hZ2VtZW50XG4gKiAgICAgICAgICAgICAvPlxuICogICAgICAgICAgICAgPHA+e2Zvcm1TdGF0ZS5pc1N1Ym1pdHRlZCA/IFwic3VibWl0dGVkXCIgOiBcIlwifTwvcD5cbiAqICAgICAgICAgICAgIDxwPntmaWVsZFN0YXRlLmlzVG91Y2hlZCA/IFwidG91Y2hlZFwiIDogXCJcIn08L3A+XG4gKiAgICAgICAgICAgPC8+XG4gKiAgICAgICAgICl9XG4gKiAgICAgICAvPlxuICogICAgIDwvZm9ybT5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICovXG5jb25zdCBDb250cm9sbGVyID0gKHByb3BzKSA9PiBwcm9wcy5yZW5kZXIodXNlQ29udHJvbGxlcihwcm9wcykpO1xuXG5jb25zdCBmbGF0dGVuID0gKG9iaikgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgaWYgKGlzT2JqZWN0VHlwZShvYmpba2V5XSkgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGZsYXR0ZW4ob2JqW2tleV0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBuZXN0ZWRLZXkgb2YgT2JqZWN0LmtleXMobmVzdGVkKSkge1xuICAgICAgICAgICAgICAgIG91dHB1dFtgJHtrZXl9LiR7bmVzdGVkS2V5fWBdID0gbmVzdGVkW25lc3RlZEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvdXRwdXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59O1xuXG5jb25zdCBIb29rRm9ybUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuSG9va0Zvcm1Db250ZXh0LmRpc3BsYXlOYW1lID0gJ0hvb2tGb3JtQ29udGV4dCc7XG4vKipcbiAqIFRoaXMgY3VzdG9tIGhvb2sgYWxsb3dzIHlvdSB0byBhY2Nlc3MgdGhlIGZvcm0gY29udGV4dC4gdXNlRm9ybUNvbnRleHQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZXMsIHdoZXJlIGl0IHdvdWxkIGJlY29tZSBpbmNvbnZlbmllbnQgdG8gcGFzcyB0aGUgY29udGV4dCBhcyBhIHByb3AuIFRvIGJlIHVzZWQgd2l0aCB7QGxpbmsgRm9ybVByb3ZpZGVyfS5cbiAqXG4gKiBAcmVtYXJrc1xuICogW0FQSV0oaHR0cHM6Ly9yZWFjdC1ob29rLWZvcm0uY29tL2RvY3MvdXNlZm9ybWNvbnRleHQpIOKAoiBbRGVtb10oaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL3JlYWN0LWhvb2stZm9ybS12Ny1mb3JtLWNvbnRleHQteXR1ZGkpXG4gKlxuICogQHJldHVybnMgcmV0dXJuIGFsbCB1c2VGb3JtIG1ldGhvZHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IG1ldGhvZHMgPSB1c2VGb3JtKCk7XG4gKiAgIGNvbnN0IG9uU3VibWl0ID0gZGF0YSA9PiBjb25zb2xlLmxvZyhkYXRhKTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPEZvcm1Qcm92aWRlciB7Li4ubWV0aG9kc30gPlxuICogICAgICAgPGZvcm0gb25TdWJtaXQ9e21ldGhvZHMuaGFuZGxlU3VibWl0KG9uU3VibWl0KX0+XG4gKiAgICAgICAgIDxOZXN0ZWRJbnB1dCAvPlxuICogICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIC8+XG4gKiAgICAgICA8L2Zvcm0+XG4gKiAgICAgPC9Gb3JtUHJvdmlkZXI+XG4gKiAgICk7XG4gKiB9XG4gKlxuICogIGZ1bmN0aW9uIE5lc3RlZElucHV0KCkge1xuICogICBjb25zdCB7IHJlZ2lzdGVyIH0gPSB1c2VGb3JtQ29udGV4dCgpOyAvLyByZXRyaWV2ZSBhbGwgaG9vayBtZXRob2RzXG4gKiAgIHJldHVybiA8aW5wdXQgey4uLnJlZ2lzdGVyKFwidGVzdFwiKX0gLz47XG4gKiB9XG4gKiBgYGBcbiAqL1xuY29uc3QgdXNlRm9ybUNvbnRleHQgPSAoKSA9PiBSZWFjdC51c2VDb250ZXh0KEhvb2tGb3JtQ29udGV4dCk7XG4vKipcbiAqIEEgcHJvdmlkZXIgY29tcG9uZW50IHRoYXQgcHJvcGFnYXRlcyB0aGUgYHVzZUZvcm1gIG1ldGhvZHMgdG8gYWxsIGNoaWxkcmVuIGNvbXBvbmVudHMgdmlhIFtSZWFjdCBDb250ZXh0XShodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlQ29udGV4dCkgQVBJLiBUbyBiZSB1c2VkIHdpdGgge0BsaW5rIHVzZUZvcm1Db250ZXh0fS5cbiAqXG4gKiBAcmVtYXJrc1xuICogW0FQSV0oaHR0cHM6Ly9yZWFjdC1ob29rLWZvcm0uY29tL2RvY3MvdXNlZm9ybWNvbnRleHQpIOKAoiBbRGVtb10oaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL3JlYWN0LWhvb2stZm9ybS12Ny1mb3JtLWNvbnRleHQteXR1ZGkpXG4gKlxuICogQHBhcmFtIHByb3BzIC0gYWxsIHVzZUZvcm0gbWV0aG9kc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgbWV0aG9kcyA9IHVzZUZvcm0oKTtcbiAqICAgY29uc3Qgb25TdWJtaXQgPSBkYXRhID0+IGNvbnNvbGUubG9nKGRhdGEpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Rm9ybVByb3ZpZGVyIHsuLi5tZXRob2RzfSA+XG4gKiAgICAgICA8Zm9ybSBvblN1Ym1pdD17bWV0aG9kcy5oYW5kbGVTdWJtaXQob25TdWJtaXQpfT5cbiAqICAgICAgICAgPE5lc3RlZElucHV0IC8+XG4gKiAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgLz5cbiAqICAgICAgIDwvZm9ybT5cbiAqICAgICA8L0Zvcm1Qcm92aWRlcj5cbiAqICAgKTtcbiAqIH1cbiAqXG4gKiAgZnVuY3Rpb24gTmVzdGVkSW5wdXQoKSB7XG4gKiAgIGNvbnN0IHsgcmVnaXN0ZXIgfSA9IHVzZUZvcm1Db250ZXh0KCk7IC8vIHJldHJpZXZlIGFsbCBob29rIG1ldGhvZHNcbiAqICAgcmV0dXJuIDxpbnB1dCB7Li4ucmVnaXN0ZXIoXCJ0ZXN0XCIpfSAvPjtcbiAqIH1cbiAqIGBgYFxuICovXG5jb25zdCBGb3JtUHJvdmlkZXIgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IGNoaWxkcmVuLCB3YXRjaCwgZ2V0VmFsdWVzLCBnZXRGaWVsZFN0YXRlLCBzZXRFcnJvciwgY2xlYXJFcnJvcnMsIHNldFZhbHVlLCB0cmlnZ2VyLCBmb3JtU3RhdGUsIHJlc2V0RmllbGQsIHJlc2V0LCBoYW5kbGVTdWJtaXQsIHVucmVnaXN0ZXIsIGNvbnRyb2wsIHJlZ2lzdGVyLCBzZXRGb2N1cywgc3Vic2NyaWJlLCB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEhvb2tGb3JtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgICAgICAgICAgd2F0Y2gsXG4gICAgICAgICAgICBnZXRWYWx1ZXMsXG4gICAgICAgICAgICBnZXRGaWVsZFN0YXRlLFxuICAgICAgICAgICAgc2V0RXJyb3IsXG4gICAgICAgICAgICBjbGVhckVycm9ycyxcbiAgICAgICAgICAgIHNldFZhbHVlLFxuICAgICAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgICAgIGZvcm1TdGF0ZSxcbiAgICAgICAgICAgIHJlc2V0RmllbGQsXG4gICAgICAgICAgICByZXNldCxcbiAgICAgICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgICAgIHVucmVnaXN0ZXIsXG4gICAgICAgICAgICBjb250cm9sLFxuICAgICAgICAgICAgcmVnaXN0ZXIsXG4gICAgICAgICAgICBzZXRGb2N1cyxcbiAgICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgfSksIFtcbiAgICAgICAgICAgIGNsZWFyRXJyb3JzLFxuICAgICAgICAgICAgY29udHJvbCxcbiAgICAgICAgICAgIGZvcm1TdGF0ZSxcbiAgICAgICAgICAgIGdldEZpZWxkU3RhdGUsXG4gICAgICAgICAgICBnZXRWYWx1ZXMsXG4gICAgICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgICAgICByZWdpc3RlcixcbiAgICAgICAgICAgIHJlc2V0LFxuICAgICAgICAgICAgcmVzZXRGaWVsZCxcbiAgICAgICAgICAgIHNldEVycm9yLFxuICAgICAgICAgICAgc2V0Rm9jdXMsXG4gICAgICAgICAgICBzZXRWYWx1ZSxcbiAgICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICAgIHRyaWdnZXIsXG4gICAgICAgICAgICB1bnJlZ2lzdGVyLFxuICAgICAgICAgICAgd2F0Y2gsXG4gICAgICAgIF0pIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSG9va0Zvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udHJvbCB9LCBjaGlsZHJlbikpKTtcbn07XG5cbmNvbnN0IFBPU1RfUkVRVUVTVCA9ICdwb3N0Jztcbi8qKlxuICogRm9ybSBjb21wb25lbnQgdG8gbWFuYWdlIHN1Ym1pc3Npb24uXG4gKlxuICogQHBhcmFtIHByb3BzIC0gdG8gc2V0dXAgc3VibWlzc2lvbiBkZXRhaWwuIHtAbGluayBGb3JtUHJvcHN9XG4gKlxuICogQHJldHVybnMgZm9ybSBjb21wb25lbnQgb3IgaGVhZGxlc3MgcmVuZGVyIHByb3AuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCB7IGNvbnRyb2wsIGZvcm1TdGF0ZTogeyBlcnJvcnMgfSB9ID0gdXNlRm9ybSgpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Rm9ybSBhY3Rpb249XCIvYXBpXCIgY29udHJvbD17Y29udHJvbH0+XG4gKiAgICAgICA8aW5wdXQgey4uLnJlZ2lzdGVyKFwibmFtZVwiKX0gLz5cbiAqICAgICAgIDxwPntlcnJvcnM/LnJvb3Q/LnNlcnZlciAmJiAnU2VydmVyIGVycm9yJ308L3A+XG4gKiAgICAgICA8YnV0dG9uPlN1Ym1pdDwvYnV0dG9uPlxuICogICAgIDwvRm9ybT5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBGb3JtKHByb3BzKSB7XG4gICAgY29uc3QgbWV0aG9kcyA9IHVzZUZvcm1Db250ZXh0KCk7XG4gICAgY29uc3QgW21vdW50ZWQsIHNldE1vdW50ZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHsgY29udHJvbCA9IG1ldGhvZHMuY29udHJvbCwgb25TdWJtaXQsIGNoaWxkcmVuLCBhY3Rpb24sIG1ldGhvZCA9IFBPU1RfUkVRVUVTVCwgaGVhZGVycywgZW5jVHlwZSwgb25FcnJvciwgcmVuZGVyLCBvblN1Y2Nlc3MsIHZhbGlkYXRlU3RhdHVzLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgICBjb25zdCBzdWJtaXQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGxldCB0eXBlID0gJyc7XG4gICAgICAgIGF3YWl0IGNvbnRyb2wuaGFuZGxlU3VibWl0KGFzeW5jIChkYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgbGV0IGZvcm1EYXRhSnNvbiA9ICcnO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YUpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYSkgeyB9XG4gICAgICAgICAgICBjb25zdCBmbGF0dGVuRm9ybVZhbHVlcyA9IGZsYXR0ZW4oY29udHJvbC5fZm9ybVZhbHVlcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmbGF0dGVuRm9ybVZhbHVlcykge1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIGZsYXR0ZW5Gb3JtVmFsdWVzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uU3VibWl0KSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgb25TdWJtaXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGFKc29uLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFN0cmluZ2lmeVN1Ym1pc3Npb25EYXRhID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY1R5cGUsXG4gICAgICAgICAgICAgICAgICAgIF0uc29tZSgodmFsdWUpID0+IHZhbHVlICYmIHZhbHVlLmluY2x1ZGVzKCdqc29uJykpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFN0cmluZyhhY3Rpb24pLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oZW5jVHlwZSAmJiBlbmNUeXBlICE9PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7ICdDb250ZW50LVR5cGUnOiBlbmNUeXBlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogc2hvdWxkU3RyaW5naWZ5U3VibWlzc2lvbkRhdGEgPyBmb3JtRGF0YUpzb24gOiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbGlkYXRlU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSAzMDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yICYmIG9uRXJyb3IoeyByZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VjY2VzcyAmJiBvblN1Y2Nlc3MoeyByZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yICYmIG9uRXJyb3IoeyBlcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKGV2ZW50KTtcbiAgICAgICAgaWYgKGhhc0Vycm9yICYmIHByb3BzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHByb3BzLmNvbnRyb2wuX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgICAgIGlzU3VibWl0U3VjY2Vzc2Z1bDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByb3BzLmNvbnRyb2wuc2V0RXJyb3IoJ3Jvb3Quc2VydmVyJywge1xuICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0TW91bnRlZCh0cnVlKTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIHJlbmRlciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCByZW5kZXIoe1xuICAgICAgICBzdWJtaXQsXG4gICAgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiLCB7IG5vVmFsaWRhdGU6IG1vdW50ZWQsIGFjdGlvbjogYWN0aW9uLCBtZXRob2Q6IG1ldGhvZCwgZW5jVHlwZTogZW5jVHlwZSwgb25TdWJtaXQ6IHN1Ym1pdCwgLi4ucmVzdCB9LCBjaGlsZHJlbikpO1xufVxuXG5jb25zdCBGb3JtU3RhdGVTdWJzY3JpYmUgPSAoeyBjb250cm9sLCBkaXNhYmxlZCwgZXhhY3QsIG5hbWUsIHJlbmRlciwgfSkgPT4gcmVuZGVyKHVzZUZvcm1TdGF0ZSh7IGNvbnRyb2wsIG5hbWUsIGRpc2FibGVkLCBleGFjdCB9KSk7XG5cbnZhciBhcHBlbmRFcnJvcnMgPSAobmFtZSwgdmFsaWRhdGVBbGxGaWVsZENyaXRlcmlhLCBlcnJvcnMsIHR5cGUsIG1lc3NhZ2UpID0+IHZhbGlkYXRlQWxsRmllbGRDcml0ZXJpYVxuICAgID8ge1xuICAgICAgICAuLi5lcnJvcnNbbmFtZV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi4oZXJyb3JzW25hbWVdICYmIGVycm9yc1tuYW1lXS50eXBlcyA/IGVycm9yc1tuYW1lXS50eXBlcyA6IHt9KSxcbiAgICAgICAgICAgIFt0eXBlXTogbWVzc2FnZSB8fCB0cnVlLFxuICAgICAgICB9LFxuICAgIH1cbiAgICA6IHt9O1xuXG52YXIgY29udmVydFRvQXJyYXlQYXlsb2FkID0gKHZhbHVlKSA9PiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pO1xuXG52YXIgY3JlYXRlU3ViamVjdCA9ICgpID0+IHtcbiAgICBsZXQgX29ic2VydmVycyA9IFtdO1xuICAgIGNvbnN0IG5leHQgPSAodmFsdWUpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBvYnNlcnZlciBvZiBfb2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0ICYmIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzdWJzY3JpYmUgPSAob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgX29ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgX29ic2VydmVycyA9IF9vYnNlcnZlcnMuZmlsdGVyKChvKSA9PiBvICE9PSBvYnNlcnZlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgICAgIF9vYnNlcnZlcnMgPSBbXTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCBvYnNlcnZlcnMoKSB7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmVycztcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dCxcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICB1bnN1YnNjcmliZSxcbiAgICB9O1xufTtcblxuZnVuY3Rpb24gZXh0cmFjdEZvcm1WYWx1ZXMoZmllbGRzU3RhdGUsIGZvcm1WYWx1ZXMpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWVsZHNTdGF0ZSkge1xuICAgICAgICBpZiAoZmllbGRzU3RhdGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTdGF0ZSA9IGZpZWxkc1N0YXRlW2tleV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gZm9ybVZhbHVlc1trZXldO1xuICAgICAgICAgICAgaWYgKGZpZWxkU3RhdGUgJiYgaXNPYmplY3QoZmllbGRTdGF0ZSkgJiYgZmllbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEZpZWxkc1N0YXRlID0gZXh0cmFjdEZvcm1WYWx1ZXMoZmllbGRTdGF0ZSwgZmllbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KG5lc3RlZEZpZWxkc1N0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNba2V5XSA9IG5lc3RlZEZpZWxkc1N0YXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkc1N0YXRlW2tleV0pIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXNba2V5XSA9IGZpZWxkVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbn1cblxudmFyIGlzRW1wdHlPYmplY3QgPSAodmFsdWUpID0+IGlzT2JqZWN0KHZhbHVlKSAmJiAhT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aDtcblxudmFyIGlzRmlsZUlucHV0ID0gKGVsZW1lbnQpID0+IGVsZW1lbnQudHlwZSA9PT0gJ2ZpbGUnO1xuXG52YXIgaXNIVE1MRWxlbWVudCA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICghaXNXZWIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvd25lciA9IHZhbHVlID8gdmFsdWUub3duZXJEb2N1bWVudCA6IDA7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mXG4gICAgICAgIChvd25lciAmJiBvd25lci5kZWZhdWx0VmlldyA/IG93bmVyLmRlZmF1bHRWaWV3LkhUTUxFbGVtZW50IDogSFRNTEVsZW1lbnQpKTtcbn07XG5cbnZhciBpc011bHRpcGxlU2VsZWN0ID0gKGVsZW1lbnQpID0+IGVsZW1lbnQudHlwZSA9PT0gYHNlbGVjdC1tdWx0aXBsZWA7XG5cbnZhciBpc1JhZGlvSW5wdXQgPSAoZWxlbWVudCkgPT4gZWxlbWVudC50eXBlID09PSAncmFkaW8nO1xuXG52YXIgaXNSYWRpb09yQ2hlY2tib3ggPSAocmVmKSA9PiBpc1JhZGlvSW5wdXQocmVmKSB8fCBpc0NoZWNrQm94SW5wdXQocmVmKTtcblxudmFyIGxpdmUgPSAocmVmKSA9PiBpc0hUTUxFbGVtZW50KHJlZikgJiYgcmVmLmlzQ29ubmVjdGVkO1xuXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgdXBkYXRlUGF0aCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IHVwZGF0ZVBhdGguc2xpY2UoMCwgLTEpLmxlbmd0aDtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBvYmplY3QgPSBpc1VuZGVmaW5lZChvYmplY3QpID8gaW5kZXgrKyA6IG9iamVjdFt1cGRhdGVQYXRoW2luZGV4KytdXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbmZ1bmN0aW9uIGlzRW1wdHlBcnJheShvYmopIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFpc1VuZGVmaW5lZChvYmpba2V5XSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHVuc2V0KG9iamVjdCwgcGF0aCkge1xuICAgIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShwYXRoKVxuICAgICAgICA/IHBhdGhcbiAgICAgICAgOiBpc0tleShwYXRoKVxuICAgICAgICAgICAgPyBbcGF0aF1cbiAgICAgICAgICAgIDogc3RyaW5nVG9QYXRoKHBhdGgpO1xuICAgIGNvbnN0IGNoaWxkT2JqZWN0ID0gcGF0aHMubGVuZ3RoID09PSAxID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIHBhdGhzKTtcbiAgICBjb25zdCBpbmRleCA9IHBhdGhzLmxlbmd0aCAtIDE7XG4gICAgY29uc3Qga2V5ID0gcGF0aHNbaW5kZXhdO1xuICAgIGlmIChjaGlsZE9iamVjdCkge1xuICAgICAgICBkZWxldGUgY2hpbGRPYmplY3Rba2V5XTtcbiAgICB9XG4gICAgaWYgKGluZGV4ICE9PSAwICYmXG4gICAgICAgICgoaXNPYmplY3QoY2hpbGRPYmplY3QpICYmIGlzRW1wdHlPYmplY3QoY2hpbGRPYmplY3QpKSB8fFxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoY2hpbGRPYmplY3QpICYmIGlzRW1wdHlBcnJheShjaGlsZE9iamVjdCkpKSkge1xuICAgICAgICB1bnNldChvYmplY3QsIHBhdGhzLnNsaWNlKDAsIC0xKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbnZhciBvYmplY3RIYXNGdW5jdGlvbiA9IChkYXRhKSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhW2tleV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiBpc1RyYXZlcnNhYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IChpc09iamVjdCh2YWx1ZSkgJiYgIW9iamVjdEhhc0Z1bmN0aW9uKHZhbHVlKSk7XG59XG5mdW5jdGlvbiBtYXJrRmllbGRzRGlydHkoZGF0YSwgZmllbGRzID0ge30pIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICBpZiAoaXNUcmF2ZXJzYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZpZWxkc1trZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9O1xuICAgICAgICAgICAgbWFya0ZpZWxkc0RpcnR5KHZhbHVlLCBmaWVsZHNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgICAgZmllbGRzW2tleV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWVsZHM7XG59XG5mdW5jdGlvbiBnZXREaXJ0eUZpZWxkcyhkYXRhLCBmb3JtVmFsdWVzLCBkaXJ0eUZpZWxkc0Zyb21WYWx1ZXMpIHtcbiAgICBpZiAoIWRpcnR5RmllbGRzRnJvbVZhbHVlcykge1xuICAgICAgICBkaXJ0eUZpZWxkc0Zyb21WYWx1ZXMgPSBtYXJrRmllbGRzRGlydHkoZm9ybVZhbHVlcyk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgIGlmIChpc1RyYXZlcnNhYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGZvcm1WYWx1ZXMpIHx8IGlzUHJpbWl0aXZlKGRpcnR5RmllbGRzRnJvbVZhbHVlc1trZXldKSkge1xuICAgICAgICAgICAgICAgIGRpcnR5RmllbGRzRnJvbVZhbHVlc1trZXldID0gbWFya0ZpZWxkc0RpcnR5KHZhbHVlLCBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFtdIDoge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0RGlydHlGaWVsZHModmFsdWUsIGlzTnVsbE9yVW5kZWZpbmVkKGZvcm1WYWx1ZXMpID8ge30gOiBmb3JtVmFsdWVzW2tleV0sIGRpcnR5RmllbGRzRnJvbVZhbHVlc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGZvcm1WYWx1ZXNba2V5XTtcbiAgICAgICAgICAgIGRpcnR5RmllbGRzRnJvbVZhbHVlc1trZXldID0gIWRlZXBFcXVhbCh2YWx1ZSwgZm9ybVZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlydHlGaWVsZHNGcm9tVmFsdWVzO1xufVxuXG5jb25zdCBkZWZhdWx0UmVzdWx0ID0ge1xuICAgIHZhbHVlOiBmYWxzZSxcbiAgICBpc1ZhbGlkOiBmYWxzZSxcbn07XG5jb25zdCB2YWxpZFJlc3VsdCA9IHsgdmFsdWU6IHRydWUsIGlzVmFsaWQ6IHRydWUgfTtcbnZhciBnZXRDaGVja2JveFZhbHVlID0gKG9wdGlvbnMpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBvcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24gJiYgb3B0aW9uLmNoZWNrZWQgJiYgIW9wdGlvbi5kaXNhYmxlZClcbiAgICAgICAgICAgICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdmFsdWVzLCBpc1ZhbGlkOiAhIXZhbHVlcy5sZW5ndGggfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9uc1swXS5jaGVja2VkICYmICFvcHRpb25zWzBdLmRpc2FibGVkXG4gICAgICAgICAgICA/IC8vIEB0cy1leHBlY3QtZXJyb3IgZXhwZWN0ZWQgdG8gd29yayBpbiB0aGUgYnJvd3NlclxuICAgICAgICAgICAgICAgIG9wdGlvbnNbMF0uYXR0cmlidXRlcyAmJiAhaXNVbmRlZmluZWQob3B0aW9uc1swXS5hdHRyaWJ1dGVzLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA/IGlzVW5kZWZpbmVkKG9wdGlvbnNbMF0udmFsdWUpIHx8IG9wdGlvbnNbMF0udmFsdWUgPT09ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHZhbGlkUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHsgdmFsdWU6IG9wdGlvbnNbMF0udmFsdWUsIGlzVmFsaWQ6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICA6IHZhbGlkUmVzdWx0XG4gICAgICAgICAgICA6IGRlZmF1bHRSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0UmVzdWx0O1xufTtcblxudmFyIGdldEZpZWxkVmFsdWVBcyA9ICh2YWx1ZSwgeyB2YWx1ZUFzTnVtYmVyLCB2YWx1ZUFzRGF0ZSwgc2V0VmFsdWVBcyB9KSA9PiBpc1VuZGVmaW5lZCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiB2YWx1ZUFzTnVtYmVyXG4gICAgICAgID8gdmFsdWUgPT09ICcnXG4gICAgICAgICAgICA/IE5hTlxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICAgICAgICAgID8gK3ZhbHVlXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICA6IHZhbHVlQXNEYXRlICYmIGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgPyBuZXcgRGF0ZSh2YWx1ZSlcbiAgICAgICAgICAgIDogc2V0VmFsdWVBc1xuICAgICAgICAgICAgICAgID8gc2V0VmFsdWVBcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlO1xuXG5jb25zdCBkZWZhdWx0UmV0dXJuID0ge1xuICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgIHZhbHVlOiBudWxsLFxufTtcbnZhciBnZXRSYWRpb1ZhbHVlID0gKG9wdGlvbnMpID0+IEFycmF5LmlzQXJyYXkob3B0aW9ucylcbiAgICA/IG9wdGlvbnMucmVkdWNlKChwcmV2aW91cywgb3B0aW9uKSA9PiBvcHRpb24gJiYgb3B0aW9uLmNoZWNrZWQgJiYgIW9wdGlvbi5kaXNhYmxlZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgICAgICB9XG4gICAgICAgIDogcHJldmlvdXMsIGRlZmF1bHRSZXR1cm4pXG4gICAgOiBkZWZhdWx0UmV0dXJuO1xuXG5mdW5jdGlvbiBnZXRGaWVsZFZhbHVlKF9mKSB7XG4gICAgY29uc3QgcmVmID0gX2YucmVmO1xuICAgIGlmIChpc0ZpbGVJbnB1dChyZWYpKSB7XG4gICAgICAgIHJldHVybiByZWYuZmlsZXM7XG4gICAgfVxuICAgIGlmIChpc1JhZGlvSW5wdXQocmVmKSkge1xuICAgICAgICByZXR1cm4gZ2V0UmFkaW9WYWx1ZShfZi5yZWZzKS52YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzTXVsdGlwbGVTZWxlY3QocmVmKSkge1xuICAgICAgICByZXR1cm4gWy4uLnJlZi5zZWxlY3RlZE9wdGlvbnNdLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChpc0NoZWNrQm94SW5wdXQocmVmKSkge1xuICAgICAgICByZXR1cm4gZ2V0Q2hlY2tib3hWYWx1ZShfZi5yZWZzKS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEZpZWxkVmFsdWVBcyhpc1VuZGVmaW5lZChyZWYudmFsdWUpID8gX2YucmVmLnZhbHVlIDogcmVmLnZhbHVlLCBfZik7XG59XG5cbnZhciBnZXRSZXNvbHZlck9wdGlvbnMgPSAoZmllbGRzTmFtZXMsIF9maWVsZHMsIGNyaXRlcmlhTW9kZSwgc2hvdWxkVXNlTmF0aXZlVmFsaWRhdGlvbikgPT4ge1xuICAgIGNvbnN0IGZpZWxkcyA9IHt9O1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBmaWVsZHNOYW1lcykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGdldChfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgZmllbGQgJiYgc2V0KGZpZWxkcywgbmFtZSwgZmllbGQuX2YpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjcml0ZXJpYU1vZGUsXG4gICAgICAgIG5hbWVzOiBbLi4uZmllbGRzTmFtZXNdLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIHNob3VsZFVzZU5hdGl2ZVZhbGlkYXRpb24sXG4gICAgfTtcbn07XG5cbnZhciBpc1JlZ2V4ID0gKHZhbHVlKSA9PiB2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cDtcblxudmFyIGdldFJ1bGVWYWx1ZSA9IChydWxlKSA9PiBpc1VuZGVmaW5lZChydWxlKVxuICAgID8gcnVsZVxuICAgIDogaXNSZWdleChydWxlKVxuICAgICAgICA/IHJ1bGUuc291cmNlXG4gICAgICAgIDogaXNPYmplY3QocnVsZSlcbiAgICAgICAgICAgID8gaXNSZWdleChydWxlLnZhbHVlKVxuICAgICAgICAgICAgICAgID8gcnVsZS52YWx1ZS5zb3VyY2VcbiAgICAgICAgICAgICAgICA6IHJ1bGUudmFsdWVcbiAgICAgICAgICAgIDogcnVsZTtcblxudmFyIGdldFZhbGlkYXRpb25Nb2RlcyA9IChtb2RlKSA9PiAoe1xuICAgIGlzT25TdWJtaXQ6ICFtb2RlIHx8IG1vZGUgPT09IFZBTElEQVRJT05fTU9ERS5vblN1Ym1pdCxcbiAgICBpc09uQmx1cjogbW9kZSA9PT0gVkFMSURBVElPTl9NT0RFLm9uQmx1cixcbiAgICBpc09uQ2hhbmdlOiBtb2RlID09PSBWQUxJREFUSU9OX01PREUub25DaGFuZ2UsXG4gICAgaXNPbkFsbDogbW9kZSA9PT0gVkFMSURBVElPTl9NT0RFLmFsbCxcbiAgICBpc09uVG91Y2g6IG1vZGUgPT09IFZBTElEQVRJT05fTU9ERS5vblRvdWNoZWQsXG59KTtcblxuY29uc3QgQVNZTkNfRlVOQ1RJT04gPSAnQXN5bmNGdW5jdGlvbic7XG52YXIgaGFzUHJvbWlzZVZhbGlkYXRpb24gPSAoZmllbGRSZWZlcmVuY2UpID0+ICEhZmllbGRSZWZlcmVuY2UgJiZcbiAgICAhIWZpZWxkUmVmZXJlbmNlLnZhbGlkYXRlICYmXG4gICAgISEoKGlzRnVuY3Rpb24oZmllbGRSZWZlcmVuY2UudmFsaWRhdGUpICYmXG4gICAgICAgIGZpZWxkUmVmZXJlbmNlLnZhbGlkYXRlLmNvbnN0cnVjdG9yLm5hbWUgPT09IEFTWU5DX0ZVTkNUSU9OKSB8fFxuICAgICAgICAoaXNPYmplY3QoZmllbGRSZWZlcmVuY2UudmFsaWRhdGUpICYmXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKGZpZWxkUmVmZXJlbmNlLnZhbGlkYXRlKS5maW5kKCh2YWxpZGF0ZUZ1bmN0aW9uKSA9PiB2YWxpZGF0ZUZ1bmN0aW9uLmNvbnN0cnVjdG9yLm5hbWUgPT09IEFTWU5DX0ZVTkNUSU9OKSkpO1xuXG52YXIgaGFzVmFsaWRhdGlvbiA9IChvcHRpb25zKSA9PiBvcHRpb25zLm1vdW50ICYmXG4gICAgKG9wdGlvbnMucmVxdWlyZWQgfHxcbiAgICAgICAgb3B0aW9ucy5taW4gfHxcbiAgICAgICAgb3B0aW9ucy5tYXggfHxcbiAgICAgICAgb3B0aW9ucy5tYXhMZW5ndGggfHxcbiAgICAgICAgb3B0aW9ucy5taW5MZW5ndGggfHxcbiAgICAgICAgb3B0aW9ucy5wYXR0ZXJuIHx8XG4gICAgICAgIG9wdGlvbnMudmFsaWRhdGUpO1xuXG52YXIgaXNXYXRjaGVkID0gKG5hbWUsIF9uYW1lcywgaXNCbHVyRXZlbnQpID0+ICFpc0JsdXJFdmVudCAmJlxuICAgIChfbmFtZXMud2F0Y2hBbGwgfHxcbiAgICAgICAgX25hbWVzLndhdGNoLmhhcyhuYW1lKSB8fFxuICAgICAgICBbLi4uX25hbWVzLndhdGNoXS5zb21lKCh3YXRjaE5hbWUpID0+IG5hbWUuc3RhcnRzV2l0aCh3YXRjaE5hbWUpICYmXG4gICAgICAgICAgICAvXlxcLlxcdysvLnRlc3QobmFtZS5zbGljZSh3YXRjaE5hbWUubGVuZ3RoKSkpKTtcblxuY29uc3QgaXRlcmF0ZUZpZWxkc0J5QWN0aW9uID0gKGZpZWxkcywgYWN0aW9uLCBmaWVsZHNOYW1lcywgYWJvcnRFYXJseSkgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkc05hbWVzIHx8IE9iamVjdC5rZXlzKGZpZWxkcykpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoZmllbGRzLCBrZXkpO1xuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgX2YsIC4uLmN1cnJlbnRGaWVsZCB9ID0gZmllbGQ7XG4gICAgICAgICAgICBpZiAoX2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2YucmVmcyAmJiBfZi5yZWZzWzBdICYmIGFjdGlvbihfZi5yZWZzWzBdLCBrZXkpICYmICFhYm9ydEVhcmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChfZi5yZWYgJiYgYWN0aW9uKF9mLnJlZiwgX2YubmFtZSkgJiYgIWFib3J0RWFybHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0ZUZpZWxkc0J5QWN0aW9uKGN1cnJlbnRGaWVsZCwgYWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc09iamVjdChjdXJyZW50RmllbGQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdGVGaWVsZHNCeUFjdGlvbihjdXJyZW50RmllbGQsIGFjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbn07XG5cbmZ1bmN0aW9uIHNjaGVtYUVycm9yTG9va3VwKGVycm9ycywgX2ZpZWxkcywgbmFtZSkge1xuICAgIGNvbnN0IGVycm9yID0gZ2V0KGVycm9ycywgbmFtZSk7XG4gICAgaWYgKGVycm9yIHx8IGlzS2V5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG5hbWVzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgIHdoaWxlIChuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gbmFtZXMuam9pbignLicpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IGdldChfZmllbGRzLCBmaWVsZE5hbWUpO1xuICAgICAgICBjb25zdCBmb3VuZEVycm9yID0gZ2V0KGVycm9ycywgZmllbGROYW1lKTtcbiAgICAgICAgaWYgKGZpZWxkICYmICFBcnJheS5pc0FycmF5KGZpZWxkKSAmJiBuYW1lICE9PSBmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG5hbWUgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmRFcnJvciAmJiBmb3VuZEVycm9yLnR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogZmllbGROYW1lLFxuICAgICAgICAgICAgICAgIGVycm9yOiBmb3VuZEVycm9yLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmRFcnJvciAmJiBmb3VuZEVycm9yLnJvb3QgJiYgZm91bmRFcnJvci5yb290LnR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYCR7ZmllbGROYW1lfS5yb290YCxcbiAgICAgICAgICAgICAgICBlcnJvcjogZm91bmRFcnJvci5yb290LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lcy5wb3AoKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICB9O1xufVxuXG52YXIgc2hvdWxkUmVuZGVyRm9ybVN0YXRlID0gKGZvcm1TdGF0ZURhdGEsIF9wcm94eUZvcm1TdGF0ZSwgdXBkYXRlRm9ybVN0YXRlLCBpc1Jvb3QpID0+IHtcbiAgICB1cGRhdGVGb3JtU3RhdGUoZm9ybVN0YXRlRGF0YSk7XG4gICAgY29uc3QgeyBuYW1lLCAuLi5mb3JtU3RhdGUgfSA9IGZvcm1TdGF0ZURhdGE7XG4gICAgcmV0dXJuIChpc0VtcHR5T2JqZWN0KGZvcm1TdGF0ZSkgfHxcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybVN0YXRlKS5sZW5ndGggPj0gT2JqZWN0LmtleXMoX3Byb3h5Rm9ybVN0YXRlKS5sZW5ndGggfHxcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybVN0YXRlKS5maW5kKChrZXkpID0+IF9wcm94eUZvcm1TdGF0ZVtrZXldID09PVxuICAgICAgICAgICAgKCFpc1Jvb3QgfHwgVkFMSURBVElPTl9NT0RFLmFsbCkpKTtcbn07XG5cbnZhciBzaG91bGRTdWJzY3JpYmVCeU5hbWUgPSAobmFtZSwgc2lnbmFsTmFtZSwgZXhhY3QpID0+ICFuYW1lIHx8XG4gICAgIXNpZ25hbE5hbWUgfHxcbiAgICBuYW1lID09PSBzaWduYWxOYW1lIHx8XG4gICAgY29udmVydFRvQXJyYXlQYXlsb2FkKG5hbWUpLnNvbWUoKGN1cnJlbnROYW1lKSA9PiBjdXJyZW50TmFtZSAmJlxuICAgICAgICAoZXhhY3RcbiAgICAgICAgICAgID8gY3VycmVudE5hbWUgPT09IHNpZ25hbE5hbWVcbiAgICAgICAgICAgIDogY3VycmVudE5hbWUuc3RhcnRzV2l0aChzaWduYWxOYW1lKSB8fFxuICAgICAgICAgICAgICAgIHNpZ25hbE5hbWUuc3RhcnRzV2l0aChjdXJyZW50TmFtZSkpKTtcblxudmFyIHNraXBWYWxpZGF0aW9uID0gKGlzQmx1ckV2ZW50LCBpc1RvdWNoZWQsIGlzU3VibWl0dGVkLCByZVZhbGlkYXRlTW9kZSwgbW9kZSkgPT4ge1xuICAgIGlmIChtb2RlLmlzT25BbGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmICghaXNTdWJtaXR0ZWQgJiYgbW9kZS5pc09uVG91Y2gpIHtcbiAgICAgICAgcmV0dXJuICEoaXNUb3VjaGVkIHx8IGlzQmx1ckV2ZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdWJtaXR0ZWQgPyByZVZhbGlkYXRlTW9kZS5pc09uQmx1ciA6IG1vZGUuaXNPbkJsdXIpIHtcbiAgICAgICAgcmV0dXJuICFpc0JsdXJFdmVudDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdWJtaXR0ZWQgPyByZVZhbGlkYXRlTW9kZS5pc09uQ2hhbmdlIDogbW9kZS5pc09uQ2hhbmdlKSB7XG4gICAgICAgIHJldHVybiBpc0JsdXJFdmVudDtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG52YXIgdW5zZXRFbXB0eUFycmF5ID0gKHJlZiwgbmFtZSkgPT4gIWNvbXBhY3QoZ2V0KHJlZiwgbmFtZSkpLmxlbmd0aCAmJiB1bnNldChyZWYsIG5hbWUpO1xuXG52YXIgdXBkYXRlRmllbGRBcnJheVJvb3RFcnJvciA9IChlcnJvcnMsIGVycm9yLCBuYW1lKSA9PiB7XG4gICAgY29uc3QgZmllbGRBcnJheUVycm9ycyA9IGNvbnZlcnRUb0FycmF5UGF5bG9hZChnZXQoZXJyb3JzLCBuYW1lKSk7XG4gICAgc2V0KGZpZWxkQXJyYXlFcnJvcnMsICdyb290JywgZXJyb3JbbmFtZV0pO1xuICAgIHNldChlcnJvcnMsIG5hbWUsIGZpZWxkQXJyYXlFcnJvcnMpO1xuICAgIHJldHVybiBlcnJvcnM7XG59O1xuXG5mdW5jdGlvbiBnZXRWYWxpZGF0ZUVycm9yKHJlc3VsdCwgcmVmLCB0eXBlID0gJ3ZhbGlkYXRlJykge1xuICAgIGlmIChpc1N0cmluZyhyZXN1bHQpIHx8XG4gICAgICAgIChBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0LmV2ZXJ5KGlzU3RyaW5nKSkgfHxcbiAgICAgICAgKGlzQm9vbGVhbihyZXN1bHQpICYmICFyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbWVzc2FnZTogaXNTdHJpbmcocmVzdWx0KSA/IHJlc3VsdCA6ICcnLFxuICAgICAgICAgICAgcmVmLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxudmFyIGdldFZhbHVlQW5kTWVzc2FnZSA9ICh2YWxpZGF0aW9uRGF0YSkgPT4gaXNPYmplY3QodmFsaWRhdGlvbkRhdGEpICYmICFpc1JlZ2V4KHZhbGlkYXRpb25EYXRhKVxuICAgID8gdmFsaWRhdGlvbkRhdGFcbiAgICA6IHtcbiAgICAgICAgdmFsdWU6IHZhbGlkYXRpb25EYXRhLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICB9O1xuXG52YXIgdmFsaWRhdGVGaWVsZCA9IGFzeW5jIChmaWVsZCwgZGlzYWJsZWRGaWVsZE5hbWVzLCBmb3JtVmFsdWVzLCB2YWxpZGF0ZUFsbEZpZWxkQ3JpdGVyaWEsIHNob3VsZFVzZU5hdGl2ZVZhbGlkYXRpb24sIGlzRmllbGRBcnJheSkgPT4ge1xuICAgIGNvbnN0IHsgcmVmLCByZWZzLCByZXF1aXJlZCwgbWF4TGVuZ3RoLCBtaW5MZW5ndGgsIG1pbiwgbWF4LCBwYXR0ZXJuLCB2YWxpZGF0ZSwgbmFtZSwgdmFsdWVBc051bWJlciwgbW91bnQsIH0gPSBmaWVsZC5fZjtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gZ2V0KGZvcm1WYWx1ZXMsIG5hbWUpO1xuICAgIGlmICghbW91bnQgfHwgZGlzYWJsZWRGaWVsZE5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGlucHV0UmVmID0gcmVmcyA/IHJlZnNbMF0gOiByZWY7XG4gICAgY29uc3Qgc2V0Q3VzdG9tVmFsaWRpdHkgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkVXNlTmF0aXZlVmFsaWRhdGlvbiAmJiBpbnB1dFJlZi5yZXBvcnRWYWxpZGl0eSkge1xuICAgICAgICAgICAgaW5wdXRSZWYuc2V0Q3VzdG9tVmFsaWRpdHkoaXNCb29sZWFuKG1lc3NhZ2UpID8gJycgOiBtZXNzYWdlIHx8ICcnKTtcbiAgICAgICAgICAgIGlucHV0UmVmLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGVycm9yID0ge307XG4gICAgY29uc3QgaXNSYWRpbyA9IGlzUmFkaW9JbnB1dChyZWYpO1xuICAgIGNvbnN0IGlzQ2hlY2tCb3ggPSBpc0NoZWNrQm94SW5wdXQocmVmKTtcbiAgICBjb25zdCBpc1JhZGlvT3JDaGVja2JveCA9IGlzUmFkaW8gfHwgaXNDaGVja0JveDtcbiAgICBjb25zdCBpc0VtcHR5ID0gKCh2YWx1ZUFzTnVtYmVyIHx8IGlzRmlsZUlucHV0KHJlZikpICYmXG4gICAgICAgIGlzVW5kZWZpbmVkKHJlZi52YWx1ZSkgJiZcbiAgICAgICAgaXNVbmRlZmluZWQoaW5wdXRWYWx1ZSkpIHx8XG4gICAgICAgIChpc0hUTUxFbGVtZW50KHJlZikgJiYgcmVmLnZhbHVlID09PSAnJykgfHxcbiAgICAgICAgaW5wdXRWYWx1ZSA9PT0gJycgfHxcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoaW5wdXRWYWx1ZSkgJiYgIWlucHV0VmFsdWUubGVuZ3RoKTtcbiAgICBjb25zdCBhcHBlbmRFcnJvcnNDdXJyeSA9IGFwcGVuZEVycm9ycy5iaW5kKG51bGwsIG5hbWUsIHZhbGlkYXRlQWxsRmllbGRDcml0ZXJpYSwgZXJyb3IpO1xuICAgIGNvbnN0IGdldE1pbk1heE1lc3NhZ2UgPSAoZXhjZWVkTWF4LCBtYXhMZW5ndGhNZXNzYWdlLCBtaW5MZW5ndGhNZXNzYWdlLCBtYXhUeXBlID0gSU5QVVRfVkFMSURBVElPTl9SVUxFUy5tYXhMZW5ndGgsIG1pblR5cGUgPSBJTlBVVF9WQUxJREFUSU9OX1JVTEVTLm1pbkxlbmd0aCkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXhjZWVkTWF4ID8gbWF4TGVuZ3RoTWVzc2FnZSA6IG1pbkxlbmd0aE1lc3NhZ2U7XG4gICAgICAgIGVycm9yW25hbWVdID0ge1xuICAgICAgICAgICAgdHlwZTogZXhjZWVkTWF4ID8gbWF4VHlwZSA6IG1pblR5cGUsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgLi4uYXBwZW5kRXJyb3JzQ3VycnkoZXhjZWVkTWF4ID8gbWF4VHlwZSA6IG1pblR5cGUsIG1lc3NhZ2UpLFxuICAgICAgICB9O1xuICAgIH07XG4gICAgaWYgKGlzRmllbGRBcnJheVxuICAgICAgICA/ICFBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpIHx8ICFpbnB1dFZhbHVlLmxlbmd0aFxuICAgICAgICA6IHJlcXVpcmVkICYmXG4gICAgICAgICAgICAoKCFpc1JhZGlvT3JDaGVja2JveCAmJiAoaXNFbXB0eSB8fCBpc051bGxPclVuZGVmaW5lZChpbnB1dFZhbHVlKSkpIHx8XG4gICAgICAgICAgICAgICAgKGlzQm9vbGVhbihpbnB1dFZhbHVlKSAmJiAhaW5wdXRWYWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAoaXNDaGVja0JveCAmJiAhZ2V0Q2hlY2tib3hWYWx1ZShyZWZzKS5pc1ZhbGlkKSB8fFxuICAgICAgICAgICAgICAgIChpc1JhZGlvICYmICFnZXRSYWRpb1ZhbHVlKHJlZnMpLmlzVmFsaWQpKSkge1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBtZXNzYWdlIH0gPSBpc1N0cmluZyhyZXF1aXJlZClcbiAgICAgICAgICAgID8geyB2YWx1ZTogISFyZXF1aXJlZCwgbWVzc2FnZTogcmVxdWlyZWQgfVxuICAgICAgICAgICAgOiBnZXRWYWx1ZUFuZE1lc3NhZ2UocmVxdWlyZWQpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGVycm9yW25hbWVdID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IElOUFVUX1ZBTElEQVRJT05fUlVMRVMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICByZWY6IGlucHV0UmVmLFxuICAgICAgICAgICAgICAgIC4uLmFwcGVuZEVycm9yc0N1cnJ5KElOUFVUX1ZBTElEQVRJT05fUlVMRVMucmVxdWlyZWQsIG1lc3NhZ2UpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGxGaWVsZENyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgc2V0Q3VzdG9tVmFsaWRpdHkobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghaXNFbXB0eSAmJiAoIWlzTnVsbE9yVW5kZWZpbmVkKG1pbikgfHwgIWlzTnVsbE9yVW5kZWZpbmVkKG1heCkpKSB7XG4gICAgICAgIGxldCBleGNlZWRNYXg7XG4gICAgICAgIGxldCBleGNlZWRNaW47XG4gICAgICAgIGNvbnN0IG1heE91dHB1dCA9IGdldFZhbHVlQW5kTWVzc2FnZShtYXgpO1xuICAgICAgICBjb25zdCBtaW5PdXRwdXQgPSBnZXRWYWx1ZUFuZE1lc3NhZ2UobWluKTtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpbnB1dFZhbHVlKSAmJiAhaXNOYU4oaW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlTnVtYmVyID0gcmVmLnZhbHVlQXNOdW1iZXIgfHxcbiAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZSA/ICtpbnB1dFZhbHVlIDogaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG1heE91dHB1dC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBleGNlZWRNYXggPSB2YWx1ZU51bWJlciA+IG1heE91dHB1dC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQobWluT3V0cHV0LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGV4Y2VlZE1pbiA9IHZhbHVlTnVtYmVyIDwgbWluT3V0cHV0LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRlID0gcmVmLnZhbHVlQXNEYXRlIHx8IG5ldyBEYXRlKGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgY29udmVydFRpbWVUb0RhdGUgPSAodGltZSkgPT4gbmV3IERhdGUobmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKSArICcgJyArIHRpbWUpO1xuICAgICAgICAgICAgY29uc3QgaXNUaW1lID0gcmVmLnR5cGUgPT0gJ3RpbWUnO1xuICAgICAgICAgICAgY29uc3QgaXNXZWVrID0gcmVmLnR5cGUgPT0gJ3dlZWsnO1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKG1heE91dHB1dC52YWx1ZSkgJiYgaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGV4Y2VlZE1heCA9IGlzVGltZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbnZlcnRUaW1lVG9EYXRlKGlucHV0VmFsdWUpID4gY29udmVydFRpbWVUb0RhdGUobWF4T3V0cHV0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IGlzV2Vla1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBpbnB1dFZhbHVlID4gbWF4T3V0cHV0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlRGF0ZSA+IG5ldyBEYXRlKG1heE91dHB1dC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcobWluT3V0cHV0LnZhbHVlKSAmJiBpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZXhjZWVkTWluID0gaXNUaW1lXG4gICAgICAgICAgICAgICAgICAgID8gY29udmVydFRpbWVUb0RhdGUoaW5wdXRWYWx1ZSkgPCBjb252ZXJ0VGltZVRvRGF0ZShtaW5PdXRwdXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogaXNXZWVrXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGlucHV0VmFsdWUgPCBtaW5PdXRwdXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWVEYXRlIDwgbmV3IERhdGUobWluT3V0cHV0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhjZWVkTWF4IHx8IGV4Y2VlZE1pbikge1xuICAgICAgICAgICAgZ2V0TWluTWF4TWVzc2FnZSghIWV4Y2VlZE1heCwgbWF4T3V0cHV0Lm1lc3NhZ2UsIG1pbk91dHB1dC5tZXNzYWdlLCBJTlBVVF9WQUxJREFUSU9OX1JVTEVTLm1heCwgSU5QVVRfVkFMSURBVElPTl9SVUxFUy5taW4pO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUFsbEZpZWxkQ3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBzZXRDdXN0b21WYWxpZGl0eShlcnJvcltuYW1lXS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKChtYXhMZW5ndGggfHwgbWluTGVuZ3RoKSAmJlxuICAgICAgICAhaXNFbXB0eSAmJlxuICAgICAgICAoaXNTdHJpbmcoaW5wdXRWYWx1ZSkgfHwgKGlzRmllbGRBcnJheSAmJiBBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSkpIHtcbiAgICAgICAgY29uc3QgbWF4TGVuZ3RoT3V0cHV0ID0gZ2V0VmFsdWVBbmRNZXNzYWdlKG1heExlbmd0aCk7XG4gICAgICAgIGNvbnN0IG1pbkxlbmd0aE91dHB1dCA9IGdldFZhbHVlQW5kTWVzc2FnZShtaW5MZW5ndGgpO1xuICAgICAgICBjb25zdCBleGNlZWRNYXggPSAhaXNOdWxsT3JVbmRlZmluZWQobWF4TGVuZ3RoT3V0cHV0LnZhbHVlKSAmJlxuICAgICAgICAgICAgaW5wdXRWYWx1ZS5sZW5ndGggPiArbWF4TGVuZ3RoT3V0cHV0LnZhbHVlO1xuICAgICAgICBjb25zdCBleGNlZWRNaW4gPSAhaXNOdWxsT3JVbmRlZmluZWQobWluTGVuZ3RoT3V0cHV0LnZhbHVlKSAmJlxuICAgICAgICAgICAgaW5wdXRWYWx1ZS5sZW5ndGggPCArbWluTGVuZ3RoT3V0cHV0LnZhbHVlO1xuICAgICAgICBpZiAoZXhjZWVkTWF4IHx8IGV4Y2VlZE1pbikge1xuICAgICAgICAgICAgZ2V0TWluTWF4TWVzc2FnZShleGNlZWRNYXgsIG1heExlbmd0aE91dHB1dC5tZXNzYWdlLCBtaW5MZW5ndGhPdXRwdXQubWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkYXRlQWxsRmllbGRDcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIHNldEN1c3RvbVZhbGlkaXR5KGVycm9yW25hbWVdLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocGF0dGVybiAmJiAhaXNFbXB0eSAmJiBpc1N0cmluZyhpbnB1dFZhbHVlKSkge1xuICAgICAgICBjb25zdCB7IHZhbHVlOiBwYXR0ZXJuVmFsdWUsIG1lc3NhZ2UgfSA9IGdldFZhbHVlQW5kTWVzc2FnZShwYXR0ZXJuKTtcbiAgICAgICAgaWYgKGlzUmVnZXgocGF0dGVyblZhbHVlKSAmJiAhaW5wdXRWYWx1ZS5tYXRjaChwYXR0ZXJuVmFsdWUpKSB7XG4gICAgICAgICAgICBlcnJvcltuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBJTlBVVF9WQUxJREFUSU9OX1JVTEVTLnBhdHRlcm4sXG4gICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICByZWYsXG4gICAgICAgICAgICAgICAgLi4uYXBwZW5kRXJyb3JzQ3VycnkoSU5QVVRfVkFMSURBVElPTl9SVUxFUy5wYXR0ZXJuLCBtZXNzYWdlKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIXZhbGlkYXRlQWxsRmllbGRDcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIHNldEN1c3RvbVZhbGlkaXR5KG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsaWRhdGUpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsaWRhdGUpKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZShpbnB1dFZhbHVlLCBmb3JtVmFsdWVzKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlRXJyb3IgPSBnZXRWYWxpZGF0ZUVycm9yKHJlc3VsdCwgaW5wdXRSZWYpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvcltuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsaWRhdGVFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgLi4uYXBwZW5kRXJyb3JzQ3VycnkoSU5QVVRfVkFMSURBVElPTl9SVUxFUy52YWxpZGF0ZSwgdmFsaWRhdGVFcnJvci5tZXNzYWdlKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGxGaWVsZENyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEN1c3RvbVZhbGlkaXR5KHZhbGlkYXRlRXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QodmFsaWRhdGUpKSB7XG4gICAgICAgICAgICBsZXQgdmFsaWRhdGlvblJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHlPYmplY3QodmFsaWRhdGlvblJlc3VsdCkgJiYgIXZhbGlkYXRlQWxsRmllbGRDcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVFcnJvciA9IGdldFZhbGlkYXRlRXJyb3IoYXdhaXQgdmFsaWRhdGVba2V5XShpbnB1dFZhbHVlLCBmb3JtVmFsdWVzKSwgaW5wdXRSZWYsIGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZhbGlkYXRlRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5hcHBlbmRFcnJvcnNDdXJyeShrZXksIHZhbGlkYXRlRXJyb3IubWVzc2FnZSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHNldEN1c3RvbVZhbGlkaXR5KHZhbGlkYXRlRXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUFsbEZpZWxkQ3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yW25hbWVdID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNFbXB0eU9iamVjdCh2YWxpZGF0aW9uUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIGVycm9yW25hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICByZWY6IGlucHV0UmVmLFxuICAgICAgICAgICAgICAgICAgICAuLi52YWxpZGF0aW9uUmVzdWx0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUFsbEZpZWxkQ3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRDdXN0b21WYWxpZGl0eSh0cnVlKTtcbiAgICByZXR1cm4gZXJyb3I7XG59O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBtb2RlOiBWQUxJREFUSU9OX01PREUub25TdWJtaXQsXG4gICAgcmVWYWxpZGF0ZU1vZGU6IFZBTElEQVRJT05fTU9ERS5vbkNoYW5nZSxcbiAgICBzaG91bGRGb2N1c0Vycm9yOiB0cnVlLFxufTtcbmZ1bmN0aW9uIGNyZWF0ZUZvcm1Db250cm9sKHByb3BzID0ge30pIHtcbiAgICBsZXQgX29wdGlvbnMgPSB7XG4gICAgICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgICAgICAuLi5wcm9wcyxcbiAgICB9O1xuICAgIGxldCBfZm9ybVN0YXRlID0ge1xuICAgICAgICBzdWJtaXRDb3VudDogMCxcbiAgICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICAgIGlzUmVhZHk6IGZhbHNlLFxuICAgICAgICBpc0xvYWRpbmc6IGlzRnVuY3Rpb24oX29wdGlvbnMuZGVmYXVsdFZhbHVlcyksXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2UsXG4gICAgICAgIGlzU3VibWl0dGVkOiBmYWxzZSxcbiAgICAgICAgaXNTdWJtaXR0aW5nOiBmYWxzZSxcbiAgICAgICAgaXNTdWJtaXRTdWNjZXNzZnVsOiBmYWxzZSxcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIHRvdWNoZWRGaWVsZHM6IHt9LFxuICAgICAgICBkaXJ0eUZpZWxkczoge30sXG4gICAgICAgIHZhbGlkYXRpbmdGaWVsZHM6IHt9LFxuICAgICAgICBlcnJvcnM6IF9vcHRpb25zLmVycm9ycyB8fCB7fSxcbiAgICAgICAgZGlzYWJsZWQ6IF9vcHRpb25zLmRpc2FibGVkIHx8IGZhbHNlLFxuICAgIH07XG4gICAgbGV0IF9maWVsZHMgPSB7fTtcbiAgICBsZXQgX2RlZmF1bHRWYWx1ZXMgPSBpc09iamVjdChfb3B0aW9ucy5kZWZhdWx0VmFsdWVzKSB8fCBpc09iamVjdChfb3B0aW9ucy52YWx1ZXMpXG4gICAgICAgID8gY2xvbmVPYmplY3QoX29wdGlvbnMuZGVmYXVsdFZhbHVlcyB8fCBfb3B0aW9ucy52YWx1ZXMpIHx8IHt9XG4gICAgICAgIDoge307XG4gICAgbGV0IF9mb3JtVmFsdWVzID0gX29wdGlvbnMuc2hvdWxkVW5yZWdpc3RlclxuICAgICAgICA/IHt9XG4gICAgICAgIDogY2xvbmVPYmplY3QoX2RlZmF1bHRWYWx1ZXMpO1xuICAgIGxldCBfc3RhdGUgPSB7XG4gICAgICAgIGFjdGlvbjogZmFsc2UsXG4gICAgICAgIG1vdW50OiBmYWxzZSxcbiAgICAgICAgd2F0Y2g6IGZhbHNlLFxuICAgICAgICBrZWVwSXNWYWxpZDogZmFsc2UsXG4gICAgfTtcbiAgICBsZXQgX25hbWVzID0ge1xuICAgICAgICBtb3VudDogbmV3IFNldCgpLFxuICAgICAgICBkaXNhYmxlZDogbmV3IFNldCgpLFxuICAgICAgICB1bk1vdW50OiBuZXcgU2V0KCksXG4gICAgICAgIGFycmF5OiBuZXcgU2V0KCksXG4gICAgICAgIHdhdGNoOiBuZXcgU2V0KCksXG4gICAgfTtcbiAgICBsZXQgZGVsYXlFcnJvckNhbGxiYWNrO1xuICAgIGxldCB0aW1lciA9IDA7XG4gICAgY29uc3QgZGVmYXVsdFByb3h5Rm9ybVN0YXRlID0ge1xuICAgICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgICAgZGlydHlGaWVsZHM6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW5nRmllbGRzOiBmYWxzZSxcbiAgICAgICAgdG91Y2hlZEZpZWxkczogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2UsXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcnM6IGZhbHNlLFxuICAgIH07XG4gICAgY29uc3QgX3Byb3h5Rm9ybVN0YXRlID0ge1xuICAgICAgICAuLi5kZWZhdWx0UHJveHlGb3JtU3RhdGUsXG4gICAgfTtcbiAgICBsZXQgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlID0ge1xuICAgICAgICAuLi5fcHJveHlGb3JtU3RhdGUsXG4gICAgfTtcbiAgICBjb25zdCBfc3ViamVjdHMgPSB7XG4gICAgICAgIGFycmF5OiBjcmVhdGVTdWJqZWN0KCksXG4gICAgICAgIHN0YXRlOiBjcmVhdGVTdWJqZWN0KCksXG4gICAgfTtcbiAgICBjb25zdCBzaG91bGREaXNwbGF5QWxsQXNzb2NpYXRlZEVycm9ycyA9IF9vcHRpb25zLmNyaXRlcmlhTW9kZSA9PT0gVkFMSURBVElPTl9NT0RFLmFsbDtcbiAgICBjb25zdCBkZWJvdW5jZSA9IChjYWxsYmFjaykgPT4gKHdhaXQpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB3YWl0KTtcbiAgICB9O1xuICAgIGNvbnN0IF9zZXRWYWxpZCA9IGFzeW5jIChzaG91bGRVcGRhdGVWYWxpZCkgPT4ge1xuICAgICAgICBpZiAoX3N0YXRlLmtlZXBJc1ZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfb3B0aW9ucy5kaXNhYmxlZCAmJlxuICAgICAgICAgICAgKF9wcm94eUZvcm1TdGF0ZS5pc1ZhbGlkIHx8XG4gICAgICAgICAgICAgICAgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmlzVmFsaWQgfHxcbiAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGVWYWxpZCkpIHtcbiAgICAgICAgICAgIGxldCBpc1ZhbGlkO1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLnJlc29sdmVyKSB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IGlzRW1wdHlPYmplY3QoKGF3YWl0IF9ydW5TY2hlbWEoKSkuZXJyb3JzKTtcbiAgICAgICAgICAgICAgICBfdXBkYXRlSXNWYWxpZGF0aW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gYXdhaXQgZXhlY3V0ZUJ1aWx0SW5WYWxpZGF0aW9uKF9maWVsZHMsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVmFsaWQgIT09IF9mb3JtU3RhdGUuaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgX3VwZGF0ZUlzVmFsaWRhdGluZyA9IChuYW1lcywgaXNWYWxpZGF0aW5nKSA9PiB7XG4gICAgICAgIGlmICghX29wdGlvbnMuZGlzYWJsZWQgJiZcbiAgICAgICAgICAgIChfcHJveHlGb3JtU3RhdGUuaXNWYWxpZGF0aW5nIHx8XG4gICAgICAgICAgICAgICAgX3Byb3h5Rm9ybVN0YXRlLnZhbGlkYXRpbmdGaWVsZHMgfHxcbiAgICAgICAgICAgICAgICBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUuaXNWYWxpZGF0aW5nIHx8XG4gICAgICAgICAgICAgICAgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLnZhbGlkYXRpbmdGaWVsZHMpKSB7XG4gICAgICAgICAgICAobmFtZXMgfHwgQXJyYXkuZnJvbShfbmFtZXMubW91bnQpKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNldChfZm9ybVN0YXRlLnZhbGlkYXRpbmdGaWVsZHMsIG5hbWUsIGlzVmFsaWRhdGluZylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5zZXQoX2Zvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW5nRmllbGRzOiBfZm9ybVN0YXRlLnZhbGlkYXRpbmdGaWVsZHMsXG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiAhaXNFbXB0eU9iamVjdChfZm9ybVN0YXRlLnZhbGlkYXRpbmdGaWVsZHMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IF9zZXRGaWVsZEFycmF5ID0gKG5hbWUsIHZhbHVlcyA9IFtdLCBtZXRob2QsIGFyZ3MsIHNob3VsZFNldFZhbHVlcyA9IHRydWUsIHNob3VsZFVwZGF0ZUZpZWxkc0FuZFN0YXRlID0gdHJ1ZSkgPT4ge1xuICAgICAgICBpZiAoYXJncyAmJiBtZXRob2QgJiYgIV9vcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBfc3RhdGUuYWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGVGaWVsZHNBbmRTdGF0ZSAmJiBBcnJheS5pc0FycmF5KGdldChfZmllbGRzLCBuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IG1ldGhvZChnZXQoX2ZpZWxkcywgbmFtZSksIGFyZ3MuYXJnQSwgYXJncy5hcmdCKTtcbiAgICAgICAgICAgICAgICBzaG91bGRTZXRWYWx1ZXMgJiYgc2V0KF9maWVsZHMsIG5hbWUsIGZpZWxkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGVGaWVsZHNBbmRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZ2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBtZXRob2QoZ2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lKSwgYXJncy5hcmdBLCBhcmdzLmFyZ0IpO1xuICAgICAgICAgICAgICAgIHNob3VsZFNldFZhbHVlcyAmJiBzZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUsIGVycm9ycyk7XG4gICAgICAgICAgICAgICAgdW5zZXRFbXB0eUFycmF5KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoX3Byb3h5Rm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMgfHxcbiAgICAgICAgICAgICAgICBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUudG91Y2hlZEZpZWxkcykgJiZcbiAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGVGaWVsZHNBbmRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZ2V0KF9mb3JtU3RhdGUudG91Y2hlZEZpZWxkcywgbmFtZSkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG91Y2hlZEZpZWxkcyA9IG1ldGhvZChnZXQoX2Zvcm1TdGF0ZS50b3VjaGVkRmllbGRzLCBuYW1lKSwgYXJncy5hcmdBLCBhcmdzLmFyZ0IpO1xuICAgICAgICAgICAgICAgIHNob3VsZFNldFZhbHVlcyAmJiBzZXQoX2Zvcm1TdGF0ZS50b3VjaGVkRmllbGRzLCBuYW1lLCB0b3VjaGVkRmllbGRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfcHJveHlGb3JtU3RhdGUuZGlydHlGaWVsZHMgfHwgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmRpcnR5RmllbGRzKSB7XG4gICAgICAgICAgICAgICAgX2Zvcm1TdGF0ZS5kaXJ0eUZpZWxkcyA9IGdldERpcnR5RmllbGRzKF9kZWZhdWx0VmFsdWVzLCBfZm9ybVZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBpc0RpcnR5OiBfZ2V0RGlydHkobmFtZSwgdmFsdWVzKSxcbiAgICAgICAgICAgICAgICBkaXJ0eUZpZWxkczogX2Zvcm1TdGF0ZS5kaXJ0eUZpZWxkcyxcbiAgICAgICAgICAgICAgICBlcnJvcnM6IF9mb3JtU3RhdGUuZXJyb3JzLFxuICAgICAgICAgICAgICAgIGlzVmFsaWQ6IF9mb3JtU3RhdGUuaXNWYWxpZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0KF9mb3JtVmFsdWVzLCBuYW1lLCB2YWx1ZXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVFcnJvcnMgPSAobmFtZSwgZXJyb3IpID0+IHtcbiAgICAgICAgc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lLCBlcnJvcik7XG4gICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgIGVycm9yczogX2Zvcm1TdGF0ZS5lcnJvcnMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgX3NldEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgICAgICAgX2Zvcm1TdGF0ZS5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgIGVycm9yczogX2Zvcm1TdGF0ZS5lcnJvcnMsXG4gICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVWYWxpZEFuZFZhbHVlID0gKG5hbWUsIHNob3VsZFNraXBTZXRWYWx1ZUFzLCB2YWx1ZSwgcmVmKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0KF9maWVsZHMsIG5hbWUpO1xuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGdldChfZm9ybVZhbHVlcywgbmFtZSwgaXNVbmRlZmluZWQodmFsdWUpID8gZ2V0KF9kZWZhdWx0VmFsdWVzLCBuYW1lKSA6IHZhbHVlKTtcbiAgICAgICAgICAgIGlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAocmVmICYmIHJlZi5kZWZhdWx0Q2hlY2tlZCkgfHxcbiAgICAgICAgICAgICAgICBzaG91bGRTa2lwU2V0VmFsdWVBc1xuICAgICAgICAgICAgICAgID8gc2V0KF9mb3JtVmFsdWVzLCBuYW1lLCBzaG91bGRTa2lwU2V0VmFsdWVBcyA/IGRlZmF1bHRWYWx1ZSA6IGdldEZpZWxkVmFsdWUoZmllbGQuX2YpKVxuICAgICAgICAgICAgICAgIDogc2V0RmllbGRWYWx1ZShuYW1lLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgX3N0YXRlLm1vdW50ICYmICFfc3RhdGUuYWN0aW9uICYmIF9zZXRWYWxpZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVUb3VjaEFuZERpcnR5ID0gKG5hbWUsIGZpZWxkVmFsdWUsIGlzQmx1ckV2ZW50LCBzaG91bGREaXJ0eSwgc2hvdWxkUmVuZGVyKSA9PiB7XG4gICAgICAgIGxldCBzaG91bGRVcGRhdGVGaWVsZCA9IGZhbHNlO1xuICAgICAgICBsZXQgaXNQcmV2aW91c0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghX29wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICghaXNCbHVyRXZlbnQgfHwgc2hvdWxkRGlydHkpIHtcbiAgICAgICAgICAgICAgICBpZiAoX3Byb3h5Rm9ybVN0YXRlLmlzRGlydHkgfHwgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmlzRGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNQcmV2aW91c0RpcnR5ID0gX2Zvcm1TdGF0ZS5pc0RpcnR5O1xuICAgICAgICAgICAgICAgICAgICBfZm9ybVN0YXRlLmlzRGlydHkgPSBvdXRwdXQuaXNEaXJ0eSA9IF9nZXREaXJ0eSgpO1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGVGaWVsZCA9IGlzUHJldmlvdXNEaXJ0eSAhPT0gb3V0cHV0LmlzRGlydHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudEZpZWxkUHJpc3RpbmUgPSBkZWVwRXF1YWwoZ2V0KF9kZWZhdWx0VmFsdWVzLCBuYW1lKSwgZmllbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaXNQcmV2aW91c0RpcnR5ID0gISFnZXQoX2Zvcm1TdGF0ZS5kaXJ0eUZpZWxkcywgbmFtZSk7XG4gICAgICAgICAgICAgICAgaXNDdXJyZW50RmllbGRQcmlzdGluZVxuICAgICAgICAgICAgICAgICAgICA/IHVuc2V0KF9mb3JtU3RhdGUuZGlydHlGaWVsZHMsIG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIDogc2V0KF9mb3JtU3RhdGUuZGlydHlGaWVsZHMsIG5hbWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIG91dHB1dC5kaXJ0eUZpZWxkcyA9IF9mb3JtU3RhdGUuZGlydHlGaWVsZHM7XG4gICAgICAgICAgICAgICAgc2hvdWxkVXBkYXRlRmllbGQgPVxuICAgICAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGVGaWVsZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKChfcHJveHlGb3JtU3RhdGUuZGlydHlGaWVsZHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUuZGlydHlGaWVsZHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQcmV2aW91c0RpcnR5ICE9PSAhaXNDdXJyZW50RmllbGRQcmlzdGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNCbHVyRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1ByZXZpb3VzRmllbGRUb3VjaGVkID0gZ2V0KF9mb3JtU3RhdGUudG91Y2hlZEZpZWxkcywgbmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ByZXZpb3VzRmllbGRUb3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldChfZm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMsIG5hbWUsIGlzQmx1ckV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnRvdWNoZWRGaWVsZHMgPSBfZm9ybVN0YXRlLnRvdWNoZWRGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFVwZGF0ZUZpZWxkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFVwZGF0ZUZpZWxkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfcHJveHlGb3JtU3RhdGUudG91Y2hlZEZpZWxkcyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUudG91Y2hlZEZpZWxkcykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQcmV2aW91c0ZpZWxkVG91Y2hlZCAhPT0gaXNCbHVyRXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3VsZFVwZGF0ZUZpZWxkICYmIHNob3VsZFJlbmRlciAmJiBfc3ViamVjdHMuc3RhdGUubmV4dChvdXRwdXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaG91bGRVcGRhdGVGaWVsZCA/IG91dHB1dCA6IHt9O1xuICAgIH07XG4gICAgY29uc3Qgc2hvdWxkUmVuZGVyQnlFcnJvciA9IChuYW1lLCBpc1ZhbGlkLCBlcnJvciwgZmllbGRTdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2aW91c0ZpZWxkRXJyb3IgPSBnZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpO1xuICAgICAgICBjb25zdCBzaG91bGRVcGRhdGVWYWxpZCA9IChfcHJveHlGb3JtU3RhdGUuaXNWYWxpZCB8fCBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUuaXNWYWxpZCkgJiZcbiAgICAgICAgICAgIGlzQm9vbGVhbihpc1ZhbGlkKSAmJlxuICAgICAgICAgICAgX2Zvcm1TdGF0ZS5pc1ZhbGlkICE9PSBpc1ZhbGlkO1xuICAgICAgICBpZiAoX29wdGlvbnMuZGVsYXlFcnJvciAmJiBlcnJvcikge1xuICAgICAgICAgICAgZGVsYXlFcnJvckNhbGxiYWNrID0gZGVib3VuY2UoKCkgPT4gdXBkYXRlRXJyb3JzKG5hbWUsIGVycm9yKSk7XG4gICAgICAgICAgICBkZWxheUVycm9yQ2FsbGJhY2soX29wdGlvbnMuZGVsYXlFcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgZGVsYXlFcnJvckNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgPyBzZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUsIGVycm9yKVxuICAgICAgICAgICAgICAgIDogdW5zZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoZXJyb3IgPyAhZGVlcEVxdWFsKHByZXZpb3VzRmllbGRFcnJvciwgZXJyb3IpIDogcHJldmlvdXNGaWVsZEVycm9yKSB8fFxuICAgICAgICAgICAgIWlzRW1wdHlPYmplY3QoZmllbGRTdGF0ZSkgfHxcbiAgICAgICAgICAgIHNob3VsZFVwZGF0ZVZhbGlkKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgICAgIC4uLmZpZWxkU3RhdGUsXG4gICAgICAgICAgICAgICAgLi4uKHNob3VsZFVwZGF0ZVZhbGlkICYmIGlzQm9vbGVhbihpc1ZhbGlkKSA/IHsgaXNWYWxpZCB9IDoge30pLFxuICAgICAgICAgICAgICAgIGVycm9yczogX2Zvcm1TdGF0ZS5lcnJvcnMsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBfZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgICAgIC4uLl9mb3JtU3RhdGUsXG4gICAgICAgICAgICAgICAgLi4udXBkYXRlZEZvcm1TdGF0ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh1cGRhdGVkRm9ybVN0YXRlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgX3J1blNjaGVtYSA9IGFzeW5jIChuYW1lKSA9PiB7XG4gICAgICAgIF91cGRhdGVJc1ZhbGlkYXRpbmcobmFtZSwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IF9vcHRpb25zLnJlc29sdmVyKF9mb3JtVmFsdWVzLCBfb3B0aW9ucy5jb250ZXh0LCBnZXRSZXNvbHZlck9wdGlvbnMobmFtZSB8fCBfbmFtZXMubW91bnQsIF9maWVsZHMsIF9vcHRpb25zLmNyaXRlcmlhTW9kZSwgX29wdGlvbnMuc2hvdWxkVXNlTmF0aXZlVmFsaWRhdGlvbikpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgZXhlY3V0ZVNjaGVtYUFuZFVwZGF0ZVN0YXRlID0gYXN5bmMgKG5hbWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3JzIH0gPSBhd2FpdCBfcnVuU2NoZW1hKG5hbWVzKTtcbiAgICAgICAgX3VwZGF0ZUlzVmFsaWRhdGluZyhuYW1lcyk7XG4gICAgICAgIGlmIChuYW1lcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBnZXQoZXJyb3JzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgICA/IHNldChfZm9ybVN0YXRlLmVycm9ycywgbmFtZSwgZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIDogdW5zZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX2Zvcm1TdGF0ZS5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9O1xuICAgIGNvbnN0IGV4ZWN1dGVCdWlsdEluVmFsaWRhdGlvbiA9IGFzeW5jIChmaWVsZHMsIHNob3VsZE9ubHlDaGVja1ZhbGlkLCBjb250ZXh0ID0ge1xuICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICB9KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBfZiwgLi4uZmllbGRWYWx1ZSB9ID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKF9mKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRmllbGRBcnJheVJvb3QgPSBfbmFtZXMuYXJyYXkuaGFzKF9mLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1Byb21pc2VGdW5jdGlvbiA9IGZpZWxkLl9mICYmIGhhc1Byb21pc2VWYWxpZGF0aW9uKGZpZWxkLl9mKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvbWlzZUZ1bmN0aW9uICYmIF9wcm94eUZvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdXBkYXRlSXNWYWxpZGF0aW5nKFtfZi5uYW1lXSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGF3YWl0IHZhbGlkYXRlRmllbGQoZmllbGQsIF9uYW1lcy5kaXNhYmxlZCwgX2Zvcm1WYWx1ZXMsIHNob3VsZERpc3BsYXlBbGxBc3NvY2lhdGVkRXJyb3JzLCBfb3B0aW9ucy5zaG91bGRVc2VOYXRpdmVWYWxpZGF0aW9uICYmICFzaG91bGRPbmx5Q2hlY2tWYWxpZCwgaXNGaWVsZEFycmF5Um9vdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2VGdW5jdGlvbiAmJiBfcHJveHlGb3JtU3RhdGUudmFsaWRhdGluZ0ZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZUlzVmFsaWRhdGluZyhbX2YubmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZEVycm9yW19mLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkT25seUNoZWNrVmFsaWQgfHwgcHJvcHMuc2hvdWxkVXNlTmF0aXZlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICFzaG91bGRPbmx5Q2hlY2tWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGdldChmaWVsZEVycm9yLCBfZi5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaXNGaWVsZEFycmF5Um9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHVwZGF0ZUZpZWxkQXJyYXlSb290RXJyb3IoX2Zvcm1TdGF0ZS5lcnJvcnMsIGZpZWxkRXJyb3IsIF9mLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBfZi5uYW1lLCBmaWVsZEVycm9yW19mLm5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5zZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIF9mLm5hbWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIWlzRW1wdHlPYmplY3QoZmllbGRWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKGF3YWl0IGV4ZWN1dGVCdWlsdEluVmFsaWRhdGlvbihmaWVsZFZhbHVlLCBzaG91bGRPbmx5Q2hlY2tWYWxpZCwgY29udGV4dCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0LnZhbGlkO1xuICAgIH07XG4gICAgY29uc3QgX3JlbW92ZVVubW91bnRlZCA9ICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIF9uYW1lcy51bk1vdW50KSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldChfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgIGZpZWxkICYmXG4gICAgICAgICAgICAgICAgKGZpZWxkLl9mLnJlZnNcbiAgICAgICAgICAgICAgICAgICAgPyBmaWVsZC5fZi5yZWZzLmV2ZXJ5KChyZWYpID0+ICFsaXZlKHJlZikpXG4gICAgICAgICAgICAgICAgICAgIDogIWxpdmUoZmllbGQuX2YucmVmKSkgJiZcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIF9uYW1lcy51bk1vdW50ID0gbmV3IFNldCgpO1xuICAgIH07XG4gICAgY29uc3QgX2dldERpcnR5ID0gKG5hbWUsIGRhdGEpID0+ICFfb3B0aW9ucy5kaXNhYmxlZCAmJlxuICAgICAgICAobmFtZSAmJiBkYXRhICYmIHNldChfZm9ybVZhbHVlcywgbmFtZSwgZGF0YSksXG4gICAgICAgICAgICAhZGVlcEVxdWFsKGdldFZhbHVlcygpLCBfZGVmYXVsdFZhbHVlcykpO1xuICAgIGNvbnN0IF9nZXRXYXRjaCA9IChuYW1lcywgZGVmYXVsdFZhbHVlLCBpc0dsb2JhbCkgPT4gZ2VuZXJhdGVXYXRjaE91dHB1dChuYW1lcywgX25hbWVzLCB7XG4gICAgICAgIC4uLihfc3RhdGUubW91bnRcbiAgICAgICAgICAgID8gX2Zvcm1WYWx1ZXNcbiAgICAgICAgICAgIDogaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgICAgID8gX2RlZmF1bHRWYWx1ZXNcbiAgICAgICAgICAgICAgICA6IGlzU3RyaW5nKG5hbWVzKVxuICAgICAgICAgICAgICAgICAgICA/IHsgW25hbWVzXTogZGVmYXVsdFZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0VmFsdWUpLFxuICAgIH0sIGlzR2xvYmFsLCBkZWZhdWx0VmFsdWUpO1xuICAgIGNvbnN0IF9nZXRGaWVsZEFycmF5ID0gKG5hbWUpID0+IGNvbXBhY3QoZ2V0KF9zdGF0ZS5tb3VudCA/IF9mb3JtVmFsdWVzIDogX2RlZmF1bHRWYWx1ZXMsIG5hbWUsIF9vcHRpb25zLnNob3VsZFVucmVnaXN0ZXIgPyBnZXQoX2RlZmF1bHRWYWx1ZXMsIG5hbWUsIFtdKSA6IFtdKSk7XG4gICAgY29uc3Qgc2V0RmllbGRWYWx1ZSA9IChuYW1lLCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0KF9maWVsZHMsIG5hbWUpO1xuICAgICAgICBsZXQgZmllbGRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUmVmZXJlbmNlID0gZmllbGQuX2Y7XG4gICAgICAgICAgICBpZiAoZmllbGRSZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICAhZmllbGRSZWZlcmVuY2UuZGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2V0KF9mb3JtVmFsdWVzLCBuYW1lLCBnZXRGaWVsZFZhbHVlQXModmFsdWUsIGZpZWxkUmVmZXJlbmNlKSk7XG4gICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgIGlzSFRNTEVsZW1lbnQoZmllbGRSZWZlcmVuY2UucmVmKSAmJiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGlzTXVsdGlwbGVTZWxlY3QoZmllbGRSZWZlcmVuY2UucmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBbLi4uZmllbGRSZWZlcmVuY2UucmVmLm9wdGlvbnNdLmZvckVhY2goKG9wdGlvblJlZikgPT4gKG9wdGlvblJlZi5zZWxlY3RlZCA9IGZpZWxkVmFsdWUuaW5jbHVkZXMob3B0aW9uUmVmLnZhbHVlKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmaWVsZFJlZmVyZW5jZS5yZWZzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NoZWNrQm94SW5wdXQoZmllbGRSZWZlcmVuY2UucmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRSZWZlcmVuY2UucmVmcy5mb3JFYWNoKChjaGVja2JveFJlZikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hlY2tib3hSZWYuZGVmYXVsdENoZWNrZWQgfHwgIWNoZWNrYm94UmVmLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFJlZi5jaGVja2VkID0gISFmaWVsZFZhbHVlLmZpbmQoKGRhdGEpID0+IGRhdGEgPT09IGNoZWNrYm94UmVmLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94UmVmLmNoZWNrZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPT09IGNoZWNrYm94UmVmLnZhbHVlIHx8ICEhZmllbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRSZWZlcmVuY2UucmVmcy5mb3JFYWNoKChyYWRpb1JlZikgPT4gKHJhZGlvUmVmLmNoZWNrZWQgPSByYWRpb1JlZi52YWx1ZSA9PT0gZmllbGRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRmlsZUlucHV0KGZpZWxkUmVmZXJlbmNlLnJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRSZWZlcmVuY2UucmVmLnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFJlZmVyZW5jZS5yZWYudmFsdWUgPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkUmVmZXJlbmNlLnJlZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IGNsb25lT2JqZWN0KF9mb3JtVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIChvcHRpb25zLnNob3VsZERpcnR5IHx8IG9wdGlvbnMuc2hvdWxkVG91Y2gpICYmXG4gICAgICAgICAgICB1cGRhdGVUb3VjaEFuZERpcnR5KG5hbWUsIGZpZWxkVmFsdWUsIG9wdGlvbnMuc2hvdWxkVG91Y2gsIG9wdGlvbnMuc2hvdWxkRGlydHksIHRydWUpO1xuICAgICAgICBvcHRpb25zLnNob3VsZFZhbGlkYXRlICYmIHRyaWdnZXIobmFtZSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRWYWx1ZXMgPSAobmFtZSwgdmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZEtleSBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5oYXNPd25Qcm9wZXJ0eShmaWVsZEtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gdmFsdWVbZmllbGRLZXldO1xuICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gbmFtZSArICcuJyArIGZpZWxkS2V5O1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoX2ZpZWxkcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgIChfbmFtZXMuYXJyYXkuaGFzKG5hbWUpIHx8XG4gICAgICAgICAgICAgICAgaXNPYmplY3QoZmllbGRWYWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAoZmllbGQgJiYgIWZpZWxkLl9mKSkgJiZcbiAgICAgICAgICAgICAgICAhaXNEYXRlT2JqZWN0KGZpZWxkVmFsdWUpXG4gICAgICAgICAgICAgICAgPyBzZXRWYWx1ZXMoZmllbGROYW1lLCBmaWVsZFZhbHVlLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogc2V0RmllbGRWYWx1ZShmaWVsZE5hbWUsIGZpZWxkVmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRWYWx1ZSA9IChuYW1lLCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0KF9maWVsZHMsIG5hbWUpO1xuICAgICAgICBjb25zdCBpc0ZpZWxkQXJyYXkgPSBfbmFtZXMuYXJyYXkuaGFzKG5hbWUpO1xuICAgICAgICBjb25zdCBjbG9uZVZhbHVlID0gY2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgICBzZXQoX2Zvcm1WYWx1ZXMsIG5hbWUsIGNsb25lVmFsdWUpO1xuICAgICAgICBpZiAoaXNGaWVsZEFycmF5KSB7XG4gICAgICAgICAgICBfc3ViamVjdHMuYXJyYXkubmV4dCh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGNsb25lT2JqZWN0KF9mb3JtVmFsdWVzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKChfcHJveHlGb3JtU3RhdGUuaXNEaXJ0eSB8fFxuICAgICAgICAgICAgICAgIF9wcm94eUZvcm1TdGF0ZS5kaXJ0eUZpZWxkcyB8fFxuICAgICAgICAgICAgICAgIF9wcm94eVN1YnNjcmliZUZvcm1TdGF0ZS5pc0RpcnR5IHx8XG4gICAgICAgICAgICAgICAgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmRpcnR5RmllbGRzKSAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2hvdWxkRGlydHkpIHtcbiAgICAgICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRpcnR5RmllbGRzOiBnZXREaXJ0eUZpZWxkcyhfZGVmYXVsdFZhbHVlcywgX2Zvcm1WYWx1ZXMpLFxuICAgICAgICAgICAgICAgICAgICBpc0RpcnR5OiBfZ2V0RGlydHkobmFtZSwgY2xvbmVWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmaWVsZCAmJiAhZmllbGQuX2YgJiYgIWlzTnVsbE9yVW5kZWZpbmVkKGNsb25lVmFsdWUpXG4gICAgICAgICAgICAgICAgPyBzZXRWYWx1ZXMobmFtZSwgY2xvbmVWYWx1ZSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IHNldEZpZWxkVmFsdWUobmFtZSwgY2xvbmVWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzV2F0Y2hlZChuYW1lLCBfbmFtZXMpKSB7XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgLi4uX2Zvcm1TdGF0ZSxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlczogY2xvbmVPYmplY3QoX2Zvcm1WYWx1ZXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgbmFtZTogX3N0YXRlLm1vdW50ID8gbmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGNsb25lT2JqZWN0KF9mb3JtVmFsdWVzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvbkNoYW5nZSA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICBfc3RhdGUubW91bnQgPSB0cnVlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIGxldCBuYW1lID0gdGFyZ2V0Lm5hbWU7XG4gICAgICAgIGxldCBpc0ZpZWxkVmFsdWVVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoX2ZpZWxkcywgbmFtZSk7XG4gICAgICAgIGNvbnN0IF91cGRhdGVJc0ZpZWxkVmFsdWVVcGRhdGVkID0gKGZpZWxkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlzRmllbGRWYWx1ZVVwZGF0ZWQgPVxuICAgICAgICAgICAgICAgIE51bWJlci5pc05hTihmaWVsZFZhbHVlKSB8fFxuICAgICAgICAgICAgICAgICAgICAoaXNEYXRlT2JqZWN0KGZpZWxkVmFsdWUpICYmIGlzTmFOKGZpZWxkVmFsdWUuZ2V0VGltZSgpKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgZGVlcEVxdWFsKGZpZWxkVmFsdWUsIGdldChfZm9ybVZhbHVlcywgbmFtZSwgZmllbGRWYWx1ZSkpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uTW9kZUJlZm9yZVN1Ym1pdCA9IGdldFZhbGlkYXRpb25Nb2Rlcyhfb3B0aW9ucy5tb2RlKTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbk1vZGVBZnRlclN1Ym1pdCA9IGdldFZhbGlkYXRpb25Nb2Rlcyhfb3B0aW9ucy5yZVZhbGlkYXRlTW9kZSk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQ7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGFyZ2V0LnR5cGVcbiAgICAgICAgICAgICAgICA/IGdldEZpZWxkVmFsdWUoZmllbGQuX2YpXG4gICAgICAgICAgICAgICAgOiBnZXRFdmVudFZhbHVlKGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGlzQmx1ckV2ZW50ID0gZXZlbnQudHlwZSA9PT0gRVZFTlRTLkJMVVIgfHwgZXZlbnQudHlwZSA9PT0gRVZFTlRTLkZPQ1VTX09VVDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNraXBWYWxpZGF0aW9uID0gKCFoYXNWYWxpZGF0aW9uKGZpZWxkLl9mKSAmJlxuICAgICAgICAgICAgICAgICFfb3B0aW9ucy5yZXNvbHZlciAmJlxuICAgICAgICAgICAgICAgICFnZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICAgIWZpZWxkLl9mLmRlcHMpIHx8XG4gICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24oaXNCbHVyRXZlbnQsIGdldChfZm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMsIG5hbWUpLCBfZm9ybVN0YXRlLmlzU3VibWl0dGVkLCB2YWxpZGF0aW9uTW9kZUFmdGVyU3VibWl0LCB2YWxpZGF0aW9uTW9kZUJlZm9yZVN1Ym1pdCk7XG4gICAgICAgICAgICBjb25zdCB3YXRjaGVkID0gaXNXYXRjaGVkKG5hbWUsIF9uYW1lcywgaXNCbHVyRXZlbnQpO1xuICAgICAgICAgICAgc2V0KF9mb3JtVmFsdWVzLCBuYW1lLCBmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgIGlmIChpc0JsdXJFdmVudCkge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQucmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuX2Yub25CbHVyICYmIGZpZWxkLl9mLm9uQmx1cihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGF5RXJyb3JDYWxsYmFjayAmJiBkZWxheUVycm9yQ2FsbGJhY2soMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZmllbGQuX2Yub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5fZi5vbkNoYW5nZShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaWVsZFN0YXRlID0gdXBkYXRlVG91Y2hBbmREaXJ0eShuYW1lLCBmaWVsZFZhbHVlLCBpc0JsdXJFdmVudCk7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRSZW5kZXIgPSAhaXNFbXB0eU9iamVjdChmaWVsZFN0YXRlKSB8fCB3YXRjaGVkO1xuICAgICAgICAgICAgIWlzQmx1ckV2ZW50ICYmXG4gICAgICAgICAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBldmVudC50eXBlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IGNsb25lT2JqZWN0KF9mb3JtVmFsdWVzKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChzaG91bGRTa2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChfcHJveHlGb3JtU3RhdGUuaXNWYWxpZCB8fCBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUuaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMubW9kZSA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0JsdXJFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZXRWYWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc0JsdXJFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3NldFZhbGlkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIChzaG91bGRSZW5kZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoeyBuYW1lLCAuLi4od2F0Y2hlZCA/IHt9IDogZmllbGRTdGF0ZSkgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgIWlzQmx1ckV2ZW50ICYmIHdhdGNoZWQgJiYgX3N1YmplY3RzLnN0YXRlLm5leHQoeyAuLi5fZm9ybVN0YXRlIH0pO1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLnJlc29sdmVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvcnMgfSA9IGF3YWl0IF9ydW5TY2hlbWEoW25hbWVdKTtcbiAgICAgICAgICAgICAgICBfdXBkYXRlSXNWYWxpZGF0aW5nKFtuYW1lXSk7XG4gICAgICAgICAgICAgICAgX3VwZGF0ZUlzRmllbGRWYWx1ZVVwZGF0ZWQoZmllbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRmllbGRWYWx1ZVVwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNFcnJvckxvb2t1cFJlc3VsdCA9IHNjaGVtYUVycm9yTG9va3VwKF9mb3JtU3RhdGUuZXJyb3JzLCBfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JMb29rdXBSZXN1bHQgPSBzY2hlbWFFcnJvckxvb2t1cChlcnJvcnMsIF9maWVsZHMsIHByZXZpb3VzRXJyb3JMb29rdXBSZXN1bHQubmFtZSB8fCBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnJvckxvb2t1cFJlc3VsdC5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGVycm9yTG9va3VwUmVzdWx0Lm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBpc0VtcHR5T2JqZWN0KGVycm9ycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgX3VwZGF0ZUlzVmFsaWRhdGluZyhbbmFtZV0sIHRydWUpO1xuICAgICAgICAgICAgICAgIGVycm9yID0gKGF3YWl0IHZhbGlkYXRlRmllbGQoZmllbGQsIF9uYW1lcy5kaXNhYmxlZCwgX2Zvcm1WYWx1ZXMsIHNob3VsZERpc3BsYXlBbGxBc3NvY2lhdGVkRXJyb3JzLCBfb3B0aW9ucy5zaG91bGRVc2VOYXRpdmVWYWxpZGF0aW9uKSlbbmFtZV07XG4gICAgICAgICAgICAgICAgX3VwZGF0ZUlzVmFsaWRhdGluZyhbbmFtZV0pO1xuICAgICAgICAgICAgICAgIF91cGRhdGVJc0ZpZWxkVmFsdWVVcGRhdGVkKGZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc0ZpZWxkVmFsdWVVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9wcm94eUZvcm1TdGF0ZS5pc1ZhbGlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUuaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGF3YWl0IGV4ZWN1dGVCdWlsdEluVmFsaWRhdGlvbihfZmllbGRzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ZpZWxkVmFsdWVVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuX2YuZGVwcyAmJlxuICAgICAgICAgICAgICAgICAgICAoIUFycmF5LmlzQXJyYXkoZmllbGQuX2YuZGVwcykgfHwgZmllbGQuX2YuZGVwcy5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKGZpZWxkLl9mLmRlcHMpO1xuICAgICAgICAgICAgICAgIHNob3VsZFJlbmRlckJ5RXJyb3IobmFtZSwgaXNWYWxpZCwgZXJyb3IsIGZpZWxkU3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBfZm9jdXNJbnB1dCA9IChyZWYsIGtleSkgPT4ge1xuICAgICAgICBpZiAoZ2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBrZXkpICYmIHJlZi5mb2N1cykge1xuICAgICAgICAgICAgcmVmLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfTtcbiAgICBjb25zdCB0cmlnZ2VyID0gYXN5bmMgKG5hbWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBsZXQgaXNWYWxpZDtcbiAgICAgICAgbGV0IHZhbGlkYXRpb25SZXN1bHQ7XG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBjb252ZXJ0VG9BcnJheVBheWxvYWQobmFtZSk7XG4gICAgICAgIGlmIChfb3B0aW9ucy5yZXNvbHZlcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gYXdhaXQgZXhlY3V0ZVNjaGVtYUFuZFVwZGF0ZVN0YXRlKGlzVW5kZWZpbmVkKG5hbWUpID8gbmFtZSA6IGZpZWxkTmFtZXMpO1xuICAgICAgICAgICAgaXNWYWxpZCA9IGlzRW1wdHlPYmplY3QoZXJyb3JzKTtcbiAgICAgICAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBuYW1lXG4gICAgICAgICAgICAgICAgPyAhZmllbGROYW1lcy5zb21lKChuYW1lKSA9PiBnZXQoZXJyb3JzLCBuYW1lKSlcbiAgICAgICAgICAgICAgICA6IGlzVmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobmFtZSkge1xuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IChhd2FpdCBQcm9taXNlLmFsbChmaWVsZE5hbWVzLm1hcChhc3luYyAoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoX2ZpZWxkcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZXhlY3V0ZUJ1aWx0SW5WYWxpZGF0aW9uKGZpZWxkICYmIGZpZWxkLl9mID8geyBbZmllbGROYW1lXTogZmllbGQgfSA6IGZpZWxkKTtcbiAgICAgICAgICAgIH0pKSkuZXZlcnkoQm9vbGVhbik7XG4gICAgICAgICAgICAhKCF2YWxpZGF0aW9uUmVzdWx0ICYmICFfZm9ybVN0YXRlLmlzVmFsaWQpICYmIF9zZXRWYWxpZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IGlzVmFsaWQgPSBhd2FpdCBleGVjdXRlQnVpbHRJblZhbGlkYXRpb24oX2ZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgLi4uKCFpc1N0cmluZyhuYW1lKSB8fFxuICAgICAgICAgICAgICAgICgoX3Byb3h5Rm9ybVN0YXRlLmlzVmFsaWQgfHwgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmlzVmFsaWQpICYmXG4gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgIT09IF9mb3JtU3RhdGUuaXNWYWxpZClcbiAgICAgICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICAgICAgOiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oX29wdGlvbnMucmVzb2x2ZXIgfHwgIW5hbWUgPyB7IGlzVmFsaWQgfSA6IHt9KSxcbiAgICAgICAgICAgIGVycm9yczogX2Zvcm1TdGF0ZS5lcnJvcnMsXG4gICAgICAgIH0pO1xuICAgICAgICBvcHRpb25zLnNob3VsZEZvY3VzICYmXG4gICAgICAgICAgICAhdmFsaWRhdGlvblJlc3VsdCAmJlxuICAgICAgICAgICAgaXRlcmF0ZUZpZWxkc0J5QWN0aW9uKF9maWVsZHMsIF9mb2N1c0lucHV0LCBuYW1lID8gZmllbGROYW1lcyA6IF9uYW1lcy5tb3VudCk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgZ2V0VmFsdWVzID0gKGZpZWxkTmFtZXMsIGNvbmZpZykgPT4ge1xuICAgICAgICBsZXQgdmFsdWVzID0ge1xuICAgICAgICAgICAgLi4uKF9zdGF0ZS5tb3VudCA/IF9mb3JtVmFsdWVzIDogX2RlZmF1bHRWYWx1ZXMpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSBleHRyYWN0Rm9ybVZhbHVlcyhjb25maWcuZGlydHlGaWVsZHMgPyBfZm9ybVN0YXRlLmRpcnR5RmllbGRzIDogX2Zvcm1TdGF0ZS50b3VjaGVkRmllbGRzLCB2YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChmaWVsZE5hbWVzKVxuICAgICAgICAgICAgPyB2YWx1ZXNcbiAgICAgICAgICAgIDogaXNTdHJpbmcoZmllbGROYW1lcylcbiAgICAgICAgICAgICAgICA/IGdldCh2YWx1ZXMsIGZpZWxkTmFtZXMpXG4gICAgICAgICAgICAgICAgOiBmaWVsZE5hbWVzLm1hcCgobmFtZSkgPT4gZ2V0KHZhbHVlcywgbmFtZSkpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0RmllbGRTdGF0ZSA9IChuYW1lLCBmb3JtU3RhdGUpID0+ICh7XG4gICAgICAgIGludmFsaWQ6ICEhZ2V0KChmb3JtU3RhdGUgfHwgX2Zvcm1TdGF0ZSkuZXJyb3JzLCBuYW1lKSxcbiAgICAgICAgaXNEaXJ0eTogISFnZXQoKGZvcm1TdGF0ZSB8fCBfZm9ybVN0YXRlKS5kaXJ0eUZpZWxkcywgbmFtZSksXG4gICAgICAgIGVycm9yOiBnZXQoKGZvcm1TdGF0ZSB8fCBfZm9ybVN0YXRlKS5lcnJvcnMsIG5hbWUpLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6ICEhZ2V0KF9mb3JtU3RhdGUudmFsaWRhdGluZ0ZpZWxkcywgbmFtZSksXG4gICAgICAgIGlzVG91Y2hlZDogISFnZXQoKGZvcm1TdGF0ZSB8fCBfZm9ybVN0YXRlKS50b3VjaGVkRmllbGRzLCBuYW1lKSxcbiAgICB9KTtcbiAgICBjb25zdCBjbGVhckVycm9ycyA9IChuYW1lKSA9PiB7XG4gICAgICAgIG5hbWUgJiZcbiAgICAgICAgICAgIGNvbnZlcnRUb0FycmF5UGF5bG9hZChuYW1lKS5mb3JFYWNoKChpbnB1dE5hbWUpID0+IHVuc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBpbnB1dE5hbWUpKTtcbiAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgZXJyb3JzOiBuYW1lID8gX2Zvcm1TdGF0ZS5lcnJvcnMgOiB7fSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRFcnJvciA9IChuYW1lLCBlcnJvciwgb3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCByZWYgPSAoZ2V0KF9maWVsZHMsIG5hbWUsIHsgX2Y6IHt9IH0pLl9mIHx8IHt9KS5yZWY7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFcnJvciA9IGdldChfZm9ybVN0YXRlLmVycm9ycywgbmFtZSkgfHwge307XG4gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIGV4aXN0aW5nIGVycm9yIG1lc3NhZ2VzIGVsc2V3aGVyZSBpbiB0aGUgb2JqZWN0IHRyZWUuXG4gICAgICAgIGNvbnN0IHsgcmVmOiBjdXJyZW50UmVmLCBtZXNzYWdlLCB0eXBlLCAuLi5yZXN0T2ZFcnJvclRyZWUgfSA9IGN1cnJlbnRFcnJvcjtcbiAgICAgICAgc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lLCB7XG4gICAgICAgICAgICAuLi5yZXN0T2ZFcnJvclRyZWUsXG4gICAgICAgICAgICAuLi5lcnJvcixcbiAgICAgICAgICAgIHJlZixcbiAgICAgICAgfSk7XG4gICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBlcnJvcnM6IF9mb3JtU3RhdGUuZXJyb3JzLFxuICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuc2hvdWxkRm9jdXMgJiYgcmVmICYmIHJlZi5mb2N1cyAmJiByZWYuZm9jdXMoKTtcbiAgICB9O1xuICAgIGNvbnN0IHdhdGNoID0gKG5hbWUsIGRlZmF1bHRWYWx1ZSkgPT4gaXNGdW5jdGlvbihuYW1lKVxuICAgICAgICA/IF9zdWJqZWN0cy5zdGF0ZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHBheWxvYWQpID0+ICd2YWx1ZXMnIGluIHBheWxvYWQgJiZcbiAgICAgICAgICAgICAgICBuYW1lKF9nZXRXYXRjaCh1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZSksIHBheWxvYWQpLFxuICAgICAgICB9KVxuICAgICAgICA6IF9nZXRXYXRjaChuYW1lLCBkZWZhdWx0VmFsdWUsIHRydWUpO1xuICAgIGNvbnN0IF9zdWJzY3JpYmUgPSAocHJvcHMpID0+IF9zdWJqZWN0cy5zdGF0ZS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZm9ybVN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3Vic2NyaWJlQnlOYW1lKHByb3BzLm5hbWUsIGZvcm1TdGF0ZS5uYW1lLCBwcm9wcy5leGFjdCkgJiZcbiAgICAgICAgICAgICAgICBzaG91bGRSZW5kZXJGb3JtU3RhdGUoZm9ybVN0YXRlLCBwcm9wcy5mb3JtU3RhdGUgfHwgX3Byb3h5Rm9ybVN0YXRlLCBfc2V0Rm9ybVN0YXRlLCBwcm9wcy5yZVJlbmRlclJvb3QpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHsgLi4uX2Zvcm1WYWx1ZXMgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uX2Zvcm1TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVzOiBfZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KS51bnN1YnNjcmliZTtcbiAgICBjb25zdCBzdWJzY3JpYmUgPSAocHJvcHMpID0+IHtcbiAgICAgICAgX3N0YXRlLm1vdW50ID0gdHJ1ZTtcbiAgICAgICAgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgLi4uX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLFxuICAgICAgICAgICAgLi4ucHJvcHMuZm9ybVN0YXRlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3N1YnNjcmliZSh7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGZvcm1TdGF0ZToge1xuICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRQcm94eUZvcm1TdGF0ZSxcbiAgICAgICAgICAgICAgICAuLi5wcm9wcy5mb3JtU3RhdGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHVucmVnaXN0ZXIgPSAobmFtZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGROYW1lIG9mIG5hbWUgPyBjb252ZXJ0VG9BcnJheVBheWxvYWQobmFtZSkgOiBfbmFtZXMubW91bnQpIHtcbiAgICAgICAgICAgIF9uYW1lcy5tb3VudC5kZWxldGUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIF9uYW1lcy5hcnJheS5kZWxldGUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5rZWVwVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB1bnNldChfZmllbGRzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgIHVuc2V0KF9mb3JtVmFsdWVzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgIW9wdGlvbnMua2VlcEVycm9yICYmIHVuc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgIW9wdGlvbnMua2VlcERpcnR5ICYmIHVuc2V0KF9mb3JtU3RhdGUuZGlydHlGaWVsZHMsIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAhb3B0aW9ucy5rZWVwVG91Y2hlZCAmJiB1bnNldChfZm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMsIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAhb3B0aW9ucy5rZWVwSXNWYWxpZGF0aW5nICYmXG4gICAgICAgICAgICAgICAgdW5zZXQoX2Zvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgIV9vcHRpb25zLnNob3VsZFVucmVnaXN0ZXIgJiZcbiAgICAgICAgICAgICAgICAhb3B0aW9ucy5rZWVwRGVmYXVsdFZhbHVlICYmXG4gICAgICAgICAgICAgICAgdW5zZXQoX2RlZmF1bHRWYWx1ZXMsIGZpZWxkTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgdmFsdWVzOiBjbG9uZU9iamVjdChfZm9ybVZhbHVlcyksXG4gICAgICAgIH0pO1xuICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAuLi5fZm9ybVN0YXRlLFxuICAgICAgICAgICAgLi4uKCFvcHRpb25zLmtlZXBEaXJ0eSA/IHt9IDogeyBpc0RpcnR5OiBfZ2V0RGlydHkoKSB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgICFvcHRpb25zLmtlZXBJc1ZhbGlkICYmIF9zZXRWYWxpZCgpO1xuICAgIH07XG4gICAgY29uc3QgX3NldERpc2FibGVkRmllbGQgPSAoeyBkaXNhYmxlZCwgbmFtZSwgfSkgPT4ge1xuICAgICAgICBpZiAoKGlzQm9vbGVhbihkaXNhYmxlZCkgJiYgX3N0YXRlLm1vdW50KSB8fFxuICAgICAgICAgICAgISFkaXNhYmxlZCB8fFxuICAgICAgICAgICAgX25hbWVzLmRpc2FibGVkLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgY29uc3Qgd2FzRGlzYWJsZWQgPSBfbmFtZXMuZGlzYWJsZWQuaGFzKG5hbWUpO1xuICAgICAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9ICEhZGlzYWJsZWQ7XG4gICAgICAgICAgICBjb25zdCBkaXNhYmxlZFN0YXRlQ2hhbmdlZCA9IHdhc0Rpc2FibGVkICE9PSBpc0Rpc2FibGVkO1xuICAgICAgICAgICAgZGlzYWJsZWQgPyBfbmFtZXMuZGlzYWJsZWQuYWRkKG5hbWUpIDogX25hbWVzLmRpc2FibGVkLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgIGRpc2FibGVkU3RhdGVDaGFuZ2VkICYmIF9zdGF0ZS5tb3VudCAmJiAhX3N0YXRlLmFjdGlvbiAmJiBfc2V0VmFsaWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSAobmFtZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGxldCBmaWVsZCA9IGdldChfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWRJc0RlZmluZWQgPSBpc0Jvb2xlYW4ob3B0aW9ucy5kaXNhYmxlZCkgfHwgaXNCb29sZWFuKF9vcHRpb25zLmRpc2FibGVkKTtcbiAgICAgICAgc2V0KF9maWVsZHMsIG5hbWUsIHtcbiAgICAgICAgICAgIC4uLihmaWVsZCB8fCB7fSksXG4gICAgICAgICAgICBfZjoge1xuICAgICAgICAgICAgICAgIC4uLihmaWVsZCAmJiBmaWVsZC5fZiA/IGZpZWxkLl9mIDogeyByZWY6IHsgbmFtZSB9IH0pLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgbW91bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBfbmFtZXMubW91bnQuYWRkKG5hbWUpO1xuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIF9zZXREaXNhYmxlZEZpZWxkKHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXNCb29sZWFuKG9wdGlvbnMuZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZVZhbGlkQW5kVmFsdWUobmFtZSwgdHJ1ZSwgb3B0aW9ucy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLihkaXNhYmxlZElzRGVmaW5lZFxuICAgICAgICAgICAgICAgID8geyBkaXNhYmxlZDogb3B0aW9ucy5kaXNhYmxlZCB8fCBfb3B0aW9ucy5kaXNhYmxlZCB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAuLi4oX29wdGlvbnMucHJvZ3Jlc3NpdmVcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICEhb3B0aW9ucy5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgbWluOiBnZXRSdWxlVmFsdWUob3B0aW9ucy5taW4pLFxuICAgICAgICAgICAgICAgICAgICBtYXg6IGdldFJ1bGVWYWx1ZShvcHRpb25zLm1heCksXG4gICAgICAgICAgICAgICAgICAgIG1pbkxlbmd0aDogZ2V0UnVsZVZhbHVlKG9wdGlvbnMubWluTGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBnZXRSdWxlVmFsdWUob3B0aW9ucy5tYXhMZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBnZXRSdWxlVmFsdWUob3B0aW9ucy5wYXR0ZXJuKSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgb25DaGFuZ2UsXG4gICAgICAgICAgICBvbkJsdXI6IG9uQ2hhbmdlLFxuICAgICAgICAgICAgcmVmOiAocmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZikge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlcihuYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBnZXQoX2ZpZWxkcywgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkUmVmID0gaXNVbmRlZmluZWQocmVmLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZWYucXVlcnlTZWxlY3RvckFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmVmLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYScpWzBdIHx8IHJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVmXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlZjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFkaW9PckNoZWNrYm94ID0gaXNSYWRpb09yQ2hlY2tib3goZmllbGRSZWYpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZzID0gZmllbGQuX2YucmVmcyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhZGlvT3JDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZWZzLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uID09PSBmaWVsZFJlZilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZmllbGRSZWYgPT09IGZpZWxkLl9mLnJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNldChfZmllbGRzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpZWxkLl9mLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihyYWRpb09yQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVmcy5maWx0ZXIobGl2ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRSZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZ2V0KF9kZWZhdWx0VmFsdWVzLCBuYW1lKSkgPyBbe31dIDogW10pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogeyB0eXBlOiBmaWVsZFJlZi50eXBlLCBuYW1lIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7IHJlZjogZmllbGRSZWYgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsaWRBbmRWYWx1ZShuYW1lLCBmYWxzZSwgdW5kZWZpbmVkLCBmaWVsZFJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGdldChfZmllbGRzLCBuYW1lLCB7fSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5fZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuX2YubW91bnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAoX29wdGlvbnMuc2hvdWxkVW5yZWdpc3RlciB8fCBvcHRpb25zLnNob3VsZFVucmVnaXN0ZXIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhKGlzTmFtZUluRmllbGRBcnJheShfbmFtZXMuYXJyYXksIG5hbWUpICYmIF9zdGF0ZS5hY3Rpb24pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBfbmFtZXMudW5Nb3VudC5hZGQobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IF9mb2N1c0Vycm9yID0gKCkgPT4gX29wdGlvbnMuc2hvdWxkRm9jdXNFcnJvciAmJlxuICAgICAgICBpdGVyYXRlRmllbGRzQnlBY3Rpb24oX2ZpZWxkcywgX2ZvY3VzSW5wdXQsIF9uYW1lcy5tb3VudCk7XG4gICAgY29uc3QgX2Rpc2FibGVGb3JtID0gKGRpc2FibGVkKSA9PiB7XG4gICAgICAgIGlmIChpc0Jvb2xlYW4oZGlzYWJsZWQpKSB7XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7IGRpc2FibGVkIH0pO1xuICAgICAgICAgICAgaXRlcmF0ZUZpZWxkc0J5QWN0aW9uKF9maWVsZHMsIChyZWYsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBnZXQoX2ZpZWxkcywgbmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICByZWYuZGlzYWJsZWQgPSBjdXJyZW50RmllbGQuX2YuZGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnRGaWVsZC5fZi5yZWZzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkLl9mLnJlZnMuZm9yRWFjaCgoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJlZi5kaXNhYmxlZCA9IGN1cnJlbnRGaWVsZC5fZi5kaXNhYmxlZCB8fCBkaXNhYmxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSAob25WYWxpZCwgb25JbnZhbGlkKSA9PiBhc3luYyAoZSkgPT4ge1xuICAgICAgICBsZXQgb25WYWxpZEVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnBlcnNpc3QgJiZcbiAgICAgICAgICAgICAgICBlLnBlcnNpc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmllbGRWYWx1ZXMgPSBjbG9uZU9iamVjdChfZm9ybVZhbHVlcyk7XG4gICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgIGlzU3VibWl0dGluZzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChfb3B0aW9ucy5yZXNvbHZlcikge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvcnMsIHZhbHVlcyB9ID0gYXdhaXQgX3J1blNjaGVtYSgpO1xuICAgICAgICAgICAgX3VwZGF0ZUlzVmFsaWRhdGluZygpO1xuICAgICAgICAgICAgX2Zvcm1TdGF0ZS5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgICAgICBmaWVsZFZhbHVlcyA9IGNsb25lT2JqZWN0KHZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBleGVjdXRlQnVpbHRJblZhbGlkYXRpb24oX2ZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9uYW1lcy5kaXNhYmxlZC5zaXplKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgX25hbWVzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQoZmllbGRWYWx1ZXMsIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCAncm9vdCcpO1xuICAgICAgICBpZiAoaXNFbXB0eU9iamVjdChfZm9ybVN0YXRlLmVycm9ycykpIHtcbiAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICBlcnJvcnM6IHt9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG9uVmFsaWQoZmllbGRWYWx1ZXMsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgb25WYWxpZEVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAob25JbnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgb25JbnZhbGlkKHsgLi4uX2Zvcm1TdGF0ZS5lcnJvcnMgfSwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfZm9jdXNFcnJvcigpO1xuICAgICAgICAgICAgc2V0VGltZW91dChfZm9jdXNFcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgaXNTdWJtaXR0ZWQ6IHRydWUsXG4gICAgICAgICAgICBpc1N1Ym1pdHRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNTdWJtaXRTdWNjZXNzZnVsOiBpc0VtcHR5T2JqZWN0KF9mb3JtU3RhdGUuZXJyb3JzKSAmJiAhb25WYWxpZEVycm9yLFxuICAgICAgICAgICAgc3VibWl0Q291bnQ6IF9mb3JtU3RhdGUuc3VibWl0Q291bnQgKyAxLFxuICAgICAgICAgICAgZXJyb3JzOiBfZm9ybVN0YXRlLmVycm9ycyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvblZhbGlkRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG9uVmFsaWRFcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVzZXRGaWVsZCA9IChuYW1lLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgaWYgKGdldChfZmllbGRzLCBuYW1lKSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKG9wdGlvbnMuZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKG5hbWUsIGNsb25lT2JqZWN0KGdldChfZGVmYXVsdFZhbHVlcywgbmFtZSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKG5hbWUsIG9wdGlvbnMuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICBzZXQoX2RlZmF1bHRWYWx1ZXMsIG5hbWUsIGNsb25lT2JqZWN0KG9wdGlvbnMuZGVmYXVsdFZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMua2VlcFRvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICB1bnNldChfZm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMsIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmtlZXBEaXJ0eSkge1xuICAgICAgICAgICAgICAgIHVuc2V0KF9mb3JtU3RhdGUuZGlydHlGaWVsZHMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIF9mb3JtU3RhdGUuaXNEaXJ0eSA9IG9wdGlvbnMuZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgID8gX2dldERpcnR5KG5hbWUsIGNsb25lT2JqZWN0KGdldChfZGVmYXVsdFZhbHVlcywgbmFtZSkpKVxuICAgICAgICAgICAgICAgICAgICA6IF9nZXREaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmtlZXBFcnJvcikge1xuICAgICAgICAgICAgICAgIHVuc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBfcHJveHlGb3JtU3RhdGUuaXNWYWxpZCAmJiBfc2V0VmFsaWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHsgLi4uX2Zvcm1TdGF0ZSB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgX3Jlc2V0ID0gKGZvcm1WYWx1ZXMsIGtlZXBTdGF0ZU9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWVzID0gZm9ybVZhbHVlcyA/IGNsb25lT2JqZWN0KGZvcm1WYWx1ZXMpIDogX2RlZmF1bHRWYWx1ZXM7XG4gICAgICAgIGNvbnN0IGNsb25lVXBkYXRlZFZhbHVlcyA9IGNsb25lT2JqZWN0KHVwZGF0ZWRWYWx1ZXMpO1xuICAgICAgICBjb25zdCBpc0VtcHR5UmVzZXRWYWx1ZXMgPSBpc0VtcHR5T2JqZWN0KGZvcm1WYWx1ZXMpO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBpc0VtcHR5UmVzZXRWYWx1ZXMgPyBfZGVmYXVsdFZhbHVlcyA6IGNsb25lVXBkYXRlZFZhbHVlcztcbiAgICAgICAgaWYgKCFrZWVwU3RhdGVPcHRpb25zLmtlZXBEZWZhdWx0VmFsdWVzKSB7XG4gICAgICAgICAgICBfZGVmYXVsdFZhbHVlcyA9IHVwZGF0ZWRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFrZWVwU3RhdGVPcHRpb25zLmtlZXBWYWx1ZXMpIHtcbiAgICAgICAgICAgIGlmIChrZWVwU3RhdGVPcHRpb25zLmtlZXBEaXJ0eVZhbHVlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkc1RvQ2hlY2sgPSBuZXcgU2V0KFtcbiAgICAgICAgICAgICAgICAgICAgLi4uX25hbWVzLm1vdW50LFxuICAgICAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhnZXREaXJ0eUZpZWxkcyhfZGVmYXVsdFZhbHVlcywgX2Zvcm1WYWx1ZXMpKSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkTmFtZSBvZiBBcnJheS5mcm9tKGZpZWxkc1RvQ2hlY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRGlydHkgPSBnZXQoX2Zvcm1TdGF0ZS5kaXJ0eUZpZWxkcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IGdldChfZm9ybVZhbHVlcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBnZXQodmFsdWVzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEaXJ0eSAmJiAhaXNVbmRlZmluZWQoZXhpc3RpbmdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCh2YWx1ZXMsIGZpZWxkTmFtZSwgZXhpc3RpbmdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzRGlydHkgJiYgIWlzVW5kZWZpbmVkKG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoZmllbGROYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNXZWIgJiYgaXNVbmRlZmluZWQoZm9ybVZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIF9uYW1lcy5tb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoX2ZpZWxkcywgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQuX2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFJlZmVyZW5jZSA9IEFycmF5LmlzQXJyYXkoZmllbGQuX2YucmVmcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmaWVsZC5fZi5yZWZzWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmllbGQuX2YucmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KGZpZWxkUmVmZXJlbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtID0gZmllbGRSZWZlcmVuY2UuY2xvc2VzdCgnZm9ybScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGtlZXBTdGF0ZU9wdGlvbnMua2VlcEZpZWxkc1JlZikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkTmFtZSBvZiBfbmFtZXMubW91bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGZpZWxkTmFtZSwgZ2V0KHZhbHVlcywgZmllbGROYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9maWVsZHMgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfZm9ybVZhbHVlcyA9IF9vcHRpb25zLnNob3VsZFVucmVnaXN0ZXJcbiAgICAgICAgICAgICAgICA/IGtlZXBTdGF0ZU9wdGlvbnMua2VlcERlZmF1bHRWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgPyBjbG9uZU9iamVjdChfZGVmYXVsdFZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgICAgICAgIDogY2xvbmVPYmplY3QodmFsdWVzKTtcbiAgICAgICAgICAgIF9zdWJqZWN0cy5hcnJheS5uZXh0KHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHsgLi4udmFsdWVzIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHsgLi4udmFsdWVzIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBfbmFtZXMgPSB7XG4gICAgICAgICAgICBtb3VudDoga2VlcFN0YXRlT3B0aW9ucy5rZWVwRGlydHlWYWx1ZXMgPyBfbmFtZXMubW91bnQgOiBuZXcgU2V0KCksXG4gICAgICAgICAgICB1bk1vdW50OiBuZXcgU2V0KCksXG4gICAgICAgICAgICBhcnJheTogbmV3IFNldCgpLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIHdhdGNoOiBuZXcgU2V0KCksXG4gICAgICAgICAgICB3YXRjaEFsbDogZmFsc2UsXG4gICAgICAgICAgICBmb2N1czogJycsXG4gICAgICAgIH07XG4gICAgICAgIF9zdGF0ZS5tb3VudCA9XG4gICAgICAgICAgICAhX3Byb3h5Rm9ybVN0YXRlLmlzVmFsaWQgfHxcbiAgICAgICAgICAgICAgICAhIWtlZXBTdGF0ZU9wdGlvbnMua2VlcElzVmFsaWQgfHxcbiAgICAgICAgICAgICAgICAhIWtlZXBTdGF0ZU9wdGlvbnMua2VlcERpcnR5VmFsdWVzIHx8XG4gICAgICAgICAgICAgICAgKCFfb3B0aW9ucy5zaG91bGRVbnJlZ2lzdGVyICYmICFpc0VtcHR5T2JqZWN0KHZhbHVlcykpO1xuICAgICAgICBfc3RhdGUud2F0Y2ggPSAhIV9vcHRpb25zLnNob3VsZFVucmVnaXN0ZXI7XG4gICAgICAgIF9zdGF0ZS5rZWVwSXNWYWxpZCA9ICEha2VlcFN0YXRlT3B0aW9ucy5rZWVwSXNWYWxpZDtcbiAgICAgICAgX3N0YXRlLmFjdGlvbiA9IGZhbHNlO1xuICAgICAgICAvLyBDbGVhciBlcnJvcnMgc3luY2hyb25vdXNseSB0byBwcmV2ZW50IHZhbGlkYXRpb24gZXJyb3JzIG9uIHN1YnNlcXVlbnQgc3VibWlzc2lvbnNcbiAgICAgICAgLy8gVGhpcyBmaXhlcyB0aGUgaXNzdWUgd2hlcmUgZm9ybS5yZXNldCgpIGNhdXNlcyB2YWxpZGF0aW9uIGVycm9ycyBvbiBzdWJzZXF1ZW50XG4gICAgICAgIC8vIHN1Ym1pc3Npb25zIGluIE5leHQuanMgMTYgd2l0aCBTZXJ2ZXIgQWN0aW9uc1xuICAgICAgICBpZiAoIWtlZXBTdGF0ZU9wdGlvbnMua2VlcEVycm9ycykge1xuICAgICAgICAgICAgX2Zvcm1TdGF0ZS5lcnJvcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICBzdWJtaXRDb3VudDoga2VlcFN0YXRlT3B0aW9ucy5rZWVwU3VibWl0Q291bnRcbiAgICAgICAgICAgICAgICA/IF9mb3JtU3RhdGUuc3VibWl0Q291bnRcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICBpc0RpcnR5OiBpc0VtcHR5UmVzZXRWYWx1ZXNcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiBrZWVwU3RhdGVPcHRpb25zLmtlZXBEaXJ0eVxuICAgICAgICAgICAgICAgICAgICA/IF9mb3JtU3RhdGUuaXNEaXJ0eVxuICAgICAgICAgICAgICAgICAgICA6ICEhKGtlZXBTdGF0ZU9wdGlvbnMua2VlcERlZmF1bHRWYWx1ZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFkZWVwRXF1YWwoZm9ybVZhbHVlcywgX2RlZmF1bHRWYWx1ZXMpKSxcbiAgICAgICAgICAgIGlzU3VibWl0dGVkOiBrZWVwU3RhdGVPcHRpb25zLmtlZXBJc1N1Ym1pdHRlZFxuICAgICAgICAgICAgICAgID8gX2Zvcm1TdGF0ZS5pc1N1Ym1pdHRlZFxuICAgICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBkaXJ0eUZpZWxkczogaXNFbXB0eVJlc2V0VmFsdWVzXG4gICAgICAgICAgICAgICAgPyB7fVxuICAgICAgICAgICAgICAgIDoga2VlcFN0YXRlT3B0aW9ucy5rZWVwRGlydHlWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgPyBrZWVwU3RhdGVPcHRpb25zLmtlZXBEZWZhdWx0VmFsdWVzICYmIF9mb3JtVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGdldERpcnR5RmllbGRzKF9kZWZhdWx0VmFsdWVzLCBfZm9ybVZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2Zvcm1TdGF0ZS5kaXJ0eUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICA6IGtlZXBTdGF0ZU9wdGlvbnMua2VlcERlZmF1bHRWYWx1ZXMgJiYgZm9ybVZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXREaXJ0eUZpZWxkcyhfZGVmYXVsdFZhbHVlcywgZm9ybVZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIDoga2VlcFN0YXRlT3B0aW9ucy5rZWVwRGlydHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9mb3JtU3RhdGUuZGlydHlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgdG91Y2hlZEZpZWxkczoga2VlcFN0YXRlT3B0aW9ucy5rZWVwVG91Y2hlZFxuICAgICAgICAgICAgICAgID8gX2Zvcm1TdGF0ZS50b3VjaGVkRmllbGRzXG4gICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgIGVycm9yczoga2VlcFN0YXRlT3B0aW9ucy5rZWVwRXJyb3JzID8gX2Zvcm1TdGF0ZS5lcnJvcnMgOiB7fSxcbiAgICAgICAgICAgIGlzU3VibWl0U3VjY2Vzc2Z1bDoga2VlcFN0YXRlT3B0aW9ucy5rZWVwSXNTdWJtaXRTdWNjZXNzZnVsXG4gICAgICAgICAgICAgICAgPyBfZm9ybVN0YXRlLmlzU3VibWl0U3VjY2Vzc2Z1bFxuICAgICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBpc1N1Ym1pdHRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlczogX2RlZmF1bHRWYWx1ZXMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVzZXQgPSAoZm9ybVZhbHVlcywga2VlcFN0YXRlT3B0aW9ucykgPT4gX3Jlc2V0KGlzRnVuY3Rpb24oZm9ybVZhbHVlcylcbiAgICAgICAgPyBmb3JtVmFsdWVzKF9mb3JtVmFsdWVzKVxuICAgICAgICA6IGZvcm1WYWx1ZXMsIHsgLi4uX29wdGlvbnMucmVzZXRPcHRpb25zLCAuLi5rZWVwU3RhdGVPcHRpb25zIH0pO1xuICAgIGNvbnN0IHNldEZvY3VzID0gKG5hbWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGdldChfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgZmllbGRSZWZlcmVuY2UgPSBmaWVsZCAmJiBmaWVsZC5fZjtcbiAgICAgICAgaWYgKGZpZWxkUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFJlZiA9IGZpZWxkUmVmZXJlbmNlLnJlZnNcbiAgICAgICAgICAgICAgICA/IGZpZWxkUmVmZXJlbmNlLnJlZnNbMF1cbiAgICAgICAgICAgICAgICA6IGZpZWxkUmVmZXJlbmNlLnJlZjtcbiAgICAgICAgICAgIGlmIChmaWVsZFJlZi5mb2N1cykge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSBmb2N1cyBoYXBwZW5zIGFmdGVyIGFueSBwZW5kaW5nIHN0YXRlIHVwZGF0ZXNcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzZXRGb2N1cyBkb2Vzbid0IHdvcmsgaW1tZWRpYXRlbHkgYWZ0ZXIgc2V0RXJyb3JcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRSZWYuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zaG91bGRTZWxlY3QgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24oZmllbGRSZWYuc2VsZWN0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRSZWYuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IF9zZXRGb3JtU3RhdGUgPSAodXBkYXRlZEZvcm1TdGF0ZSkgPT4ge1xuICAgICAgICBfZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgLi4uX2Zvcm1TdGF0ZSxcbiAgICAgICAgICAgIC4uLnVwZGF0ZWRGb3JtU3RhdGUsXG4gICAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBfcmVzZXREZWZhdWx0VmFsdWVzID0gKCkgPT4gaXNGdW5jdGlvbihfb3B0aW9ucy5kZWZhdWx0VmFsdWVzKSAmJlxuICAgICAgICBfb3B0aW9ucy5kZWZhdWx0VmFsdWVzKCkudGhlbigodmFsdWVzKSA9PiB7XG4gICAgICAgICAgICByZXNldCh2YWx1ZXMsIF9vcHRpb25zLnJlc2V0T3B0aW9ucyk7XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICBjb25zdCBtZXRob2RzID0ge1xuICAgICAgICBjb250cm9sOiB7XG4gICAgICAgICAgICByZWdpc3RlcixcbiAgICAgICAgICAgIHVucmVnaXN0ZXIsXG4gICAgICAgICAgICBnZXRGaWVsZFN0YXRlLFxuICAgICAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICAgICAgc2V0RXJyb3IsXG4gICAgICAgICAgICBfc3Vic2NyaWJlLFxuICAgICAgICAgICAgX3J1blNjaGVtYSxcbiAgICAgICAgICAgIF91cGRhdGVJc1ZhbGlkYXRpbmcsXG4gICAgICAgICAgICBfZm9jdXNFcnJvcixcbiAgICAgICAgICAgIF9nZXRXYXRjaCxcbiAgICAgICAgICAgIF9nZXREaXJ0eSxcbiAgICAgICAgICAgIF9zZXRWYWxpZCxcbiAgICAgICAgICAgIF9zZXRGaWVsZEFycmF5LFxuICAgICAgICAgICAgX3NldERpc2FibGVkRmllbGQsXG4gICAgICAgICAgICBfc2V0RXJyb3JzLFxuICAgICAgICAgICAgX2dldEZpZWxkQXJyYXksXG4gICAgICAgICAgICBfcmVzZXQsXG4gICAgICAgICAgICBfcmVzZXREZWZhdWx0VmFsdWVzLFxuICAgICAgICAgICAgX3JlbW92ZVVubW91bnRlZCxcbiAgICAgICAgICAgIF9kaXNhYmxlRm9ybSxcbiAgICAgICAgICAgIF9zdWJqZWN0cyxcbiAgICAgICAgICAgIF9wcm94eUZvcm1TdGF0ZSxcbiAgICAgICAgICAgIGdldCBfZmllbGRzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZmllbGRzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBfZm9ybVZhbHVlcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2Zvcm1WYWx1ZXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IF9zdGF0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3N0YXRlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBfc3RhdGUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfc3RhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgX2RlZmF1bHRWYWx1ZXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9kZWZhdWx0VmFsdWVzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBfbmFtZXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9uYW1lcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgX25hbWVzKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX25hbWVzID0gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IF9mb3JtU3RhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mb3JtU3RhdGU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IF9vcHRpb25zKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfb3B0aW9ucztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgX29wdGlvbnModmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uX29wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIHRyaWdnZXIsXG4gICAgICAgIHJlZ2lzdGVyLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIHdhdGNoLFxuICAgICAgICBzZXRWYWx1ZSxcbiAgICAgICAgZ2V0VmFsdWVzLFxuICAgICAgICByZXNldCxcbiAgICAgICAgcmVzZXRGaWVsZCxcbiAgICAgICAgY2xlYXJFcnJvcnMsXG4gICAgICAgIHVucmVnaXN0ZXIsXG4gICAgICAgIHNldEVycm9yLFxuICAgICAgICBzZXRGb2N1cyxcbiAgICAgICAgZ2V0RmllbGRTdGF0ZSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1ldGhvZHMsXG4gICAgICAgIGZvcm1Db250cm9sOiBtZXRob2RzLFxuICAgIH07XG59XG5cbnZhciBnZW5lcmF0ZUlkID0gKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCkge1xuICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICB9XG4gICAgY29uc3QgZCA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ3VuZGVmaW5lZCcgPyBEYXRlLm5vdygpIDogcGVyZm9ybWFuY2Uubm93KCkgKiAxMDAwO1xuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIChjKSA9PiB7XG4gICAgICAgIGNvbnN0IHIgPSAoKE1hdGgucmFuZG9tKCkgKiAxNiArIGQpICUgMTYpIHwgMDtcbiAgICAgICAgcmV0dXJuIChjID09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDgpLnRvU3RyaW5nKDE2KTtcbiAgICB9KTtcbn07XG5cbnZhciBnZXRGb2N1c0ZpZWxkTmFtZSA9IChuYW1lLCBpbmRleCwgb3B0aW9ucyA9IHt9KSA9PiBvcHRpb25zLnNob3VsZEZvY3VzIHx8IGlzVW5kZWZpbmVkKG9wdGlvbnMuc2hvdWxkRm9jdXMpXG4gICAgPyBvcHRpb25zLmZvY3VzTmFtZSB8fFxuICAgICAgICBgJHtuYW1lfS4ke2lzVW5kZWZpbmVkKG9wdGlvbnMuZm9jdXNJbmRleCkgPyBpbmRleCA6IG9wdGlvbnMuZm9jdXNJbmRleH0uYFxuICAgIDogJyc7XG5cbnZhciBhcHBlbmRBdCA9IChkYXRhLCB2YWx1ZSkgPT4gW1xuICAgIC4uLmRhdGEsXG4gICAgLi4uY29udmVydFRvQXJyYXlQYXlsb2FkKHZhbHVlKSxcbl07XG5cbnZhciBmaWxsRW1wdHlBcnJheSA9ICh2YWx1ZSkgPT4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKCkgPT4gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaW5zZXJ0KGRhdGEsIGluZGV4LCB2YWx1ZSkge1xuICAgIHJldHVybiBbXG4gICAgICAgIC4uLmRhdGEuc2xpY2UoMCwgaW5kZXgpLFxuICAgICAgICAuLi5jb252ZXJ0VG9BcnJheVBheWxvYWQodmFsdWUpLFxuICAgICAgICAuLi5kYXRhLnNsaWNlKGluZGV4KSxcbiAgICBdO1xufVxuXG52YXIgbW92ZUFycmF5QXQgPSAoZGF0YSwgZnJvbSwgdG8pID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoaXNVbmRlZmluZWQoZGF0YVt0b10pKSB7XG4gICAgICAgIGRhdGFbdG9dID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBkYXRhLnNwbGljZSh0bywgMCwgZGF0YS5zcGxpY2UoZnJvbSwgMSlbMF0pO1xuICAgIHJldHVybiBkYXRhO1xufTtcblxudmFyIHByZXBlbmRBdCA9IChkYXRhLCB2YWx1ZSkgPT4gW1xuICAgIC4uLmNvbnZlcnRUb0FycmF5UGF5bG9hZCh2YWx1ZSksXG4gICAgLi4uY29udmVydFRvQXJyYXlQYXlsb2FkKGRhdGEpLFxuXTtcblxuZnVuY3Rpb24gcmVtb3ZlQXRJbmRleGVzKGRhdGEsIGluZGV4ZXMpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3QgdGVtcCA9IFsuLi5kYXRhXTtcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgdGVtcC5zcGxpY2UoaW5kZXggLSBpLCAxKTtcbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGFjdCh0ZW1wKS5sZW5ndGggPyB0ZW1wIDogW107XG59XG52YXIgcmVtb3ZlQXJyYXlBdCA9IChkYXRhLCBpbmRleCkgPT4gaXNVbmRlZmluZWQoaW5kZXgpXG4gICAgPyBbXVxuICAgIDogcmVtb3ZlQXRJbmRleGVzKGRhdGEsIGNvbnZlcnRUb0FycmF5UGF5bG9hZChpbmRleCkuc29ydCgoYSwgYikgPT4gYSAtIGIpKTtcblxudmFyIHN3YXBBcnJheUF0ID0gKGRhdGEsIGluZGV4QSwgaW5kZXhCKSA9PiB7XG4gICAgW2RhdGFbaW5kZXhBXSwgZGF0YVtpbmRleEJdXSA9IFtkYXRhW2luZGV4Ql0sIGRhdGFbaW5kZXhBXV07XG59O1xuXG52YXIgdXBkYXRlQXQgPSAoZmllbGRWYWx1ZXMsIGluZGV4LCB2YWx1ZSkgPT4ge1xuICAgIGZpZWxkVmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgIHJldHVybiBmaWVsZFZhbHVlcztcbn07XG5cbi8qKlxuICogQSBjdXN0b20gaG9vayB0aGF0IGV4cG9zZXMgY29udmVuaWVudCBtZXRob2RzIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyB3aXRoIGEgbGlzdCBvZiBkeW5hbWljIGlucHV0cyB0aGF0IG5lZWQgdG8gYmUgYXBwZW5kZWQsIHVwZGF0ZWQsIHJlbW92ZWQgZXRjLiDigKIgW0RlbW9dKGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy9yZWFjdC1ob29rLWZvcm0tdXNlZmllbGRhcnJheS1zc3Vnbikg4oCiIFtWaWRlb10oaHR0cHM6Ly95b3V0dS5iZS80TXJiZkdTRlkyQSlcbiAqXG4gKiBAcmVtYXJrc1xuICogW0FQSV0oaHR0cHM6Ly9yZWFjdC1ob29rLWZvcm0uY29tL2RvY3MvdXNlZmllbGRhcnJheSkg4oCiIFtEZW1vXShodHRwczovL2NvZGVzYW5kYm94LmlvL3MvcmVhY3QtaG9vay1mb3JtLXVzZWZpZWxkYXJyYXktc3N1Z24pXG4gKlxuICogQHBhcmFtIHByb3BzIC0gdXNlRmllbGRBcnJheSBwcm9wc1xuICpcbiAqIEByZXR1cm5zIG1ldGhvZHMgLSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB3aXRoIHRoZSBGaWVsZCBBcnJheXMgKGR5bmFtaWMgaW5wdXRzKSB7QGxpbmsgVXNlRmllbGRBcnJheVJldHVybn1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IHsgcmVnaXN0ZXIsIGNvbnRyb2wsIGhhbmRsZVN1Ym1pdCwgcmVzZXQsIHRyaWdnZXIsIHNldEVycm9yIH0gPSB1c2VGb3JtKHtcbiAqICAgICBkZWZhdWx0VmFsdWVzOiB7XG4gKiAgICAgICB0ZXN0OiBbXVxuICogICAgIH1cbiAqICAgfSk7XG4gKiAgIGNvbnN0IHsgZmllbGRzLCBhcHBlbmQgfSA9IHVzZUZpZWxkQXJyYXkoe1xuICogICAgIGNvbnRyb2wsXG4gKiAgICAgbmFtZTogXCJ0ZXN0XCJcbiAqICAgfSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXQoZGF0YSA9PiBjb25zb2xlLmxvZyhkYXRhKSl9PlxuICogICAgICAge2ZpZWxkcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoXG4gKiAgICAgICAgICA8aW5wdXQga2V5PXtpdGVtLmlkfSB7Li4ucmVnaXN0ZXIoYHRlc3QuJHtpbmRleH0uZmlyc3ROYW1lYCl9ICAvPlxuICogICAgICAgKSl9XG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBhcHBlbmQoeyBmaXJzdE5hbWU6IFwiYmlsbFwiIH0pfT5cbiAqICAgICAgICAgYXBwZW5kXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgLz5cbiAqICAgICA8L2Zvcm0+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gdXNlRmllbGRBcnJheShwcm9wcykge1xuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2xDb250ZXh0KCk7XG4gICAgY29uc3QgeyBjb250cm9sID0gZm9ybUNvbnRyb2wsIG5hbWUsIGtleU5hbWUgPSAnaWQnLCBzaG91bGRVbnJlZ2lzdGVyLCBydWxlcywgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtmaWVsZHMsIHNldEZpZWxkc10gPSBSZWFjdC51c2VTdGF0ZShjb250cm9sLl9nZXRGaWVsZEFycmF5KG5hbWUpKTtcbiAgICBjb25zdCBpZHMgPSBSZWFjdC51c2VSZWYoY29udHJvbC5fZ2V0RmllbGRBcnJheShuYW1lKS5tYXAoZ2VuZXJhdGVJZCkpO1xuICAgIGNvbnN0IF9hY3Rpb25lZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgY29udHJvbC5fbmFtZXMuYXJyYXkuYWRkKG5hbWUpO1xuICAgIFJlYWN0LnVzZU1lbW8oKCkgPT4gcnVsZXMgJiZcbiAgICAgICAgZmllbGRzLmxlbmd0aCA+PSAwICYmXG4gICAgICAgIGNvbnRyb2wucmVnaXN0ZXIobmFtZSwgcnVsZXMpLCBbY29udHJvbCwgbmFtZSwgZmllbGRzLmxlbmd0aCwgcnVsZXNdKTtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IGNvbnRyb2wuX3N1YmplY3RzLmFycmF5LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh7IHZhbHVlcywgbmFtZTogZmllbGRBcnJheU5hbWUsIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZEFycmF5TmFtZSA9PT0gbmFtZSB8fCAhZmllbGRBcnJheU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldCh2YWx1ZXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRGaWVsZHMoZmllbGRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZHMuY3VycmVudCA9IGZpZWxkVmFsdWVzLm1hcChnZW5lcmF0ZUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSkudW5zdWJzY3JpYmUsIFtjb250cm9sLCBuYW1lXSk7XG4gICAgY29uc3QgdXBkYXRlVmFsdWVzID0gUmVhY3QudXNlQ2FsbGJhY2soKHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzKSA9PiB7XG4gICAgICAgIF9hY3Rpb25lZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgY29udHJvbC5fc2V0RmllbGRBcnJheShuYW1lLCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgfSwgW2NvbnRyb2wsIG5hbWVdKTtcbiAgICBjb25zdCBhcHBlbmQgPSAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgYXBwZW5kVmFsdWUgPSBjb252ZXJ0VG9BcnJheVBheWxvYWQoY2xvbmVPYmplY3QodmFsdWUpKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMgPSBhcHBlbmRBdChjb250cm9sLl9nZXRGaWVsZEFycmF5KG5hbWUpLCBhcHBlbmRWYWx1ZSk7XG4gICAgICAgIGNvbnRyb2wuX25hbWVzLmZvY3VzID0gZ2V0Rm9jdXNGaWVsZE5hbWUobmFtZSwgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMubGVuZ3RoIC0gMSwgb3B0aW9ucyk7XG4gICAgICAgIGlkcy5jdXJyZW50ID0gYXBwZW5kQXQoaWRzLmN1cnJlbnQsIGFwcGVuZFZhbHVlLm1hcChnZW5lcmF0ZUlkKSk7XG4gICAgICAgIHVwZGF0ZVZhbHVlcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIHNldEZpZWxkcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIGNvbnRyb2wuX3NldEZpZWxkQXJyYXkobmFtZSwgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMsIGFwcGVuZEF0LCB7XG4gICAgICAgICAgICBhcmdBOiBmaWxsRW1wdHlBcnJheSh2YWx1ZSksXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcHJlcGVuZCA9ICh2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCBwcmVwZW5kVmFsdWUgPSBjb252ZXJ0VG9BcnJheVBheWxvYWQoY2xvbmVPYmplY3QodmFsdWUpKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMgPSBwcmVwZW5kQXQoY29udHJvbC5fZ2V0RmllbGRBcnJheShuYW1lKSwgcHJlcGVuZFZhbHVlKTtcbiAgICAgICAgY29udHJvbC5fbmFtZXMuZm9jdXMgPSBnZXRGb2N1c0ZpZWxkTmFtZShuYW1lLCAwLCBvcHRpb25zKTtcbiAgICAgICAgaWRzLmN1cnJlbnQgPSBwcmVwZW5kQXQoaWRzLmN1cnJlbnQsIHByZXBlbmRWYWx1ZS5tYXAoZ2VuZXJhdGVJZCkpO1xuICAgICAgICB1cGRhdGVWYWx1ZXModXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMpO1xuICAgICAgICBzZXRGaWVsZHModXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMpO1xuICAgICAgICBjb250cm9sLl9zZXRGaWVsZEFycmF5KG5hbWUsIHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzLCBwcmVwZW5kQXQsIHtcbiAgICAgICAgICAgIGFyZ0E6IGZpbGxFbXB0eUFycmF5KHZhbHVlKSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmUgPSAoaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMgPSByZW1vdmVBcnJheUF0KGNvbnRyb2wuX2dldEZpZWxkQXJyYXkobmFtZSksIGluZGV4KTtcbiAgICAgICAgaWRzLmN1cnJlbnQgPSByZW1vdmVBcnJheUF0KGlkcy5jdXJyZW50LCBpbmRleCk7XG4gICAgICAgIHVwZGF0ZVZhbHVlcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIHNldEZpZWxkcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgICFBcnJheS5pc0FycmF5KGdldChjb250cm9sLl9maWVsZHMsIG5hbWUpKSAmJlxuICAgICAgICAgICAgc2V0KGNvbnRyb2wuX2ZpZWxkcywgbmFtZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgY29udHJvbC5fc2V0RmllbGRBcnJheShuYW1lLCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcywgcmVtb3ZlQXJyYXlBdCwge1xuICAgICAgICAgICAgYXJnQTogaW5kZXgsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0JDEgPSAoaW5kZXgsIHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc2VydFZhbHVlID0gY29udmVydFRvQXJyYXlQYXlsb2FkKGNsb25lT2JqZWN0KHZhbHVlKSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzID0gaW5zZXJ0KGNvbnRyb2wuX2dldEZpZWxkQXJyYXkobmFtZSksIGluZGV4LCBpbnNlcnRWYWx1ZSk7XG4gICAgICAgIGNvbnRyb2wuX25hbWVzLmZvY3VzID0gZ2V0Rm9jdXNGaWVsZE5hbWUobmFtZSwgaW5kZXgsIG9wdGlvbnMpO1xuICAgICAgICBpZHMuY3VycmVudCA9IGluc2VydChpZHMuY3VycmVudCwgaW5kZXgsIGluc2VydFZhbHVlLm1hcChnZW5lcmF0ZUlkKSk7XG4gICAgICAgIHVwZGF0ZVZhbHVlcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIHNldEZpZWxkcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIGNvbnRyb2wuX3NldEZpZWxkQXJyYXkobmFtZSwgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMsIGluc2VydCwge1xuICAgICAgICAgICAgYXJnQTogaW5kZXgsXG4gICAgICAgICAgICBhcmdCOiBmaWxsRW1wdHlBcnJheSh2YWx1ZSksXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc3dhcCA9IChpbmRleEEsIGluZGV4QikgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcyA9IGNvbnRyb2wuX2dldEZpZWxkQXJyYXkobmFtZSk7XG4gICAgICAgIHN3YXBBcnJheUF0KHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzLCBpbmRleEEsIGluZGV4Qik7XG4gICAgICAgIHN3YXBBcnJheUF0KGlkcy5jdXJyZW50LCBpbmRleEEsIGluZGV4Qik7XG4gICAgICAgIHVwZGF0ZVZhbHVlcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIHNldEZpZWxkcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIGNvbnRyb2wuX3NldEZpZWxkQXJyYXkobmFtZSwgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMsIHN3YXBBcnJheUF0LCB7XG4gICAgICAgICAgICBhcmdBOiBpbmRleEEsXG4gICAgICAgICAgICBhcmdCOiBpbmRleEIsXG4gICAgICAgIH0sIGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IG1vdmUgPSAoZnJvbSwgdG8pID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMgPSBjb250cm9sLl9nZXRGaWVsZEFycmF5KG5hbWUpO1xuICAgICAgICBtb3ZlQXJyYXlBdCh1cGRhdGVkRmllbGRBcnJheVZhbHVlcywgZnJvbSwgdG8pO1xuICAgICAgICBtb3ZlQXJyYXlBdChpZHMuY3VycmVudCwgZnJvbSwgdG8pO1xuICAgICAgICB1cGRhdGVWYWx1ZXModXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMpO1xuICAgICAgICBzZXRGaWVsZHModXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMpO1xuICAgICAgICBjb250cm9sLl9zZXRGaWVsZEFycmF5KG5hbWUsIHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzLCBtb3ZlQXJyYXlBdCwge1xuICAgICAgICAgICAgYXJnQTogZnJvbSxcbiAgICAgICAgICAgIGFyZ0I6IHRvLFxuICAgICAgICB9LCBmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGUgPSAoaW5kZXgsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gY2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgICBjb25zdCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcyA9IHVwZGF0ZUF0KGNvbnRyb2wuX2dldEZpZWxkQXJyYXkobmFtZSksIGluZGV4LCB1cGRhdGVWYWx1ZSk7XG4gICAgICAgIGlkcy5jdXJyZW50ID0gWy4uLnVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzXS5tYXAoKGl0ZW0sIGkpID0+ICFpdGVtIHx8IGkgPT09IGluZGV4ID8gZ2VuZXJhdGVJZCgpIDogaWRzLmN1cnJlbnRbaV0pO1xuICAgICAgICB1cGRhdGVWYWx1ZXModXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMpO1xuICAgICAgICBzZXRGaWVsZHMoWy4uLnVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzXSk7XG4gICAgICAgIGNvbnRyb2wuX3NldEZpZWxkQXJyYXkobmFtZSwgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMsIHVwZGF0ZUF0LCB7XG4gICAgICAgICAgICBhcmdBOiBpbmRleCxcbiAgICAgICAgICAgIGFyZ0I6IHVwZGF0ZVZhbHVlLFxuICAgICAgICB9LCB0cnVlLCBmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCByZXBsYWNlID0gKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzID0gY29udmVydFRvQXJyYXlQYXlsb2FkKGNsb25lT2JqZWN0KHZhbHVlKSk7XG4gICAgICAgIGlkcy5jdXJyZW50ID0gdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMubWFwKGdlbmVyYXRlSWQpO1xuICAgICAgICB1cGRhdGVWYWx1ZXMoWy4uLnVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzXSk7XG4gICAgICAgIHNldEZpZWxkcyhbLi4udXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXNdKTtcbiAgICAgICAgY29udHJvbC5fc2V0RmllbGRBcnJheShuYW1lLCBbLi4udXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXNdLCAoZGF0YSkgPT4gZGF0YSwge30sIHRydWUsIGZhbHNlKTtcbiAgICB9O1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnRyb2wuX3N0YXRlLmFjdGlvbiA9IGZhbHNlO1xuICAgICAgICBpc1dhdGNoZWQobmFtZSwgY29udHJvbC5fbmFtZXMpICYmXG4gICAgICAgICAgICBjb250cm9sLl9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sLl9mb3JtU3RhdGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKF9hY3Rpb25lZC5jdXJyZW50ICYmXG4gICAgICAgICAgICAoIWdldFZhbGlkYXRpb25Nb2Rlcyhjb250cm9sLl9vcHRpb25zLm1vZGUpLmlzT25TdWJtaXQgfHxcbiAgICAgICAgICAgICAgICBjb250cm9sLl9mb3JtU3RhdGUuaXNTdWJtaXR0ZWQpICYmXG4gICAgICAgICAgICAhZ2V0VmFsaWRhdGlvbk1vZGVzKGNvbnRyb2wuX29wdGlvbnMucmVWYWxpZGF0ZU1vZGUpLmlzT25TdWJtaXQpIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sLl9vcHRpb25zLnJlc29sdmVyKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5fcnVuU2NoZW1hKFtuYW1lXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuX3VwZGF0ZUlzVmFsaWRhdGluZyhbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGdldChyZXN1bHQuZXJyb3JzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdFcnJvciA9IGdldChjb250cm9sLl9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKCFlcnJvciAmJiBleGlzdGluZ0Vycm9yLnR5cGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleGlzdGluZ0Vycm9yLnR5cGUgIT09IGVycm9yLnR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nRXJyb3IubWVzc2FnZSAhPT0gZXJyb3IubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGVycm9yICYmIGVycm9yLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXQoY29udHJvbC5fZm9ybVN0YXRlLmVycm9ycywgbmFtZSwgZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bnNldChjb250cm9sLl9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yczogY29udHJvbC5fZm9ybVN0YXRlLmVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldChjb250cm9sLl9maWVsZHMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5fZiAmJlxuICAgICAgICAgICAgICAgICAgICAhKGdldFZhbGlkYXRpb25Nb2Rlcyhjb250cm9sLl9vcHRpb25zLnJlVmFsaWRhdGVNb2RlKS5pc09uU3VibWl0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRWYWxpZGF0aW9uTW9kZXMoY29udHJvbC5fb3B0aW9ucy5tb2RlKS5pc09uU3VibWl0KSkge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUZpZWxkKGZpZWxkLCBjb250cm9sLl9uYW1lcy5kaXNhYmxlZCwgY29udHJvbC5fZm9ybVZhbHVlcywgY29udHJvbC5fb3B0aW9ucy5jcml0ZXJpYU1vZGUgPT09IFZBTElEQVRJT05fTU9ERS5hbGwsIGNvbnRyb2wuX29wdGlvbnMuc2hvdWxkVXNlTmF0aXZlVmFsaWRhdGlvbiwgdHJ1ZSkudGhlbigoZXJyb3IpID0+ICFpc0VtcHR5T2JqZWN0KGVycm9yKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5fc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiB1cGRhdGVGaWVsZEFycmF5Um9vdEVycm9yKGNvbnRyb2wuX2Zvcm1TdGF0ZS5lcnJvcnMsIGVycm9yLCBuYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbC5fc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWVzOiBjbG9uZU9iamVjdChjb250cm9sLl9mb3JtVmFsdWVzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRyb2wuX25hbWVzLmZvY3VzICYmXG4gICAgICAgICAgICBpdGVyYXRlRmllbGRzQnlBY3Rpb24oY29udHJvbC5fZmllbGRzLCAocmVmLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5fbmFtZXMuZm9jdXMgJiZcbiAgICAgICAgICAgICAgICAgICAga2V5LnN0YXJ0c1dpdGgoY29udHJvbC5fbmFtZXMuZm9jdXMpICYmXG4gICAgICAgICAgICAgICAgICAgIHJlZi5mb2N1cykge1xuICAgICAgICAgICAgICAgICAgICByZWYuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjb250cm9sLl9uYW1lcy5mb2N1cyA9ICcnO1xuICAgICAgICBjb250cm9sLl9zZXRWYWxpZCgpO1xuICAgICAgICBfYWN0aW9uZWQuY3VycmVudCA9IGZhbHNlO1xuICAgIH0sIFtmaWVsZHMsIG5hbWUsIGNvbnRyb2xdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAhZ2V0KGNvbnRyb2wuX2Zvcm1WYWx1ZXMsIG5hbWUpICYmIGNvbnRyb2wuX3NldEZpZWxkQXJyYXkobmFtZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVNb3VudGVkID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoY29udHJvbC5fZmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQuX2YpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuX2YubW91bnQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29udHJvbC5fb3B0aW9ucy5zaG91bGRVbnJlZ2lzdGVyIHx8IHNob3VsZFVucmVnaXN0ZXJcbiAgICAgICAgICAgICAgICA/IGNvbnRyb2wudW5yZWdpc3RlcihuYW1lKVxuICAgICAgICAgICAgICAgIDogdXBkYXRlTW91bnRlZChuYW1lLCBmYWxzZSk7XG4gICAgICAgIH07XG4gICAgfSwgW25hbWUsIGNvbnRyb2wsIGtleU5hbWUsIHNob3VsZFVucmVnaXN0ZXJdKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzd2FwOiBSZWFjdC51c2VDYWxsYmFjayhzd2FwLCBbdXBkYXRlVmFsdWVzLCBuYW1lLCBjb250cm9sXSksXG4gICAgICAgIG1vdmU6IFJlYWN0LnVzZUNhbGxiYWNrKG1vdmUsIFt1cGRhdGVWYWx1ZXMsIG5hbWUsIGNvbnRyb2xdKSxcbiAgICAgICAgcHJlcGVuZDogUmVhY3QudXNlQ2FsbGJhY2socHJlcGVuZCwgW3VwZGF0ZVZhbHVlcywgbmFtZSwgY29udHJvbF0pLFxuICAgICAgICBhcHBlbmQ6IFJlYWN0LnVzZUNhbGxiYWNrKGFwcGVuZCwgW3VwZGF0ZVZhbHVlcywgbmFtZSwgY29udHJvbF0pLFxuICAgICAgICByZW1vdmU6IFJlYWN0LnVzZUNhbGxiYWNrKHJlbW92ZSwgW3VwZGF0ZVZhbHVlcywgbmFtZSwgY29udHJvbF0pLFxuICAgICAgICBpbnNlcnQ6IFJlYWN0LnVzZUNhbGxiYWNrKGluc2VydCQxLCBbdXBkYXRlVmFsdWVzLCBuYW1lLCBjb250cm9sXSksXG4gICAgICAgIHVwZGF0ZTogUmVhY3QudXNlQ2FsbGJhY2sodXBkYXRlLCBbdXBkYXRlVmFsdWVzLCBuYW1lLCBjb250cm9sXSksXG4gICAgICAgIHJlcGxhY2U6IFJlYWN0LnVzZUNhbGxiYWNrKHJlcGxhY2UsIFt1cGRhdGVWYWx1ZXMsIG5hbWUsIGNvbnRyb2xdKSxcbiAgICAgICAgZmllbGRzOiBSZWFjdC51c2VNZW1vKCgpID0+IGZpZWxkcy5tYXAoKGZpZWxkLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgIC4uLmZpZWxkLFxuICAgICAgICAgICAgW2tleU5hbWVdOiBpZHMuY3VycmVudFtpbmRleF0gfHwgZ2VuZXJhdGVJZCgpLFxuICAgICAgICB9KSksIFtmaWVsZHMsIGtleU5hbWVdKSxcbiAgICB9O1xufVxuXG4vKipcbiAqIEN1c3RvbSBob29rIHRvIG1hbmFnZSB0aGUgZW50aXJlIGZvcm0uXG4gKlxuICogQHJlbWFya3NcbiAqIFtBUEldKGh0dHBzOi8vcmVhY3QtaG9vay1mb3JtLmNvbS9kb2NzL3VzZWZvcm0pIOKAoiBbRGVtb10oaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL3JlYWN0LWhvb2stZm9ybS1nZXQtc3RhcnRlZC10cy01a3NtbSkg4oCiIFtWaWRlb10oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1Sa1h2NEFYWENfNClcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBmb3JtIGNvbmZpZ3VyYXRpb24gYW5kIHZhbGlkYXRpb24gcGFyYW1ldGVycy5cbiAqXG4gKiBAcmV0dXJucyBtZXRob2RzIC0gaW5kaXZpZHVhbCBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb3JtIHN0YXRlLiB7QGxpbmsgVXNlRm9ybVJldHVybn1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IHsgcmVnaXN0ZXIsIGhhbmRsZVN1Ym1pdCwgd2F0Y2gsIGZvcm1TdGF0ZTogeyBlcnJvcnMgfSB9ID0gdXNlRm9ybSgpO1xuICogICBjb25zdCBvblN1Ym1pdCA9IGRhdGEgPT4gY29uc29sZS5sb2coZGF0YSk7XG4gKlxuICogICBjb25zb2xlLmxvZyh3YXRjaChcImV4YW1wbGVcIikpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0KG9uU3VibWl0KX0+XG4gKiAgICAgICA8aW5wdXQgZGVmYXVsdFZhbHVlPVwidGVzdFwiIHsuLi5yZWdpc3RlcihcImV4YW1wbGVcIil9IC8+XG4gKiAgICAgICA8aW5wdXQgey4uLnJlZ2lzdGVyKFwiZXhhbXBsZVJlcXVpcmVkXCIsIHsgcmVxdWlyZWQ6IHRydWUgfSl9IC8+XG4gKiAgICAgICB7ZXJyb3JzLmV4YW1wbGVSZXF1aXJlZCAmJiA8c3Bhbj5UaGlzIGZpZWxkIGlzIHJlcXVpcmVkPC9zcGFuPn1cbiAqICAgICAgIDxidXR0b24+U3VibWl0PC9idXR0b24+XG4gKiAgICAgPC9mb3JtPlxuICogICApO1xuICogfVxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHVzZUZvcm0ocHJvcHMgPSB7fSkge1xuICAgIGNvbnN0IF9mb3JtQ29udHJvbCA9IFJlYWN0LnVzZVJlZih1bmRlZmluZWQpO1xuICAgIGNvbnN0IF92YWx1ZXMgPSBSZWFjdC51c2VSZWYodW5kZWZpbmVkKTtcbiAgICBjb25zdCBbZm9ybVN0YXRlLCB1cGRhdGVGb3JtU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoe1xuICAgICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZSxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0Z1bmN0aW9uKHByb3BzLmRlZmF1bHRWYWx1ZXMpLFxuICAgICAgICBpc1N1Ym1pdHRlZDogZmFsc2UsXG4gICAgICAgIGlzU3VibWl0dGluZzogZmFsc2UsXG4gICAgICAgIGlzU3VibWl0U3VjY2Vzc2Z1bDogZmFsc2UsXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBzdWJtaXRDb3VudDogMCxcbiAgICAgICAgZGlydHlGaWVsZHM6IHt9LFxuICAgICAgICB0b3VjaGVkRmllbGRzOiB7fSxcbiAgICAgICAgdmFsaWRhdGluZ0ZpZWxkczoge30sXG4gICAgICAgIGVycm9yczogcHJvcHMuZXJyb3JzIHx8IHt9LFxuICAgICAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQgfHwgZmFsc2UsXG4gICAgICAgIGlzUmVhZHk6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0VmFsdWVzOiBpc0Z1bmN0aW9uKHByb3BzLmRlZmF1bHRWYWx1ZXMpXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBwcm9wcy5kZWZhdWx0VmFsdWVzLFxuICAgIH0pO1xuICAgIGlmICghX2Zvcm1Db250cm9sLmN1cnJlbnQpIHtcbiAgICAgICAgaWYgKHByb3BzLmZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICBfZm9ybUNvbnRyb2wuY3VycmVudCA9IHtcbiAgICAgICAgICAgICAgICAuLi5wcm9wcy5mb3JtQ29udHJvbCxcbiAgICAgICAgICAgICAgICBmb3JtU3RhdGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZXMgJiYgIWlzRnVuY3Rpb24ocHJvcHMuZGVmYXVsdFZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtQ29udHJvbC5yZXNldChwcm9wcy5kZWZhdWx0VmFsdWVzLCBwcm9wcy5yZXNldE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBmb3JtQ29udHJvbCwgLi4ucmVzdCB9ID0gY3JlYXRlRm9ybUNvbnRyb2wocHJvcHMpO1xuICAgICAgICAgICAgX2Zvcm1Db250cm9sLmN1cnJlbnQgPSB7XG4gICAgICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgICAgICBmb3JtU3RhdGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbnRyb2wgPSBfZm9ybUNvbnRyb2wuY3VycmVudC5jb250cm9sO1xuICAgIGNvbnRyb2wuX29wdGlvbnMgPSBwcm9wcztcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViID0gY29udHJvbC5fc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIGZvcm1TdGF0ZTogY29udHJvbC5fcHJveHlGb3JtU3RhdGUsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdXBkYXRlRm9ybVN0YXRlKHsgLi4uY29udHJvbC5fZm9ybVN0YXRlIH0pLFxuICAgICAgICAgICAgcmVSZW5kZXJSb290OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdXBkYXRlRm9ybVN0YXRlKChkYXRhKSA9PiAoe1xuICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgIGlzUmVhZHk6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29udHJvbC5fZm9ybVN0YXRlLmlzUmVhZHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gc3ViO1xuICAgIH0sIFtjb250cm9sXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IGNvbnRyb2wuX2Rpc2FibGVGb3JtKHByb3BzLmRpc2FibGVkKSwgW2NvbnRyb2wsIHByb3BzLmRpc2FibGVkXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLm1vZGUpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuX29wdGlvbnMubW9kZSA9IHByb3BzLm1vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLnJlVmFsaWRhdGVNb2RlKSB7XG4gICAgICAgICAgICBjb250cm9sLl9vcHRpb25zLnJlVmFsaWRhdGVNb2RlID0gcHJvcHMucmVWYWxpZGF0ZU1vZGU7XG4gICAgICAgIH1cbiAgICB9LCBbY29udHJvbCwgcHJvcHMubW9kZSwgcHJvcHMucmVWYWxpZGF0ZU1vZGVdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuZXJyb3JzKSB7XG4gICAgICAgICAgICBjb250cm9sLl9zZXRFcnJvcnMocHJvcHMuZXJyb3JzKTtcbiAgICAgICAgICAgIGNvbnRyb2wuX2ZvY3VzRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH0sIFtjb250cm9sLCBwcm9wcy5lcnJvcnNdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBwcm9wcy5zaG91bGRVbnJlZ2lzdGVyICYmXG4gICAgICAgICAgICBjb250cm9sLl9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGNvbnRyb2wuX2dldFdhdGNoKCksXG4gICAgICAgICAgICB9KTtcbiAgICB9LCBbY29udHJvbCwgcHJvcHMuc2hvdWxkVW5yZWdpc3Rlcl0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChjb250cm9sLl9wcm94eUZvcm1TdGF0ZS5pc0RpcnR5KSB7XG4gICAgICAgICAgICBjb25zdCBpc0RpcnR5ID0gY29udHJvbC5fZ2V0RGlydHkoKTtcbiAgICAgICAgICAgIGlmIChpc0RpcnR5ICE9PSBmb3JtU3RhdGUuaXNEaXJ0eSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICBpc0RpcnR5LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW2NvbnRyb2wsIGZvcm1TdGF0ZS5pc0RpcnR5XSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAocHJvcHMudmFsdWVzICYmICFkZWVwRXF1YWwocHJvcHMudmFsdWVzLCBfdmFsdWVzLmN1cnJlbnQpKSB7XG4gICAgICAgICAgICBjb250cm9sLl9yZXNldChwcm9wcy52YWx1ZXMsIHtcbiAgICAgICAgICAgICAgICBrZWVwRmllbGRzUmVmOiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2wuX29wdGlvbnMucmVzZXRPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoISgoX2EgPSBjb250cm9sLl9vcHRpb25zLnJlc2V0T3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmtlZXBJc1ZhbGlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuX3NldFZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdmFsdWVzLmN1cnJlbnQgPSBwcm9wcy52YWx1ZXM7XG4gICAgICAgICAgICB1cGRhdGVGb3JtU3RhdGUoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb250cm9sLl9yZXNldERlZmF1bHRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgIH0sIFtjb250cm9sLCBwcm9wcy52YWx1ZXNdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2wuX3N0YXRlLm1vdW50KSB7XG4gICAgICAgICAgICBjb250cm9sLl9zZXRWYWxpZCgpO1xuICAgICAgICAgICAgY29udHJvbC5fc3RhdGUubW91bnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sLl9zdGF0ZS53YXRjaCkge1xuICAgICAgICAgICAgY29udHJvbC5fc3RhdGUud2F0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRyb2wuX3N1YmplY3RzLnN0YXRlLm5leHQoeyAuLi5jb250cm9sLl9mb3JtU3RhdGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbC5fcmVtb3ZlVW5tb3VudGVkKCk7XG4gICAgfSk7XG4gICAgX2Zvcm1Db250cm9sLmN1cnJlbnQuZm9ybVN0YXRlID0gUmVhY3QudXNlTWVtbygoKSA9PiBnZXRQcm94eUZvcm1TdGF0ZShmb3JtU3RhdGUsIGNvbnRyb2wpLCBbY29udHJvbCwgZm9ybVN0YXRlXSk7XG4gICAgcmV0dXJuIF9mb3JtQ29udHJvbC5jdXJyZW50O1xufVxuXG4vKipcbiAqIFdhdGNoIGNvbXBvbmVudCB0aGF0IHN1YnNjcmliZXMgdG8gZm9ybSBmaWVsZCBjaGFuZ2VzIGFuZCByZS1yZW5kZXJzIHdoZW4gd2F0Y2hlZCBmaWVsZHMgdXBkYXRlLlxuICpcbiAqIEBwYXJhbSBjb250cm9sIC0gVGhlIGZvcm0gY29udHJvbCBvYmplY3QgZnJvbSB1c2VGb3JtXG4gKiBAcGFyYW0gbmFtZSAtIENhbiBiZSBmaWVsZCBuYW1lLCBhcnJheSBvZiBmaWVsZCBuYW1lcywgb3IgdW5kZWZpbmVkIHRvIHdhdGNoIHRoZSBlbnRpcmUgZm9ybVxuICogQHBhcmFtIGRpc2FibGVkIC0gRGlzYWJsZSBzdWJzY3JpcHRpb25cbiAqIEBwYXJhbSBleGFjdCAtIFdoZXRoZXIgdG8gd2F0Y2ggZXhhY3QgZmllbGQgbmFtZXMgb3Igbm90XG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gVGhlIGRlZmF1bHQgdmFsdWUgdG8gdXNlIGlmIHRoZSBmaWVsZCBpcyBub3QgeWV0IHNldFxuICogQHBhcmFtIGNvbXB1dGUgLSBGdW5jdGlvbiB0byBjb21wdXRlIGRlcml2ZWQgdmFsdWVzIGZyb20gd2F0Y2hlZCBmaWVsZHNcbiAqIEBwYXJhbSByZW5kZXIgLSBUaGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyB3YXRjaGVkIHZhbHVlcyBhbmQgcmV0dXJucyBSZWFjdE5vZGVcbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgY2FsbGluZyByZW5kZXIgZnVuY3Rpb24gd2l0aCB3YXRjaGVkIHZhbHVlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBUaGUgYFdhdGNoYCBjb21wb25lbnQgb25seSByZS1yZW5kZXIgd2hlbiB0aGUgdmFsdWVzIG9mIGBmb29gLCBgYmFyYCwgYW5kIGBiYXoucXV4YCBjaGFuZ2UuXG4gKiBUaGUgdHlwZXMgb2YgYGZvb2AsIGBiYXJgLCBhbmQgYGJhei5xdXhgIGFyZSBwcmVjaXNlbHkgaW5mZXJyZWQuXG4gKlxuICogYGBgdHN4XG4gKiBjb25zdCB7IGNvbnRyb2wgfSA9IHVzZUZvcm0oKTtcbiAqXG4gKiA8V2F0Y2hcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZXM9e1snZm9vJywgJ2JhcicsICdiYXoucXV4J119XG4gKiAgIHJlbmRlcj17KFtmb28sIGJhciwgYmF6X3F1eF0pID0+IDxkaXY+e2Zvb317YmFyfXtiYXpfcXV4fTwvZGl2Pn1cbiAqIC8+XG4gKiBgYGBcbiAqL1xuY29uc3QgV2F0Y2ggPSAocHJvcHMpID0+IHByb3BzLnJlbmRlcih1c2VXYXRjaCh7IG5hbWU6IHByb3BzLm5hbWVzLCAuLi5wcm9wcyB9KSk7XG5cbmV4cG9ydCB7IENvbnRyb2xsZXIsIEZvcm0sIEZvcm1Qcm92aWRlciwgRm9ybVN0YXRlU3Vic2NyaWJlLCBXYXRjaCwgYXBwZW5kRXJyb3JzLCBjcmVhdGVGb3JtQ29udHJvbCwgZ2V0LCBzZXQsIHVzZUNvbnRyb2xsZXIsIHVzZUZpZWxkQXJyYXksIHVzZUZvcm0sIHVzZUZvcm1Db250ZXh0LCB1c2VGb3JtU3RhdGUsIHVzZVdhdGNoIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20ubWpzLm1hcFxuIiwiaW1wb3J0e2dldCBhcyBlLHNldCBhcyB0fWZyb21cInJlYWN0LWhvb2stZm9ybVwiO2NvbnN0IHI9KHQscixvKT0+e2lmKHQmJlwicmVwb3J0VmFsaWRpdHlcImluIHQpe2NvbnN0IHM9ZShvLHIpO3Quc2V0Q3VzdG9tVmFsaWRpdHkocyYmcy5tZXNzYWdlfHxcIlwiKSx0LnJlcG9ydFZhbGlkaXR5KCl9fSxvPShlLHQpPT57Zm9yKGNvbnN0IG8gaW4gdC5maWVsZHMpe2NvbnN0IHM9dC5maWVsZHNbb107cyYmcy5yZWYmJlwicmVwb3J0VmFsaWRpdHlcImluIHMucmVmP3Iocy5yZWYsbyxlKTpzJiZzLnJlZnMmJnMucmVmcy5mb3JFYWNoKHQ9PnIodCxvLGUpKX19LHM9KHIscyk9PntzLnNob3VsZFVzZU5hdGl2ZVZhbGlkYXRpb24mJm8ocixzKTtjb25zdCBuPXt9O2Zvcihjb25zdCBvIGluIHIpe2NvbnN0IGY9ZShzLmZpZWxkcyxvKSxjPU9iamVjdC5hc3NpZ24ocltvXXx8e30se3JlZjpmJiZmLnJlZn0pO2lmKGkocy5uYW1lc3x8T2JqZWN0LmtleXMociksbykpe2NvbnN0IHI9T2JqZWN0LmFzc2lnbih7fSxlKG4sbykpO3QocixcInJvb3RcIixjKSx0KG4sbyxyKX1lbHNlIHQobixvLGMpfXJldHVybiBufSxpPShlLHQpPT57Y29uc3Qgcj1uKHQpO3JldHVybiBlLnNvbWUoZT0+bihlKS5tYXRjaChgXiR7cn1cXFxcLlxcXFxkK2ApKX07ZnVuY3Rpb24gbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXF18XFxbL2csXCJcIil9ZXhwb3J0e3MgYXMgdG9OZXN0RXJyb3JzLG8gYXMgdmFsaWRhdGVGaWVsZHNOYXRpdmVseX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNvbHZlcnMubWpzLm1hcFxuIiwiaW1wb3J0e3ZhbGlkYXRlRmllbGRzTmF0aXZlbHkgYXMgZSx0b05lc3RFcnJvcnMgYXMgdH1mcm9tXCJAaG9va2Zvcm0vcmVzb2x2ZXJzXCI7aW1wb3J0e2FwcGVuZEVycm9ycyBhcyByfWZyb21cInJlYWN0LWhvb2stZm9ybVwiO2Z1bmN0aW9uIG8obyxuLHMpe3JldHVybiB2b2lkIDA9PT1zJiYocz17fSksZnVuY3Rpb24oYSxpLGMpe3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZ1bmN0aW9uKHQscil7dHJ5e3ZhciB1PShudWxsIT1uJiZuLmNvbnRleHQmJlwiZGV2ZWxvcG1lbnRcIj09PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZjb25zb2xlLndhcm4oXCJZb3Ugc2hvdWxkIG5vdCB1c2VkIHRoZSB5dXAgb3B0aW9ucyBjb250ZXh0LiBQbGVhc2UsIHVzZSB0aGUgJ3VzZUZvcm0nIGNvbnRleHQgb2JqZWN0IGluc3RlYWRcIiksUHJvbWlzZS5yZXNvbHZlKG9bXCJzeW5jXCI9PT1zLm1vZGU/XCJ2YWxpZGF0ZVN5bmNcIjpcInZhbGlkYXRlXCJdKGEsT2JqZWN0LmFzc2lnbih7YWJvcnRFYXJseTohMX0sbix7Y29udGV4dDppfSkpKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBjLnNob3VsZFVzZU5hdGl2ZVZhbGlkYXRpb24mJmUoe30sYykse3ZhbHVlczpzLnJhdz9PYmplY3QuYXNzaWduKHt9LGEpOnQsZXJyb3JzOnt9fX0pKX1jYXRjaChlKXtyZXR1cm4gcihlKX1yZXR1cm4gdSYmdS50aGVuP3UudGhlbih2b2lkIDAscik6dX0oMCxmdW5jdGlvbihlKXtpZighZS5pbm5lcil0aHJvdyBlO3JldHVybnt2YWx1ZXM6e30sZXJyb3JzOnQoKG89ZSxuPSFjLnNob3VsZFVzZU5hdGl2ZVZhbGlkYXRpb24mJlwiYWxsXCI9PT1jLmNyaXRlcmlhTW9kZSwoby5pbm5lcnx8W10pLnJlZHVjZShmdW5jdGlvbihlLHQpe2lmKGVbdC5wYXRoXXx8KGVbdC5wYXRoXT17bWVzc2FnZTp0Lm1lc3NhZ2UsdHlwZTp0LnR5cGV9KSxuKXt2YXIgbz1lW3QucGF0aF0udHlwZXMscz1vJiZvW3QudHlwZV07ZVt0LnBhdGhdPXIodC5wYXRoLG4sZSx0LnR5cGUscz9bXS5jb25jYXQocyx0Lm1lc3NhZ2UpOnQubWVzc2FnZSl9cmV0dXJuIGV9LHt9KSksYyl9O3ZhciBvLG59KSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX19ZXhwb3J0e28gYXMgeXVwUmVzb2x2ZXJ9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9eXVwLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydCB7IGdldHRlciwgZm9yRWFjaCwgc3BsaXQsIG5vcm1hbGl6ZVBhdGgsIGpvaW4gfSBmcm9tICdwcm9wZXJ0eS1leHByJztcbmltcG9ydCB7IGNhbWVsQ2FzZSwgc25ha2VDYXNlIH0gZnJvbSAndGlueS1jYXNlJztcbmltcG9ydCB0b3Bvc29ydCBmcm9tICd0b3Bvc29ydCc7XG5cbmNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IGVycm9yVG9TdHJpbmcgPSBFcnJvci5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCByZWdFeHBUb1N0cmluZyA9IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCBzeW1ib2xUb1N0cmluZyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6ICgpID0+ICcnO1xuY29uc3QgU1lNQk9MX1JFR0VYUCA9IC9eU3ltYm9sXFwoKC4qKVxcKSguKikkLztcbmZ1bmN0aW9uIHByaW50TnVtYmVyKHZhbCkge1xuICBpZiAodmFsICE9ICt2YWwpIHJldHVybiAnTmFOJztcbiAgY29uc3QgaXNOZWdhdGl2ZVplcm8gPSB2YWwgPT09IDAgJiYgMSAvIHZhbCA8IDA7XG4gIHJldHVybiBpc05lZ2F0aXZlWmVybyA/ICctMCcgOiAnJyArIHZhbDtcbn1cbmZ1bmN0aW9uIHByaW50U2ltcGxlVmFsdWUodmFsLCBxdW90ZVN0cmluZ3MgPSBmYWxzZSkge1xuICBpZiAodmFsID09IG51bGwgfHwgdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gZmFsc2UpIHJldHVybiAnJyArIHZhbDtcbiAgY29uc3QgdHlwZU9mID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGVPZiA9PT0gJ251bWJlcicpIHJldHVybiBwcmludE51bWJlcih2YWwpO1xuICBpZiAodHlwZU9mID09PSAnc3RyaW5nJykgcmV0dXJuIHF1b3RlU3RyaW5ncyA/IGBcIiR7dmFsfVwiYCA6IHZhbDtcbiAgaWYgKHR5cGVPZiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuICdbRnVuY3Rpb24gJyArICh2YWwubmFtZSB8fCAnYW5vbnltb3VzJykgKyAnXSc7XG4gIGlmICh0eXBlT2YgPT09ICdzeW1ib2wnKSByZXR1cm4gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWwpLnJlcGxhY2UoU1lNQk9MX1JFR0VYUCwgJ1N5bWJvbCgkMSknKTtcbiAgY29uc3QgdGFnID0gdG9TdHJpbmcuY2FsbCh2YWwpLnNsaWNlKDgsIC0xKTtcbiAgaWYgKHRhZyA9PT0gJ0RhdGUnKSByZXR1cm4gaXNOYU4odmFsLmdldFRpbWUoKSkgPyAnJyArIHZhbCA6IHZhbC50b0lTT1N0cmluZyh2YWwpO1xuICBpZiAodGFnID09PSAnRXJyb3InIHx8IHZhbCBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gJ1snICsgZXJyb3JUb1N0cmluZy5jYWxsKHZhbCkgKyAnXSc7XG4gIGlmICh0YWcgPT09ICdSZWdFeHAnKSByZXR1cm4gcmVnRXhwVG9TdHJpbmcuY2FsbCh2YWwpO1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHByaW50VmFsdWUodmFsdWUsIHF1b3RlU3RyaW5ncykge1xuICBsZXQgcmVzdWx0ID0gcHJpbnRTaW1wbGVWYWx1ZSh2YWx1ZSwgcXVvdGVTdHJpbmdzKTtcbiAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGxldCByZXN1bHQgPSBwcmludFNpbXBsZVZhbHVlKHRoaXNba2V5XSwgcXVvdGVTdHJpbmdzKTtcbiAgICBpZiAocmVzdWx0ICE9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSwgMik7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyBbXSA6IFtdLmNvbmNhdCh2YWx1ZSk7XG59XG5cbmxldCBfU3ltYm9sJHRvU3RyaW5nVGFnLCBfU3ltYm9sJGhhc0luc3RhbmNlLCBfU3ltYm9sJHRvU3RyaW5nVGFnMjtcbmxldCBzdHJSZWcgPSAvXFwkXFx7XFxzKihcXHcrKVxccypcXH0vZztcbl9TeW1ib2wkdG9TdHJpbmdUYWcgPSBTeW1ib2wudG9TdHJpbmdUYWc7XG5jbGFzcyBWYWxpZGF0aW9uRXJyb3JOb1N0YWNrIHtcbiAgY29uc3RydWN0b3IoZXJyb3JPckVycm9ycywgdmFsdWUsIGZpZWxkLCB0eXBlKSB7XG4gICAgdGhpcy5uYW1lID0gdm9pZCAwO1xuICAgIHRoaXMubWVzc2FnZSA9IHZvaWQgMDtcbiAgICB0aGlzLnZhbHVlID0gdm9pZCAwO1xuICAgIHRoaXMucGF0aCA9IHZvaWQgMDtcbiAgICB0aGlzLnR5cGUgPSB2b2lkIDA7XG4gICAgdGhpcy5wYXJhbXMgPSB2b2lkIDA7XG4gICAgdGhpcy5lcnJvcnMgPSB2b2lkIDA7XG4gICAgdGhpcy5pbm5lciA9IHZvaWQgMDtcbiAgICB0aGlzW19TeW1ib2wkdG9TdHJpbmdUYWddID0gJ0Vycm9yJztcbiAgICB0aGlzLm5hbWUgPSAnVmFsaWRhdGlvbkVycm9yJztcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5wYXRoID0gZmllbGQ7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIHRoaXMuaW5uZXIgPSBbXTtcbiAgICB0b0FycmF5KGVycm9yT3JFcnJvcnMpLmZvckVhY2goZXJyID0+IHtcbiAgICAgIGlmIChWYWxpZGF0aW9uRXJyb3IuaXNFcnJvcihlcnIpKSB7XG4gICAgICAgIHRoaXMuZXJyb3JzLnB1c2goLi4uZXJyLmVycm9ycyk7XG4gICAgICAgIGNvbnN0IGlubmVyRXJyb3JzID0gZXJyLmlubmVyLmxlbmd0aCA/IGVyci5pbm5lciA6IFtlcnJdO1xuICAgICAgICB0aGlzLmlubmVyLnB1c2goLi4uaW5uZXJFcnJvcnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubWVzc2FnZSA9IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDEgPyBgJHt0aGlzLmVycm9ycy5sZW5ndGh9IGVycm9ycyBvY2N1cnJlZGAgOiB0aGlzLmVycm9yc1swXTtcbiAgfVxufVxuX1N5bWJvbCRoYXNJbnN0YW5jZSA9IFN5bWJvbC5oYXNJbnN0YW5jZTtcbl9TeW1ib2wkdG9TdHJpbmdUYWcyID0gU3ltYm9sLnRvU3RyaW5nVGFnO1xuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0aWMgZm9ybWF0RXJyb3IobWVzc2FnZSwgcGFyYW1zKSB7XG4gICAgLy8gQXR0ZW1wdCB0byBtYWtlIHRoZSBwYXRoIG1vcmUgZnJpZW5kbHkgZm9yIGVycm9yIG1lc3NhZ2UgaW50ZXJwb2xhdGlvbi5cbiAgICBjb25zdCBwYXRoID0gcGFyYW1zLmxhYmVsIHx8IHBhcmFtcy5wYXRoIHx8ICd0aGlzJztcbiAgICAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgcGF0aCB1bmRlciBgb3JpZ2luYWxQYXRoYCBzbyBpdCBpc24ndCBsb3N0IHRvIGN1c3RvbVxuICAgIC8vIG1lc3NhZ2UgZnVuY3Rpb25zOyBlLmcuLCBvbmVzIHByb3ZpZGVkIGluIGBzZXRMb2NhbGUoKWAgY2FsbHMuXG4gICAgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zLCB7XG4gICAgICBwYXRoLFxuICAgICAgb3JpZ2luYWxQYXRoOiBwYXJhbXMucGF0aFxuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHJldHVybiBtZXNzYWdlLnJlcGxhY2Uoc3RyUmVnLCAoXywga2V5KSA9PiBwcmludFZhbHVlKHBhcmFtc1trZXldKSk7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnZnVuY3Rpb24nKSByZXR1cm4gbWVzc2FnZShwYXJhbXMpO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG4gIHN0YXRpYyBpc0Vycm9yKGVycikge1xuICAgIHJldHVybiBlcnIgJiYgZXJyLm5hbWUgPT09ICdWYWxpZGF0aW9uRXJyb3InO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycm9yT3JFcnJvcnMsIHZhbHVlLCBmaWVsZCwgdHlwZSwgZGlzYWJsZVN0YWNrKSB7XG4gICAgY29uc3QgZXJyb3JOb1N0YWNrID0gbmV3IFZhbGlkYXRpb25FcnJvck5vU3RhY2soZXJyb3JPckVycm9ycywgdmFsdWUsIGZpZWxkLCB0eXBlKTtcbiAgICBpZiAoZGlzYWJsZVN0YWNrKSB7XG4gICAgICByZXR1cm4gZXJyb3JOb1N0YWNrO1xuICAgIH1cbiAgICBzdXBlcigpO1xuICAgIHRoaXMudmFsdWUgPSB2b2lkIDA7XG4gICAgdGhpcy5wYXRoID0gdm9pZCAwO1xuICAgIHRoaXMudHlwZSA9IHZvaWQgMDtcbiAgICB0aGlzLnBhcmFtcyA9IHZvaWQgMDtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIHRoaXMuaW5uZXIgPSBbXTtcbiAgICB0aGlzW19TeW1ib2wkdG9TdHJpbmdUYWcyXSA9ICdFcnJvcic7XG4gICAgdGhpcy5uYW1lID0gZXJyb3JOb1N0YWNrLm5hbWU7XG4gICAgdGhpcy5tZXNzYWdlID0gZXJyb3JOb1N0YWNrLm1lc3NhZ2U7XG4gICAgdGhpcy50eXBlID0gZXJyb3JOb1N0YWNrLnR5cGU7XG4gICAgdGhpcy52YWx1ZSA9IGVycm9yTm9TdGFjay52YWx1ZTtcbiAgICB0aGlzLnBhdGggPSBlcnJvck5vU3RhY2sucGF0aDtcbiAgICB0aGlzLmVycm9ycyA9IGVycm9yTm9TdGFjay5lcnJvcnM7XG4gICAgdGhpcy5pbm5lciA9IGVycm9yTm9TdGFjay5pbm5lcjtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFZhbGlkYXRpb25FcnJvcik7XG4gICAgfVxuICB9XG4gIHN0YXRpYyBbX1N5bWJvbCRoYXNJbnN0YW5jZV0oaW5zdCkge1xuICAgIHJldHVybiBWYWxpZGF0aW9uRXJyb3JOb1N0YWNrW1N5bWJvbC5oYXNJbnN0YW5jZV0oaW5zdCkgfHwgc3VwZXJbU3ltYm9sLmhhc0luc3RhbmNlXShpbnN0KTtcbiAgfVxufVxuXG5sZXQgbWl4ZWQgPSB7XG4gIGRlZmF1bHQ6ICcke3BhdGh9IGlzIGludmFsaWQnLFxuICByZXF1aXJlZDogJyR7cGF0aH0gaXMgYSByZXF1aXJlZCBmaWVsZCcsXG4gIGRlZmluZWQ6ICcke3BhdGh9IG11c3QgYmUgZGVmaW5lZCcsXG4gIG5vdE51bGw6ICcke3BhdGh9IGNhbm5vdCBiZSBudWxsJyxcbiAgb25lT2Y6ICcke3BhdGh9IG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiAke3ZhbHVlc30nLFxuICBub3RPbmVPZjogJyR7cGF0aH0gbXVzdCBub3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiAke3ZhbHVlc30nLFxuICBub3RUeXBlOiAoe1xuICAgIHBhdGgsXG4gICAgdHlwZSxcbiAgICB2YWx1ZSxcbiAgICBvcmlnaW5hbFZhbHVlXG4gIH0pID0+IHtcbiAgICBjb25zdCBjYXN0TXNnID0gb3JpZ2luYWxWYWx1ZSAhPSBudWxsICYmIG9yaWdpbmFsVmFsdWUgIT09IHZhbHVlID8gYCAoY2FzdCBmcm9tIHRoZSB2YWx1ZSBcXGAke3ByaW50VmFsdWUob3JpZ2luYWxWYWx1ZSwgdHJ1ZSl9XFxgKS5gIDogJy4nO1xuICAgIHJldHVybiB0eXBlICE9PSAnbWl4ZWQnID8gYCR7cGF0aH0gbXVzdCBiZSBhIFxcYCR7dHlwZX1cXGAgdHlwZSwgYCArIGBidXQgdGhlIGZpbmFsIHZhbHVlIHdhczogXFxgJHtwcmludFZhbHVlKHZhbHVlLCB0cnVlKX1cXGBgICsgY2FzdE1zZyA6IGAke3BhdGh9IG11c3QgbWF0Y2ggdGhlIGNvbmZpZ3VyZWQgdHlwZS4gYCArIGBUaGUgdmFsaWRhdGVkIHZhbHVlIHdhczogXFxgJHtwcmludFZhbHVlKHZhbHVlLCB0cnVlKX1cXGBgICsgY2FzdE1zZztcbiAgfVxufTtcbmxldCBzdHJpbmcgPSB7XG4gIGxlbmd0aDogJyR7cGF0aH0gbXVzdCBiZSBleGFjdGx5ICR7bGVuZ3RofSBjaGFyYWN0ZXJzJyxcbiAgbWluOiAnJHtwYXRofSBtdXN0IGJlIGF0IGxlYXN0ICR7bWlufSBjaGFyYWN0ZXJzJyxcbiAgbWF4OiAnJHtwYXRofSBtdXN0IGJlIGF0IG1vc3QgJHttYXh9IGNoYXJhY3RlcnMnLFxuICBtYXRjaGVzOiAnJHtwYXRofSBtdXN0IG1hdGNoIHRoZSBmb2xsb3dpbmc6IFwiJHtyZWdleH1cIicsXG4gIGVtYWlsOiAnJHtwYXRofSBtdXN0IGJlIGEgdmFsaWQgZW1haWwnLFxuICB1cmw6ICcke3BhdGh9IG11c3QgYmUgYSB2YWxpZCBVUkwnLFxuICB1dWlkOiAnJHtwYXRofSBtdXN0IGJlIGEgdmFsaWQgVVVJRCcsXG4gIGRhdGV0aW1lOiAnJHtwYXRofSBtdXN0IGJlIGEgdmFsaWQgSVNPIGRhdGUtdGltZScsXG4gIGRhdGV0aW1lX3ByZWNpc2lvbjogJyR7cGF0aH0gbXVzdCBiZSBhIHZhbGlkIElTTyBkYXRlLXRpbWUgd2l0aCBhIHN1Yi1zZWNvbmQgcHJlY2lzaW9uIG9mIGV4YWN0bHkgJHtwcmVjaXNpb259IGRpZ2l0cycsXG4gIGRhdGV0aW1lX29mZnNldDogJyR7cGF0aH0gbXVzdCBiZSBhIHZhbGlkIElTTyBkYXRlLXRpbWUgd2l0aCBVVEMgXCJaXCIgdGltZXpvbmUnLFxuICB0cmltOiAnJHtwYXRofSBtdXN0IGJlIGEgdHJpbW1lZCBzdHJpbmcnLFxuICBsb3dlcmNhc2U6ICcke3BhdGh9IG11c3QgYmUgYSBsb3dlcmNhc2Ugc3RyaW5nJyxcbiAgdXBwZXJjYXNlOiAnJHtwYXRofSBtdXN0IGJlIGEgdXBwZXIgY2FzZSBzdHJpbmcnXG59O1xubGV0IG51bWJlciA9IHtcbiAgbWluOiAnJHtwYXRofSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke21pbn0nLFxuICBtYXg6ICcke3BhdGh9IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7bWF4fScsXG4gIGxlc3NUaGFuOiAnJHtwYXRofSBtdXN0IGJlIGxlc3MgdGhhbiAke2xlc3N9JyxcbiAgbW9yZVRoYW46ICcke3BhdGh9IG11c3QgYmUgZ3JlYXRlciB0aGFuICR7bW9yZX0nLFxuICBwb3NpdGl2ZTogJyR7cGF0aH0gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicsXG4gIG5lZ2F0aXZlOiAnJHtwYXRofSBtdXN0IGJlIGEgbmVnYXRpdmUgbnVtYmVyJyxcbiAgaW50ZWdlcjogJyR7cGF0aH0gbXVzdCBiZSBhbiBpbnRlZ2VyJ1xufTtcbmxldCBkYXRlID0ge1xuICBtaW46ICcke3BhdGh9IGZpZWxkIG11c3QgYmUgbGF0ZXIgdGhhbiAke21pbn0nLFxuICBtYXg6ICcke3BhdGh9IGZpZWxkIG11c3QgYmUgYXQgZWFybGllciB0aGFuICR7bWF4fSdcbn07XG5sZXQgYm9vbGVhbiA9IHtcbiAgaXNWYWx1ZTogJyR7cGF0aH0gZmllbGQgbXVzdCBiZSAke3ZhbHVlfSdcbn07XG5sZXQgb2JqZWN0ID0ge1xuICBub1Vua25vd246ICcke3BhdGh9IGZpZWxkIGhhcyB1bnNwZWNpZmllZCBrZXlzOiAke3Vua25vd259JyxcbiAgZXhhY3Q6ICcke3BhdGh9IG9iamVjdCBjb250YWlucyB1bmtub3duIHByb3BlcnRpZXM6ICR7cHJvcGVydGllc30nXG59O1xubGV0IGFycmF5ID0ge1xuICBtaW46ICcke3BhdGh9IGZpZWxkIG11c3QgaGF2ZSBhdCBsZWFzdCAke21pbn0gaXRlbXMnLFxuICBtYXg6ICcke3BhdGh9IGZpZWxkIG11c3QgaGF2ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHttYXh9IGl0ZW1zJyxcbiAgbGVuZ3RoOiAnJHtwYXRofSBtdXN0IGhhdmUgJHtsZW5ndGh9IGl0ZW1zJ1xufTtcbmxldCB0dXBsZSA9IHtcbiAgbm90VHlwZTogcGFyYW1zID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwYXRoLFxuICAgICAgdmFsdWUsXG4gICAgICBzcGVjXG4gICAgfSA9IHBhcmFtcztcbiAgICBjb25zdCB0eXBlTGVuID0gc3BlYy50eXBlcy5sZW5ndGg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoIDwgdHlwZUxlbikgcmV0dXJuIGAke3BhdGh9IHR1cGxlIHZhbHVlIGhhcyB0b28gZmV3IGl0ZW1zLCBleHBlY3RlZCBhIGxlbmd0aCBvZiAke3R5cGVMZW59IGJ1dCBnb3QgJHt2YWx1ZS5sZW5ndGh9IGZvciB2YWx1ZTogXFxgJHtwcmludFZhbHVlKHZhbHVlLCB0cnVlKX1cXGBgO1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IHR5cGVMZW4pIHJldHVybiBgJHtwYXRofSB0dXBsZSB2YWx1ZSBoYXMgdG9vIG1hbnkgaXRlbXMsIGV4cGVjdGVkIGEgbGVuZ3RoIG9mICR7dHlwZUxlbn0gYnV0IGdvdCAke3ZhbHVlLmxlbmd0aH0gZm9yIHZhbHVlOiBcXGAke3ByaW50VmFsdWUodmFsdWUsIHRydWUpfVxcYGA7XG4gICAgfVxuICAgIHJldHVybiBWYWxpZGF0aW9uRXJyb3IuZm9ybWF0RXJyb3IobWl4ZWQubm90VHlwZSwgcGFyYW1zKTtcbiAgfVxufTtcbnZhciBsb2NhbGUgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIHtcbiAgbWl4ZWQsXG4gIHN0cmluZyxcbiAgbnVtYmVyLFxuICBkYXRlLFxuICBvYmplY3QsXG4gIGFycmF5LFxuICBib29sZWFuLFxuICB0dXBsZVxufSk7XG5cbmNvbnN0IGlzU2NoZW1hID0gb2JqID0+IG9iaiAmJiBvYmouX19pc1l1cFNjaGVtYV9fO1xuXG5jbGFzcyBDb25kaXRpb24ge1xuICBzdGF0aWMgZnJvbU9wdGlvbnMocmVmcywgY29uZmlnKSB7XG4gICAgaWYgKCFjb25maWcudGhlbiAmJiAhY29uZmlnLm90aGVyd2lzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignZWl0aGVyIGB0aGVuOmAgb3IgYG90aGVyd2lzZTpgIGlzIHJlcXVpcmVkIGZvciBgd2hlbigpYCBjb25kaXRpb25zJyk7XG4gICAgbGV0IHtcbiAgICAgIGlzLFxuICAgICAgdGhlbixcbiAgICAgIG90aGVyd2lzZVxuICAgIH0gPSBjb25maWc7XG4gICAgbGV0IGNoZWNrID0gdHlwZW9mIGlzID09PSAnZnVuY3Rpb24nID8gaXMgOiAoLi4udmFsdWVzKSA9PiB2YWx1ZXMuZXZlcnkodmFsdWUgPT4gdmFsdWUgPT09IGlzKTtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvbihyZWZzLCAodmFsdWVzLCBzY2hlbWEpID0+IHtcbiAgICAgIHZhciBfYnJhbmNoO1xuICAgICAgbGV0IGJyYW5jaCA9IGNoZWNrKC4uLnZhbHVlcykgPyB0aGVuIDogb3RoZXJ3aXNlO1xuICAgICAgcmV0dXJuIChfYnJhbmNoID0gYnJhbmNoID09IG51bGwgPyB2b2lkIDAgOiBicmFuY2goc2NoZW1hKSkgIT0gbnVsbCA/IF9icmFuY2ggOiBzY2hlbWE7XG4gICAgfSk7XG4gIH1cbiAgY29uc3RydWN0b3IocmVmcywgYnVpbGRlcikge1xuICAgIHRoaXMuZm4gPSB2b2lkIDA7XG4gICAgdGhpcy5yZWZzID0gcmVmcztcbiAgICB0aGlzLnJlZnMgPSByZWZzO1xuICAgIHRoaXMuZm4gPSBidWlsZGVyO1xuICB9XG4gIHJlc29sdmUoYmFzZSwgb3B0aW9ucykge1xuICAgIGxldCB2YWx1ZXMgPSB0aGlzLnJlZnMubWFwKHJlZiA9PlxuICAgIC8vIFRPRE86ID8gb3BlcmF0b3IgaGVyZT9cbiAgICByZWYuZ2V0VmFsdWUob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy52YWx1ZSwgb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5wYXJlbnQsIG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuY29udGV4dCkpO1xuICAgIGxldCBzY2hlbWEgPSB0aGlzLmZuKHZhbHVlcywgYmFzZSwgb3B0aW9ucyk7XG4gICAgaWYgKHNjaGVtYSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgLy8gQHRzLWlnbm9yZSB0aGlzIGNhbiBiZSBiYXNlXG4gICAgc2NoZW1hID09PSBiYXNlKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG4gICAgaWYgKCFpc1NjaGVtYShzY2hlbWEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb25kaXRpb25zIG11c3QgcmV0dXJuIGEgc2NoZW1hIG9iamVjdCcpO1xuICAgIHJldHVybiBzY2hlbWEucmVzb2x2ZShvcHRpb25zKTtcbiAgfVxufVxuXG5jb25zdCBwcmVmaXhlcyA9IHtcbiAgY29udGV4dDogJyQnLFxuICB2YWx1ZTogJy4nXG59O1xuZnVuY3Rpb24gY3JlYXRlJDkoa2V5LCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUmVmZXJlbmNlKGtleSwgb3B0aW9ucyk7XG59XG5jbGFzcyBSZWZlcmVuY2Uge1xuICBjb25zdHJ1Y3RvcihrZXksIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMua2V5ID0gdm9pZCAwO1xuICAgIHRoaXMuaXNDb250ZXh0ID0gdm9pZCAwO1xuICAgIHRoaXMuaXNWYWx1ZSA9IHZvaWQgMDtcbiAgICB0aGlzLmlzU2libGluZyA9IHZvaWQgMDtcbiAgICB0aGlzLnBhdGggPSB2b2lkIDA7XG4gICAgdGhpcy5nZXR0ZXIgPSB2b2lkIDA7XG4gICAgdGhpcy5tYXAgPSB2b2lkIDA7XG4gICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWYgbXVzdCBiZSBhIHN0cmluZywgZ290OiAnICsga2V5KTtcbiAgICB0aGlzLmtleSA9IGtleS50cmltKCk7XG4gICAgaWYgKGtleSA9PT0gJycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlZiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgIHRoaXMuaXNDb250ZXh0ID0gdGhpcy5rZXlbMF0gPT09IHByZWZpeGVzLmNvbnRleHQ7XG4gICAgdGhpcy5pc1ZhbHVlID0gdGhpcy5rZXlbMF0gPT09IHByZWZpeGVzLnZhbHVlO1xuICAgIHRoaXMuaXNTaWJsaW5nID0gIXRoaXMuaXNDb250ZXh0ICYmICF0aGlzLmlzVmFsdWU7XG4gICAgbGV0IHByZWZpeCA9IHRoaXMuaXNDb250ZXh0ID8gcHJlZml4ZXMuY29udGV4dCA6IHRoaXMuaXNWYWx1ZSA/IHByZWZpeGVzLnZhbHVlIDogJyc7XG4gICAgdGhpcy5wYXRoID0gdGhpcy5rZXkuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gICAgdGhpcy5nZXR0ZXIgPSB0aGlzLnBhdGggJiYgZ2V0dGVyKHRoaXMucGF0aCwgdHJ1ZSk7XG4gICAgdGhpcy5tYXAgPSBvcHRpb25zLm1hcDtcbiAgfVxuICBnZXRWYWx1ZSh2YWx1ZSwgcGFyZW50LCBjb250ZXh0KSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaXNDb250ZXh0ID8gY29udGV4dCA6IHRoaXMuaXNWYWx1ZSA/IHZhbHVlIDogcGFyZW50O1xuICAgIGlmICh0aGlzLmdldHRlcikgcmVzdWx0ID0gdGhpcy5nZXR0ZXIocmVzdWx0IHx8IHt9KTtcbiAgICBpZiAodGhpcy5tYXApIHJlc3VsdCA9IHRoaXMubWFwKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5jb250ZXh0XG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5wYXJlbnRcbiAgICovXG4gIGNhc3QodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5wYXJlbnQsIG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuY29udGV4dCk7XG4gIH1cbiAgcmVzb2x2ZSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBkZXNjcmliZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3JlZicsXG4gICAgICBrZXk6IHRoaXMua2V5XG4gICAgfTtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYFJlZigke3RoaXMua2V5fSlgO1xuICB9XG4gIHN0YXRpYyBpc1JlZih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5fX2lzWXVwUmVmO1xuICB9XG59XG5cbi8vIEB0cy1pZ25vcmVcblJlZmVyZW5jZS5wcm90b3R5cGUuX19pc1l1cFJlZiA9IHRydWU7XG5cbmNvbnN0IGlzQWJzZW50ID0gdmFsdWUgPT4gdmFsdWUgPT0gbnVsbDtcblxuZnVuY3Rpb24gY3JlYXRlVmFsaWRhdGlvbihjb25maWcpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUoe1xuICAgIHZhbHVlLFxuICAgIHBhdGggPSAnJyxcbiAgICBvcHRpb25zLFxuICAgIG9yaWdpbmFsVmFsdWUsXG4gICAgc2NoZW1hXG4gIH0sIHBhbmljLCBuZXh0KSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIHRlc3QsXG4gICAgICBwYXJhbXMsXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2tpcEFic2VudFxuICAgIH0gPSBjb25maWc7XG4gICAgbGV0IHtcbiAgICAgIHBhcmVudCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBhYm9ydEVhcmx5ID0gc2NoZW1hLnNwZWMuYWJvcnRFYXJseSxcbiAgICAgIGRpc2FibGVTdGFja1RyYWNlID0gc2NoZW1hLnNwZWMuZGlzYWJsZVN0YWNrVHJhY2VcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCByZXNvbHZlT3B0aW9ucyA9IHtcbiAgICAgIHZhbHVlLFxuICAgICAgcGFyZW50LFxuICAgICAgY29udGV4dFxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlRXJyb3Iob3ZlcnJpZGVzID0ge30pIHtcbiAgICAgIGNvbnN0IG5leHRQYXJhbXMgPSByZXNvbHZlUGFyYW1zKE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgICAgbGFiZWw6IHNjaGVtYS5zcGVjLmxhYmVsLFxuICAgICAgICBwYXRoOiBvdmVycmlkZXMucGF0aCB8fCBwYXRoLFxuICAgICAgICBzcGVjOiBzY2hlbWEuc3BlYyxcbiAgICAgICAgZGlzYWJsZVN0YWNrVHJhY2U6IG92ZXJyaWRlcy5kaXNhYmxlU3RhY2tUcmFjZSB8fCBkaXNhYmxlU3RhY2tUcmFjZVxuICAgICAgfSwgcGFyYW1zLCBvdmVycmlkZXMucGFyYW1zKSwgcmVzb2x2ZU9wdGlvbnMpO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVmFsaWRhdGlvbkVycm9yKFZhbGlkYXRpb25FcnJvci5mb3JtYXRFcnJvcihvdmVycmlkZXMubWVzc2FnZSB8fCBtZXNzYWdlLCBuZXh0UGFyYW1zKSwgdmFsdWUsIG5leHRQYXJhbXMucGF0aCwgb3ZlcnJpZGVzLnR5cGUgfHwgbmFtZSwgbmV4dFBhcmFtcy5kaXNhYmxlU3RhY2tUcmFjZSk7XG4gICAgICBlcnJvci5wYXJhbXMgPSBuZXh0UGFyYW1zO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cbiAgICBjb25zdCBpbnZhbGlkID0gYWJvcnRFYXJseSA/IHBhbmljIDogbmV4dDtcbiAgICBsZXQgY3R4ID0ge1xuICAgICAgcGF0aCxcbiAgICAgIHBhcmVudCxcbiAgICAgIHR5cGU6IG5hbWUsXG4gICAgICBmcm9tOiBvcHRpb25zLmZyb20sXG4gICAgICBjcmVhdGVFcnJvcixcbiAgICAgIHJlc29sdmUoaXRlbSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZU1heWJlUmVmKGl0ZW0sIHJlc29sdmVPcHRpb25zKTtcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLFxuICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgIHNjaGVtYVxuICAgIH07XG4gICAgY29uc3QgaGFuZGxlUmVzdWx0ID0gdmFsaWRPckVycm9yID0+IHtcbiAgICAgIGlmIChWYWxpZGF0aW9uRXJyb3IuaXNFcnJvcih2YWxpZE9yRXJyb3IpKSBpbnZhbGlkKHZhbGlkT3JFcnJvcik7ZWxzZSBpZiAoIXZhbGlkT3JFcnJvcikgaW52YWxpZChjcmVhdGVFcnJvcigpKTtlbHNlIG5leHQobnVsbCk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVFcnJvciA9IGVyciA9PiB7XG4gICAgICBpZiAoVmFsaWRhdGlvbkVycm9yLmlzRXJyb3IoZXJyKSkgaW52YWxpZChlcnIpO2Vsc2UgcGFuaWMoZXJyKTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZFNraXAgPSBza2lwQWJzZW50ICYmIGlzQWJzZW50KHZhbHVlKTtcbiAgICBpZiAoc2hvdWxkU2tpcCkge1xuICAgICAgcmV0dXJuIGhhbmRsZVJlc3VsdCh0cnVlKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgdmFyIF9yZXN1bHQ7XG4gICAgICByZXN1bHQgPSB0ZXN0LmNhbGwoY3R4LCB2YWx1ZSwgY3R4KTtcbiAgICAgIGlmICh0eXBlb2YgKChfcmVzdWx0ID0gcmVzdWx0KSA9PSBudWxsID8gdm9pZCAwIDogX3Jlc3VsdC50aGVuKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAob3B0aW9ucy5zeW5jKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWxpZGF0aW9uIHRlc3Qgb2YgdHlwZTogXCIke2N0eC50eXBlfVwiIHJldHVybmVkIGEgUHJvbWlzZSBkdXJpbmcgYSBzeW5jaHJvbm91cyB2YWxpZGF0ZS4gYCArIGBUaGlzIHRlc3Qgd2lsbCBmaW5pc2ggYWZ0ZXIgdGhlIHZhbGlkYXRlIGNhbGwgaGFzIHJldHVybmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4oaGFuZGxlUmVzdWx0LCBoYW5kbGVFcnJvcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoYW5kbGVFcnJvcihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYW5kbGVSZXN1bHQocmVzdWx0KTtcbiAgfVxuICB2YWxpZGF0ZS5PUFRJT05TID0gY29uZmlnO1xuICByZXR1cm4gdmFsaWRhdGU7XG59XG5cbi8vIFdhcm5pbmc6IG11dGF0ZXMgdGhlIGlucHV0XG5mdW5jdGlvbiByZXNvbHZlUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICBpZiAoIXBhcmFtcykgcmV0dXJuIHBhcmFtcztcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgIHBhcmFtc1trZXldID0gcmVzb2x2ZU1heWJlUmVmKHBhcmFtc1trZXldLCBvcHRpb25zKTtcbiAgfVxuICByZXR1cm4gcGFyYW1zO1xufVxuZnVuY3Rpb24gcmVzb2x2ZU1heWJlUmVmKGl0ZW0sIG9wdGlvbnMpIHtcbiAgcmV0dXJuIFJlZmVyZW5jZS5pc1JlZihpdGVtKSA/IGl0ZW0uZ2V0VmFsdWUob3B0aW9ucy52YWx1ZSwgb3B0aW9ucy5wYXJlbnQsIG9wdGlvbnMuY29udGV4dCkgOiBpdGVtO1xufVxuXG5mdW5jdGlvbiBnZXRJbihzY2hlbWEsIHBhdGgsIHZhbHVlLCBjb250ZXh0ID0gdmFsdWUpIHtcbiAgbGV0IHBhcmVudCwgbGFzdFBhcnQsIGxhc3RQYXJ0RGVidWc7XG5cbiAgLy8gcm9vdCBwYXRoOiAnJ1xuICBpZiAoIXBhdGgpIHJldHVybiB7XG4gICAgcGFyZW50LFxuICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgc2NoZW1hXG4gIH07XG4gIGZvckVhY2gocGF0aCwgKF9wYXJ0LCBpc0JyYWNrZXQsIGlzQXJyYXkpID0+IHtcbiAgICBsZXQgcGFydCA9IGlzQnJhY2tldCA/IF9wYXJ0LnNsaWNlKDEsIF9wYXJ0Lmxlbmd0aCAtIDEpIDogX3BhcnQ7XG4gICAgc2NoZW1hID0gc2NoZW1hLnJlc29sdmUoe1xuICAgICAgY29udGV4dCxcbiAgICAgIHBhcmVudCxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gICAgbGV0IGlzVHVwbGUgPSBzY2hlbWEudHlwZSA9PT0gJ3R1cGxlJztcbiAgICBsZXQgaWR4ID0gaXNBcnJheSA/IHBhcnNlSW50KHBhcnQsIDEwKSA6IDA7XG4gICAgaWYgKHNjaGVtYS5pbm5lclR5cGUgfHwgaXNUdXBsZSkge1xuICAgICAgaWYgKGlzVHVwbGUgJiYgIWlzQXJyYXkpIHRocm93IG5ldyBFcnJvcihgWXVwLnJlYWNoIGNhbm5vdCBpbXBsaWNpdGx5IGluZGV4IGludG8gYSB0dXBsZSB0eXBlLiB0aGUgcGF0aCBwYXJ0IFwiJHtsYXN0UGFydERlYnVnfVwiIG11c3QgY29udGFpbiBhbiBpbmRleCB0byB0aGUgdHVwbGUgZWxlbWVudCwgZS5nLiBcIiR7bGFzdFBhcnREZWJ1Z31bMF1cImApO1xuICAgICAgaWYgKHZhbHVlICYmIGlkeCA+PSB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZdXAucmVhY2ggY2Fubm90IHJlc29sdmUgYW4gYXJyYXkgaXRlbSBhdCBpbmRleDogJHtfcGFydH0sIGluIHRoZSBwYXRoOiAke3BhdGh9LiBgICsgYGJlY2F1c2UgdGhlcmUgaXMgbm8gdmFsdWUgYXQgdGhhdCBpbmRleC4gYCk7XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSB2YWx1ZTtcbiAgICAgIHZhbHVlID0gdmFsdWUgJiYgdmFsdWVbaWR4XTtcbiAgICAgIHNjaGVtYSA9IGlzVHVwbGUgPyBzY2hlbWEuc3BlYy50eXBlc1tpZHhdIDogc2NoZW1hLmlubmVyVHlwZTtcbiAgICB9XG5cbiAgICAvLyBzb21ldGltZXMgdGhlIGFycmF5IGluZGV4IHBhcnQgb2YgYSBwYXRoIGRvZXNuJ3QgZXhpc3Q6IFwibmVzdGVkLmFyci5jaGlsZFwiXG4gICAgLy8gaW4gdGhlc2UgY2FzZXMgdGhlIGN1cnJlbnQgcGFydCBpcyB0aGUgbmV4dCBzY2hlbWEgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWRcbiAgICAvLyBpbiB0aGlzIGl0ZXJhdGlvbi4gRm9yIGNhc2VzIHdoZXJlIHRoZSBpbmRleCBzaWduYXR1cmUgaXMgaW5jbHVkZWQgdGhpc1xuICAgIC8vIGNoZWNrIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIHRoZSBgY2hpbGRgIHBhcnQgb24gdGhlIG5leHQgaXRlcmF0aW9uIGxpa2Ugbm9ybWFsXG4gICAgaWYgKCFpc0FycmF5KSB7XG4gICAgICBpZiAoIXNjaGVtYS5maWVsZHMgfHwgIXNjaGVtYS5maWVsZHNbcGFydF0pIHRocm93IG5ldyBFcnJvcihgVGhlIHNjaGVtYSBkb2VzIG5vdCBjb250YWluIHRoZSBwYXRoOiAke3BhdGh9LiBgICsgYChmYWlsZWQgYXQ6ICR7bGFzdFBhcnREZWJ1Z30gd2hpY2ggaXMgYSB0eXBlOiBcIiR7c2NoZW1hLnR5cGV9XCIpYCk7XG4gICAgICBwYXJlbnQgPSB2YWx1ZTtcbiAgICAgIHZhbHVlID0gdmFsdWUgJiYgdmFsdWVbcGFydF07XG4gICAgICBzY2hlbWEgPSBzY2hlbWEuZmllbGRzW3BhcnRdO1xuICAgIH1cbiAgICBsYXN0UGFydCA9IHBhcnQ7XG4gICAgbGFzdFBhcnREZWJ1ZyA9IGlzQnJhY2tldCA/ICdbJyArIF9wYXJ0ICsgJ10nIDogJy4nICsgX3BhcnQ7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHNjaGVtYSxcbiAgICBwYXJlbnQsXG4gICAgcGFyZW50UGF0aDogbGFzdFBhcnRcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlYWNoKG9iaiwgcGF0aCwgdmFsdWUsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEluKG9iaiwgcGF0aCwgdmFsdWUsIGNvbnRleHQpLnNjaGVtYTtcbn1cblxuY2xhc3MgUmVmZXJlbmNlU2V0IGV4dGVuZHMgU2V0IHtcbiAgZGVzY3JpYmUoKSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy52YWx1ZXMoKSkge1xuICAgICAgZGVzY3JpcHRpb24ucHVzaChSZWZlcmVuY2UuaXNSZWYoaXRlbSkgPyBpdGVtLmRlc2NyaWJlKCkgOiBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICB9XG4gIHJlc29sdmVBbGwocmVzb2x2ZSkge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy52YWx1ZXMoKSkge1xuICAgICAgcmVzdWx0LnB1c2gocmVzb2x2ZShpdGVtKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBSZWZlcmVuY2VTZXQodGhpcy52YWx1ZXMoKSk7XG4gIH1cbiAgbWVyZ2UobmV3SXRlbXMsIHJlbW92ZUl0ZW1zKSB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBuZXdJdGVtcy5mb3JFYWNoKHZhbHVlID0+IG5leHQuYWRkKHZhbHVlKSk7XG4gICAgcmVtb3ZlSXRlbXMuZm9yRWFjaCh2YWx1ZSA9PiBuZXh0LmRlbGV0ZSh2YWx1ZSkpO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG59XG5cbi8vIHR3ZWFrZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vS2VsaW4yMDI1L25hbm9jbG9uZS9ibG9iLzBhYmViNzYzNWJkYTliNjhlZjIyNzcwOTNmNzZkYmUzYmYzOTQ4ZTEvc3JjL2luZGV4LmpzXG5mdW5jdGlvbiBjbG9uZShzcmMsIHNlZW4gPSBuZXcgTWFwKCkpIHtcbiAgaWYgKGlzU2NoZW1hKHNyYykgfHwgIXNyYyB8fCB0eXBlb2Ygc3JjICE9PSAnb2JqZWN0JykgcmV0dXJuIHNyYztcbiAgaWYgKHNlZW4uaGFzKHNyYykpIHJldHVybiBzZWVuLmdldChzcmMpO1xuICBsZXQgY29weTtcbiAgaWYgKHNyYyBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAvLyBEYXRlXG4gICAgY29weSA9IG5ldyBEYXRlKHNyYy5nZXRUaW1lKCkpO1xuICAgIHNlZW4uc2V0KHNyYywgY29weSk7XG4gIH0gZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgLy8gUmVnRXhwXG4gICAgY29weSA9IG5ldyBSZWdFeHAoc3JjKTtcbiAgICBzZWVuLnNldChzcmMsIGNvcHkpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgIC8vIEFycmF5XG4gICAgY29weSA9IG5ldyBBcnJheShzcmMubGVuZ3RoKTtcbiAgICBzZWVuLnNldChzcmMsIGNvcHkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSBjb3B5W2ldID0gY2xvbmUoc3JjW2ldLCBzZWVuKTtcbiAgfSBlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAvLyBNYXBcbiAgICBjb3B5ID0gbmV3IE1hcCgpO1xuICAgIHNlZW4uc2V0KHNyYywgY29weSk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2Ygc3JjLmVudHJpZXMoKSkgY29weS5zZXQoaywgY2xvbmUodiwgc2VlbikpO1xuICB9IGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFNldCkge1xuICAgIC8vIFNldFxuICAgIGNvcHkgPSBuZXcgU2V0KCk7XG4gICAgc2Vlbi5zZXQoc3JjLCBjb3B5KTtcbiAgICBmb3IgKGNvbnN0IHYgb2Ygc3JjKSBjb3B5LmFkZChjbG9uZSh2LCBzZWVuKSk7XG4gIH0gZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgLy8gT2JqZWN0XG4gICAgY29weSA9IHt9O1xuICAgIHNlZW4uc2V0KHNyYywgY29weSk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoc3JjKSkgY29weVtrXSA9IGNsb25lKHYsIHNlZW4pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IEVycm9yKGBVbmFibGUgdG8gY2xvbmUgJHtzcmN9YCk7XG4gIH1cbiAgcmV0dXJuIGNvcHk7XG59XG5cbi8qKlxuICogQ29waWVkIGZyb20gQHN0YW5kYXJkLXNjaGVtYS9zcGVjIHRvIGF2b2lkIGhhdmluZyBhIGRlcGVuZGVuY3kgb24gaXQuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3RhbmRhcmQtc2NoZW1hL3N0YW5kYXJkLXNjaGVtYS9ibG9iL21haW4vcGFja2FnZXMvc3BlYy9zcmMvaW5kZXgudHNcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVTdGFuZGFyZFBhdGgocGF0aCkge1xuICBpZiAoIShwYXRoICE9IG51bGwgJiYgcGF0aC5sZW5ndGgpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEFycmF5IHRvIHN0b3JlIHRoZSBmaW5hbCBwYXRoIHNlZ21lbnRzXG4gIGNvbnN0IHNlZ21lbnRzID0gW107XG4gIC8vIEJ1ZmZlciBmb3IgYnVpbGRpbmcgdGhlIGN1cnJlbnQgc2VnbWVudFxuICBsZXQgY3VycmVudFNlZ21lbnQgPSAnJztcbiAgLy8gVHJhY2sgaWYgd2UncmUgaW5zaWRlIHNxdWFyZSBicmFja2V0cyAoYXJyYXkvcHJvcGVydHkgYWNjZXNzKVxuICBsZXQgaW5CcmFja2V0cyA9IGZhbHNlO1xuICAvLyBUcmFjayBpZiB3ZSdyZSBpbnNpZGUgcXVvdGVzIChmb3IgcHJvcGVydHkgbmFtZXMgd2l0aCBzcGVjaWFsIGNoYXJzKVxuICBsZXQgaW5RdW90ZXMgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IHBhdGhbaV07XG4gICAgaWYgKGNoYXIgPT09ICdbJyAmJiAhaW5RdW90ZXMpIHtcbiAgICAgIC8vIFdoZW4gZW50ZXJpbmcgYnJhY2tldHMsIHB1c2ggYW55IGFjY3VtdWxhdGVkIHNlZ21lbnQgYWZ0ZXIgc3BsaXR0aW5nIG9uIGRvdHNcbiAgICAgIGlmIChjdXJyZW50U2VnbWVudCkge1xuICAgICAgICBzZWdtZW50cy5wdXNoKC4uLmN1cnJlbnRTZWdtZW50LnNwbGl0KCcuJykuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgY3VycmVudFNlZ21lbnQgPSAnJztcbiAgICAgIH1cbiAgICAgIGluQnJhY2tldHMgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChjaGFyID09PSAnXScgJiYgIWluUXVvdGVzKSB7XG4gICAgICBpZiAoY3VycmVudFNlZ21lbnQpIHtcbiAgICAgICAgLy8gSGFuZGxlIG51bWVyaWMgaW5kaWNlcyAoZS5nLiBhcnJbMF0pXG4gICAgICAgIGlmICgvXlxcZCskLy50ZXN0KGN1cnJlbnRTZWdtZW50KSkge1xuICAgICAgICAgIHNlZ21lbnRzLnB1c2goY3VycmVudFNlZ21lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEhhbmRsZSBxdW90ZWQgcHJvcGVydHkgbmFtZXMgKGUuZy4gb2JqW1wiZm9vLmJhclwiXSlcbiAgICAgICAgICBzZWdtZW50cy5wdXNoKGN1cnJlbnRTZWdtZW50LnJlcGxhY2UoL15cInxcIiQvZywgJycpKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50U2VnbWVudCA9ICcnO1xuICAgICAgfVxuICAgICAgaW5CcmFja2V0cyA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICAvLyBUb2dnbGUgcXVvdGUgc3RhdGUgZm9yIGhhbmRsaW5nIHF1b3RlZCBwcm9wZXJ0eSBuYW1lc1xuICAgICAgaW5RdW90ZXMgPSAhaW5RdW90ZXM7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGNoYXIgPT09ICcuJyAmJiAhaW5CcmFja2V0cyAmJiAhaW5RdW90ZXMpIHtcbiAgICAgIC8vIE9uIGRvdHMgb3V0c2lkZSBicmFja2V0cy9xdW90ZXMsIHB1c2ggY3VycmVudCBzZWdtZW50XG4gICAgICBpZiAoY3VycmVudFNlZ21lbnQpIHtcbiAgICAgICAgc2VnbWVudHMucHVzaChjdXJyZW50U2VnbWVudCk7XG4gICAgICAgIGN1cnJlbnRTZWdtZW50ID0gJyc7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY3VycmVudFNlZ21lbnQgKz0gY2hhcjtcbiAgfVxuXG4gIC8vIFB1c2ggYW55IHJlbWFpbmluZyBzZWdtZW50IGFmdGVyIHNwbGl0dGluZyBvbiBkb3RzXG4gIGlmIChjdXJyZW50U2VnbWVudCkge1xuICAgIHNlZ21lbnRzLnB1c2goLi4uY3VycmVudFNlZ21lbnQuc3BsaXQoJy4nKS5maWx0ZXIoQm9vbGVhbikpO1xuICB9XG4gIHJldHVybiBzZWdtZW50cztcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN0YW5kYXJkSXNzdWVzKGVycm9yLCBwYXJlbnRQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJlbnRQYXRoID8gYCR7cGFyZW50UGF0aH0uJHtlcnJvci5wYXRofWAgOiBlcnJvci5wYXRoO1xuICByZXR1cm4gZXJyb3IuZXJyb3JzLm1hcChlcnIgPT4gKHtcbiAgICBtZXNzYWdlOiBlcnIsXG4gICAgcGF0aDogY3JlYXRlU3RhbmRhcmRQYXRoKHBhdGgpXG4gIH0pKTtcbn1cbmZ1bmN0aW9uIGlzc3Vlc0Zyb21WYWxpZGF0aW9uRXJyb3IoZXJyb3IsIHBhcmVudFBhdGgpIHtcbiAgdmFyIF9lcnJvciRpbm5lcjtcbiAgaWYgKCEoKF9lcnJvciRpbm5lciA9IGVycm9yLmlubmVyKSAhPSBudWxsICYmIF9lcnJvciRpbm5lci5sZW5ndGgpICYmIGVycm9yLmVycm9ycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gY3JlYXRlU3RhbmRhcmRJc3N1ZXMoZXJyb3IsIHBhcmVudFBhdGgpO1xuICB9XG4gIGNvbnN0IHBhdGggPSBwYXJlbnRQYXRoID8gYCR7cGFyZW50UGF0aH0uJHtlcnJvci5wYXRofWAgOiBlcnJvci5wYXRoO1xuICByZXR1cm4gZXJyb3IuaW5uZXIuZmxhdE1hcChlcnIgPT4gaXNzdWVzRnJvbVZhbGlkYXRpb25FcnJvcihlcnIsIHBhdGgpKTtcbn1cblxuLy8gSWYgYEN1c3RvbVNjaGVtYU1ldGFgIGlzbid0IGV4dGVuZGVkIHdpdGggYW55IGtleXMsIHdlJ2xsIGZhbGwgYmFjayB0byBhXG4vLyBsb29zZSBSZWNvcmQgZGVmaW5pdGlvbiBhbGxvd2luZyBmcmVlIGZvcm0gdXNhZ2UuXG5jbGFzcyBTY2hlbWEge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy50eXBlID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwcyA9IFtdO1xuICAgIHRoaXMudGVzdHMgPSB2b2lkIDA7XG4gICAgdGhpcy50cmFuc2Zvcm1zID0gdm9pZCAwO1xuICAgIHRoaXMuY29uZGl0aW9ucyA9IFtdO1xuICAgIHRoaXMuX211dGF0ZSA9IHZvaWQgMDtcbiAgICB0aGlzLmludGVybmFsVGVzdHMgPSB7fTtcbiAgICB0aGlzLl93aGl0ZWxpc3QgPSBuZXcgUmVmZXJlbmNlU2V0KCk7XG4gICAgdGhpcy5fYmxhY2tsaXN0ID0gbmV3IFJlZmVyZW5jZVNldCgpO1xuICAgIHRoaXMuZXhjbHVzaXZlVGVzdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX3R5cGVDaGVjayA9IHZvaWQgMDtcbiAgICB0aGlzLnNwZWMgPSB2b2lkIDA7XG4gICAgdGhpcy50ZXN0cyA9IFtdO1xuICAgIHRoaXMudHJhbnNmb3JtcyA9IFtdO1xuICAgIHRoaXMud2l0aE11dGF0aW9uKCgpID0+IHtcbiAgICAgIHRoaXMudHlwZUVycm9yKG1peGVkLm5vdFR5cGUpO1xuICAgIH0pO1xuICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcbiAgICB0aGlzLl90eXBlQ2hlY2sgPSBvcHRpb25zLmNoZWNrO1xuICAgIHRoaXMuc3BlYyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgc3RyaXA6IGZhbHNlLFxuICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICAgIGFib3J0RWFybHk6IHRydWUsXG4gICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICBkaXNhYmxlU3RhY2tUcmFjZTogZmFsc2UsXG4gICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgIGNvZXJjZTogdHJ1ZVxuICAgIH0sIG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc3BlYyk7XG4gICAgdGhpcy53aXRoTXV0YXRpb24ocyA9PiB7XG4gICAgICBzLm5vbk51bGxhYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBUT0RPOiByZW1vdmVcbiAgZ2V0IF90eXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbiAgY2xvbmUoc3BlYykge1xuICAgIGlmICh0aGlzLl9tdXRhdGUpIHtcbiAgICAgIGlmIChzcGVjKSBPYmplY3QuYXNzaWduKHRoaXMuc3BlYywgc3BlYyk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgbmVzdGVkIHZhbHVlIGlzIGEgc2NoZW1hIHdlIGNhbiBza2lwIGNsb25pbmcsIHNpbmNlXG4gICAgLy8gdGhleSBhcmUgYWxyZWFkeSBpbW11dGFibGVcbiAgICBjb25zdCBuZXh0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykpO1xuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIHJlYWRvbmx5XG4gICAgbmV4dC50eXBlID0gdGhpcy50eXBlO1xuICAgIG5leHQuX3R5cGVDaGVjayA9IHRoaXMuX3R5cGVDaGVjaztcbiAgICBuZXh0Ll93aGl0ZWxpc3QgPSB0aGlzLl93aGl0ZWxpc3QuY2xvbmUoKTtcbiAgICBuZXh0Ll9ibGFja2xpc3QgPSB0aGlzLl9ibGFja2xpc3QuY2xvbmUoKTtcbiAgICBuZXh0LmludGVybmFsVGVzdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmludGVybmFsVGVzdHMpO1xuICAgIG5leHQuZXhjbHVzaXZlVGVzdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmV4Y2x1c2l2ZVRlc3RzKTtcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyByZWFkb25seVxuICAgIG5leHQuZGVwcyA9IFsuLi50aGlzLmRlcHNdO1xuICAgIG5leHQuY29uZGl0aW9ucyA9IFsuLi50aGlzLmNvbmRpdGlvbnNdO1xuICAgIG5leHQudGVzdHMgPSBbLi4udGhpcy50ZXN0c107XG4gICAgbmV4dC50cmFuc2Zvcm1zID0gWy4uLnRoaXMudHJhbnNmb3Jtc107XG4gICAgbmV4dC5zcGVjID0gY2xvbmUoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zcGVjLCBzcGVjKSk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgbGFiZWwobGFiZWwpIHtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBuZXh0LnNwZWMubGFiZWwgPSBsYWJlbDtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuICBtZXRhKC4uLmFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnNwZWMubWV0YTtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBuZXh0LnNwZWMubWV0YSA9IE9iamVjdC5hc3NpZ24obmV4dC5zcGVjLm1ldGEgfHwge30sIGFyZ3NbMF0pO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG4gIHdpdGhNdXRhdGlvbihmbikge1xuICAgIGxldCBiZWZvcmUgPSB0aGlzLl9tdXRhdGU7XG4gICAgdGhpcy5fbXV0YXRlID0gdHJ1ZTtcbiAgICBsZXQgcmVzdWx0ID0gZm4odGhpcyk7XG4gICAgdGhpcy5fbXV0YXRlID0gYmVmb3JlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgY29uY2F0KHNjaGVtYSkge1xuICAgIGlmICghc2NoZW1hIHx8IHNjaGVtYSA9PT0gdGhpcykgcmV0dXJuIHRoaXM7XG4gICAgaWYgKHNjaGVtYS50eXBlICE9PSB0aGlzLnR5cGUgJiYgdGhpcy50eXBlICE9PSAnbWl4ZWQnKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBZb3UgY2Fubm90IFxcYGNvbmNhdCgpXFxgIHNjaGVtYSdzIG9mIGRpZmZlcmVudCB0eXBlczogJHt0aGlzLnR5cGV9IGFuZCAke3NjaGVtYS50eXBlfWApO1xuICAgIGxldCBiYXNlID0gdGhpcztcbiAgICBsZXQgY29tYmluZWQgPSBzY2hlbWEuY2xvbmUoKTtcbiAgICBjb25zdCBtZXJnZWRTcGVjID0gT2JqZWN0LmFzc2lnbih7fSwgYmFzZS5zcGVjLCBjb21iaW5lZC5zcGVjKTtcbiAgICBjb21iaW5lZC5zcGVjID0gbWVyZ2VkU3BlYztcbiAgICBjb21iaW5lZC5pbnRlcm5hbFRlc3RzID0gT2JqZWN0LmFzc2lnbih7fSwgYmFzZS5pbnRlcm5hbFRlc3RzLCBjb21iaW5lZC5pbnRlcm5hbFRlc3RzKTtcblxuICAgIC8vIG1hbnVhbGx5IG1lcmdlIHRoZSBibGFja2xpc3Qvd2hpdGVsaXN0ICh0aGUgb3RoZXIgYHNjaGVtYWAgdGFrZXNcbiAgICAvLyBwcmVjZWRlbmNlIGluIGNhc2Ugb2YgY29uZmxpY3RzKVxuICAgIGNvbWJpbmVkLl93aGl0ZWxpc3QgPSBiYXNlLl93aGl0ZWxpc3QubWVyZ2Uoc2NoZW1hLl93aGl0ZWxpc3QsIHNjaGVtYS5fYmxhY2tsaXN0KTtcbiAgICBjb21iaW5lZC5fYmxhY2tsaXN0ID0gYmFzZS5fYmxhY2tsaXN0Lm1lcmdlKHNjaGVtYS5fYmxhY2tsaXN0LCBzY2hlbWEuX3doaXRlbGlzdCk7XG5cbiAgICAvLyBzdGFydCB3aXRoIHRoZSBjdXJyZW50IHRlc3RzXG4gICAgY29tYmluZWQudGVzdHMgPSBiYXNlLnRlc3RzO1xuICAgIGNvbWJpbmVkLmV4Y2x1c2l2ZVRlc3RzID0gYmFzZS5leGNsdXNpdmVUZXN0cztcblxuICAgIC8vIG1hbnVhbGx5IGFkZCB0aGUgbmV3IHRlc3RzIHRvIGVuc3VyZVxuICAgIC8vIHRoZSBkZWR1cGluZyBsb2dpYyBpcyBjb25zaXN0ZW50XG4gICAgY29tYmluZWQud2l0aE11dGF0aW9uKG5leHQgPT4ge1xuICAgICAgc2NoZW1hLnRlc3RzLmZvckVhY2goZm4gPT4ge1xuICAgICAgICBuZXh0LnRlc3QoZm4uT1BUSU9OUyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb21iaW5lZC50cmFuc2Zvcm1zID0gWy4uLmJhc2UudHJhbnNmb3JtcywgLi4uY29tYmluZWQudHJhbnNmb3Jtc107XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xuICB9XG4gIGlzVHlwZSh2KSB7XG4gICAgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuc3BlYy5udWxsYWJsZSAmJiB2ID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnNwZWMub3B0aW9uYWwgJiYgdiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3R5cGVDaGVjayh2KTtcbiAgfVxuICByZXNvbHZlKG9wdGlvbnMpIHtcbiAgICBsZXQgc2NoZW1hID0gdGhpcztcbiAgICBpZiAoc2NoZW1hLmNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICBsZXQgY29uZGl0aW9ucyA9IHNjaGVtYS5jb25kaXRpb25zO1xuICAgICAgc2NoZW1hID0gc2NoZW1hLmNsb25lKCk7XG4gICAgICBzY2hlbWEuY29uZGl0aW9ucyA9IFtdO1xuICAgICAgc2NoZW1hID0gY29uZGl0aW9ucy5yZWR1Y2UoKHByZXZTY2hlbWEsIGNvbmRpdGlvbikgPT4gY29uZGl0aW9uLnJlc29sdmUocHJldlNjaGVtYSwgb3B0aW9ucyksIHNjaGVtYSk7XG4gICAgICBzY2hlbWEgPSBzY2hlbWEucmVzb2x2ZShvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYTtcbiAgfVxuICByZXNvbHZlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF9vcHRpb25zJHN0cmljdCwgX29wdGlvbnMkYWJvcnRFYXJseSwgX29wdGlvbnMkcmVjdXJzaXZlLCBfb3B0aW9ucyRkaXNhYmxlU3RhY2s7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgIGZyb206IG9wdGlvbnMuZnJvbSB8fCBbXSxcbiAgICAgIHN0cmljdDogKF9vcHRpb25zJHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0KSAhPSBudWxsID8gX29wdGlvbnMkc3RyaWN0IDogdGhpcy5zcGVjLnN0cmljdCxcbiAgICAgIGFib3J0RWFybHk6IChfb3B0aW9ucyRhYm9ydEVhcmx5ID0gb3B0aW9ucy5hYm9ydEVhcmx5KSAhPSBudWxsID8gX29wdGlvbnMkYWJvcnRFYXJseSA6IHRoaXMuc3BlYy5hYm9ydEVhcmx5LFxuICAgICAgcmVjdXJzaXZlOiAoX29wdGlvbnMkcmVjdXJzaXZlID0gb3B0aW9ucy5yZWN1cnNpdmUpICE9IG51bGwgPyBfb3B0aW9ucyRyZWN1cnNpdmUgOiB0aGlzLnNwZWMucmVjdXJzaXZlLFxuICAgICAgZGlzYWJsZVN0YWNrVHJhY2U6IChfb3B0aW9ucyRkaXNhYmxlU3RhY2sgPSBvcHRpb25zLmRpc2FibGVTdGFja1RyYWNlKSAhPSBudWxsID8gX29wdGlvbnMkZGlzYWJsZVN0YWNrIDogdGhpcy5zcGVjLmRpc2FibGVTdGFja1RyYWNlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSBjb25maWd1cmVkIHRyYW5zZm9ybSBwaXBlbGluZSBvdmVyIGFuIGlucHV0IHZhbHVlLlxuICAgKi9cblxuICBjYXN0KHZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgcmVzb2x2ZWRTY2hlbWEgPSB0aGlzLnJlc29sdmUoT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgdmFsdWVcbiAgICAgIC8vIHBhcmVudDogb3B0aW9ucy5wYXJlbnQsXG4gICAgICAvLyBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsXG4gICAgfSkpO1xuXG4gICAgbGV0IGFsbG93T3B0aW9uYWxpdHkgPSBvcHRpb25zLmFzc2VydCA9PT0gJ2lnbm9yZS1vcHRpb25hbGl0eSc7XG4gICAgbGV0IHJlc3VsdCA9IHJlc29sdmVkU2NoZW1hLl9jYXN0KHZhbHVlLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5hc3NlcnQgIT09IGZhbHNlICYmICFyZXNvbHZlZFNjaGVtYS5pc1R5cGUocmVzdWx0KSkge1xuICAgICAgaWYgKGFsbG93T3B0aW9uYWxpdHkgJiYgaXNBYnNlbnQocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gcHJpbnRWYWx1ZSh2YWx1ZSk7XG4gICAgICBsZXQgZm9ybWF0dGVkUmVzdWx0ID0gcHJpbnRWYWx1ZShyZXN1bHQpO1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIHZhbHVlIG9mICR7b3B0aW9ucy5wYXRoIHx8ICdmaWVsZCd9IGNvdWxkIG5vdCBiZSBjYXN0IHRvIGEgdmFsdWUgYCArIGB0aGF0IHNhdGlzZmllcyB0aGUgc2NoZW1hIHR5cGU6IFwiJHtyZXNvbHZlZFNjaGVtYS50eXBlfVwiLiBcXG5cXG5gICsgYGF0dGVtcHRlZCB2YWx1ZTogJHtmb3JtYXR0ZWRWYWx1ZX0gXFxuYCArIChmb3JtYXR0ZWRSZXN1bHQgIT09IGZvcm1hdHRlZFZhbHVlID8gYHJlc3VsdCBvZiBjYXN0OiAke2Zvcm1hdHRlZFJlc3VsdH1gIDogJycpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBfY2FzdChyYXdWYWx1ZSwgb3B0aW9ucykge1xuICAgIGxldCB2YWx1ZSA9IHJhd1ZhbHVlID09PSB1bmRlZmluZWQgPyByYXdWYWx1ZSA6IHRoaXMudHJhbnNmb3Jtcy5yZWR1Y2UoKHByZXZWYWx1ZSwgZm4pID0+IGZuLmNhbGwodGhpcywgcHJldlZhbHVlLCByYXdWYWx1ZSwgdGhpcywgb3B0aW9ucyksIHJhd1ZhbHVlKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUgPSB0aGlzLmdldERlZmF1bHQob3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBfdmFsaWRhdGUoX3ZhbHVlLCBvcHRpb25zID0ge30sIHBhbmljLCBuZXh0KSB7XG4gICAgbGV0IHtcbiAgICAgIHBhdGgsXG4gICAgICBvcmlnaW5hbFZhbHVlID0gX3ZhbHVlLFxuICAgICAgc3RyaWN0ID0gdGhpcy5zcGVjLnN0cmljdFxuICAgIH0gPSBvcHRpb25zO1xuICAgIGxldCB2YWx1ZSA9IF92YWx1ZTtcbiAgICBpZiAoIXN0cmljdCkge1xuICAgICAgdmFsdWUgPSB0aGlzLl9jYXN0KHZhbHVlLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgYXNzZXJ0OiBmYWxzZVxuICAgICAgfSwgb3B0aW9ucykpO1xuICAgIH1cbiAgICBsZXQgaW5pdGlhbFRlc3RzID0gW107XG4gICAgZm9yIChsZXQgdGVzdCBvZiBPYmplY3QudmFsdWVzKHRoaXMuaW50ZXJuYWxUZXN0cykpIHtcbiAgICAgIGlmICh0ZXN0KSBpbml0aWFsVGVzdHMucHVzaCh0ZXN0KTtcbiAgICB9XG4gICAgdGhpcy5ydW5UZXN0cyh7XG4gICAgICBwYXRoLFxuICAgICAgdmFsdWUsXG4gICAgICBvcmlnaW5hbFZhbHVlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHRlc3RzOiBpbml0aWFsVGVzdHNcbiAgICB9LCBwYW5pYywgaW5pdGlhbEVycm9ycyA9PiB7XG4gICAgICAvLyBldmVuIGlmIHdlIGFyZW4ndCBlbmRpbmcgZWFybHkgd2UgY2FuJ3QgcHJvY2VlZCBmdXJ0aGVyIGlmIHRoZSB0eXBlcyBhcmVuJ3QgY29ycmVjdFxuICAgICAgaWYgKGluaXRpYWxFcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBuZXh0KGluaXRpYWxFcnJvcnMsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucnVuVGVzdHMoe1xuICAgICAgICBwYXRoLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdGVzdHM6IHRoaXMudGVzdHNcbiAgICAgIH0sIHBhbmljLCBuZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHNldCBvZiB2YWxpZGF0aW9ucywgZWl0aGVyIHNjaGVtYSwgcHJvZHVjZWQgVGVzdHMgb3IgYSBuZXN0ZWRcbiAgICogc2NoZW1hIHZhbGlkYXRlIHJlc3VsdC5cbiAgICovXG4gIHJ1blRlc3RzKHJ1bk9wdGlvbnMsIHBhbmljLCBuZXh0KSB7XG4gICAgbGV0IGZpcmVkID0gZmFsc2U7XG4gICAgbGV0IHtcbiAgICAgIHRlc3RzLFxuICAgICAgdmFsdWUsXG4gICAgICBvcmlnaW5hbFZhbHVlLFxuICAgICAgcGF0aCxcbiAgICAgIG9wdGlvbnNcbiAgICB9ID0gcnVuT3B0aW9ucztcbiAgICBsZXQgcGFuaWNPbmNlID0gYXJnID0+IHtcbiAgICAgIGlmIChmaXJlZCkgcmV0dXJuO1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgcGFuaWMoYXJnLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBsZXQgbmV4dE9uY2UgPSBhcmcgPT4ge1xuICAgICAgaWYgKGZpcmVkKSByZXR1cm47XG4gICAgICBmaXJlZCA9IHRydWU7XG4gICAgICBuZXh0KGFyZywgdmFsdWUpO1xuICAgIH07XG4gICAgbGV0IGNvdW50ID0gdGVzdHMubGVuZ3RoO1xuICAgIGxldCBuZXN0ZWRFcnJvcnMgPSBbXTtcbiAgICBpZiAoIWNvdW50KSByZXR1cm4gbmV4dE9uY2UoW10pO1xuICAgIGxldCBhcmdzID0ge1xuICAgICAgdmFsdWUsXG4gICAgICBvcmlnaW5hbFZhbHVlLFxuICAgICAgcGF0aCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzY2hlbWE6IHRoaXNcbiAgICB9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRlc3QgPSB0ZXN0c1tpXTtcbiAgICAgIHRlc3QoYXJncywgcGFuaWNPbmNlLCBmdW5jdGlvbiBmaW5pc2hUZXN0UnVuKGVycikge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgQXJyYXkuaXNBcnJheShlcnIpID8gbmVzdGVkRXJyb3JzLnB1c2goLi4uZXJyKSA6IG5lc3RlZEVycm9ycy5wdXNoKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC0tY291bnQgPD0gMCkge1xuICAgICAgICAgIG5leHRPbmNlKG5lc3RlZEVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBhc05lc3RlZFRlc3Qoe1xuICAgIGtleSxcbiAgICBpbmRleCxcbiAgICBwYXJlbnQsXG4gICAgcGFyZW50UGF0aCxcbiAgICBvcmlnaW5hbFBhcmVudCxcbiAgICBvcHRpb25zXG4gIH0pIHtcbiAgICBjb25zdCBrID0ga2V5ICE9IG51bGwgPyBrZXkgOiBpbmRleDtcbiAgICBpZiAoayA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ011c3QgaW5jbHVkZSBga2V5YCBvciBgaW5kZXhgIGZvciBuZXN0ZWQgdmFsaWRhdGlvbnMnKTtcbiAgICB9XG4gICAgY29uc3QgaXNJbmRleCA9IHR5cGVvZiBrID09PSAnbnVtYmVyJztcbiAgICBsZXQgdmFsdWUgPSBwYXJlbnRba107XG4gICAgY29uc3QgdGVzdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAvLyBOZXN0ZWQgdmFsaWRhdGlvbnMgZmllbGRzIGFyZSBhbHdheXMgc3RyaWN0OlxuICAgICAgLy8gICAgMS4gcGFyZW50IGlzbid0IHN0cmljdCBzbyB0aGUgY2FzdGluZyB3aWxsIGFsc28gaGF2ZSBjYXN0IGlubmVyIHZhbHVlc1xuICAgICAgLy8gICAgMi4gcGFyZW50IGlzIHN0cmljdCBpbiB3aGljaCBjYXNlIHRoZSBuZXN0ZWQgdmFsdWVzIHdlcmVuJ3QgY2FzdCBlaXRoZXJcbiAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgIHBhcmVudCxcbiAgICAgIHZhbHVlLFxuICAgICAgb3JpZ2luYWxWYWx1ZTogb3JpZ2luYWxQYXJlbnRba10sXG4gICAgICAvLyBGSVhNRTogdGVzdHMgZGVwZW5kIG9uIGBpbmRleGAgYmVpbmcgcGFzc2VkIGFyb3VuZCBkZWVwbHksXG4gICAgICAvLyAgIHdlIHNob3VsZCBub3QgbGV0IHRoZSBvcHRpb25zLmtleS9pbmRleCBibGVlZCB0aHJvdWdoXG4gICAgICBrZXk6IHVuZGVmaW5lZCxcbiAgICAgIC8vIGluZGV4OiB1bmRlZmluZWQsXG4gICAgICBbaXNJbmRleCA/ICdpbmRleCcgOiAna2V5J106IGssXG4gICAgICBwYXRoOiBpc0luZGV4IHx8IGsuaW5jbHVkZXMoJy4nKSA/IGAke3BhcmVudFBhdGggfHwgJyd9WyR7aXNJbmRleCA/IGsgOiBgXCIke2t9XCJgfV1gIDogKHBhcmVudFBhdGggPyBgJHtwYXJlbnRQYXRofS5gIDogJycpICsga2V5XG4gICAgfSk7XG4gICAgcmV0dXJuIChfLCBwYW5pYywgbmV4dCkgPT4gdGhpcy5yZXNvbHZlKHRlc3RPcHRpb25zKS5fdmFsaWRhdGUodmFsdWUsIHRlc3RPcHRpb25zLCBwYW5pYywgbmV4dCk7XG4gIH1cbiAgdmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICB2YXIgX29wdGlvbnMkZGlzYWJsZVN0YWNrMjtcbiAgICBsZXQgc2NoZW1hID0gdGhpcy5yZXNvbHZlKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgIHZhbHVlXG4gICAgfSkpO1xuICAgIGxldCBkaXNhYmxlU3RhY2tUcmFjZSA9IChfb3B0aW9ucyRkaXNhYmxlU3RhY2syID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5kaXNhYmxlU3RhY2tUcmFjZSkgIT0gbnVsbCA/IF9vcHRpb25zJGRpc2FibGVTdGFjazIgOiBzY2hlbWEuc3BlYy5kaXNhYmxlU3RhY2tUcmFjZTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gc2NoZW1hLl92YWxpZGF0ZSh2YWx1ZSwgb3B0aW9ucywgKGVycm9yLCBwYXJzZWQpID0+IHtcbiAgICAgIGlmIChWYWxpZGF0aW9uRXJyb3IuaXNFcnJvcihlcnJvcikpIGVycm9yLnZhbHVlID0gcGFyc2VkO1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9LCAoZXJyb3JzLCB2YWxpZGF0ZWQpID0+IHtcbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSByZWplY3QobmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMsIHZhbGlkYXRlZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGRpc2FibGVTdGFja1RyYWNlKSk7ZWxzZSByZXNvbHZlKHZhbGlkYXRlZCk7XG4gICAgfSkpO1xuICB9XG4gIHZhbGlkYXRlU3luYyh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHZhciBfb3B0aW9ucyRkaXNhYmxlU3RhY2szO1xuICAgIGxldCBzY2hlbWEgPSB0aGlzLnJlc29sdmUoT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgdmFsdWVcbiAgICB9KSk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgZGlzYWJsZVN0YWNrVHJhY2UgPSAoX29wdGlvbnMkZGlzYWJsZVN0YWNrMyA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZGlzYWJsZVN0YWNrVHJhY2UpICE9IG51bGwgPyBfb3B0aW9ucyRkaXNhYmxlU3RhY2szIDogc2NoZW1hLnNwZWMuZGlzYWJsZVN0YWNrVHJhY2U7XG4gICAgc2NoZW1hLl92YWxpZGF0ZSh2YWx1ZSwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgc3luYzogdHJ1ZVxuICAgIH0pLCAoZXJyb3IsIHBhcnNlZCkgPT4ge1xuICAgICAgaWYgKFZhbGlkYXRpb25FcnJvci5pc0Vycm9yKGVycm9yKSkgZXJyb3IudmFsdWUgPSBwYXJzZWQ7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LCAoZXJyb3JzLCB2YWxpZGF0ZWQpID0+IHtcbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycywgdmFsdWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBkaXNhYmxlU3RhY2tUcmFjZSk7XG4gICAgICByZXN1bHQgPSB2YWxpZGF0ZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpc1ZhbGlkKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpLnRoZW4oKCkgPT4gdHJ1ZSwgZXJyID0+IHtcbiAgICAgIGlmIChWYWxpZGF0aW9uRXJyb3IuaXNFcnJvcihlcnIpKSByZXR1cm4gZmFsc2U7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbiAgaXNWYWxpZFN5bmModmFsdWUsIG9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZVN5bmModmFsdWUsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoVmFsaWRhdGlvbkVycm9yLmlzRXJyb3IoZXJyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuICBfZ2V0RGVmYXVsdChvcHRpb25zKSB7XG4gICAgbGV0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuc3BlYy5kZWZhdWx0O1xuICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUuY2FsbCh0aGlzLCBvcHRpb25zKSA6IGNsb25lKGRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgZ2V0RGVmYXVsdChvcHRpb25zXG4gIC8vIElmIHNjaGVtYSBpcyBkZWZhdWx0ZWQgd2Uga25vdyBpdCdzIGF0IGxlYXN0IG5vdCB1bmRlZmluZWRcbiAgKSB7XG4gICAgbGV0IHNjaGVtYSA9IHRoaXMucmVzb2x2ZShvcHRpb25zIHx8IHt9KTtcbiAgICByZXR1cm4gc2NoZW1hLl9nZXREZWZhdWx0KG9wdGlvbnMpO1xuICB9XG4gIGRlZmF1bHQoZGVmKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXREZWZhdWx0KCk7XG4gICAgfVxuICAgIGxldCBuZXh0ID0gdGhpcy5jbG9uZSh7XG4gICAgICBkZWZhdWx0OiBkZWZcbiAgICB9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuICBzdHJpY3QoaXNTdHJpY3QgPSB0cnVlKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoe1xuICAgICAgc3RyaWN0OiBpc1N0cmljdFxuICAgIH0pO1xuICB9XG4gIG51bGxhYmlsaXR5KG51bGxhYmxlLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMuY2xvbmUoe1xuICAgICAgbnVsbGFibGVcbiAgICB9KTtcbiAgICBuZXh0LmludGVybmFsVGVzdHMubnVsbGFibGUgPSBjcmVhdGVWYWxpZGF0aW9uKHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnbnVsbGFibGUnLFxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyB0aGlzLnNjaGVtYS5zcGVjLm51bGxhYmxlIDogdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuICBvcHRpb25hbGl0eShvcHRpb25hbCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLmNsb25lKHtcbiAgICAgIG9wdGlvbmFsXG4gICAgfSk7XG4gICAgbmV4dC5pbnRlcm5hbFRlc3RzLm9wdGlvbmFsaXR5ID0gY3JlYXRlVmFsaWRhdGlvbih7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ29wdGlvbmFsaXR5JyxcbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB0aGlzLnNjaGVtYS5zcGVjLm9wdGlvbmFsIDogdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuICBvcHRpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25hbGl0eSh0cnVlKTtcbiAgfVxuICBkZWZpbmVkKG1lc3NhZ2UgPSBtaXhlZC5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uYWxpdHkoZmFsc2UsIG1lc3NhZ2UpO1xuICB9XG4gIG51bGxhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLm51bGxhYmlsaXR5KHRydWUpO1xuICB9XG4gIG5vbk51bGxhYmxlKG1lc3NhZ2UgPSBtaXhlZC5ub3ROdWxsKSB7XG4gICAgcmV0dXJuIHRoaXMubnVsbGFiaWxpdHkoZmFsc2UsIG1lc3NhZ2UpO1xuICB9XG4gIHJlcXVpcmVkKG1lc3NhZ2UgPSBtaXhlZC5yZXF1aXJlZCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkud2l0aE11dGF0aW9uKG5leHQgPT4gbmV4dC5ub25OdWxsYWJsZShtZXNzYWdlKS5kZWZpbmVkKG1lc3NhZ2UpKTtcbiAgfVxuICBub3RSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLndpdGhNdXRhdGlvbihuZXh0ID0+IG5leHQubnVsbGFibGUoKS5vcHRpb25hbCgpKTtcbiAgfVxuICB0cmFuc2Zvcm0oZm4pIHtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBuZXh0LnRyYW5zZm9ybXMucHVzaChmbik7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHRlc3QgZnVuY3Rpb24gdG8gdGhlIHNjaGVtYSdzIHF1ZXVlIG9mIHRlc3RzLlxuICAgKiB0ZXN0cyBjYW4gYmUgZXhjbHVzaXZlIG9yIG5vbi1leGNsdXNpdmUuXG4gICAqXG4gICAqIC0gZXhjbHVzaXZlIHRlc3RzLCB3aWxsIHJlcGxhY2UgYW55IGV4aXN0aW5nIHRlc3RzIG9mIHRoZSBzYW1lIG5hbWUuXG4gICAqIC0gbm9uLWV4Y2x1c2l2ZTogY2FuIGJlIHN0YWNrZWRcbiAgICpcbiAgICogSWYgYSBub24tZXhjbHVzaXZlIHRlc3QgaXMgYWRkZWQgdG8gYSBzY2hlbWEgd2l0aCBhbiBleGNsdXNpdmUgdGVzdCBvZiB0aGUgc2FtZSBuYW1lXG4gICAqIHRoZSBleGNsdXNpdmUgdGVzdCBpcyByZW1vdmVkIGFuZCBmdXJ0aGVyIHRlc3RzIG9mIHRoZSBzYW1lIG5hbWUgd2lsbCBiZSBzdGFja2VkLlxuICAgKlxuICAgKiBJZiBhbiBleGNsdXNpdmUgdGVzdCBpcyBhZGRlZCB0byBhIHNjaGVtYSB3aXRoIG5vbi1leGNsdXNpdmUgdGVzdHMgb2YgdGhlIHNhbWUgbmFtZVxuICAgKiB0aGUgcHJldmlvdXMgdGVzdHMgYXJlIHJlbW92ZWQgYW5kIGZ1cnRoZXIgdGVzdHMgb2YgdGhlIHNhbWUgbmFtZSB3aWxsIHJlcGxhY2UgZWFjaCBvdGhlci5cbiAgICovXG5cbiAgdGVzdCguLi5hcmdzKSB7XG4gICAgbGV0IG9wdHM7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3B0cyA9IHtcbiAgICAgICAgICB0ZXN0OiBhcmdzWzBdXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRzID0gYXJnc1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICBvcHRzID0ge1xuICAgICAgICBuYW1lOiBhcmdzWzBdLFxuICAgICAgICB0ZXN0OiBhcmdzWzFdXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzID0ge1xuICAgICAgICBuYW1lOiBhcmdzWzBdLFxuICAgICAgICBtZXNzYWdlOiBhcmdzWzFdLFxuICAgICAgICB0ZXN0OiBhcmdzWzJdXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAob3B0cy5tZXNzYWdlID09PSB1bmRlZmluZWQpIG9wdHMubWVzc2FnZSA9IG1peGVkLmRlZmF1bHQ7XG4gICAgaWYgKHR5cGVvZiBvcHRzLnRlc3QgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2B0ZXN0YCBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlcnMnKTtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgdmFsaWRhdGUgPSBjcmVhdGVWYWxpZGF0aW9uKG9wdHMpO1xuICAgIGxldCBpc0V4Y2x1c2l2ZSA9IG9wdHMuZXhjbHVzaXZlIHx8IG9wdHMubmFtZSAmJiBuZXh0LmV4Y2x1c2l2ZVRlc3RzW29wdHMubmFtZV0gPT09IHRydWU7XG4gICAgaWYgKG9wdHMuZXhjbHVzaXZlKSB7XG4gICAgICBpZiAoIW9wdHMubmFtZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhjbHVzaXZlIHRlc3RzIG11c3QgcHJvdmlkZSBhIHVuaXF1ZSBgbmFtZWAgaWRlbnRpZnlpbmcgdGhlIHRlc3QnKTtcbiAgICB9XG4gICAgaWYgKG9wdHMubmFtZSkgbmV4dC5leGNsdXNpdmVUZXN0c1tvcHRzLm5hbWVdID0gISFvcHRzLmV4Y2x1c2l2ZTtcbiAgICBuZXh0LnRlc3RzID0gbmV4dC50ZXN0cy5maWx0ZXIoZm4gPT4ge1xuICAgICAgaWYgKGZuLk9QVElPTlMubmFtZSA9PT0gb3B0cy5uYW1lKSB7XG4gICAgICAgIGlmIChpc0V4Y2x1c2l2ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZm4uT1BUSU9OUy50ZXN0ID09PSB2YWxpZGF0ZS5PUFRJT05TLnRlc3QpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIG5leHQudGVzdHMucHVzaCh2YWxpZGF0ZSk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgd2hlbihrZXlzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGtleXMpICYmIHR5cGVvZiBrZXlzICE9PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucyA9IGtleXM7XG4gICAgICBrZXlzID0gJy4nO1xuICAgIH1cbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgZGVwcyA9IHRvQXJyYXkoa2V5cykubWFwKGtleSA9PiBuZXcgUmVmZXJlbmNlKGtleSkpO1xuICAgIGRlcHMuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZSByZWFkb25seSBhcnJheVxuICAgICAgaWYgKGRlcC5pc1NpYmxpbmcpIG5leHQuZGVwcy5wdXNoKGRlcC5rZXkpO1xuICAgIH0pO1xuICAgIG5leHQuY29uZGl0aW9ucy5wdXNoKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nID8gbmV3IENvbmRpdGlvbihkZXBzLCBvcHRpb25zKSA6IENvbmRpdGlvbi5mcm9tT3B0aW9ucyhkZXBzLCBvcHRpb25zKSk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgdHlwZUVycm9yKG1lc3NhZ2UpIHtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBuZXh0LmludGVybmFsVGVzdHMudHlwZUVycm9yID0gY3JlYXRlVmFsaWRhdGlvbih7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ3R5cGVFcnJvcicsXG4gICAgICBza2lwQWJzZW50OiB0cnVlLFxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuc2NoZW1hLl90eXBlQ2hlY2sodmFsdWUpKSByZXR1cm4gdGhpcy5jcmVhdGVFcnJvcih7XG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnNjaGVtYS50eXBlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgb25lT2YoZW51bXMsIG1lc3NhZ2UgPSBtaXhlZC5vbmVPZikge1xuICAgIGxldCBuZXh0ID0gdGhpcy5jbG9uZSgpO1xuICAgIGVudW1zLmZvckVhY2godmFsID0+IHtcbiAgICAgIG5leHQuX3doaXRlbGlzdC5hZGQodmFsKTtcbiAgICAgIG5leHQuX2JsYWNrbGlzdC5kZWxldGUodmFsKTtcbiAgICB9KTtcbiAgICBuZXh0LmludGVybmFsVGVzdHMud2hpdGVMaXN0ID0gY3JlYXRlVmFsaWRhdGlvbih7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ29uZU9mJyxcbiAgICAgIHNraXBBYnNlbnQ6IHRydWUsXG4gICAgICB0ZXN0KHZhbHVlKSB7XG4gICAgICAgIGxldCB2YWxpZHMgPSB0aGlzLnNjaGVtYS5fd2hpdGVsaXN0O1xuICAgICAgICBsZXQgcmVzb2x2ZWQgPSB2YWxpZHMucmVzb2x2ZUFsbCh0aGlzLnJlc29sdmUpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWQuaW5jbHVkZXModmFsdWUpID8gdHJ1ZSA6IHRoaXMuY3JlYXRlRXJyb3Ioe1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgdmFsdWVzOiBBcnJheS5mcm9tKHZhbGlkcykuam9pbignLCAnKSxcbiAgICAgICAgICAgIHJlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuICBub3RPbmVPZihlbnVtcywgbWVzc2FnZSA9IG1peGVkLm5vdE9uZU9mKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLmNsb25lKCk7XG4gICAgZW51bXMuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgbmV4dC5fYmxhY2tsaXN0LmFkZCh2YWwpO1xuICAgICAgbmV4dC5fd2hpdGVsaXN0LmRlbGV0ZSh2YWwpO1xuICAgIH0pO1xuICAgIG5leHQuaW50ZXJuYWxUZXN0cy5ibGFja2xpc3QgPSBjcmVhdGVWYWxpZGF0aW9uKHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnbm90T25lT2YnLFxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICBsZXQgaW52YWxpZHMgPSB0aGlzLnNjaGVtYS5fYmxhY2tsaXN0O1xuICAgICAgICBsZXQgcmVzb2x2ZWQgPSBpbnZhbGlkcy5yZXNvbHZlQWxsKHRoaXMucmVzb2x2ZSk7XG4gICAgICAgIGlmIChyZXNvbHZlZC5pbmNsdWRlcyh2YWx1ZSkpIHJldHVybiB0aGlzLmNyZWF0ZUVycm9yKHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogQXJyYXkuZnJvbShpbnZhbGlkcykuam9pbignLCAnKSxcbiAgICAgICAgICAgIHJlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgc3RyaXAoc3RyaXAgPSB0cnVlKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLmNsb25lKCk7XG4gICAgbmV4dC5zcGVjLnN0cmlwID0gc3RyaXA7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc2VyaWFsaXplZCBkZXNjcmlwdGlvbiBvZiB0aGUgc2NoZW1hIGluY2x1ZGluZyB2YWxpZGF0aW9ucywgZmxhZ3MsIHR5cGVzIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgUHJvdmlkZSBhbnkgbmVlZGVkIGNvbnRleHQgZm9yIHJlc29sdmluZyBydW50aW1lIHNjaGVtYSBhbHRlcmF0aW9ucyAobGF6eSwgd2hlbiBjb25kaXRpb25zLCBldGMpLlxuICAgKi9cbiAgZGVzY3JpYmUob3B0aW9ucykge1xuICAgIGNvbnN0IG5leHQgPSAob3B0aW9ucyA/IHRoaXMucmVzb2x2ZShvcHRpb25zKSA6IHRoaXMpLmNsb25lKCk7XG4gICAgY29uc3Qge1xuICAgICAgbGFiZWwsXG4gICAgICBtZXRhLFxuICAgICAgb3B0aW9uYWwsXG4gICAgICBudWxsYWJsZVxuICAgIH0gPSBuZXh0LnNwZWM7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB7XG4gICAgICBtZXRhLFxuICAgICAgbGFiZWwsXG4gICAgICBvcHRpb25hbCxcbiAgICAgIG51bGxhYmxlLFxuICAgICAgZGVmYXVsdDogbmV4dC5nZXREZWZhdWx0KG9wdGlvbnMpLFxuICAgICAgdHlwZTogbmV4dC50eXBlLFxuICAgICAgb25lT2Y6IG5leHQuX3doaXRlbGlzdC5kZXNjcmliZSgpLFxuICAgICAgbm90T25lT2Y6IG5leHQuX2JsYWNrbGlzdC5kZXNjcmliZSgpLFxuICAgICAgdGVzdHM6IG5leHQudGVzdHMuZmlsdGVyKChuLCBpZHgsIGxpc3QpID0+IGxpc3QuZmluZEluZGV4KGMgPT4gYy5PUFRJT05TLm5hbWUgPT09IG4uT1BUSU9OUy5uYW1lKSA9PT0gaWR4KS5tYXAoZm4gPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBmbi5PUFRJT05TLnBhcmFtcyAmJiBvcHRpb25zID8gcmVzb2x2ZVBhcmFtcyhPYmplY3QuYXNzaWduKHt9LCBmbi5PUFRJT05TLnBhcmFtcyksIG9wdGlvbnMpIDogZm4uT1BUSU9OUy5wYXJhbXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogZm4uT1BUSU9OUy5uYW1lLFxuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9O1xuICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgfVxuICBnZXQgWyd+c3RhbmRhcmQnXSgpIHtcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzO1xuICAgIGNvbnN0IHN0YW5kYXJkID0ge1xuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHZlbmRvcjogJ3l1cCcsXG4gICAgICBhc3luYyB2YWxpZGF0ZSh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNjaGVtYS52YWxpZGF0ZSh2YWx1ZSwge1xuICAgICAgICAgICAgYWJvcnRFYXJseTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlc3VsdFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzc3VlczogaXNzdWVzRnJvbVZhbGlkYXRpb25FcnJvcihlcnIpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBzdGFuZGFyZDtcbiAgfVxufVxuLy8gQHRzLWV4cGVjdC1lcnJvclxuU2NoZW1hLnByb3RvdHlwZS5fX2lzWXVwU2NoZW1hX18gPSB0cnVlO1xuZm9yIChjb25zdCBtZXRob2Qgb2YgWyd2YWxpZGF0ZScsICd2YWxpZGF0ZVN5bmMnXSkgU2NoZW1hLnByb3RvdHlwZVtgJHttZXRob2R9QXRgXSA9IGZ1bmN0aW9uIChwYXRoLCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBwYXJlbnQsXG4gICAgcGFyZW50UGF0aCxcbiAgICBzY2hlbWFcbiAgfSA9IGdldEluKHRoaXMsIHBhdGgsIHZhbHVlLCBvcHRpb25zLmNvbnRleHQpO1xuICByZXR1cm4gc2NoZW1hW21ldGhvZF0ocGFyZW50ICYmIHBhcmVudFtwYXJlbnRQYXRoXSwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgIHBhcmVudCxcbiAgICBwYXRoXG4gIH0pKTtcbn07XG5mb3IgKGNvbnN0IGFsaWFzIG9mIFsnZXF1YWxzJywgJ2lzJ10pIFNjaGVtYS5wcm90b3R5cGVbYWxpYXNdID0gU2NoZW1hLnByb3RvdHlwZS5vbmVPZjtcbmZvciAoY29uc3QgYWxpYXMgb2YgWydub3QnLCAnbm9wZSddKSBTY2hlbWEucHJvdG90eXBlW2FsaWFzXSA9IFNjaGVtYS5wcm90b3R5cGUubm90T25lT2Y7XG5cbmNvbnN0IHJldHVybnNUcnVlID0gKCkgPT4gdHJ1ZTtcbmZ1bmN0aW9uIGNyZWF0ZSQ4KHNwZWMpIHtcbiAgcmV0dXJuIG5ldyBNaXhlZFNjaGVtYShzcGVjKTtcbn1cbmNsYXNzIE1peGVkU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgY29uc3RydWN0b3Ioc3BlYykge1xuICAgIHN1cGVyKHR5cGVvZiBzcGVjID09PSAnZnVuY3Rpb24nID8ge1xuICAgICAgdHlwZTogJ21peGVkJyxcbiAgICAgIGNoZWNrOiBzcGVjXG4gICAgfSA6IE9iamVjdC5hc3NpZ24oe1xuICAgICAgdHlwZTogJ21peGVkJyxcbiAgICAgIGNoZWNrOiByZXR1cm5zVHJ1ZVxuICAgIH0sIHNwZWMpKTtcbiAgfVxufVxuY3JlYXRlJDgucHJvdG90eXBlID0gTWl4ZWRTY2hlbWEucHJvdG90eXBlO1xuXG5mdW5jdGlvbiBjcmVhdGUkNygpIHtcbiAgcmV0dXJuIG5ldyBCb29sZWFuU2NoZW1hKCk7XG59XG5jbGFzcyBCb29sZWFuU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoe1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgY2hlY2sodikge1xuICAgICAgICBpZiAodiBpbnN0YW5jZW9mIEJvb2xlYW4pIHYgPSB2LnZhbHVlT2YoKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnYm9vbGVhbic7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy53aXRoTXV0YXRpb24oKCkgPT4ge1xuICAgICAgdGhpcy50cmFuc2Zvcm0oKHZhbHVlLCBfcmF3KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNwZWMuY29lcmNlICYmICF0aGlzLmlzVHlwZSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAoL14odHJ1ZXwxKSQvaS50ZXN0KFN0cmluZyh2YWx1ZSkpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICBpZiAoL14oZmFsc2V8MCkkL2kudGVzdChTdHJpbmcodmFsdWUpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGlzVHJ1ZShtZXNzYWdlID0gYm9vbGVhbi5pc1ZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ2lzLXZhbHVlJyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB2YWx1ZTogJ3RydWUnXG4gICAgICB9LFxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaXNBYnNlbnQodmFsdWUpIHx8IHZhbHVlID09PSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGlzRmFsc2UobWVzc2FnZSA9IGJvb2xlYW4uaXNWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnRlc3Qoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG5hbWU6ICdpcy12YWx1ZScsXG4gICAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgdmFsdWU6ICdmYWxzZSdcbiAgICAgIH0sXG4gICAgICB0ZXN0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc0Fic2VudCh2YWx1ZSkgfHwgdmFsdWUgPT09IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGRlZmF1bHQoZGVmKSB7XG4gICAgcmV0dXJuIHN1cGVyLmRlZmF1bHQoZGVmKTtcbiAgfVxuICBkZWZpbmVkKG1zZykge1xuICAgIHJldHVybiBzdXBlci5kZWZpbmVkKG1zZyk7XG4gIH1cbiAgb3B0aW9uYWwoKSB7XG4gICAgcmV0dXJuIHN1cGVyLm9wdGlvbmFsKCk7XG4gIH1cbiAgcmVxdWlyZWQobXNnKSB7XG4gICAgcmV0dXJuIHN1cGVyLnJlcXVpcmVkKG1zZyk7XG4gIH1cbiAgbm90UmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHN1cGVyLm5vdFJlcXVpcmVkKCk7XG4gIH1cbiAgbnVsbGFibGUoKSB7XG4gICAgcmV0dXJuIHN1cGVyLm51bGxhYmxlKCk7XG4gIH1cbiAgbm9uTnVsbGFibGUobXNnKSB7XG4gICAgcmV0dXJuIHN1cGVyLm5vbk51bGxhYmxlKG1zZyk7XG4gIH1cbiAgc3RyaXAodikge1xuICAgIHJldHVybiBzdXBlci5zdHJpcCh2KTtcbiAgfVxufVxuY3JlYXRlJDcucHJvdG90eXBlID0gQm9vbGVhblNjaGVtYS5wcm90b3R5cGU7XG5cbi8qKlxuICogVGhpcyBmaWxlIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZSBmcm9tIHRoZSBmb2xsb3dpbmcgcmVwb3NpdG9yeTpcbiAqIERhdGUucGFyc2Ugd2l0aCBwcm9ncmVzc2l2ZSBlbmhhbmNlbWVudCBmb3IgSVNPIDg2MDEgPGh0dHBzOi8vZ2l0aHViLmNvbS9jc25vdmVyL2pzLWlzbzg2MDE+XG4gKiBOT04tQ09ORk9STUFOVCBFRElUSU9OLlxuICogwqkgMjAxMSBDb2xpbiBTbm92ZXIgPGh0dHA6Ly96ZXRhZmxlZXQuY29tPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKi9cblxuLy8gcHJldHRpZXItaWdub3JlXG4vLyAgICAgICAgICAgICAgICAxIFlZWVkgICAgICAgICAgICAgICAgMiBNTSAgICAgICAgMyBERCAgICAgICAgICAgICAgNCBISCAgICAgNSBtbSAgICAgICAgNiBzcyAgICAgICAgICAgNyBtc2VjICAgICAgICAgOCBaIDkgwrEgICAxMCB0ekhIICAgIDExIHR6bW1cbmNvbnN0IGlzb1JlZyA9IC9eKFxcZHs0fXxbKy1dXFxkezZ9KSg/Oi0/KFxcZHsyfSkoPzotPyhcXGR7Mn0pKT8pPyg/OlsgVF0/KFxcZHsyfSk6PyhcXGR7Mn0pKD86Oj8oXFxkezJ9KSg/OlssLl0oXFxkezEsfSkpPyk/KD86KFopfChbKy1dKShcXGR7Mn0pKD86Oj8oXFxkezJ9KSk/KT8pPyQvO1xuZnVuY3Rpb24gcGFyc2VJc29EYXRlKGRhdGUpIHtcbiAgY29uc3Qgc3RydWN0ID0gcGFyc2VEYXRlU3RydWN0KGRhdGUpO1xuICBpZiAoIXN0cnVjdCkgcmV0dXJuIERhdGUucGFyc2UgPyBEYXRlLnBhcnNlKGRhdGUpIDogTnVtYmVyLk5hTjtcblxuICAvLyB0aW1lc3RhbXBzIHdpdGhvdXQgdGltZXpvbmUgaWRlbnRpZmllcnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgbG9jYWwgdGltZVxuICBpZiAoc3RydWN0LnogPT09IHVuZGVmaW5lZCAmJiBzdHJ1Y3QucGx1c01pbnVzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoc3RydWN0LnllYXIsIHN0cnVjdC5tb250aCwgc3RydWN0LmRheSwgc3RydWN0LmhvdXIsIHN0cnVjdC5taW51dGUsIHN0cnVjdC5zZWNvbmQsIHN0cnVjdC5taWxsaXNlY29uZCkudmFsdWVPZigpO1xuICB9XG4gIGxldCB0b3RhbE1pbnV0ZXNPZmZzZXQgPSAwO1xuICBpZiAoc3RydWN0LnogIT09ICdaJyAmJiBzdHJ1Y3QucGx1c01pbnVzICE9PSB1bmRlZmluZWQpIHtcbiAgICB0b3RhbE1pbnV0ZXNPZmZzZXQgPSBzdHJ1Y3QuaG91ck9mZnNldCAqIDYwICsgc3RydWN0Lm1pbnV0ZU9mZnNldDtcbiAgICBpZiAoc3RydWN0LnBsdXNNaW51cyA9PT0gJysnKSB0b3RhbE1pbnV0ZXNPZmZzZXQgPSAwIC0gdG90YWxNaW51dGVzT2Zmc2V0O1xuICB9XG4gIHJldHVybiBEYXRlLlVUQyhzdHJ1Y3QueWVhciwgc3RydWN0Lm1vbnRoLCBzdHJ1Y3QuZGF5LCBzdHJ1Y3QuaG91ciwgc3RydWN0Lm1pbnV0ZSArIHRvdGFsTWludXRlc09mZnNldCwgc3RydWN0LnNlY29uZCwgc3RydWN0Lm1pbGxpc2Vjb25kKTtcbn1cbmZ1bmN0aW9uIHBhcnNlRGF0ZVN0cnVjdChkYXRlKSB7XG4gIHZhciBfcmVnZXhSZXN1bHQkNyRsZW5ndGgsIF9yZWdleFJlc3VsdCQ7XG4gIGNvbnN0IHJlZ2V4UmVzdWx0ID0gaXNvUmVnLmV4ZWMoZGF0ZSk7XG4gIGlmICghcmVnZXhSZXN1bHQpIHJldHVybiBudWxsO1xuXG4gIC8vIHVzZSBvZiB0b051bWJlcigpIGF2b2lkcyBOYU4gdGltZXN0YW1wcyBjYXVzZWQgYnkg4oCcdW5kZWZpbmVk4oCdXG4gIC8vIHZhbHVlcyBiZWluZyBwYXNzZWQgdG8gRGF0ZSBjb25zdHJ1Y3RvclxuICByZXR1cm4ge1xuICAgIHllYXI6IHRvTnVtYmVyKHJlZ2V4UmVzdWx0WzFdKSxcbiAgICBtb250aDogdG9OdW1iZXIocmVnZXhSZXN1bHRbMl0sIDEpIC0gMSxcbiAgICBkYXk6IHRvTnVtYmVyKHJlZ2V4UmVzdWx0WzNdLCAxKSxcbiAgICBob3VyOiB0b051bWJlcihyZWdleFJlc3VsdFs0XSksXG4gICAgbWludXRlOiB0b051bWJlcihyZWdleFJlc3VsdFs1XSksXG4gICAgc2Vjb25kOiB0b051bWJlcihyZWdleFJlc3VsdFs2XSksXG4gICAgbWlsbGlzZWNvbmQ6IHJlZ2V4UmVzdWx0WzddID9cbiAgICAvLyBhbGxvdyBhcmJpdHJhcnkgc3ViLXNlY29uZCBwcmVjaXNpb24gYmV5b25kIG1pbGxpc2Vjb25kc1xuICAgIHRvTnVtYmVyKHJlZ2V4UmVzdWx0WzddLnN1YnN0cmluZygwLCAzKSkgOiAwLFxuICAgIHByZWNpc2lvbjogKF9yZWdleFJlc3VsdCQ3JGxlbmd0aCA9IChfcmVnZXhSZXN1bHQkID0gcmVnZXhSZXN1bHRbN10pID09IG51bGwgPyB2b2lkIDAgOiBfcmVnZXhSZXN1bHQkLmxlbmd0aCkgIT0gbnVsbCA/IF9yZWdleFJlc3VsdCQ3JGxlbmd0aCA6IHVuZGVmaW5lZCxcbiAgICB6OiByZWdleFJlc3VsdFs4XSB8fCB1bmRlZmluZWQsXG4gICAgcGx1c01pbnVzOiByZWdleFJlc3VsdFs5XSB8fCB1bmRlZmluZWQsXG4gICAgaG91ck9mZnNldDogdG9OdW1iZXIocmVnZXhSZXN1bHRbMTBdKSxcbiAgICBtaW51dGVPZmZzZXQ6IHRvTnVtYmVyKHJlZ2V4UmVzdWx0WzExXSlcbiAgfTtcbn1cbmZ1bmN0aW9uIHRvTnVtYmVyKHN0ciwgZGVmYXVsdFZhbHVlID0gMCkge1xuICByZXR1cm4gTnVtYmVyKHN0cikgfHwgZGVmYXVsdFZhbHVlO1xufVxuXG4vLyBUYWtlbiBmcm9tIEhUTUwgc3BlYzogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5wdXQuaHRtbCN2YWxpZC1lLW1haWwtYWRkcmVzc1xubGV0IHJFbWFpbCA9XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbi9eW2EtekEtWjAtOS4hIyQlJicqK1xcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xubGV0IHJVcmwgPVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4vXigoaHR0cHM/fGZ0cCk6KT9cXC9cXC8oKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OikqQCk/KCgoXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKXwoKChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuKSsoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4/KSg6XFxkKik/KShcXC8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApKyhcXC8oKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCkqKSopPyk/KFxcPygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCl8W1xcdUUwMDAtXFx1RjhGRl18XFwvfFxcPykqKT8oXFwjKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKXxcXC98XFw/KSopPyQvaTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5sZXQgclVVSUQgPSAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7XG5sZXQgeWVhck1vbnRoRGF5ID0gJ15cXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfSc7XG5sZXQgaG91ck1pbnV0ZVNlY29uZCA9ICdcXFxcZHsyfTpcXFxcZHsyfTpcXFxcZHsyfSc7XG5sZXQgek9yT2Zmc2V0ID0gJygoWystXVxcXFxkezJ9KDo/XFxcXGR7Mn0pPyl8WiknO1xubGV0IHJJc29EYXRlVGltZSA9IG5ldyBSZWdFeHAoYCR7eWVhck1vbnRoRGF5fVQke2hvdXJNaW51dGVTZWNvbmR9KFxcXFwuXFxcXGQrKT8ke3pPck9mZnNldH0kYCk7XG5sZXQgaXNUcmltbWVkID0gdmFsdWUgPT4gaXNBYnNlbnQodmFsdWUpIHx8IHZhbHVlID09PSB2YWx1ZS50cmltKCk7XG5sZXQgb2JqU3RyaW5nVGFnID0ge30udG9TdHJpbmcoKTtcbmZ1bmN0aW9uIGNyZWF0ZSQ2KCkge1xuICByZXR1cm4gbmV3IFN0cmluZ1NjaGVtYSgpO1xufVxuY2xhc3MgU3RyaW5nU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoe1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBjaGVjayh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHZhbHVlID0gdmFsdWUudmFsdWVPZigpO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLndpdGhNdXRhdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zZm9ybSgodmFsdWUsIF9yYXcpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNwZWMuY29lcmNlIHx8IHRoaXMuaXNUeXBlKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuXG4gICAgICAgIC8vIGRvbid0IGV2ZXIgY29udmVydCBhcnJheXNcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGNvbnN0IHN0clZhbHVlID0gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS50b1N0cmluZyA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZTtcblxuICAgICAgICAvLyBubyBvbmUgd2FudHMgcGxhaW4gb2JqZWN0cyBjb252ZXJ0ZWQgdG8gW09iamVjdCBvYmplY3RdXG4gICAgICAgIGlmIChzdHJWYWx1ZSA9PT0gb2JqU3RyaW5nVGFnKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHJldHVybiBzdHJWYWx1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHJlcXVpcmVkKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gc3VwZXIucmVxdWlyZWQobWVzc2FnZSkud2l0aE11dGF0aW9uKHNjaGVtYSA9PiBzY2hlbWEudGVzdCh7XG4gICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8IG1peGVkLnJlcXVpcmVkLFxuICAgICAgbmFtZTogJ3JlcXVpcmVkJyxcbiAgICAgIHNraXBBYnNlbnQ6IHRydWUsXG4gICAgICB0ZXN0OiB2YWx1ZSA9PiAhIXZhbHVlLmxlbmd0aFxuICAgIH0pKTtcbiAgfVxuICBub3RSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gc3VwZXIubm90UmVxdWlyZWQoKS53aXRoTXV0YXRpb24oc2NoZW1hID0+IHtcbiAgICAgIHNjaGVtYS50ZXN0cyA9IHNjaGVtYS50ZXN0cy5maWx0ZXIodCA9PiB0Lk9QVElPTlMubmFtZSAhPT0gJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH0pO1xuICB9XG4gIGxlbmd0aChsZW5ndGgsIG1lc3NhZ2UgPSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ2xlbmd0aCcsXG4gICAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbGVuZ3RoXG4gICAgICB9LFxuICAgICAgc2tpcEFic2VudDogdHJ1ZSxcbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gdGhpcy5yZXNvbHZlKGxlbmd0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbWluKG1pbiwgbWVzc2FnZSA9IHN0cmluZy5taW4pIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnbWluJyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBtaW5cbiAgICAgIH0sXG4gICAgICBza2lwQWJzZW50OiB0cnVlLFxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubGVuZ3RoID49IHRoaXMucmVzb2x2ZShtaW4pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG1heChtYXgsIG1lc3NhZ2UgPSBzdHJpbmcubWF4KSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBuYW1lOiAnbWF4JyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbWF4XG4gICAgICB9LFxuICAgICAgc2tpcEFic2VudDogdHJ1ZSxcbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA8PSB0aGlzLnJlc29sdmUobWF4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBtYXRjaGVzKHJlZ2V4LCBvcHRpb25zKSB7XG4gICAgbGV0IGV4Y2x1ZGVFbXB0eVN0cmluZyA9IGZhbHNlO1xuICAgIGxldCBtZXNzYWdlO1xuICAgIGxldCBuYW1lO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICh7XG4gICAgICAgICAgZXhjbHVkZUVtcHR5U3RyaW5nID0gZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBuYW1lXG4gICAgICAgIH0gPSBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2UgPSBvcHRpb25zO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy50ZXN0KHtcbiAgICAgIG5hbWU6IG5hbWUgfHwgJ21hdGNoZXMnLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCBzdHJpbmcubWF0Y2hlcyxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICByZWdleFxuICAgICAgfSxcbiAgICAgIHNraXBBYnNlbnQ6IHRydWUsXG4gICAgICB0ZXN0OiB2YWx1ZSA9PiB2YWx1ZSA9PT0gJycgJiYgZXhjbHVkZUVtcHR5U3RyaW5nIHx8IHZhbHVlLnNlYXJjaChyZWdleCkgIT09IC0xXG4gICAgfSk7XG4gIH1cbiAgZW1haWwobWVzc2FnZSA9IHN0cmluZy5lbWFpbCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMockVtYWlsLCB7XG4gICAgICBuYW1lOiAnZW1haWwnLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGV4Y2x1ZGVFbXB0eVN0cmluZzogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHVybChtZXNzYWdlID0gc3RyaW5nLnVybCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoclVybCwge1xuICAgICAgbmFtZTogJ3VybCcsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZXhjbHVkZUVtcHR5U3RyaW5nOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgdXVpZChtZXNzYWdlID0gc3RyaW5nLnV1aWQpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHJVVUlELCB7XG4gICAgICBuYW1lOiAndXVpZCcsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZXhjbHVkZUVtcHR5U3RyaW5nOiBmYWxzZVxuICAgIH0pO1xuICB9XG4gIGRhdGV0aW1lKG9wdGlvbnMpIHtcbiAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgIGxldCBhbGxvd09mZnNldDtcbiAgICBsZXQgcHJlY2lzaW9uO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICh7XG4gICAgICAgICAgbWVzc2FnZSA9ICcnLFxuICAgICAgICAgIGFsbG93T2Zmc2V0ID0gZmFsc2UsXG4gICAgICAgICAgcHJlY2lzaW9uID0gdW5kZWZpbmVkXG4gICAgICAgIH0gPSBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2UgPSBvcHRpb25zO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHJJc29EYXRlVGltZSwge1xuICAgICAgbmFtZTogJ2RhdGV0aW1lJyxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgc3RyaW5nLmRhdGV0aW1lLFxuICAgICAgZXhjbHVkZUVtcHR5U3RyaW5nOiB0cnVlXG4gICAgfSkudGVzdCh7XG4gICAgICBuYW1lOiAnZGF0ZXRpbWVfb2Zmc2V0JyxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgc3RyaW5nLmRhdGV0aW1lX29mZnNldCxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBhbGxvd09mZnNldFxuICAgICAgfSxcbiAgICAgIHNraXBBYnNlbnQ6IHRydWUsXG4gICAgICB0ZXN0OiB2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgYWxsb3dPZmZzZXQpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBzdHJ1Y3QgPSBwYXJzZURhdGVTdHJ1Y3QodmFsdWUpO1xuICAgICAgICBpZiAoIXN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gISFzdHJ1Y3QuejtcbiAgICAgIH1cbiAgICB9KS50ZXN0KHtcbiAgICAgIG5hbWU6ICdkYXRldGltZV9wcmVjaXNpb24nLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCBzdHJpbmcuZGF0ZXRpbWVfcHJlY2lzaW9uLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIHByZWNpc2lvblxuICAgICAgfSxcbiAgICAgIHNraXBBYnNlbnQ6IHRydWUsXG4gICAgICB0ZXN0OiB2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgcHJlY2lzaW9uID09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHN0cnVjdCA9IHBhcnNlRGF0ZVN0cnVjdCh2YWx1ZSk7XG4gICAgICAgIGlmICghc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdHJ1Y3QucHJlY2lzaW9uID09PSBwcmVjaXNpb247XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLy0tIHRyYW5zZm9ybXMgLS1cbiAgZW5zdXJlKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHQoJycpLnRyYW5zZm9ybSh2YWwgPT4gdmFsID09PSBudWxsID8gJycgOiB2YWwpO1xuICB9XG4gIHRyaW0obWVzc2FnZSA9IHN0cmluZy50cmltKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKHZhbCA9PiB2YWwgIT0gbnVsbCA/IHZhbC50cmltKCkgOiB2YWwpLnRlc3Qoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG5hbWU6ICd0cmltJyxcbiAgICAgIHRlc3Q6IGlzVHJpbW1lZFxuICAgIH0pO1xuICB9XG4gIGxvd2VyY2FzZShtZXNzYWdlID0gc3RyaW5nLmxvd2VyY2FzZSkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybSh2YWx1ZSA9PiAhaXNBYnNlbnQodmFsdWUpID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlKS50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnc3RyaW5nX2Nhc2UnLFxuICAgICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgICAgc2tpcEFic2VudDogdHJ1ZSxcbiAgICAgIHRlc3Q6IHZhbHVlID0+IGlzQWJzZW50KHZhbHVlKSB8fCB2YWx1ZSA9PT0gdmFsdWUudG9Mb3dlckNhc2UoKVxuICAgIH0pO1xuICB9XG4gIHVwcGVyY2FzZShtZXNzYWdlID0gc3RyaW5nLnVwcGVyY2FzZSkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybSh2YWx1ZSA9PiAhaXNBYnNlbnQodmFsdWUpID8gdmFsdWUudG9VcHBlckNhc2UoKSA6IHZhbHVlKS50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnc3RyaW5nX2Nhc2UnLFxuICAgICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgICAgc2tpcEFic2VudDogdHJ1ZSxcbiAgICAgIHRlc3Q6IHZhbHVlID0+IGlzQWJzZW50KHZhbHVlKSB8fCB2YWx1ZSA9PT0gdmFsdWUudG9VcHBlckNhc2UoKVxuICAgIH0pO1xuICB9XG59XG5jcmVhdGUkNi5wcm90b3R5cGUgPSBTdHJpbmdTY2hlbWEucHJvdG90eXBlO1xuXG4vL1xuLy8gU3RyaW5nIEludGVyZmFjZXNcbi8vXG5cbmxldCBpc05hTiQxID0gdmFsdWUgPT4gdmFsdWUgIT0gK3ZhbHVlO1xuZnVuY3Rpb24gY3JlYXRlJDUoKSB7XG4gIHJldHVybiBuZXcgTnVtYmVyU2NoZW1hKCk7XG59XG5jbGFzcyBOdW1iZXJTY2hlbWEgZXh0ZW5kcyBTY2hlbWEge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7XG4gICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgIGNoZWNrKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE51bWJlcikgdmFsdWUgPSB2YWx1ZS52YWx1ZU9mKCk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFpc05hTiQxKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLndpdGhNdXRhdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zZm9ybSgodmFsdWUsIF9yYXcpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNwZWMuY29lcmNlKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGxldCBwYXJzZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcGFyc2VkID0gcGFyc2VkLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgICAgaWYgKHBhcnNlZCA9PT0gJycpIHJldHVybiBOYU47XG4gICAgICAgICAgLy8gZG9uJ3QgdXNlIHBhcnNlRmxvYXQgdG8gYXZvaWQgcG9zaXRpdmVzIG9uIGFscGhhLW51bWVyaWMgc3RyaW5nc1xuICAgICAgICAgIHBhcnNlZCA9ICtwYXJzZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBudWxsIC0+IE5hTiBpc24ndCB1c2VmdWw7IHRyZWF0IGFsbCBudWxscyBhcyBudWxsIGFuZCBsZXQgaXQgZmFpbCBvblxuICAgICAgICAvLyBudWxsYWJpbGl0eSBjaGVjayB2cyBUeXBlRXJyb3JzXG4gICAgICAgIGlmICh0aGlzLmlzVHlwZShwYXJzZWQpIHx8IHBhcnNlZCA9PT0gbnVsbCkgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocGFyc2VkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIG1pbihtaW4sIG1lc3NhZ2UgPSBudW1iZXIubWluKSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ21pbicsXG4gICAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbWluXG4gICAgICB9LFxuICAgICAgc2tpcEFic2VudDogdHJ1ZSxcbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID49IHRoaXMucmVzb2x2ZShtaW4pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG1heChtYXgsIG1lc3NhZ2UgPSBudW1iZXIubWF4KSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ21heCcsXG4gICAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbWF4XG4gICAgICB9LFxuICAgICAgc2tpcEFic2VudDogdHJ1ZSxcbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDw9IHRoaXMucmVzb2x2ZShtYXgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGxlc3NUaGFuKGxlc3MsIG1lc3NhZ2UgPSBudW1iZXIubGVzc1RoYW4pIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnbWF4JyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBsZXNzXG4gICAgICB9LFxuICAgICAgc2tpcEFic2VudDogdHJ1ZSxcbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgdGhpcy5yZXNvbHZlKGxlc3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG1vcmVUaGFuKG1vcmUsIG1lc3NhZ2UgPSBudW1iZXIubW9yZVRoYW4pIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnbWluJyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBtb3JlXG4gICAgICB9LFxuICAgICAgc2tpcEFic2VudDogdHJ1ZSxcbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID4gdGhpcy5yZXNvbHZlKG1vcmUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHBvc2l0aXZlKG1zZyA9IG51bWJlci5wb3NpdGl2ZSkge1xuICAgIHJldHVybiB0aGlzLm1vcmVUaGFuKDAsIG1zZyk7XG4gIH1cbiAgbmVnYXRpdmUobXNnID0gbnVtYmVyLm5lZ2F0aXZlKSB7XG4gICAgcmV0dXJuIHRoaXMubGVzc1RoYW4oMCwgbXNnKTtcbiAgfVxuICBpbnRlZ2VyKG1lc3NhZ2UgPSBudW1iZXIuaW50ZWdlcikge1xuICAgIHJldHVybiB0aGlzLnRlc3Qoe1xuICAgICAgbmFtZTogJ2ludGVnZXInLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNraXBBYnNlbnQ6IHRydWUsXG4gICAgICB0ZXN0OiB2YWwgPT4gTnVtYmVyLmlzSW50ZWdlcih2YWwpXG4gICAgfSk7XG4gIH1cbiAgdHJ1bmNhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKHZhbHVlID0+ICFpc0Fic2VudCh2YWx1ZSkgPyB2YWx1ZSB8IDAgOiB2YWx1ZSk7XG4gIH1cbiAgcm91bmQobWV0aG9kKSB7XG4gICAgdmFyIF9tZXRob2Q7XG4gICAgbGV0IGF2YWlsID0gWydjZWlsJywgJ2Zsb29yJywgJ3JvdW5kJywgJ3RydW5jJ107XG4gICAgbWV0aG9kID0gKChfbWV0aG9kID0gbWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogX21ldGhvZC50b0xvd2VyQ2FzZSgpKSB8fCAncm91bmQnO1xuXG4gICAgLy8gdGhpcyBleGlzdHMgZm9yIHN5bWVtdHJ5IHdpdGggdGhlIG5ldyBNYXRoLnRydW5jXG4gICAgaWYgKG1ldGhvZCA9PT0gJ3RydW5jJykgcmV0dXJuIHRoaXMudHJ1bmNhdGUoKTtcbiAgICBpZiAoYXZhaWwuaW5kZXhPZihtZXRob2QudG9Mb3dlckNhc2UoKSkgPT09IC0xKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdPbmx5IHZhbGlkIG9wdGlvbnMgZm9yIHJvdW5kKCkgYXJlOiAnICsgYXZhaWwuam9pbignLCAnKSk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKHZhbHVlID0+ICFpc0Fic2VudCh2YWx1ZSkgPyBNYXRoW21ldGhvZF0odmFsdWUpIDogdmFsdWUpO1xuICB9XG59XG5jcmVhdGUkNS5wcm90b3R5cGUgPSBOdW1iZXJTY2hlbWEucHJvdG90eXBlO1xuXG4vL1xuLy8gTnVtYmVyIEludGVyZmFjZXNcbi8vXG5cbmxldCBpbnZhbGlkRGF0ZSA9IG5ldyBEYXRlKCcnKTtcbmxldCBpc0RhdGUgPSBvYmogPT4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IERhdGVdJztcbmZ1bmN0aW9uIGNyZWF0ZSQ0KCkge1xuICByZXR1cm4gbmV3IERhdGVTY2hlbWEoKTtcbn1cbmNsYXNzIERhdGVTY2hlbWEgZXh0ZW5kcyBTY2hlbWEge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7XG4gICAgICB0eXBlOiAnZGF0ZScsXG4gICAgICBjaGVjayh2KSB7XG4gICAgICAgIHJldHVybiBpc0RhdGUodikgJiYgIWlzTmFOKHYuZ2V0VGltZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLndpdGhNdXRhdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zZm9ybSgodmFsdWUsIF9yYXcpID0+IHtcbiAgICAgICAgLy8gbnVsbCAtPiBJbnZhbGlkRGF0ZSBpc24ndCB1c2VmdWw7IHRyZWF0IGFsbCBudWxscyBhcyBudWxsIGFuZCBsZXQgaXQgZmFpbCBvblxuICAgICAgICAvLyBudWxsYWJpbGl0eSBjaGVjayB2cyBUeXBlRXJyb3JzXG4gICAgICAgIGlmICghdGhpcy5zcGVjLmNvZXJjZSB8fCB0aGlzLmlzVHlwZSh2YWx1ZSkgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUlzb0RhdGUodmFsdWUpO1xuXG4gICAgICAgIC8vIDAgaXMgYSB2YWxpZCB0aW1lc3RhbXAgZXF1aXZhbGVudCB0byAxOTcwLTAxLTAxVDAwOjAwOjAwWih1bml4IGVwb2NoKSBvciBiZWZvcmUuXG4gICAgICAgIHJldHVybiAhaXNOYU4odmFsdWUpID8gbmV3IERhdGUodmFsdWUpIDogRGF0ZVNjaGVtYS5JTlZBTElEX0RBVEU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBwcmVwYXJlUGFyYW0ocmVmLCBuYW1lKSB7XG4gICAgbGV0IHBhcmFtO1xuICAgIGlmICghUmVmZXJlbmNlLmlzUmVmKHJlZikpIHtcbiAgICAgIGxldCBjYXN0ID0gdGhpcy5jYXN0KHJlZik7XG4gICAgICBpZiAoIXRoaXMuX3R5cGVDaGVjayhjYXN0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgXFxgJHtuYW1lfVxcYCBtdXN0IGJlIGEgRGF0ZSBvciBhIHZhbHVlIHRoYXQgY2FuIGJlIFxcYGNhc3QoKVxcYCB0byBhIERhdGVgKTtcbiAgICAgIHBhcmFtID0gY2FzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW0gPSByZWY7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbTtcbiAgfVxuICBtaW4obWluLCBtZXNzYWdlID0gZGF0ZS5taW4pIHtcbiAgICBsZXQgbGltaXQgPSB0aGlzLnByZXBhcmVQYXJhbShtaW4sICdtaW4nKTtcbiAgICByZXR1cm4gdGhpcy50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnbWluJyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBtaW5cbiAgICAgIH0sXG4gICAgICBza2lwQWJzZW50OiB0cnVlLFxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPj0gdGhpcy5yZXNvbHZlKGxpbWl0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBtYXgobWF4LCBtZXNzYWdlID0gZGF0ZS5tYXgpIHtcbiAgICBsZXQgbGltaXQgPSB0aGlzLnByZXBhcmVQYXJhbShtYXgsICdtYXgnKTtcbiAgICByZXR1cm4gdGhpcy50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnbWF4JyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBtYXhcbiAgICAgIH0sXG4gICAgICBza2lwQWJzZW50OiB0cnVlLFxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPD0gdGhpcy5yZXNvbHZlKGxpbWl0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuRGF0ZVNjaGVtYS5JTlZBTElEX0RBVEUgPSBpbnZhbGlkRGF0ZTtcbmNyZWF0ZSQ0LnByb3RvdHlwZSA9IERhdGVTY2hlbWEucHJvdG90eXBlO1xuY3JlYXRlJDQuSU5WQUxJRF9EQVRFID0gaW52YWxpZERhdGU7XG5cbi8vIEB0cy1leHBlY3QtZXJyb3JcbmZ1bmN0aW9uIHNvcnRGaWVsZHMoZmllbGRzLCBleGNsdWRlZEVkZ2VzID0gW10pIHtcbiAgbGV0IGVkZ2VzID0gW107XG4gIGxldCBub2RlcyA9IG5ldyBTZXQoKTtcbiAgbGV0IGV4Y2x1ZGVzID0gbmV3IFNldChleGNsdWRlZEVkZ2VzLm1hcCgoW2EsIGJdKSA9PiBgJHthfS0ke2J9YCkpO1xuICBmdW5jdGlvbiBhZGROb2RlKGRlcFBhdGgsIGtleSkge1xuICAgIGxldCBub2RlID0gc3BsaXQoZGVwUGF0aClbMF07XG4gICAgbm9kZXMuYWRkKG5vZGUpO1xuICAgIGlmICghZXhjbHVkZXMuaGFzKGAke2tleX0tJHtub2RlfWApKSBlZGdlcy5wdXNoKFtrZXksIG5vZGVdKTtcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmaWVsZHMpKSB7XG4gICAgbGV0IHZhbHVlID0gZmllbGRzW2tleV07XG4gICAgbm9kZXMuYWRkKGtleSk7XG4gICAgaWYgKFJlZmVyZW5jZS5pc1JlZih2YWx1ZSkgJiYgdmFsdWUuaXNTaWJsaW5nKSBhZGROb2RlKHZhbHVlLnBhdGgsIGtleSk7ZWxzZSBpZiAoaXNTY2hlbWEodmFsdWUpICYmICdkZXBzJyBpbiB2YWx1ZSkgdmFsdWUuZGVwcy5mb3JFYWNoKHBhdGggPT4gYWRkTm9kZShwYXRoLCBrZXkpKTtcbiAgfVxuICByZXR1cm4gdG9wb3NvcnQuYXJyYXkoQXJyYXkuZnJvbShub2RlcyksIGVkZ2VzKS5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnIsIGVycikge1xuICBsZXQgaWR4ID0gSW5maW5pdHk7XG4gIGFyci5zb21lKChrZXksIGlpKSA9PiB7XG4gICAgdmFyIF9lcnIkcGF0aDtcbiAgICBpZiAoKF9lcnIkcGF0aCA9IGVyci5wYXRoKSAhPSBudWxsICYmIF9lcnIkcGF0aC5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBpZHggPSBpaTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG5mdW5jdGlvbiBzb3J0QnlLZXlPcmRlcihrZXlzKSB7XG4gIHJldHVybiAoYSwgYikgPT4ge1xuICAgIHJldHVybiBmaW5kSW5kZXgoa2V5cywgYSkgLSBmaW5kSW5kZXgoa2V5cywgYik7XG4gIH07XG59XG5cbmNvbnN0IHBhcnNlSnNvbiA9ICh2YWx1ZSwgXywgc2NoZW1hKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGxldCBwYXJzZWQgPSB2YWx1ZTtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLyogKi9cbiAgfVxuICByZXR1cm4gc2NoZW1hLmlzVHlwZShwYXJzZWQpID8gcGFyc2VkIDogdmFsdWU7XG59O1xuXG4vLyBAdHMtaWdub3JlXG5mdW5jdGlvbiBkZWVwUGFydGlhbChzY2hlbWEpIHtcbiAgaWYgKCdmaWVsZHMnIGluIHNjaGVtYSkge1xuICAgIGNvbnN0IHBhcnRpYWwgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkU2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEuZmllbGRzKSkge1xuICAgICAgcGFydGlhbFtrZXldID0gZGVlcFBhcnRpYWwoZmllbGRTY2hlbWEpO1xuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hLnNldEZpZWxkcyhwYXJ0aWFsKTtcbiAgfVxuICBpZiAoc2NoZW1hLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICBjb25zdCBuZXh0QXJyYXkgPSBzY2hlbWEub3B0aW9uYWwoKTtcbiAgICBpZiAobmV4dEFycmF5LmlubmVyVHlwZSkgbmV4dEFycmF5LmlubmVyVHlwZSA9IGRlZXBQYXJ0aWFsKG5leHRBcnJheS5pbm5lclR5cGUpO1xuICAgIHJldHVybiBuZXh0QXJyYXk7XG4gIH1cbiAgaWYgKHNjaGVtYS50eXBlID09PSAndHVwbGUnKSB7XG4gICAgcmV0dXJuIHNjaGVtYS5vcHRpb25hbCgpLmNsb25lKHtcbiAgICAgIHR5cGVzOiBzY2hlbWEuc3BlYy50eXBlcy5tYXAoZGVlcFBhcnRpYWwpXG4gICAgfSk7XG4gIH1cbiAgaWYgKCdvcHRpb25hbCcgaW4gc2NoZW1hKSB7XG4gICAgcmV0dXJuIHNjaGVtYS5vcHRpb25hbCgpO1xuICB9XG4gIHJldHVybiBzY2hlbWE7XG59XG5jb25zdCBkZWVwSGFzID0gKG9iaiwgcCkgPT4ge1xuICBjb25zdCBwYXRoID0gWy4uLm5vcm1hbGl6ZVBhdGgocCldO1xuICBpZiAocGF0aC5sZW5ndGggPT09IDEpIHJldHVybiBwYXRoWzBdIGluIG9iajtcbiAgbGV0IGxhc3QgPSBwYXRoLnBvcCgpO1xuICBsZXQgcGFyZW50ID0gZ2V0dGVyKGpvaW4ocGF0aCksIHRydWUpKG9iaik7XG4gIHJldHVybiAhIShwYXJlbnQgJiYgbGFzdCBpbiBwYXJlbnQpO1xufTtcbmxldCBpc09iamVjdCA9IG9iaiA9PiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG5mdW5jdGlvbiB1bmtub3duKGN0eCwgdmFsdWUpIHtcbiAgbGV0IGtub3duID0gT2JqZWN0LmtleXMoY3R4LmZpZWxkcyk7XG4gIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSkuZmlsdGVyKGtleSA9PiBrbm93bi5pbmRleE9mKGtleSkgPT09IC0xKTtcbn1cbmNvbnN0IGRlZmF1bHRTb3J0ID0gc29ydEJ5S2V5T3JkZXIoW10pO1xuZnVuY3Rpb24gY3JlYXRlJDMoc3BlYykge1xuICByZXR1cm4gbmV3IE9iamVjdFNjaGVtYShzcGVjKTtcbn1cbmNsYXNzIE9iamVjdFNjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIGNvbnN0cnVjdG9yKHNwZWMpIHtcbiAgICBzdXBlcih7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGNoZWNrKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZmllbGRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9zb3J0RXJyb3JzID0gZGVmYXVsdFNvcnQ7XG4gICAgdGhpcy5fbm9kZXMgPSBbXTtcbiAgICB0aGlzLl9leGNsdWRlZEVkZ2VzID0gW107XG4gICAgdGhpcy53aXRoTXV0YXRpb24oKCkgPT4ge1xuICAgICAgaWYgKHNwZWMpIHtcbiAgICAgICAgdGhpcy5zaGFwZShzcGVjKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBfY2FzdChfdmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBfb3B0aW9ucyRzdHJpcFVua25vd247XG4gICAgbGV0IHZhbHVlID0gc3VwZXIuX2Nhc3QoX3ZhbHVlLCBvcHRpb25zKTtcblxuICAgIC8vc2hvdWxkIGlnbm9yZSBudWxscyBoZXJlXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLmdldERlZmF1bHQob3B0aW9ucyk7XG4gICAgaWYgKCF0aGlzLl90eXBlQ2hlY2sodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgbGV0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xuICAgIGxldCBzdHJpcCA9IChfb3B0aW9ucyRzdHJpcFVua25vd24gPSBvcHRpb25zLnN0cmlwVW5rbm93bikgIT0gbnVsbCA/IF9vcHRpb25zJHN0cmlwVW5rbm93biA6IHRoaXMuc3BlYy5ub1Vua25vd247XG4gICAgbGV0IHByb3BzID0gW10uY29uY2F0KHRoaXMuX25vZGVzLCBPYmplY3Qua2V5cyh2YWx1ZSkuZmlsdGVyKHYgPT4gIXRoaXMuX25vZGVzLmluY2x1ZGVzKHYpKSk7XG4gICAgbGV0IGludGVybWVkaWF0ZVZhbHVlID0ge307IC8vIGlzIGZpbGxlZCBkdXJpbmcgdGhlIHRyYW5zZm9ybSBiZWxvd1xuICAgIGxldCBpbm5lck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICBwYXJlbnQ6IGludGVybWVkaWF0ZVZhbHVlLFxuICAgICAgX192YWxpZGF0aW5nOiBvcHRpb25zLl9fdmFsaWRhdGluZyB8fCBmYWxzZVxuICAgIH0pO1xuICAgIGxldCBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1twcm9wXTtcbiAgICAgIGxldCBleGlzdHMgPSAocHJvcCBpbiB2YWx1ZSk7XG4gICAgICBsZXQgaW5wdXRWYWx1ZSA9IHZhbHVlW3Byb3BdO1xuICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgIGxldCBmaWVsZFZhbHVlO1xuXG4gICAgICAgIC8vIHNhZmUgdG8gbXV0YXRlIHNpbmNlIHRoaXMgaXMgZmlyZWQgaW4gc2VxdWVuY2VcbiAgICAgICAgaW5uZXJPcHRpb25zLnBhdGggPSAob3B0aW9ucy5wYXRoID8gYCR7b3B0aW9ucy5wYXRofS5gIDogJycpICsgcHJvcDtcbiAgICAgICAgZmllbGQgPSBmaWVsZC5yZXNvbHZlKHtcbiAgICAgICAgICB2YWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgICBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsXG4gICAgICAgICAgcGFyZW50OiBpbnRlcm1lZGlhdGVWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGZpZWxkU3BlYyA9IGZpZWxkIGluc3RhbmNlb2YgU2NoZW1hID8gZmllbGQuc3BlYyA6IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHN0cmljdCA9IGZpZWxkU3BlYyA9PSBudWxsID8gdm9pZCAwIDogZmllbGRTcGVjLnN0cmljdDtcbiAgICAgICAgaWYgKGZpZWxkU3BlYyAhPSBudWxsICYmIGZpZWxkU3BlYy5zdHJpcCkge1xuICAgICAgICAgIGlzQ2hhbmdlZCA9IGlzQ2hhbmdlZCB8fCBwcm9wIGluIHZhbHVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkVmFsdWUgPSAhb3B0aW9ucy5fX3ZhbGlkYXRpbmcgfHwgIXN0cmljdCA/IGZpZWxkLmNhc3QoaW5wdXRWYWx1ZSwgaW5uZXJPcHRpb25zKSA6IGlucHV0VmFsdWU7XG4gICAgICAgIGlmIChmaWVsZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbnRlcm1lZGlhdGVWYWx1ZVtwcm9wXSA9IGZpZWxkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXhpc3RzICYmICFzdHJpcCkge1xuICAgICAgICBpbnRlcm1lZGlhdGVWYWx1ZVtwcm9wXSA9IGlucHV0VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoZXhpc3RzICE9PSBwcm9wIGluIGludGVybWVkaWF0ZVZhbHVlIHx8IGludGVybWVkaWF0ZVZhbHVlW3Byb3BdICE9PSBpbnB1dFZhbHVlKSB7XG4gICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpc0NoYW5nZWQgPyBpbnRlcm1lZGlhdGVWYWx1ZSA6IHZhbHVlO1xuICB9XG4gIF92YWxpZGF0ZShfdmFsdWUsIG9wdGlvbnMgPSB7fSwgcGFuaWMsIG5leHQpIHtcbiAgICBsZXQge1xuICAgICAgZnJvbSA9IFtdLFxuICAgICAgb3JpZ2luYWxWYWx1ZSA9IF92YWx1ZSxcbiAgICAgIHJlY3Vyc2l2ZSA9IHRoaXMuc3BlYy5yZWN1cnNpdmVcbiAgICB9ID0gb3B0aW9ucztcbiAgICBvcHRpb25zLmZyb20gPSBbe1xuICAgICAgc2NoZW1hOiB0aGlzLFxuICAgICAgdmFsdWU6IG9yaWdpbmFsVmFsdWVcbiAgICB9LCAuLi5mcm9tXTtcbiAgICAvLyB0aGlzIGZsYWcgaXMgbmVlZGVkIGZvciBoYW5kbGluZyBgc3RyaWN0YCBjb3JyZWN0bHkgaW4gdGhlIGNvbnRleHQgb2ZcbiAgICAvLyB2YWxpZGF0aW9uIHZzIGp1c3QgY2FzdGluZy4gZS5nIHN0cmljdCgpIG9uIGEgZmllbGQgaXMgb25seSB1c2VkIHdoZW4gdmFsaWRhdGluZ1xuICAgIG9wdGlvbnMuX192YWxpZGF0aW5nID0gdHJ1ZTtcbiAgICBvcHRpb25zLm9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlO1xuICAgIHN1cGVyLl92YWxpZGF0ZShfdmFsdWUsIG9wdGlvbnMsIHBhbmljLCAob2JqZWN0RXJyb3JzLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFyZWN1cnNpdmUgfHwgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBuZXh0KG9iamVjdEVycm9ycywgdmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBvcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxWYWx1ZSB8fCB2YWx1ZTtcbiAgICAgIGxldCB0ZXN0cyA9IFtdO1xuICAgICAgZm9yIChsZXQga2V5IG9mIHRoaXMuX25vZGVzKSB7XG4gICAgICAgIGxldCBmaWVsZCA9IHRoaXMuZmllbGRzW2tleV07XG4gICAgICAgIGlmICghZmllbGQgfHwgUmVmZXJlbmNlLmlzUmVmKGZpZWxkKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRlc3RzLnB1c2goZmllbGQuYXNOZXN0ZWRUZXN0KHtcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBwYXJlbnQ6IHZhbHVlLFxuICAgICAgICAgIHBhcmVudFBhdGg6IG9wdGlvbnMucGF0aCxcbiAgICAgICAgICBvcmlnaW5hbFBhcmVudDogb3JpZ2luYWxWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1blRlc3RzKHtcbiAgICAgICAgdGVzdHMsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBvcmlnaW5hbFZhbHVlLFxuICAgICAgICBvcHRpb25zXG4gICAgICB9LCBwYW5pYywgZmllbGRFcnJvcnMgPT4ge1xuICAgICAgICBuZXh0KGZpZWxkRXJyb3JzLnNvcnQodGhpcy5fc29ydEVycm9ycykuY29uY2F0KG9iamVjdEVycm9ycyksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGNsb25lKHNwZWMpIHtcbiAgICBjb25zdCBuZXh0ID0gc3VwZXIuY2xvbmUoc3BlYyk7XG4gICAgbmV4dC5maWVsZHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmZpZWxkcyk7XG4gICAgbmV4dC5fbm9kZXMgPSB0aGlzLl9ub2RlcztcbiAgICBuZXh0Ll9leGNsdWRlZEVkZ2VzID0gdGhpcy5fZXhjbHVkZWRFZGdlcztcbiAgICBuZXh0Ll9zb3J0RXJyb3JzID0gdGhpcy5fc29ydEVycm9ycztcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuICBjb25jYXQoc2NoZW1hKSB7XG4gICAgbGV0IG5leHQgPSBzdXBlci5jb25jYXQoc2NoZW1hKTtcbiAgICBsZXQgbmV4dEZpZWxkcyA9IG5leHQuZmllbGRzO1xuICAgIGZvciAobGV0IFtmaWVsZCwgc2NoZW1hT3JSZWZdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZmllbGRzKSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbmV4dEZpZWxkc1tmaWVsZF07XG4gICAgICBuZXh0RmllbGRzW2ZpZWxkXSA9IHRhcmdldCA9PT0gdW5kZWZpbmVkID8gc2NoZW1hT3JSZWYgOiB0YXJnZXQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0LndpdGhNdXRhdGlvbihzID0+XG4gICAgLy8gWFhYOiBleGNsdWRlcyBoZXJlIGlzIHdyb25nXG4gICAgcy5zZXRGaWVsZHMobmV4dEZpZWxkcywgWy4uLnRoaXMuX2V4Y2x1ZGVkRWRnZXMsIC4uLnNjaGVtYS5fZXhjbHVkZWRFZGdlc10pKTtcbiAgfVxuICBfZ2V0RGVmYXVsdChvcHRpb25zKSB7XG4gICAgaWYgKCdkZWZhdWx0JyBpbiB0aGlzLnNwZWMpIHtcbiAgICAgIHJldHVybiBzdXBlci5fZ2V0RGVmYXVsdChvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBubyBkZWZhdWx0IHNldCBpbnZlbnQgb25lXG4gICAgaWYgKCF0aGlzLl9ub2Rlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBkZnQgPSB7fTtcbiAgICB0aGlzLl9ub2Rlcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB2YXIgX2lubmVyT3B0aW9ucztcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHNba2V5XTtcbiAgICAgIGxldCBpbm5lck9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgaWYgKChfaW5uZXJPcHRpb25zID0gaW5uZXJPcHRpb25zKSAhPSBudWxsICYmIF9pbm5lck9wdGlvbnMudmFsdWUpIHtcbiAgICAgICAgaW5uZXJPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgaW5uZXJPcHRpb25zLCB7XG4gICAgICAgICAgcGFyZW50OiBpbm5lck9wdGlvbnMudmFsdWUsXG4gICAgICAgICAgdmFsdWU6IGlubmVyT3B0aW9ucy52YWx1ZVtrZXldXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZGZ0W2tleV0gPSBmaWVsZCAmJiAnZ2V0RGVmYXVsdCcgaW4gZmllbGQgPyBmaWVsZC5nZXREZWZhdWx0KGlubmVyT3B0aW9ucykgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRmdDtcbiAgfVxuICBzZXRGaWVsZHMoc2hhcGUsIGV4Y2x1ZGVkRWRnZXMpIHtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBuZXh0LmZpZWxkcyA9IHNoYXBlO1xuICAgIG5leHQuX25vZGVzID0gc29ydEZpZWxkcyhzaGFwZSwgZXhjbHVkZWRFZGdlcyk7XG4gICAgbmV4dC5fc29ydEVycm9ycyA9IHNvcnRCeUtleU9yZGVyKE9iamVjdC5rZXlzKHNoYXBlKSk7XG4gICAgLy8gWFhYOiB0aGlzIGNhcnJpZXMgb3ZlciBlZGdlcyB3aGljaCBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnRcbiAgICBpZiAoZXhjbHVkZWRFZGdlcykgbmV4dC5fZXhjbHVkZWRFZGdlcyA9IGV4Y2x1ZGVkRWRnZXM7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgc2hhcGUoYWRkaXRpb25zLCBleGNsdWRlcyA9IFtdKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS53aXRoTXV0YXRpb24obmV4dCA9PiB7XG4gICAgICBsZXQgZWRnZXMgPSBuZXh0Ll9leGNsdWRlZEVkZ2VzO1xuICAgICAgaWYgKGV4Y2x1ZGVzLmxlbmd0aCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhjbHVkZXNbMF0pKSBleGNsdWRlcyA9IFtleGNsdWRlc107XG4gICAgICAgIGVkZ2VzID0gWy4uLm5leHQuX2V4Y2x1ZGVkRWRnZXMsIC4uLmV4Y2x1ZGVzXTtcbiAgICAgIH1cblxuICAgICAgLy8gWFhYOiBleGNsdWRlcyBoZXJlIGlzIHdyb25nXG4gICAgICByZXR1cm4gbmV4dC5zZXRGaWVsZHMoT2JqZWN0LmFzc2lnbihuZXh0LmZpZWxkcywgYWRkaXRpb25zKSwgZWRnZXMpO1xuICAgIH0pO1xuICB9XG4gIHBhcnRpYWwoKSB7XG4gICAgY29uc3QgcGFydGlhbCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmZpZWxkcykpIHtcbiAgICAgIHBhcnRpYWxba2V5XSA9ICdvcHRpb25hbCcgaW4gc2NoZW1hICYmIHNjaGVtYS5vcHRpb25hbCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gc2NoZW1hLm9wdGlvbmFsKCkgOiBzY2hlbWE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNldEZpZWxkcyhwYXJ0aWFsKTtcbiAgfVxuICBkZWVwUGFydGlhbCgpIHtcbiAgICBjb25zdCBuZXh0ID0gZGVlcFBhcnRpYWwodGhpcyk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgcGljayhrZXlzKSB7XG4gICAgY29uc3QgcGlja2VkID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKHRoaXMuZmllbGRzW2tleV0pIHBpY2tlZFtrZXldID0gdGhpcy5maWVsZHNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2V0RmllbGRzKHBpY2tlZCwgdGhpcy5fZXhjbHVkZWRFZGdlcy5maWx0ZXIoKFthLCBiXSkgPT4ga2V5cy5pbmNsdWRlcyhhKSAmJiBrZXlzLmluY2x1ZGVzKGIpKSk7XG4gIH1cbiAgb21pdChrZXlzKSB7XG4gICAgY29uc3QgcmVtYWluaW5nID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5maWVsZHMpKSB7XG4gICAgICBpZiAoa2V5cy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIHJlbWFpbmluZy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBpY2socmVtYWluaW5nKTtcbiAgfVxuICBmcm9tKGZyb20sIHRvLCBhbGlhcykge1xuICAgIGxldCBmcm9tR2V0dGVyID0gZ2V0dGVyKGZyb20sIHRydWUpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybShvYmogPT4ge1xuICAgICAgaWYgKCFvYmopIHJldHVybiBvYmo7XG4gICAgICBsZXQgbmV3T2JqID0gb2JqO1xuICAgICAgaWYgKGRlZXBIYXMob2JqLCBmcm9tKSkge1xuICAgICAgICBuZXdPYmogPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgICAgICBpZiAoIWFsaWFzKSBkZWxldGUgbmV3T2JqW2Zyb21dO1xuICAgICAgICBuZXdPYmpbdG9dID0gZnJvbUdldHRlcihvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld09iajtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQYXJzZSBhbiBpbnB1dCBKU09OIHN0cmluZyB0byBhbiBvYmplY3QgKi9cbiAganNvbigpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ocGFyc2VKc29uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW1pbGFyIHRvIGBub1Vua25vd25gIGJ1dCBvbmx5IHZhbGlkYXRlcyB0aGF0IGFuIG9iamVjdCBpcyB0aGUgcmlnaHQgc2hhcGUgd2l0aG91dCBzdHJpcHBpbmcgdGhlIHVua25vd24ga2V5c1xuICAgKi9cbiAgZXhhY3QobWVzc2FnZSkge1xuICAgIHJldHVybiB0aGlzLnRlc3Qoe1xuICAgICAgbmFtZTogJ2V4YWN0JyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgb2JqZWN0LmV4YWN0LFxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHVua25vd25LZXlzID0gdW5rbm93bih0aGlzLnNjaGVtYSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdW5rbm93bktleXMubGVuZ3RoID09PSAwIHx8IHRoaXMuY3JlYXRlRXJyb3Ioe1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgcHJvcGVydGllczogdW5rbm93bktleXMuam9pbignLCAnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgc3RyaXBVbmtub3duKCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHtcbiAgICAgIG5vVW5rbm93bjogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIG5vVW5rbm93bihub0FsbG93ID0gdHJ1ZSwgbWVzc2FnZSA9IG9iamVjdC5ub1Vua25vd24pIHtcbiAgICBpZiAodHlwZW9mIG5vQWxsb3cgIT09ICdib29sZWFuJykge1xuICAgICAgbWVzc2FnZSA9IG5vQWxsb3c7XG4gICAgICBub0FsbG93ID0gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IG5leHQgPSB0aGlzLnRlc3Qoe1xuICAgICAgbmFtZTogJ25vVW5rbm93bicsXG4gICAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHVua25vd25LZXlzID0gdW5rbm93bih0aGlzLnNjaGVtYSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gIW5vQWxsb3cgfHwgdW5rbm93bktleXMubGVuZ3RoID09PSAwIHx8IHRoaXMuY3JlYXRlRXJyb3Ioe1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgdW5rbm93bjogdW5rbm93bktleXMuam9pbignLCAnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbmV4dC5zcGVjLm5vVW5rbm93biA9IG5vQWxsb3c7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgdW5rbm93bihhbGxvdyA9IHRydWUsIG1lc3NhZ2UgPSBvYmplY3Qubm9Vbmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMubm9Vbmtub3duKCFhbGxvdywgbWVzc2FnZSk7XG4gIH1cbiAgdHJhbnNmb3JtS2V5cyhmbikge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybShvYmogPT4ge1xuICAgICAgaWYgKCFvYmopIHJldHVybiBvYmo7XG4gICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHJlc3VsdFtmbihrZXkpXSA9IG9ialtrZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuICBjYW1lbENhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtS2V5cyhjYW1lbENhc2UpO1xuICB9XG4gIHNuYWtlQ2FzZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1LZXlzKHNuYWtlQ2FzZSk7XG4gIH1cbiAgY29uc3RhbnRDYXNlKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUtleXMoa2V5ID0+IHNuYWtlQ2FzZShrZXkpLnRvVXBwZXJDYXNlKCkpO1xuICB9XG4gIGRlc2NyaWJlKG9wdGlvbnMpIHtcbiAgICBjb25zdCBuZXh0ID0gKG9wdGlvbnMgPyB0aGlzLnJlc29sdmUob3B0aW9ucykgOiB0aGlzKS5jbG9uZSgpO1xuICAgIGNvbnN0IGJhc2UgPSBzdXBlci5kZXNjcmliZShvcHRpb25zKTtcbiAgICBiYXNlLmZpZWxkcyA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG5leHQuZmllbGRzKSkge1xuICAgICAgdmFyIF9pbm5lck9wdGlvbnMyO1xuICAgICAgbGV0IGlubmVyT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICBpZiAoKF9pbm5lck9wdGlvbnMyID0gaW5uZXJPcHRpb25zKSAhPSBudWxsICYmIF9pbm5lck9wdGlvbnMyLnZhbHVlKSB7XG4gICAgICAgIGlubmVyT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGlubmVyT3B0aW9ucywge1xuICAgICAgICAgIHBhcmVudDogaW5uZXJPcHRpb25zLnZhbHVlLFxuICAgICAgICAgIHZhbHVlOiBpbm5lck9wdGlvbnMudmFsdWVba2V5XVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGJhc2UuZmllbGRzW2tleV0gPSB2YWx1ZS5kZXNjcmliZShpbm5lck9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxufVxuY3JlYXRlJDMucHJvdG90eXBlID0gT2JqZWN0U2NoZW1hLnByb3RvdHlwZTtcblxuZnVuY3Rpb24gY3JlYXRlJDIodHlwZSkge1xuICByZXR1cm4gbmV3IEFycmF5U2NoZW1hKHR5cGUpO1xufVxuY2xhc3MgQXJyYXlTY2hlbWEgZXh0ZW5kcyBTY2hlbWEge1xuICBjb25zdHJ1Y3Rvcih0eXBlKSB7XG4gICAgc3VwZXIoe1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgdHlwZXM6IHR5cGVcbiAgICAgIH0sXG4gICAgICBjaGVjayh2KSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHYpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gYHVuZGVmaW5lZGAgc3BlY2lmaWNhbGx5IG1lYW5zIHVuaW5pdGlhbGl6ZWQsIGFzIG9wcG9zZWQgdG8gXCJubyBzdWJ0eXBlXCJcbiAgICB0aGlzLmlubmVyVHlwZSA9IHZvaWQgMDtcbiAgICB0aGlzLmlubmVyVHlwZSA9IHR5cGU7XG4gIH1cbiAgX2Nhc3QoX3ZhbHVlLCBfb3B0cykge1xuICAgIGNvbnN0IHZhbHVlID0gc3VwZXIuX2Nhc3QoX3ZhbHVlLCBfb3B0cyk7XG5cbiAgICAvLyBzaG91bGQgaWdub3JlIG51bGxzIGhlcmVcbiAgICBpZiAoIXRoaXMuX3R5cGVDaGVjayh2YWx1ZSkgfHwgIXRoaXMuaW5uZXJUeXBlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGxldCBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBjb25zdCBjYXN0QXJyYXkgPSB2YWx1ZS5tYXAoKHYsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgY2FzdEVsZW1lbnQgPSB0aGlzLmlubmVyVHlwZS5jYXN0KHYsIE9iamVjdC5hc3NpZ24oe30sIF9vcHRzLCB7XG4gICAgICAgIHBhdGg6IGAke19vcHRzLnBhdGggfHwgJyd9WyR7aWR4fV1gLFxuICAgICAgICBwYXJlbnQ6IHZhbHVlLFxuICAgICAgICBvcmlnaW5hbFZhbHVlOiB2LFxuICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgaW5kZXg6IGlkeFxuICAgICAgfSkpO1xuICAgICAgaWYgKGNhc3RFbGVtZW50ICE9PSB2KSB7XG4gICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FzdEVsZW1lbnQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzQ2hhbmdlZCA/IGNhc3RBcnJheSA6IHZhbHVlO1xuICB9XG4gIF92YWxpZGF0ZShfdmFsdWUsIG9wdGlvbnMgPSB7fSwgcGFuaWMsIG5leHQpIHtcbiAgICB2YXIgX29wdGlvbnMkcmVjdXJzaXZlO1xuICAgIC8vIGxldCBzeW5jID0gb3B0aW9ucy5zeW5jO1xuICAgIC8vIGxldCBwYXRoID0gb3B0aW9ucy5wYXRoO1xuICAgIGxldCBpbm5lclR5cGUgPSB0aGlzLmlubmVyVHlwZTtcbiAgICAvLyBsZXQgZW5kRWFybHkgPSBvcHRpb25zLmFib3J0RWFybHkgPz8gdGhpcy5zcGVjLmFib3J0RWFybHk7XG4gICAgbGV0IHJlY3Vyc2l2ZSA9IChfb3B0aW9ucyRyZWN1cnNpdmUgPSBvcHRpb25zLnJlY3Vyc2l2ZSkgIT0gbnVsbCA/IF9vcHRpb25zJHJlY3Vyc2l2ZSA6IHRoaXMuc3BlYy5yZWN1cnNpdmU7XG4gICAgb3B0aW9ucy5vcmlnaW5hbFZhbHVlICE9IG51bGwgPyBvcHRpb25zLm9yaWdpbmFsVmFsdWUgOiBfdmFsdWU7XG4gICAgc3VwZXIuX3ZhbGlkYXRlKF92YWx1ZSwgb3B0aW9ucywgcGFuaWMsIChhcnJheUVycm9ycywgdmFsdWUpID0+IHtcbiAgICAgIHZhciBfb3B0aW9ucyRvcmlnaW5hbFZhbHUyO1xuICAgICAgaWYgKCFyZWN1cnNpdmUgfHwgIWlubmVyVHlwZSB8fCAhdGhpcy5fdHlwZUNoZWNrKHZhbHVlKSkge1xuICAgICAgICBuZXh0KGFycmF5RXJyb3JzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gIzk1MCBFbnN1cmUgdGhhdCBzcGFyc2UgYXJyYXkgZW1wdHkgc2xvdHMgYXJlIHZhbGlkYXRlZFxuICAgICAgbGV0IHRlc3RzID0gbmV3IEFycmF5KHZhbHVlLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBfb3B0aW9ucyRvcmlnaW5hbFZhbHU7XG4gICAgICAgIHRlc3RzW2luZGV4XSA9IGlubmVyVHlwZS5hc05lc3RlZFRlc3Qoe1xuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgcGFyZW50OiB2YWx1ZSxcbiAgICAgICAgICBwYXJlbnRQYXRoOiBvcHRpb25zLnBhdGgsXG4gICAgICAgICAgb3JpZ2luYWxQYXJlbnQ6IChfb3B0aW9ucyRvcmlnaW5hbFZhbHUgPSBvcHRpb25zLm9yaWdpbmFsVmFsdWUpICE9IG51bGwgPyBfb3B0aW9ucyRvcmlnaW5hbFZhbHUgOiBfdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1blRlc3RzKHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRlc3RzLFxuICAgICAgICBvcmlnaW5hbFZhbHVlOiAoX29wdGlvbnMkb3JpZ2luYWxWYWx1MiA9IG9wdGlvbnMub3JpZ2luYWxWYWx1ZSkgIT0gbnVsbCA/IF9vcHRpb25zJG9yaWdpbmFsVmFsdTIgOiBfdmFsdWUsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIH0sIHBhbmljLCBpbm5lclR5cGVFcnJvcnMgPT4gbmV4dChpbm5lclR5cGVFcnJvcnMuY29uY2F0KGFycmF5RXJyb3JzKSwgdmFsdWUpKTtcbiAgICB9KTtcbiAgfVxuICBjbG9uZShzcGVjKSB7XG4gICAgY29uc3QgbmV4dCA9IHN1cGVyLmNsb25lKHNwZWMpO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcmVhZG9ubHlcbiAgICBuZXh0LmlubmVyVHlwZSA9IHRoaXMuaW5uZXJUeXBlO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgLyoqIFBhcnNlIGFuIGlucHV0IEpTT04gc3RyaW5nIHRvIGFuIG9iamVjdCAqL1xuICBqc29uKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybShwYXJzZUpzb24pO1xuICB9XG4gIGNvbmNhdChzY2hlbWEpIHtcbiAgICBsZXQgbmV4dCA9IHN1cGVyLmNvbmNhdChzY2hlbWEpO1xuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciByZWFkb25seVxuICAgIG5leHQuaW5uZXJUeXBlID0gdGhpcy5pbm5lclR5cGU7XG4gICAgaWYgKHNjaGVtYS5pbm5lclR5cGUpXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHJlYWRvbmx5XG4gICAgICBuZXh0LmlubmVyVHlwZSA9IG5leHQuaW5uZXJUeXBlID9cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTGF6eSBkb2Vzbid0IGhhdmUgY29uY2F0IGFuZCB3aWxsIGJyZWFrXG4gICAgICBuZXh0LmlubmVyVHlwZS5jb25jYXQoc2NoZW1hLmlubmVyVHlwZSkgOiBzY2hlbWEuaW5uZXJUeXBlO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG4gIG9mKHNjaGVtYSkge1xuICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYXJyYXkgd2l0aG91dCB0aGUgZGVmYXVsdCB0byBiZVxuICAgIGxldCBuZXh0ID0gdGhpcy5jbG9uZSgpO1xuICAgIGlmICghaXNTY2hlbWEoc2NoZW1hKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYGFycmF5Lm9mKClgIHN1Yi1zY2hlbWEgbXVzdCBiZSBhIHZhbGlkIHl1cCBzY2hlbWEgbm90OiAnICsgcHJpbnRWYWx1ZShzY2hlbWEpKTtcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcmVhZG9ubHlcbiAgICBuZXh0LmlubmVyVHlwZSA9IHNjaGVtYTtcbiAgICBuZXh0LnNwZWMgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0LnNwZWMsIHtcbiAgICAgIHR5cGVzOiBzY2hlbWFcbiAgICB9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuICBsZW5ndGgobGVuZ3RoLCBtZXNzYWdlID0gYXJyYXkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ2xlbmd0aCcsXG4gICAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbGVuZ3RoXG4gICAgICB9LFxuICAgICAgc2tpcEFic2VudDogdHJ1ZSxcbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gdGhpcy5yZXNvbHZlKGxlbmd0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbWluKG1pbiwgbWVzc2FnZSkge1xuICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IGFycmF5Lm1pbjtcbiAgICByZXR1cm4gdGhpcy50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnbWluJyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBtaW5cbiAgICAgIH0sXG4gICAgICBza2lwQWJzZW50OiB0cnVlLFxuICAgICAgLy8gRklYTUUodHMpOiBBcnJheTx0eXBlb2YgVD5cbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+PSB0aGlzLnJlc29sdmUobWluKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBtYXgobWF4LCBtZXNzYWdlKSB7XG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgYXJyYXkubWF4O1xuICAgIHJldHVybiB0aGlzLnRlc3Qoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG5hbWU6ICdtYXgnLFxuICAgICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG1heFxuICAgICAgfSxcbiAgICAgIHNraXBBYnNlbnQ6IHRydWUsXG4gICAgICB0ZXN0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPD0gdGhpcy5yZXNvbHZlKG1heCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZW5zdXJlKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHQoKCkgPT4gW10pLnRyYW5zZm9ybSgodmFsLCBvcmlnaW5hbCkgPT4ge1xuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXR1cm4gYG51bGxgIGZvciBudWxsYWJsZSBzY2hlbWFcbiAgICAgIGlmICh0aGlzLl90eXBlQ2hlY2sodmFsKSkgcmV0dXJuIHZhbDtcbiAgICAgIHJldHVybiBvcmlnaW5hbCA9PSBudWxsID8gW10gOiBbXS5jb25jYXQob3JpZ2luYWwpO1xuICAgIH0pO1xuICB9XG4gIGNvbXBhY3QocmVqZWN0b3IpIHtcbiAgICBsZXQgcmVqZWN0ID0gIXJlamVjdG9yID8gdiA9PiAhIXYgOiAodiwgaSwgYSkgPT4gIXJlamVjdG9yKHYsIGksIGEpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybSh2YWx1ZXMgPT4gdmFsdWVzICE9IG51bGwgPyB2YWx1ZXMuZmlsdGVyKHJlamVjdCkgOiB2YWx1ZXMpO1xuICB9XG4gIGRlc2NyaWJlKG9wdGlvbnMpIHtcbiAgICBjb25zdCBuZXh0ID0gKG9wdGlvbnMgPyB0aGlzLnJlc29sdmUob3B0aW9ucykgOiB0aGlzKS5jbG9uZSgpO1xuICAgIGNvbnN0IGJhc2UgPSBzdXBlci5kZXNjcmliZShvcHRpb25zKTtcbiAgICBpZiAobmV4dC5pbm5lclR5cGUpIHtcbiAgICAgIHZhciBfaW5uZXJPcHRpb25zO1xuICAgICAgbGV0IGlubmVyT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICBpZiAoKF9pbm5lck9wdGlvbnMgPSBpbm5lck9wdGlvbnMpICE9IG51bGwgJiYgX2lubmVyT3B0aW9ucy52YWx1ZSkge1xuICAgICAgICBpbm5lck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBpbm5lck9wdGlvbnMsIHtcbiAgICAgICAgICBwYXJlbnQ6IGlubmVyT3B0aW9ucy52YWx1ZSxcbiAgICAgICAgICB2YWx1ZTogaW5uZXJPcHRpb25zLnZhbHVlWzBdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYmFzZS5pbm5lclR5cGUgPSBuZXh0LmlubmVyVHlwZS5kZXNjcmliZShpbm5lck9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxufVxuY3JlYXRlJDIucHJvdG90eXBlID0gQXJyYXlTY2hlbWEucHJvdG90eXBlO1xuXG4vLyBAdHMtaWdub3JlXG5mdW5jdGlvbiBjcmVhdGUkMShzY2hlbWFzKSB7XG4gIHJldHVybiBuZXcgVHVwbGVTY2hlbWEoc2NoZW1hcyk7XG59XG5jbGFzcyBUdXBsZVNjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIGNvbnN0cnVjdG9yKHNjaGVtYXMpIHtcbiAgICBzdXBlcih7XG4gICAgICB0eXBlOiAndHVwbGUnLFxuICAgICAgc3BlYzoge1xuICAgICAgICB0eXBlczogc2NoZW1hc1xuICAgICAgfSxcbiAgICAgIGNoZWNrKHYpIHtcbiAgICAgICAgY29uc3QgdHlwZXMgPSB0aGlzLnNwZWMudHlwZXM7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHYpICYmIHYubGVuZ3RoID09PSB0eXBlcy5sZW5ndGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy53aXRoTXV0YXRpb24oKCkgPT4ge1xuICAgICAgdGhpcy50eXBlRXJyb3IodHVwbGUubm90VHlwZSk7XG4gICAgfSk7XG4gIH1cbiAgX2Nhc3QoaW5wdXRWYWx1ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIHR5cGVzXG4gICAgfSA9IHRoaXMuc3BlYztcbiAgICBjb25zdCB2YWx1ZSA9IHN1cGVyLl9jYXN0KGlucHV0VmFsdWUsIG9wdGlvbnMpO1xuICAgIGlmICghdGhpcy5fdHlwZUNoZWNrKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBsZXQgaXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgY29uc3QgY2FzdEFycmF5ID0gdHlwZXMubWFwKCh0eXBlLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IGNhc3RFbGVtZW50ID0gdHlwZS5jYXN0KHZhbHVlW2lkeF0sIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgcGF0aDogYCR7b3B0aW9ucy5wYXRoIHx8ICcnfVske2lkeH1dYCxcbiAgICAgICAgcGFyZW50OiB2YWx1ZSxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZTogdmFsdWVbaWR4XSxcbiAgICAgICAgdmFsdWU6IHZhbHVlW2lkeF0sXG4gICAgICAgIGluZGV4OiBpZHhcbiAgICAgIH0pKTtcbiAgICAgIGlmIChjYXN0RWxlbWVudCAhPT0gdmFsdWVbaWR4XSkgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBjYXN0RWxlbWVudDtcbiAgICB9KTtcbiAgICByZXR1cm4gaXNDaGFuZ2VkID8gY2FzdEFycmF5IDogdmFsdWU7XG4gIH1cbiAgX3ZhbGlkYXRlKF92YWx1ZSwgb3B0aW9ucyA9IHt9LCBwYW5pYywgbmV4dCkge1xuICAgIGxldCBpdGVtVHlwZXMgPSB0aGlzLnNwZWMudHlwZXM7XG4gICAgc3VwZXIuX3ZhbGlkYXRlKF92YWx1ZSwgb3B0aW9ucywgcGFuaWMsICh0dXBsZUVycm9ycywgdmFsdWUpID0+IHtcbiAgICAgIHZhciBfb3B0aW9ucyRvcmlnaW5hbFZhbHUyO1xuICAgICAgLy8gaW50ZW50aW9uYWxseSBub3QgcmVzcGVjdGluZyByZWN1cnNpdmVcbiAgICAgIGlmICghdGhpcy5fdHlwZUNoZWNrKHZhbHVlKSkge1xuICAgICAgICBuZXh0KHR1cGxlRXJyb3JzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCB0ZXN0cyA9IFtdO1xuICAgICAgZm9yIChsZXQgW2luZGV4LCBpdGVtU2NoZW1hXSBvZiBpdGVtVHlwZXMuZW50cmllcygpKSB7XG4gICAgICAgIHZhciBfb3B0aW9ucyRvcmlnaW5hbFZhbHU7XG4gICAgICAgIHRlc3RzW2luZGV4XSA9IGl0ZW1TY2hlbWEuYXNOZXN0ZWRUZXN0KHtcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIHBhcmVudDogdmFsdWUsXG4gICAgICAgICAgcGFyZW50UGF0aDogb3B0aW9ucy5wYXRoLFxuICAgICAgICAgIG9yaWdpbmFsUGFyZW50OiAoX29wdGlvbnMkb3JpZ2luYWxWYWx1ID0gb3B0aW9ucy5vcmlnaW5hbFZhbHVlKSAhPSBudWxsID8gX29wdGlvbnMkb3JpZ2luYWxWYWx1IDogX3ZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5ydW5UZXN0cyh7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0ZXN0cyxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZTogKF9vcHRpb25zJG9yaWdpbmFsVmFsdTIgPSBvcHRpb25zLm9yaWdpbmFsVmFsdWUpICE9IG51bGwgPyBfb3B0aW9ucyRvcmlnaW5hbFZhbHUyIDogX3ZhbHVlLFxuICAgICAgICBvcHRpb25zXG4gICAgICB9LCBwYW5pYywgaW5uZXJUeXBlRXJyb3JzID0+IG5leHQoaW5uZXJUeXBlRXJyb3JzLmNvbmNhdCh0dXBsZUVycm9ycyksIHZhbHVlKSk7XG4gICAgfSk7XG4gIH1cbiAgZGVzY3JpYmUob3B0aW9ucykge1xuICAgIGNvbnN0IG5leHQgPSAob3B0aW9ucyA/IHRoaXMucmVzb2x2ZShvcHRpb25zKSA6IHRoaXMpLmNsb25lKCk7XG4gICAgY29uc3QgYmFzZSA9IHN1cGVyLmRlc2NyaWJlKG9wdGlvbnMpO1xuICAgIGJhc2UuaW5uZXJUeXBlID0gbmV4dC5zcGVjLnR5cGVzLm1hcCgoc2NoZW1hLCBpbmRleCkgPT4ge1xuICAgICAgdmFyIF9pbm5lck9wdGlvbnM7XG4gICAgICBsZXQgaW5uZXJPcHRpb25zID0gb3B0aW9ucztcbiAgICAgIGlmICgoX2lubmVyT3B0aW9ucyA9IGlubmVyT3B0aW9ucykgIT0gbnVsbCAmJiBfaW5uZXJPcHRpb25zLnZhbHVlKSB7XG4gICAgICAgIGlubmVyT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGlubmVyT3B0aW9ucywge1xuICAgICAgICAgIHBhcmVudDogaW5uZXJPcHRpb25zLnZhbHVlLFxuICAgICAgICAgIHZhbHVlOiBpbm5lck9wdGlvbnMudmFsdWVbaW5kZXhdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNjaGVtYS5kZXNjcmliZShpbm5lck9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHJldHVybiBiYXNlO1xuICB9XG59XG5jcmVhdGUkMS5wcm90b3R5cGUgPSBUdXBsZVNjaGVtYS5wcm90b3R5cGU7XG5cbmZ1bmN0aW9uIGNyZWF0ZShidWlsZGVyKSB7XG4gIHJldHVybiBuZXcgTGF6eShidWlsZGVyKTtcbn1cbmZ1bmN0aW9uIGNhdGNoVmFsaWRhdGlvbkVycm9yKGZuKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChWYWxpZGF0aW9uRXJyb3IuaXNFcnJvcihlcnIpKSByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmNsYXNzIExhenkge1xuICBjb25zdHJ1Y3RvcihidWlsZGVyKSB7XG4gICAgdGhpcy50eXBlID0gJ2xhenknO1xuICAgIHRoaXMuX19pc1l1cFNjaGVtYV9fID0gdHJ1ZTtcbiAgICB0aGlzLnNwZWMgPSB2b2lkIDA7XG4gICAgdGhpcy5fcmVzb2x2ZSA9ICh2YWx1ZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICBsZXQgc2NoZW1hID0gdGhpcy5idWlsZGVyKHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIGlmICghaXNTY2hlbWEoc2NoZW1hKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbGF6eSgpIGZ1bmN0aW9ucyBtdXN0IHJldHVybiBhIHZhbGlkIHNjaGVtYScpO1xuICAgICAgaWYgKHRoaXMuc3BlYy5vcHRpb25hbCkgc2NoZW1hID0gc2NoZW1hLm9wdGlvbmFsKCk7XG4gICAgICByZXR1cm4gc2NoZW1hLnJlc29sdmUob3B0aW9ucyk7XG4gICAgfTtcbiAgICB0aGlzLmJ1aWxkZXIgPSBidWlsZGVyO1xuICAgIHRoaXMuc3BlYyA9IHtcbiAgICAgIG1ldGE6IHVuZGVmaW5lZCxcbiAgICAgIG9wdGlvbmFsOiBmYWxzZVxuICAgIH07XG4gIH1cbiAgY2xvbmUoc3BlYykge1xuICAgIGNvbnN0IG5leHQgPSBuZXcgTGF6eSh0aGlzLmJ1aWxkZXIpO1xuICAgIG5leHQuc3BlYyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3BlYywgc3BlYyk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgb3B0aW9uYWxpdHkob3B0aW9uYWwpIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5jbG9uZSh7XG4gICAgICBvcHRpb25hbFxuICAgIH0pO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG4gIG9wdGlvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbmFsaXR5KHRydWUpO1xuICB9XG4gIHJlc29sdmUob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlKG9wdGlvbnMudmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGNhc3QodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZSh2YWx1ZSwgb3B0aW9ucykuY2FzdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgYXNOZXN0ZWRUZXN0KGNvbmZpZykge1xuICAgIGxldCB7XG4gICAgICBrZXksXG4gICAgICBpbmRleCxcbiAgICAgIHBhcmVudCxcbiAgICAgIG9wdGlvbnNcbiAgICB9ID0gY29uZmlnO1xuICAgIGxldCB2YWx1ZSA9IHBhcmVudFtpbmRleCAhPSBudWxsID8gaW5kZXggOiBrZXldO1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlKHZhbHVlLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIHBhcmVudFxuICAgIH0pKS5hc05lc3RlZFRlc3QoY29uZmlnKTtcbiAgfVxuICB2YWxpZGF0ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBjYXRjaFZhbGlkYXRpb25FcnJvcigoKSA9PiB0aGlzLl9yZXNvbHZlKHZhbHVlLCBvcHRpb25zKS52YWxpZGF0ZSh2YWx1ZSwgb3B0aW9ucykpO1xuICB9XG4gIHZhbGlkYXRlU3luYyh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlKHZhbHVlLCBvcHRpb25zKS52YWxpZGF0ZVN5bmModmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIHZhbGlkYXRlQXQocGF0aCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2F0Y2hWYWxpZGF0aW9uRXJyb3IoKCkgPT4gdGhpcy5fcmVzb2x2ZSh2YWx1ZSwgb3B0aW9ucykudmFsaWRhdGVBdChwYXRoLCB2YWx1ZSwgb3B0aW9ucykpO1xuICB9XG4gIHZhbGlkYXRlU3luY0F0KHBhdGgsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmUodmFsdWUsIG9wdGlvbnMpLnZhbGlkYXRlU3luY0F0KHBhdGgsIHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpc1ZhbGlkKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlKHZhbHVlLCBvcHRpb25zKS5pc1ZhbGlkKHZhbHVlLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChWYWxpZGF0aW9uRXJyb3IuaXNFcnJvcihlcnIpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuICBpc1ZhbGlkU3luYyh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlKHZhbHVlLCBvcHRpb25zKS5pc1ZhbGlkU3luYyh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgZGVzY3JpYmUob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zID8gdGhpcy5yZXNvbHZlKG9wdGlvbnMpLmRlc2NyaWJlKG9wdGlvbnMpIDoge1xuICAgICAgdHlwZTogJ2xhenknLFxuICAgICAgbWV0YTogdGhpcy5zcGVjLm1ldGEsXG4gICAgICBsYWJlbDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuICBtZXRhKC4uLmFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnNwZWMubWV0YTtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBuZXh0LnNwZWMubWV0YSA9IE9iamVjdC5hc3NpZ24obmV4dC5zcGVjLm1ldGEgfHwge30sIGFyZ3NbMF0pO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG4gIGdldCBbJ35zdGFuZGFyZCddKCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXM7XG4gICAgY29uc3Qgc3RhbmRhcmQgPSB7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgdmVuZG9yOiAneXVwJyxcbiAgICAgIGFzeW5jIHZhbGlkYXRlKHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2NoZW1hLnZhbGlkYXRlKHZhbHVlLCB7XG4gICAgICAgICAgICBhYm9ydEVhcmx5OiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVzdWx0XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKFZhbGlkYXRpb25FcnJvci5pc0Vycm9yKGVycikpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzc3VlczogaXNzdWVzRnJvbVZhbGlkYXRpb25FcnJvcihlcnIpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBzdGFuZGFyZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRMb2NhbGUoY3VzdG9tKSB7XG4gIE9iamVjdC5rZXlzKGN1c3RvbSkuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgT2JqZWN0LmtleXMoY3VzdG9tW3R5cGVdKS5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBsb2NhbGVbdHlwZV1bbWV0aG9kXSA9IGN1c3RvbVt0eXBlXVttZXRob2RdO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkTWV0aG9kKHNjaGVtYVR5cGUsIG5hbWUsIGZuKSB7XG4gIGlmICghc2NoZW1hVHlwZSB8fCAhaXNTY2hlbWEoc2NoZW1hVHlwZS5wcm90b3R5cGUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwcm92aWRlIGEgeXVwIHNjaGVtYSBjb25zdHJ1Y3RvciBmdW5jdGlvbicpO1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIE1ldGhvZCBuYW1lIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcignTWV0aG9kIGZ1bmN0aW9uIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgc2NoZW1hVHlwZS5wcm90b3R5cGVbbmFtZV0gPSBmbjtcbn1cblxuZXhwb3J0IHsgQXJyYXlTY2hlbWEsIEJvb2xlYW5TY2hlbWEsIERhdGVTY2hlbWEsIExhenkgYXMgTGF6eVNjaGVtYSwgTWl4ZWRTY2hlbWEsIE51bWJlclNjaGVtYSwgT2JqZWN0U2NoZW1hLCBTY2hlbWEsIFN0cmluZ1NjaGVtYSwgVHVwbGVTY2hlbWEsIFZhbGlkYXRpb25FcnJvciwgYWRkTWV0aG9kLCBjcmVhdGUkMiBhcyBhcnJheSwgY3JlYXRlJDcgYXMgYm9vbCwgY3JlYXRlJDcgYXMgYm9vbGVhbiwgY3JlYXRlJDQgYXMgZGF0ZSwgbG9jYWxlIGFzIGRlZmF1bHRMb2NhbGUsIGdldEluLCBpc1NjaGVtYSwgY3JlYXRlIGFzIGxhenksIGNyZWF0ZSQ4IGFzIG1peGVkLCBjcmVhdGUkNSBhcyBudW1iZXIsIGNyZWF0ZSQzIGFzIG9iamVjdCwgcHJpbnRWYWx1ZSwgcmVhY2gsIGNyZWF0ZSQ5IGFzIHJlZiwgc2V0TG9jYWxlLCBjcmVhdGUkNiBhcyBzdHJpbmcsIGNyZWF0ZSQxIGFzIHR1cGxlIH07XG4iLCJpbXBvcnQgKiBhcyBZdXAgZnJvbSAneXVwJztcblxuY29uc3QgZ2VuZXJpY0NoZWNrYm94U2NoZW1hID0gWXVwLm9iamVjdCgpLnRlc3QoXG4gICdhdExlYXN0T25lUmVxdWlyZWQnLFxuICAnUGxlYXNlIGNob29zZSBhdCBsZWFzdCBvbmUgb3B0aW9uIHRvXFx1MDBBMGNvbnRpbnVlLicsXG4gICh2YWx1ZSkgPT4ge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModmFsdWUpLnNvbWUoKHYpID0+IHYgIT09IGZhbHNlKTtcbiAgfVxuKTtcblxuZXhwb3J0IHsgZ2VuZXJpY0NoZWNrYm94U2NoZW1hIH07XG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5pbnRlcmZhY2UgU2l6ZSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgYHVzZVdpbmRvd1NpemVgIGhvb2sgd2lsbCB1c2UgcmVhY3Qgc3RhdGUgdG8gZ2V0IGluZm9ybWF0aW9uXG4gKiBvbiB3aW5kb3cgc2l6ZSBhbmQgd2lsbCB1cGRhdGUgYXMgdGhlIHdpbmRvdyBzaXplIHVwZGF0ZXNcbiAqXG4gKiBAcmV0dXJucyB7e3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfX0gc3RhdGUgdmFsdWVzIG9mIHdpZHRoIGFuZCBoZWlnaHQgYXMgYW4gb2JqZWN0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIHRvIGdldCB0aGUgZGVjb25zdHJ1Y3RlZCB2YWx1ZXMgb2YgdGhlIHdpbmRvd1xuICogY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB1c2VXaW5kb3dTaXplKCk7XG4gKi9cbmZ1bmN0aW9uIHVzZVdpbmRvd1NpemUoKTogU2l6ZSB7XG4gIGNvbnN0IFt3aW5kb3dTaXplLCBzZXRXaW5kb3dTaXplXSA9IHVzZVN0YXRlKHtcbiAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG4gICAgICBzZXRXaW5kb3dTaXplKHtcbiAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgICBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG5cbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gd2luZG93U2l6ZTtcbn1cblxuZXhwb3J0IHsgdXNlV2luZG93U2l6ZSB9O1xuIiwiaW1wb3J0IHsgUmVhY3RTREtDbGllbnQgfSBmcm9tICdAb3B0aW1pemVseS9yZWFjdC1zZGsnO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmaXJlT3B0aW1pemVseUV2ZW50LCBmb3JtVHJhY2tlciB9IGZyb20gJy4uL3V0aWxzJztcblxuZnVuY3Rpb24gdXNlR0FGb3JtVHJhY2tpbmcoXG4gIG9wdGltaXplbHk6IFJlYWN0U0RLQ2xpZW50IHwgbnVsbCxcbiAgc3RlcE5hbWU6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGZvcm1SZWYgPSB1c2VSZWY8SFRNTEZvcm1FbGVtZW50PihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmb3JtUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZvcm1UcmFja2VyLnJlZ2lzdGVyRm9ybUVsZW1lbnQoZm9ybVJlZi5jdXJyZW50KTtcbiAgICB9XG4gIH0sIFtmb3JtUmVmXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmb3JtVHJhY2tlci50cmFja1N0ZXBWaWV3KHsgc3RlcE5hbWUgfSk7XG4gICAgZmlyZU9wdGltaXplbHlFdmVudChvcHRpbWl6ZWx5LCBgJHtzdGVwTmFtZX1fc3RhcnRlZGApO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGZvcm1SZWY7XG59XG5cbmV4cG9ydCB7IHVzZUdBRm9ybVRyYWNraW5nIH07XG4iLCJpbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTdGFuZGFyZFN0ZXBUaXRsZSh7XG4gIGNoaWxkcmVuXG59OiBSZWFkb25seTx7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfT4pIHtcbiAgcmV0dXJuIChcbiAgICA8cFxuICAgICAgY2xhc3NOYW1lPVwidGV4dC02IHNtOnRleHQtNyBmb250LXNlbWlib2xkIG0tYmxvY2steHNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJzdGFuZGFyZF9zdGVwX3RpdGxlXCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9wPlxuICApO1xufVxuIiwiaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gU3RhbmRhcmRTdGVwU3VidGl0bGVUZXh0KHtcbiAgY2hpbGRyZW5cbn06IFJlYWRvbmx5PHsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9Pikge1xuICByZXR1cm4gPHAgY2xhc3NOYW1lPVwidGV4dC0zIG0tYmxvY2steGwgc206dGV4dC00XCI+e2NoaWxkcmVufTwvcD47XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW1JEUyBCb3hdKGh0dHBzOi8vZGVzaWduLnJhbXNleXNvbHV0aW9ucy5jb20vc3Rvcnlib29rLz9wYXRoPS9zdG9yeS9kZXNpZ24tc3lzdGVtLWJveC0tZGVmYXVsdClcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbUkRTIEJveCBBUEldKGh0dHBzOi8vZGVzaWduLnJhbXNleXNvbHV0aW9ucy5jb20vY29tcG9uZW50cy9ib3gvP3RhYj10ZWNobm9sb2dpZXMjcmVhY3QpXG4gKi9cbnZhciBCb3ggPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2I7XG4gICAgdmFyIF9jID0gX2EuY29sb3IsIGNvbG9yID0gX2MgPT09IHZvaWQgMCA/IFwid2hpdGVcIiA6IF9jLCBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGVsZW1lbnQgPSBfYS5lbGVtZW50LCBfZCA9IF9hLmhhc0JvcmRlciwgaGFzQm9yZGVyID0gX2QgPT09IHZvaWQgMCA/IGZhbHNlIDogX2QsIF9lID0gX2EucGFkZGluZywgcGFkZGluZyA9IF9lID09PSB2b2lkIDAgPyBcIm1kXCIgOiBfZSwgcmVzdCA9IF9fcmVzdChfYSwgW1wiY29sb3JcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImVsZW1lbnRcIiwgXCJoYXNCb3JkZXJcIiwgXCJwYWRkaW5nXCJdKTtcbiAgICB2YXIgYm94Q2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJyZHMtQm94XCIsIChfYiA9IHtcbiAgICAgICAgICAgIFwicmRzLUJveC0taGFzQm9yZGVyXCI6IGhhc0JvcmRlclxuICAgICAgICB9LFxuICAgICAgICBfYltcInJkcy1Cb3gtLVwiLmNvbmNhdChjb2xvcildID0gY29sb3IgIT09IFwid2hpdGVcIixcbiAgICAgICAgX2JbXCJyZHMtQm94LS1cIi5jb25jYXQocGFkZGluZyldID0gcGFkZGluZyAhPT0gXCJtZFwiLFxuICAgICAgICBfYiksIGNsYXNzTmFtZSk7XG4gICAgdmFyIEVsZW1lbnQgPSBlbGVtZW50IHx8IFwiZGl2XCI7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEVsZW1lbnQsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBib3hDbGFzc2VzIH0sIHJlc3QpLCBjaGlsZHJlbikpO1xufTtcbkJveC5kaXNwbGF5TmFtZSA9IFwiQm94XCI7XG5cbmV4cG9ydCB7IEJveCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Cb3guZXNtLmpzLm1hcFxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xyXG5cclxuXHJcbnZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG4vKipcbiAqXG4gKiBEZW1vczpcbiAqXG4gKiAtIFtSRFMgUHJvZ3Jlc3MgQmFyXShodHRwczovL2Rlc2lnbi5yYW1zZXlzb2x1dGlvbnMuY29tL3N0b3J5Ym9vay8/cGF0aD0vc3RvcnkvZGVzaWduLXN5c3RlbS1wcm9ncmVzcy1iYXItLWRlZmF1bHQpXG4gKlxuICogQVBJOlxuICpcbiAqIC0gW1JEUyBQcm9ncmVzcyBCYXIgQVBJXShodHRwczovL2Rlc2lnbi5yYW1zZXlzb2x1dGlvbnMuY29tL2NvbXBvbmVudHMvcHJvZ3Jlc3MtYmFyLz90YWI9dGVjaG5vbG9naWVzI3JlYWN0KVxuICovXG52YXIgUHJvZ3Jlc3NCYXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2I7XG4gICAgdmFyIGFuaW1hdGVPbkxvYWQgPSBfYS5hbmltYXRlT25Mb2FkLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGNvbG9yID0gX2EuY29sb3IsIGlzT25EYXJrQ2FudmFzID0gX2EuaXNPbkRhcmtDYW52YXMsIHNpemUgPSBfYS5zaXplLCBzcXVhcmVkID0gX2Euc3F1YXJlZCwgdmFsdWUgPSBfYS52YWx1ZSwgcmVzdCA9IF9fcmVzdChfYSwgW1wiYW5pbWF0ZU9uTG9hZFwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiaXNPbkRhcmtDYW52YXNcIiwgXCJzaXplXCIsIFwic3F1YXJlZFwiLCBcInZhbHVlXCJdKTtcbiAgICB2YXIgcHJvZ3Jlc3NCYXJDbGFzc2VzID0gY2xhc3NOYW1lcyhcInJkcy1Qcm9ncmVzc0JhclwiLCAoX2IgPSB7XG4gICAgICAgICAgICBcInJkcy1Qcm9ncmVzc0Jhci0tYW5pbWF0ZU9uTG9hZFwiOiBhbmltYXRlT25Mb2FkXG4gICAgICAgIH0sXG4gICAgICAgIF9iW1wicmRzLVByb2dyZXNzQmFyLS1cIi5jb25jYXQoY29sb3IpXSA9IGNvbG9yICE9PSBcInByaW1hcnlcIixcbiAgICAgICAgX2JbXCJvbi1kYXJrQ2FudmFzXCJdID0gaXNPbkRhcmtDYW52YXMsXG4gICAgICAgIF9iW1wicmRzLVByb2dyZXNzQmFyLS1zcXVhcmVkXCJdID0gc3F1YXJlZCxcbiAgICAgICAgX2JbXCJyZHMtUHJvZ3Jlc3NCYXItLVwiLmNvbmNhdChzaXplKV0gPSBzaXplICE9PSBcIm1lZGl1bVwiLFxuICAgICAgICBfYiksIGNsYXNzTmFtZSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9fYXNzaWduKHt9LCByZXN0LCB7IHJvbGU6IFwicHJvZ3Jlc3NiYXJcIiwgXCJhcmlhLXZhbHVlbWluXCI6IDAsIFwiYXJpYS12YWx1ZW1heFwiOiAxMDAsIFwiYXJpYS12YWx1ZW5vd1wiOiB2YWx1ZSwgY2xhc3NOYW1lOiBwcm9ncmVzc0JhckNsYXNzZXMgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBzdHlsZTogeyB3aWR0aDogXCJcIi5jb25jYXQodmFsdWUsIFwiJVwiKSB9LCBjbGFzc05hbWU6IFwicmRzLVByb2dyZXNzQmFyLXZhbHVlXCIgfSkpKTtcbn07XG5Qcm9ncmVzc0Jhci5kaXNwbGF5TmFtZSA9IFwiUHJvZ3Jlc3NCYXJcIjtcblxuZXhwb3J0IHsgUHJvZ3Jlc3NCYXIgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvZ3Jlc3NCYXIuZXNtLmpzLm1hcFxuIiwiaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuLyoqXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbUkRTIEljb25dKGh0dHBzOi8vZGVzaWduLnJhbXNleXNvbHV0aW9ucy5jb20vc3Rvcnlib29rLz9wYXRoPS9zdG9yeS9kZXNpZ24tc3lzdGVtLWljb24tLWRlZmF1bHQpXG4gKlxuICogQVBJOlxuICpcbiAqIC0gW1JEUyBJY29uIEFQSV0oaHR0cHM6Ly9kZXNpZ24ucmFtc2V5c29sdXRpb25zLmNvbS9jb21wb25lbnRzL2ljb24vP3RhYj10ZWNobm9sb2dpZXMjcmVhY3QpXG4gKi9cbnZhciBJY29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX2EsIHJlZikge1xuICAgIHZhciBfYjtcbiAgICB2YXIgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBfYyA9IF9hLmNvbG9yLCBjb2xvciA9IF9jID09PSB2b2lkIDAgPyBcImRlZmF1bHRcIiA6IF9jLCBpY29uID0gX2EuaWNvbiwgX2QgPSBfYS5zaXplLCBzaXplID0gX2QgPT09IHZvaWQgMCA/IFwibWVkaXVtXCIgOiBfZCwgdGl0bGUgPSBfYS50aXRsZSwgcmVzdCA9IF9fcmVzdChfYSwgW1wiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJpY29uXCIsIFwic2l6ZVwiLCBcInRpdGxlXCJdKTtcbiAgICB2YXIgRWxlbWVudCA9IGljb247XG4gICAgdmFyIGljb25DbGFzc2VzID0gY2xhc3NOYW1lcyhcInJkcy1JY29uXCIsIChfYiA9IHt9LFxuICAgICAgICBfYltcInJkcy1JY29uLS1cIi5jb25jYXQoY29sb3IpXSA9IGNvbG9yICE9PSBcImRlZmF1bHRcIixcbiAgICAgICAgX2JbXCJyZHMtSWNvbi0tXCIuY29uY2F0KHNpemUpXSA9IHNpemUgIT09IFwibWVkaXVtXCIsXG4gICAgICAgIF9iKSwgY2xhc3NOYW1lKTtcbiAgICB2YXIgYWNjZXNzaWJpbGl0eVByb3BzID0gdGl0bGVcbiAgICAgICAgPyB7IHRpdGxlOiB0aXRsZSwgcm9sZTogXCJpbWdcIiB9XG4gICAgICAgIDogeyBmb2N1c2FibGU6IGZhbHNlLCBcImFyaWEtaGlkZGVuXCI6IHRydWUgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRWxlbWVudCwgX19hc3NpZ24oeyByZWY6IHJlZiwgY2xhc3NOYW1lOiBpY29uQ2xhc3NlcyB9LCBhY2Nlc3NpYmlsaXR5UHJvcHMsIHJlc3QpKSk7XG59KTtcbkljb24uZGlzcGxheU5hbWUgPSBcIkljb25cIjtcblxuZXhwb3J0IHsgSWNvbiBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JY29uLmVzbS5qcy5tYXBcbiIsImltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xyXG5cclxuXHJcbnZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG4vLyBEbyBub3QgZWRpdCBkaXJlY3RseVxuLy8gR2VuZXJhdGVkIG9uIFR1ZSwgMjAgSmFuIDIwMjYgMTU6NTA6MzIgR01UXG52YXIgQ2hldnJvbkxlZnRJY29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX2EsIHJlZikge1xuICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCByZXN0ID0gX19yZXN0KF9hLCBbXCJ0aXRsZVwiXSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9fYXNzaWduKHsgcmVmOiByZWYsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIHdpZHRoOiAyNCwgaGVpZ2h0OiAyNCB9LCByZXN0KSxcbiAgICAgICAgISF0aXRsZSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGl0bGVcIiwgbnVsbCwgdGl0bGUpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgZDogXCJNMTcuNyAyLjdhMSAxIDAgMSAwLTEuNC0xLjRsLTEwIDEwYTEgMSAwIDAgMCAwIDEuNGwxMCAxMGExIDEgMCAwIDAgMS40LTEuNEw4LjQyIDEybDkuMy05LjN6XCIgfSkpKTtcbn0pO1xuQ2hldnJvbkxlZnRJY29uLmRpc3BsYXlOYW1lID0gJ0NoZXZyb25MZWZ0SWNvbic7XG5cbmV4cG9ydCB7IENoZXZyb25MZWZ0SWNvbiB9O1xuIiwiaW1wb3J0IEljb24gZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2ljb24nO1xuaW1wb3J0IHsgQ2hldnJvbkxlZnRJY29uIH0gZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2ljb25zJztcbmltcG9ydCB7IHVzZVdpemFyZCB9IGZyb20gJ3JlYWN0LXVzZS13aXphcmQnO1xuXG5mdW5jdGlvbiBCYWNrQ2hldnJvbih7IGRhdGFUZXN0SUQgfTogUmVhZG9ubHk8eyBkYXRhVGVzdElEOiBzdHJpbmcgfT4pIHtcbiAgY29uc3QgeyBwcmV2aW91c1N0ZXAsIGlzRmlyc3RTdGVwIH0gPSB1c2VXaXphcmQoKTtcbiAgcmV0dXJuIChcbiAgICA8SWNvblxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SUR9XG4gICAgICBzaXplPXsnc21hbGwnfVxuICAgICAgaWNvbj17Q2hldnJvbkxlZnRJY29ufVxuICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgJ2N1cnNvci1wb2ludGVyIHRleHQtYmx1ZS01MCcgKyAoaXNGaXJzdFN0ZXAgPyAnIGludmlzaWJsZScgOiAnJylcbiAgICAgIH1cbiAgICAgIG9uQ2xpY2s9eygpID0+IHByZXZpb3VzU3RlcCgpfVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IEJhY2tDaGV2cm9uIH07XG4iLCJpbXBvcnQgQm94IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9ib3gnO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VXaXphcmQgfSBmcm9tICdyZWFjdC11c2Utd2l6YXJkJztcbmltcG9ydCBQcm9ncmVzc0JhciBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7IEJhY2tDaGV2cm9uIH0gZnJvbSAnLi4vQmFja0NoZXZyb24nO1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufVxuXG5mdW5jdGlvbiBTdGVwV3JhcHBlcih7IGNoaWxkcmVuIH06IFJlYWRvbmx5PFByb3BzPik6IFJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IHsgYWN0aXZlU3RlcCwgc3RlcENvdW50IH0gPSB1c2VXaXphcmQoKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgZGF0YS10ZXN0aWQ9eydzdGVwLXdyYXBwZXInfSBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICA8Qm94IGNsYXNzTmFtZT1cInctWzM0NXB4XSBzbTohdy1bNDE4cHhdXCIgaGFzQm9yZGVyPXt0cnVlfSBwYWRkaW5nPVwibGdcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgIDxCYWNrQ2hldnJvbiBkYXRhVGVzdElEPVwidGF4X3JlZmVycmFsX2Zvcm1fYmFja19idXR0b25cIiAvPlxuICAgICAgICAgIDxQcm9ncmVzc0JhclxuICAgICAgICAgICAgdmFsdWU9eygoYWN0aXZlU3RlcCArIDEuMCkgLyAoc3RlcENvdW50ICsgMC41KSkgKiAxMDB9XG4gICAgICAgICAgICBjbGFzc05hbWU9eydtbC00IG1yLTQnfVxuICAgICAgICAgICAgc2l6ZT17J2xhcmdlJ31cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsndy1bMTguNXB4XSBoLVsxOC41cHhdJ30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQm94PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgeyBTdGVwV3JhcHBlciB9O1xuIiwiaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbi8vIERvIG5vdCBlZGl0IGRpcmVjdGx5XG4vLyBHZW5lcmF0ZWQgb24gVHVlLCAyMCBKYW4gMjAyNiAxNTo1MDozMiBHTVRcbnZhciBQcm9jZXNzaW5nSWNvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9hLCByZWYpIHtcbiAgICB2YXIgdGl0bGUgPSBfYS50aXRsZSwgcmVzdCA9IF9fcmVzdChfYSwgW1widGl0bGVcIl0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfX2Fzc2lnbih7IHJlZjogcmVmLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCB3aWR0aDogMjQsIGhlaWdodDogMjQgfSwgcmVzdCksXG4gICAgICAgICEhdGl0bGUgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcInRpdGxlXCIsIG51bGwsIHRpdGxlKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBkOiBcIk0xMiAyNGExMiAxMiAwIDEgMSAxMi0xMiAxIDEgMCAwIDEtMiAwIDEwIDEwIDAgMSAwLTEuODE4IDUuNzUxIDEgMSAwIDAgMSAxLjYzNiAxLjE1QTEyLjAyMiAxMi4wMjIgMCAwIDEgMTIgMjRaXCIgfSkpKTtcbn0pO1xuUHJvY2Vzc2luZ0ljb24uZGlzcGxheU5hbWUgPSAnUHJvY2Vzc2luZ0ljb24nO1xuXG5leHBvcnQgeyBQcm9jZXNzaW5nSWNvbiB9O1xuIiwiaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBUb2tlbnMgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL3Rva2Vucy9kaXN0L21haW4uanNvbic7XG5pbXBvcnQgeyBQcm9jZXNzaW5nSWNvbiB9IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9pY29ucyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbnZhciBnZXRDb25kaXRpb25hbFByb3BzID0gZnVuY3Rpb24gKGRpc2FibGVkLCBpc0xpbmssIGhyZWYsIGxvYWRpbmcpIHsgcmV0dXJuICh7XG4gICAgXCJhcmlhLWRpc2FibGVkXCI6IChpc0xpbmsgJiYgKGRpc2FibGVkIHx8IGxvYWRpbmcpKSB8fCB1bmRlZmluZWQsXG4gICAgZGlzYWJsZWQ6ICFpc0xpbmsgJiYgKGRpc2FibGVkIHx8IGxvYWRpbmcpLFxuICAgIGhyZWY6ICEoZGlzYWJsZWQgfHwgbG9hZGluZykgPyBocmVmIDogdW5kZWZpbmVkLFxufSk7IH07XG52YXIgZ2V0SWNvblByb3BzID0gZnVuY3Rpb24gKGljb25Pbmx5LCBpY29uUG9zaXRpb24sIGJ1dHRvblNpemUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBpY29uQ2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJyZHMtQnV0dG9uLWljb25cIiwgKF9hID0ge30sXG4gICAgICAgIF9hW1wicmRzLUJ1dHRvbi1pY29uLS1cIi5jb25jYXQoaWNvblBvc2l0aW9uKV0gPSAhaWNvbk9ubHksXG4gICAgICAgIF9hKSk7XG4gICAgdmFyIGljb25TaXplID0gYnV0dG9uU2l6ZSA9PT0gXCJzbWFsbFwiID8gVG9rZW5zLlNpemVJY29uU20gOiBUb2tlbnMuU2l6ZUljb25NZDtcbiAgICBpZiAoaWNvbk9ubHkgJiYgKGJ1dHRvblNpemUgPT09IFwibGFyZ2VcIiB8fCBidXR0b25TaXplID09PSBcInhsYXJnZVwiKSkge1xuICAgICAgICBpY29uU2l6ZSA9IFRva2Vucy5TaXplSWNvbkxnO1xuICAgIH1cbiAgICByZXR1cm4gX2IgPSB7XG4gICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBpY29uQ2xhc3NlcyxcbiAgICAgICAgICAgIGhlaWdodDogaWNvblNpemUsXG4gICAgICAgICAgICB3aWR0aDogaWNvblNpemVcbiAgICAgICAgfSxcbiAgICAgICAgX2JbXCJhcmlhLWhpZGRlblwiXSA9IHRydWUsXG4gICAgICAgIF9iLmZvY3VzYWJsZSA9IGZhbHNlLFxuICAgICAgICBfYjtcbn07XG52YXIgdmFsaWRhdGVBY2Nlc3NpYmlsaXR5ID0gZnVuY3Rpb24gKGljb25Pbmx5LCBhcmlhTGFiZWwpIHtcbiAgICBpZiAoaWNvbk9ubHkgJiYgIWFyaWFMYWJlbCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSWYgeW91IGFyZSBhZGRpbmcgYW4gJ2ljb25Pbmx5JyBCdXR0b24sIHBsZWFzZSBwcm92aWRlIGFuIGFjY2Vzc2libGUgJ2FyaWEtbGFiZWwnIGF0dHJpYnV0ZS4gU2VlIHRoZSBCdXR0b24gQWNjZXNzaWJpbGl0eSBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uOiBodHRwczovL2Rlc2lnbi5yYW1zZXlzb2x1dGlvbnMuY29tL2NvbXBvbmVudHMvYnV0dG9uLyNhY2Nlc3NpYmlsaXR5XCIpO1xuICAgIH1cbn07XG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5mdW5jdGlvbiBCdXR0b24oX2EsIHJlZikge1xuICAgIHZhciBfYjtcbiAgICB2YXIgX2MgPSBfYS5hcHBlYXJhbmNlLCBhcHBlYXJhbmNlID0gX2MgPT09IHZvaWQgMCA/IFwicHJpbWFyeVwiIDogX2MsIGFyaWFMYWJlbCA9IF9hW1wiYXJpYS1sYWJlbFwiXSwgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBfZCA9IF9hLmRpc2FibGVkLCBkaXNhYmxlZCA9IF9kID09PSB2b2lkIDAgPyBmYWxzZSA6IF9kLCBlbGVtZW50ID0gX2EuZWxlbWVudCwgX2UgPSBfYS5mdWxsV2lkdGhPbk1vYmlsZSwgZnVsbFdpZHRoT25Nb2JpbGUgPSBfZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZSwgaHJlZiA9IF9hLmhyZWYsIEJ1dHRvbkljb24gPSBfYS5pY29uLCBfZiA9IF9hLmljb25Pbmx5LCBpY29uT25seSA9IF9mID09PSB2b2lkIDAgPyBmYWxzZSA6IF9mLCBfZyA9IF9hLmljb25Qb3NpdGlvbiwgaWNvblBvc2l0aW9uID0gX2cgPT09IHZvaWQgMCA/IFwibGVmdFwiIDogX2csIF9oID0gX2EuaXNPbkRhcmtDYW52YXMsIGlzT25EYXJrQ2FudmFzID0gX2ggPT09IHZvaWQgMCA/IGZhbHNlIDogX2gsIF9qID0gX2EubG9hZGluZywgbG9hZGluZyA9IF9qID09PSB2b2lkIDAgPyBmYWxzZSA6IF9qLCBfayA9IF9hLnNpemUsIHNpemUgPSBfayA9PT0gdm9pZCAwID8gXCJtZWRpdW1cIiA6IF9rLCByZXN0ID0gX19yZXN0KF9hLCBbXCJhcHBlYXJhbmNlXCIsIFwiYXJpYS1sYWJlbFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJlbGVtZW50XCIsIFwiZnVsbFdpZHRoT25Nb2JpbGVcIiwgXCJocmVmXCIsIFwiaWNvblwiLCBcImljb25Pbmx5XCIsIFwiaWNvblBvc2l0aW9uXCIsIFwiaXNPbkRhcmtDYW52YXNcIiwgXCJsb2FkaW5nXCIsIFwic2l6ZVwiXSk7XG4gICAgdmFyIGlzTGluayA9IGVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50ICE9PSBcImJ1dHRvblwiO1xuICAgIHZhciBFbGVtZW50ID0gZWxlbWVudCB8fCBcImJ1dHRvblwiO1xuICAgIHZhciBidXR0b25DbGFzc2VzID0gY2xhc3NOYW1lcyhcInJkcy1CdXR0b25cIiwgKF9iID0ge30sXG4gICAgICAgIF9iW1wicmRzLUJ1dHRvbi0tXCIuY29uY2F0KGFwcGVhcmFuY2UpXSA9IGFwcGVhcmFuY2UgIT09IFwicHJpbWFyeVwiLFxuICAgICAgICBfYltcInJkcy1CdXR0b24tLVwiLmNvbmNhdChzaXplKV0gPSBzaXplICE9PSBcIm1lZGl1bVwiLFxuICAgICAgICBfYltcInJkcy1CdXR0b24tLWZ1bGxXaWR0aE9uTW9iaWxlXCJdID0gIWljb25Pbmx5ICYmIGZ1bGxXaWR0aE9uTW9iaWxlLFxuICAgICAgICBfYltcInJkcy1CdXR0b24tLWljb25Pbmx5XCJdID0gaWNvbk9ubHksXG4gICAgICAgIF9iW1wiaXMtZGlzYWJsZWRcIl0gPSBpc0xpbmsgJiYgZGlzYWJsZWQsXG4gICAgICAgIF9iW1wiaXMtbG9hZGluZ1wiXSA9IGxvYWRpbmcsXG4gICAgICAgIF9iW1wib24tZGFya0NhbnZhc1wiXSA9IGlzT25EYXJrQ2FudmFzLFxuICAgICAgICBfYiksIGNsYXNzTmFtZSk7XG4gICAgdmFyIE15QnV0dG9uSWNvbiA9IGxvYWRpbmcgPyBQcm9jZXNzaW5nSWNvbiA6IEJ1dHRvbkljb247XG4gICAgLy8gd2FybiBpZiBpY29uT25seSBpcyAndHJ1ZScgd2l0aG91dCBhcmlhLWxhYmVsIGF0dHJpYnV0ZVxuICAgIHZhbGlkYXRlQWNjZXNzaWJpbGl0eShpY29uT25seSwgYXJpYUxhYmVsKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRWxlbWVudCwgX19hc3NpZ24oeyBjbGFzc05hbWU6IGJ1dHRvbkNsYXNzZXMgfSwgZ2V0Q29uZGl0aW9uYWxQcm9wcyhkaXNhYmxlZCwgaXNMaW5rLCBocmVmLCBsb2FkaW5nKSwgcmVzdCwgeyBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLCByZWY6IHJlZiB9KSxcbiAgICAgICAgTXlCdXR0b25JY29uICYmIGljb25Qb3NpdGlvbiA9PT0gXCJsZWZ0XCIgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoTXlCdXR0b25JY29uLCBfX2Fzc2lnbih7fSwgZ2V0SWNvblByb3BzKGljb25Pbmx5LCBpY29uUG9zaXRpb24sIHNpemUpKSkpLFxuICAgICAgICAhaWNvbk9ubHkgJiYgY2hpbGRyZW4sXG4gICAgICAgIE15QnV0dG9uSWNvbiAmJiBpY29uUG9zaXRpb24gPT09IFwicmlnaHRcIiAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChNeUJ1dHRvbkljb24sIF9fYXNzaWduKHt9LCBnZXRJY29uUHJvcHMoaWNvbk9ubHksIGljb25Qb3NpdGlvbiwgc2l6ZSkpKSkpKTtcbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xudmFyIENvbXBvbmVudCA9IGZvcndhcmRSZWYoQnV0dG9uKTtcbkJ1dHRvbi5kaXNwbGF5TmFtZSA9IFwiQnV0dG9uXCI7XG5cbmV4cG9ydCB7IENvbXBvbmVudCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CdXR0b24uZXNtLmpzLm1hcFxuIiwiaW1wb3J0IHsgdXNlUmVmZXJyYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9idXR0b24nO1xuaW1wb3J0IHsgVmVyaWZpY2F0aW9uU3RhdHVzIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdXNlV2luZG93U2l6ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9ob29rcyc7XG5cbmludGVyZmFjZSBSZXN1Ym1pdEJ1dHRvblByb3BzIHtcbiAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgc3RhdHVzOiBWZXJpZmljYXRpb25TdGF0dXM7XG59XG5cbmZ1bmN0aW9uIGdldFJlc2VuZEJ1dHRvblRleHQoXG4gIHN0YXR1czogVmVyaWZpY2F0aW9uU3RhdHVzLFxuICBwaG9uZVZlcmlmaWNhdGlvbkNvdW50RG93bjogbnVtYmVyXG4pIHtcbiAgaWYgKHN0YXR1cyA9PT0gVmVyaWZpY2F0aW9uU3RhdHVzLnJlc2VuZGluZ0NvZGUpIHtcbiAgICByZXR1cm4gJ1Jlc2VuZGluZy4uLic7XG4gIH0gZWxzZSBpZiAocGhvbmVWZXJpZmljYXRpb25Db3VudERvd24gPiAwKSB7XG4gICAgcmV0dXJuIGBSZXNlbmQgQ29kZSBpbiAke3Bob25lVmVyaWZpY2F0aW9uQ291bnREb3dufWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICdSZXNlbmQgQ29kZSc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3VibWl0QnV0dG9uKHtcbiAgb25DbGljayxcbiAgc3RhdHVzXG59OiBSZWFkb25seTxSZXN1Ym1pdEJ1dHRvblByb3BzPikge1xuICBjb25zdCB7IHBob25lVmVyaWZpY2F0aW9uQ291bnREb3duIH0gPSB1c2VSZWZlcnJhbENvbnRleHQoKTtcbiAgY29uc3QgcmVzZW5kQnV0dG9uVGV4dCA9IGdldFJlc2VuZEJ1dHRvblRleHQoXG4gICAgc3RhdHVzLFxuICAgIHBob25lVmVyaWZpY2F0aW9uQ291bnREb3duXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICBkYXRhLXRlc3RpZD1cInRheF9yZXNlbmRfY29kZV9idXR0b25cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9XCIhdy1mdWxsXCJcbiAgICAgIGljb25Qb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgIGFwcGVhcmFuY2U9XCJzdWJ0bGVcIlxuICAgICAgZnVsbFdpZHRoT25Nb2JpbGU9e3RydWV9XG4gICAgICBzaXplPXt1c2VXaW5kb3dTaXplKCk/LndpZHRoID4gNTk5ID8gJ2xhcmdlJyA6ICdtZWRpdW0nfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGxvYWRpbmc9e3N0YXR1cyA9PT0gVmVyaWZpY2F0aW9uU3RhdHVzLnJlc2VuZGluZ0NvZGV9XG4gICAgICBkaXNhYmxlZD17XG4gICAgICAgIHBob25lVmVyaWZpY2F0aW9uQ291bnREb3duID4gMCB8fFxuICAgICAgICBzdGF0dXMgPT09IFZlcmlmaWNhdGlvblN0YXR1cy5yZXNlbmRpbmdDb2RlXG4gICAgICB9XG4gICAgPlxuICAgICAge3Jlc2VuZEJ1dHRvblRleHR9XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJpbXBvcnQgQnV0dG9uIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9idXR0b24nO1xuaW1wb3J0IHsgdXNlV2luZG93U2l6ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9ob29rcyc7XG5pbXBvcnQgeyBWZXJpZmljYXRpb25TdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cbmludGVyZmFjZSBTdWJtaXRCdXR0b25Qcm9wcyB7XG4gIHN0YXR1czogVmVyaWZpY2F0aW9uU3RhdHVzO1xufVxuXG5mdW5jdGlvbiBnZXRTdWJtaXRCdXR0b25UZXh0KHN0YXR1czogVmVyaWZpY2F0aW9uU3RhdHVzKSB7XG4gIGlmIChWZXJpZmljYXRpb25TdGF0dXMudmVyaWZ5aW5nQ29kZSA9PT0gc3RhdHVzKSB7XG4gICAgcmV0dXJuICdWZXJpZnlpbmcgQ29kZS4uLic7XG4gIH0gZWxzZSBpZiAoVmVyaWZpY2F0aW9uU3RhdHVzLnN1Ym1pdHRpbmdSZWZlcnJhbCA9PT0gc3RhdHVzKSB7XG4gICAgcmV0dXJuICdGaW5kaW5nIFByb3MuLi4nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnU2VlIE15IFBybyc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFN1Ym1pdEJ1dHRvbih7IHN0YXR1cyB9OiBSZWFkb25seTxTdWJtaXRCdXR0b25Qcm9wcz4pIHtcbiAgY29uc3Qgc3VibWl0QnV0dG9uVGV4dCA9IGdldFN1Ym1pdEJ1dHRvblRleHQoc3RhdHVzKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgY2xhc3NOYW1lPVwiIXctZnVsbFwiXG4gICAgICBmdWxsV2lkdGhPbk1vYmlsZT17dHJ1ZX1cbiAgICAgIHNpemU9e3VzZVdpbmRvd1NpemUoKT8ud2lkdGggPiA1OTkgPyAnbGFyZ2UnIDogJ21lZGl1bSd9XG4gICAgICBpZD1cInNlZV9wcm9zXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwidGF4X3NlZV9wcm9zX3N1Ym1pdFwiXG4gICAgICBsb2FkaW5nPXtzdWJtaXRCdXR0b25UZXh0ICE9PSAnU2VlIE15IFBybyd9XG4gICAgPlxuICAgICAge3N1Ym1pdEJ1dHRvblRleHR9XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuLy8gRG8gbm90IGVkaXQgZGlyZWN0bHlcbi8vIEdlbmVyYXRlZCBvbiBUdWUsIDIwIEphbiAyMDI2IDE1OjUwOjMyIEdNVFxudmFyIEFycm93UmlnaHRJY29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX2EsIHJlZikge1xuICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCByZXN0ID0gX19yZXN0KF9hLCBbXCJ0aXRsZVwiXSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9fYXNzaWduKHsgcmVmOiByZWYsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIHdpZHRoOiAyNCwgaGVpZ2h0OiAyNCB9LCByZXN0KSxcbiAgICAgICAgISF0aXRsZSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGl0bGVcIiwgbnVsbCwgdGl0bGUpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgZDogXCJNMTQuMyA0LjNhMSAxIDAgMCAxIDEuNCAwbDcgN2ExIDEgMCAwIDEgLjMuN3YtLjA5YTEgMSAwIDAgMSAwIC4wNlYxMmExLjAyIDEuMDIgMCAwIDEtLjIuNiAxIDEgMCAwIDEtLjEuMWwuMDktLjA4aC0uMDFsLS4wNy4wOS03IDdhMSAxIDAgMCAxLTEuNDItMS40MkwxOS42IDEzSDJhMSAxIDAgMCAxLTEtLjg4VjEyYTEgMSAwIDAgMSAxLTFoMTcuNTlsLTUuMy01LjNhMSAxIDAgMCAxLS4wOC0xLjMxelwiIH0pKSk7XG59KTtcbkFycm93UmlnaHRJY29uLmRpc3BsYXlOYW1lID0gJ0Fycm93UmlnaHRJY29uJztcblxuZXhwb3J0IHsgQXJyb3dSaWdodEljb24gfTtcbiIsImltcG9ydCBCdXR0b24gZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2J1dHRvbic7XG5pbXBvcnQgeyB1c2VXaW5kb3dTaXplIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2hvb2tzJztcbmltcG9ydCB7IEFycm93UmlnaHRJY29uIH0gZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2ljb25zJztcblxuZnVuY3Rpb24gU3RhbmRhcmROZXh0QnV0dG9uKCkge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwic3RhbmRhcmRfbmV4dF9idXR0b25cIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBpY29uPXtBcnJvd1JpZ2h0SWNvbn1cbiAgICAgIGljb25Qb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgIGNsYXNzTmFtZT17JyF3LWZ1bGwnfVxuICAgICAgZnVsbFdpZHRoT25Nb2JpbGU9e3RydWV9XG4gICAgICBzaXplPXt1c2VXaW5kb3dTaXplKCk/LndpZHRoID4gNTk5ID8gJ2xhcmdlJyA6ICdtZWRpdW0nfVxuICAgID5cbiAgICAgIE5leHRcbiAgICA8L0J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgU3RhbmRhcmROZXh0QnV0dG9uIH07XG4iLCJmdW5jdGlvbiBFcnJvclRleHQoeyBlcnJvclRleHQgfTogeyBlcnJvclRleHQ/OiBzdHJpbmcgfSkge1xuICByZXR1cm4gKFxuICAgICEhZXJyb3JUZXh0ICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0YXhfcmVmZXJyYWxfZm9ybV9lcnJvcl90ZXh0XCJcbiAgICAgICAgY2xhc3NOYW1lPVwidGV4dC0yIHRleHQtcmVkLTYwXCJcbiAgICAgID5cbiAgICAgICAge2Vycm9yVGV4dH1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IHsgRXJyb3JUZXh0IH07XG4iLCJpbXBvcnQgQ2hlY2tib3hUaWxlIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9jaGVja2JveC10aWxlJztcbmltcG9ydCB7IHVzZVdpemFyZCB9IGZyb20gJ3JlYWN0LXVzZS13aXphcmQnO1xuaW1wb3J0IHsgRmllbGRFcnJvciwgRm9ybVN0YXRlLCB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHl1cFJlc29sdmVyIH0gZnJvbSAnQGhvb2tmb3JtL3Jlc29sdmVycy95dXAnO1xuaW1wb3J0IHsgZ2VuZXJpY0NoZWNrYm94U2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9nZW5lcmljQ2hlY2tib3hTY2hlbWEnO1xuaW1wb3J0IHsgT3B0aW1pemVseUNvbnRleHQgfSBmcm9tICdAb3B0aW1pemVseS9yZWFjdC1zZGsnO1xuaW1wb3J0IHsgZmlyZU9wdGltaXplbHlFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyBSZWZlcnJhbEZvcm1EYXRhLCB1c2VSZWZlcnJhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0JztcbmltcG9ydCB7IHVzZUdBRm9ybVRyYWNraW5nIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2hvb2tzJztcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB0cmFja1N0ZXBDb21wbGV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvYW5hbHl0aWNzJztcbmltcG9ydCB7IEZvcm1OYW1lT3B0aW9ucyB9IGZyb20gJy4uLy4uL2VudW1zL0Zvcm1OYW1lT3B0aW9ucyc7XG5pbXBvcnQge1xuICBTdGFuZGFyZFN0ZXBTdWJ0aXRsZVRleHQsXG4gIFN0YW5kYXJkU3RlcFRpdGxlLFxuICBTdGVwV3JhcHBlclxufSBmcm9tICcuLi9zdGVwQ29tcG9uZW50cyc7XG5pbXBvcnQgeyBTdGFuZGFyZE5leHRCdXR0b24gfSBmcm9tICcuLi9idXR0b25zJztcbmltcG9ydCB7IEVycm9yVGV4dCB9IGZyb20gJy4uL0Vycm9yVGV4dCc7XG5cbmludGVyZmFjZSBHZW5lcmljQ2hlY2tib3hTdGVwRmllbGRzIHtcbiAgW2tleTogc3RyaW5nXTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIENoZWNrQm94T3B0aW9ucyB7XG4gIFtrZXk6IHN0cmluZ106IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdlbmVyaWNDaGVja2JveFN0ZXBQcm9wcyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN1YnRpdGxlOiBzdHJpbmc7XG4gIGNoZWNrYm94T3B0aW9uczogQ2hlY2tCb3hPcHRpb25zO1xuICByZWZlcnJhbEZpZWxkTmFtZToga2V5b2YgUmVmZXJyYWxGb3JtRGF0YTtcbiAgc3RlcE5hbWU/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldE9iamVjdFZhbHVlKG9iajogb2JqZWN0LCBmaWVsZE5hbWU6IHN0cmluZykge1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMob2JqKTtcbiAgY29uc3QgWywgZW50cnlWYWx1ZV0gPSBlbnRyaWVzLmZpbmQoKFtmaWVsZF0pID0+IGZpZWxkID09PSBmaWVsZE5hbWUpID8/IFtdO1xuICByZXR1cm4gZW50cnlWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uSXNSZXF1aXJlZEVycm9yVGV4dChcbiAgZm9ybVN0YXRlOiBGb3JtU3RhdGU8R2VuZXJpY0NoZWNrYm94U3RlcEZpZWxkcz5cbikge1xuICBjb25zdCBiYXNlU2hhcGVFcnJvciA9IGdldE9iamVjdFZhbHVlKGZvcm1TdGF0ZS5lcnJvcnMsICcnKSBhc1xuICAgIHwgRmllbGRFcnJvclxuICAgIHwgdW5kZWZpbmVkO1xuICByZXR1cm4gYmFzZVNoYXBlRXJyb3I/Lm1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGdldENoZWNrYm94QW5zd2VycyhcbiAgdmFsdWVzOiBHZW5lcmljQ2hlY2tib3hTdGVwRmllbGRzLFxuICBjaGVja2JveE9wdGlvbnM6IENoZWNrQm94T3B0aW9uc1xuKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh2YWx1ZXMpXG4gICAgLmZpbHRlcigoWywgaXNDaGVja2VkXSkgPT4gaXNDaGVja2VkKVxuICAgIC5tYXAoKFthbnN3ZXJdKSA9PiBhbnN3ZXIpXG4gICAgLm1hcCgoYW5zd2VyKSA9PiBjaGVja2JveE9wdGlvbnNbYW5zd2VyXSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHZW5lcmljQ2hlY2tib3hTdGVwRmllbGRzRnJvbVJlZmVycmFsKFxuICBjaGVja2JveE9wdGlvbnM6IENoZWNrQm94T3B0aW9ucyxcbiAgcmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGEsXG4gIHJlZmVycmFsRmllbGROYW1lOiBzdHJpbmdcbikge1xuICBmdW5jdGlvbiBhY2N1bXVsYXRlQ2hlY2tib3hTdGF0ZXMoXG4gICAgYWNjOiBHZW5lcmljQ2hlY2tib3hTdGVwRmllbGRzLFxuICAgIGNoZWNrYm94OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgZm91bmRDaGVja2JveGVzQXJyYXlGcm9tUmVmZXJyYWwgPSAoZ2V0T2JqZWN0VmFsdWUoXG4gICAgICByZWZlcnJhbCxcbiAgICAgIHJlZmVycmFsRmllbGROYW1lXG4gICAgKSA/PyBbXSkgYXMgc3RyaW5nW107XG5cbiAgICBhY2NbY2hlY2tib3hdID0gZm91bmRDaGVja2JveGVzQXJyYXlGcm9tUmVmZXJyYWwuaW5jbHVkZXMoXG4gICAgICBjaGVja2JveE9wdGlvbnNbY2hlY2tib3hdIHx8ICcnXG4gICAgKTtcbiAgICByZXR1cm4gYWNjO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhjaGVja2JveE9wdGlvbnMpLnJlZHVjZShcbiAgICBhY2N1bXVsYXRlQ2hlY2tib3hTdGF0ZXMsXG4gICAge30gYXMgR2VuZXJpY0NoZWNrYm94U3RlcEZpZWxkc1xuICApO1xufVxuXG5mdW5jdGlvbiBHZW5lcmljQ2hlY2tib3hTdGVwKHtcbiAgdGl0bGUsXG4gIHN1YnRpdGxlLFxuICBjaGVja2JveE9wdGlvbnMsXG4gIHJlZmVycmFsRmllbGROYW1lLFxuICBzdGVwTmFtZSA9IGAke3JlZmVycmFsRmllbGROYW1lfV9jaGVja2JveF9zdGVwYFxufTogUmVhZG9ubHk8R2VuZXJpY0NoZWNrYm94U3RlcFByb3BzPikge1xuICBjb25zdCB7IG9wdGltaXplbHkgfSA9IHVzZUNvbnRleHQoT3B0aW1pemVseUNvbnRleHQpO1xuICBjb25zdCBmb3JtUmVmID0gdXNlR0FGb3JtVHJhY2tpbmcob3B0aW1pemVseSwgc3RlcE5hbWUpO1xuICBjb25zdCB7IG5leHRTdGVwLCBhY3RpdmVTdGVwIH0gPSB1c2VXaXphcmQoKTtcbiAgY29uc3QgeyByZWZlcnJhbCwgdXBkYXRlUmVmZXJyYWwgfSA9IHVzZVJlZmVycmFsQ29udGV4dCgpO1xuXG4gIGNvbnN0IHsgcmVnaXN0ZXIsIGhhbmRsZVN1Ym1pdCwgZm9ybVN0YXRlIH0gPVxuICAgIHVzZUZvcm08R2VuZXJpY0NoZWNrYm94U3RlcEZpZWxkcz4oe1xuICAgICAgZGVmYXVsdFZhbHVlczogZXh0cmFjdEdlbmVyaWNDaGVja2JveFN0ZXBGaWVsZHNGcm9tUmVmZXJyYWwoXG4gICAgICAgIGNoZWNrYm94T3B0aW9ucyxcbiAgICAgICAgcmVmZXJyYWwsXG4gICAgICAgIHJlZmVycmFsRmllbGROYW1lXG4gICAgICApLFxuICAgICAgcmVzb2x2ZXI6IHl1cFJlc29sdmVyKGdlbmVyaWNDaGVja2JveFNjaGVtYSlcbiAgICB9KTtcbiAgY29uc3QgZXJyb3JUZXh0ID0gZ2V0U2VsZWN0aW9uSXNSZXF1aXJlZEVycm9yVGV4dChmb3JtU3RhdGUpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIG9uVmFsaWRTdWJtaXQodmFsdWVzOiBHZW5lcmljQ2hlY2tib3hTdGVwRmllbGRzKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGdldENoZWNrYm94QW5zd2Vycyh2YWx1ZXMsIGNoZWNrYm94T3B0aW9ucyk7XG4gICAgdXBkYXRlUmVmZXJyYWwoe1xuICAgICAgLi4ucmVmZXJyYWwsXG4gICAgICBbcmVmZXJyYWxGaWVsZE5hbWVdOiBhbnN3ZXJzXG4gICAgfSk7XG5cbiAgICB0cmFja1N0ZXBDb21wbGV0ZWQoe1xuICAgICAgc3RlcDogYWN0aXZlU3RlcCArIDEsXG4gICAgICBzdGVwX25hbWU6IHN0ZXBOYW1lLFxuICAgICAgc3RlcF9sYWJlbDogdGl0bGUucmVwbGFjZUFsbCgnwqAnLCAnICcpLFxuICAgICAgYW5zd2VyX2xhYmVsczogT2JqZWN0LnZhbHVlcyhjaGVja2JveE9wdGlvbnMpLFxuICAgICAgYW5zd2VyX3ZhbHVlczogYW5zd2VycyxcbiAgICAgIGZvcm1fbmFtZTogRm9ybU5hbWVPcHRpb25zLlRBWF9SRUZFUlJBTF9GT1JNXG4gICAgfSk7XG4gICAgZmlyZU9wdGltaXplbHlFdmVudChvcHRpbWl6ZWx5LCBgJHtzdGVwTmFtZX1fY29tcGxldGVkYCk7XG4gICAgYXdhaXQgbmV4dFN0ZXAoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFN0ZXBXcmFwcGVyPlxuICAgICAgPGZvcm0gcmVmPXtmb3JtUmVmfSBvblN1Ym1pdD17aGFuZGxlU3VibWl0KG9uVmFsaWRTdWJtaXQpfT5cbiAgICAgICAgPFN0YW5kYXJkU3RlcFRpdGxlPnt0aXRsZX08L1N0YW5kYXJkU3RlcFRpdGxlPlxuICAgICAgICA8U3RhbmRhcmRTdGVwU3VidGl0bGVUZXh0PntzdWJ0aXRsZX08L1N0YW5kYXJkU3RlcFN1YnRpdGxlVGV4dD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtLWJsb2NrLXhsIHNwYWNlLXktMlwiPlxuICAgICAgICAgIHtPYmplY3QuZW50cmllcyhjaGVja2JveE9wdGlvbnMpPy5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBlbnRyeVswXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZW50cnlbMV07XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hlY2tib3hUaWxlXG4gICAgICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKGAke2tleX1gKX1cbiAgICAgICAgICAgICAgICBuYW1lPXtgJHtrZXl9YH1cbiAgICAgICAgICAgICAgICBsYWJlbD17dmFsdWV9XG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2Ake2tleX1fY2hlY2tib3hgfVxuICAgICAgICAgICAgICAgIGlkPXtgJHtrZXl9YH1cbiAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgICA8RXJyb3JUZXh0IGVycm9yVGV4dD17ZXJyb3JUZXh0fSAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8U3RhbmRhcmROZXh0QnV0dG9uIC8+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9TdGVwV3JhcHBlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgR2VuZXJpY0NoZWNrYm94U3RlcCB9O1xuIiwiaW1wb3J0IHsgVGF4QWR2aWNlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcbmltcG9ydCB7IEdlbmVyaWNDaGVja2JveFN0ZXAgfSBmcm9tICcuLi9HZW5lcmljQ2hlY2tib3hTdGVwJztcblxuZnVuY3Rpb24gQWR2aWNlU3RlcCgpIHtcbiAgcmV0dXJuIChcbiAgICA8R2VuZXJpY0NoZWNrYm94U3RlcFxuICAgICAgdGl0bGU9XCJXaGF0IHdvdWxkIHlvdSBsaWtlIGFkdmljZcKgb24/XCJcbiAgICAgIHN1YnRpdGxlPVwiU2VsZWN0IGFsbCB0aGF0wqBhcHBseS5cIlxuICAgICAgY2hlY2tib3hPcHRpb25zPXtUYXhBZHZpY2VPcHRpb25zfVxuICAgICAgcmVmZXJyYWxGaWVsZE5hbWU9XCJ0YXhfYWR2aWNlXCJcbiAgICAgIHN0ZXBOYW1lPVwiYWR2aWNlX3N0ZXBcIlxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IEFkdmljZVN0ZXAgfTtcbiIsImltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xyXG5cclxuXHJcbnZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG4vLyBEbyBub3QgZWRpdCBkaXJlY3RseVxuLy8gR2VuZXJhdGVkIG9uIFR1ZSwgMjAgSmFuIDIwMjYgMTU6NTA6MzIgR01UXG52YXIgQ2hldnJvblJpZ2h0SWNvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9hLCByZWYpIHtcbiAgICB2YXIgdGl0bGUgPSBfYS50aXRsZSwgcmVzdCA9IF9fcmVzdChfYSwgW1widGl0bGVcIl0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfX2Fzc2lnbih7IHJlZjogcmVmLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCB3aWR0aDogMjQsIGhlaWdodDogMjQgfSwgcmVzdCksXG4gICAgICAgICEhdGl0bGUgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcInRpdGxlXCIsIG51bGwsIHRpdGxlKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsUnVsZTogXCJldmVub2RkXCIsIGQ6IFwibTE1LjU5IDEyLTkuMyA5LjNhMSAxIDAgMCAwIDEuNDIgMS40bDEwLTEwYTEgMSAwIDAgMCAwLTEuNGwtMTAtMTBhMSAxIDAgMSAwLTEuNDIgMS40bDkuMyA5LjN6XCIgfSkpKTtcbn0pO1xuQ2hldnJvblJpZ2h0SWNvbi5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uUmlnaHRJY29uJztcblxuZXhwb3J0IHsgQ2hldnJvblJpZ2h0SWNvbiB9O1xuIiwiaW1wb3J0IHsgdXNlR0FGb3JtVHJhY2tpbmcgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvaG9va3MnO1xuaW1wb3J0IHsgQ2hldnJvblJpZ2h0SWNvbiB9IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9pY29ucyc7XG5pbXBvcnQgeyB1c2VXaXphcmQgfSBmcm9tICdyZWFjdC11c2Utd2l6YXJkJztcbmltcG9ydCB7IGZpcmVPcHRpbWl6ZWx5RXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMnO1xuaW1wb3J0IHsgdXNlUmVmZXJyYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dCc7XG5pbXBvcnQgeyBUYXhBZHZpY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xuaW1wb3J0IEJveCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vYm94JztcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcHRpbWl6ZWx5Q29udGV4dCB9IGZyb20gJ0BvcHRpbWl6ZWx5L3JlYWN0LXNkayc7XG5pbXBvcnQgeyB0cmFja1N0ZXBDb21wbGV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvYW5hbHl0aWNzJztcbmltcG9ydCB7IEZvcm1OYW1lT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2VudW1zL0Zvcm1OYW1lT3B0aW9ucyc7XG5pbXBvcnQgeyBCYWNrQ2hldnJvbiB9IGZyb20gJy4uLy4uL0JhY2tDaGV2cm9uJztcblxuZnVuY3Rpb24gQWR2aWNlRWR1Y2F0aW9uU3RlcCgpIHtcbiAgY29uc3QgeyBvcHRpbWl6ZWx5IH0gPSB1c2VDb250ZXh0KE9wdGltaXplbHlDb250ZXh0KTtcbiAgY29uc3QgZm9ybVJlZiA9IHVzZUdBRm9ybVRyYWNraW5nKG9wdGltaXplbHksICdhZHZpY2VfZWR1Y2F0aW9uX3N0ZXAnKTtcbiAgY29uc3QgeyBuZXh0U3RlcCwgYWN0aXZlU3RlcCB9ID0gdXNlV2l6YXJkKCk7XG4gIGNvbnN0IHsgcmVmZXJyYWwgfSA9IHVzZVJlZmVycmFsQ29udGV4dCgpO1xuICBjb25zdCB0YXhBZHZpY2UgPSByZWZlcnJhbC50YXhfYWR2aWNlO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIG9uVmFsaWRTdWJtaXQoKSB7XG4gICAgZmlyZU9wdGltaXplbHlFdmVudChvcHRpbWl6ZWx5LCAnYWR2aWNlX2VkdWNhdGlvbl9zdGVwX2NvbXBsZXRlZCcpO1xuICAgIHRyYWNrU3RlcENvbXBsZXRlZCh7XG4gICAgICBzdGVwOiBhY3RpdmVTdGVwICsgMSxcbiAgICAgIHN0ZXBfbmFtZTogJ2FkdmljZV9lZHVjYXRpb25fc3RlcCcsXG4gICAgICBzdGVwX2xhYmVsOiAnQWR2aWNlIEVkdWNhdGlvbiBTdGVwJyxcbiAgICAgIGFuc3dlcl9sYWJlbHM6IFsnY29udGludWVfY29ubmVjdGluZ193aXRoX2FfcHJvX2J1dHRvbiddLFxuICAgICAgYW5zd2VyX3ZhbHVlczogWydjb250aW51ZV9jb25uZWN0aW5nX3dpdGhfYV9wcm9fYnV0dG9uJ10sXG4gICAgICBmb3JtX25hbWU6IEZvcm1OYW1lT3B0aW9ucy5UQVhfUkVGRVJSQUxfRk9STVxuICAgIH0pO1xuICAgIGF3YWl0IG5leHRTdGVwKCk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgZGF0YS10ZXN0aWQ9eydzdGVwLXdyYXBwZXInfSBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICA8Qm94XG4gICAgICAgIGNsYXNzTmFtZT1cInctWzM0NXB4XSBzbTohdy1bNDE4cHhdXCJcbiAgICAgICAgaGFzQm9yZGVyPXt0cnVlfVxuICAgICAgICBwYWRkaW5nPVwibGdcIlxuICAgICAgICBjb2xvcj1cImdyYXlcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBiLTEgcmVsYXRpdmVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2Fic29sdXRlIHRvcC0wIGxlZnQtMCd9PlxuICAgICAgICAgICAgPEJhY2tDaGV2cm9uIGRhdGFUZXN0SUQ9XCJ0YXhfcmVmZXJyYWxfZm9ybV9iYWNrX2J1dHRvblwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkXCI+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnJhbXNleXNvbHV0aW9ucy5uZXQvbWVkaWEvcmFtc2V5dHJ1c3RlZC9hcHBzL3RheC9yZWYtZm9ybS1hZHZpY2UtZWR1Y2F0aW9uLWljb24uc3ZnXCJcbiAgICAgICAgICAgICAgYWx0PXsnVmFsdWUgRWR1Y2F0aW9uIC0gQ2xpZW50cyBsb29raW5nIGF0IGxhcHRvcCd9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17J3NtOmgtMjAgbXgtYXV0byd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZvcm0gcmVmPXtmb3JtUmVmfSBvblN1Ym1pdD17b25WYWxpZFN1Ym1pdH0+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC02IHNtOnRleHQtNyBmb250LXNlbWlib2xkIG0tYmxvY2steHMgdGV4dC1jZW50ZXIgdGV4dC1ibHVlLTcwXCI+XG4gICAgICAgICAgICBXZSBDYW4gSGVscCFcbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC0zIG0tYmxvY2steGwgc206dGV4dC00IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICBXZSBoYXZlIGFydGljbGVzIHRoYXQgZXhwbGFpbiBhbGwgc29ydHMgb2YgY29tcGxleCB0YXggaXNzdWVzIGxpa2VcbiAgICAgICAgICAgIHRoZXNlOlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgc3BhY2UteS0xIG1iLTRcIj5cbiAgICAgICAgICAgIHt0YXhBZHZpY2UuaW5jbHVkZXMoVGF4QWR2aWNlT3B0aW9ucy53aXRoaG9sZGluZ19hZGp1c3RtZW50KSAmJiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL3d3dy5yYW1zZXlzb2x1dGlvbnMuY29tL3NlYXJjaC9yZXN1bHRzP3E9VGF4JTIwd2l0aGhvbGRpbmcmc2l6ZT1uXzEwX24maW50X2ZtdD1idXR0b24maW50X2RzY3BuPWNsaWNrJTIwb24lMjBzdWdnZXN0ZWQlMjB0YXglMjB3aXRoaG9sZGluZyUyMGFydGljbGUmaW50X2RlcHQ9aW52ZXN0aW5nX3RheF9idSZpbnRfbGN0bj1tYXJrZXRpbmdfcGFnZSUyMC0lMjB0ZXh0X2xpbmsmaW50X2NtcGduPXRheCUyMGZvcm0lMjByZWRpcmVjdCUyMHRvJTIwYXJ0aWNsZVwiXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0YXhfd2l0aGhvbGRpbmdfYXJ0aWNsZXNfbGlua1wiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBuby11bmRlcmxpbmUgdGV4dC1ibHVlLTUwIHB5LVsxM3B4XSBzbTpweS1bMTdweF0gdGV4dC0zIHNtOnRleHQtNFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICBmaXJlT3B0aW1pemVseUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplbHksXG4gICAgICAgICAgICAgICAgICAgICAgJ3RheF93aXRoaG9sZGluZ19hcnRpY2xlX2NsaWNrZWQnXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBUYXggV2l0aGhvbGRpbmdcbiAgICAgICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHRJY29uIGNsYXNzTmFtZT1cImZpbGwtYmx1ZS01MCBoLTIgc206aC1bMThweF0gdy1hdXRvXCIgLz5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVsxcHhdIGJnLWdyYXktNDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3RheEFkdmljZS5pbmNsdWRlcyhUYXhBZHZpY2VPcHRpb25zLnJlYWxfZXN0YXRlX3RheGVzKSAmJiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL3d3dy5yYW1zZXlzb2x1dGlvbnMuY29tL3NlYXJjaC9yZXN1bHRzP3E9UmVhbCUyMEVzdGF0ZSUyMFRheGVzJnNpemU9bl8xMF9uJmludF9mbXQ9YnV0dG9uJmludF9kc2Nwbj1jbGljayUyMG9uJTIwc3VnZ2VzdGVkJTIwcmVhbCUyMGVzdGF0ZSUyMGFydGljbGUmaW50X2RlcHQ9aW52ZXN0aW5nX3RheF9idSZpbnRfbGN0bj1tYXJrZXRpbmdfcGFnZSUyMC0lMjB0ZXh0X2xpbmsmaW50X2NtcGduPXRheCUyMGZvcm0lMjByZWRpcmVjdCUyMHRvJTIwYXJ0aWNsZVwiXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJyZWFsX2VzdGF0ZV90YXhlc19hcnRpY2xlX2xpbmtcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gbm8tdW5kZXJsaW5lIHRleHQtYmx1ZS01MCBweS1bMTNweF0gc206cHktWzE3cHhdIHRleHQtMyBzbTp0ZXh0LTRcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgZmlyZU9wdGltaXplbHlFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZWx5LFxuICAgICAgICAgICAgICAgICAgICAgICdyZWFsX2VzdGF0ZV90YXhlc19hcnRpY2xlX2NsaWNrZWQnXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBSZWFsIEVzdGF0ZSBUYXhlc1xuICAgICAgICAgICAgICAgICAgPENoZXZyb25SaWdodEljb24gY2xhc3NOYW1lPVwiZmlsbC1ibHVlLTUwIGgtMiBzbTpoLVsxOHB4XSB3LWF1dG9cIiAvPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzFweF0gYmctZ3JheS00MFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7dGF4QWR2aWNlLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBUYXhBZHZpY2VPcHRpb25zLmluaGVyaXRhbmNlX29yX2VzdGF0ZV90YXhlc1xuICAgICAgICAgICAgKSAmJiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL3d3dy5yYW1zZXlzb2x1dGlvbnMuY29tL3NlYXJjaC9yZXN1bHRzP3E9SW5oZXJpdGFuY2UlMjBvciUyMEVzdGF0ZSUyMFRheGVzJnNpemU9bl8xMF9uJmludF9mbXQ9YnV0dG9uJmludF9kc2Nwbj1jbGljayUyMG9uJTIwc3VnZ2VzdGVkJTIwaW5oZXJpdGFuY2UlMjBvciUyMGVzdGF0ZSUyMHRheGVzJTIwYXJ0aWNsZSZpbnRfZGVwdD1pbnZlc3RpbmdfdGF4X2J1JmludF9sY3RuPW1hcmtldGluZ19wYWdlJTIwLSUyMHRleHRfbGluayZpbnRfY21wZ249dGF4JTIwZm9ybSUyMHJlZGlyZWN0JTIwdG8lMjBhcnRpY2xlXCJcbiAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImluaGVyaXRhbmNlX29yX2VzdGF0ZV90YXhlc19hcnRpY2xlX2xpbmtcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gbm8tdW5kZXJsaW5lIHRleHQtYmx1ZS01MCBweS1bMTNweF0gc206cHktWzE3cHhdIHRleHQtMyBzbTp0ZXh0LTRcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgZmlyZU9wdGltaXplbHlFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZWx5LFxuICAgICAgICAgICAgICAgICAgICAgICdpbmhlcml0YW5jZV9vcl9lc3RhdGVfdGF4ZXNfYXJ0aWNsZV9jbGlja2VkJ1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgSW5oZXJpdGFuY2Ugb3IgRXN0YXRlIFRheGVzXG4gICAgICAgICAgICAgICAgICA8Q2hldnJvblJpZ2h0SWNvbiBjbGFzc05hbWU9XCJmaWxsLWJsdWUtNTAgaC0yIHNtOmgtWzE4cHhdIHctYXV0b1wiIC8+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bMXB4XSBiZy1ncmF5LTQwXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL3d3dy5yYW1zZXlzb2x1dGlvbnMuY29tL3NlYXJjaC9yZXN1bHRzP3E9VGF4ZXMmc2l6ZT1uXzEwX24maW50X2ZtdD1idXR0b24maW50X2RzY3BuPWNsaWNrJTIwb24lMjBzdWdnZXN0ZWQlMjBhbGwlMjB0YXglMjBhcnRpY2xlcyZpbnRfZGVwdD1pbnZlc3RpbmdfdGF4X2J1JmludF9sY3RuPW1hcmtldGluZ19wYWdlJTIwLSUyMHRleHRfbGluayZpbnRfY21wZ249dGF4JTIwZm9ybSUyMHJlZGlyZWN0JTIwdG8lMjBhcnRpY2xlXCJcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJhbGxfdGF4X2FydGljbGVzX2xpbmtcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBuby11bmRlcmxpbmUgdGV4dC1ibHVlLTUwIHB5LVsxM3B4XSBzbTpweS1bMTdweF0gdGV4dC0zIHNtOnRleHQtNFwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgZmlyZU9wdGltaXplbHlFdmVudChvcHRpbWl6ZWx5LCAnYWxsX3RheF9hcnRpY2xlc19jbGlja2VkJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBBbGwgVGF4IEFydGljbGVzXG4gICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHRJY29uIGNsYXNzTmFtZT1cImZpbGwtYmx1ZS01MCBoLTIgc206aC1bMThweF0gdy1hdXRvXCIgLz5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtMiBsZWFkaW5nLWxnIHRleHQtZ3JheS03MCBob3Zlcjp0ZXh0LWdyYXktODAgaG92ZXI6dW5kZXJsaW5lIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICBmaXJlT3B0aW1pemVseUV2ZW50KFxuICAgICAgICAgICAgICAgICAgb3B0aW1pemVseSxcbiAgICAgICAgICAgICAgICAgICdhZHZpY2VfZWR1Y2F0aW9uX3N0ZXBfY29tcGxldGVkJ1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNvbnRpbnVlX2Nvbm5lY3Rpbmdfd2l0aF9hX3Byb19idXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDb250aW51ZSBDb25uZWN0aW5nIFdpdGggYSBQcm9cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L0JveD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQWR2aWNlRWR1Y2F0aW9uU3RlcCB9O1xuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbnZhciBURVhUQVJFQV9TSVpFUyA9IFtcInNtXCIsIFwibWRcIiwgXCJsZ1wiXTtcbnZhciBjYWxjSGVpZ2h0ID0gZnVuY3Rpb24gKHJlZikge1xuICAgIGlmICghcmVmKVxuICAgICAgICByZXR1cm4gXCJhdXRvXCI7XG4gICAgdmFyIGJvcmRlcldpZHRoID0gTnVtYmVyKGdldENvbXB1dGVkU3R5bGUocmVmKS5nZXRQcm9wZXJ0eVZhbHVlKFwiYm9yZGVyLXdpZHRoXCIpLnNwbGl0KFwicHhcIilbMF0pO1xuICAgIHZhciByb3VuZGVkQm9yZGVyV2lkdGggPSBNYXRoLnJvdW5kKGJvcmRlcldpZHRoKTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQocmVmLnNjcm9sbEhlaWdodCArIHJvdW5kZWRCb3JkZXJXaWR0aCAqIDIpO1xufTtcbnZhciBidWlsZFN0eWxlcyA9IGZ1bmN0aW9uIChzdHlsZSwgYXV0b0dyb3csIGhlaWdodCkge1xuICAgIHZhciBzdHlsZU9iaiA9IF9fYXNzaWduKHt9LCBzdHlsZSk7XG4gICAgaWYgKGF1dG9Hcm93KSB7XG4gICAgICAgIHN0eWxlT2JqLnJlc2l6ZSA9IFwibm9uZVwiO1xuICAgICAgICBzdHlsZU9iai5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZU9iajtcbn07XG52YXIgVGV4dGFyZWEgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfYSwgcmVmKSB7XG4gICAgdmFyIF9iO1xuICAgIHZhciBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIF9jID0gX2EuYXV0b0dyb3csIGF1dG9Hcm93ID0gX2MgPT09IHZvaWQgMCA/IGZhbHNlIDogX2MsIF9kID0gX2EuZGlzYWJsZWQsIGRpc2FibGVkID0gX2QgPT09IHZvaWQgMCA/IGZhbHNlIDogX2QsIF9lID0gX2EuaW52YWxpZCwgaW52YWxpZCA9IF9lID09PSB2b2lkIDAgPyBmYWxzZSA6IF9lLCBtYXhMZW5ndGggPSBfYS5tYXhMZW5ndGgsIF9mID0gX2Euc2l6ZSwgc2l6ZSA9IF9mID09PSB2b2lkIDAgPyBcIm1kXCIgOiBfZiwgX2cgPSBfYS5zdHlsZSwgc3R5bGUgPSBfZyA9PT0gdm9pZCAwID8ge30gOiBfZywgdmFsdWUgPSBfYS52YWx1ZSwgcmVzdCA9IF9fcmVzdChfYSwgW1wiY2xhc3NOYW1lXCIsIFwiYXV0b0dyb3dcIiwgXCJkaXNhYmxlZFwiLCBcImludmFsaWRcIiwgXCJtYXhMZW5ndGhcIiwgXCJzaXplXCIsIFwic3R5bGVcIiwgXCJ2YWx1ZVwiXSk7XG4gICAgdmFyIGNvdW50ZXJJZCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJyZHMtdGV4dGFyZWEtY291bnRlcklELVwiLmNvbmNhdChNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxNikpOyB9LCBbXSk7XG4gICAgdmFyIHNob3dDb3VudGVyID0gISEoISFtYXhMZW5ndGggJiYgbWF4TGVuZ3RoID4gMCAmJiBjb3VudGVySWQpO1xuICAgIHZhciB0ZXh0YXJlYUNsYXNzZXMgPSBjbGFzc05hbWVzKFwicmRzLVRleHRhcmVhXCIsIChfYiA9IHt9LFxuICAgICAgICBfYltcInJkcy1UZXh0YXJlYS0tXCIuY29uY2F0KHNpemUpXSA9IHNpemUgIT09IFwibWRcIixcbiAgICAgICAgX2JbXCJpcy1pbnZhbGlkXCJdID0gaW52YWxpZCxcbiAgICAgICAgX2JbXCJpcy1kaXNhYmxlZFwiXSA9IGRpc2FibGVkLFxuICAgICAgICBfYiksIGNsYXNzTmFtZSk7XG4gICAgdmFyIHRleHRhcmVhUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG1haW50YWluIG91ciBpbnRlcm5hbCByZWYgdG8gdGhlIHRleHRhcmVhIGVsZW1lbnQgYW5kIGZvcndhcmQgYSByZWYgcGFzc2VkIGluLlxuICAgIHZhciBtZXJnZVJlZnMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZWYobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dGFyZWFSZWYuY3VycmVudCA9IG5vZGU7XG4gICAgfTtcbiAgICB2YXIgX2ggPSB1c2VTdGF0ZShtYXhMZW5ndGgpLCBjb3VudGVyID0gX2hbMF0sIHNldENvdW50ZXIgPSBfaFsxXTtcbiAgICB2YXIgY291bnRlcklkUmVmID0gdXNlUmVmKGNvdW50ZXJJZCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG1heExlbmd0aCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2V0Q291bnRlcihtYXhMZW5ndGggLSB2YWx1ZS5sZW5ndGgpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgX2ogPSB1c2VTdGF0ZShcImF1dG9cIiksIGhlaWdodCA9IF9qWzBdLCBzZXRIZWlnaHQgPSBfalsxXTtcbiAgICB1c2VMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoYXV0b0dyb3cgJiYgaGVpZ2h0ID09PSBcImF1dG9cIikge1xuICAgICAgICAgICAgc2V0SGVpZ2h0KFwiXCIuY29uY2F0KGNhbGNIZWlnaHQodGV4dGFyZWFSZWYuY3VycmVudCksIFwicHhcIikpO1xuICAgICAgICB9XG4gICAgfSwgW2hlaWdodCwgYXV0b0dyb3ddKTtcbiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgY3VycmVudENoYXJhY3RlckNvdW50ID0gZS50YXJnZXQudmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAobWF4TGVuZ3RoKVxuICAgICAgICAgICAgc2V0Q291bnRlcihtYXhMZW5ndGggLSBjdXJyZW50Q2hhcmFjdGVyQ291bnQpO1xuICAgICAgICBpZiAoYXV0b0dyb3cpXG4gICAgICAgICAgICBzZXRIZWlnaHQoXCJhdXRvXCIpO1xuICAgICAgICBpZiAocmVzdC5vbkNoYW5nZSlcbiAgICAgICAgICAgIHJlc3Qub25DaGFuZ2UoZSk7XG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHRleHRhcmVhQ2xhc3NlcyB9LFxuICAgICAgICBzaG93Q291bnRlciAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmRzLVRleHRhcmVhLWNvdW50ZXJcIiwgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIiwgaWQ6IGNvdW50ZXJJZFJlZi5jdXJyZW50IH0sIGNvdW50ZXIpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIsIF9fYXNzaWduKHt9LCByZXN0LCB7IGRpc2FibGVkOiBkaXNhYmxlZCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHNob3dDb3VudGVyID8gY291bnRlcklkIDogdW5kZWZpbmVkLCBcImFyaWEtaW52YWxpZFwiOiBpbnZhbGlkIHx8IHVuZGVmaW5lZCwgcmVmOiBtZXJnZVJlZnMsIG9uQ2hhbmdlOiBvbkNoYW5nZSwgbWF4TGVuZ3RoOiBtYXhMZW5ndGgsIHZhbHVlOiB2YWx1ZSwgc3R5bGU6IGJ1aWxkU3R5bGVzKHN0eWxlLCBhdXRvR3JvdywgaGVpZ2h0KSB9KSkpKTtcbn0pO1xuVGV4dGFyZWEuZGlzcGxheU5hbWUgPSBcIlRleHRhcmVhXCI7XG5cbmV4cG9ydCB7IFRFWFRBUkVBX1NJWkVTLCBUZXh0YXJlYSBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UZXh0YXJlYS5lc20uanMubWFwXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbnZhciBnZXRDb25kaXRpb25hbFByb3BzID0gZnVuY3Rpb24gKGdyb3VwLCBkaXNhYmxlZCkge1xuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIGlmIChncm91cCAmJiBkaXNhYmxlZCkge1xuICAgICAgICBwcm9wcy5kaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBwcm9wcztcbn07XG52YXIgZ2V0Q29uZGl0aW9uYWxMYWJlbFByb3BzID0gZnVuY3Rpb24gKGdyb3VwLCBpZCkge1xuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIGlmICghZ3JvdXAgJiYgaWQpIHtcbiAgICAgICAgcHJvcHMuaHRtbEZvciA9IGlkO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcHM7XG59O1xudmFyIGdldE9wdGlvbnMgPSBmdW5jdGlvbiAoZ3JvdXAsIGludmFsaWQsIGRpc2FibGVkLCBzaXplLCBpZCwgZXJyb3JzLCBoZWxwZXIpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIH07XG4gICAgaWYgKCFncm91cClcbiAgICAgICAgb3B0aW9ucy5pZCA9IGlkO1xuICAgIHZhciBhcmlhRGVzY3JpYmVkYnkgPSBcIlwiO1xuICAgIGlmICghZ3JvdXAgJiYgaW52YWxpZClcbiAgICAgICAgb3B0aW9ucy5pbnZhbGlkID0gaW52YWxpZDtcbiAgICBpZiAoaGVscGVyKVxuICAgICAgICBhcmlhRGVzY3JpYmVkYnkgKz0gXCJoZWxwZXItZm9ybS1maWVsZC1cIi5jb25jYXQoaWQsIFwiIFwiKTtcbiAgICBpZiAoZXJyb3JzKVxuICAgICAgICBhcmlhRGVzY3JpYmVkYnkgKz0gXCJlcnJvci1mb3JtLWZpZWxkLVwiLmNvbmNhdChpZCk7XG4gICAgaWYgKGFyaWFEZXNjcmliZWRieS5sZW5ndGggPiAwKVxuICAgICAgICBvcHRpb25zW1wiYXJpYS1kZXNjcmliZWRieVwiXSA9IGFyaWFEZXNjcmliZWRieTtcbiAgICByZXR1cm4gb3B0aW9ucztcbn07XG4vKipcbiAqXG4gKiBEZW1vczpcbiAqXG4gKiAtIFtSRFMgRm9ybSBGaWVsZF0oaHR0cHM6Ly9kZXNpZ24ucmFtc2V5c29sdXRpb25zLmNvbS9zdG9yeWJvb2svP3BhdGg9L3N0b3J5L2Rlc2lnbi1zeXN0ZW0tZm9ybS1maWVsZC0tZGVmYXVsdClcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbUkRTIEZvcm0gRmllbGQgQVBJXShodHRwczovL2Rlc2lnbi5yYW1zZXlzb2x1dGlvbnMuY29tL2NvbXBvbmVudHMvZm9ybS1maWVsZC8/dGFiPXRlY2hub2xvZ2llcyNyZWFjdClcbiAqL1xudmFyIEZvcm1GaWVsZCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYiwgX2M7XG4gICAgdmFyIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgX2QgPSBfYS5kaXNhYmxlZCwgZGlzYWJsZWQgPSBfZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZCwgZXJyb3JzID0gX2EuZXJyb3JzLCBfZSA9IF9hLmdyb3VwLCBncm91cCA9IF9lID09PSB2b2lkIDAgPyBmYWxzZSA6IF9lLCBoZWxwZXIgPSBfYS5oZWxwZXIsIGlkID0gX2EuaWQsIF9mID0gX2EuaW52YWxpZCwgaW52YWxpZCA9IF9mID09PSB2b2lkIDAgPyBmYWxzZSA6IF9mLCBfZyA9IF9hLmlzT25EYXJrQ2FudmFzLCBpc09uRGFya0NhbnZhcyA9IF9nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9nLCBsYWJlbCA9IF9hLmxhYmVsLCBsZW5ndGggPSBfYS5sZW5ndGgsIG5vdGUgPSBfYS5ub3RlLCBfaCA9IF9hLnNpemUsIHNpemUgPSBfaCA9PT0gdm9pZCAwID8gXCJtZFwiIDogX2gsIHJlc3QgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvcnNcIiwgXCJncm91cFwiLCBcImhlbHBlclwiLCBcImlkXCIsIFwiaW52YWxpZFwiLCBcImlzT25EYXJrQ2FudmFzXCIsIFwibGFiZWxcIiwgXCJsZW5ndGhcIiwgXCJub3RlXCIsIFwic2l6ZVwiXSk7XG4gICAgdmFyIHV1aWQgPSBpZCB8fCBcIlwiLmNvbmNhdChNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxNikpO1xuICAgIHZhciBvcHRpb25zID0gZ2V0T3B0aW9ucyhncm91cCwgaW52YWxpZCwgZGlzYWJsZWQsIHNpemUsIHV1aWQsIGVycm9ycywgaGVscGVyKTtcbiAgICB2YXIgZm9ybUZpZWxkQ2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJyZHMtRm9ybUZpZWxkXCIsIChfYiA9IHt9LFxuICAgICAgICBfYltcInJkcy1Gb3JtRmllbGQtLVwiLmNvbmNhdChzaXplKV0gPSBzaXplICE9PSBcIm1kXCIsXG4gICAgICAgIF9iW1wiaXMtZGlzYWJsZWRcIl0gPSBkaXNhYmxlZCxcbiAgICAgICAgX2JbXCJpcy1pbnZhbGlkXCJdID0gaW52YWxpZCxcbiAgICAgICAgX2JbXCJvbi1kYXJrQ2FudmFzXCJdID0gaXNPbkRhcmtDYW52YXMsXG4gICAgICAgIF9iKSwgY2xhc3NOYW1lKTtcbiAgICB2YXIgZm9ybUZpZWxkQ29udHJvbENsYXNzZXMgPSBjbGFzc05hbWVzKFwicmRzLUZvcm1GaWVsZC1jb250cm9sXCIsIChfYyA9IHt9LFxuICAgICAgICBfY1tcInJkcy1Gb3JtRmllbGQtY29udHJvbC0tXCIuY29uY2F0KGxlbmd0aCldID0gbGVuZ3RoLFxuICAgICAgICBfYykpO1xuICAgIHZhciBFbGVtZW50ID0gZ3JvdXAgPyBcImZpZWxkc2V0XCIgOiBcImRpdlwiO1xuICAgIHZhciBMYWJlbEVsZW1lbnQgPSBncm91cCA/IFwibGVnZW5kXCIgOiBcImxhYmVsXCI7XG4gICAgdmFyIHNob3dFcnJvcnMgPSBpbnZhbGlkICYmIGVycm9ycyAmJiAhZGlzYWJsZWQ7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEVsZW1lbnQsIF9fYXNzaWduKHt9LCByZXN0LCBnZXRDb25kaXRpb25hbFByb3BzKGdyb3VwLCBkaXNhYmxlZCksIHsgY2xhc3NOYW1lOiBmb3JtRmllbGRDbGFzc2VzIH0pLFxuICAgICAgICBsYWJlbCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChMYWJlbEVsZW1lbnQsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcInJkcy1Gb3JtRmllbGQtbGFiZWxcIiB9LCBnZXRDb25kaXRpb25hbExhYmVsUHJvcHMoZ3JvdXAsIHV1aWQpKSxcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgbm90ZSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJyZHMtRm9ybUZpZWxkLW5vdGVcIiB9LCBub3RlKSkpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBmb3JtRmllbGRDb250cm9sQ2xhc3NlcyB9LCBjaGlsZHJlbihvcHRpb25zKSksXG4gICAgICAgIGhlbHBlciAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgeyBpZDogXCJoZWxwZXItZm9ybS1maWVsZC1cIi5jb25jYXQodXVpZCksIGNsYXNzTmFtZTogXCJyZHMtRm9ybUZpZWxkLWhlbHBlclwiIH0sIGhlbHBlcikpLFxuICAgICAgICBzaG93RXJyb3JzICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgaWQ6IFwiZXJyb3ItZm9ybS1maWVsZC1cIi5jb25jYXQodXVpZCksIHJvbGU6IFwiYWxlcnRcIiB9LCBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnJvciwgaSkgeyByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsga2V5OiBpLCBjbGFzc05hbWU6IFwicmRzLUZvcm1GaWVsZC1lcnJvclwiIH0sIGVycm9yKSk7IH0pKSkpKTtcbn07XG5Gb3JtRmllbGQuZGlzcGxheU5hbWUgPSBcIkZvcm1GaWVsZFwiO1xuXG5leHBvcnQgeyBGb3JtRmllbGQgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Rm9ybUZpZWxkLmVzbS5qcy5tYXBcbiIsImltcG9ydCAqIGFzIFl1cCBmcm9tICd5dXAnO1xuXG5jb25zdCBtZXNzYWdlID0gXCJQbGVhc2UgZG9uJ3Qgc2hhcmUgc2Vuc2l0aXZlIGluZm8uXCI7XG5jb25zdCBmb3JiaWRkZW5QYXR0ZXJuczogUmVnRXhwW10gPSBbXG4gIC8oPzwhXFxkKShcXGR7M30tXFxkezJ9LVxcZHs0fXxcXGR7OX0pKD8hXFxkKS8sIC8vIFNTTlxuICAvKFtBLVBSLVdZXVsxLTldXFxkXFxzP1xcZHs1fVsxLTldKS8sIC8vIFBhc3Nwb3J0XG4gIC8oXFxkezJ9LT9cXGR7N30pLyAvLyBFSU4vVElOXG5dO1xuXG5jb25zdCBzZW5zaXRpdmVEYXRhVmFsaWRhdGlvbiA9IFl1cC5zdHJpbmcoKVxuICAubm90UmVxdWlyZWQoKVxuICAudGVzdCgnbm8tc2Vuc2l0aXZlLXBhdHRlcm5zJywgbWVzc2FnZSwgKHZhbHVlKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuICFmb3JiaWRkZW5QYXR0ZXJucy5zb21lKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3QodmFsdWUpKTtcbiAgfSk7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2Vuc2l0aXZlRGF0YVNjaGVtYShmaWVsZDogc3RyaW5nKSB7XG4gIGNvbnN0IHNoYXBlOiBSZWNvcmQ8c3RyaW5nLCBZdXAuQW55U2NoZW1hPiA9IHt9O1xuICBzaGFwZVtmaWVsZF0gPSBzZW5zaXRpdmVEYXRhVmFsaWRhdGlvbjtcbiAgcmV0dXJuIFl1cC5vYmplY3QoKS5zaGFwZShzaGFwZSk7XG59XG5cbmV4cG9ydCB7IGdlbmVyYXRlU2Vuc2l0aXZlRGF0YVNjaGVtYSB9O1xuIiwiaW1wb3J0IHsgdXNlV2l6YXJkIH0gZnJvbSAncmVhY3QtdXNlLXdpemFyZCc7XG5pbXBvcnQgVGV4dGFyZWEgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL3RleHRhcmVhJztcbmltcG9ydCB7IHVzZUZvcm0gfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlR0FGb3JtVHJhY2tpbmcsIHVzZVdpbmRvd1NpemUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvaG9va3MnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWZlcnJhbEZvcm1EYXRhLCB1c2VSZWZlcnJhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0JztcbmltcG9ydCB7IGZpcmVPcHRpbWl6ZWx5RXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMnO1xuaW1wb3J0IEZvcm1GaWVsZCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBPcHRpbWl6ZWx5Q29udGV4dCB9IGZyb20gJ0BvcHRpbWl6ZWx5L3JlYWN0LXNkayc7XG5pbXBvcnQgeyB0cmFja1N0ZXBDb21wbGV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvYW5hbHl0aWNzJztcbmltcG9ydCB7IEZvcm1OYW1lT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2VudW1zL0Zvcm1OYW1lT3B0aW9ucyc7XG5pbXBvcnQge1xuICBTdGFuZGFyZFN0ZXBTdWJ0aXRsZVRleHQsXG4gIFN0YW5kYXJkU3RlcFRpdGxlLFxuICBTdGVwV3JhcHBlclxufSBmcm9tICcuLi8uLi9zdGVwQ29tcG9uZW50cyc7XG5pbXBvcnQgeyBTdGFuZGFyZE5leHRCdXR0b24gfSBmcm9tICcuLi8uLi9idXR0b25zJztcbmltcG9ydCB7IGdlbmVyYXRlU2Vuc2l0aXZlRGF0YVNjaGVtYSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYXMvc2Vuc2l0aXZlRGF0YVNjaGVtYSc7XG5pbXBvcnQgeyB5dXBSZXNvbHZlciB9IGZyb20gJ0Bob29rZm9ybS9yZXNvbHZlcnMveXVwJztcbmltcG9ydCAqIGFzIFl1cCBmcm9tICd5dXAnO1xuXG5pbnRlcmZhY2UgUXVlc3Rpb25zU3RlcEZpZWxkcyB7XG4gIHRheF9xdWVzdGlvbnM6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gUXVlc3Rpb25zU3RlcCgpIHtcbiAgY29uc3QgeyBvcHRpbWl6ZWx5IH0gPSB1c2VDb250ZXh0KE9wdGltaXplbHlDb250ZXh0KTtcbiAgY29uc3QgZm9ybVJlZiA9IHVzZUdBRm9ybVRyYWNraW5nKG9wdGltaXplbHksICdxdWVzdGlvbnNfc3RlcCcpO1xuICBjb25zdCB7IG5leHRTdGVwLCBhY3RpdmVTdGVwIH0gPSB1c2VXaXphcmQoKTtcbiAgY29uc3QgW3RleHQsIHNldFRleHRdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCB7IHJlZmVycmFsLCB1cGRhdGVSZWZlcnJhbCB9ID0gdXNlUmVmZXJyYWxDb250ZXh0KCk7XG4gIGNvbnN0IHsgd2lkdGggfSA9IHVzZVdpbmRvd1NpemUoKTtcbiAgY29uc3Qgc2NoZW1hID0gZ2VuZXJhdGVTZW5zaXRpdmVEYXRhU2NoZW1hKFxuICAgICd0YXhfcXVlc3Rpb25zJ1xuICApIGFzIHVua25vd24gYXMgWXVwLk9iamVjdFNjaGVtYTxRdWVzdGlvbnNTdGVwRmllbGRzPjtcbiAgY29uc3QgeyByZWdpc3RlciwgaGFuZGxlU3VibWl0LCBmb3JtU3RhdGUgfSA9IHVzZUZvcm08UXVlc3Rpb25zU3RlcEZpZWxkcz4oe1xuICAgIGRlZmF1bHRWYWx1ZXM6IHtcbiAgICAgIC4uLnJlZmVycmFsXG4gICAgfSxcbiAgICByZXNvbHZlcjogeXVwUmVzb2x2ZXIoc2NoZW1hKVxuICB9KTtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZm9ybVN0YXRlLmVycm9ycy50YXhfcXVlc3Rpb25zPy5tZXNzYWdlO1xuICBhc3luYyBmdW5jdGlvbiBvblZhbGlkU3VibWl0KHJlZmVycmFsOiBQYXJ0aWFsPFJlZmVycmFsRm9ybURhdGE+KSB7XG4gICAgdXBkYXRlUmVmZXJyYWwocmVmZXJyYWwpO1xuICAgIGZpcmVPcHRpbWl6ZWx5RXZlbnQob3B0aW1pemVseSwgJ3F1ZXN0aW9uX3N0ZXBfY29tcGxldGVkJyk7XG4gICAgdHJhY2tTdGVwQ29tcGxldGVkKHtcbiAgICAgIHN0ZXA6IGFjdGl2ZVN0ZXAgKyAxLFxuICAgICAgc3RlcF9uYW1lOiAncXVlc3Rpb25zX3N0ZXAnLFxuICAgICAgc3RlcF9sYWJlbDogJ1doYXQgcXVlc3Rpb25zIGRvIHlvdSBoYXZlIGZvciB5b3VyIHRheCBwcm8/JyxcbiAgICAgIGFuc3dlcl9sYWJlbHM6IFsnV2hhdCBxdWVzdGlvbnMgZG8geW91IGhhdmUgZm9yIHlvdXIgdGF4IHBybz8nXSxcbiAgICAgIGFuc3dlcl92YWx1ZXM6IFtyZWZlcnJhbC50YXhfcXVlc3Rpb25zIV0sXG4gICAgICBmb3JtX25hbWU6IEZvcm1OYW1lT3B0aW9ucy5UQVhfUkVGRVJSQUxfRk9STVxuICAgIH0pO1xuICAgIGF3YWl0IG5leHRTdGVwKCk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTdGVwV3JhcHBlcj5cbiAgICAgIDxmb3JtIHJlZj17Zm9ybVJlZn0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdChvblZhbGlkU3VibWl0KX0+XG4gICAgICAgIDxTdGFuZGFyZFN0ZXBUaXRsZT5cbiAgICAgICAgICBXaGF0IHF1ZXN0aW9ucyBkbyB5b3UgaGF2ZSBmb3IgeW91ciB0YXggcHJvP1xuICAgICAgICA8L1N0YW5kYXJkU3RlcFRpdGxlPlxuICAgICAgICA8U3RhbmRhcmRTdGVwU3VidGl0bGVUZXh0Pk9wdGlvbmFsPC9TdGFuZGFyZFN0ZXBTdWJ0aXRsZVRleHQ+XG5cbiAgICAgICAgPEZvcm1GaWVsZCBpZD1cInF1ZXN0aW9uX2JveFwiIHNpemU9XCJsZ1wiPlxuICAgICAgICAgIHsoKSA9PiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8VGV4dGFyZWFcbiAgICAgICAgICAgICAgICB7Li4ucmVnaXN0ZXIoJ3RheF9xdWVzdGlvbnMnKX1cbiAgICAgICAgICAgICAgICBzaXplPXt3aWR0aCA+IDU5OSA/ICdsZycgOiAnbWQnfVxuICAgICAgICAgICAgICAgIG1heExlbmd0aD17MjUwfVxuICAgICAgICAgICAgICAgIGlkPVwidGF4X3F1ZXN0aW9uc190ZXh0Ym94XCJcbiAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwidGF4X3F1ZXN0aW9uc190ZXh0Ym94XCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInRheF9xdWVzdGlvbnNfdGV4dGJveFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RleHR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gc2V0VGV4dChldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17Jyd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICAgeyhlcnJvck1lc3NhZ2UgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtMiB0ZXh0LXJlZC02MCBwdC0xIHBiLTRcIj57ZXJyb3JNZXNzYWdlfTwvcD5cbiAgICAgICAgKSkgfHwgPHAgY2xhc3NOYW1lPVwicGItNFwiPjwvcD59XG4gICAgICAgIDxTdGFuZGFyZE5leHRCdXR0b24gLz5cbiAgICAgIDwvZm9ybT5cbiAgICA8L1N0ZXBXcmFwcGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBRdWVzdGlvbnNTdGVwIH07XG4iLCJpbXBvcnQgKiBhcyBZdXAgZnJvbSAneXVwJztcbmltcG9ydCB7IHBob25lTnVtYmVySXNWYWxpZCB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgcGhvbmVTY2hlbWEgPSBZdXAub2JqZWN0KCkuc2hhcGUoe1xuICBwaG9uZTogWXVwLnN0cmluZygpXG4gICAgLnRyaW0oKVxuICAgIC5yZXF1aXJlZCgnUGxlYXNlIGVudGVyIHlvdXIgcGhvbmVcXHUwMEEwbnVtYmVyLicpXG4gICAgLnRlc3QoXG4gICAgICAndGVzdC1waG9uZScsXG4gICAgICAnUGxlYXNlIGVudGVyIGEgdmFsaWQgcGhvbmVcXHUwMEEwbnVtYmVyLicsXG4gICAgICBwaG9uZU51bWJlcklzVmFsaWRcbiAgICApXG59KTtcblxuZXhwb3J0IHsgcGhvbmVTY2hlbWEgfTtcbiIsImltcG9ydCB7IFBIT05FX1ZBTElEQVRJT05fUkVHRVggfSBmcm9tICcuLi9zY2hlbWFzL3Bob25lVmFsaWRhdGlvblJlZ2V4JztcblxuZnVuY3Rpb24gcGhvbmVOdW1iZXJJc1ZhbGlkKG51bWJlciA9ICcnKTogYm9vbGVhbiB7XG4gIHJldHVybiBQSE9ORV9WQUxJREFUSU9OX1JFR0VYLnRlc3QobnVtYmVyLnJlcGxhY2UoL1xcRC9nLCAnJykpO1xufVxuXG5leHBvcnQgeyBwaG9uZU51bWJlcklzVmFsaWQgfTtcbiIsImltcG9ydCB7IGdldFRheEZ1bGxVcmwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMnO1xuXG5hc3luYyBmdW5jdGlvbiBzdGFydFZlcmlmaWNhdGlvbihcbiAgcGhvbmU6IHN0cmluZyxcbiAgdmVyaWZpY2F0aW9uVHlwZTogc3RyaW5nLFxuICBiYXNlVVJMID0gZ2V0VGF4RnVsbFVybCgpXG4pIHtcbiAgY29uc3QgYnlwYXNzVmVyaWZpY2F0aW9uUXVlcnlQYXJhbSA9XG4gICAgbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoJ2J5cGFzc192ZXJpZmljYXRpb24nKSA/P1xuICAgICcnO1xuXG4gIGNvbnN0IHBheWxvYWQgPVxuICAgIGJ5cGFzc1ZlcmlmaWNhdGlvblF1ZXJ5UGFyYW0/Lmxlbmd0aCA+IDBcbiAgICAgID8ge1xuICAgICAgICAgIHBob25lTnVtYmVyOiBwaG9uZSxcbiAgICAgICAgICB0eXBlOiB2ZXJpZmljYXRpb25UeXBlLFxuICAgICAgICAgIGJ5cGFzc1ZlcmlmaWNhdGlvblF1ZXJ5OiBieXBhc3NWZXJpZmljYXRpb25RdWVyeVBhcmFtXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIHBob25lTnVtYmVyOiBwaG9uZSxcbiAgICAgICAgICB0eXBlOiB2ZXJpZmljYXRpb25UeXBlXG4gICAgICAgIH07XG5cbiAgY29uc3QgZnVsbFVybCA9IGAke2Jhc2VVUkx9L2FwaS9waG9uZS12YWxpZGF0aW9uLXN0YXJ0L2A7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZnVsbFVybCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gIH0pO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICB9XG4gIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7XG59XG5cbmV4cG9ydCB7IHN0YXJ0VmVyaWZpY2F0aW9uIH07XG4iLCJpbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuLy8gRG8gbm90IGVkaXQgZGlyZWN0bHlcbi8vIEdlbmVyYXRlZCBvbiBUdWUsIDIwIEphbiAyMDI2IDE1OjUwOjMyIEdNVFxudmFyIENoYXRJY29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX2EsIHJlZikge1xuICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCByZXN0ID0gX19yZXN0KF9hLCBbXCJ0aXRsZVwiXSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9fYXNzaWduKHsgcmVmOiByZWYsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIHdpZHRoOiAyNCwgaGVpZ2h0OiAyNCB9LCByZXN0KSxcbiAgICAgICAgISF0aXRsZSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGl0bGVcIiwgbnVsbCwgdGl0bGUpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgZDogXCJNMTIgMmM2LjA2IDAgMTEgNC4wNCAxMSA5LjE4IDAgMS45NS0uNzUgMy44LTIuMDkgNS4zN2wtLjIzLjI2LjUgNC4yNmExIDEgMCAwIDEtMS4yNyAxLjA3bC0uMS0uMDMtNS4wNS0yLjA2Yy0uODUuMjItMS43My4zMS0yLjc2LjMxLTYuMDYgMC0xMS00LjAzLTExLTkuMThDMSA2LjA0IDUuOTQgMiAxMiAyem0uOSAxMEg4LjM3YTEgMSAwIDAgMCAwIDJoNC41NWExIDEgMCAxIDAgMC0yem0yLjc0LTMuNjRIOC4zNmExIDEgMCAxIDAgMCAyaDcuMjhhMSAxIDAgMCAwIDAtMnpcIiB9KSkpO1xufSk7XG5DaGF0SWNvbi5kaXNwbGF5TmFtZSA9ICdDaGF0SWNvbic7XG5cbmV4cG9ydCB7IENoYXRJY29uIH07XG4iLCJpbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuLy8gRG8gbm90IGVkaXQgZGlyZWN0bHlcbi8vIEdlbmVyYXRlZCBvbiBUdWUsIDIwIEphbiAyMDI2IDE1OjUwOjMyIEdNVFxudmFyIFBob25lSWNvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9hLCByZWYpIHtcbiAgICB2YXIgdGl0bGUgPSBfYS50aXRsZSwgcmVzdCA9IF9fcmVzdChfYSwgW1widGl0bGVcIl0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfX2Fzc2lnbih7IHJlZjogcmVmLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCB3aWR0aDogMjQsIGhlaWdodDogMjQgfSwgcmVzdCksXG4gICAgICAgICEhdGl0bGUgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcInRpdGxlXCIsIG51bGwsIHRpdGxlKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsUnVsZTogXCJldmVub2RkXCIsIGQ6IFwibTE1LjMgMTQuMTktMi4xMyAyLjEtNS40Ny01LjQ2IDIuMTEtMi4xNGEuOTIuOTIgMCAwIDAgLjE5LTFMNy44IDIuNTVhLjkyLjkyIDAgMCAwLTEuMDgtLjUzTDIuNyAzLjFjLS40Mi4xLS43LjQ5LS42OS45MWExOS40IDE5LjQgMCAwIDAgNS40OSAxMi41QTE5LjQgMTkuNCAwIDAgMCAxOS45OSAyMmMuNDMgMCAuOC0uMjguOTEtLjdsMS4wNy00LjAzYS45Mi45MiAwIDAgMC0uNTMtMS4wOEwxNi4zMiAxNGEuOTIuOTIgMCAwIDAtMS4wMS4yelwiIH0pKSk7XG59KTtcblBob25lSWNvbi5kaXNwbGF5TmFtZSA9ICdQaG9uZUljb24nO1xuXG5leHBvcnQgeyBQaG9uZUljb24gfTtcbiIsIi8qKlxuICogcmVhY3QtbnVtYmVyLWZvcm1hdCAtIDUuNC40XG4gKiBBdXRob3IgOiBTdWRoYW5zaHUgWWFkYXZcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgMjAyNSB0byBTdWRoYW5zaHUgWWFkYXYsIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zLXlhZGF2L3JlYWN0LW51bWJlci1mb3JtYXRcbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHsgdFtwXSA9IHNbcF07IH0gfVxyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIHsgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB7IHRbcFtpXV0gPSBzW3BbaV1dOyB9XHJcbiAgICAgICAgfSB9XHJcbiAgICByZXR1cm4gdDtcclxufVxuXG52YXIgU291cmNlVHlwZTtcbihmdW5jdGlvbiAoU291cmNlVHlwZSkge1xuICAgIFNvdXJjZVR5cGVbXCJldmVudFwiXSA9IFwiZXZlbnRcIjtcbiAgICBTb3VyY2VUeXBlW1wicHJvcHNcIl0gPSBcInByb3BcIjtcbn0pKFNvdXJjZVR5cGUgfHwgKFNvdXJjZVR5cGUgPSB7fSkpO1xuXG4vLyBiYXNpYyBub29wIGZ1bmN0aW9uXG5mdW5jdGlvbiBub29wKCkgeyB9XG5mdW5jdGlvbiBtZW1vaXplT25jZShjYikge1xuICAgIHZhciBsYXN0QXJncztcbiAgICB2YXIgbGFzdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgaWYgKGxhc3RBcmdzICYmXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA9PT0gbGFzdEFyZ3MubGVuZ3RoICYmXG4gICAgICAgICAgICBhcmdzLmV2ZXJ5KGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHsgcmV0dXJuIHZhbHVlID09PSBsYXN0QXJnc1tpbmRleF07IH0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgICAgbGFzdFZhbHVlID0gY2IuYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZTtcbiAgICB9O1xufVxuZnVuY3Rpb24gY2hhcklzTnVtYmVyKGNoYXIpIHtcbiAgICByZXR1cm4gISEoY2hhciB8fCAnJykubWF0Y2goL1xcZC8pO1xufVxuZnVuY3Rpb24gaXNOaWwodmFsKSB7XG4gICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGlzTmFuVmFsdWUodmFsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbCk7XG59XG5mdW5jdGlvbiBpc05vdFZhbGlkVmFsdWUodmFsKSB7XG4gICAgcmV0dXJuIGlzTmlsKHZhbCkgfHwgaXNOYW5WYWx1ZSh2YWwpIHx8ICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUodmFsKSk7XG59XG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLVtcXF0ve30oKSorPy5cXFxcXiR8XS9nLCAnXFxcXCQmJyk7XG59XG5mdW5jdGlvbiBnZXRUaG91c2FuZHNHcm91cFJlZ2V4KHRob3VzYW5kc0dyb3VwU3R5bGUpIHtcbiAgICBzd2l0Y2ggKHRob3VzYW5kc0dyb3VwU3R5bGUpIHtcbiAgICAgICAgY2FzZSAnbGFraCc6XG4gICAgICAgICAgICByZXR1cm4gLyhcXGQrPykoPz0oXFxkXFxkKSsoXFxkKSg/IVxcZCkpKFxcLlxcZCspPy9nO1xuICAgICAgICBjYXNlICd3YW4nOlxuICAgICAgICAgICAgcmV0dXJuIC8oXFxkKSg/PShcXGR7NH0pKyg/IVxcZCkpL2c7XG4gICAgICAgIGNhc2UgJ3Rob3VzYW5kJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAvKFxcZCkoPz0oXFxkezN9KSsoPyFcXGQpKS9nO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFwcGx5VGhvdXNhbmRTZXBhcmF0b3Ioc3RyLCB0aG91c2FuZFNlcGFyYXRvciwgdGhvdXNhbmRzR3JvdXBTdHlsZSkge1xuICAgIHZhciB0aG91c2FuZHNHcm91cFJlZ2V4ID0gZ2V0VGhvdXNhbmRzR3JvdXBSZWdleCh0aG91c2FuZHNHcm91cFN0eWxlKTtcbiAgICB2YXIgaW5kZXggPSBzdHIuc2VhcmNoKC9bMS05XS8pO1xuICAgIGluZGV4ID0gaW5kZXggPT09IC0xID8gc3RyLmxlbmd0aCA6IGluZGV4O1xuICAgIHJldHVybiAoc3RyLnN1YnN0cmluZygwLCBpbmRleCkgK1xuICAgICAgICBzdHIuc3Vic3RyaW5nKGluZGV4LCBzdHIubGVuZ3RoKS5yZXBsYWNlKHRob3VzYW5kc0dyb3VwUmVnZXgsICckMScgKyB0aG91c2FuZFNlcGFyYXRvcikpO1xufVxuZnVuY3Rpb24gdXNlUGVyc2lzdGVudENhbGxiYWNrKGNiKSB7XG4gICAgdmFyIGNhbGxiYWNrUmVmID0gdXNlUmVmKGNiKTtcbiAgICAvLyBrZWVwIHRoZSBjYWxsYmFjayByZWYgdXB0byBkYXRlXG4gICAgY2FsbGJhY2tSZWYuY3VycmVudCA9IGNiO1xuICAgIC8qKlxuICAgICAqIGluaXRpYWxpemUgYSBwZXJzaXN0ZW50IGNhbGxiYWNrIHdoaWNoIG5ldmVyIGNoYW5nZXNcbiAgICAgKiB0aHJvdWdoIG91dCB0aGUgY29tcG9uZW50IGxpZmVjeWNsZVxuICAgICAqL1xuICAgIHZhciBwZXJzaXN0ZW50Q2JSZWYgPSB1c2VSZWYoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBjYWxsYmFja1JlZi5jdXJyZW50LmFwcGx5KGNhbGxiYWNrUmVmLCBhcmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcGVyc2lzdGVudENiUmVmLmN1cnJlbnQ7XG59XG4vL3NwaWx0IGEgZmxvYXQgbnVtYmVyIGludG8gZGlmZmVyZW50IHBhcnRzIGJlZm9yZURlY2ltYWwsIGFmdGVyRGVjaW1hbCwgYW5kIG5lZ2F0aW9uXG5mdW5jdGlvbiBzcGxpdERlY2ltYWwobnVtU3RyLCBhbGxvd05lZ2F0aXZlKSB7XG4gICAgaWYgKCBhbGxvd05lZ2F0aXZlID09PSB2b2lkIDAgKSBhbGxvd05lZ2F0aXZlID0gdHJ1ZTtcblxuICAgIHZhciBoYXNOZWdhdGlvbiA9IG51bVN0clswXSA9PT0gJy0nO1xuICAgIHZhciBhZGROZWdhdGlvbiA9IGhhc05lZ2F0aW9uICYmIGFsbG93TmVnYXRpdmU7XG4gICAgbnVtU3RyID0gbnVtU3RyLnJlcGxhY2UoJy0nLCAnJyk7XG4gICAgdmFyIHBhcnRzID0gbnVtU3RyLnNwbGl0KCcuJyk7XG4gICAgdmFyIGJlZm9yZURlY2ltYWwgPSBwYXJ0c1swXTtcbiAgICB2YXIgYWZ0ZXJEZWNpbWFsID0gcGFydHNbMV0gfHwgJyc7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmVmb3JlRGVjaW1hbDogYmVmb3JlRGVjaW1hbCxcbiAgICAgICAgYWZ0ZXJEZWNpbWFsOiBhZnRlckRlY2ltYWwsXG4gICAgICAgIGhhc05lZ2F0aW9uOiBoYXNOZWdhdGlvbixcbiAgICAgICAgYWRkTmVnYXRpb246IGFkZE5lZ2F0aW9uLFxuICAgIH07XG59XG5mdW5jdGlvbiBmaXhMZWFkaW5nWmVybyhudW1TdHIpIHtcbiAgICBpZiAoIW51bVN0cilcbiAgICAgICAgeyByZXR1cm4gbnVtU3RyOyB9XG4gICAgdmFyIGlzTmVnYXRpdmUgPSBudW1TdHJbMF0gPT09ICctJztcbiAgICBpZiAoaXNOZWdhdGl2ZSlcbiAgICAgICAgeyBudW1TdHIgPSBudW1TdHIuc3Vic3RyaW5nKDEsIG51bVN0ci5sZW5ndGgpOyB9XG4gICAgdmFyIHBhcnRzID0gbnVtU3RyLnNwbGl0KCcuJyk7XG4gICAgdmFyIGJlZm9yZURlY2ltYWwgPSBwYXJ0c1swXS5yZXBsYWNlKC9eMCsvLCAnJykgfHwgJzAnO1xuICAgIHZhciBhZnRlckRlY2ltYWwgPSBwYXJ0c1sxXSB8fCAnJztcbiAgICByZXR1cm4gKFwiXCIgKyAoaXNOZWdhdGl2ZSA/ICctJyA6ICcnKSArIGJlZm9yZURlY2ltYWwgKyAoYWZ0ZXJEZWNpbWFsID8gKFwiLlwiICsgYWZ0ZXJEZWNpbWFsKSA6ICcnKSk7XG59XG4vKipcbiAqIGxpbWl0IGRlY2ltYWwgbnVtYmVycyB0byBnaXZlbiBzY2FsZVxuICogTm90IHVzZWQgLmZpeGVkVG8gYmVjYXVzZSB0aGF0IHdpbGwgYnJlYWsgd2l0aCBiaWcgbnVtYmVyc1xuICovXG5mdW5jdGlvbiBsaW1pdFRvU2NhbGUobnVtU3RyLCBzY2FsZSwgZml4ZWREZWNpbWFsU2NhbGUpIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgdmFyIGZpbGxlciA9IGZpeGVkRGVjaW1hbFNjYWxlID8gJzAnIDogJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2NhbGUgLSAxOyBpKyspIHtcbiAgICAgICAgc3RyICs9IG51bVN0cltpXSB8fCBmaWxsZXI7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5mdW5jdGlvbiByZXBlYXQoc3RyLCBjb3VudCkge1xuICAgIHJldHVybiBBcnJheShjb3VudCArIDEpLmpvaW4oc3RyKTtcbn1cbmZ1bmN0aW9uIHRvTnVtZXJpY1N0cmluZyhudW0pIHtcbiAgICB2YXIgX251bSA9IG51bSArICcnOyAvLyB0eXBlY2FzdCBudW1iZXIgdG8gc3RyaW5nXG4gICAgLy8gc3RvcmUgdGhlIHNpZ24gYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBudW1iZXIuXG4gICAgdmFyIHNpZ24gPSBfbnVtWzBdID09PSAnLScgPyAnLScgOiAnJztcbiAgICBpZiAoc2lnbilcbiAgICAgICAgeyBfbnVtID0gX251bS5zdWJzdHJpbmcoMSk7IH1cbiAgICAvLyBzcGxpdCB0aGUgbnVtYmVyIGludG8gY29mZmljaWVudCBhbmQgZXhwb25lbnRcbiAgICB2YXIgcmVmID0gX251bS5zcGxpdCgvW2VFXS9nKTtcbiAgICB2YXIgY29lZmZpY2llbnQgPSByZWZbMF07XG4gICAgdmFyIGV4cG9uZW50ID0gcmVmWzFdO1xuICAgIC8vIGNvdmVydCBleHBvbmVudCB0byBudW1iZXI7XG4gICAgZXhwb25lbnQgPSBOdW1iZXIoZXhwb25lbnQpO1xuICAgIC8vIGlmIHRoZXJlIGlzIG5vIGV4cG9uZW50IHBhcnQgb3IgaXRzIDAsIHJldHVybiB0aGUgY29mZmllY2llbnQgd2l0aCBzaWduXG4gICAgaWYgKCFleHBvbmVudClcbiAgICAgICAgeyByZXR1cm4gc2lnbiArIGNvZWZmaWNpZW50OyB9XG4gICAgY29lZmZpY2llbnQgPSBjb2VmZmljaWVudC5yZXBsYWNlKCcuJywgJycpO1xuICAgIC8qKlxuICAgICAqIGZvciBzY2llbnRpZmljIG5vdGF0aW9uIHRoZSBjdXJyZW50IGRlY2ltYWwgaW5kZXggd2lsbCBiZSBhZnRlciBmaXJzdCBudW1iZXIgKGluZGV4IDApXG4gICAgICogU28gZWZmZWN0aXZlIGRlY2ltYWwgaW5kZXggd2lsbCBhbHdheXMgYmUgMSArIGV4cG9uZW50IHZhbHVlXG4gICAgICovXG4gICAgdmFyIGRlY2ltYWxJbmRleCA9IDEgKyBleHBvbmVudDtcbiAgICB2YXIgY29mZmllY2llbnRMbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgICBpZiAoZGVjaW1hbEluZGV4IDwgMCkge1xuICAgICAgICAvLyBpZiBkZWNpbWFsIGluZGV4IGlzIGxlc3MgdGhlbiAwIGFkZCBwcmVjZWRpbmcgMHNcbiAgICAgICAgLy8gYWRkIDEgYXMgam9pbiB3aWxsIGhhdmVcbiAgICAgICAgY29lZmZpY2llbnQgPSAnMC4nICsgcmVwZWF0KCcwJywgTWF0aC5hYnMoZGVjaW1hbEluZGV4KSkgKyBjb2VmZmljaWVudDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGVjaW1hbEluZGV4ID49IGNvZmZpZWNpZW50TG4pIHtcbiAgICAgICAgLy8gaWYgZGVjaW1hbCBpbmRleCBpcyBsZXNzIHRoZW4gMCBhZGQgbGVhZGluZyAwc1xuICAgICAgICBjb2VmZmljaWVudCA9IGNvZWZmaWNpZW50ICsgcmVwZWF0KCcwJywgZGVjaW1hbEluZGV4IC0gY29mZmllY2llbnRMbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBlbHNlIGFkZCBkZWNpbWFsIHBvaW50IGF0IHByb3BlciBpbmRleFxuICAgICAgICBjb2VmZmljaWVudCA9XG4gICAgICAgICAgICAoY29lZmZpY2llbnQuc3Vic3RyaW5nKDAsIGRlY2ltYWxJbmRleCkgfHwgJzAnKSArICcuJyArIGNvZWZmaWNpZW50LnN1YnN0cmluZyhkZWNpbWFsSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbiArIGNvZWZmaWNpZW50O1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCB0byByb3VuZCBwcm9wIHZhbHVlIHRvIGdpdmVuIHNjYWxlLlxuICogTm90IHVzZWQgLnJvdW5kIG9yIC5maXhlZFRvIGJlY2F1c2UgdGhhdCB3aWxsIGJyZWFrIHdpdGggYmlnIG51bWJlcnNcbiAqL1xuZnVuY3Rpb24gcm91bmRUb1ByZWNpc2lvbihudW1TdHIsIHNjYWxlLCBmaXhlZERlY2ltYWxTY2FsZSkge1xuICAgIC8vaWYgbnVtYmVyIGlzIGVtcHR5IGRvbid0IGRvIGFueXRoaW5nIHJldHVybiBlbXB0eSBzdHJpbmdcbiAgICBpZiAoWycnLCAnLSddLmluZGV4T2YobnVtU3RyKSAhPT0gLTEpXG4gICAgICAgIHsgcmV0dXJuIG51bVN0cjsgfVxuICAgIHZhciBzaG91bGRIYXZlRGVjaW1hbFNlcGFyYXRvciA9IChudW1TdHIuaW5kZXhPZignLicpICE9PSAtMSB8fCBmaXhlZERlY2ltYWxTY2FsZSkgJiYgc2NhbGU7XG4gICAgdmFyIHJlZiA9IHNwbGl0RGVjaW1hbChudW1TdHIpO1xuICAgIHZhciBiZWZvcmVEZWNpbWFsID0gcmVmLmJlZm9yZURlY2ltYWw7XG4gICAgdmFyIGFmdGVyRGVjaW1hbCA9IHJlZi5hZnRlckRlY2ltYWw7XG4gICAgdmFyIGhhc05lZ2F0aW9uID0gcmVmLmhhc05lZ2F0aW9uO1xuICAgIHZhciBmbG9hdFZhbHVlID0gcGFyc2VGbG9hdCgoXCIwLlwiICsgKGFmdGVyRGVjaW1hbCB8fCAnMCcpKSk7XG4gICAgdmFyIGZsb2F0VmFsdWVTdHIgPSBhZnRlckRlY2ltYWwubGVuZ3RoIDw9IHNjYWxlID8gKFwiMC5cIiArIGFmdGVyRGVjaW1hbCkgOiBmbG9hdFZhbHVlLnRvRml4ZWQoc2NhbGUpO1xuICAgIHZhciByb3VuZGVkRGVjaW1hbFBhcnRzID0gZmxvYXRWYWx1ZVN0ci5zcGxpdCgnLicpO1xuICAgIHZhciBpbnRQYXJ0ID0gYmVmb3JlRGVjaW1hbDtcbiAgICAvLyBpZiB3ZSBoYXZlIGNhcnkgb3ZlciBmcm9tIHJvdW5kaW5nIGRlY2ltYWwgcGFydCwgYWRkIHRoYXQgb24gYmVmb3JlIGRlY2ltYWxcbiAgICBpZiAoYmVmb3JlRGVjaW1hbCAmJiBOdW1iZXIocm91bmRlZERlY2ltYWxQYXJ0c1swXSkpIHtcbiAgICAgICAgaW50UGFydCA9IGJlZm9yZURlY2ltYWxcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKHJvdW5kZWRTdHIsIGN1cnJlbnQsIGlkeCkge1xuICAgICAgICAgICAgaWYgKHJvdW5kZWRTdHIubGVuZ3RoID4gaWR4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoTnVtYmVyKHJvdW5kZWRTdHJbMF0pICsgTnVtYmVyKGN1cnJlbnQpKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICAgcm91bmRlZFN0ci5zdWJzdHJpbmcoMSwgcm91bmRlZFN0ci5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50ICsgcm91bmRlZFN0cjtcbiAgICAgICAgfSwgcm91bmRlZERlY2ltYWxQYXJ0c1swXSk7XG4gICAgfVxuICAgIHZhciBkZWNpbWFsUGFydCA9IGxpbWl0VG9TY2FsZShyb3VuZGVkRGVjaW1hbFBhcnRzWzFdIHx8ICcnLCBzY2FsZSwgZml4ZWREZWNpbWFsU2NhbGUpO1xuICAgIHZhciBuZWdhdGlvbiA9IGhhc05lZ2F0aW9uID8gJy0nIDogJyc7XG4gICAgdmFyIGRlY2ltYWxTZXBhcmF0b3IgPSBzaG91bGRIYXZlRGVjaW1hbFNlcGFyYXRvciA/ICcuJyA6ICcnO1xuICAgIHJldHVybiAoXCJcIiArIG5lZ2F0aW9uICsgaW50UGFydCArIGRlY2ltYWxTZXBhcmF0b3IgKyBkZWNpbWFsUGFydCk7XG59XG4vKiogc2V0IHRoZSBjYXJldCBwb3NpdG9uIGluIGFuIGlucHV0IGZpZWxkICoqL1xuZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihlbCwgY2FyZXRQb3MpIHtcbiAgICBlbC52YWx1ZSA9IGVsLnZhbHVlO1xuICAgIC8vIF4gdGhpcyBpcyB1c2VkIHRvIG5vdCBvbmx5IGdldCAnZm9jdXMnLCBidXRcbiAgICAvLyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBpdCBldmVyeXRoaW5nIC1zZWxlY3RlZC1cbiAgICAvLyAoaXQgY2F1c2VzIGFuIGlzc3VlIGluIGNocm9tZSwgYW5kIGhhdmluZyBpdCBkb2Vzbid0IGh1cnQgYW55IG90aGVyIGJyb3dzZXIpXG4gICAgaWYgKGVsICE9PSBudWxsKSB7XG4gICAgICAgIC8qIEB0cy1pZ25vcmUgKi9cbiAgICAgICAgaWYgKGVsLmNyZWF0ZVRleHRSYW5nZSkge1xuICAgICAgICAgICAgLyogQHRzLWlnbm9yZSAqL1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gZWwuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICAgICAgICByYW5nZS5tb3ZlKCdjaGFyYWN0ZXInLCBjYXJldFBvcyk7XG4gICAgICAgICAgICByYW5nZS5zZWxlY3QoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIChlbC5zZWxlY3Rpb25TdGFydCA9PT0gMCBhZGRlZCBmb3IgRmlyZWZveCBidWcpXG4gICAgICAgIGlmIChlbC5zZWxlY3Rpb25TdGFydCB8fCBlbC5zZWxlY3Rpb25TdGFydCA9PT0gMCkge1xuICAgICAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKGNhcmV0UG9zLCBjYXJldFBvcyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmYWlsIGNpdHksIGZvcnR1bmF0ZWx5IHRoaXMgbmV2ZXIgaGFwcGVucyAoYXMgZmFyIGFzIEkndmUgdGVzdGVkKSA6KVxuICAgICAgICBlbC5mb2N1cygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuLyoqXG4gKiBUT0RPOiByZW1vdmUgZGVwZW5kZW5jeSBvZiBmaW5kQ2hhbmdlUmFuZ2UsIGZpbmRDaGFuZ2VkUmFuZ2VGcm9tQ2FyZXRQb3NpdGlvbnMgaXMgYmV0dGVyIHdheSB0byBmaW5kIHdoYXQgaXMgY2hhbmdlZFxuICogY3VycmVudGx5IHRoaXMgaXMgbW9zdGx5IHJlcXVpcmVkIGJ5IHRlc3QgYW5kIGlzQ2hhcmFjdGVyU2FtZSB1dGlsXG4gKiBHaXZlbiBwcmV2aW91cyB2YWx1ZSBhbmQgbmV3VmFsdWUgaXQgcmV0dXJucyB0aGUgaW5kZXhcbiAqIHN0YXJ0IC0gZW5kIHRvIHdoaWNoIHZhbHVlcyBoYXZlIGNoYW5nZWQuXG4gKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGFzc3VtcHRpb24gYWJvdXQgb25seSBjb25zZWN1dGl2ZVxuICogY2hhcmFjdGVycyBhcmUgY2hhbmdlZCB3aGljaCBpcyBjb3JyZWN0IGFzc3VtcHRpb24gZm9yIGNhcmV0IGlucHV0LlxuICovXG52YXIgZmluZENoYW5nZVJhbmdlID0gbWVtb2l6ZU9uY2UoZnVuY3Rpb24gKHByZXZWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICB2YXIgaSA9IDAsIGogPSAwO1xuICAgIHZhciBwcmV2TGVuZ3RoID0gcHJldlZhbHVlLmxlbmd0aDtcbiAgICB2YXIgbmV3TGVuZ3RoID0gbmV3VmFsdWUubGVuZ3RoO1xuICAgIHdoaWxlIChwcmV2VmFsdWVbaV0gPT09IG5ld1ZhbHVlW2ldICYmIGkgPCBwcmV2TGVuZ3RoKVxuICAgICAgICB7IGkrKzsgfVxuICAgIC8vY2hlY2sgd2hhdCBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gbGFzdFxuICAgIHdoaWxlIChwcmV2VmFsdWVbcHJldkxlbmd0aCAtIDEgLSBqXSA9PT0gbmV3VmFsdWVbbmV3TGVuZ3RoIC0gMSAtIGpdICYmXG4gICAgICAgIG5ld0xlbmd0aCAtIGogPiBpICYmXG4gICAgICAgIHByZXZMZW5ndGggLSBqID4gaSkge1xuICAgICAgICBqKys7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGZyb206IHsgc3RhcnQ6IGksIGVuZDogcHJldkxlbmd0aCAtIGogfSxcbiAgICAgICAgdG86IHsgc3RhcnQ6IGksIGVuZDogbmV3TGVuZ3RoIC0gaiB9LFxuICAgIH07XG59KTtcbnZhciBmaW5kQ2hhbmdlZFJhbmdlRnJvbUNhcmV0UG9zaXRpb25zID0gZnVuY3Rpb24gKGxhc3RDYXJldFBvc2l0aW9ucywgY3VycmVudENhcmV0UG9zaXRpb24pIHtcbiAgICB2YXIgc3RhcnRQb3NpdGlvbiA9IE1hdGgubWluKGxhc3RDYXJldFBvc2l0aW9ucy5zZWxlY3Rpb25TdGFydCwgY3VycmVudENhcmV0UG9zaXRpb24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZyb206IHsgc3RhcnQ6IHN0YXJ0UG9zaXRpb24sIGVuZDogbGFzdENhcmV0UG9zaXRpb25zLnNlbGVjdGlvbkVuZCB9LFxuICAgICAgICB0bzogeyBzdGFydDogc3RhcnRQb3NpdGlvbiwgZW5kOiBjdXJyZW50Q2FyZXRQb3NpdGlvbiB9LFxuICAgIH07XG59O1xuLypcbiAgUmV0dXJucyBhIG51bWJlciB3aG9zZSB2YWx1ZSBpcyBsaW1pdGVkIHRvIHRoZSBnaXZlbiByYW5nZVxuKi9cbmZ1bmN0aW9uIGNsYW1wKG51bSwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobnVtLCBtaW4pLCBtYXgpO1xufVxuZnVuY3Rpb24gZ2VJbnB1dENhcmV0UG9zaXRpb24oZWwpIHtcbiAgICAvKk1heCBvZiBzZWxlY3Rpb25TdGFydCBhbmQgc2VsZWN0aW9uRW5kIGlzIHRha2VuIGZvciB0aGUgcGF0Y2ggb2YgcGl4ZWwgYW5kIG90aGVyIG1vYmlsZSBkZXZpY2UgY2FyZXQgYnVnKi9cbiAgICByZXR1cm4gTWF0aC5tYXgoZWwuc2VsZWN0aW9uU3RhcnQsIGVsLnNlbGVjdGlvbkVuZCk7XG59XG5mdW5jdGlvbiBhZGRJbnB1dE1vZGUoKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAhKG5hdmlnYXRvci5wbGF0Zm9ybSAmJiAvaVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSkpO1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdENoYW5nZU1ldGEodmFsdWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmcm9tOiB7XG4gICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgIGVuZDogMCxcbiAgICAgICAgfSxcbiAgICAgICAgdG86IHtcbiAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgZW5kOiB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIH0sXG4gICAgICAgIGxhc3RWYWx1ZTogJycsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldE1hc2tBdEluZGV4KG1hc2ssIGluZGV4KSB7XG4gICAgaWYgKCBtYXNrID09PSB2b2lkIDAgKSBtYXNrID0gJyAnO1xuXG4gICAgaWYgKHR5cGVvZiBtYXNrID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbWFzaztcbiAgICB9XG4gICAgcmV0dXJuIG1hc2tbaW5kZXhdIHx8ICcgJztcbn1cbmZ1bmN0aW9uIGRlZmF1bHRJc0NoYXJhY3RlclNhbWUocmVmKSB7XG4gICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHJlZi5jdXJyZW50VmFsdWU7XG4gICAgdmFyIGZvcm1hdHRlZFZhbHVlID0gcmVmLmZvcm1hdHRlZFZhbHVlO1xuICAgIHZhciBjdXJyZW50VmFsdWVJbmRleCA9IHJlZi5jdXJyZW50VmFsdWVJbmRleDtcbiAgICB2YXIgZm9ybWF0dGVkVmFsdWVJbmRleCA9IHJlZi5mb3JtYXR0ZWRWYWx1ZUluZGV4O1xuXG4gICAgcmV0dXJuIGN1cnJlbnRWYWx1ZVtjdXJyZW50VmFsdWVJbmRleF0gPT09IGZvcm1hdHRlZFZhbHVlW2Zvcm1hdHRlZFZhbHVlSW5kZXhdO1xufVxuZnVuY3Rpb24gZ2V0Q2FyZXRQb3NpdGlvbihuZXdGb3JtYXR0ZWRWYWx1ZSwgbGFzdEZvcm1hdHRlZFZhbHVlLCBjdXJWYWx1ZSwgY3VyQ2FyZXRQb3MsIGJvdW5kYXJ5LCBpc1ZhbGlkSW5wdXRDaGFyYWN0ZXIsIFxuLyoqXG4gKiBmb3JtYXQgZnVuY3Rpb24gY2FuIGNoYW5nZSB0aGUgY2hhcmFjdGVyLCB0aGUgY2FyZXQgZW5naW5lIHJlbGllcyBvbiBtYXBwaW5nIG9sZCB2YWx1ZSBhbmQgbmV3IHZhbHVlXG4gKiBJbiBzdWNoIGNhc2UgaWYgY2hhcmFjdGVyIGlzIGNoYW5nZWQsIHBhcmVudCBjYW4gdGVsbCB3aGljaCBjaGFycyBhcmUgZXF1aXZhbGVudFxuICogU29tZSBleGFtcGxlLCBhbGwgYWxsb3dlZERlY2ltYWxDaGFyYWN0ZXJzIGFyZSB1cGRhdGVkIHRvIGRlY2ltYWxDaGFyYWN0ZXJzLCAybmQgY2FzZSBpZiB1c2VyIGlzIGNvdmVydGluZ1xuICogbnVtYmVyIHRvIGRpZmZlcmVudCBudW1lcmljIHN5c3RlbS5cbiAqL1xuaXNDaGFyYWN0ZXJTYW1lKSB7XG4gICAgaWYgKCBpc0NoYXJhY3RlclNhbWUgPT09IHZvaWQgMCApIGlzQ2hhcmFjdGVyU2FtZSA9IGRlZmF1bHRJc0NoYXJhY3RlclNhbWU7XG5cbiAgICAvKipcbiAgICAgKiBpZiBzb21ldGhpbmcgZ290IGluc2VydGVkIG9uIGVtcHR5IHZhbHVlLCBhZGQgdGhlIGZvcm1hdHRlZCBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjdXJyZW50IHZhbHVlLFxuICAgICAqIFRoaXMgaXMgdG8gYXZvaWQgdGhlIGNhc2Ugd2hlcmUgdHlwZWQgY2hhcmFjdGVyIGlzIHByZXNlbnQgb24gZm9ybWF0IGNoYXJhY3RlcnNcbiAgICAgKi9cbiAgICB2YXIgZmlyc3RBbGxvd2VkUG9zaXRpb24gPSBib3VuZGFyeS5maW5kSW5kZXgoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGI7IH0pO1xuICAgIHZhciBwcmVmaXhGb3JtYXQgPSBuZXdGb3JtYXR0ZWRWYWx1ZS5zbGljZSgwLCBmaXJzdEFsbG93ZWRQb3NpdGlvbik7XG4gICAgaWYgKCFsYXN0Rm9ybWF0dGVkVmFsdWUgJiYgIWN1clZhbHVlLnN0YXJ0c1dpdGgocHJlZml4Rm9ybWF0KSkge1xuICAgICAgICBsYXN0Rm9ybWF0dGVkVmFsdWUgPSBwcmVmaXhGb3JtYXQ7XG4gICAgICAgIGN1clZhbHVlID0gcHJlZml4Rm9ybWF0ICsgY3VyVmFsdWU7XG4gICAgICAgIGN1ckNhcmV0UG9zID0gY3VyQ2FyZXRQb3MgKyBwcmVmaXhGb3JtYXQubGVuZ3RoO1xuICAgIH1cbiAgICB2YXIgY3VyVmFsTG4gPSBjdXJWYWx1ZS5sZW5ndGg7XG4gICAgdmFyIGZvcm1hdHRlZFZhbHVlTG4gPSBuZXdGb3JtYXR0ZWRWYWx1ZS5sZW5ndGg7XG4gICAgLy8gY3JlYXRlIGluZGV4IG1hcFxuICAgIHZhciBhZGRlZEluZGV4TWFwID0ge307XG4gICAgdmFyIGluZGV4TWFwID0gbmV3IEFycmF5KGN1clZhbExuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1clZhbExuOyBpKyspIHtcbiAgICAgICAgaW5kZXhNYXBbaV0gPSAtMTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpMbiA9IGZvcm1hdHRlZFZhbHVlTG47IGogPCBqTG47IGorKykge1xuICAgICAgICAgICAgdmFyIGlzQ2hhclNhbWUgPSBpc0NoYXJhY3RlclNhbWUoe1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogY3VyVmFsdWUsXG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0Rm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IG5ld0Zvcm1hdHRlZFZhbHVlLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZUluZGV4OiBpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlSW5kZXg6IGosXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpc0NoYXJTYW1lICYmIGFkZGVkSW5kZXhNYXBbal0gIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpbmRleE1hcFtpXSA9IGo7XG4gICAgICAgICAgICAgICAgYWRkZWRJbmRleE1hcFtqXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9yIGN1cnJlbnQgY2FyZXQgcG9zaXRpb24gZmluZCBjbG9zZXN0IGNoYXJhY3RlcnMgKGxlZnQgYW5kIHJpZ2h0IHNpZGUpXG4gICAgICogd2hpY2ggYXJlIHByb3Blcmx5IG1hcHBlZCB0byBmb3JtYXR0ZWQgdmFsdWUuXG4gICAgICogVGhlIGlkZWEgaXMgdGhhdCB0aGUgbmV3IGNhcmV0IHBvc2l0aW9uIHdpbGwgZXhpc3QgYWx3YXlzIGluIHRoZSBib3VuZGFyeSBvZlxuICAgICAqIHRoYXQgbWFwcGVkIGluZGV4XG4gICAgICovXG4gICAgdmFyIHBvcyA9IGN1ckNhcmV0UG9zO1xuICAgIHdoaWxlIChwb3MgPCBjdXJWYWxMbiAmJiAoaW5kZXhNYXBbcG9zXSA9PT0gLTEgfHwgIWlzVmFsaWRJbnB1dENoYXJhY3RlcihjdXJWYWx1ZVtwb3NdKSkpIHtcbiAgICAgICAgcG9zKys7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBjYXJldCBwb3NpdGlvbiBpcyBvbiBsYXN0IGtlZXAgdGhlIGVuZEluZGV4IGFzIGxhc3QgZm9yIGZvcm1hdHRlZCB2YWx1ZVxuICAgIHZhciBlbmRJbmRleCA9IHBvcyA9PT0gY3VyVmFsTG4gfHwgaW5kZXhNYXBbcG9zXSA9PT0gLTEgPyBmb3JtYXR0ZWRWYWx1ZUxuIDogaW5kZXhNYXBbcG9zXTtcbiAgICBwb3MgPSBjdXJDYXJldFBvcyAtIDE7XG4gICAgd2hpbGUgKHBvcyA+IDAgJiYgaW5kZXhNYXBbcG9zXSA9PT0gLTEpXG4gICAgICAgIHsgcG9zLS07IH1cbiAgICB2YXIgc3RhcnRJbmRleCA9IHBvcyA9PT0gLTEgfHwgaW5kZXhNYXBbcG9zXSA9PT0gLTEgPyAwIDogaW5kZXhNYXBbcG9zXSArIDE7XG4gICAgLyoqXG4gICAgICogY2FzZSB3aGVyZSBhIGNoYXIgaXMgYWRkZWQgb24gc3VmZml4IGFuZCByZW1vdmVkIGZyb20gbWlkZGxlLCBleGFtcGxlIDJzcTM0NSBiZWNvbWluZyAkMiwzNDUgc3FcbiAgICAgKiB0aGVyZSBpcyBzdGlsbCBhIG1hcHBpbmcgYnV0IHRoZSBvcmRlciBvZiBzdGFydCBpbmRleCBhbmQgZW5kIGluZGV4IGlzIGNoYW5nZWRcbiAgICAgKi9cbiAgICBpZiAoc3RhcnRJbmRleCA+IGVuZEluZGV4KVxuICAgICAgICB7IHJldHVybiBlbmRJbmRleDsgfVxuICAgIC8qKlxuICAgICAqIGdpdmVuIHRoZSBjdXJyZW50IGNhcmV0IHBvc2l0aW9uIGlmIGl0IGNsb3NlciB0byBzdGFydEluZGV4XG4gICAgICoga2VlcCB0aGUgbmV3IGNhcmV0IHBvc2l0aW9uIG9uIHN0YXJ0IGluZGV4IG9yIGtlZXAgaXQgY2xvc2VyIHRvIGVuZEluZGV4XG4gICAgICovXG4gICAgcmV0dXJuIGN1ckNhcmV0UG9zIC0gc3RhcnRJbmRleCA8IGVuZEluZGV4IC0gY3VyQ2FyZXRQb3MgPyBzdGFydEluZGV4IDogZW5kSW5kZXg7XG59XG4vKiBUaGlzIGtlZXBzIHRoZSBjYXJldCB3aXRoaW4gdHlwaW5nIGFyZWEgc28gcGVvcGxlIGNhbid0IHR5cGUgaW4gYmV0d2VlbiBwcmVmaXggb3Igc3VmZml4IG9yIGZvcm1hdCBjaGFyYWN0ZXJzICovXG5mdW5jdGlvbiBnZXRDYXJldFBvc0luQm91bmRhcnkodmFsdWUsIGNhcmV0UG9zLCBib3VuZGFyeSwgZGlyZWN0aW9uKSB7XG4gICAgdmFyIHZhbExuID0gdmFsdWUubGVuZ3RoO1xuICAgIC8vIGNsYW1wIGNhcmV0IHBvc2l0aW9uIHRvIFswLCB2YWx1ZS5sZW5ndGhdXG4gICAgY2FyZXRQb3MgPSBjbGFtcChjYXJldFBvcywgMCwgdmFsTG4pO1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICB3aGlsZSAoY2FyZXRQb3MgPj0gMCAmJiAhYm91bmRhcnlbY2FyZXRQb3NdKVxuICAgICAgICAgICAgeyBjYXJldFBvcy0tOyB9XG4gICAgICAgIC8vIGlmIHdlIGRvbid0IGZpbmQgYW55IHN1aXRhYmxlIGNhcmV0IHBvc2l0aW9uIG9uIGxlZnQsIHNldCBpdCBvbiBmaXJzdCBhbGxvd2VkIHBvc2l0aW9uXG4gICAgICAgIGlmIChjYXJldFBvcyA9PT0gLTEpXG4gICAgICAgICAgICB7IGNhcmV0UG9zID0gYm91bmRhcnkuaW5kZXhPZih0cnVlKTsgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgd2hpbGUgKGNhcmV0UG9zIDw9IHZhbExuICYmICFib3VuZGFyeVtjYXJldFBvc10pXG4gICAgICAgICAgICB7IGNhcmV0UG9zKys7IH1cbiAgICAgICAgLy8gaWYgd2UgZG9uJ3QgZmluZCBhbnkgc3VpdGFibGUgY2FyZXQgcG9zaXRpb24gb24gcmlnaHQsIHNldCBpdCBvbiBsYXN0IGFsbG93ZWQgcG9zaXRpb25cbiAgICAgICAgaWYgKGNhcmV0UG9zID4gdmFsTG4pXG4gICAgICAgICAgICB7IGNhcmV0UG9zID0gYm91bmRhcnkubGFzdEluZGV4T2YodHJ1ZSk7IH1cbiAgICB9XG4gICAgLy8gaWYgd2Ugc3RpbGwgZG9uJ3QgZmluZCBjYXJldCBwb3NpdGlvbiwgc2V0IGl0IGF0IHRoZSBlbmQgb2YgdmFsdWVcbiAgICBpZiAoY2FyZXRQb3MgPT09IC0xKVxuICAgICAgICB7IGNhcmV0UG9zID0gdmFsTG47IH1cbiAgICByZXR1cm4gY2FyZXRQb3M7XG59XG5mdW5jdGlvbiBjYXJldFVua25vd25Gb3JtYXRCb3VuZGFyeShmb3JtYXR0ZWRWYWx1ZSkge1xuICAgIHZhciBib3VuZGFyeUFyeSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGZvcm1hdHRlZFZhbHVlLmxlbmd0aCArIDEgfSkubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0pO1xuICAgIGZvciAodmFyIGkgPSAwLCBsbiA9IGJvdW5kYXJ5QXJ5Lmxlbmd0aDsgaSA8IGxuOyBpKyspIHtcbiAgICAgICAgLy8gY29uc2lkZXIgY2FyZXQgdG8gYmUgaW4gYm91bmRhcnkgaWYgaXQgaXMgYmVmb3JlIG9yIGFmdGVyIG51bWVyaWMgdmFsdWVcbiAgICAgICAgYm91bmRhcnlBcnlbaV0gPSBCb29sZWFuKGNoYXJJc051bWJlcihmb3JtYXR0ZWRWYWx1ZVtpXSkgfHwgY2hhcklzTnVtYmVyKGZvcm1hdHRlZFZhbHVlW2kgLSAxXSkpO1xuICAgIH1cbiAgICByZXR1cm4gYm91bmRhcnlBcnk7XG59XG5mdW5jdGlvbiB1c2VJbnRlcm5hbFZhbHVlcyh2YWx1ZSwgZGVmYXVsdFZhbHVlLCB2YWx1ZUlzTnVtZXJpY1N0cmluZywgZm9ybWF0LCByZW1vdmVGb3JtYXR0aW5nLCBvblZhbHVlQ2hhbmdlKSB7XG4gICAgaWYgKCBvblZhbHVlQ2hhbmdlID09PSB2b2lkIDAgKSBvblZhbHVlQ2hhbmdlID0gbm9vcDtcblxuICAgIHZhciBnZXRWYWx1ZXMgPSB1c2VQZXJzaXN0ZW50Q2FsbGJhY2soZnVuY3Rpb24gKHZhbHVlLCB2YWx1ZUlzTnVtZXJpY1N0cmluZykge1xuICAgICAgICB2YXIgZm9ybWF0dGVkVmFsdWUsIG51bUFzU3RyaW5nO1xuICAgICAgICBpZiAoaXNOb3RWYWxpZFZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgbnVtQXNTdHJpbmcgPSAnJztcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB2YWx1ZUlzTnVtZXJpY1N0cmluZykge1xuICAgICAgICAgICAgbnVtQXNTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdG9OdW1lcmljU3RyaW5nKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXQobnVtQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbnVtQXNTdHJpbmcgPSByZW1vdmVGb3JtYXR0aW5nKHZhbHVlLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXQobnVtQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGZvcm1hdHRlZFZhbHVlOiBmb3JtYXR0ZWRWYWx1ZSwgbnVtQXNTdHJpbmc6IG51bUFzU3RyaW5nIH07XG4gICAgfSk7XG4gICAgdmFyIHJlZiA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldFZhbHVlcyhpc05pbCh2YWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiB2YWx1ZSwgdmFsdWVJc051bWVyaWNTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZXMgPSByZWZbMF07XG4gICAgdmFyIHNldFZhbHVlcyA9IHJlZlsxXTtcbiAgICB2YXIgX29uVmFsdWVDaGFuZ2UgPSBmdW5jdGlvbiAobmV3VmFsdWVzLCBzb3VyY2VJbmZvKSB7XG4gICAgICAgIGlmIChuZXdWYWx1ZXMuZm9ybWF0dGVkVmFsdWUgIT09IHZhbHVlcy5mb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgc2V0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogbmV3VmFsdWVzLmZvcm1hdHRlZFZhbHVlLFxuICAgICAgICAgICAgICAgIG51bUFzU3RyaW5nOiBuZXdWYWx1ZXMudmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxsIHBhcmVudCBvbiB2YWx1ZSBjaGFuZ2UgaWYgb25seSBpZiBmb3JtYXR0ZWQgdmFsdWUgaXMgY2hhbmdlZFxuICAgICAgICBvblZhbHVlQ2hhbmdlKG5ld1ZhbHVlcywgc291cmNlSW5mbyk7XG4gICAgfTtcbiAgICAvLyBpZiB2YWx1ZSBpcyBzd2l0Y2ggZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCwgdXNlIHRoZSBpbnRlcm5hbCBzdGF0ZSdzIHZhbHVlIHRvIGZvcm1hdCB3aXRoIG5ldyBwcm9wc1xuICAgIHZhciBfdmFsdWUgPSB2YWx1ZTtcbiAgICB2YXIgX3ZhbHVlSXNOdW1lcmljU3RyaW5nID0gdmFsdWVJc051bWVyaWNTdHJpbmc7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICBfdmFsdWUgPSB2YWx1ZXMubnVtQXNTdHJpbmc7XG4gICAgICAgIF92YWx1ZUlzTnVtZXJpY1N0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIHZhciBuZXdWYWx1ZXMgPSBnZXRWYWx1ZXMoX3ZhbHVlLCBfdmFsdWVJc051bWVyaWNTdHJpbmcpO1xuICAgIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRWYWx1ZXMobmV3VmFsdWVzKTtcbiAgICB9LCBbbmV3VmFsdWVzLmZvcm1hdHRlZFZhbHVlXSk7XG4gICAgcmV0dXJuIFt2YWx1ZXMsIF9vblZhbHVlQ2hhbmdlXTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFJlbW92ZUZvcm1hdHRpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW14wLTldL2csICcnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRGb3JtYXQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBOdW1iZXJGb3JtYXRCYXNlKHByb3BzKSB7XG4gICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlOyBpZiAoIHR5cGUgPT09IHZvaWQgMCApIHR5cGUgPSAndGV4dCc7XG4gICAgdmFyIGRpc3BsYXlUeXBlID0gcHJvcHMuZGlzcGxheVR5cGU7IGlmICggZGlzcGxheVR5cGUgPT09IHZvaWQgMCApIGRpc3BsYXlUeXBlID0gJ2lucHV0JztcbiAgICB2YXIgY3VzdG9tSW5wdXQgPSBwcm9wcy5jdXN0b21JbnB1dDtcbiAgICB2YXIgcmVuZGVyVGV4dCA9IHByb3BzLnJlbmRlclRleHQ7XG4gICAgdmFyIGdldElucHV0UmVmID0gcHJvcHMuZ2V0SW5wdXRSZWY7XG4gICAgdmFyIGZvcm1hdCA9IHByb3BzLmZvcm1hdDsgaWYgKCBmb3JtYXQgPT09IHZvaWQgMCApIGZvcm1hdCA9IGRlZmF1bHRGb3JtYXQ7XG4gICAgdmFyIHJlbW92ZUZvcm1hdHRpbmcgPSBwcm9wcy5yZW1vdmVGb3JtYXR0aW5nOyBpZiAoIHJlbW92ZUZvcm1hdHRpbmcgPT09IHZvaWQgMCApIHJlbW92ZUZvcm1hdHRpbmcgPSBkZWZhdWx0UmVtb3ZlRm9ybWF0dGluZztcbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIHZhciB2YWx1ZUlzTnVtZXJpY1N0cmluZyA9IHByb3BzLnZhbHVlSXNOdW1lcmljU3RyaW5nO1xuICAgIHZhciBvblZhbHVlQ2hhbmdlID0gcHJvcHMub25WYWx1ZUNoYW5nZTtcbiAgICB2YXIgaXNBbGxvd2VkID0gcHJvcHMuaXNBbGxvd2VkO1xuICAgIHZhciBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlOyBpZiAoIG9uQ2hhbmdlID09PSB2b2lkIDAgKSBvbkNoYW5nZSA9IG5vb3A7XG4gICAgdmFyIG9uS2V5RG93biA9IHByb3BzLm9uS2V5RG93bjsgaWYgKCBvbktleURvd24gPT09IHZvaWQgMCApIG9uS2V5RG93biA9IG5vb3A7XG4gICAgdmFyIG9uTW91c2VVcCA9IHByb3BzLm9uTW91c2VVcDsgaWYgKCBvbk1vdXNlVXAgPT09IHZvaWQgMCApIG9uTW91c2VVcCA9IG5vb3A7XG4gICAgdmFyIG9uRm9jdXMgPSBwcm9wcy5vbkZvY3VzOyBpZiAoIG9uRm9jdXMgPT09IHZvaWQgMCApIG9uRm9jdXMgPSBub29wO1xuICAgIHZhciBvbkJsdXIgPSBwcm9wcy5vbkJsdXI7IGlmICggb25CbHVyID09PSB2b2lkIDAgKSBvbkJsdXIgPSBub29wO1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wcy52YWx1ZTtcbiAgICB2YXIgZ2V0Q2FyZXRCb3VuZGFyeSA9IHByb3BzLmdldENhcmV0Qm91bmRhcnk7IGlmICggZ2V0Q2FyZXRCb3VuZGFyeSA9PT0gdm9pZCAwICkgZ2V0Q2FyZXRCb3VuZGFyeSA9IGNhcmV0VW5rbm93bkZvcm1hdEJvdW5kYXJ5O1xuICAgIHZhciBpc1ZhbGlkSW5wdXRDaGFyYWN0ZXIgPSBwcm9wcy5pc1ZhbGlkSW5wdXRDaGFyYWN0ZXI7IGlmICggaXNWYWxpZElucHV0Q2hhcmFjdGVyID09PSB2b2lkIDAgKSBpc1ZhbGlkSW5wdXRDaGFyYWN0ZXIgPSBjaGFySXNOdW1iZXI7XG4gICAgdmFyIGlzQ2hhcmFjdGVyU2FtZSA9IHByb3BzLmlzQ2hhcmFjdGVyU2FtZTtcbiAgICB2YXIgb3RoZXJQcm9wcyA9IF9fcmVzdChwcm9wcywgW1widHlwZVwiLCBcImRpc3BsYXlUeXBlXCIsIFwiY3VzdG9tSW5wdXRcIiwgXCJyZW5kZXJUZXh0XCIsIFwiZ2V0SW5wdXRSZWZcIiwgXCJmb3JtYXRcIiwgXCJyZW1vdmVGb3JtYXR0aW5nXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwidmFsdWVJc051bWVyaWNTdHJpbmdcIiwgXCJvblZhbHVlQ2hhbmdlXCIsIFwiaXNBbGxvd2VkXCIsIFwib25DaGFuZ2VcIiwgXCJvbktleURvd25cIiwgXCJvbk1vdXNlVXBcIiwgXCJvbkZvY3VzXCIsIFwib25CbHVyXCIsIFwidmFsdWVcIiwgXCJnZXRDYXJldEJvdW5kYXJ5XCIsIFwiaXNWYWxpZElucHV0Q2hhcmFjdGVyXCIsIFwiaXNDaGFyYWN0ZXJTYW1lXCJdKTtcbiAgICB2YXIgcmVmID0gdXNlSW50ZXJuYWxWYWx1ZXMocHJvcFZhbHVlLCBkZWZhdWx0VmFsdWUsIEJvb2xlYW4odmFsdWVJc051bWVyaWNTdHJpbmcpLCBmb3JtYXQsIHJlbW92ZUZvcm1hdHRpbmcsIG9uVmFsdWVDaGFuZ2UpO1xuICAgIHZhciByZWZfMCA9IHJlZlswXTtcbiAgICB2YXIgZm9ybWF0dGVkVmFsdWUgPSByZWZfMC5mb3JtYXR0ZWRWYWx1ZTtcbiAgICB2YXIgbnVtQXNTdHJpbmcgPSByZWZfMC5udW1Bc1N0cmluZztcbiAgICB2YXIgb25Gb3JtYXR0ZWRWYWx1ZUNoYW5nZSA9IHJlZlsxXTtcbiAgICB2YXIgY2FyZXRQb3NpdGlvbkJlZm9yZUNoYW5nZSA9IHVzZVJlZigpO1xuICAgIHZhciBsYXN0VXBkYXRlZFZhbHVlID0gdXNlUmVmKHsgZm9ybWF0dGVkVmFsdWU6IGZvcm1hdHRlZFZhbHVlLCBudW1Bc1N0cmluZzogbnVtQXNTdHJpbmcgfSk7XG4gICAgdmFyIF9vblZhbHVlQ2hhbmdlID0gZnVuY3Rpb24gKHZhbHVlcywgc291cmNlKSB7XG4gICAgICAgIGxhc3RVcGRhdGVkVmFsdWUuY3VycmVudCA9IHsgZm9ybWF0dGVkVmFsdWU6IHZhbHVlcy5mb3JtYXR0ZWRWYWx1ZSwgbnVtQXNTdHJpbmc6IHZhbHVlcy52YWx1ZSB9O1xuICAgICAgICBvbkZvcm1hdHRlZFZhbHVlQ2hhbmdlKHZhbHVlcywgc291cmNlKTtcbiAgICB9O1xuICAgIHZhciByZWYkMSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICB2YXIgbW91bnRlZCA9IHJlZiQxWzBdO1xuICAgIHZhciBzZXRNb3VudGVkID0gcmVmJDFbMV07XG4gICAgdmFyIGZvY3VzZWRFbG0gPSB1c2VSZWYobnVsbCk7XG4gICAgdmFyIHRpbWVvdXQgPSB1c2VSZWYoe1xuICAgICAgICBzZXRDYXJldFRpbWVvdXQ6IG51bGwsXG4gICAgICAgIGZvY3VzVGltZW91dDogbnVsbCxcbiAgICB9KTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRNb3VudGVkKHRydWUpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQuY3VycmVudC5zZXRDYXJldFRpbWVvdXQpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQuY3VycmVudC5mb2N1c1RpbWVvdXQpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgX2Zvcm1hdCA9IGZvcm1hdDtcbiAgICB2YXIgZ2V0VmFsdWVPYmplY3QgPSBmdW5jdGlvbiAoZm9ybWF0dGVkVmFsdWUsIG51bUFzU3RyaW5nKSB7XG4gICAgICAgIHZhciBmbG9hdFZhbHVlID0gcGFyc2VGbG9hdChudW1Bc1N0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogZm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVtQXNTdHJpbmcsXG4gICAgICAgICAgICBmbG9hdFZhbHVlOiBpc05hTihmbG9hdFZhbHVlKSA/IHVuZGVmaW5lZCA6IGZsb2F0VmFsdWUsXG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgc2V0UGF0Y2hlZENhcmV0UG9zaXRpb24gPSBmdW5jdGlvbiAoZWwsIGNhcmV0UG9zLCBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgLy8gZG9uJ3QgcmVzZXQgdGhlIGNhcmV0IHBvc2l0aW9uIHdoZW4gdGhlIHdob2xlIGlucHV0IGNvbnRlbnQgaXMgc2VsZWN0ZWRcbiAgICAgICAgaWYgKGVsLnNlbGVjdGlvblN0YXJ0ID09PSAwICYmIGVsLnNlbGVjdGlvbkVuZCA9PT0gZWwudmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgeyByZXR1cm47IH1cbiAgICAgICAgLyogc2V0dGluZyBjYXJldCBwb3NpdGlvbiB3aXRoaW4gdGltZW91dCBvZiAwbXMgaXMgcmVxdWlyZWQgZm9yIG1vYmlsZSBjaHJvbWUsXG4gICAgICAgIG90aGVyd2lzZSBicm93c2VyIHJlc2V0cyB0aGUgY2FyZXQgcG9zaXRpb24gYWZ0ZXIgd2Ugc2V0IGl0XG4gICAgICAgIFdlIGFyZSBhbHNvIHNldHRpbmcgaXQgd2l0aG91dCB0aW1lb3V0IHNvIHRoYXQgaW4gbm9ybWFsIGJyb3dzZXIgd2UgZG9uJ3Qgc2VlIHRoZSBmbGlja2VyaW5nICovXG4gICAgICAgIHNldENhcmV0UG9zaXRpb24oZWwsIGNhcmV0UG9zKTtcbiAgICAgICAgdGltZW91dC5jdXJyZW50LnNldENhcmV0VGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGVsLnZhbHVlID09PSBjdXJyZW50VmFsdWUgJiYgZWwuc2VsZWN0aW9uU3RhcnQgIT09IGNhcmV0UG9zKSB7XG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihlbCwgY2FyZXRQb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICB9O1xuICAgIC8qIFRoaXMga2VlcHMgdGhlIGNhcmV0IHdpdGhpbiB0eXBpbmcgYXJlYSBzbyBwZW9wbGUgY2FuJ3QgdHlwZSBpbiBiZXR3ZWVuIHByZWZpeCBvciBzdWZmaXggKi9cbiAgICB2YXIgY29ycmVjdENhcmV0UG9zaXRpb24gPSBmdW5jdGlvbiAodmFsdWUsIGNhcmV0UG9zLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGdldENhcmV0UG9zSW5Cb3VuZGFyeSh2YWx1ZSwgY2FyZXRQb3MsIGdldENhcmV0Qm91bmRhcnkodmFsdWUpLCBkaXJlY3Rpb24pO1xuICAgIH07XG4gICAgdmFyIGdldE5ld0NhcmV0UG9zaXRpb24gPSBmdW5jdGlvbiAoaW5wdXRWYWx1ZSwgbmV3Rm9ybWF0dGVkVmFsdWUsIGNhcmV0UG9zKSB7XG4gICAgICAgIHZhciBjYXJldEJvdW5kYXJ5ID0gZ2V0Q2FyZXRCb3VuZGFyeShuZXdGb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgIHZhciB1cGRhdGVkQ2FyZXRQb3MgPSBnZXRDYXJldFBvc2l0aW9uKG5ld0Zvcm1hdHRlZFZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSwgaW5wdXRWYWx1ZSwgY2FyZXRQb3MsIGNhcmV0Qm91bmRhcnksIGlzVmFsaWRJbnB1dENoYXJhY3RlciwgaXNDaGFyYWN0ZXJTYW1lKTtcbiAgICAgICAgLy9jb3JyZWN0IGNhcmV0IHBvc2l0aW9uIGlmIGl0cyBvdXRzaWRlIG9mIGVkaXRhYmxlIGFyZWFcbiAgICAgICAgdXBkYXRlZENhcmV0UG9zID0gZ2V0Q2FyZXRQb3NJbkJvdW5kYXJ5KG5ld0Zvcm1hdHRlZFZhbHVlLCB1cGRhdGVkQ2FyZXRQb3MsIGNhcmV0Qm91bmRhcnkpO1xuICAgICAgICByZXR1cm4gdXBkYXRlZENhcmV0UG9zO1xuICAgIH07XG4gICAgdmFyIHVwZGF0ZVZhbHVlQW5kQ2FyZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIG5ld0Zvcm1hdHRlZFZhbHVlID0gcGFyYW1zLmZvcm1hdHRlZFZhbHVlOyBpZiAoIG5ld0Zvcm1hdHRlZFZhbHVlID09PSB2b2lkIDAgKSBuZXdGb3JtYXR0ZWRWYWx1ZSA9ICcnO1xuICAgICAgICB2YXIgaW5wdXQgPSBwYXJhbXMuaW5wdXQ7XG4gICAgICAgIHZhciBzb3VyY2UgPSBwYXJhbXMuc291cmNlO1xuICAgICAgICB2YXIgZXZlbnQgPSBwYXJhbXMuZXZlbnQ7XG4gICAgICAgIHZhciBudW1Bc1N0cmluZyA9IHBhcmFtcy5udW1Bc1N0cmluZztcbiAgICAgICAgdmFyIGNhcmV0UG9zO1xuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHZhciBpbnB1dFZhbHVlID0gcGFyYW1zLmlucHV0VmFsdWUgfHwgaW5wdXQudmFsdWU7XG4gICAgICAgICAgICB2YXIgY3VycmVudENhcmV0UG9zaXRpb24gPSBnZUlucHV0Q2FyZXRQb3NpdGlvbihpbnB1dCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHNldCB0aGUgdmFsdWUgaW1wZXJhdGl2ZWx5LCB0aGlzIGlzIHJlcXVpcmVkIGZvciBJRSBmaXhcbiAgICAgICAgICAgICAqIFRoaXMgaXMgYWxzbyByZXF1aXJlZCBhcyBpZiBuZXcgY2FyZXQgcG9zaXRpb24gaXMgYmV5b25kIHRoZSBwcmV2aW91cyB2YWx1ZS5cbiAgICAgICAgICAgICAqIENhcmV0IHBvc2l0aW9uIHdpbGwgbm90IGJlIHNldCBjb3JyZWN0bHlcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBuZXdGb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgIC8vZ2V0IHRoZSBjYXJldCBwb3NpdGlvblxuICAgICAgICAgICAgY2FyZXRQb3MgPSBnZXROZXdDYXJldFBvc2l0aW9uKGlucHV0VmFsdWUsIG5ld0Zvcm1hdHRlZFZhbHVlLCBjdXJyZW50Q2FyZXRQb3NpdGlvbik7XG4gICAgICAgICAgICAvL3NldCBjYXJldCBwb3NpdGlvbiBpbXBlcmF0aXZlbHlcbiAgICAgICAgICAgIGlmIChjYXJldFBvcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2V0UGF0Y2hlZENhcmV0UG9zaXRpb24oaW5wdXQsIGNhcmV0UG9zLCBuZXdGb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld0Zvcm1hdHRlZFZhbHVlICE9PSBmb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgLy8gdHJpZ2dlciBvblZhbHVlQ2hhbmdlIHN5bmNocm9ub3VzbHksIHNvIHBhcmVudCBpcyB1cGRhdGVkIGFsb25nIHdpdGggdGhlIG51bWJlciBmb3JtYXQuIEZpeCBmb3IgIzI3NywgIzI4N1xuICAgICAgICAgICAgX29uVmFsdWVDaGFuZ2UoZ2V0VmFsdWVPYmplY3QobmV3Rm9ybWF0dGVkVmFsdWUsIG51bUFzU3RyaW5nKSwgeyBldmVudDogZXZlbnQsIHNvdXJjZTogc291cmNlIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBpZiB0aGUgZm9ybWF0dGVkIHZhbHVlIGlzIG5vdCBzeW5jZWQgdG8gcGFyZW50LCBvciBpZiB0aGUgZm9ybWF0dGVkIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIGxhc3Qgc3luY2VkIHZhbHVlIHN5bmMgaXRcbiAgICAgKiBpZiB0aGUgZm9ybWF0dGluZyBwcm9wcyBpcyByZW1vdmVkLCBpbiB3aGljaCBjYXNlIGxhc3QgZm9ybWF0dGVkIHZhbHVlIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIG51bWVyaWMgc3RyaW5nIHZhbHVlXG4gICAgICogaW4gc3VjaCBjYXNlIHdlIG5lZWQgdG8gaW5mb3JtIHRoZSBwYXJlbnQuXG4gICAgICovXG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlZiA9IGxhc3RVcGRhdGVkVmFsdWUuY3VycmVudDtcbiAgICAgICAgdmFyIGxhc3RGb3JtYXR0ZWRWYWx1ZSA9IHJlZi5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgdmFyIGxhc3ROdW1Bc1N0cmluZyA9IHJlZi5udW1Bc1N0cmluZztcbiAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICE9PSBsYXN0Rm9ybWF0dGVkVmFsdWUgfHwgbnVtQXNTdHJpbmcgIT09IGxhc3ROdW1Bc1N0cmluZykge1xuICAgICAgICAgICAgX29uVmFsdWVDaGFuZ2UoZ2V0VmFsdWVPYmplY3QoZm9ybWF0dGVkVmFsdWUsIG51bUFzU3RyaW5nKSwge1xuICAgICAgICAgICAgICAgIGV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc291cmNlOiBTb3VyY2VUeXBlLnByb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbZm9ybWF0dGVkVmFsdWUsIG51bUFzU3RyaW5nXSk7XG4gICAgLy8gYWxzbyBpZiBmb3JtYXR0ZWQgdmFsdWUgaXMgY2hhbmdlZCBmcm9tIHRoZSBwcm9wcywgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNhcmV0IHBvc2l0aW9uXG4gICAgLy8ga2VlcCB0aGUgbGFzdCBjYXJldCBwb3NpdGlvbiBpZiBlbGVtZW50IGlzIGZvY3VzZWRcbiAgICB2YXIgY3VycmVudENhcmV0UG9zaXRpb24gPSBmb2N1c2VkRWxtLmN1cnJlbnRcbiAgICAgICAgPyBnZUlucHV0Q2FyZXRQb3NpdGlvbihmb2N1c2VkRWxtLmN1cnJlbnQpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIC8vIG5lZWRlZCB0byBwcmV2ZW50IHdhcm5pbmcgd2l0aCB1c2VMYXlvdXRFZmZlY3Qgb24gc2VydmVyXG4gICAgdmFyIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHVzZUxheW91dEVmZmVjdCA6IHVzZUVmZmVjdDtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gZm9jdXNlZEVsbS5jdXJyZW50O1xuICAgICAgICBpZiAoZm9ybWF0dGVkVmFsdWUgIT09IGxhc3RVcGRhdGVkVmFsdWUuY3VycmVudC5mb3JtYXR0ZWRWYWx1ZSAmJiBpbnB1dCkge1xuICAgICAgICAgICAgdmFyIGNhcmV0UG9zID0gZ2V0TmV3Q2FyZXRQb3NpdGlvbihsYXN0VXBkYXRlZFZhbHVlLmN1cnJlbnQuZm9ybWF0dGVkVmFsdWUsIGZvcm1hdHRlZFZhbHVlLCBjdXJyZW50Q2FyZXRQb3NpdGlvbik7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHNldCB0aGUgdmFsdWUgaW1wZXJhdGl2ZWx5LCBhcyB3ZSBzZXQgdGhlIGNhcmV0IHBvc2l0aW9uIGFzIHdlbGwgaW1wZXJhdGl2ZWx5LlxuICAgICAgICAgICAgICogVGhpcyBpcyB0byBrZWVwIHZhbHVlIGFuZCBjYXJldCBwb3NpdGlvbiBpbiBzeW5jXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlucHV0LnZhbHVlID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICBzZXRQYXRjaGVkQ2FyZXRQb3NpdGlvbihpbnB1dCwgY2FyZXRQb3MsIGZvcm1hdHRlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sIFtmb3JtYXR0ZWRWYWx1ZV0pO1xuICAgIHZhciBmb3JtYXRJbnB1dFZhbHVlID0gZnVuY3Rpb24gKGlucHV0VmFsdWUsIGV2ZW50LCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICB2YXIgY2hhbmdlUmFuZ2UgPSBjYXJldFBvc2l0aW9uQmVmb3JlQ2hhbmdlLmN1cnJlbnRcbiAgICAgICAgICAgID8gZmluZENoYW5nZWRSYW5nZUZyb21DYXJldFBvc2l0aW9ucyhjYXJldFBvc2l0aW9uQmVmb3JlQ2hhbmdlLmN1cnJlbnQsIGlucHV0LnNlbGVjdGlvbkVuZClcbiAgICAgICAgICAgIDogZmluZENoYW5nZVJhbmdlKGZvcm1hdHRlZFZhbHVlLCBpbnB1dFZhbHVlKTtcbiAgICAgICAgdmFyIGNoYW5nZU1ldGEgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNoYW5nZVJhbmdlKSwgeyBsYXN0VmFsdWU6IGZvcm1hdHRlZFZhbHVlIH0pO1xuICAgICAgICB2YXIgX251bUFzU3RyaW5nID0gcmVtb3ZlRm9ybWF0dGluZyhpbnB1dFZhbHVlLCBjaGFuZ2VNZXRhKTtcbiAgICAgICAgdmFyIF9mb3JtYXR0ZWRWYWx1ZSA9IF9mb3JtYXQoX251bUFzU3RyaW5nKTtcbiAgICAgICAgLy8gZm9ybWF0dGluZyBjYW4gcmVtb3ZlIHNvbWUgb2YgdGhlIG51bWJlciBjaGFycywgc28gd2UgbmVlZCB0byBmaW5lIG51bWJlciBzdHJpbmcgYWdhaW5cbiAgICAgICAgX251bUFzU3RyaW5nID0gcmVtb3ZlRm9ybWF0dGluZyhfZm9ybWF0dGVkVmFsdWUsIHVuZGVmaW5lZCk7XG4gICAgICAgIGlmIChpc0FsbG93ZWQgJiYgIWlzQWxsb3dlZChnZXRWYWx1ZU9iamVjdChfZm9ybWF0dGVkVmFsdWUsIF9udW1Bc1N0cmluZykpKSB7XG4gICAgICAgICAgICAvL3Jlc2V0IHRoZSBjYXJldCBwb3NpdGlvblxuICAgICAgICAgICAgdmFyIGlucHV0JDEgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICB2YXIgY3VycmVudENhcmV0UG9zaXRpb24gPSBnZUlucHV0Q2FyZXRQb3NpdGlvbihpbnB1dCQxKTtcbiAgICAgICAgICAgIHZhciBjYXJldFBvcyA9IGdldE5ld0NhcmV0UG9zaXRpb24oaW5wdXRWYWx1ZSwgZm9ybWF0dGVkVmFsdWUsIGN1cnJlbnRDYXJldFBvc2l0aW9uKTtcbiAgICAgICAgICAgIGlucHV0JDEudmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgIHNldFBhdGNoZWRDYXJldFBvc2l0aW9uKGlucHV0JDEsIGNhcmV0UG9zLCBmb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlVmFsdWVBbmRDYXJldFBvc2l0aW9uKHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiBfZm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICBudW1Bc1N0cmluZzogX251bUFzU3RyaW5nLFxuICAgICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgICAgaW5wdXQ6IGV2ZW50LnRhcmdldCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgdmFyIHNldENhcmV0UG9zaXRpb25JbmZvQmVmb3JlQ2hhbmdlID0gZnVuY3Rpb24gKGVsLCBlbmRPZmZzZXQpIHtcbiAgICAgICAgaWYgKCBlbmRPZmZzZXQgPT09IHZvaWQgMCApIGVuZE9mZnNldCA9IDA7XG5cbiAgICAgICAgdmFyIHNlbGVjdGlvblN0YXJ0ID0gZWwuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSBlbC5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIGNhcmV0UG9zaXRpb25CZWZvcmVDaGFuZ2UuY3VycmVudCA9IHsgc2VsZWN0aW9uU3RhcnQ6IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQ6IHNlbGVjdGlvbkVuZCArIGVuZE9mZnNldCB9O1xuICAgIH07XG4gICAgdmFyIF9vbkNoYW5nZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBlbCA9IGUudGFyZ2V0O1xuICAgICAgICB2YXIgaW5wdXRWYWx1ZSA9IGVsLnZhbHVlO1xuICAgICAgICB2YXIgY2hhbmdlZCA9IGZvcm1hdElucHV0VmFsdWUoaW5wdXRWYWx1ZSwgZSwgU291cmNlVHlwZS5ldmVudCk7XG4gICAgICAgIGlmIChjaGFuZ2VkKVxuICAgICAgICAgICAgeyBvbkNoYW5nZShlKTsgfVxuICAgICAgICAvLyByZXNldCB0aGUgcG9zaXRpb24sIGFzIHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBjYXJldCBwb3NpdGlvblxuICAgICAgICBjYXJldFBvc2l0aW9uQmVmb3JlQ2hhbmdlLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICB2YXIgX29uS2V5RG93biA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBlbCA9IGUudGFyZ2V0O1xuICAgICAgICB2YXIga2V5ID0gZS5rZXk7XG4gICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IGVsLnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gZWwuc2VsZWN0aW9uRW5kO1xuICAgICAgICB2YXIgdmFsdWUgPSBlbC52YWx1ZTsgaWYgKCB2YWx1ZSA9PT0gdm9pZCAwICkgdmFsdWUgPSAnJztcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2FyZXRQb3NpdGlvbjtcbiAgICAgICAgLy9IYW5kbGUgYmFja3NwYWNlIGFuZCBkZWxldGUgYWdhaW5zdCBub24gbnVtZXJpY2FsL2RlY2ltYWwgY2hhcmFjdGVycyBvciBhcnJvdyBrZXlzXG4gICAgICAgIGlmIChrZXkgPT09ICdBcnJvd0xlZnQnIHx8IGtleSA9PT0gJ0JhY2tzcGFjZScpIHtcbiAgICAgICAgICAgIGV4cGVjdGVkQ2FyZXRQb3NpdGlvbiA9IE1hdGgubWF4KHNlbGVjdGlvblN0YXJ0IC0gMSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICAgIGV4cGVjdGVkQ2FyZXRQb3NpdGlvbiA9IE1hdGgubWluKHNlbGVjdGlvblN0YXJ0ICsgMSwgdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdEZWxldGUnKSB7XG4gICAgICAgICAgICBleHBlY3RlZENhcmV0UG9zaXRpb24gPSBzZWxlY3Rpb25TdGFydDtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBrZXkgaXMgZGVsZXRlIGFuZCB0ZXh0IGlzIG5vdCBzZWxlY3RlZCBrZWVwIHRoZSBlbmQgb2Zmc2V0IHRvIDEsIGFzIGl0IGRlbGV0ZXMgb25lIGNoYXJhY3RlclxuICAgICAgICAvLyB0aGlzIGlzIHJlcXVpcmVkIGFzIHNlbGVjdGlvbiBpcyBub3QgY2hhbmdlZCBvbiBkZWxldGUgY2FzZSwgd2hpY2ggY2hhbmdlcyB0aGUgY2hhbmdlIHJhbmdlIGNhbGN1bGF0aW9uXG4gICAgICAgIHZhciBlbmRPZmZzZXQgPSAwO1xuICAgICAgICBpZiAoa2V5ID09PSAnRGVsZXRlJyAmJiBzZWxlY3Rpb25TdGFydCA9PT0gc2VsZWN0aW9uRW5kKSB7XG4gICAgICAgICAgICBlbmRPZmZzZXQgPSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc0Fycm93S2V5ID0ga2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBrZXkgPT09ICdBcnJvd1JpZ2h0JztcbiAgICAgICAgLy9pZiBleHBlY3RlZENhcmV0UG9zaXRpb24gaXMgbm90IHNldCBpdCBtZWFucyB3ZSBkb24ndCB3YW50IHRvIEhhbmRsZSBrZXlEb3duXG4gICAgICAgIC8vIGFsc28gaWYgbXVsdGlwbGUgY2hhcmFjdGVycyBhcmUgc2VsZWN0ZWQgZG9uJ3QgaGFuZGxlXG4gICAgICAgIGlmIChleHBlY3RlZENhcmV0UG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCAoc2VsZWN0aW9uU3RhcnQgIT09IHNlbGVjdGlvbkVuZCAmJiAhaXNBcnJvd0tleSkpIHtcbiAgICAgICAgICAgIG9uS2V5RG93bihlKTtcbiAgICAgICAgICAgIC8vIGtlZXAgaW5mb3JtYXRpb24gb2Ygd2hhdCB3YXMgdGhlIGNhcmV0IHBvc2l0aW9uIGJlZm9yZSBrZXlEb3duXG4gICAgICAgICAgICAvLyBzZXQgaXQgYWZ0ZXIgb25LZXlEb3duLCBpbiBjYXNlIHBhcmVudCB1cGRhdGVzIHRoZSBwb3NpdGlvbiBtYW51YWxseVxuICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbkluZm9CZWZvcmVDaGFuZ2UoZWwsIGVuZE9mZnNldCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld0NhcmV0UG9zaXRpb24gPSBleHBlY3RlZENhcmV0UG9zaXRpb247XG4gICAgICAgIGlmIChpc0Fycm93S2V5KSB7XG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0ga2V5ID09PSAnQXJyb3dMZWZ0JyA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICAgICAgICBuZXdDYXJldFBvc2l0aW9uID0gY29ycmVjdENhcmV0UG9zaXRpb24odmFsdWUsIGV4cGVjdGVkQ2FyZXRQb3NpdGlvbiwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIC8vIGFycm93IGxlZnQgb3IgcmlnaHQgb25seSBtb3ZlcyB0aGUgY2FyZXQsIHNvIG5vIG5lZWQgdG8gaGFuZGxlIHRoZSBldmVudCwgaWYgd2UgYXJlIGhhbmRsaW5nIGl0IG1hbnVhbGx5XG4gICAgICAgICAgICBpZiAobmV3Q2FyZXRQb3NpdGlvbiAhPT0gZXhwZWN0ZWRDYXJldFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ0RlbGV0ZScgJiYgIWlzVmFsaWRJbnB1dENoYXJhY3Rlcih2YWx1ZVtleHBlY3RlZENhcmV0UG9zaXRpb25dKSkge1xuICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBkZWxldGUgZ28gdG8gY2xvc2VzdCBjYXJldCBib3VuZGFyeSBvbiB0aGUgcmlnaHQgc2lkZVxuICAgICAgICAgICAgbmV3Q2FyZXRQb3NpdGlvbiA9IGNvcnJlY3RDYXJldFBvc2l0aW9uKHZhbHVlLCBleHBlY3RlZENhcmV0UG9zaXRpb24sICdyaWdodCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ0JhY2tzcGFjZScgJiYgIWlzVmFsaWRJbnB1dENoYXJhY3Rlcih2YWx1ZVtleHBlY3RlZENhcmV0UG9zaXRpb25dKSkge1xuICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBiYWNrc3BhY2UgZ28gdG8gY2xvc2VzdCBjYXJldCBib3VuZGFyeSBvbiB0aGUgbGVmdCBzaWRlXG4gICAgICAgICAgICBuZXdDYXJldFBvc2l0aW9uID0gY29ycmVjdENhcmV0UG9zaXRpb24odmFsdWUsIGV4cGVjdGVkQ2FyZXRQb3NpdGlvbiwgJ2xlZnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3Q2FyZXRQb3NpdGlvbiAhPT0gZXhwZWN0ZWRDYXJldFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBzZXRQYXRjaGVkQ2FyZXRQb3NpdGlvbihlbCwgbmV3Q2FyZXRQb3NpdGlvbiwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bihlKTtcbiAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbkluZm9CZWZvcmVDaGFuZ2UoZWwsIGVuZE9mZnNldCk7XG4gICAgfTtcbiAgICAvKiogcmVxdWlyZWQgdG8gaGFuZGxlIHRoZSBjYXJldCBwb3NpdGlvbiB3aGVuIGNsaWNrIGFueXdoZXJlIHdpdGhpbiB0aGUgaW5wdXQgKiovXG4gICAgdmFyIF9vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgZWwgPSBlLnRhcmdldDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE5PVEU6IHdlIGhhdmUgdG8gZ2l2ZSBkZWZhdWx0IHZhbHVlIGZvciB2YWx1ZSBhcyBpbiBjYXNlIHdoZW4gY3VzdG9tIGlucHV0IGlzIHByb3ZpZGVkXG4gICAgICAgICAqIHZhbHVlIGNhbiBjb21lIGFzIHVuZGVmaW5lZCB3aGVuIG5vdGhpbmcgaXMgcHJvdmlkZWQgb24gdmFsdWUgcHJvcC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBjb3JyZWN0Q2FyZXRQb3NpdGlvbklmUmVxdWlyZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBlbC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSBlbC5zZWxlY3Rpb25FbmQ7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBlbC52YWx1ZTsgaWYgKCB2YWx1ZSA9PT0gdm9pZCAwICkgdmFsdWUgPSAnJztcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCA9PT0gc2VsZWN0aW9uRW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNhcmV0UG9zaXRpb24gPSBjb3JyZWN0Q2FyZXRQb3NpdGlvbih2YWx1ZSwgc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgICAgICAgICAgIGlmIChjYXJldFBvc2l0aW9uICE9PSBzZWxlY3Rpb25TdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRQYXRjaGVkQ2FyZXRQb3NpdGlvbihlbCwgY2FyZXRQb3NpdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29ycmVjdENhcmV0UG9zaXRpb25JZlJlcXVpcmVkKCk7XG4gICAgICAgIC8vIHRyeSB0byBjb3JyZWN0IGFmdGVyIHNlbGVjdGlvbiBoYXMgdXBkYXRlZCBieSBicm93c2VyXG4gICAgICAgIC8vIHRoaXMgY2FzZSBpcyByZXF1aXJlZCB3aGVuIHVzZXIgY2xpY2tzIG9uIHNvbWUgcG9zaXRpb24gd2hpbGUgYSB0ZXh0IGlzIHNlbGVjdGVkIG9uIGlucHV0XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb3JyZWN0Q2FyZXRQb3NpdGlvbklmUmVxdWlyZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9uTW91c2VVcChlKTtcbiAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbkluZm9CZWZvcmVDaGFuZ2UoZWwpO1xuICAgIH07XG4gICAgdmFyIF9vbkZvY3VzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgLy8gV29ya2Fyb3VuZCBDaHJvbWUgYW5kIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Nzc5MzI4XG4gICAgICAgIC8vIChvbkZvY3VzIGV2ZW50IHRhcmdldCBzZWxlY3Rpb25TdGFydCBpcyBhbHdheXMgMCBiZWZvcmUgc2V0VGltZW91dClcbiAgICAgICAgaWYgKGUucGVyc2lzdClcbiAgICAgICAgICAgIHsgZS5wZXJzaXN0KCk7IH1cbiAgICAgICAgdmFyIGVsID0gZS50YXJnZXQ7XG4gICAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gZS5jdXJyZW50VGFyZ2V0O1xuICAgICAgICBmb2N1c2VkRWxtLmN1cnJlbnQgPSBlbDtcbiAgICAgICAgdGltZW91dC5jdXJyZW50LmZvY3VzVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvblN0YXJ0ID0gZWwuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gZWwuc2VsZWN0aW9uRW5kO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gZWwudmFsdWU7IGlmICggdmFsdWUgPT09IHZvaWQgMCApIHZhbHVlID0gJyc7XG4gICAgICAgICAgICB2YXIgY2FyZXRQb3NpdGlvbiA9IGNvcnJlY3RDYXJldFBvc2l0aW9uKHZhbHVlLCBzZWxlY3Rpb25TdGFydCk7XG4gICAgICAgICAgICAvL3NldFBhdGNoZWRDYXJldFBvc2l0aW9uIG9ubHkgd2hlbiBldmVyeXRoaW5nIGlzIG5vdCBzZWxlY3RlZCBvbiBmb2N1cyAod2hpbGUgdGFiYmluZyBpbnRvIHRoZSBmaWVsZClcbiAgICAgICAgICAgIGlmIChjYXJldFBvc2l0aW9uICE9PSBzZWxlY3Rpb25TdGFydCAmJlxuICAgICAgICAgICAgICAgICEoc2VsZWN0aW9uU3RhcnQgPT09IDAgJiYgc2VsZWN0aW9uRW5kID09PSB2YWx1ZS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgc2V0UGF0Y2hlZENhcmV0UG9zaXRpb24oZWwsIGNhcmV0UG9zaXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uRm9jdXMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBlKSwgeyBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0IH0pKTtcbiAgICAgICAgfSwgMCk7XG4gICAgfTtcbiAgICB2YXIgX29uQmx1ciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGZvY3VzZWRFbG0uY3VycmVudCA9IG51bGw7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0LmN1cnJlbnQuZm9jdXNUaW1lb3V0KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQuY3VycmVudC5zZXRDYXJldFRpbWVvdXQpO1xuICAgICAgICBvbkJsdXIoZSk7XG4gICAgfTtcbiAgICAvLyBhZGQgaW5wdXQgbW9kZSBvbiBlbGVtZW50IGJhc2VkIG9uIGZvcm1hdCBwcm9wIGFuZCBkZXZpY2Ugb25jZSB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWRcbiAgICB2YXIgaW5wdXRNb2RlID0gbW91bnRlZCAmJiBhZGRJbnB1dE1vZGUoKSA/ICdudW1lcmljJyA6IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5wdXRQcm9wcyA9IE9iamVjdC5hc3NpZ24oeyBpbnB1dE1vZGU6IGlucHV0TW9kZSB9LCBvdGhlclByb3BzLCB7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHZhbHVlOiBmb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgb25DaGFuZ2U6IF9vbkNoYW5nZSxcbiAgICAgICAgb25LZXlEb3duOiBfb25LZXlEb3duLFxuICAgICAgICBvbk1vdXNlVXA6IF9vbk1vdXNlVXAsXG4gICAgICAgIG9uRm9jdXM6IF9vbkZvY3VzLFxuICAgICAgICBvbkJsdXI6IF9vbkJsdXIsXG4gICAgfSk7XG4gICAgaWYgKGRpc3BsYXlUeXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclRleHQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgcmVuZGVyVGV4dChmb3JtYXR0ZWRWYWx1ZSwgb3RoZXJQcm9wcykgfHwgbnVsbCkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIE9iamVjdC5hc3NpZ24oe30sIG90aGVyUHJvcHMsIHsgcmVmOiBnZXRJbnB1dFJlZiB9KSwgZm9ybWF0dGVkVmFsdWUpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3VzdG9tSW5wdXQpIHtcbiAgICAgICAgdmFyIEN1c3RvbUlucHV0ID0gY3VzdG9tSW5wdXQ7XG4gICAgICAgIC8qIEB0cy1pZ25vcmUgKi9cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VzdG9tSW5wdXQsIE9iamVjdC5hc3NpZ24oe30sIGlucHV0UHJvcHMsIHsgcmVmOiBnZXRJbnB1dFJlZiB9KSk7XG4gICAgfVxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgT2JqZWN0LmFzc2lnbih7fSwgaW5wdXRQcm9wcywgeyByZWY6IGdldElucHV0UmVmIH0pKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0KG51bVN0ciwgcHJvcHMpIHtcbiAgICB2YXIgZGVjaW1hbFNjYWxlID0gcHJvcHMuZGVjaW1hbFNjYWxlO1xuICAgIHZhciBmaXhlZERlY2ltYWxTY2FsZSA9IHByb3BzLmZpeGVkRGVjaW1hbFNjYWxlO1xuICAgIHZhciBwcmVmaXggPSBwcm9wcy5wcmVmaXg7IGlmICggcHJlZml4ID09PSB2b2lkIDAgKSBwcmVmaXggPSAnJztcbiAgICB2YXIgc3VmZml4ID0gcHJvcHMuc3VmZml4OyBpZiAoIHN1ZmZpeCA9PT0gdm9pZCAwICkgc3VmZml4ID0gJyc7XG4gICAgdmFyIGFsbG93TmVnYXRpdmUgPSBwcm9wcy5hbGxvd05lZ2F0aXZlO1xuICAgIHZhciB0aG91c2FuZHNHcm91cFN0eWxlID0gcHJvcHMudGhvdXNhbmRzR3JvdXBTdHlsZTsgaWYgKCB0aG91c2FuZHNHcm91cFN0eWxlID09PSB2b2lkIDAgKSB0aG91c2FuZHNHcm91cFN0eWxlID0gJ3Rob3VzYW5kJztcbiAgICAvLyBkb24ndCBhcHBseSBmb3JtYXR0aW5nIG9uIGVtcHR5IHN0cmluZyBvciAnLSdcbiAgICBpZiAobnVtU3RyID09PSAnJyB8fCBudW1TdHIgPT09ICctJykge1xuICAgICAgICByZXR1cm4gbnVtU3RyO1xuICAgIH1cbiAgICB2YXIgcmVmID0gZ2V0U2VwYXJhdG9ycyhwcm9wcyk7XG4gICAgdmFyIHRob3VzYW5kU2VwYXJhdG9yID0gcmVmLnRob3VzYW5kU2VwYXJhdG9yO1xuICAgIHZhciBkZWNpbWFsU2VwYXJhdG9yID0gcmVmLmRlY2ltYWxTZXBhcmF0b3I7XG4gICAgLyoqXG4gICAgICogS2VlcCB0aGUgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgKiB3aGVuIGRlY2ltYWxTY2FsZSBpcyBub3QgZGVmaW5lZCBvciBub24gemVybyBhbmQgdGhlIG51bVN0ciBoYXMgZGVjaW1hbCBpbiBpdFxuICAgICAqIE9yIGlmIGRlY2ltYWxTY2FsZSBpcyA+IDAgYW5kIGZpeGVEZWNpbWFsU2NhbGUgaXMgdHJ1ZSAoZXZlbiBpZiBudW1TdHIgaGFzIG5vIGRlY2ltYWwpXG4gICAgICovXG4gICAgdmFyIGhhc0RlY2ltYWxTZXBhcmF0b3IgPSAoZGVjaW1hbFNjYWxlICE9PSAwICYmIG51bVN0ci5pbmRleE9mKCcuJykgIT09IC0xKSB8fCAoZGVjaW1hbFNjYWxlICYmIGZpeGVkRGVjaW1hbFNjYWxlKTtcbiAgICB2YXIgcmVmJDEgPSBzcGxpdERlY2ltYWwobnVtU3RyLCBhbGxvd05lZ2F0aXZlKTtcbiAgICB2YXIgYmVmb3JlRGVjaW1hbCA9IHJlZiQxLmJlZm9yZURlY2ltYWw7XG4gICAgdmFyIGFmdGVyRGVjaW1hbCA9IHJlZiQxLmFmdGVyRGVjaW1hbDtcbiAgICB2YXIgYWRkTmVnYXRpb24gPSByZWYkMS5hZGROZWdhdGlvbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItY29uc3RcbiAgICAvL2FwcGx5IGRlY2ltYWwgcHJlY2lzaW9uIGlmIGl0cyBkZWZpbmVkXG4gICAgaWYgKGRlY2ltYWxTY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFmdGVyRGVjaW1hbCA9IGxpbWl0VG9TY2FsZShhZnRlckRlY2ltYWwsIGRlY2ltYWxTY2FsZSwgISFmaXhlZERlY2ltYWxTY2FsZSk7XG4gICAgfVxuICAgIGlmICh0aG91c2FuZFNlcGFyYXRvcikge1xuICAgICAgICBiZWZvcmVEZWNpbWFsID0gYXBwbHlUaG91c2FuZFNlcGFyYXRvcihiZWZvcmVEZWNpbWFsLCB0aG91c2FuZFNlcGFyYXRvciwgdGhvdXNhbmRzR3JvdXBTdHlsZSk7XG4gICAgfVxuICAgIC8vYWRkIHByZWZpeCBhbmQgc3VmZml4IHdoZW4gdGhlcmUgaXMgYSBudW1iZXIgcHJlc2VudFxuICAgIGlmIChwcmVmaXgpXG4gICAgICAgIHsgYmVmb3JlRGVjaW1hbCA9IHByZWZpeCArIGJlZm9yZURlY2ltYWw7IH1cbiAgICBpZiAoc3VmZml4KVxuICAgICAgICB7IGFmdGVyRGVjaW1hbCA9IGFmdGVyRGVjaW1hbCArIHN1ZmZpeDsgfVxuICAgIC8vcmVzdG9yZSBuZWdhdGlvbiBzaWduXG4gICAgaWYgKGFkZE5lZ2F0aW9uKVxuICAgICAgICB7IGJlZm9yZURlY2ltYWwgPSAnLScgKyBiZWZvcmVEZWNpbWFsOyB9XG4gICAgbnVtU3RyID0gYmVmb3JlRGVjaW1hbCArICgoaGFzRGVjaW1hbFNlcGFyYXRvciAmJiBkZWNpbWFsU2VwYXJhdG9yKSB8fCAnJykgKyBhZnRlckRlY2ltYWw7XG4gICAgcmV0dXJuIG51bVN0cjtcbn1cbmZ1bmN0aW9uIGdldFNlcGFyYXRvcnMocHJvcHMpIHtcbiAgICB2YXIgZGVjaW1hbFNlcGFyYXRvciA9IHByb3BzLmRlY2ltYWxTZXBhcmF0b3I7IGlmICggZGVjaW1hbFNlcGFyYXRvciA9PT0gdm9pZCAwICkgZGVjaW1hbFNlcGFyYXRvciA9ICcuJztcbiAgICB2YXIgdGhvdXNhbmRTZXBhcmF0b3IgPSBwcm9wcy50aG91c2FuZFNlcGFyYXRvcjtcbiAgICB2YXIgYWxsb3dlZERlY2ltYWxTZXBhcmF0b3JzID0gcHJvcHMuYWxsb3dlZERlY2ltYWxTZXBhcmF0b3JzO1xuICAgIGlmICh0aG91c2FuZFNlcGFyYXRvciA9PT0gdHJ1ZSkge1xuICAgICAgICB0aG91c2FuZFNlcGFyYXRvciA9ICcsJztcbiAgICB9XG4gICAgaWYgKCFhbGxvd2VkRGVjaW1hbFNlcGFyYXRvcnMpIHtcbiAgICAgICAgYWxsb3dlZERlY2ltYWxTZXBhcmF0b3JzID0gW2RlY2ltYWxTZXBhcmF0b3IsICcuJ107XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6IGRlY2ltYWxTZXBhcmF0b3IsXG4gICAgICAgIHRob3VzYW5kU2VwYXJhdG9yOiB0aG91c2FuZFNlcGFyYXRvcixcbiAgICAgICAgYWxsb3dlZERlY2ltYWxTZXBhcmF0b3JzOiBhbGxvd2VkRGVjaW1hbFNlcGFyYXRvcnMsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZU5lZ2F0aW9uKHZhbHVlLCBhbGxvd05lZ2F0aXZlKSB7XG4gICAgaWYgKCB2YWx1ZSA9PT0gdm9pZCAwICkgdmFsdWUgPSAnJztcblxuICAgIHZhciBuZWdhdGlvblJlZ2V4ID0gbmV3IFJlZ0V4cCgnKC0pJyk7XG4gICAgdmFyIGRvdWJsZU5lZ2F0aW9uUmVnZXggPSBuZXcgUmVnRXhwKCcoLSkoLikqKC0pJyk7XG4gICAgLy8gQ2hlY2sgbnVtYmVyIGhhcyAnLScgdmFsdWVcbiAgICB2YXIgaGFzTmVnYXRpb24gPSBuZWdhdGlvblJlZ2V4LnRlc3QodmFsdWUpO1xuICAgIC8vIENoZWNrIG51bWJlciBoYXMgMiBvciBtb3JlICctJyB2YWx1ZXNcbiAgICB2YXIgcmVtb3ZlTmVnYXRpb24gPSBkb3VibGVOZWdhdGlvblJlZ2V4LnRlc3QodmFsdWUpO1xuICAgIC8vcmVtb3ZlIG5lZ2F0aW9uXG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8tL2csICcnKTtcbiAgICBpZiAoaGFzTmVnYXRpb24gJiYgIXJlbW92ZU5lZ2F0aW9uICYmIGFsbG93TmVnYXRpdmUpIHtcbiAgICAgICAgdmFsdWUgPSAnLScgKyB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0TnVtYmVyUmVnZXgoZGVjaW1hbFNlcGFyYXRvciwgZ2xvYmFsKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoKFwiKF4tKXxbMC05XXxcIiArIChlc2NhcGVSZWdFeHAoZGVjaW1hbFNlcGFyYXRvcikpKSwgZ2xvYmFsID8gJ2cnIDogdW5kZWZpbmVkKTtcbn1cbmZ1bmN0aW9uIGlzTnVtZXJpY1N0cmluZyh2YWwsIHByZWZpeCwgc3VmZml4KSB7XG4gICAgLy8gZm9yIGVtcHR5IHZhbHVlIHdlIGNhbiBhbHdheXMgdHJlYXQgaXQgYXMgbnVtZXJpYyBzdHJpbmdcbiAgICBpZiAodmFsID09PSAnJylcbiAgICAgICAgeyByZXR1cm4gdHJ1ZTsgfVxuICAgIHJldHVybiAoIShwcmVmaXggPT09IG51bGwgfHwgcHJlZml4ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcmVmaXgubWF0Y2goL1xcZC8pKSAmJiAhKHN1ZmZpeCA9PT0gbnVsbCB8fCBzdWZmaXggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN1ZmZpeC5tYXRjaCgvXFxkLykpICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmICFpc05hTihOdW1iZXIodmFsKSkpO1xufVxuZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZyh2YWx1ZSwgY2hhbmdlTWV0YSwgcHJvcHMpIHtcbiAgICB2YXIgYXNzaWduO1xuXG4gICAgaWYgKCBjaGFuZ2VNZXRhID09PSB2b2lkIDAgKSBjaGFuZ2VNZXRhID0gZ2V0RGVmYXVsdENoYW5nZU1ldGEodmFsdWUpO1xuICAgIHZhciBhbGxvd05lZ2F0aXZlID0gcHJvcHMuYWxsb3dOZWdhdGl2ZTtcbiAgICB2YXIgcHJlZml4ID0gcHJvcHMucHJlZml4OyBpZiAoIHByZWZpeCA9PT0gdm9pZCAwICkgcHJlZml4ID0gJyc7XG4gICAgdmFyIHN1ZmZpeCA9IHByb3BzLnN1ZmZpeDsgaWYgKCBzdWZmaXggPT09IHZvaWQgMCApIHN1ZmZpeCA9ICcnO1xuICAgIHZhciBkZWNpbWFsU2NhbGUgPSBwcm9wcy5kZWNpbWFsU2NhbGU7XG4gICAgdmFyIGZyb20gPSBjaGFuZ2VNZXRhLmZyb207XG4gICAgdmFyIHRvID0gY2hhbmdlTWV0YS50bztcbiAgICB2YXIgc3RhcnQgPSB0by5zdGFydDtcbiAgICB2YXIgZW5kID0gdG8uZW5kO1xuICAgIHZhciByZWYgPSBnZXRTZXBhcmF0b3JzKHByb3BzKTtcbiAgICB2YXIgYWxsb3dlZERlY2ltYWxTZXBhcmF0b3JzID0gcmVmLmFsbG93ZWREZWNpbWFsU2VwYXJhdG9ycztcbiAgICB2YXIgZGVjaW1hbFNlcGFyYXRvciA9IHJlZi5kZWNpbWFsU2VwYXJhdG9yO1xuICAgIHZhciBpc0JlZm9yZURlY2ltYWxTZXBhcmF0b3IgPSB2YWx1ZVtlbmRdID09PSBkZWNpbWFsU2VwYXJhdG9yO1xuICAgIC8qKlxuICAgICAqIElmIG9ubHkgYSBudW1iZXIgaXMgYWRkZWQgb24gZW1wdHkgaW5wdXQgd2hpY2ggbWF0Y2hlcyB3aXRoIHRoZSBwcmVmaXggb3Igc3VmZml4LFxuICAgICAqIHRoZW4gZG9uJ3QgcmVtb3ZlIGl0LCBqdXN0IHJldHVybiB0aGUgc2FtZVxuICAgICAqL1xuICAgIGlmIChjaGFySXNOdW1iZXIodmFsdWUpICYmXG4gICAgICAgICh2YWx1ZSA9PT0gcHJlZml4IHx8IHZhbHVlID09PSBzdWZmaXgpICYmXG4gICAgICAgIGNoYW5nZU1ldGEubGFzdFZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIC8qKiBDaGVjayBmb3IgYW55IGFsbG93ZWQgZGVjaW1hbCBzZXBhcmF0b3IgaXMgYWRkZWQgaW4gdGhlIG51bWVyaWMgZm9ybWF0IGFuZCByZXBsYWNlIGl0IHdpdGggZGVjaW1hbCBzZXBhcmF0b3IgKi9cbiAgICBpZiAoZW5kIC0gc3RhcnQgPT09IDEgJiYgYWxsb3dlZERlY2ltYWxTZXBhcmF0b3JzLmluZGV4T2YodmFsdWVbc3RhcnRdKSAhPT0gLTEpIHtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGRlY2ltYWxTY2FsZSA9PT0gMCA/ICcnIDogZGVjaW1hbFNlcGFyYXRvcjtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnQpICsgc2VwYXJhdG9yICsgdmFsdWUuc3Vic3RyaW5nKHN0YXJ0ICsgMSwgdmFsdWUubGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIHN0cmlwTmVnYXRpb24gPSBmdW5jdGlvbiAodmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGlmIHByZWZpeCBzdGFydHMgd2l0aCAtIHdlIGRvbid0IGFsbG93IG5lZ2F0aXZlIG51bWJlciB0byBhdm9pZCBjb25mdXNpb25cbiAgICAgICAgICogaWYgc3VmZml4IHN0YXJ0cyB3aXRoIC0gYW5kIHRoZSB2YWx1ZSBsZW5ndGggaXMgc2FtZSBhcyBzdWZmaXggbGVuZ3RoLCB0aGVuIHRoZSAtIHNpZ24gaXMgZnJvbSB0aGUgc3VmZml4XG4gICAgICAgICAqIEluIG90aGVyIGNhc2VzLCBpZiB0aGUgdmFsdWUgc3RhcnRzIHdpdGggLSB0aGVuIGl0IGlzIGEgbmVnYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHZhciBoYXNOZWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICB2YXIgaGFzRG91YmxlTmVnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKHByZWZpeC5zdGFydHNXaXRoKCctJykpIHtcbiAgICAgICAgICAgIGhhc05lZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUuc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICAgICAgaGFzTmVnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIGhhc0RvdWJsZU5lZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdWZmaXguc3RhcnRzV2l0aCgnLScpICYmIHZhbHVlLmxlbmd0aCA9PT0gc3VmZml4Lmxlbmd0aCkge1xuICAgICAgICAgICAgaGFzTmVnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZVswXSA9PT0gJy0nKSB7XG4gICAgICAgICAgICBoYXNOZWdhdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJzVG9SZW1vdmUgPSBoYXNOZWdhdGlvbiA/IDEgOiAwO1xuICAgICAgICBpZiAoaGFzRG91YmxlTmVnYXRpb24pXG4gICAgICAgICAgICB7IGNoYXJzVG9SZW1vdmUgPSAyOyB9XG4gICAgICAgIC8vIHJlbW92ZSBuZWdhdGlvbi9kb3VibGUgbmVnYXRpb24gZnJvbSBzdGFydCB0byBzaW1wbGlmeSBwcmVmaXggbG9naWMgYXMgbmVnYXRpb24gY29tZXMgYmVmb3JlIHByZWZpeFxuICAgICAgICBpZiAoY2hhcnNUb1JlbW92ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoY2hhcnNUb1JlbW92ZSk7XG4gICAgICAgICAgICAvLyBhY2NvdW50IGZvciB0aGUgcmVtb3ZhbCBvZiB0aGUgbmVnYXRpb24gZm9yIHN0YXJ0IGFuZCBlbmQgaW5kZXhcbiAgICAgICAgICAgIHN0YXJ0IC09IGNoYXJzVG9SZW1vdmU7XG4gICAgICAgICAgICBlbmQgLT0gY2hhcnNUb1JlbW92ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIHN0YXJ0OiBzdGFydCwgZW5kOiBlbmQsIGhhc05lZ2F0aW9uOiBoYXNOZWdhdGlvbiB9O1xuICAgIH07XG4gICAgdmFyIHRvTWV0YWRhdGEgPSBzdHJpcE5lZ2F0aW9uKHZhbHVlLCBzdGFydCwgZW5kKTtcbiAgICB2YXIgaGFzTmVnYXRpb24gPSB0b01ldGFkYXRhLmhhc05lZ2F0aW9uO1xuICAgICgoYXNzaWduID0gdG9NZXRhZGF0YSwgdmFsdWUgPSBhc3NpZ24udmFsdWUsIHN0YXJ0ID0gYXNzaWduLnN0YXJ0LCBlbmQgPSBhc3NpZ24uZW5kKSk7XG4gICAgdmFyIHJlZiQxID0gc3RyaXBOZWdhdGlvbihjaGFuZ2VNZXRhLmxhc3RWYWx1ZSwgZnJvbS5zdGFydCwgZnJvbS5lbmQpO1xuICAgIHZhciBmcm9tU3RhcnQgPSByZWYkMS5zdGFydDtcbiAgICB2YXIgZnJvbUVuZCA9IHJlZiQxLmVuZDtcbiAgICB2YXIgbGFzdFZhbHVlID0gcmVmJDEudmFsdWU7XG4gICAgLy8gaWYgb25seSBwcmVmaXggYW5kIHN1ZmZpeCBwYXJ0IGlzIHVwZGF0ZWQgcmVzZXQgdGhlIHZhbHVlIHRvIGxhc3QgdmFsdWVcbiAgICAvLyBpZiB0aGUgY2hhbmdlZCByYW5nZSBpcyBmcm9tIHN1ZmZpeCBpbiB0aGUgdXBkYXRlZCB2YWx1ZSwgYW5kIHRoZSB0aGUgc3VmZml4IHN0YXJ0cyB3aXRoIHRoZSBzYW1lIGNoYXJhY3RlcnMsIGFsbG93IHRoZSBjaGFuZ2VcbiAgICB2YXIgdXBkYXRlZFN1ZmZpeFBhcnQgPSB2YWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCAmJlxuICAgICAgICBsYXN0VmFsdWUubGVuZ3RoICYmXG4gICAgICAgIChmcm9tU3RhcnQgPiBsYXN0VmFsdWUubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCB8fCBmcm9tRW5kIDwgcHJlZml4Lmxlbmd0aCkgJiZcbiAgICAgICAgISh1cGRhdGVkU3VmZml4UGFydCAmJiBzdWZmaXguc3RhcnRzV2l0aCh1cGRhdGVkU3VmZml4UGFydCkpKSB7XG4gICAgICAgIHZhbHVlID0gbGFzdFZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiByZW1vdmUgcHJlZml4XG4gICAgICogUmVtb3ZlIHdob2xlIHByZWZpeCBwYXJ0IGlmIGl0cyBwcmVzZW50IG9uIHRoZSB2YWx1ZVxuICAgICAqIElmIHRoZSBwcmVmaXggaXMgcGFydGlhbGx5IGRlbGV0ZWQgKGluIHdoaWNoIGNhc2UgY2hhbmdlIHN0YXJ0IGluZGV4IHdpbGwgYmUgbGVzcyB0aGUgcHJlZml4IGxlbmd0aClcbiAgICAgKiBSZW1vdmUgb25seSBwYXJ0aWFsIHBhcnQgb2YgcHJlZml4LlxuICAgICAqL1xuICAgIHZhciBzdGFydEluZGV4ID0gMDtcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChwcmVmaXgpKVxuICAgICAgICB7IHN0YXJ0SW5kZXggKz0gcHJlZml4Lmxlbmd0aDsgfVxuICAgIGVsc2UgaWYgKHN0YXJ0IDwgcHJlZml4Lmxlbmd0aClcbiAgICAgICAgeyBzdGFydEluZGV4ID0gc3RhcnQ7IH1cbiAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyhzdGFydEluZGV4KTtcbiAgICAvLyBhY2NvdW50IGZvciBkZWxldGVkIHByZWZpeCBmb3IgZW5kXG4gICAgZW5kIC09IHN0YXJ0SW5kZXg7XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHN1ZmZpeFxuICAgICAqIFJlbW92ZSB3aG9sZSBzdWZmaXggcGFydCBpZiBpdHMgcHJlc2VudCBvbiB0aGUgdmFsdWVcbiAgICAgKiBJZiB0aGUgc3VmZml4IGlzIHBhcnRpYWxseSBkZWxldGVkIChpbiB3aGljaCBjYXNlIGNoYW5nZSBlbmQgaW5kZXggd2lsbCBiZSBncmVhdGVyIHRoYW4gdGhlIHN1ZmZpeFN0YXJ0SW5kZXgpXG4gICAgICogcmVtb3ZlIHRoZSBwYXJ0aWFsIHBhcnQgb2Ygc3VmZml4XG4gICAgICovXG4gICAgdmFyIGVuZEluZGV4ID0gdmFsdWUubGVuZ3RoO1xuICAgIHZhciBzdWZmaXhTdGFydEluZGV4ID0gdmFsdWUubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aDtcbiAgICBpZiAodmFsdWUuZW5kc1dpdGgoc3VmZml4KSlcbiAgICAgICAgeyBlbmRJbmRleCA9IHN1ZmZpeFN0YXJ0SW5kZXg7IH1cbiAgICAvLyBpZiB0aGUgc3VmZml4IGlzIHJlbW92ZWQgZnJvbSB0aGUgZW5kXG4gICAgZWxzZSBpZiAoZW5kID4gc3VmZml4U3RhcnRJbmRleClcbiAgICAgICAgeyBlbmRJbmRleCA9IGVuZDsgfVxuICAgIC8vIGlmIHRoZSBzdWZmaXggaXMgcmVtb3ZlZCBmcm9tIHN0YXJ0XG4gICAgZWxzZSBpZiAoZW5kID4gdmFsdWUubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aClcbiAgICAgICAgeyBlbmRJbmRleCA9IGVuZDsgfVxuICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIGVuZEluZGV4KTtcbiAgICAvLyBhZGQgdGhlIG5lZ2F0aW9uIGJhY2sgYW5kIGhhbmRsZSBmb3IgZG91YmxlIG5lZ2F0aW9uXG4gICAgdmFsdWUgPSBoYW5kbGVOZWdhdGlvbihoYXNOZWdhdGlvbiA/IChcIi1cIiArIHZhbHVlKSA6IHZhbHVlLCBhbGxvd05lZ2F0aXZlKTtcbiAgICAvLyByZW1vdmUgbm9uIG51bWVyaWMgY2hhcmFjdGVyc1xuICAgIHZhbHVlID0gKHZhbHVlLm1hdGNoKGdldE51bWJlclJlZ2V4KGRlY2ltYWxTZXBhcmF0b3IsIHRydWUpKSB8fCBbXSkuam9pbignJyk7XG4gICAgLy8gcmVwbGFjZSB0aGUgZGVjaW1hbFNlcGFyYXRvciB3aXRoIC4sIGFuZCBvbmx5IGtlZXAgdGhlIGZpcnN0IHNlcGFyYXRvciwgaWdub3JlIGZvbGxvd2luZyBvbmVzXG4gICAgdmFyIGZpcnN0SW5kZXggPSB2YWx1ZS5pbmRleE9mKGRlY2ltYWxTZXBhcmF0b3IpO1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cChkZWNpbWFsU2VwYXJhdG9yKSwgJ2cnKSwgZnVuY3Rpb24gKG1hdGNoLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gaW5kZXggPT09IGZpcnN0SW5kZXggPyAnLicgOiAnJztcbiAgICB9KTtcbiAgICAvL2NoZWNrIGlmIGJlZm9yZURlY2ltYWwgZ290IGRlbGV0ZWQgYW5kIHRoZXJlIGlzIG5vdGhpbmcgYWZ0ZXIgZGVjaW1hbCxcbiAgICAvL2NsZWFyIGFsbCBudW1iZXJzIGluIHN1Y2ggY2FzZSB3aGlsZSBrZWVwaW5nIHRoZSAtIHNpZ25cbiAgICB2YXIgcmVmJDIgPSBzcGxpdERlY2ltYWwodmFsdWUsIGFsbG93TmVnYXRpdmUpO1xuICAgIHZhciBiZWZvcmVEZWNpbWFsID0gcmVmJDIuYmVmb3JlRGVjaW1hbDtcbiAgICB2YXIgYWZ0ZXJEZWNpbWFsID0gcmVmJDIuYWZ0ZXJEZWNpbWFsO1xuICAgIHZhciBhZGROZWdhdGlvbiA9IHJlZiQyLmFkZE5lZ2F0aW9uOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1jb25zdFxuICAgIC8vY2xlYXIgb25seSBpZiBzb21ldGhpbmcgZ290IGRlbGV0ZWQgYmVmb3JlIGRlY2ltYWwgKGN1cnNvciBpcyBiZWZvcmUgZGVjaW1hbClcbiAgICBpZiAodG8uZW5kIC0gdG8uc3RhcnQgPCBmcm9tLmVuZCAtIGZyb20uc3RhcnQgJiZcbiAgICAgICAgYmVmb3JlRGVjaW1hbCA9PT0gJycgJiZcbiAgICAgICAgaXNCZWZvcmVEZWNpbWFsU2VwYXJhdG9yICYmXG4gICAgICAgICFwYXJzZUZsb2F0KGFmdGVyRGVjaW1hbCkpIHtcbiAgICAgICAgdmFsdWUgPSBhZGROZWdhdGlvbiA/ICctJyA6ICcnO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRDYXJldEJvdW5kYXJ5KGZvcm1hdHRlZFZhbHVlLCBwcm9wcykge1xuICAgIHZhciBwcmVmaXggPSBwcm9wcy5wcmVmaXg7IGlmICggcHJlZml4ID09PSB2b2lkIDAgKSBwcmVmaXggPSAnJztcbiAgICB2YXIgc3VmZml4ID0gcHJvcHMuc3VmZml4OyBpZiAoIHN1ZmZpeCA9PT0gdm9pZCAwICkgc3VmZml4ID0gJyc7XG4gICAgdmFyIGJvdW5kYXJ5QXJ5ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZm9ybWF0dGVkVmFsdWUubGVuZ3RoICsgMSB9KS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfSk7XG4gICAgdmFyIGhhc05lZ2F0aW9uID0gZm9ybWF0dGVkVmFsdWVbMF0gPT09ICctJztcbiAgICAvLyBmaWxsIGZvciBwcmVmaXggYW5kIG5lZ2F0aW9uXG4gICAgYm91bmRhcnlBcnkuZmlsbChmYWxzZSwgMCwgcHJlZml4Lmxlbmd0aCArIChoYXNOZWdhdGlvbiA/IDEgOiAwKSk7XG4gICAgLy8gZmlsbCBmb3Igc3VmZml4XG4gICAgdmFyIHZhbExuID0gZm9ybWF0dGVkVmFsdWUubGVuZ3RoO1xuICAgIGJvdW5kYXJ5QXJ5LmZpbGwoZmFsc2UsIHZhbExuIC0gc3VmZml4Lmxlbmd0aCArIDEsIHZhbExuICsgMSk7XG4gICAgcmV0dXJuIGJvdW5kYXJ5QXJ5O1xufVxuZnVuY3Rpb24gdmFsaWRhdGVBbmRVcGRhdGVQcm9wcyhwcm9wcykge1xuICAgIHZhciByZWYgPSBnZXRTZXBhcmF0b3JzKHByb3BzKTtcbiAgICB2YXIgdGhvdXNhbmRTZXBhcmF0b3IgPSByZWYudGhvdXNhbmRTZXBhcmF0b3I7XG4gICAgdmFyIGRlY2ltYWxTZXBhcmF0b3IgPSByZWYuZGVjaW1hbFNlcGFyYXRvcjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgdmFyIHByZWZpeCA9IHByb3BzLnByZWZpeDsgaWYgKCBwcmVmaXggPT09IHZvaWQgMCApIHByZWZpeCA9ICcnO1xuICAgIHZhciBhbGxvd05lZ2F0aXZlID0gcHJvcHMuYWxsb3dOZWdhdGl2ZTsgaWYgKCBhbGxvd05lZ2F0aXZlID09PSB2b2lkIDAgKSBhbGxvd05lZ2F0aXZlID0gdHJ1ZTtcbiAgICBpZiAodGhvdXNhbmRTZXBhcmF0b3IgPT09IGRlY2ltYWxTZXBhcmF0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcIlxcbiAgICAgICAgRGVjaW1hbCBzZXBhcmF0b3IgY2FuJ3QgYmUgc2FtZSBhcyB0aG91c2FuZCBzZXBhcmF0b3IuXFxuICAgICAgICB0aG91c2FuZFNlcGFyYXRvcjogXCIgKyB0aG91c2FuZFNlcGFyYXRvciArIFwiICh0aG91c2FuZFNlcGFyYXRvciA9IHt0cnVlfSBpcyBzYW1lIGFzIHRob3VzYW5kU2VwYXJhdG9yID0gXFxcIixcXFwiKVxcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvcjogXCIgKyBkZWNpbWFsU2VwYXJhdG9yICsgXCIgKGRlZmF1bHQgdmFsdWUgZm9yIGRlY2ltYWxTZXBhcmF0b3IgaXMgLilcXG4gICAgIFwiKSk7XG4gICAgfVxuICAgIGlmIChwcmVmaXguc3RhcnRzV2l0aCgnLScpICYmIGFsbG93TmVnYXRpdmUpIHtcbiAgICAgICAgLy8gVE9ETzogdGhyb3cgZXJyb3IgaW4gbmV4dCBtYWpvciB2ZXJzaW9uXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiXFxuICAgICAgUHJlZml4IGNhbid0IHN0YXJ0IHdpdGggJy0nIHdoZW4gYWxsb3dOZWdhdGl2ZSBpcyB0cnVlLlxcbiAgICAgIHByZWZpeDogXCIgKyBwcmVmaXggKyBcIlxcbiAgICAgIGFsbG93TmVnYXRpdmU6IFwiICsgYWxsb3dOZWdhdGl2ZSArIFwiXFxuICAgIFwiKSk7XG4gICAgICAgIGFsbG93TmVnYXRpdmUgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMpLCB7IGFsbG93TmVnYXRpdmU6IGFsbG93TmVnYXRpdmUgfSk7XG59XG5mdW5jdGlvbiB1c2VOdW1lcmljRm9ybWF0KHByb3BzKSB7XG4gICAgLy8gdmFsaWRhdGUgcHJvcHNcbiAgICBwcm9wcyA9IHZhbGlkYXRlQW5kVXBkYXRlUHJvcHMocHJvcHMpO1xuICAgIHZhciBfZGVjaW1hbFNlcGFyYXRvciA9IHByb3BzLmRlY2ltYWxTZXBhcmF0b3I7XG4gICAgdmFyIF9hbGxvd2VkRGVjaW1hbFNlcGFyYXRvcnMgPSBwcm9wcy5hbGxvd2VkRGVjaW1hbFNlcGFyYXRvcnM7XG4gICAgdmFyIHRob3VzYW5kc0dyb3VwU3R5bGUgPSBwcm9wcy50aG91c2FuZHNHcm91cFN0eWxlO1xuICAgIHZhciBzdWZmaXggPSBwcm9wcy5zdWZmaXg7XG4gICAgdmFyIGFsbG93TmVnYXRpdmUgPSBwcm9wcy5hbGxvd05lZ2F0aXZlO1xuICAgIHZhciBhbGxvd0xlYWRpbmdaZXJvcyA9IHByb3BzLmFsbG93TGVhZGluZ1plcm9zO1xuICAgIHZhciBvbktleURvd24gPSBwcm9wcy5vbktleURvd247IGlmICggb25LZXlEb3duID09PSB2b2lkIDAgKSBvbktleURvd24gPSBub29wO1xuICAgIHZhciBvbkJsdXIgPSBwcm9wcy5vbkJsdXI7IGlmICggb25CbHVyID09PSB2b2lkIDAgKSBvbkJsdXIgPSBub29wO1xuICAgIHZhciB0aG91c2FuZFNlcGFyYXRvciA9IHByb3BzLnRob3VzYW5kU2VwYXJhdG9yO1xuICAgIHZhciBkZWNpbWFsU2NhbGUgPSBwcm9wcy5kZWNpbWFsU2NhbGU7XG4gICAgdmFyIGZpeGVkRGVjaW1hbFNjYWxlID0gcHJvcHMuZml4ZWREZWNpbWFsU2NhbGU7XG4gICAgdmFyIHByZWZpeCA9IHByb3BzLnByZWZpeDsgaWYgKCBwcmVmaXggPT09IHZvaWQgMCApIHByZWZpeCA9ICcnO1xuICAgIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG4gICAgdmFyIHZhbHVlSXNOdW1lcmljU3RyaW5nID0gcHJvcHMudmFsdWVJc051bWVyaWNTdHJpbmc7XG4gICAgdmFyIG9uVmFsdWVDaGFuZ2UgPSBwcm9wcy5vblZhbHVlQ2hhbmdlO1xuICAgIHZhciByZXN0UHJvcHMgPSBfX3Jlc3QocHJvcHMsIFtcImRlY2ltYWxTZXBhcmF0b3JcIiwgXCJhbGxvd2VkRGVjaW1hbFNlcGFyYXRvcnNcIiwgXCJ0aG91c2FuZHNHcm91cFN0eWxlXCIsIFwic3VmZml4XCIsIFwiYWxsb3dOZWdhdGl2ZVwiLCBcImFsbG93TGVhZGluZ1plcm9zXCIsIFwib25LZXlEb3duXCIsIFwib25CbHVyXCIsIFwidGhvdXNhbmRTZXBhcmF0b3JcIiwgXCJkZWNpbWFsU2NhbGVcIiwgXCJmaXhlZERlY2ltYWxTY2FsZVwiLCBcInByZWZpeFwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcInZhbHVlXCIsIFwidmFsdWVJc051bWVyaWNTdHJpbmdcIiwgXCJvblZhbHVlQ2hhbmdlXCJdKTtcbiAgICAvLyBnZXQgZGVyaXZlZCBkZWNpbWFsU2VwYXJhdG9yIGFuZCBhbGxvd2VkRGVjaW1hbFNlcGFyYXRvcnNcbiAgICB2YXIgcmVmID0gZ2V0U2VwYXJhdG9ycyhwcm9wcyk7XG4gICAgdmFyIGRlY2ltYWxTZXBhcmF0b3IgPSByZWYuZGVjaW1hbFNlcGFyYXRvcjtcbiAgICB2YXIgYWxsb3dlZERlY2ltYWxTZXBhcmF0b3JzID0gcmVmLmFsbG93ZWREZWNpbWFsU2VwYXJhdG9ycztcbiAgICB2YXIgX2Zvcm1hdCA9IGZ1bmN0aW9uIChudW1TdHIpIHsgcmV0dXJuIGZvcm1hdChudW1TdHIsIHByb3BzKTsgfTtcbiAgICB2YXIgX3JlbW92ZUZvcm1hdHRpbmcgPSBmdW5jdGlvbiAoaW5wdXRWYWx1ZSwgY2hhbmdlTWV0YSkgeyByZXR1cm4gcmVtb3ZlRm9ybWF0dGluZyhpbnB1dFZhbHVlLCBjaGFuZ2VNZXRhLCBwcm9wcyk7IH07XG4gICAgdmFyIF92YWx1ZSA9IGlzTmlsKHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xuICAgIC8vIHRyeSB0byBmaWd1cmUgb3V0IGlzVmFsdWVOdW1lcmljU3RyaW5nIGJhc2VkIG9uIGZvcm1hdCBwcm9wIGFuZCB2YWx1ZVxuICAgIHZhciBfdmFsdWVJc051bWVyaWNTdHJpbmcgPSB2YWx1ZUlzTnVtZXJpY1N0cmluZyAhPT0gbnVsbCAmJiB2YWx1ZUlzTnVtZXJpY1N0cmluZyAhPT0gdm9pZCAwID8gdmFsdWVJc051bWVyaWNTdHJpbmcgOiBpc051bWVyaWNTdHJpbmcoX3ZhbHVlLCBwcmVmaXgsIHN1ZmZpeCk7XG4gICAgaWYgKCFpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgX3ZhbHVlSXNOdW1lcmljU3RyaW5nID0gX3ZhbHVlSXNOdW1lcmljU3RyaW5nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpc05pbChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgIF92YWx1ZUlzTnVtZXJpY1N0cmluZyA9IF92YWx1ZUlzTnVtZXJpY1N0cmluZyB8fCB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnbnVtYmVyJztcbiAgICB9XG4gICAgdmFyIHJvdW5kSW5jb21pbmdWYWx1ZVRvUHJlY2lzaW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmIChpc05vdFZhbGlkVmFsdWUodmFsdWUpKVxuICAgICAgICAgICAgeyByZXR1cm4gdmFsdWU7IH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdG9OdW1lcmljU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogb25seSByb3VuZCBudW1lcmljIG9yIGZsb2F0IHN0cmluZyB2YWx1ZXMgY29taW5nIHRocm91Z2ggcHJvcHMsXG4gICAgICAgICAqIHdlIGRvbid0IG5lZWQgdG8gZG8gaXQgZm9yIG9uQ2hhbmdlIGV2ZW50cywgYXMgd2Ugd2FudCB0byBwcmV2ZW50IHR5cGluZyB0aGVyZVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKF92YWx1ZUlzTnVtZXJpY1N0cmluZyAmJiB0eXBlb2YgZGVjaW1hbFNjYWxlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kVG9QcmVjaXNpb24odmFsdWUsIGRlY2ltYWxTY2FsZSwgQm9vbGVhbihmaXhlZERlY2ltYWxTY2FsZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIHZhciByZWYkMSA9IHVzZUludGVybmFsVmFsdWVzKHJvdW5kSW5jb21pbmdWYWx1ZVRvUHJlY2lzaW9uKHZhbHVlKSwgcm91bmRJbmNvbWluZ1ZhbHVlVG9QcmVjaXNpb24oZGVmYXVsdFZhbHVlKSwgQm9vbGVhbihfdmFsdWVJc051bWVyaWNTdHJpbmcpLCBfZm9ybWF0LCBfcmVtb3ZlRm9ybWF0dGluZywgb25WYWx1ZUNoYW5nZSk7XG4gICAgdmFyIHJlZiQxXzAgPSByZWYkMVswXTtcbiAgICB2YXIgbnVtQXNTdHJpbmcgPSByZWYkMV8wLm51bUFzU3RyaW5nO1xuICAgIHZhciBmb3JtYXR0ZWRWYWx1ZSA9IHJlZiQxXzAuZm9ybWF0dGVkVmFsdWU7XG4gICAgdmFyIF9vblZhbHVlQ2hhbmdlID0gcmVmJDFbMV07XG4gICAgdmFyIF9vbktleURvd24gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgZWwgPSBlLnRhcmdldDtcbiAgICAgICAgdmFyIGtleSA9IGUua2V5O1xuICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBlbC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IGVsLnNlbGVjdGlvbkVuZDtcbiAgICAgICAgdmFyIHZhbHVlID0gZWwudmFsdWU7IGlmICggdmFsdWUgPT09IHZvaWQgMCApIHZhbHVlID0gJyc7XG4gICAgICAgIC8vIGlmIHVzZXIgdHJpZXMgdG8gZGVsZXRlIHBhcnRpYWwgcHJlZml4IHRoZW4gaWdub3JlIGl0XG4gICAgICAgIGlmICgoa2V5ID09PSAnQmFja3NwYWNlJyB8fCBrZXkgPT09ICdEZWxldGUnKSAmJiBzZWxlY3Rpb25FbmQgPCBwcmVmaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgbXVsdGlwbGUgY2hhcmFjdGVycyBhcmUgc2VsZWN0ZWQgYW5kIHVzZXIgaGl0cyBiYWNrc3BhY2UsIG5vIG5lZWQgdG8gaGFuZGxlIGFueXRoaW5nIG1hbnVhbGx5XG4gICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCAhPT0gc2VsZWN0aW9uRW5kKSB7XG4gICAgICAgICAgICBvbktleURvd24oZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdXNlciBoaXRzIGJhY2tzcGFjZSwgd2hpbGUgdGhlIGN1cnNvciBpcyBiZWZvcmUgcHJlZml4LCBhbmQgdGhlIGlucHV0IGhhcyBuZWdhdGlvbiwgcmVtb3ZlIHRoZSBuZWdhdGlvblxuICAgICAgICBpZiAoa2V5ID09PSAnQmFja3NwYWNlJyAmJlxuICAgICAgICAgICAgdmFsdWVbMF0gPT09ICctJyAmJlxuICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQgPT09IHByZWZpeC5sZW5ndGggKyAxICYmXG4gICAgICAgICAgICBhbGxvd05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAvLyBicmluZyB0aGUgY3Vyc29yIHRvIGFmdGVyIG5lZ2F0aW9uXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKGVsLCAxKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBhbGxvdyB1c2VyIHRvIGRlbGV0ZSBkZWNpbWFsIHNlcGFyYXRvciB3aGVuIGRlY2ltYWxTY2FsZSBhbmQgZml4ZWREZWNpbWFsU2NhbGUgaXMgc2V0XG4gICAgICAgIGlmIChkZWNpbWFsU2NhbGUgJiYgZml4ZWREZWNpbWFsU2NhbGUpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdCYWNrc3BhY2UnICYmIHZhbHVlW3NlbGVjdGlvblN0YXJ0IC0gMV0gPT09IGRlY2ltYWxTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKGVsLCBzZWxlY3Rpb25TdGFydCAtIDEpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ0RlbGV0ZScgJiYgdmFsdWVbc2VsZWN0aW9uU3RhcnRdID09PSBkZWNpbWFsU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHVzZXIgcHJlc3NlcyB0aGUgYWxsb3dlZCBkZWNpbWFsIHNlcGFyYXRvciBiZWZvcmUgdGhlIHNlcGFyYXRvciwgbW92ZSB0aGUgY3Vyc29yIGFmdGVyIHRoZSBzZXBhcmF0b3JcbiAgICAgICAgaWYgKChhbGxvd2VkRGVjaW1hbFNlcGFyYXRvcnMgPT09IG51bGwgfHwgYWxsb3dlZERlY2ltYWxTZXBhcmF0b3JzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhbGxvd2VkRGVjaW1hbFNlcGFyYXRvcnMuaW5jbHVkZXMoa2V5KSkgJiYgdmFsdWVbc2VsZWN0aW9uU3RhcnRdID09PSBkZWNpbWFsU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKGVsLCBzZWxlY3Rpb25TdGFydCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfdGhvdXNhbmRTZXBhcmF0b3IgPSB0aG91c2FuZFNlcGFyYXRvciA9PT0gdHJ1ZSA/ICcsJyA6IHRob3VzYW5kU2VwYXJhdG9yO1xuICAgICAgICAvLyBtb3ZlIGN1cnNvciB3aGVuIGRlbGV0ZSBvciBiYWNrc3BhY2UgaXMgcHJlc3NlZCBiZWZvcmUvYWZ0ZXIgdGhvdXNhbmQgc2VwYXJhdG9yXG4gICAgICAgIGlmIChrZXkgPT09ICdCYWNrc3BhY2UnICYmIHZhbHVlW3NlbGVjdGlvblN0YXJ0IC0gMV0gPT09IF90aG91c2FuZFNlcGFyYXRvcikge1xuICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihlbCwgc2VsZWN0aW9uU3RhcnQgLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnRGVsZXRlJyAmJiB2YWx1ZVtzZWxlY3Rpb25TdGFydF0gPT09IF90aG91c2FuZFNlcGFyYXRvcikge1xuICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihlbCwgc2VsZWN0aW9uU3RhcnQgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd24oZSk7XG4gICAgfTtcbiAgICB2YXIgX29uQmx1ciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBfdmFsdWUgPSBudW1Bc1N0cmluZztcbiAgICAgICAgLy8gaWYgdGhlcmUgbm8gbm8gbnVtZXJpYyB2YWx1ZSwgY2xlYXIgdGhlIGlucHV0XG4gICAgICAgIGlmICghX3ZhbHVlLm1hdGNoKC9cXGQvZykpIHtcbiAgICAgICAgICAgIF92YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNsZWFyIGxlYWRpbmcgMHNcbiAgICAgICAgaWYgKCFhbGxvd0xlYWRpbmdaZXJvcykge1xuICAgICAgICAgICAgX3ZhbHVlID0gZml4TGVhZGluZ1plcm8oX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhcHBseSBmaXhlZERlY2ltYWxTY2FsZSBvbiBibHVyIGV2ZW50XG4gICAgICAgIGlmIChmaXhlZERlY2ltYWxTY2FsZSAmJiBkZWNpbWFsU2NhbGUpIHtcbiAgICAgICAgICAgIF92YWx1ZSA9IHJvdW5kVG9QcmVjaXNpb24oX3ZhbHVlLCBkZWNpbWFsU2NhbGUsIGZpeGVkRGVjaW1hbFNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX3ZhbHVlICE9PSBudW1Bc1N0cmluZykge1xuICAgICAgICAgICAgdmFyIGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0KF92YWx1ZSwgcHJvcHMpO1xuICAgICAgICAgICAgX29uVmFsdWVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiBmb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZhbHVlLFxuICAgICAgICAgICAgICAgIGZsb2F0VmFsdWU6IHBhcnNlRmxvYXQoX3ZhbHVlKSxcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBldmVudDogZSxcbiAgICAgICAgICAgICAgICBzb3VyY2U6IFNvdXJjZVR5cGUuZXZlbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkJsdXIoZSk7XG4gICAgfTtcbiAgICB2YXIgaXNWYWxpZElucHV0Q2hhcmFjdGVyID0gZnVuY3Rpb24gKGlucHV0Q2hhcikge1xuICAgICAgICBpZiAoaW5wdXRDaGFyID09PSBkZWNpbWFsU2VwYXJhdG9yKVxuICAgICAgICAgICAgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICByZXR1cm4gY2hhcklzTnVtYmVyKGlucHV0Q2hhcik7XG4gICAgfTtcbiAgICB2YXIgaXNDaGFyYWN0ZXJTYW1lID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gcmVmLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IHJlZi5sYXN0VmFsdWU7XG4gICAgICAgIHZhciBmb3JtYXR0ZWRWYWx1ZSA9IHJlZi5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZUluZGV4ID0gcmVmLmN1cnJlbnRWYWx1ZUluZGV4O1xuICAgICAgICB2YXIgZm9ybWF0dGVkVmFsdWVJbmRleCA9IHJlZi5mb3JtYXR0ZWRWYWx1ZUluZGV4O1xuXG4gICAgICAgIHZhciBjdXJDaGFyID0gY3VycmVudFZhbHVlW2N1cnJlbnRWYWx1ZUluZGV4XTtcbiAgICAgICAgdmFyIG5ld0NoYXIgPSBmb3JtYXR0ZWRWYWx1ZVtmb3JtYXR0ZWRWYWx1ZUluZGV4XTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE5PVEU6IGFzIHRob3VzYW5kIHNlcGFyYXRvciBhbmQgYWxsb3dlZERlY2ltYWxTZXBhcmF0b3JzIGNhbiBiZSBzYW1lLCB3ZSBuZWVkIHRvIGNoZWNrIG9uXG4gICAgICAgICAqIHR5cGVkIHJhbmdlIGlmIHdlIGhhdmUgdHlwZWQgYW55IGNoYXJhY3RlciBmcm9tIGFsbG93ZWREZWNpbWFsU2VwYXJhdG9ycywgaW4gdGhhdCBjYXNlIHdlXG4gICAgICAgICAqIGNvbnNpZGVyIGRpZmZlcmVudCBjaGFyYWN0ZXJzIGxpa2UgLCBhbmQgLiBzYW1lIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdXBkYXRlZCB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIHZhciB0eXBlZFJhbmdlID0gZmluZENoYW5nZVJhbmdlKGxhc3RWYWx1ZSwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgdmFyIHRvID0gdHlwZWRSYW5nZS50bztcbiAgICAgICAgLy8gaGFuZGxlIGNvcm5lciBjYXNlIHdoZXJlIGlmIHdlIHVzZXIgdHlwZXMgYSBkZWNpbWFsIHNlcGFyYXRvciB3aXRoIGZpeGVkRGVjaW1hbFNjYWxlXG4gICAgICAgIC8vIGFuZCBwYXNzIGJhY2sgZmxvYXQgdmFsdWUgdGhlIGN1cnNvciBqdW1wcy4gIzg1MVxuICAgICAgICB2YXIgZ2V0RGVjaW1hbFNlcGFyYXRvckluZGV4ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3JlbW92ZUZvcm1hdHRpbmcodmFsdWUpLmluZGV4T2YoJy4nKSArIHByZWZpeC5sZW5ndGg7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJlxuICAgICAgICAgICAgZml4ZWREZWNpbWFsU2NhbGUgJiZcbiAgICAgICAgICAgIGRlY2ltYWxTY2FsZSAmJlxuICAgICAgICAgICAgY3VycmVudFZhbHVlW3RvLnN0YXJ0XSA9PT0gZGVjaW1hbFNlcGFyYXRvciAmJlxuICAgICAgICAgICAgZ2V0RGVjaW1hbFNlcGFyYXRvckluZGV4KGN1cnJlbnRWYWx1ZSkgPCBjdXJyZW50VmFsdWVJbmRleCAmJlxuICAgICAgICAgICAgZ2V0RGVjaW1hbFNlcGFyYXRvckluZGV4KGZvcm1hdHRlZFZhbHVlKSA+IGZvcm1hdHRlZFZhbHVlSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFZhbHVlSW5kZXggPj0gdG8uc3RhcnQgJiZcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZUluZGV4IDwgdG8uZW5kICYmXG4gICAgICAgICAgICBhbGxvd2VkRGVjaW1hbFNlcGFyYXRvcnMgJiZcbiAgICAgICAgICAgIGFsbG93ZWREZWNpbWFsU2VwYXJhdG9ycy5pbmNsdWRlcyhjdXJDaGFyKSAmJlxuICAgICAgICAgICAgbmV3Q2hhciA9PT0gZGVjaW1hbFNlcGFyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1ckNoYXIgPT09IG5ld0NoYXI7XG4gICAgfTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXN0UHJvcHMpLCB7IHZhbHVlOiBmb3JtYXR0ZWRWYWx1ZSwgdmFsdWVJc051bWVyaWNTdHJpbmc6IGZhbHNlLCBpc1ZhbGlkSW5wdXRDaGFyYWN0ZXI6IGlzVmFsaWRJbnB1dENoYXJhY3RlcixcbiAgICAgICAgaXNDaGFyYWN0ZXJTYW1lOiBpc0NoYXJhY3RlclNhbWUsIG9uVmFsdWVDaGFuZ2U6IF9vblZhbHVlQ2hhbmdlLCBmb3JtYXQ6IF9mb3JtYXQsIHJlbW92ZUZvcm1hdHRpbmc6IF9yZW1vdmVGb3JtYXR0aW5nLCBnZXRDYXJldEJvdW5kYXJ5OiBmdW5jdGlvbiAoZm9ybWF0dGVkVmFsdWUpIHsgcmV0dXJuIGdldENhcmV0Qm91bmRhcnkoZm9ybWF0dGVkVmFsdWUsIHByb3BzKTsgfSwgb25LZXlEb3duOiBfb25LZXlEb3duLCBvbkJsdXI6IF9vbkJsdXIgfSk7XG59XG5mdW5jdGlvbiBOdW1lcmljRm9ybWF0KHByb3BzKSB7XG4gICAgdmFyIG51bWVyaWNGb3JtYXRQcm9wcyA9IHVzZU51bWVyaWNGb3JtYXQocHJvcHMpO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE51bWJlckZvcm1hdEJhc2UsIE9iamVjdC5hc3NpZ24oe30sIG51bWVyaWNGb3JtYXRQcm9wcykpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXQkMShudW1TdHIsIHByb3BzKSB7XG4gICAgdmFyIGZvcm1hdCA9IHByb3BzLmZvcm1hdDtcbiAgICB2YXIgYWxsb3dFbXB0eUZvcm1hdHRpbmcgPSBwcm9wcy5hbGxvd0VtcHR5Rm9ybWF0dGluZztcbiAgICB2YXIgbWFzayA9IHByb3BzLm1hc2s7XG4gICAgdmFyIHBhdHRlcm5DaGFyID0gcHJvcHMucGF0dGVybkNoYXI7IGlmICggcGF0dGVybkNoYXIgPT09IHZvaWQgMCApIHBhdHRlcm5DaGFyID0gJyMnO1xuICAgIGlmIChudW1TdHIgPT09ICcnICYmICFhbGxvd0VtcHR5Rm9ybWF0dGluZylcbiAgICAgICAgeyByZXR1cm4gJyc7IH1cbiAgICB2YXIgaGFzaENvdW50ID0gMDtcbiAgICB2YXIgZm9ybWF0dGVkTnVtYmVyQXJ5ID0gZm9ybWF0LnNwbGl0KCcnKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbG4gPSBmb3JtYXQubGVuZ3RoOyBpIDwgbG47IGkrKykge1xuICAgICAgICBpZiAoZm9ybWF0W2ldID09PSBwYXR0ZXJuQ2hhcikge1xuICAgICAgICAgICAgZm9ybWF0dGVkTnVtYmVyQXJ5W2ldID0gbnVtU3RyW2hhc2hDb3VudF0gfHwgZ2V0TWFza0F0SW5kZXgobWFzaywgaGFzaENvdW50KTtcbiAgICAgICAgICAgIGhhc2hDb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZWROdW1iZXJBcnkuam9pbignJyk7XG59XG5mdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nJDEodmFsdWUsIGNoYW5nZU1ldGEsIHByb3BzKSB7XG4gICAgaWYgKCBjaGFuZ2VNZXRhID09PSB2b2lkIDAgKSBjaGFuZ2VNZXRhID0gZ2V0RGVmYXVsdENoYW5nZU1ldGEodmFsdWUpO1xuXG4gICAgdmFyIGZvcm1hdCA9IHByb3BzLmZvcm1hdDtcbiAgICB2YXIgcGF0dGVybkNoYXIgPSBwcm9wcy5wYXR0ZXJuQ2hhcjsgaWYgKCBwYXR0ZXJuQ2hhciA9PT0gdm9pZCAwICkgcGF0dGVybkNoYXIgPSAnIyc7XG4gICAgdmFyIGZyb20gPSBjaGFuZ2VNZXRhLmZyb207XG4gICAgdmFyIHRvID0gY2hhbmdlTWV0YS50bztcbiAgICB2YXIgbGFzdFZhbHVlID0gY2hhbmdlTWV0YS5sYXN0VmFsdWU7IGlmICggbGFzdFZhbHVlID09PSB2b2lkIDAgKSBsYXN0VmFsdWUgPSAnJztcbiAgICB2YXIgaXNOdW1lcmljU2xvdCA9IGZ1bmN0aW9uIChjYXJldFBvcykgeyByZXR1cm4gZm9ybWF0W2NhcmV0UG9zXSA9PT0gcGF0dGVybkNoYXI7IH07XG4gICAgdmFyIHJlbW92ZUZvcm1hdENoYXIgPSBmdW5jdGlvbiAoc3RyaW5nLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHZhciBzdHIgPSAnJztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpc051bWVyaWNTbG90KHN0YXJ0SW5kZXggKyBpKSAmJiBjaGFySXNOdW1iZXIoc3RyaW5nW2ldKSkge1xuICAgICAgICAgICAgICAgIHN0ciArPSBzdHJpbmdbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9O1xuICAgIHZhciBleHRyYWN0TnVtYmVycyA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXjAtOV0vZywgJycpOyB9O1xuICAgIC8vIGlmIGZvcm1hdCBkb2Vzbid0IGhhdmUgYW55IG51bWJlciwgcmVtb3ZlIGFsbCB0aGUgbm9uIG51bWVyaWMgY2hhcmFjdGVyc1xuICAgIGlmICghZm9ybWF0Lm1hdGNoKC9cXGQvKSkge1xuICAgICAgICByZXR1cm4gZXh0cmFjdE51bWJlcnModmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBpZiB1c2VyIHBhc3RlIHRoZSB3aG9sZSBmb3JtYXR0ZWQgdGV4dCBpbiBhbiBlbXB0eSBpbnB1dCBvciBkb2luZyBzZWxlY3QgYWxsIGFuZCBwYXN0ZSwgY2hlY2sgaWYgbWF0Y2hlcyB0byB0aGUgcGF0dGVyblxuICAgICAqIGFuZCByZW1vdmUgdGhlIGZvcm1hdCBjaGFyYWN0ZXJzLCBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIG9uIHRoZSBwYXR0ZXJuLCBkbyBwbGFuZSBudW1iZXIgZXh0cmFjdFxuICAgICAqL1xuICAgIGlmICgobGFzdFZhbHVlID09PSAnJyB8fCBmcm9tLmVuZCAtIGZyb20uc3RhcnQgPT09IGxhc3RWYWx1ZS5sZW5ndGgpICYmXG4gICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gZm9ybWF0Lmxlbmd0aCkge1xuICAgICAgICB2YXIgc3RyID0gJyc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpc051bWVyaWNTbG90KGkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJJc051bWJlcih2YWx1ZVtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IHZhbHVlW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlW2ldICE9PSBmb3JtYXRbaV0pIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIG9uIHRoZSBwYXR0ZXJuLCBkbyBwbGFuZSBudW1iZXIgZXh0cmFjdFxuICAgICAgICAgICAgICAgIHJldHVybiBleHRyYWN0TnVtYmVycyh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9yIHBhcnRpYWwgY2hhbmdlLFxuICAgICAqIHdoZXJlIGV2ZXIgdGhlcmUgaXMgYSBjaGFuZ2Ugb24gdGhlIGlucHV0LCB3ZSBjYW4gYnJlYWsgdGhlIG51bWJlciBpbiB0aHJlZSBwYXJ0c1xuICAgICAqIDFzdDogbGVmdCBwYXJ0IHdoaWNoIGlzIHVuY2hhbmdlZFxuICAgICAqIDJuZDogbWlkZGxlIHBhcnQgd2hpY2ggaXMgY2hhbmdlZFxuICAgICAqIDNyZDogcmlnaHQgcGFydCB3aGljaCBpcyB1bmNoYW5nZWRcbiAgICAgKlxuICAgICAqIFRoZSBmaXJzdCBhbmQgdGhpcmQgc2VjdGlvbiB3aWxsIGJlIHNhbWUgYXMgbGFzdCB2YWx1ZSwgb25seSB0aGUgbWlkZGxlIHBhcnQgd2lsbCBjaGFuZ2VcbiAgICAgKiBXZSBjYW4gY29uc2lkZXIgb24gdGhlIGNoYW5nZSBwYXJ0IGFsbCB0aGUgbmV3IGNoYXJhY3RlcnMgYXJlIG5vbiBmb3JtYXQgY2hhcmFjdGVycy5cbiAgICAgKiBBbmQgb24gdGhlIGZpcnN0IGFuZCBsYXN0IHNlY3Rpb24gaXQgY2FuIGhhdmUgcGFydGlhbCBmb3JtYXQgY2hhcmFjdGVycy5cbiAgICAgKlxuICAgICAqIFdlIHBpY2sgZmlyc3QgYW5kIGxhc3Qgc2VjdGlvbiBmcm9tIHRoZSBsYXN0VmFsdWUgKGFzIHRoYXQgaGFzIDEtMSBtYXBwaW5nIHdpdGggZm9ybWF0KVxuICAgICAqIGFuZCBtaWRkbGUgb25lIGZyb20gdGhlIHVwZGF0ZSB2YWx1ZS5cbiAgICAgKi9cbiAgICB2YXIgZmlyc3RTZWN0aW9uID0gbGFzdFZhbHVlLnN1YnN0cmluZygwLCBmcm9tLnN0YXJ0KTtcbiAgICB2YXIgbWlkZGxlU2VjdGlvbiA9IHZhbHVlLnN1YnN0cmluZyh0by5zdGFydCwgdG8uZW5kKTtcbiAgICB2YXIgbGFzdFNlY3Rpb24gPSBsYXN0VmFsdWUuc3Vic3RyaW5nKGZyb20uZW5kKTtcbiAgICByZXR1cm4gKFwiXCIgKyAocmVtb3ZlRm9ybWF0Q2hhcihmaXJzdFNlY3Rpb24sIDApKSArIChleHRyYWN0TnVtYmVycyhtaWRkbGVTZWN0aW9uKSkgKyAocmVtb3ZlRm9ybWF0Q2hhcihsYXN0U2VjdGlvbiwgZnJvbS5lbmQpKSk7XG59XG5mdW5jdGlvbiBnZXRDYXJldEJvdW5kYXJ5JDEoZm9ybWF0dGVkVmFsdWUsIHByb3BzKSB7XG4gICAgdmFyIGZvcm1hdCA9IHByb3BzLmZvcm1hdDtcbiAgICB2YXIgbWFzayA9IHByb3BzLm1hc2s7XG4gICAgdmFyIHBhdHRlcm5DaGFyID0gcHJvcHMucGF0dGVybkNoYXI7IGlmICggcGF0dGVybkNoYXIgPT09IHZvaWQgMCApIHBhdHRlcm5DaGFyID0gJyMnO1xuICAgIHZhciBib3VuZGFyeUFyeSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGZvcm1hdHRlZFZhbHVlLmxlbmd0aCArIDEgfSkubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0pO1xuICAgIHZhciBoYXNoQ291bnQgPSAwO1xuICAgIHZhciBmaXJzdEVtcHR5U2xvdCA9IC0xO1xuICAgIHZhciBtYXNrQW5kSW5kZXhNYXAgPSB7fTtcbiAgICBmb3JtYXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNoYXIsIGluZGV4KSB7XG4gICAgICAgIHZhciBtYXNrQXRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNoYXIgPT09IHBhdHRlcm5DaGFyKSB7XG4gICAgICAgICAgICBoYXNoQ291bnQrKztcbiAgICAgICAgICAgIG1hc2tBdEluZGV4ID0gZ2V0TWFza0F0SW5kZXgobWFzaywgaGFzaENvdW50IC0gMSk7XG4gICAgICAgICAgICBpZiAoZmlyc3RFbXB0eVNsb3QgPT09IC0xICYmIGZvcm1hdHRlZFZhbHVlW2luZGV4XSA9PT0gbWFza0F0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBmaXJzdEVtcHR5U2xvdCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1hc2tBbmRJbmRleE1hcFtpbmRleF0gPSBtYXNrQXRJbmRleDtcbiAgICB9KTtcbiAgICB2YXIgaXNQb3NBbGxvd2VkID0gZnVuY3Rpb24gKHBvcykge1xuICAgICAgICAvLyB0aGUgcG9zaXRpb24gaXMgYWxsb3dlZCBpZiB0aGUgcG9zaXRpb24gaXMgbm90IG1hc2tlZCBhbmQgdmFsaWQgbnVtYmVyIGFyZWFcbiAgICAgICAgcmV0dXJuIGZvcm1hdFtwb3NdID09PSBwYXR0ZXJuQ2hhciAmJiBmb3JtYXR0ZWRWYWx1ZVtwb3NdICE9PSBtYXNrQW5kSW5kZXhNYXBbcG9zXTtcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsbiA9IGJvdW5kYXJ5QXJ5Lmxlbmd0aDsgaSA8IGxuOyBpKyspIHtcbiAgICAgICAgLy8gY29uc2lkZXIgY2FyZXQgdG8gYmUgaW4gYm91bmRhcnkgaWYgaXQgaXMgYmVmb3JlIG9yIGFmdGVyIG51bWVyaWMgdmFsdWVcbiAgICAgICAgLy8gTm90ZTogb24gcGF0dGVybiBiYXNlZCBmb3JtYXQgaXRzIGRlbm90ZWQgYnkgcGF0dGVybkNoYXJhY3RlclxuICAgICAgICAvLyB3ZSBzaG91bGQgYWxzbyBhbGxvdyB1c2VyIHRvIHB1dCBjdXJzb3Igb24gZmlyc3QgZW1wdHkgc2xvdFxuICAgICAgICBib3VuZGFyeUFyeVtpXSA9IGkgPT09IGZpcnN0RW1wdHlTbG90IHx8IGlzUG9zQWxsb3dlZChpKSB8fCBpc1Bvc0FsbG93ZWQoaSAtIDEpO1xuICAgIH1cbiAgICAvLyB0aGUgZmlyc3QgcGF0dGVybkNoYXIgcG9zaXRpb24gaXMgYWx3YXlzIGFsbG93ZWRcbiAgICBib3VuZGFyeUFyeVtmb3JtYXQuaW5kZXhPZihwYXR0ZXJuQ2hhcildID0gdHJ1ZTtcbiAgICByZXR1cm4gYm91bmRhcnlBcnk7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BzKHByb3BzKSB7XG4gICAgdmFyIG1hc2sgPSBwcm9wcy5tYXNrO1xuICAgIGlmIChtYXNrKSB7XG4gICAgICAgIHZhciBtYXNrQXNTdHIgPSBtYXNrID09PSAnc3RyaW5nJyA/IG1hc2sgOiBtYXNrLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtYXNrQXNTdHIubWF0Y2goL1xcZC9nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcIk1hc2sgXCIgKyBtYXNrICsgXCIgc2hvdWxkIG5vdCBjb250YWluIG51bWVyaWMgY2hhcmFjdGVyO1wiKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpc051bWVyaWNTdHJpbmckMSh2YWwsIGZvcm1hdCkge1xuICAgIC8vd2UgY2FuIHRyZWF0IGVtcHR5IHN0cmluZyBhcyBudW1lcmljIHN0cmluZ1xuICAgIGlmICh2YWwgPT09ICcnKVxuICAgICAgICB7IHJldHVybiB0cnVlOyB9XG4gICAgcmV0dXJuICEoZm9ybWF0ID09PSBudWxsIHx8IGZvcm1hdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZm9ybWF0Lm1hdGNoKC9cXGQvKSkgJiYgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgKCEhdmFsLm1hdGNoKC9eXFxkKyQvKSB8fCB2YWwgPT09ICcnKTtcbn1cbmZ1bmN0aW9uIHVzZVBhdHRlcm5Gb3JtYXQocHJvcHMpIHtcbiAgICB2YXIgbWFzayA9IHByb3BzLm1hc2s7XG4gICAgdmFyIGFsbG93RW1wdHlGb3JtYXR0aW5nID0gcHJvcHMuYWxsb3dFbXB0eUZvcm1hdHRpbmc7XG4gICAgdmFyIGZvcm1hdFByb3AgPSBwcm9wcy5mb3JtYXQ7XG4gICAgdmFyIGlucHV0TW9kZSA9IHByb3BzLmlucHV0TW9kZTsgaWYgKCBpbnB1dE1vZGUgPT09IHZvaWQgMCApIGlucHV0TW9kZSA9ICdudW1lcmljJztcbiAgICB2YXIgb25LZXlEb3duID0gcHJvcHMub25LZXlEb3duOyBpZiAoIG9uS2V5RG93biA9PT0gdm9pZCAwICkgb25LZXlEb3duID0gbm9vcDtcbiAgICB2YXIgcGF0dGVybkNoYXIgPSBwcm9wcy5wYXR0ZXJuQ2hhcjsgaWYgKCBwYXR0ZXJuQ2hhciA9PT0gdm9pZCAwICkgcGF0dGVybkNoYXIgPSAnIyc7XG4gICAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgICB2YXIgdmFsdWVJc051bWVyaWNTdHJpbmcgPSBwcm9wcy52YWx1ZUlzTnVtZXJpY1N0cmluZztcbiAgICB2YXIgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJtYXNrXCIsIFwiYWxsb3dFbXB0eUZvcm1hdHRpbmdcIiwgXCJmb3JtYXRcIiwgXCJpbnB1dE1vZGVcIiwgXCJvbktleURvd25cIiwgXCJwYXR0ZXJuQ2hhclwiLCBcInZhbHVlXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwidmFsdWVJc051bWVyaWNTdHJpbmdcIl0pO1xuICAgIC8vIHZhbGlkYXRlIHByb3BzXG4gICAgdmFsaWRhdGVQcm9wcyhwcm9wcyk7XG4gICAgdmFyIF9nZXRDYXJldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGZvcm1hdHRlZFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBnZXRDYXJldEJvdW5kYXJ5JDEoZm9ybWF0dGVkVmFsdWUsIHByb3BzKTtcbiAgICB9O1xuICAgIHZhciBfb25LZXlEb3duID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIGtleSA9IGUua2V5O1xuICAgICAgICB2YXIgZWwgPSBlLnRhcmdldDtcbiAgICAgICAgdmFyIHNlbGVjdGlvblN0YXJ0ID0gZWwuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSBlbC5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIHZhciB2YWx1ZSA9IGVsLnZhbHVlO1xuICAgICAgICAvLyBpZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIGFyZSBzZWxlY3RlZCBhbmQgdXNlciBoaXRzIGJhY2tzcGFjZSwgbm8gbmVlZCB0byBoYW5kbGUgYW55dGhpbmcgbWFudWFsbHlcbiAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0ICE9PSBzZWxlY3Rpb25FbmQpIHtcbiAgICAgICAgICAgIG9uS2V5RG93bihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBicmluZyB0aGUgY3Vyc29yIHRvIGNsb3Nlc3QgbnVtZXJpYyBzZWN0aW9uXG4gICAgICAgIHZhciBjYXJldFBvcyA9IHNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAvLyBpZiBiYWNrc3BhY2UgaXMgcHJlc3NlZCBhZnRlciB0aGUgZm9ybWF0IGNoYXJhY3RlcnMsIGJyaW5nIGl0IHRvIG51bWVyaWMgc2VjdGlvblxuICAgICAgICAvLyBpZiBkZWxldGUgaXMgcHJlc3NlZCBiZWZvcmUgdGhlIGZvcm1hdCBjaGFyYWN0ZXJzLCBicmluZyBpdCB0byBudW1lcmljIHNlY3Rpb25cbiAgICAgICAgaWYgKGtleSA9PT0gJ0JhY2tzcGFjZScgfHwga2V5ID09PSAnRGVsZXRlJykge1xuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9ICdyaWdodCc7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgICAgICAgIHdoaWxlIChjYXJldFBvcyA+IDAgJiYgZm9ybWF0UHJvcFtjYXJldFBvcyAtIDFdICE9PSBwYXR0ZXJuQ2hhcikge1xuICAgICAgICAgICAgICAgICAgICBjYXJldFBvcy0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAnbGVmdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZm9ybWF0TG4gPSBmb3JtYXRQcm9wLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2FyZXRQb3MgPCBmb3JtYXRMbiAmJiBmb3JtYXRQcm9wW2NhcmV0UG9zXSAhPT0gcGF0dGVybkNoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRQb3MrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gJ3JpZ2h0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhcmV0UG9zID0gZ2V0Q2FyZXRQb3NJbkJvdW5kYXJ5KHZhbHVlLCBjYXJldFBvcywgX2dldENhcmV0Qm91bmRhcnkodmFsdWUpLCBkaXJlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZvcm1hdFByb3BbY2FyZXRQb3NdICE9PSBwYXR0ZXJuQ2hhciAmJlxuICAgICAgICAgICAga2V5ICE9PSAnQXJyb3dMZWZ0JyAmJlxuICAgICAgICAgICAga2V5ICE9PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICAgIC8vIGlmIHVzZXIgaXMgdHlwaW5nIG9uIGZvcm1hdCBjaGFyYWN0ZXIgcG9zaXRpb24sIGJyaW5nIHVzZXIgdG8gbmV4dCBhbGxvd2VkIGNhcmV0IHBvc2l0aW9uXG4gICAgICAgICAgICBjYXJldFBvcyA9IGdldENhcmV0UG9zSW5Cb3VuZGFyeSh2YWx1ZSwgY2FyZXRQb3MgKyAxLCBfZ2V0Q2FyZXRCb3VuZGFyeSh2YWx1ZSksICdyaWdodCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGNoYW5naW5nIGNhcmV0IHBvc2l0aW9uLCBzZXQgdGhlIGNhcmV0IHBvc2l0aW9uXG4gICAgICAgIGlmIChjYXJldFBvcyAhPT0gc2VsZWN0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oZWwsIGNhcmV0UG9zKTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd24oZSk7XG4gICAgfTtcbiAgICAvLyB0cnkgdG8gZmlndXJlIG91dCBpc1ZhbHVlTnVtZXJpY1N0cmluZyBiYXNlZCBvbiBmb3JtYXQgcHJvcCBhbmQgdmFsdWVcbiAgICB2YXIgX3ZhbHVlID0gaXNOaWwodmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgdmFyIGlzVmFsdWVOdW1lcmljU3RyaW5nID0gdmFsdWVJc051bWVyaWNTdHJpbmcgIT09IG51bGwgJiYgdmFsdWVJc051bWVyaWNTdHJpbmcgIT09IHZvaWQgMCA/IHZhbHVlSXNOdW1lcmljU3RyaW5nIDogaXNOdW1lcmljU3RyaW5nJDEoX3ZhbHVlLCBmb3JtYXRQcm9wKTtcbiAgICB2YXIgX3Byb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcm9wcyksIHsgdmFsdWVJc051bWVyaWNTdHJpbmc6IGlzVmFsdWVOdW1lcmljU3RyaW5nIH0pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3RQcm9wcyksIHsgdmFsdWU6IHZhbHVlLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSwgdmFsdWVJc051bWVyaWNTdHJpbmc6IGlzVmFsdWVOdW1lcmljU3RyaW5nLCBpbnB1dE1vZGU6IGlucHV0TW9kZSwgZm9ybWF0OiBmdW5jdGlvbiAobnVtU3RyKSB7IHJldHVybiBmb3JtYXQkMShudW1TdHIsIF9wcm9wcyk7IH0sIHJlbW92ZUZvcm1hdHRpbmc6IGZ1bmN0aW9uIChpbnB1dFZhbHVlLCBjaGFuZ2VNZXRhKSB7IHJldHVybiByZW1vdmVGb3JtYXR0aW5nJDEoaW5wdXRWYWx1ZSwgY2hhbmdlTWV0YSwgX3Byb3BzKTsgfSwgZ2V0Q2FyZXRCb3VuZGFyeTogX2dldENhcmV0Qm91bmRhcnksIG9uS2V5RG93bjogX29uS2V5RG93biB9KTtcbn1cbmZ1bmN0aW9uIFBhdHRlcm5Gb3JtYXQocHJvcHMpIHtcbiAgICB2YXIgcGF0dGVybkZvcm1hdFByb3BzID0gdXNlUGF0dGVybkZvcm1hdChwcm9wcyk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTnVtYmVyRm9ybWF0QmFzZSwgT2JqZWN0LmFzc2lnbih7fSwgcGF0dGVybkZvcm1hdFByb3BzKSk7XG59XG5cbmV4cG9ydCB7IE51bWJlckZvcm1hdEJhc2UsIE51bWVyaWNGb3JtYXQsIFBhdHRlcm5Gb3JtYXQsIGdldENhcmV0Qm91bmRhcnkgYXMgZ2V0TnVtZXJpY0NhcmV0Qm91bmRhcnksIGdldENhcmV0Qm91bmRhcnkkMSBhcyBnZXRQYXR0ZXJuQ2FyZXRCb3VuZGFyeSwgZm9ybWF0IGFzIG51bWVyaWNGb3JtYXR0ZXIsIGZvcm1hdCQxIGFzIHBhdHRlcm5Gb3JtYXR0ZXIsIHJlbW92ZUZvcm1hdHRpbmcgYXMgcmVtb3ZlTnVtZXJpY0Zvcm1hdCwgcmVtb3ZlRm9ybWF0dGluZyQxIGFzIHJlbW92ZVBhdHRlcm5Gb3JtYXQsIHVzZU51bWVyaWNGb3JtYXQsIHVzZVBhdHRlcm5Gb3JtYXQgfTtcbiIsImltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbnZhciBnZXRJY29uUHJvcHMgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgaWNvblNpemUgPSBzaXplID09PSBcIm1kXCIgfHwgc2l6ZSA9PT0gXCJsZ1wiID8gMTYgOiAxNDtcbiAgICByZXR1cm4gX2EgPSB7XG4gICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcInJkcy1JbnB1dC1pY29uXCIsXG4gICAgICAgICAgICBoZWlnaHQ6IGljb25TaXplLFxuICAgICAgICAgICAgd2lkdGg6IGljb25TaXplXG4gICAgICAgIH0sXG4gICAgICAgIF9hW1wiYXJpYS1oaWRkZW5cIl0gPSB0cnVlLFxuICAgICAgICBfYS5mb2N1c2FibGUgPSBmYWxzZSxcbiAgICAgICAgX2E7XG59O1xuLyoqXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbUkRTIElucHV0XShodHRwczovL2Rlc2lnbi5yYW1zZXlzb2x1dGlvbnMuY29tL3N0b3J5Ym9vay8/cGF0aD0vc3RvcnkvZGVzaWduLXN5c3RlbS1pbnB1dC0tZGVmYXVsdClcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbUkRTIElucHV0IEFQSV0oaHR0cHM6Ly9kZXNpZ24ucmFtc2V5c29sdXRpb25zLmNvbS9jb21wb25lbnRzL2lucHV0Lz90YWI9dGVjaG5vbG9naWVzI3JlYWN0KVxuICovXG52YXIgSW5wdXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfYSwgcmVmKSB7XG4gICAgdmFyIF9iO1xuICAgIHZhciBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIF9jID0gX2EuZGlzYWJsZWQsIGRpc2FibGVkID0gX2MgPT09IHZvaWQgMCA/IGZhbHNlIDogX2MsIElucHV0SWNvbiA9IF9hLmljb24sIF9kID0gX2EuaWNvblBvc2l0aW9uLCBpY29uUG9zaXRpb24gPSBfZCA9PT0gdm9pZCAwID8gXCJsZWZ0XCIgOiBfZCwgX2UgPSBfYS5pbnZhbGlkLCBpbnZhbGlkID0gX2UgPT09IHZvaWQgMCA/IGZhbHNlIDogX2UsIGxlbmd0aCA9IF9hLmxlbmd0aCwgX2YgPSBfYS5zaXplLCBzaXplID0gX2YgPT09IHZvaWQgMCA/IFwibWRcIiA6IF9mLCByZXN0ID0gX19yZXN0KF9hLCBbXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImljb25cIiwgXCJpY29uUG9zaXRpb25cIiwgXCJpbnZhbGlkXCIsIFwibGVuZ3RoXCIsIFwic2l6ZVwiXSk7XG4gICAgdmFyIGlucHV0Q2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJyZHMtSW5wdXRcIiwgKF9iID0ge30sXG4gICAgICAgIF9iW1wicmRzLUlucHV0LS1cIi5jb25jYXQoc2l6ZSldID0gc2l6ZSAhPT0gXCJtZFwiLFxuICAgICAgICBfYltcInJkcy1JbnB1dC0tbGVuZ3RoXCIuY29uY2F0KGxlbmd0aCA9PT0gbnVsbCB8fCBsZW5ndGggPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxlbmd0aC50b1VwcGVyQ2FzZSgpKV0gPSBsZW5ndGgsXG4gICAgICAgIF9iW1wiaXMtZGlzYWJsZWRcIl0gPSBkaXNhYmxlZCxcbiAgICAgICAgX2JbXCJpcy1pbnZhbGlkXCJdID0gaW52YWxpZCxcbiAgICAgICAgX2IpLCBjbGFzc05hbWUpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogaW5wdXRDbGFzc2VzIH0sXG4gICAgICAgIElucHV0SWNvbiAmJiBpY29uUG9zaXRpb24gPT09IFwibGVmdFwiICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KElucHV0SWNvbiwgX19hc3NpZ24oe30sIGdldEljb25Qcm9wcyhzaXplKSkpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9fYXNzaWduKHsgcmVmOiByZWYsIFwiYXJpYS1pbnZhbGlkXCI6IGludmFsaWQgfHwgdW5kZWZpbmVkLCBkaXNhYmxlZDogZGlzYWJsZWQgfSwgcmVzdCkpLFxuICAgICAgICBJbnB1dEljb24gJiYgaWNvblBvc2l0aW9uID09PSBcInJpZ2h0XCIgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5wdXRJY29uLCBfX2Fzc2lnbih7fSwgZ2V0SWNvblByb3BzKHNpemUpKSkpKSk7XG59KTtcbklucHV0LmRpc3BsYXlOYW1lID0gXCJJbnB1dFwiO1xuXG5leHBvcnQgeyBJbnB1dCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbnB1dC5lc20uanMubWFwXG4iLCJpbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuLy8gRG8gbm90IGVkaXQgZGlyZWN0bHlcbi8vIEdlbmVyYXRlZCBvbiBUdWUsIDIwIEphbiAyMDI2IDE1OjUwOjMyIEdNVFxudmFyIENsb3NlSWNvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9hLCByZWYpIHtcbiAgICB2YXIgdGl0bGUgPSBfYS50aXRsZSwgcmVzdCA9IF9fcmVzdChfYSwgW1widGl0bGVcIl0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfX2Fzc2lnbih7IHJlZjogcmVmLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCB3aWR0aDogMjQsIGhlaWdodDogMjQgfSwgcmVzdCksXG4gICAgICAgICEhdGl0bGUgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcInRpdGxlXCIsIG51bGwsIHRpdGxlKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsUnVsZTogXCJldmVub2RkXCIsIGQ6IFwiTTEuMyAxLjNhMSAxIDAgMCAxIDEuNCAwbDkuMyA5LjI5IDkuMy05LjNhMSAxIDAgMCAxIDEuMzEtLjA4bC4xLjA4YTEgMSAwIDAgMSAwIDEuNDJMMTMuNCAxMmw5LjMgOS4zYTEgMSAwIDAgMSAuMDggMS4zMWwtLjA4LjFhMSAxIDAgMCAxLTEuNDIgMEwxMiAxMy40bC05LjMgOS4zYTEgMSAwIDAgMS0xLjMxLjA4bC0uMS0uMDhhMSAxIDAgMCAxIDAtMS40MkwxMC42IDEyIDEuMyAyLjdhMSAxIDAgMCAxLS4wOC0xLjMxelwiIH0pKSk7XG59KTtcbkNsb3NlSWNvbi5kaXNwbGF5TmFtZSA9ICdDbG9zZUljb24nO1xuXG5leHBvcnQgeyBDbG9zZUljb24gfTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDbG9zZUljb24gfSBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaWNvbnMnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vYnV0dG9uJztcbmltcG9ydCBUb2tlbnMgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL3Rva2Vucy9kaXN0L21haW4uanNvbic7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxudmFyIF9hO1xudmFyIGljb25Qcm9wcyA9IChfYSA9IHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcInJkcy1BbGVydC1pY29uXCIsXG4gICAgICAgIGhlaWdodDogVG9rZW5zLlNpemVJY29uTGcsXG4gICAgICAgIHdpZHRoOiBUb2tlbnMuU2l6ZUljb25MZ1xuICAgIH0sXG4gICAgX2FbXCJhcmlhLWhpZGRlblwiXSA9IHRydWUsXG4gICAgX2EuZm9jdXNhYmxlID0gZmFsc2UsXG4gICAgX2EpO1xuLyoqXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbUkRTIEFsZXJ0XShodHRwczovL2Rlc2lnbi5yYW1zZXlzb2x1dGlvbnMuY29tL3N0b3J5Ym9vay8/cGF0aD0vc3RvcnkvZGVzaWduLXN5c3RlbS1hbGVydC0tZGVmYXVsdClcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbUkRTIEFsZXJ0IEFQSV0oaHR0cHM6Ly9kZXNpZ24ucmFtc2V5c29sdXRpb25zLmNvbS9jb21wb25lbnRzL2FsZXJ0Lz90YWI9dGVjaG5vbG9naWVzI3JlYWN0KVxuICovXG52YXIgQWxlcnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2I7XG4gICAgdmFyIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgX2MgPSBfYS5jb2xvciwgY29sb3IgPSBfYyA9PT0gdm9pZCAwID8gXCJuZXV0cmFsXCIgOiBfYywgX2QgPSBfYS5kaXNtaXNzaWJsZSwgZGlzbWlzc2libGUgPSBfZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZCwgZWxlbWVudCA9IF9hLmVsZW1lbnQsIF9lID0gX2EuZnVsbFdpZHRoLCBmdWxsV2lkdGggPSBfZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZSwgQWxlcnRJY29uID0gX2EuaWNvbiwgb25EaXNtaXNzID0gX2Eub25EaXNtaXNzLCByZXN0ID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiZGlzbWlzc2libGVcIiwgXCJlbGVtZW50XCIsIFwiZnVsbFdpZHRoXCIsIFwiaWNvblwiLCBcIm9uRGlzbWlzc1wiXSk7XG4gICAgdmFyIGFsZXJ0Q2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJyZHMtQWxlcnRcIiwgKF9iID0ge30sIF9iW1wicmRzLUFsZXJ0LS1cIi5jb25jYXQoY29sb3IpXSA9IGNvbG9yICE9PSBcIm5ldXRyYWxcIiwgX2IpLCB7IFwiaXMtZGlzbWlzc2libGVcIjogZGlzbWlzc2libGUgfSwgeyBcInJkcy1BbGVydC0tZnVsbFdpZHRoXCI6IGZ1bGxXaWR0aCB9LCBjbGFzc05hbWUpO1xuICAgIHZhciBFbGVtZW50ID0gZWxlbWVudCB8fCBcImRpdlwiO1xuICAgIGlmICghcmVzdC5yb2xlIHx8IChyZXN0LnJvbGUgIT09IFwic3RhdHVzXCIgJiYgcmVzdC5yb2xlICE9PSBcImFsZXJ0XCIpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSW4gbW9zdCBjYXNlcyBBbGVydCBzaG91bGQgaGF2ZSBhIHJvbGUgb2YgXCJzdGF0dXNcIiBvciBcImFsZXJ0XCIuIFNlZSB0aGUgQWxlcnQgYWNjZXNzaWJpbGl0eSBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uOiBodHRwczovL2Rlc2lnbi5yYW1zZXlzb2x1dGlvbnMuY29tL2NvbXBvbmVudHMvYWxlcnQvI2FjY2Vzc2liaWxpdHknKTtcbiAgICB9XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEVsZW1lbnQsIF9fYXNzaWduKHt9LCByZXN0LCB7IGNsYXNzTmFtZTogYWxlcnRDbGFzc2VzIH0pLFxuICAgICAgICBBbGVydEljb24gJiYgUmVhY3QuY3JlYXRlRWxlbWVudChBbGVydEljb24sIF9fYXNzaWduKHt9LCBpY29uUHJvcHMpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZHMtQWxlcnQtYm9keVwiIH0sIGNoaWxkcmVuKSxcbiAgICAgICAgZGlzbWlzc2libGUgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7IGljb25Pbmx5OiB0cnVlLCBpY29uOiBDbG9zZUljb24sIGFwcGVhcmFuY2U6IFwibmV1dHJhbFN1YnRsZVwiLCBcImFyaWEtbGFiZWxcIjogXCJkaXNtaXNzIGFsZXJ0XCIsIGNsYXNzTmFtZTogXCJyZHMtQWxlcnQtZGlzbWlzc1wiLCBvbkNsaWNrOiBvbkRpc21pc3MgfSkpKSk7XG59O1xuQWxlcnQuZGlzcGxheU5hbWUgPSBcIkFsZXJ0XCI7XG5cbmV4cG9ydCB7IEFsZXJ0IGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFsZXJ0LmVzbS5qcy5tYXBcbiIsImltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xyXG5cclxuXHJcbnZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG4vLyBEbyBub3QgZWRpdCBkaXJlY3RseVxuLy8gR2VuZXJhdGVkIG9uIFR1ZSwgMjAgSmFuIDIwMjYgMTU6NTA6MzIgR01UXG52YXIgSW5mb3JtYXRpb25JY29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX2EsIHJlZikge1xuICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCByZXN0ID0gX19yZXN0KF9hLCBbXCJ0aXRsZVwiXSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9fYXNzaWduKHsgcmVmOiByZWYsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIHdpZHRoOiAyNCwgaGVpZ2h0OiAyNCB9LCByZXN0KSxcbiAgICAgICAgISF0aXRsZSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGl0bGVcIiwgbnVsbCwgdGl0bGUpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgZDogXCJNMTIgMWExMSAxMSAwIDEgMSAwIDIyIDExIDExIDAgMCAxIDAtMjJ6bTEuMzYgOC42MmgtMi43MlYxOGgyLjcyVjkuNjJ6TTEyIDUuODJjLS45MiAwLTEuNTUuNTktMS41NSAxLjQyIDAgLjg1LjYzIDEuNDEgMS41NSAxLjQxczEuNTUtLjU2IDEuNTUtMS40MWMwLS44My0uNjMtMS40MS0xLjU1LTEuNDF6XCIgfSkpKTtcbn0pO1xuSW5mb3JtYXRpb25JY29uLmRpc3BsYXlOYW1lID0gJ0luZm9ybWF0aW9uSWNvbic7XG5cbmV4cG9ydCB7IEluZm9ybWF0aW9uSWNvbiB9O1xuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xyXG5cclxuXHJcbnZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG4vKipcbiAqXG4gKiBEZW1vczpcbiAqXG4gKiAtIFtSRFMgVGV4dF0oaHR0cHM6Ly9kZXNpZ24ucmFtc2V5c29sdXRpb25zLmNvbS9zdG9yeWJvb2svP3BhdGg9L3N0b3J5L2Rlc2lnbi1zeXN0ZW0tdGV4dC0tZGVmYXVsdClcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbUkRTIFRleHQgQVBJXShodHRwczovL2Rlc2lnbi5yYW1zZXlzb2x1dGlvbnMuY29tL2NvbXBvbmVudHMvdGV4dC8/dGFiPXRlY2hub2xvZ2llcyNyZWFjdClcbiAqL1xudmFyIFRleHQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2I7XG4gICAgdmFyIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgX2MgPSBfYS5jb2xvciwgY29sb3IgPSBfYyA9PT0gdm9pZCAwID8gXCJub3JtYWxcIiA6IF9jLCBlbGVtZW50ID0gX2EuZWxlbWVudCwgX2QgPSBfYS5pc09uRGFya0NhbnZhcywgaXNPbkRhcmtDYW52YXMgPSBfZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZCwgX2UgPSBfYS5zaXplLCBzaXplID0gX2UgPT09IHZvaWQgMCA/IFwiYm9keU1lZGl1bVwiIDogX2UsIHJlc3QgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJlbGVtZW50XCIsIFwiaXNPbkRhcmtDYW52YXNcIiwgXCJzaXplXCJdKTtcbiAgICB2YXIgdGV4dENsYXNzZXMgPSBjbGFzc05hbWVzKFwicmRzLVRleHRcIiwgKF9iID0ge30sXG4gICAgICAgIF9iW1wicmRzLVRleHQtLVwiLmNvbmNhdChzaXplKV0gPSBzaXplICE9PSBcImJvZHlNZWRpdW1cIixcbiAgICAgICAgX2JbXCJyZHMtVGV4dC0tXCIuY29uY2F0KGNvbG9yKV0gPSBjb2xvciAhPT0gXCJub3JtYWxcIixcbiAgICAgICAgX2JbXCJvbi1kYXJrQ2FudmFzXCJdID0gaXNPbkRhcmtDYW52YXMsXG4gICAgICAgIF9iKSwgY2xhc3NOYW1lKTtcbiAgICB2YXIgRWxlbWVudCA9IGVsZW1lbnQgfHwgXCJwXCI7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEVsZW1lbnQsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiB0ZXh0Q2xhc3NlcyB9LCByZXN0KSwgY2hpbGRyZW4pKTtcbn07XG5UZXh0LmRpc3BsYXlOYW1lID0gXCJUZXh0XCI7XG5cbmV4cG9ydCB7IFRleHQgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VGV4dC5lc20uanMubWFwXG4iLCJpbXBvcnQgQWxlcnQgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2FsZXJ0JztcbmltcG9ydCB7IEluZm9ybWF0aW9uSWNvbiB9IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9pY29ucyc7XG5pbXBvcnQgVGV4dCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vdGV4dCc7XG5cbmludGVyZmFjZSBQaG9uZVZlcmlmaWNhdGlvbkNvdW50RG93blByb3BzIHtcbiAgcGhvbmVWZXJpZmljYXRpb25Db3VudERvd246IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBob25lVmVyaWZpY2F0aW9uQ291bnREb3duQWxlcnQoe1xuICBwaG9uZVZlcmlmaWNhdGlvbkNvdW50RG93blxufTogUmVhZG9ubHk8UGhvbmVWZXJpZmljYXRpb25Db3VudERvd25Qcm9wcz4pIHtcbiAgcmV0dXJuIChcbiAgICA8QWxlcnRcbiAgICAgIGRhdGEtdGVzdGlkPXsncGhvbmUtdmVyaWZpY2F0aW9uLWNvdW50ZG93bi1hbGVydCd9XG4gICAgICByb2xlPXsnYWxlcnQnfVxuICAgICAgY2xhc3NOYW1lPVwibWItNFwiXG4gICAgICBpY29uPXtJbmZvcm1hdGlvbkljb259XG4gICAgPlxuICAgICAgPFRleHQ+XG4gICAgICAgIElmIHlvdSBuZWVkIGFub3RoZXIgY29kZSwgeW91IGNhbiB0cnkgYWdhaW4gaW57JyAnfVxuICAgICAgICA8Yj5cbiAgICAgICAgICB7cGhvbmVWZXJpZmljYXRpb25Db3VudERvd24gK1xuICAgICAgICAgICAgJ1xcdTAwQTAnICtcbiAgICAgICAgICAgIChwaG9uZVZlcmlmaWNhdGlvbkNvdW50RG93biA9PT0gMSA/ICdzZWNvbmQnIDogJ3NlY29uZHMnKX1cbiAgICAgICAgPC9iPlxuICAgICAgPC9UZXh0PlxuICAgIDwvQWxlcnQ+XG4gICk7XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuLy8gRG8gbm90IGVkaXQgZGlyZWN0bHlcbi8vIEdlbmVyYXRlZCBvbiBUdWUsIDIwIEphbiAyMDI2IDE1OjUwOjMyIEdNVFxudmFyIEVycm9ySWNvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9hLCByZWYpIHtcbiAgICB2YXIgdGl0bGUgPSBfYS50aXRsZSwgcmVzdCA9IF9fcmVzdChfYSwgW1widGl0bGVcIl0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfX2Fzc2lnbih7IHJlZjogcmVmLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCB3aWR0aDogMjQsIGhlaWdodDogMjQgfSwgcmVzdCksXG4gICAgICAgICEhdGl0bGUgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcInRpdGxlXCIsIG51bGwsIHRpdGxlKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsUnVsZTogXCJldmVub2RkXCIsIGQ6IFwiTTEyIDIuMDNjLjMyIDAgLjYyLjE2LjguNDNsMTAuMDggMTcuNDJhLjkyLjkyIDAgMCAxLS44IDEuMzdIMS45MmEuOTIuOTIgMCAwIDEtLjgtMS4zOEwxMS4yMSAyLjQ2YS45NS45NSAwIDAgMSAuNzktLjQzem0wIDE0LjM4Yy0uNzMgMC0xLjIzLjQxLTEuMjMgMS4xMSAwIC43LjUgMS4xMiAxLjIzIDEuMTIuNzEgMCAxLjIyLS40MSAxLjIyLTEuMTIgMC0uNy0uNS0xLjExLTEuMjItMS4xMXptMS4xLTYuODhoLTIuMmwuMTkgNi4yMWgxLjhsLjItNi4yMXpcIiB9KSkpO1xufSk7XG5FcnJvckljb24uZGlzcGxheU5hbWUgPSAnRXJyb3JJY29uJztcblxuZXhwb3J0IHsgRXJyb3JJY29uIH07XG4iLCJpbXBvcnQgeyBFcnJvckljb24gfSBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaWNvbnMnO1xuaW1wb3J0IEFsZXJ0IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9hbGVydCc7XG5pbXBvcnQgVGV4dCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vdGV4dCc7XG5cbmludGVyZmFjZSBFcnJvck1lc3NhZ2VQcm9wcyB7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXJyb3JNZXNzYWdlKHsgZXJyb3JNZXNzYWdlIH06IFJlYWRvbmx5PEVycm9yTWVzc2FnZVByb3BzPikge1xuICByZXR1cm4gKFxuICAgIDxBbGVydFxuICAgICAgZGF0YS10ZXN0aWQ9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICBhcmlhLWxhYmVsPVwiYWxlcnRcIlxuICAgICAgY2xhc3NOYW1lPVwibWItNFwiXG4gICAgICBmdWxsV2lkdGg9e3RydWV9XG4gICAgICBjb2xvcj1cIm5lZ2F0aXZlXCJcbiAgICAgIGljb249e0Vycm9ySWNvbn1cbiAgICA+XG4gICAgICA8VGV4dCBjbGFzc05hbWU9XCJ0ZXh0LTMgc206dGV4dC00XCI+e2Vycm9yTWVzc2FnZX08L1RleHQ+XG4gICAgPC9BbGVydD5cbiAgKTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xyXG5cclxuXHJcbnZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG4vLyBEbyBub3QgZWRpdCBkaXJlY3RseVxuLy8gR2VuZXJhdGVkIG9uIFR1ZSwgMjAgSmFuIDIwMjYgMTU6NTA6MzIgR01UXG52YXIgU3VjY2Vzc0ljb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfYSwgcmVmKSB7XG4gICAgdmFyIHRpdGxlID0gX2EudGl0bGUsIHJlc3QgPSBfX3Jlc3QoX2EsIFtcInRpdGxlXCJdKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX19hc3NpZ24oeyByZWY6IHJlZiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgd2lkdGg6IDI0LCBoZWlnaHQ6IDI0IH0sIHJlc3QpLFxuICAgICAgICAhIXRpdGxlICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0aXRsZVwiLCBudWxsLCB0aXRsZSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLCBkOiBcIk0xMiAxYTExIDExIDAgMSAxIDAgMjIgMTEgMTEgMCAwIDEgMC0yMnptNC42IDcuMDItNi4zNyA2LjM3LTIuODMtMi44M0ExIDEgMCAxIDAgNiAxMi45N2wzLjUzIDMuNTRhMSAxIDAgMCAwIDEuNDIgMEwxOCA5LjQ0YTEgMSAwIDEgMC0xLjQyLTEuNDJ6XCIgfSkpKTtcbn0pO1xuU3VjY2Vzc0ljb24uZGlzcGxheU5hbWUgPSAnU3VjY2Vzc0ljb24nO1xuXG5leHBvcnQgeyBTdWNjZXNzSWNvbiB9O1xuIiwiaW1wb3J0IEFsZXJ0IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9hbGVydCc7XG5pbXBvcnQgVGV4dCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vdGV4dCc7XG5pbXBvcnQgeyBTdWNjZXNzSWNvbiB9IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9pY29ucyc7XG5cbmludGVyZmFjZSBTdWNjZXNzTWVzc2FnZVByb3BzIHtcbiAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFN1Y2Nlc3NNZXNzYWdlKHtcbiAgc3VjY2Vzc01lc3NhZ2Vcbn06IFJlYWRvbmx5PFN1Y2Nlc3NNZXNzYWdlUHJvcHM+KSB7XG4gIHJldHVybiAoXG4gICAgPEFsZXJ0XG4gICAgICBkYXRhLXRlc3RpZD17J3N1Y2Nlc3MtbWVzc2FnZSd9XG4gICAgICByb2xlPVwic3RhdHVzXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJzdWNjZXNzIG1lc3NhZ2VcIlxuICAgICAgY2xhc3NOYW1lPVwibWItNFwiXG4gICAgICBmdWxsV2lkdGg9e3RydWV9XG4gICAgICBjb2xvcj17J25ldXRyYWwnfVxuICAgICAgaWNvbj17U3VjY2Vzc0ljb259XG4gICAgPlxuICAgICAgPFRleHQ+e3N1Y2Nlc3NNZXNzYWdlfTwvVGV4dD5cbiAgICA8L0FsZXJ0PlxuICApO1xufVxuIiwiaW1wb3J0IHsgdXNlUmVmZXJyYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dCc7XG5cbmZ1bmN0aW9uIFByb0FncmVlbWVudFRleHQoKSB7XG4gIGNvbnN0IHsgcHJvSW5mbyB9ID0gdXNlUmVmZXJyYWxDb250ZXh0KCk7XG5cbiAgcmV0dXJuIChcbiAgICA8cFxuICAgICAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwIHRleHQtMSBsZWFkaW5nLWxnIHRleHQtbGVmdCBzbTp0ZXh0LTJcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJwcm9fYWdyZWVtZW50X3RleHRcIlxuICAgID5cbiAgICAgIEJ5IHByb3ZpZGluZyB5b3VyIHBob25lIGFuZCBlbWFpbCBhbmQgc2VsZWN0aW5nIFNlZSBNeSBQcm9zLCB5b3UgYWdyZWUgdG9cbiAgICAgIGJlIGNvbnRhY3RlZCBieSB7cHJvSW5mbz8uY29udGFjdF9uYW1lIHx8ICd5b3VyIHBybyd9IHZpYSBlbWFpbCwgcGhvbmUsXG4gICAgICBhbmQvb3IgdGV4dHMsIGFuZCB0byB0aGUgdXNlIG9mIGFuIGF1dG9tYXRpYyB0ZWxlcGhvbmUgZGlhbGluZyBzeXN0ZW0sXG4gICAgICBhcnRpZmljaWFsIG9yIHByZXJlY29yZGVkIHZvaWNlLCBhbmQvb3IgQUktZ2VuZXJhdGVkIG1lc3NhZ2VzIHRvIGFkdmVydGlzZVxuICAgICAgYW5kIHByb3ZpZGUgc2VydmljZXMgdG8geW91LiBNZXNzYWdpbmcgYW5kIGRhdGEgcmF0ZXMgbWF5IGFwcGx5LlxuICAgICAgPGJyPjwvYnI+XG4gICAgICA8YnI+PC9icj5cbiAgICAgIFlvdSBtYXkgb3B0IG91dCBhdCBhbnkgdGltZSwgaW5jbHVkaW5nIGJ5IHJlcGx5aW5nIFNUT1AgdG8gb3VyIHRleHRzLlxuICAgICAgQ29uc2VudCBpc27igJl0IHJlcXVpcmVkIGZvciBwcm9kdWN0cyBvciBzZXJ2aWNlcyBmcm9tIHRoZSBwcm8uIEhvd2V2ZXIsIGlmXG4gICAgICB5b3Ugb3B0IG91dCBvZiByZWNlaXZpbmcgY2FsbHMgb3IgdGV4dCBtZXNzYWdlcywgeW91IHdvbid0IHJlY2VpdmVcbiAgICAgIGNvbW11bmljYXRpb25zIGZyb20gdGhlIHByby5cbiAgICA8L3A+XG4gICk7XG59XG5cbmV4cG9ydCB7IFByb0FncmVlbWVudFRleHQgfTtcbiIsImZ1bmN0aW9uIFJhbXNleUFncmVlbWVudFRleHQoKSB7XG4gIHJldHVybiAoXG4gICAgPHBcbiAgICAgIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MCB0ZXh0LTEgbGVhZGluZy1sZyB0ZXh0LWxlZnQgc206dGV4dC0yXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwicmFtc2V5X2FncmVlbWVudF90ZXh0XCJcbiAgICA+XG4gICAgICBCeSBwcm92aWRpbmcgeW91ciBwaG9uZSBhbmQgZW1haWwgYW5kIHNlbGVjdGluZyBUZXh0IE1lIG9yIENhbGwgTWUsIHlvdVxuICAgICAgYWdyZWUgdG8gYmUgY29udGFjdGVkIGJ5IFJhbXNleSBTb2x1dGlvbnMgdmlhIGVtYWlsLCBwaG9uZSwgYW5kL29yIHRleHRzLFxuICAgICAgYW5kIHRvIHRoZSB1c2Ugb2YgYW4gYXV0b21hdGljIHRlbGVwaG9uZSBkaWFsaW5nIHN5c3RlbSwgYXJ0aWZpY2lhbCBvclxuICAgICAgcHJlcmVjb3JkZWQgdm9pY2UsIGFuZC9vciBBSS1nZW5lcmF0ZWQgbWVzc2FnZXMgdG8gYWR2ZXJ0aXNlIGFuZCBwcm92aWRlXG4gICAgICBzZXJ2aWNlcyB0byB5b3UuIFlvdSBhbHNvIGFncmVlIHRvIG91cnsnICd9XG4gICAgICA8YVxuICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAgdGV4dC0xIGxlYWRpbmctbGcgIGhvdmVyOnRleHQtZ3JheS05MCBzbTp0ZXh0LTJcIlxuICAgICAgICBocmVmPVwiaHR0cHM6Ly93d3cucmFtc2V5c29sdXRpb25zLmNvbS9jb21wYW55L3BvbGljaWVzL3ByaXZhY3ktcG9saWN5XCJcbiAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJwcml2YWN5X3BvbGljeV9saW5rXCJcbiAgICAgID5cbiAgICAgICAgUHJpdmFjeXsnXFx1MDBBMCd9UG9saWN5XG4gICAgICA8L2E+eycgJ31cbiAgICAgIGFuZHsnICd9XG4gICAgICA8YVxuICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAgdGV4dC0xIGxlYWRpbmctbGcgaG92ZXI6dGV4dC1ncmF5LTkwIHNtOnRleHQtMlwiXG4gICAgICAgIGhyZWY9XCJodHRwczovL3d3dy5yYW1zZXlzb2x1dGlvbnMuY29tL2NvbXBhbnkvcG9saWNpZXMvdGVybXMtb2YtdXNlXCJcbiAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0ZXJtc19vZl91c2VfbGlua1wiXG4gICAgICA+XG4gICAgICAgIFRlcm1zeydcXHUwMEEwJ31vZnsnXFx1MDBBMCd9VXNlXG4gICAgICA8L2E+XG4gICAgICB7Jyd9LiBNZXNzYWdpbmcgYW5kIGRhdGEgcmF0ZXMgbWF5IGFwcGx5LlxuICAgICAgPGJyPjwvYnI+XG4gICAgICA8YnI+PC9icj5cbiAgICAgIFlvdSBtYXkgb3B0IG91dCBhdCBhbnkgdGltZSwgaW5jbHVkaW5nIGJ5IHJlcGx5aW5nIFNUT1AgdG8gb3VyIHRleHRzLlxuICAgICAgQ29uc2VudCBpc24ndCByZXF1aXJlZCBmb3IgcHJvZHVjdHMgb3Igc2VydmljZXMgZnJvbSBSYW1zZXkgU29sdXRpb25zLlxuICAgICAgSG93ZXZlciwgb3B0aW5nIG91dCBtYXkgaW1wYWN0IHlvdXIgZXhwZXJpZW5jZSB3aXRoIHRoZSBzZXJ2aWNlKHMpIHRoYXRcbiAgICAgIHJlbHkgb24gY29tbXVuaWNhdGlvbiB2aWEgY2FsbHMgYW5kIHRleHRzLlxuICAgIDwvcD5cbiAgKTtcbn1cblxuZXhwb3J0IHsgUmFtc2V5QWdyZWVtZW50VGV4dCB9O1xuIiwiaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgeXVwUmVzb2x2ZXIgfSBmcm9tICdAaG9va2Zvcm0vcmVzb2x2ZXJzL3l1cCc7XG5pbXBvcnQgRm9ybUZpZWxkIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9mb3JtLWZpZWxkJztcbmltcG9ydCB7IHVzZUdBRm9ybVRyYWNraW5nLCB1c2VXaW5kb3dTaXplIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkL2hvb2tzJztcbmltcG9ydCB7IHVzZVJlZmVycmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgZmlyZU9wdGltaXplbHlFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyBwaG9uZVNjaGVtYSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYXMvcGhvbmVTY2hlbWEnO1xuaW1wb3J0IHsgdXNlV2l6YXJkIH0gZnJvbSAncmVhY3QtdXNlLXdpemFyZCc7XG5pbXBvcnQgeyBzdGFydFZlcmlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2FwaSc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9idXR0b24nO1xuaW1wb3J0IHsgQ2hhdEljb24sIFBob25lSWNvbiB9IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9pY29ucyc7XG5pbXBvcnQgeyBQYXR0ZXJuRm9ybWF0IH0gZnJvbSAncmVhY3QtbnVtYmVyLWZvcm1hdCc7XG5pbXBvcnQgSW5wdXQgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2lucHV0JztcbmltcG9ydCB7IE9wdGltaXplbHlDb250ZXh0IH0gZnJvbSAnQG9wdGltaXplbHkvcmVhY3Qtc2RrJztcbmltcG9ydCB7IHRyYWNrU3RlcENvbXBsZXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9hbmFseXRpY3MnO1xuaW1wb3J0IHsgRm9ybU5hbWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMvRm9ybU5hbWVPcHRpb25zJztcbmltcG9ydCB7XG4gIFN0YW5kYXJkU3RlcFN1YnRpdGxlVGV4dCxcbiAgU3RhbmRhcmRTdGVwVGl0bGUsXG4gIFN0ZXBXcmFwcGVyXG59IGZyb20gJy4uLy4uL3N0ZXBDb21wb25lbnRzJztcbmltcG9ydCB7IFBob25lVmVyaWZpY2F0aW9uQ291bnREb3duQWxlcnQgfSBmcm9tICcuLi8uLi9QaG9uZVZlcmlmaWNhdGlvbkNvdW50RG93bkFsZXJ0JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IFJhbXNleUFncmVlbWVudFRleHQgfSBmcm9tICcuLi8uLi9hZ3JlZW1lbnRzJztcblxuaW50ZXJmYWNlIFBob25lU3RlcEZpZWxkcyB7XG4gIHBob25lOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIFBob25lU3RlcCgpIHtcbiAgY29uc3QgeyBvcHRpbWl6ZWx5IH0gPSB1c2VDb250ZXh0KE9wdGltaXplbHlDb250ZXh0KTtcbiAgY29uc3QgZm9ybVJlZiA9IHVzZUdBRm9ybVRyYWNraW5nKG9wdGltaXplbHksICdwaG9uZV9zdGVwJyk7XG4gIGNvbnN0IHsgbmV4dFN0ZXAsIGFjdGl2ZVN0ZXAgfSA9IHVzZVdpemFyZCgpO1xuICBjb25zdCBbZXJyb3JNZXNzYWdlLCBzZXRFcnJvck1lc3NhZ2VdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCB2ZXJpZmljYXRpb25UeXBlID0gdXNlUmVmPCdjYWxsJyB8ICdzbXMnIHwgJyc+KCcnKTtcbiAgY29uc3QgeyB3aWR0aCB9ID0gdXNlV2luZG93U2l6ZSgpO1xuICBjb25zdCBpbnB1dFNpemUgPSB3aWR0aCA+IDU5OSA/ICdsZycgOiAnbWQnO1xuICBjb25zdCB7XG4gICAgcmVmZXJyYWwsXG4gICAgdXBkYXRlUmVmZXJyYWwsXG4gICAgcGhvbmVWZXJpZmljYXRpb25Db3VudERvd24sXG4gICAgdXBkYXRlUGhvbmVWZXJpZmljYXRpb25Db3VudERvd25cbiAgfSA9IHVzZVJlZmVycmFsQ29udGV4dCgpO1xuICBjb25zdCB7XG4gICAgcmVnaXN0ZXIsXG4gICAgaGFuZGxlU3VibWl0LFxuICAgIGZvcm1TdGF0ZTogeyBlcnJvcnMgfSxcbiAgICBzZXRWYWx1ZVxuICB9ID0gdXNlRm9ybTxQaG9uZVN0ZXBGaWVsZHM+KHtcbiAgICBkZWZhdWx0VmFsdWVzOiB7XG4gICAgICAuLi5yZWZlcnJhbFxuICAgIH0sXG4gICAgcmVzb2x2ZXI6IHl1cFJlc29sdmVyKHBob25lU2NoZW1hKVxuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBvblZhbGlkU3VibWl0KHZhbHVlczogUGhvbmVTdGVwRmllbGRzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlbXBWZXJpZmljYXRpb25UeXBlID1cbiAgICAgICAgdmVyaWZpY2F0aW9uVHlwZS5jdXJyZW50ID09PSAnY2FsbCcgPyAnY2FsbCcgOiAnc21zJztcbiAgICAgIHNldEVycm9yTWVzc2FnZSgnJyk7XG4gICAgICBjb25zdCBwaG9uZSA9IHZhbHVlcy5waG9uZS5yZXBsYWNlQWxsKC9cXEQvZywgJycpO1xuICAgICAgdXBkYXRlUmVmZXJyYWwoe1xuICAgICAgICBwaG9uZSxcbiAgICAgICAgdmVyaWZpY2F0aW9uX3R5cGU6IHRlbXBWZXJpZmljYXRpb25UeXBlXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHN0YXJ0VmVyaWZpY2F0aW9uKHBob25lLCB0ZW1wVmVyaWZpY2F0aW9uVHlwZSk7XG4gICAgICBmaXJlT3B0aW1pemVseUV2ZW50KG9wdGltaXplbHksICdwaG9uZV9zdGVwX2NvbXBsZXRlZCcpO1xuICAgICAgdXBkYXRlUGhvbmVWZXJpZmljYXRpb25Db3VudERvd24oMzApO1xuICAgICAgYXdhaXQgbmV4dFN0ZXAoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICdTb3JyeSwgd2UgY291bGRu4oCZdCBzZW5kIGEgdmVyaWZpY2F0aW9uIGNvZGUuIFRyeVxcdTAwQTBhZ2Fpbi4nXG4gICAgICApO1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdmVyaWZpY2F0aW9uVHlwZS5jdXJyZW50ID0gJyc7XG4gICAgfVxuXG4gICAgdHJhY2tTdGVwQ29tcGxldGVkKHtcbiAgICAgIHN0ZXA6IGFjdGl2ZVN0ZXAgKyAxLFxuICAgICAgc3RlcF9uYW1lOiAncGhvbmVfc3RlcCcsXG4gICAgICBzdGVwX2xhYmVsOiBcIldoYXQncyB5b3VyIHBob25lIG51bWJlcj9cIixcbiAgICAgIGFuc3dlcl9sYWJlbHM6IFsnUGhvbmUnXSxcbiAgICAgIGFuc3dlcl92YWx1ZXM6IFtyZWZlcnJhbC5waG9uZSA/PyAnJ10sXG4gICAgICBmb3JtX25hbWU6IEZvcm1OYW1lT3B0aW9ucy5UQVhfUkVGRVJSQUxfRk9STVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0Q2FsbFZlcmlmaWNhdGlvbigpIHtcbiAgICB2ZXJpZmljYXRpb25UeXBlLmN1cnJlbnQgPSAnY2FsbCc7XG4gICAgZm9ybVJlZi5jdXJyZW50Py5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnc3VibWl0JywgeyBjYW5jZWxhYmxlOiB0cnVlIH0pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFRleHRpbmdWZXJpZmNhdGlvbigpIHtcbiAgICB2ZXJpZmljYXRpb25UeXBlLmN1cnJlbnQgPSAnc21zJztcbiAgICBmb3JtUmVmLmN1cnJlbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzdWJtaXQnLCB7IGNhbmNlbGFibGU6IHRydWUgfSkpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U3RlcFdyYXBwZXI+XG4gICAgICA8Zm9ybSByZWY9e2Zvcm1SZWZ9IG9uU3VibWl0PXtoYW5kbGVTdWJtaXQob25WYWxpZFN1Ym1pdCl9PlxuICAgICAgICA8U3RhbmRhcmRTdGVwVGl0bGU+V2hhdCdzIHlvdXIgcGhvbmUgbnVtYmVyPzwvU3RhbmRhcmRTdGVwVGl0bGU+XG4gICAgICAgIDxTdGFuZGFyZFN0ZXBTdWJ0aXRsZVRleHQ+XG4gICAgICAgICAgVG8gbWFrZSBzdXJlIHdl4oCZdmUgZ290IHRoZSByaWdodCBudW1iZXIsIHdl4oCZbGwgc2VuZCB5b3UgYSBzaXhcbiAgICAgICAgICB7J1xcdTIwMTEnfWRpZ2l0XG4gICAgICAgICAgeydcXHUwMEEwJ31jb2RlLlxuICAgICAgICA8L1N0YW5kYXJkU3RlcFN1YnRpdGxlVGV4dD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbS1ibG9jay14bFwiPlxuICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgIGlkPVwicGhvbmVcIlxuICAgICAgICAgICAgbGFiZWw9XCJQaG9uZVwiXG4gICAgICAgICAgICBzaXplPXtpbnB1dFNpemV9XG4gICAgICAgICAgICBpbnZhbGlkPXshIWVycm9ycy5waG9uZX1cbiAgICAgICAgICAgIGVycm9ycz17W2Vycm9ycy5waG9uZT8ubWVzc2FnZV19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgeygpID0+IChcbiAgICAgICAgICAgICAgPFBhdHRlcm5Gb3JtYXRcbiAgICAgICAgICAgICAgICB7Li4ucmVnaXN0ZXIoJ3Bob25lJyl9XG4gICAgICAgICAgICAgICAgdHlwZT1cInRlbFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJwaG9uZVwiXG4gICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwidGVsXCJcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3JlZmVycmFsPy5waG9uZX1cbiAgICAgICAgICAgICAgICBzaXplPXtpbnB1dFNpemV9XG4gICAgICAgICAgICAgICAgaW52YWxpZD17ISFlcnJvcnMucGhvbmV9XG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0YXhfcGhvbmVfaW5wdXRcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiKF9fXykgX19fLV9fX19cIlxuICAgICAgICAgICAgICAgIGZvcm1hdD1cIigjIyMpICMjIy0jIyMjXCJcbiAgICAgICAgICAgICAgICBtYXNrPVwiX1wiXG4gICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRWYWx1ZSgncGhvbmUnLCB2YWx1ZS5mb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjdXN0b21JbnB1dD17SW5wdXR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7cGhvbmVWZXJpZmljYXRpb25Db3VudERvd24gPiAwICYmIChcbiAgICAgICAgICA8UGhvbmVWZXJpZmljYXRpb25Db3VudERvd25BbGVydFxuICAgICAgICAgICAgcGhvbmVWZXJpZmljYXRpb25Db3VudERvd249e3Bob25lVmVyaWZpY2F0aW9uQ291bnREb3dufVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG5cbiAgICAgICAge2Vycm9yTWVzc2FnZSAmJiA8RXJyb3JNZXNzYWdlIGVycm9yTWVzc2FnZT17ZXJyb3JNZXNzYWdlfSAvPn1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yIGl0ZW1zLWNlbnRlciBtLWJsb2NrLXhsXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBpY29uPXtDaGF0SWNvbn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIiF3LWZ1bGxcIlxuICAgICAgICAgICAgZnVsbFdpZHRoT25Nb2JpbGU9e3RydWV9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInRheF90ZXh0X21lX2J1dHRvblwiXG4gICAgICAgICAgICBzaXplPXt1c2VXaW5kb3dTaXplKCk/LndpZHRoID4gNTk5ID8gJ2xhcmdlJyA6ICdtZWRpdW0nfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlbmQgdmVyaWZpY2F0aW9uIGNvZGUgdmlhIHRleHRcIlxuICAgICAgICAgICAgbG9hZGluZz17dmVyaWZpY2F0aW9uVHlwZS5jdXJyZW50ID09PSAnc21zJ31cbiAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICBzZXRUZXh0aW5nVmVyaWZjYXRpb24oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0VGV4dGluZ1ZlcmlmY2F0aW9uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3Bob25lVmVyaWZpY2F0aW9uQ291bnREb3duID4gMH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dmVyaWZpY2F0aW9uVHlwZS5jdXJyZW50ID09PSAnc21zJyA/ICdUZXh0aW5nLi4uJyA6ICdUZXh0IE1lJ31cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIGljb249e1Bob25lSWNvbn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIiF3LWZ1bGxcIlxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cInN1YnRsZVwiXG4gICAgICAgICAgICBmdWxsV2lkdGhPbk1vYmlsZT17dHJ1ZX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidGF4X2NhbGxfbWVfYnV0dG9uXCJcbiAgICAgICAgICAgIHNpemU9e3dpZHRoID4gNTk5ID8gJ2xhcmdlJyA6ICdtZWRpdW0nfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlbmQgdmVyaWZpY2F0aW9uIGNvZGUgdmlhIHBob25lIGNhbGxcIlxuICAgICAgICAgICAgbG9hZGluZz17dmVyaWZpY2F0aW9uVHlwZS5jdXJyZW50ID09PSAnY2FsbCd9XG4gICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgc2V0Q2FsbFZlcmlmaWNhdGlvbigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRDYWxsVmVyaWZpY2F0aW9uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3Bob25lVmVyaWZpY2F0aW9uQ291bnREb3duID4gMH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dmVyaWZpY2F0aW9uVHlwZS5jdXJyZW50ID09PSAnY2FsbCcgPyAnQ2FsbGluZy4uLicgOiAnQ2FsbCBNZSd9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8UmFtc2V5QWdyZWVtZW50VGV4dCAvPlxuICAgICAgPC9mb3JtPlxuICAgIDwvU3RlcFdyYXBwZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFBob25lU3RlcCB9O1xuIiwiZXhwb3J0IGNvbnN0IFBIT05FX1ZFUklGSUNBVElPTl9DT0RFX1JFR0VYID0gL15cXGR7Nn0kLztcbiIsImltcG9ydCAqIGFzIFl1cCBmcm9tICd5dXAnO1xuaW1wb3J0IHsgUEhPTkVfVkVSSUZJQ0FUSU9OX0NPREVfUkVHRVggfSBmcm9tICcuL3Bob25lVmVyaWZpY2F0aW9uQ29kZVJlZ2V4JztcblxuY29uc3QgcGhvbmVWZXJpZmljYXRpb25TY2hlbWEgPSBZdXAub2JqZWN0KCkuc2hhcGUoe1xuICB2ZXJpZmljYXRpb25fY29kZTogWXVwLnN0cmluZygpXG4gICAgLnRyaW0oKVxuICAgIC5yZXF1aXJlZCgnUGxlYXNlIGVudGVyIHlvdXIgc2l4XFx1MjAxMWRpZ2l0IHZlcmlmaWNhdGlvblxcdTAwQTBjb2RlLicpXG4gICAgLm1hdGNoZXMoXG4gICAgICBQSE9ORV9WRVJJRklDQVRJT05fQ09ERV9SRUdFWCxcbiAgICAgICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBzaXhcXHUyMDExZGlnaXQgdmVyaWZpY2F0aW9uXFx1MDBBMGNvZGUuJ1xuICAgIClcbn0pO1xuXG5leHBvcnQgeyBwaG9uZVZlcmlmaWNhdGlvblNjaGVtYSB9O1xuIiwiaW1wb3J0IHsgZ2V0VGF4RnVsbFVybCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyBSZWZlcnJhbEZvcm1EYXRhIH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQgeyBQcm9EYXRhIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IGlzUGF1bEhvb2RSZWZlcnJhbCB9IGZyb20gJy4uL3V0aWxzJztcblxuaW50ZXJmYWNlIFJlZmVycmFsUmVzcG9uc2Uge1xuICByZXF1ZXN0X2tleTogc3RyaW5nO1xuICBvcHBvcnR1bml0eV9rZXlzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIFJlZmVycmFsUmVxdWVzdEJvZHkge1xuICB0YXhSZWZlcnJhbDoge1xuICAgIGZpcnN0TmFtZTogc3RyaW5nO1xuICAgIGxhc3ROYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBwaG9uZTogc3RyaW5nO1xuICAgIHBvc3RhbENvZGU6IHN0cmluZztcbiAgICBpbnRlcmVzdHM6IHN0cmluZ1tdO1xuICAgIGludGVudHM6IHN0cmluZ1tdO1xuICAgIHF1ZXN0aW9uczogc3RyaW5nO1xuICAgIGFkdmljZTogc3RyaW5nW107XG4gICAgdGF4SGlzdG9yeTogc3RyaW5nO1xuICAgIGNvbXBsZXhpdHlDb25jZXJuOiBzdHJpbmc7XG4gICAgdGF4Q29uZmlkZW5jZTogc3RyaW5nO1xuICAgIGltcG9ydGFuY2U6IHN0cmluZztcbiAgICBsZWFkU291cmNlOiBzdHJpbmc7XG4gICAgdGF4U2l0dWF0aW9uOiBzdHJpbmc7XG4gICAgcHJvczogW1xuICAgICAge1xuICAgICAgICBwYXJ0bmVyVXJuOiBzdHJpbmc7XG4gICAgICAgIGNvbnRhY3ROYW1lOiBzdHJpbmc7XG4gICAgICAgIGNvbXBhbnlOYW1lOiBzdHJpbmc7XG4gICAgICAgIGFncmVlbWVudDogc3RyaW5nO1xuICAgICAgfVxuICAgIF07XG4gICAgYWdyZWVtZW50OiBzdHJpbmc7XG4gICAgcGhQZXJzb25hbEludGVudHM/OiBzdHJpbmdbXTtcbiAgICBwaFNlbGZFbXBsb3llZFNtYWxsQnVzaW5lc3NJbnRlbnQ/OiBzdHJpbmdbXTtcbiAgICBwaFRheElzc3Vlcz86IHN0cmluZ1tdO1xuICAgIHBoVGF4QWR2aWNlPzogc3RyaW5nW107XG4gICAgcGhTb21ldGhpbmdFbHNlPzogc3RyaW5nO1xuICAgIHBoVXJnZW5jeT86IHN0cmluZztcbiAgfTtcbiAgcmVjYXB0Y2hhOiB7IG92ZXJyaWRlPzogc3RyaW5nOyByZXNwb25zZT86IHN0cmluZyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVSZWZlcnJhbChcbiAgcmVxdWVzdDogUmVmZXJyYWxGb3JtRGF0YSxcbiAgcmVjYXB0Y2hhOiBzdHJpbmcsXG4gIHByb0luZm86IFByb0RhdGEsXG4gIHByb0FncmVlbWVudDogc3RyaW5nLFxuICByYW1zZXlBZ3JlZW1lbnQ6IHN0cmluZyxcbiAgYmFzZVVSTCA9IGdldFRheEZ1bGxVcmwoKVxuKSB7XG4gIHJlcXVlc3QubGVhZFNvdXJjZSA9XG4gICAgbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoJ2xlYWRfc291cmNlJykgPz8gJyc7XG4gIGNvbnN0IGJvZHkgPSBjcmVhdGVSZWZlcnJhbFJlcXVlc3RCb2R5KFxuICAgIHJlcXVlc3QsXG4gICAgcmVjYXB0Y2hhLFxuICAgIHByb0luZm8sXG4gICAgcHJvQWdyZWVtZW50LFxuICAgIHJhbXNleUFncmVlbWVudFxuICApO1xuICBjb25zdCBmdWxsVXJsID0gYCR7YmFzZVVSTH0vYXBpL3JlZmVycmFsYDtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmdWxsVXJsLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSlcbiAgfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gIH1cbiAgcmV0dXJuIChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIFJlZmVycmFsUmVzcG9uc2U7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlY2FwdGNoYShyZXNwb25zZVRva2VuOiBzdHJpbmcpIHtcbiAgY29uc3QgYnlwYXNzVmVyaWZpY2F0aW9uUXVlcnlQYXJhbSA9XG4gICAgbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoJ2J5cGFzc192ZXJpZmljYXRpb24nKSA/P1xuICAgICcnO1xuICBpZiAoYnlwYXNzVmVyaWZpY2F0aW9uUXVlcnlQYXJhbSkge1xuICAgIHJldHVybiB7IG92ZXJyaWRlOiBieXBhc3NWZXJpZmljYXRpb25RdWVyeVBhcmFtIH07XG4gIH1cbiAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3BvbnNlVG9rZW4gfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVmZXJyYWxSZXF1ZXN0Qm9keShcbiAgcmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGEsXG4gIHJlc3BvbnNlVG9rZW46IHN0cmluZyxcbiAgcHJvSW5mbzogUHJvRGF0YSxcbiAgcHJvQWdyZWVtZW50VGV4dDogc3RyaW5nLFxuICByYW1zZXlBZ3JlZW1lbnRUZXh0OiBzdHJpbmdcbik6IFJlZmVycmFsUmVxdWVzdEJvZHkge1xuICBjb25zdCB0YXhSZWZlcnJhbFJlcXVlc3RCb2R5OiBSZWZlcnJhbFJlcXVlc3RCb2R5ID0ge1xuICAgIHRheFJlZmVycmFsOiB7XG4gICAgICBmaXJzdE5hbWU6IHJlZmVycmFsLmZpcnN0X25hbWUsXG4gICAgICBsYXN0TmFtZTogcmVmZXJyYWwubGFzdF9uYW1lLFxuICAgICAgZW1haWw6IHJlZmVycmFsLmVtYWlsLFxuICAgICAgcGhvbmU6IHJlZmVycmFsLnBob25lLnJlcGxhY2UoL1xcRC9nLCAnJyksXG4gICAgICBwb3N0YWxDb2RlOiByZWZlcnJhbC5wb3N0YWxfY29kZSxcbiAgICAgIGludGVyZXN0czogcmVmZXJyYWwuaW50ZXJlc3RzLFxuICAgICAgaW50ZW50czogcmVmZXJyYWwudGF4X2ludGVudHMsXG4gICAgICBxdWVzdGlvbnM6IHJlZmVycmFsLnRheF9xdWVzdGlvbnMsXG4gICAgICBhZHZpY2U6IHJlZmVycmFsLnRheF9hZHZpY2UsXG4gICAgICB0YXhIaXN0b3J5OiByZWZlcnJhbC50YXhfaGlzdG9yeSxcbiAgICAgIGNvbXBsZXhpdHlDb25jZXJuOiByZWZlcnJhbC5jb21wbGV4aXR5X2NvbmNlcm4sXG4gICAgICB0YXhDb25maWRlbmNlOiByZWZlcnJhbC50YXhfY29uZmlkZW5jZSxcbiAgICAgIGltcG9ydGFuY2U6IHJlZmVycmFsLmltcG9ydGFuY2UsXG4gICAgICBsZWFkU291cmNlOiByZWZlcnJhbC5sZWFkU291cmNlLFxuICAgICAgdGF4U2l0dWF0aW9uOiByZWZlcnJhbC50YXhfc2l0dWF0aW9uLFxuICAgICAgcHJvczogW1xuICAgICAgICB7XG4gICAgICAgICAgcGFydG5lclVybjogcHJvSW5mby5wYXJ0bmVyX3VybixcbiAgICAgICAgICBjb250YWN0TmFtZTogcHJvSW5mby5jb250YWN0X25hbWUsXG4gICAgICAgICAgY29tcGFueU5hbWU6IHByb0luZm8uY29tcGFueV9uYW1lLFxuICAgICAgICAgIGFncmVlbWVudDogcHJvQWdyZWVtZW50VGV4dFxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgYWdyZWVtZW50OiByYW1zZXlBZ3JlZW1lbnRUZXh0XG4gICAgfSxcbiAgICByZWNhcHRjaGE6IGNyZWF0ZVJlY2FwdGNoYShyZXNwb25zZVRva2VuKVxuICB9O1xuICBpZiAoaXNQYXVsSG9vZFJlZmVycmFsKHByb0luZm8pKSB7XG4gICAgcmV0dXJuIGFwcGVuZFBIUmVmZXJyYWxEYXRhKHRheFJlZmVycmFsUmVxdWVzdEJvZHksIHJlZmVycmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGF4UmVmZXJyYWxSZXF1ZXN0Qm9keTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBlbmRQSFJlZmVycmFsRGF0YShcbiAgcmVmZXJyYWxSZXF1ZXN0OiBSZWZlcnJhbFJlcXVlc3RCb2R5LFxuICByZWZlcnJhbERhdGE6IFJlZmVycmFsRm9ybURhdGFcbik6IFJlZmVycmFsUmVxdWVzdEJvZHkge1xuICByZXR1cm4ge1xuICAgIC4uLnJlZmVycmFsUmVxdWVzdCxcbiAgICB0YXhSZWZlcnJhbDoge1xuICAgICAgLi4ucmVmZXJyYWxSZXF1ZXN0LnRheFJlZmVycmFsLFxuICAgICAgcGhQZXJzb25hbEludGVudHM6IHJlZmVycmFsRGF0YS5waF9wZXJzb25hbF9pbnRlbnRzLFxuICAgICAgcGhTZWxmRW1wbG95ZWRTbWFsbEJ1c2luZXNzSW50ZW50OlxuICAgICAgICByZWZlcnJhbERhdGEucGhfc2VsZl9lbXBsb3llZF9zbWFsbF9idXNpbmVzc19pbnRlbnQsXG4gICAgICBwaFRheElzc3VlczogcmVmZXJyYWxEYXRhLnBoX3RheF9pc3N1ZXMsXG4gICAgICBwaFRheEFkdmljZTogcmVmZXJyYWxEYXRhLnBoX3RheF9hZHZpY2UsXG4gICAgICBwaFNvbWV0aGluZ0Vsc2U6IHJlZmVycmFsRGF0YS5waF9zb21ldGhpbmdfZWxzZSxcbiAgICAgIHBoVXJnZW5jeTogcmVmZXJyYWxEYXRhLnBoX3VyZ2VuY3lcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCB7IGNyZWF0ZVJlZmVycmFsLCBSZWZlcnJhbFJlc3BvbnNlIH07XG4iLCJpbXBvcnQgZSx7Y3JlYXRlQ29udGV4dCBhcyB0LHVzZVN0YXRlIGFzIHIsdXNlUmVmIGFzIG8sdXNlRWZmZWN0IGFzIG4sdXNlQ2FsbGJhY2sgYXMgYSx1c2VNZW1vIGFzIGMsdXNlQ29udGV4dCBhcyBpfWZyb21cInJlYWN0XCI7XG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi92YXIgcz1mdW5jdGlvbigpe3JldHVybiBzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPTEsbz1hcmd1bWVudHMubGVuZ3RoO3I8bztyKyspZm9yKHZhciBuIGluIHQ9YXJndW1lbnRzW3JdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKTtyZXR1cm4gZX0scy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIHUoZSx0LHIsbyl7cmV0dXJuIG5ldyhyfHwocj1Qcm9taXNlKSkoKGZ1bmN0aW9uKG4sYSl7ZnVuY3Rpb24gYyhlKXt0cnl7cyhvLm5leHQoZSkpfWNhdGNoKGUpe2EoZSl9fWZ1bmN0aW9uIGkoZSl7dHJ5e3Moby50aHJvdyhlKSl9Y2F0Y2goZSl7YShlKX19ZnVuY3Rpb24gcyhlKXt2YXIgdDtlLmRvbmU/bihlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiByP3Q6bmV3IHIoKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYyxpKX1zKChvPW8uYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9ZnVuY3Rpb24gbChlLHQpe3ZhciByLG8sbixhLGM9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmblswXSl0aHJvdyBuWzFdO3JldHVybiBuWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGE9e25leHQ6aSgwKSx0aHJvdzppKDEpLHJldHVybjppKDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihhW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGE7ZnVuY3Rpb24gaShhKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe2lmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtjOyl0cnl7aWYocj0xLG8mJihuPTImYVswXT9vLnJldHVybjphWzBdP28udGhyb3d8fCgobj1vLnJldHVybikmJm4uY2FsbChvKSwwKTpvLm5leHQpJiYhKG49bi5jYWxsKG8sYVsxXSkpLmRvbmUpcmV0dXJuIG47c3dpdGNoKG89MCxuJiYoYT1bMiZhWzBdLG4udmFsdWVdKSxhWzBdKXtjYXNlIDA6Y2FzZSAxOm49YTticmVhaztjYXNlIDQ6cmV0dXJuIGMubGFiZWwrKyx7dmFsdWU6YVsxXSxkb25lOiExfTtjYXNlIDU6Yy5sYWJlbCsrLG89YVsxXSxhPVswXTtjb250aW51ZTtjYXNlIDc6YT1jLm9wcy5wb3AoKSxjLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG49Yy50cnlzLChuPW4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0pfHw2IT09YVswXSYmMiE9PWFbMF0pKXtjPTA7Y29udGludWV9aWYoMz09PWFbMF0mJighbnx8YVsxXT5uWzBdJiZhWzFdPG5bM10pKXtjLmxhYmVsPWFbMV07YnJlYWt9aWYoNj09PWFbMF0mJmMubGFiZWw8blsxXSl7Yy5sYWJlbD1uWzFdLG49YTticmVha31pZihuJiZjLmxhYmVsPG5bMl0pe2MubGFiZWw9blsyXSxjLm9wcy5wdXNoKGEpO2JyZWFrfW5bMl0mJmMub3BzLnBvcCgpLGMudHJ5cy5wb3AoKTtjb250aW51ZX1hPXQuY2FsbChlLGMpfWNhdGNoKGUpe2E9WzYsZV0sbz0wfWZpbmFsbHl7cj1uPTB9aWYoNSZhWzBdKXRocm93IGFbMV07cmV0dXJue3ZhbHVlOmFbMF0/YVsxXTp2b2lkIDAsZG9uZTohMH19KFthLGldKX19fXZhciBmLHA9ZnVuY3Rpb24oZSl7dmFyIHQ7ZT9mdW5jdGlvbihlKXtpZihlKWZvcig7ZS5sYXN0Q2hpbGQ7KWUubGFzdENoaWxkLnJlbW92ZSgpfShcInN0cmluZ1wiPT10eXBlb2YgZT9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTplKToodD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmdyZWNhcHRjaGEtYmFkZ2VcIikpJiZ0LnBhcmVudE5vZGUmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodC5wYXJlbnROb2RlKX0sZD1mdW5jdGlvbihlLHQpe3AodCksd2luZG93Ll9fX2dyZWNhcHRjaGFfY2ZnPXZvaWQgMDt2YXIgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI1wiK2UpO3ImJnIucmVtb3ZlKCksZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjXj1cImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tL3JlY2FwdGNoYS9yZWxlYXNlc1wiXScpO2UmJmUucmVtb3ZlKCl9KCl9LHk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZW5kZXIscj1lLm9uTG9hZENhbGxiYWNrTmFtZSxvPWUubGFuZ3VhZ2Usbj1lLm9uTG9hZCxhPWUudXNlUmVjYXB0Y2hhTmV0LGM9ZS51c2VFbnRlcnByaXNlLGk9ZS5zY3JpcHRQcm9wcyxzPXZvaWQgMD09PWk/e306aSx1PXMubm9uY2UsbD12b2lkIDA9PT11P1wiXCI6dSxmPXMuZGVmZXIscD12b2lkIDAhPT1mJiZmLGQ9cy5hc3luYyx5PXZvaWQgMCE9PWQmJmQsbT1zLmlkLHY9dm9pZCAwPT09bT9cIlwiOm0sYj1zLmFwcGVuZFRvLGg9dnx8XCJnb29nbGUtcmVjYXB0Y2hhLXYzXCI7aWYoZnVuY3Rpb24oZSl7cmV0dXJuISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI1wiK2UpfShoKSluKCk7ZWxzZXt2YXIgZz1mdW5jdGlvbihlKXtyZXR1cm5cImh0dHBzOi8vd3d3LlwiKyhlLnVzZVJlY2FwdGNoYU5ldD9cInJlY2FwdGNoYS5uZXRcIjpcImdvb2dsZS5jb21cIikrXCIvcmVjYXB0Y2hhL1wiKyhlLnVzZUVudGVycHJpc2U/XCJlbnRlcnByaXNlLmpzXCI6XCJhcGkuanNcIil9KHt1c2VFbnRlcnByaXNlOmMsdXNlUmVjYXB0Y2hhTmV0OmF9KSxTPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7Uy5pZD1oLFMuc3JjPWcrXCI/cmVuZGVyPVwiK3QrKFwiZXhwbGljaXRcIj09PXQ/XCImb25sb2FkPVwiK3I6XCJcIikrKG8/XCImaGw9XCIrbzpcIlwiKSxsJiYoUy5ub25jZT1sKSxTLmRlZmVyPSEhcCxTLmFzeW5jPSEheSxTLm9ubG9hZD1uLChcImJvZHlcIj09PWI/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0pLmFwcGVuZENoaWxkKFMpfX0sbT1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmISFwcm9jZXNzLmVudiYmXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOVnx8Y29uc29sZS53YXJuKGUpfTshZnVuY3Rpb24oZSl7ZS5TQ1JJUFRfTk9UX0FWQUlMQUJMRT1cIlJlY2FwdGNoYSBzY3JpcHQgaXMgbm90IGF2YWlsYWJsZVwifShmfHwoZj17fSkpO3ZhciB2PXQoe2V4ZWN1dGVSZWNhcHRjaGE6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihcIkdvb2dsZVJlQ2FwdGNoYSBDb250ZXh0IGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQsIGlmIHlvdSBhcmUgdXNpbmcgdXNlR29vZ2xlUmVDYXB0Y2hhIGhvb2ssIG1ha2Ugc3VyZSB0aGUgaG9vayBpcyBjYWxsZWQgaW5zaWRlIGNvbXBvbmVudCB3cmFwcGVkIGJ5IEdvb2dsZVJlY2FwdGNoYVByb3ZpZGVyXCIpfX0pLGI9di5Db25zdW1lcjtmdW5jdGlvbiBoKHQpe3ZhciBpPXQucmVDYXB0Y2hhS2V5LHU9dC51c2VFbnRlcnByaXNlLGw9dm9pZCAwIT09dSYmdSxwPXQudXNlUmVjYXB0Y2hhTmV0LGI9dm9pZCAwIT09cCYmcCxoPXQuc2NyaXB0UHJvcHMsZz10Lmxhbmd1YWdlLFM9dC5jb250YWluZXIsdz10LmNoaWxkcmVuLCQ9cihudWxsKSxDPSRbMF0sUD0kWzFdLHg9byhpKSxFPUpTT04uc3RyaW5naWZ5KGgpLFI9SlNPTi5zdHJpbmdpZnkobnVsbD09Uz92b2lkIDA6Uy5wYXJhbWV0ZXJzKTtuKChmdW5jdGlvbigpe2lmKGkpe3ZhciBlPShudWxsPT1oP3ZvaWQgMDpoLmlkKXx8XCJnb29nbGUtcmVjYXB0Y2hhLXYzXCIsdD0obnVsbD09aD92b2lkIDA6aC5vbkxvYWRDYWxsYmFja05hbWUpfHxcIm9uUmVjYXB0Y2hhTG9hZENhbGxiYWNrXCI7d2luZG93W3RdPWZ1bmN0aW9uKCl7dmFyIGU9bD93aW5kb3cuZ3JlY2FwdGNoYS5lbnRlcnByaXNlOndpbmRvdy5ncmVjYXB0Y2hhLHQ9cyh7YmFkZ2U6XCJpbmxpbmVcIixzaXplOlwiaW52aXNpYmxlXCIsc2l0ZWtleTppfSwobnVsbD09Uz92b2lkIDA6Uy5wYXJhbWV0ZXJzKXx8e30pO3guY3VycmVudD1lLnJlbmRlcihudWxsPT1TP3ZvaWQgMDpTLmVsZW1lbnQsdCl9O3JldHVybiB5KHtyZW5kZXI6KG51bGw9PVM/dm9pZCAwOlMuZWxlbWVudCk/XCJleHBsaWNpdFwiOmksb25Mb2FkQ2FsbGJhY2tOYW1lOnQsdXNlRW50ZXJwcmlzZTpsLHVzZVJlY2FwdGNoYU5ldDpiLHNjcmlwdFByb3BzOmgsbGFuZ3VhZ2U6ZyxvbkxvYWQ6ZnVuY3Rpb24oKXtpZih3aW5kb3cmJndpbmRvdy5ncmVjYXB0Y2hhKXt2YXIgZT1sP3dpbmRvdy5ncmVjYXB0Y2hhLmVudGVycHJpc2U6d2luZG93LmdyZWNhcHRjaGE7ZS5yZWFkeSgoZnVuY3Rpb24oKXtQKGUpfSkpfWVsc2UgbShcIjxHb29nbGVSZWNhcHRjaGFQcm92aWRlciAvPiBcIitmLlNDUklQVF9OT1RfQVZBSUxBQkxFKX0sb25FcnJvcjpmdW5jdGlvbigpe20oXCJFcnJvciBsb2FkaW5nIGdvb2dsZSByZWNhcHRjaGEgc2NyaXB0XCIpfX0pLGZ1bmN0aW9uKCl7ZChlLG51bGw9PVM/dm9pZCAwOlMuZWxlbWVudCl9fW0oXCI8R29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXIgLz4gcmVjYXB0Y2hhIGtleSBub3QgcHJvdmlkZWRcIil9KSxbbCxiLEUsUixnLGksbnVsbD09Uz92b2lkIDA6Uy5lbGVtZW50XSk7dmFyIE09YSgoZnVuY3Rpb24oZSl7aWYoIUN8fCFDLmV4ZWN1dGUpdGhyb3cgbmV3IEVycm9yKFwiPEdvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyIC8+IEdvb2dsZSBSZWNhcHRjaGEgaGFzIG5vdCBiZWVuIGxvYWRlZFwiKTtyZXR1cm4gQy5leGVjdXRlKHguY3VycmVudCx7YWN0aW9uOmV9KX0pLFtDLHhdKSxOPWMoKGZ1bmN0aW9uKCl7cmV0dXJue2V4ZWN1dGVSZWNhcHRjaGE6Qz9NOnZvaWQgMCxjb250YWluZXI6bnVsbD09Uz92b2lkIDA6Uy5lbGVtZW50fX0pLFtNLEMsbnVsbD09Uz92b2lkIDA6Uy5lbGVtZW50XSk7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCh2LlByb3ZpZGVyLHt2YWx1ZTpOfSx3KX12YXIgZz1mdW5jdGlvbigpe3JldHVybiBpKHYpfTtmdW5jdGlvbiBTKHQpe3ZhciByPXRoaXMsbz10LmFjdGlvbixhPXQub25WZXJpZnksYz10LnJlZnJlc2hSZUNhcHRjaGEsaT1nKCk7bigoZnVuY3Rpb24oKXt2YXIgZT1pLmV4ZWN1dGVSZWNhcHRjaGE7aWYoZSl7dShyLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGwodGhpcywoZnVuY3Rpb24ocil7c3dpdGNoKHIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxlKG8pXTtjYXNlIDE6cmV0dXJuIHQ9ci5zZW50KCksYT8oYSh0KSxbMl0pOihtKFwiUGxlYXNlIGRlZmluZSBhbiBvblZlcmlmeSBmdW5jdGlvblwiKSxbMl0pfX0pKX0pKX19KSxbbyxhLGMsaV0pO3ZhciBzPWkuY29udGFpbmVyO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBzP2UuY3JlYXRlRWxlbWVudChcImRpdlwiLHtpZDpzfSk6bnVsbH1mdW5jdGlvbiB3KGUsdCl7cmV0dXJuIGUodD17ZXhwb3J0czp7fX0sdC5leHBvcnRzKSx0LmV4cG9ydHNcbi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL312YXIgJD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsQz0kP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLFA9JD9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LHg9JD9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsRT0kP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxSPSQ/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LE09JD9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksTj0kP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLE89JD9TeW1ib2wuZm9yKFwicmVhY3QuYXN5bmNfbW9kZVwiKTo2MDExMSxfPSQ/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSxUPSQ/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLGo9JD9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMsTD0kP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLGs9JD9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSxGPSQ/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsQT0kP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSxWPSQ/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHo9JD9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LEc9JD9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7ZnVuY3Rpb24gSShlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciB0PWUuJCR0eXBlb2Y7c3dpdGNoKHQpe2Nhc2UgQzpzd2l0Y2goZT1lLnR5cGUpe2Nhc2UgTzpjYXNlIF86Y2FzZSB4OmNhc2UgUjpjYXNlIEU6Y2FzZSBqOnJldHVybiBlO2RlZmF1bHQ6c3dpdGNoKGU9ZSYmZS4kJHR5cGVvZil7Y2FzZSBOOmNhc2UgVDpjYXNlIEY6Y2FzZSBrOmNhc2UgTTpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiB0fX1jYXNlIFA6cmV0dXJuIHR9fX1mdW5jdGlvbiBEKGUpe3JldHVybiBJKGUpPT09X312YXIgcT17QXN5bmNNb2RlOk8sQ29uY3VycmVudE1vZGU6XyxDb250ZXh0Q29uc3VtZXI6TixDb250ZXh0UHJvdmlkZXI6TSxFbGVtZW50OkMsRm9yd2FyZFJlZjpULEZyYWdtZW50OngsTGF6eTpGLE1lbW86ayxQb3J0YWw6UCxQcm9maWxlcjpSLFN0cmljdE1vZGU6RSxTdXNwZW5zZTpqLGlzQXN5bmNNb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBEKGUpfHxJKGUpPT09T30saXNDb25jdXJyZW50TW9kZTpELGlzQ29udGV4dENvbnN1bWVyOmZ1bmN0aW9uKGUpe3JldHVybiBJKGUpPT09Tn0saXNDb250ZXh0UHJvdmlkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSk9PT1NfSxpc0VsZW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09Q30saXNGb3J3YXJkUmVmOmZ1bmN0aW9uKGUpe3JldHVybiBJKGUpPT09VH0saXNGcmFnbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gSShlKT09PXh9LGlzTGF6eTpmdW5jdGlvbihlKXtyZXR1cm4gSShlKT09PUZ9LGlzTWVtbzpmdW5jdGlvbihlKXtyZXR1cm4gSShlKT09PWt9LGlzUG9ydGFsOmZ1bmN0aW9uKGUpe3JldHVybiBJKGUpPT09UH0saXNQcm9maWxlcjpmdW5jdGlvbihlKXtyZXR1cm4gSShlKT09PVJ9LGlzU3RyaWN0TW9kZTpmdW5jdGlvbihlKXtyZXR1cm4gSShlKT09PUV9LGlzU3VzcGVuc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSk9PT1qfSxpc1ZhbGlkRWxlbWVudFR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGV8fGU9PT14fHxlPT09X3x8ZT09PVJ8fGU9PT1FfHxlPT09anx8ZT09PUx8fFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmKGUuJCR0eXBlb2Y9PT1GfHxlLiQkdHlwZW9mPT09a3x8ZS4kJHR5cGVvZj09PU18fGUuJCR0eXBlb2Y9PT1OfHxlLiQkdHlwZW9mPT09VHx8ZS4kJHR5cGVvZj09PVZ8fGUuJCR0eXBlb2Y9PT16fHxlLiQkdHlwZW9mPT09R3x8ZS4kJHR5cGVvZj09PUEpfSx0eXBlT2Y6SX0sQj13KChmdW5jdGlvbihlLHQpe1wicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmZ1bmN0aW9uKCl7dmFyIGU9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLHI9ZT9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxvPWU/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixuPWU/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGE9ZT9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsYz1lP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxpPWU/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LHM9ZT9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCx1PWU/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbD1lP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsZj1lP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWU/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLGQ9ZT9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCx5PWU/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsbT1lP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LHY9ZT9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsYj1lP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyxoPWU/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCxnPWU/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O2Z1bmN0aW9uIFMoZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lKXt2YXIgdD1lLiQkdHlwZW9mO3N3aXRjaCh0KXtjYXNlIHI6dmFyIGQ9ZS50eXBlO3N3aXRjaChkKXtjYXNlIHU6Y2FzZSBsOmNhc2UgbjpjYXNlIGM6Y2FzZSBhOmNhc2UgcDpyZXR1cm4gZDtkZWZhdWx0OnZhciB2PWQmJmQuJCR0eXBlb2Y7c3dpdGNoKHYpe2Nhc2UgczpjYXNlIGY6Y2FzZSBtOmNhc2UgeTpjYXNlIGk6cmV0dXJuIHY7ZGVmYXVsdDpyZXR1cm4gdH19Y2FzZSBvOnJldHVybiB0fX19dmFyIHc9dSwkPWwsQz1zLFA9aSx4PXIsRT1mLFI9bixNPW0sTj15LE89byxfPWMsVD1hLGo9cCxMPSExO2Z1bmN0aW9uIGsoZSl7cmV0dXJuIFMoZSk9PT1sfXQuQXN5bmNNb2RlPXcsdC5Db25jdXJyZW50TW9kZT0kLHQuQ29udGV4dENvbnN1bWVyPUMsdC5Db250ZXh0UHJvdmlkZXI9UCx0LkVsZW1lbnQ9eCx0LkZvcndhcmRSZWY9RSx0LkZyYWdtZW50PVIsdC5MYXp5PU0sdC5NZW1vPU4sdC5Qb3J0YWw9Tyx0LlByb2ZpbGVyPV8sdC5TdHJpY3RNb2RlPVQsdC5TdXNwZW5zZT1qLHQuaXNBc3luY01vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEx8fChMPSEwLGNvbnNvbGUud2FybihcIlRoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlIFJlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuXCIpKSxrKGUpfHxTKGUpPT09dX0sdC5pc0NvbmN1cnJlbnRNb2RlPWssdC5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihlKXtyZXR1cm4gUyhlKT09PXN9LHQuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFMoZSk9PT1pfSx0LmlzRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1yfSx0LmlzRm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm4gUyhlKT09PWZ9LHQuaXNGcmFnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gUyhlKT09PW59LHQuaXNMYXp5PWZ1bmN0aW9uKGUpe3JldHVybiBTKGUpPT09bX0sdC5pc01lbW89ZnVuY3Rpb24oZSl7cmV0dXJuIFMoZSk9PT15fSx0LmlzUG9ydGFsPWZ1bmN0aW9uKGUpe3JldHVybiBTKGUpPT09b30sdC5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGUpe3JldHVybiBTKGUpPT09Y30sdC5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFMoZSk9PT1hfSx0LmlzU3VzcGVuc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFMoZSk9PT1wfSx0LmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZXx8ZT09PW58fGU9PT1sfHxlPT09Y3x8ZT09PWF8fGU9PT1wfHxlPT09ZHx8XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiYoZS4kJHR5cGVvZj09PW18fGUuJCR0eXBlb2Y9PT15fHxlLiQkdHlwZW9mPT09aXx8ZS4kJHR5cGVvZj09PXN8fGUuJCR0eXBlb2Y9PT1mfHxlLiQkdHlwZW9mPT09Ynx8ZS4kJHR5cGVvZj09PWh8fGUuJCR0eXBlb2Y9PT1nfHxlLiQkdHlwZW9mPT09dil9LHQudHlwZU9mPVN9KCl9KSksSj0oQi5Bc3luY01vZGUsQi5Db25jdXJyZW50TW9kZSxCLkNvbnRleHRDb25zdW1lcixCLkNvbnRleHRQcm92aWRlcixCLkVsZW1lbnQsQi5Gb3J3YXJkUmVmLEIuRnJhZ21lbnQsQi5MYXp5LEIuTWVtbyxCLlBvcnRhbCxCLlByb2ZpbGVyLEIuU3RyaWN0TW9kZSxCLlN1c3BlbnNlLEIuaXNBc3luY01vZGUsQi5pc0NvbmN1cnJlbnRNb2RlLEIuaXNDb250ZXh0Q29uc3VtZXIsQi5pc0NvbnRleHRQcm92aWRlcixCLmlzRWxlbWVudCxCLmlzRm9yd2FyZFJlZixCLmlzRnJhZ21lbnQsQi5pc0xhenksQi5pc01lbW8sQi5pc1BvcnRhbCxCLmlzUHJvZmlsZXIsQi5pc1N0cmljdE1vZGUsQi5pc1N1c3BlbnNlLEIuaXNWYWxpZEVsZW1lbnRUeXBlLEIudHlwZU9mLHcoKGZ1bmN0aW9uKGUpe1wicHJvZHVjdGlvblwiPT09cHJvY2Vzcy5lbnYuTk9ERV9FTlY/ZS5leHBvcnRzPXE6ZS5leHBvcnRzPUJ9KSkpLEs9e2NoaWxkQ29udGV4dFR5cGVzOiEwLGNvbnRleHRUeXBlOiEwLGNvbnRleHRUeXBlczohMCxkZWZhdWx0UHJvcHM6ITAsZGlzcGxheU5hbWU6ITAsZ2V0RGVmYXVsdFByb3BzOiEwLGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjohMCxnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6ITAsbWl4aW5zOiEwLHByb3BUeXBlczohMCx0eXBlOiEwfSxVPXtuYW1lOiEwLGxlbmd0aDohMCxwcm90b3R5cGU6ITAsY2FsbGVyOiEwLGNhbGxlZTohMCxhcmd1bWVudHM6ITAsYXJpdHk6ITB9LEg9eyQkdHlwZW9mOiEwLGNvbXBhcmU6ITAsZGVmYXVsdFByb3BzOiEwLGRpc3BsYXlOYW1lOiEwLHByb3BUeXBlczohMCx0eXBlOiEwfSxRPXt9O2Z1bmN0aW9uIFcoZSl7cmV0dXJuIEouaXNNZW1vKGUpP0g6UVtlLiQkdHlwZW9mXXx8S31RW0ouRm9yd2FyZFJlZl09eyQkdHlwZW9mOiEwLHJlbmRlcjohMCxkZWZhdWx0UHJvcHM6ITAsZGlzcGxheU5hbWU6ITAscHJvcFR5cGVzOiEwfSxRW0ouTWVtb109SDt2YXIgWD1PYmplY3QuZGVmaW5lUHJvcGVydHksWT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxaPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsZWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix0ZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YscmU9T2JqZWN0LnByb3RvdHlwZTt2YXIgb2U9ZnVuY3Rpb24gZSh0LHIsbyl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHIpe2lmKHJlKXt2YXIgbj10ZShyKTtuJiZuIT09cmUmJmUodCxuLG8pfXZhciBhPVkocik7WiYmKGE9YS5jb25jYXQoWihyKSkpO2Zvcih2YXIgYz1XKHQpLGk9VyhyKSxzPTA7czxhLmxlbmd0aDsrK3Mpe3ZhciB1PWFbc107aWYoIShVW3VdfHxvJiZvW3VdfHxpJiZpW3VdfHxjJiZjW3VdKSl7dmFyIGw9ZWUocix1KTt0cnl7WCh0LHUsbCl9Y2F0Y2goZSl7fX19fXJldHVybiB0fSxuZT1mdW5jdGlvbih0KXt2YXIgcj1mdW5jdGlvbihyKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KGIsbnVsbCwoZnVuY3Rpb24obyl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudCh0LHMoe30scix7Z29vZ2xlUmVDYXB0Y2hhUHJvcHM6b30pKX0pKX07cmV0dXJuIHIuZGlzcGxheU5hbWU9XCJ3aXRoR29vZ2xlUmVDYXB0Y2hhKFwiKyh0LmRpc3BsYXlOYW1lfHx0Lm5hbWV8fFwiQ29tcG9uZW50XCIpK1wiKVwiLG9lKHIsdCkscn07ZXhwb3J0e1MgYXMgR29vZ2xlUmVDYXB0Y2hhLGIgYXMgR29vZ2xlUmVDYXB0Y2hhQ29uc3VtZXIsdiBhcyBHb29nbGVSZUNhcHRjaGFDb250ZXh0LGggYXMgR29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXIsZyBhcyB1c2VHb29nbGVSZUNhcHRjaGEsbmUgYXMgd2l0aEdvb2dsZVJlQ2FwdGNoYX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1nb29nbGUtcmVjYXB0Y2hhLXYzLmVzbS5qcy5tYXBcbiIsImltcG9ydCB7IHVzZUNvbnRleHQsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VHQUZvcm1UcmFja2luZywgdXNlV2luZG93U2l6ZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9ob29rcyc7XG5pbXBvcnQgeyB5dXBSZXNvbHZlciB9IGZyb20gJ0Bob29rZm9ybS9yZXNvbHZlcnMveXVwJztcbmltcG9ydCBJbnB1dCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaW5wdXQnO1xuaW1wb3J0IEZvcm1GaWVsZCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBnZXRSYXdUZXh0LCBoYW5kbGVSZWZlcnJhbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgcGhvbmVWZXJpZmljYXRpb25TY2hlbWEgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWFzL3Bob25lVmVyaWZpY2F0aW9uU2NoZW1hJztcbmltcG9ydCB7IHN0YXJ0VmVyaWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vYXBpJztcbmltcG9ydCB7IHVzZVJlZmVycmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgT3B0aW1pemVseUNvbnRleHQgfSBmcm9tICdAb3B0aW1pemVseS9yZWFjdC1zZGsnO1xuaW1wb3J0IHsgZ2V0VGF4RnVsbFVybCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyBWZXJpZmljYXRpb25TdGF0dXMgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBjcmVhdGVSZWZlcnJhbCB9IGZyb20gJy4uLy4uLy4uL2FwaS9jcmVhdGVSZWZlcnJhbCc7XG5pbXBvcnQgeyB1c2VHb29nbGVSZUNhcHRjaGEgfSBmcm9tICdyZWFjdC1nb29nbGUtcmVjYXB0Y2hhLXYzJztcbmltcG9ydCB7IHRyYWNrU3RlcENvbXBsZXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9hbmFseXRpY3MnO1xuaW1wb3J0IHsgdXNlV2l6YXJkIH0gZnJvbSAncmVhY3QtdXNlLXdpemFyZCc7XG5pbXBvcnQgeyBGb3JtTmFtZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9Gb3JtTmFtZU9wdGlvbnMnO1xuaW1wb3J0IHsgU3RhbmRhcmRTdGVwVGl0bGUsIFN0ZXBXcmFwcGVyIH0gZnJvbSAnLi4vLi4vc3RlcENvbXBvbmVudHMnO1xuaW1wb3J0IHsgUHJvQWdyZWVtZW50VGV4dCwgUmFtc2V5QWdyZWVtZW50VGV4dCB9IGZyb20gJy4uLy4uL2FncmVlbWVudHMnO1xuaW1wb3J0IHsgUmVzdWJtaXRCdXR0b24sIFN1Ym1pdEJ1dHRvbiB9IGZyb20gJy4uLy4uL2J1dHRvbnMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBTdWNjZXNzTWVzc2FnZSB9IGZyb20gJy4uLy4uL21lc3NhZ2VzJztcblxuaW50ZXJmYWNlIFZlcmlmaWNhdGlvblN0ZXBGaWVsZHMge1xuICB2ZXJpZmljYXRpb25fY29kZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVmVyaWZpY2F0aW9uUmVzcG9uc2VCb2R5IHtcbiAgdmFsaWRhdGVkOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBWZXJpZmljYXRpb25TdGVwKCkge1xuICBjb25zdCB7IG9wdGltaXplbHkgfSA9IHVzZUNvbnRleHQoT3B0aW1pemVseUNvbnRleHQpO1xuICBjb25zdCBmb3JtUmVmID0gdXNlR0FGb3JtVHJhY2tpbmcob3B0aW1pemVseSwgJ3ZlcmlmaWNhdGlvbl9zdGVwJyk7XG4gIGNvbnN0IFtzdGF0dXMsIHNldFN0YXR1c10gPSB1c2VTdGF0ZTxWZXJpZmljYXRpb25TdGF0dXM+KFxuICAgIFZlcmlmaWNhdGlvblN0YXR1cy5pbml0aWFsXG4gICk7XG4gIGNvbnN0IHsgd2lkdGggfSA9IHVzZVdpbmRvd1NpemUoKTtcbiAgY29uc3QgW2Vycm9yTWVzc2FnZSwgc2V0RXJyb3JNZXNzYWdlXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3N1Y2Nlc3NNZXNzYWdlLCBzZXRTdWNjZXNzTWVzc2FnZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtpbnZhbGlkQ29kZU1lc3NhZ2UsIHNldEludmFsaWRDb2RlTWVzc2FnZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IHsgcmVmZXJyYWwsIHVwZGF0ZVBob25lVmVyaWZpY2F0aW9uQ291bnREb3duLCBwcm9JbmZvIH0gPVxuICAgIHVzZVJlZmVycmFsQ29udGV4dCgpO1xuICBjb25zdCB7IHBob25lIH0gPSByZWZlcnJhbDtcbiAgY29uc3QgcHJvQWdyZWVtZW50ID0gZ2V0UmF3VGV4dCg8UHJvQWdyZWVtZW50VGV4dCAvPik7XG4gIGNvbnN0IHJhbXNleUFncmVlbWVudCA9IGdldFJhd1RleHQoPFJhbXNleUFncmVlbWVudFRleHQgLz4pO1xuICBjb25zdCB7IGV4ZWN1dGVSZWNhcHRjaGEgfSA9IHVzZUdvb2dsZVJlQ2FwdGNoYSgpO1xuICBjb25zdCB7IGFjdGl2ZVN0ZXAgfSA9IHVzZVdpemFyZCgpO1xuICBjb25zdCB7XG4gICAgcmVnaXN0ZXIsXG4gICAgaGFuZGxlU3VibWl0LFxuICAgIGZvcm1TdGF0ZTogeyBlcnJvcnMgfVxuICB9ID0gdXNlRm9ybTxWZXJpZmljYXRpb25TdGVwRmllbGRzPih7XG4gICAgcmVzb2x2ZXI6IHl1cFJlc29sdmVyKHBob25lVmVyaWZpY2F0aW9uU2NoZW1hKVxuICB9KTtcblxuICBmdW5jdGlvbiBoYW5kbGVSZXNlbmRDb2RlKCkge1xuICAgIHNldEVycm9yTWVzc2FnZSgnJyk7XG4gICAgc2V0U3VjY2Vzc01lc3NhZ2UoJycpO1xuICAgIHNldFN0YXR1cyhWZXJpZmljYXRpb25TdGF0dXMucmVzZW5kaW5nQ29kZSk7XG5cbiAgICBzdGFydFZlcmlmaWNhdGlvbihyZWZlcnJhbC5waG9uZSwgcmVmZXJyYWw/LnZlcmlmaWNhdGlvbl90eXBlID8/ICdzbXMnKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBzZXRTdGF0dXMoVmVyaWZpY2F0aW9uU3RhdHVzLnJlc2VuZENvZGVTdWNjZXNzKTtcbiAgICAgICAgdXBkYXRlUGhvbmVWZXJpZmljYXRpb25Db3VudERvd24oMzApO1xuICAgICAgICBzZXRTdWNjZXNzTWVzc2FnZSgnQ29kZSByZXNlbmRcXHUwMEEwc3VjY2Vzc2Z1bC4nKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgc2V0U3RhdHVzKFZlcmlmaWNhdGlvblN0YXR1cy5pbml0aWFsKTtcbiAgICAgICAgc2V0RXJyb3JNZXNzYWdlKFwiU29ycnksIHdlIGNvdWxkbid0IHJlc2VuZCBhIGNvZGUuIFRyeVxcdTAwQTBhZ2Fpbi5cIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUludmFsaWRWZXJpZmljYXRpb25SZXNwb25zZSgpIHtcbiAgICBzZXRTdGF0dXMoVmVyaWZpY2F0aW9uU3RhdHVzLmluaXRpYWwpO1xuICAgIHNldEludmFsaWRDb2RlTWVzc2FnZShcbiAgICAgICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBzaXhcXHUyMDExZGlnaXQgdmVyaWZpY2F0aW9uXFx1MDBBMGNvZGUuJ1xuICAgICk7XG4gICAgY29uc29sZS53YXJuKCdUd2lsaW8gcmVzcG9uZGVkIHdpdGggaW5jb3JyZWN0IHZlcmlmaWNhdGlvbiBjb2RlJyk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVWZXJpZmljYXRpb25SZXNwb25zZShyZXNwb25zZUJvZHk6IFZlcmlmaWNhdGlvblJlc3BvbnNlQm9keSkge1xuICAgIGlmIChyZXNwb25zZUJvZHk/LnZhbGlkYXRlZCkge1xuICAgICAgb25WYWxpZFN1Ym1pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVJbnZhbGlkVmVyaWZpY2F0aW9uUmVzcG9uc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBvblZhbGlkU3VibWl0KCkge1xuICAgIHRyYWNrU3RlcENvbXBsZXRlZCh7XG4gICAgICBzdGVwOiBhY3RpdmVTdGVwICsgMSxcbiAgICAgIHN0ZXBfbmFtZTogJ3ZlcmlmaWNhdGlvbl9zdGVwJyxcbiAgICAgIHN0ZXBfbGFiZWw6ICdFbnRlciB2ZXJpZmljYXRpb24gY29kZS4nLFxuICAgICAgYW5zd2VyX2xhYmVsczogW10sXG4gICAgICBhbnN3ZXJfdmFsdWVzOiBbXSxcbiAgICAgIGZvcm1fbmFtZTogRm9ybU5hbWVPcHRpb25zLlRBWF9SRUZFUlJBTF9GT1JNXG4gICAgfSk7XG4gICAgaWYgKCFleGVjdXRlUmVjYXB0Y2hhKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdSZWNhcHRjaGEgbm90IGF2YWlsYWJsZScpO1xuICAgICAgc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICBcIlNvcnJ5LCB3ZSB3ZXJlbid0IGFibGUgdG8gY29ubmVjdCB5b3Ugd2l0aCBhbnkgcHJvcy4gVHJ5XFx1MDBBMGFnYWluLlwiXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgc2V0U3RhdHVzKFZlcmlmaWNhdGlvblN0YXR1cy5zdWJtaXR0aW5nUmVmZXJyYWwpO1xuICAgICAgY29uc3QgcmVjYXB0Y2hhVG9rZW46IHN0cmluZyA9XG4gICAgICAgIGF3YWl0IGV4ZWN1dGVSZWNhcHRjaGEoJ3ZlcmlmaWNhdGlvbl9zdGVwJyk7XG5cbiAgICAgIGNyZWF0ZVJlZmVycmFsKFxuICAgICAgICByZWZlcnJhbCxcbiAgICAgICAgcmVjYXB0Y2hhVG9rZW4sXG4gICAgICAgIHByb0luZm8sXG4gICAgICAgIHByb0FncmVlbWVudCxcbiAgICAgICAgcmFtc2V5QWdyZWVtZW50XG4gICAgICApXG4gICAgICAgIC50aGVuKChyZWZlcnJhbFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaGFuZGxlUmVmZXJyYWxSZXNwb25zZShcbiAgICAgICAgICAgIHJlZmVycmFsUmVzcG9uc2UsXG4gICAgICAgICAgICByZWZlcnJhbCxcbiAgICAgICAgICAgIHByb0luZm8ucGFydG5lcl91cm4sXG4gICAgICAgICAgICBvcHRpbWl6ZWx5XG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignQ3JlYXRlIHJlZmVycmFsIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICBzZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICBcIlNvcnJ5LCB3ZSB3ZXJlbid0IGFibGUgdG8gY29ubmVjdCB5b3Ugd2l0aCBhbnkgcHJvcy4gVHJ5XFx1MDBBMGFnYWluLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZXRTdGF0dXMoVmVyaWZpY2F0aW9uU3RhdHVzLmluaXRpYWwpO1xuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdyZUNBUFRDSEEgZXhlY3V0aW9uIGZhaWxlZCcsIGUpO1xuICAgICAgc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICBcIlNvcnJ5LCB3ZSB3ZXJlbid0IGFibGUgdG8gY29ubmVjdCB5b3Ugd2l0aCBhbnkgcHJvcy4gVHJ5XFx1MDBBMGFnYWluLlwiXG4gICAgICApO1xuICAgICAgc2V0U3RhdHVzKFZlcmlmaWNhdGlvblN0YXR1cy5pbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBvblN1Ym1pdCh2YWx1ZXM6IFZlcmlmaWNhdGlvblN0ZXBGaWVsZHMpIHtcbiAgICBzZXRFcnJvck1lc3NhZ2UoJycpO1xuICAgIHNldEludmFsaWRDb2RlTWVzc2FnZSgnJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZW5kVmVyaWZpY2F0aW9uKHBob25lLCB2YWx1ZXMudmVyaWZpY2F0aW9uX2NvZGUpO1xuICAgICAgaGFuZGxlVmVyaWZpY2F0aW9uUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICBzZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgIFwiU29ycnksIHdlIHdlcmVuJ3QgYWJsZSB0byB2ZXJpZnkgeW91ciBjb2RlLiBUcnlcXHUwMEEwYWdhaW4uXCJcbiAgICAgICk7XG4gICAgICBzZXRTdGF0dXMoVmVyaWZpY2F0aW9uU3RhdHVzLmluaXRpYWwpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGVuZFZlcmlmaWNhdGlvbihwaG9uZTogc3RyaW5nLCB2ZXJpZmljYXRpb25Db2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBieXBhc3NWZXJpZmljYXRpb25RdWVyeVBhcmFtID1cbiAgICAgIG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCdieXBhc3NfdmVyaWZpY2F0aW9uJykgPz9cbiAgICAgICcnO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9XG4gICAgICBieXBhc3NWZXJpZmljYXRpb25RdWVyeVBhcmFtPy5sZW5ndGggPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgcGhvbmVOdW1iZXI6IHBob25lLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uQ29kZTogdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgICAgICAgIGJ5cGFzc1ZlcmlmaWNhdGlvblF1ZXJ5OiBieXBhc3NWZXJpZmljYXRpb25RdWVyeVBhcmFtXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHBob25lTnVtYmVyOiBwaG9uZSxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbkNvZGU6IHZlcmlmaWNhdGlvbkNvZGVcbiAgICAgICAgICB9O1xuXG4gICAgc2V0U3RhdHVzKFZlcmlmaWNhdGlvblN0YXR1cy52ZXJpZnlpbmdDb2RlKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZSA9IGF3YWl0IGZldGNoKFxuICAgICAgYCR7Z2V0VGF4RnVsbFVybCgpfS9hcGkvcGhvbmUtdmFsaWRhdGlvbi1maW5pc2gvYCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgICB9XG4gICAgKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25SZXNwb25zZUJvZHkgPSBhd2FpdCByZXNwb25zZVByb21pc2U/Lmpzb24oKTtcbiAgICBpZiAodHlwZW9mIHZlcmlmaWNhdGlvblJlc3BvbnNlQm9keT8udmFsaWRhdGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNwb25zZSBmcm9tIHBob25lLXZhbGlkYXRpb24tZmluaXNoIGVuZHBvaW50Jyk7XG4gICAgfVxuICAgIHJldHVybiB2ZXJpZmljYXRpb25SZXNwb25zZUJvZHk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTdGVwV3JhcHBlcj5cbiAgICAgIDxmb3JtIHJlZj17Zm9ybVJlZn0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdChvblN1Ym1pdCl9PlxuICAgICAgICA8U3RhbmRhcmRTdGVwVGl0bGU+RW50ZXIgdmVyaWZpY2F0aW9uIGNvZGUuPC9TdGFuZGFyZFN0ZXBUaXRsZT5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC0zIHRleHQtbGVmdCBtLWJsb2NrLXhsIHNtOnRleHQtNFwiPlxuICAgICAgICAgIE5leHQsIHlvdSBjYW4gbG9vayBvdmVyIHRoZSBwcm9z4oCZIGluZm8gdG8gZ2V0IHJlYWR5IGZvciB3aGVuIHRoZXlcbiAgICAgICAgICB7J1xcdTAwQTAnfWNhbGwuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbS1ibG9jay14bFwiPlxuICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgIGlkPVwidmVyaWZpY2F0aW9uX2NvZGVcIlxuICAgICAgICAgICAgbGFiZWw9XCJDb2RlXCJcbiAgICAgICAgICAgIHNpemU9e3dpZHRoID4gNTk5ID8gJ2xnJyA6ICdtZCd9XG4gICAgICAgICAgICBpbnZhbGlkPXshIWVycm9ycz8udmVyaWZpY2F0aW9uX2NvZGUgfHwgISFpbnZhbGlkQ29kZU1lc3NhZ2V9XG4gICAgICAgICAgICBlcnJvcnM9e1tlcnJvcnM/LnZlcmlmaWNhdGlvbl9jb2RlPy5tZXNzYWdlID8/IGludmFsaWRDb2RlTWVzc2FnZV19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgeygpID0+IChcbiAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKCd2ZXJpZmljYXRpb25fY29kZScsIHtcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PiBzZXRJbnZhbGlkQ29kZU1lc3NhZ2UoJycpXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnIXctZnVsbCd9XG4gICAgICAgICAgICAgICAgc2l6ZT17d2lkdGggPiA1OTkgPyAnbGcnIDogJ21kJ31cbiAgICAgICAgICAgICAgICBpZD1cInZlcmlmaWNhdGlvbl9jb2RlXCJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezZ9XG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0YXhfdmVyaWZpY2F0aW9uX2NvZGVfaW5wdXRcIlxuICAgICAgICAgICAgICAgIGludmFsaWQ9eyEhZXJyb3JzPy52ZXJpZmljYXRpb25fY29kZSB8fCAhIWludmFsaWRDb2RlTWVzc2FnZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHtlcnJvck1lc3NhZ2UgJiYgPEVycm9yTWVzc2FnZSBlcnJvck1lc3NhZ2U9e2Vycm9yTWVzc2FnZX0gLz59XG4gICAgICAgIHtzdWNjZXNzTWVzc2FnZSAmJiA8U3VjY2Vzc01lc3NhZ2Ugc3VjY2Vzc01lc3NhZ2U9e3N1Y2Nlc3NNZXNzYWdlfSAvPn1cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgaXRlbXMtY2VudGVyIG1iLTRcIj5cbiAgICAgICAgICA8U3VibWl0QnV0dG9uIHN0YXR1cz17c3RhdHVzfSAvPlxuICAgICAgICAgIDxSZXN1Ym1pdEJ1dHRvbiBzdGF0dXM9e3N0YXR1c30gb25DbGljaz17aGFuZGxlUmVzZW5kQ29kZX0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxQcm9BZ3JlZW1lbnRUZXh0IC8+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9TdGVwV3JhcHBlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVmVyaWZpY2F0aW9uU3RlcCB9O1xuIiwiZXhwb3J0IGNvbnN0IE5PX1NQRUNJQUxfU1lNQk9MU19SRUdFWCA9IC9eW0Etelxccy0nLixdKiQvO1xuIiwiaW1wb3J0IHsgb2JqZWN0LCBzdHJpbmcgfSBmcm9tICd5dXAnO1xuaW1wb3J0IHsgTk9fU1BFQ0lBTF9TWU1CT0xTX1JFR0VYIH0gZnJvbSAnLi9ub1NwZWNpYWxDaGFyYWN0ZXJzUmVnZXgnO1xuaW1wb3J0IHsgRmllbGRFcnJvcnMgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVTdGVwRmllbGRzIHtcbiAgZmlyc3RfbmFtZTogc3RyaW5nO1xuICBsYXN0X25hbWU6IHN0cmluZztcbn1cblxuY29uc3QgZnVsbE5hbWVJbmZvU2NoZW1hID0gb2JqZWN0KCkuc2hhcGUoe1xuICBmaXJzdF9uYW1lOiBzdHJpbmcoKVxuICAgIC50cmltKClcbiAgICAucmVxdWlyZWQoJ1BsZWFzZSBlbnRlciB5b3VyIGZpcnN0XFx1MDBBMG5hbWUuJylcbiAgICAubWluKDIsICdQbGVhc2UgZW50ZXIgdHdvIG9yIG1vcmUgY2hhcmFjdGVycyBmb3IgeW91ciBmaXJzdFxcdTAwQTBuYW1lLicpXG4gICAgLm1heCg0MCwgJ1BsZWFzZSBlbnRlciA0MCBjaGFyYWN0ZXJzIG9yIGxlc3MgZm9yIHlvdXIgZmlyc3RcXHUwMEEwbmFtZS4nKVxuICAgIC5tYXRjaGVzKFxuICAgICAgTk9fU1BFQ0lBTF9TWU1CT0xTX1JFR0VYLFxuICAgICAgJ1BsZWFzZSBlbnRlciBsZXR0ZXJzIChh4oCTeikgZm9yIHlvdXIgZmlyc3RcXHUwMEEwbmFtZS4nXG4gICAgKSxcblxuICBsYXN0X25hbWU6IHN0cmluZygpXG4gICAgLnRyaW0oKVxuICAgIC5yZXF1aXJlZCgnUGxlYXNlIGVudGVyIHlvdXIgbGFzdFxcdTAwQTBuYW1lLicpXG4gICAgLm1pbigyLCAnUGxlYXNlIGVudGVyIHR3byBvciBtb3JlIGNoYXJhY3RlcnMgZm9yIHlvdXIgbGFzdFxcdTAwQTBuYW1lLicpXG4gICAgLm1heCg4MCwgJ1BsZWFzZSBlbnRlciA4MCBjaGFyYWN0ZXJzIG9yIGxlc3MgZm9yIHlvdXIgbGFzdFxcdTAwQTBuYW1lLicpXG4gICAgLm1hdGNoZXMoXG4gICAgICBOT19TUEVDSUFMX1NZTUJPTFNfUkVHRVgsXG4gICAgICAnUGxlYXNlIGVudGVyIGxldHRlcnMgKGHigJN6KSBmb3IgeW91ciBsYXN0XFx1MDBBMG5hbWUuJ1xuICAgIClcbn0pO1xuXG5mdW5jdGlvbiBjb25zb2xpZGF0ZUZpcnN0QW5kTGFzdE5hbWVFcnJvcnMoXG4gIGVycm9yczogRmllbGRFcnJvcnM8TmFtZVN0ZXBGaWVsZHM+XG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBmaXJzdEVycm9yID0gZXJyb3JzLmZpcnN0X25hbWU7XG4gIGNvbnN0IGxhc3RFcnJvciA9IGVycm9ycy5sYXN0X25hbWU7XG5cbiAgaWYgKGZpcnN0RXJyb3I/LnR5cGUgPT09ICdyZXF1aXJlZCcgJiYgbGFzdEVycm9yPy50eXBlID09PSAncmVxdWlyZWQnKSB7XG4gICAgLy8gV2hlbiBib3RoIHJlcXVpcmVkIGVycm9ycyBhcmUgcHJlc2VudCwgc2hvdyBhIHNpbmdsZSBjb21iaW5lZCBtZXNzYWdlXG4gICAgcmV0dXJuICdQbGVhc2UgZW50ZXIgeW91ciBmaXJzdCBhbmQgbGFzdCBuYW1lLic7XG4gIH1cblxuICBpZiAoZmlyc3RFcnJvcikge1xuICAgIHJldHVybiBmaXJzdEVycm9yLm1lc3NhZ2UgYXMgc3RyaW5nO1xuICB9XG5cbiAgaWYgKGxhc3RFcnJvcikge1xuICAgIHJldHVybiBsYXN0RXJyb3IubWVzc2FnZSBhcyBzdHJpbmc7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgeyBmdWxsTmFtZUluZm9TY2hlbWEsIGNvbnNvbGlkYXRlRmlyc3RBbmRMYXN0TmFtZUVycm9ycyB9O1xuIiwiaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB5dXBSZXNvbHZlciB9IGZyb20gJ0Bob29rZm9ybS9yZXNvbHZlcnMveXVwJztcbmltcG9ydCBJbnB1dCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaW5wdXQnO1xuaW1wb3J0IEZvcm1GaWVsZCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vZm9ybS1maWVsZCc7XG5pbXBvcnQgeyB1c2VXaXphcmQgfSBmcm9tICdyZWFjdC11c2Utd2l6YXJkJztcbmltcG9ydCB7IE9wdGltaXplbHlDb250ZXh0IH0gZnJvbSAnQG9wdGltaXplbHkvcmVhY3Qtc2RrJztcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VHQUZvcm1UcmFja2luZywgdXNlV2luZG93U2l6ZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9ob29rcyc7XG5pbXBvcnQgeyBSZWZlcnJhbEZvcm1EYXRhLCB1c2VSZWZlcnJhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0JztcbmltcG9ydCB7IGZpcmVPcHRpbWl6ZWx5RXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMnO1xuaW1wb3J0IHsgdHJhY2tTdGVwQ29tcGxldGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBTdGFuZGFyZE5leHRCdXR0b24sIFN0ZXBXcmFwcGVyIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGb3JtTmFtZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9Gb3JtTmFtZU9wdGlvbnMnO1xuaW1wb3J0IHtcbiAgY29uc29saWRhdGVGaXJzdEFuZExhc3ROYW1lRXJyb3JzLFxuICBmdWxsTmFtZUluZm9TY2hlbWEsXG4gIE5hbWVTdGVwRmllbGRzXG59IGZyb20gJy4uLy4uLy4uL3NjaGVtYXMvRnVsbE5hbWVTY2hlbWEnO1xuXG5mdW5jdGlvbiBGdWxsTmFtZVN0ZXAoKSB7XG4gIGNvbnN0IHsgb3B0aW1pemVseSB9ID0gdXNlQ29udGV4dChPcHRpbWl6ZWx5Q29udGV4dCk7XG4gIGNvbnN0IGZvcm1SZWYgPSB1c2VHQUZvcm1UcmFja2luZyhvcHRpbWl6ZWx5LCAnbmFtZV9zdGVwJyk7XG4gIGNvbnN0IHsgbmV4dFN0ZXAsIGFjdGl2ZVN0ZXAgfSA9IHVzZVdpemFyZCgpO1xuICBjb25zdCB7IHJlZmVycmFsLCB1cGRhdGVSZWZlcnJhbCB9ID0gdXNlUmVmZXJyYWxDb250ZXh0KCk7XG4gIGNvbnN0IHtcbiAgICByZWdpc3RlcixcbiAgICBoYW5kbGVTdWJtaXQsXG4gICAgZm9ybVN0YXRlOiB7IGVycm9ycyB9LFxuICAgIHNldFZhbHVlLFxuICAgIHdhdGNoXG4gIH0gPSB1c2VGb3JtPE5hbWVTdGVwRmllbGRzPih7XG4gICAgZGVmYXVsdFZhbHVlczoge1xuICAgICAgLi4ucmVmZXJyYWxcbiAgICB9LFxuICAgIHJlc29sdmVyOiB5dXBSZXNvbHZlcihmdWxsTmFtZUluZm9TY2hlbWEpXG4gIH0pO1xuICBjb25zdCBmdWxsTmFtZSA9IHdhdGNoKCdmaXJzdF9uYW1lJykgKyAnICcgKyB3YXRjaCgnbGFzdF9uYW1lJyk7XG4gIGNvbnN0IHsgd2lkdGggfSA9IHVzZVdpbmRvd1NpemUoKTtcbiAgY29uc3QgaW5wdXRTaXplID0gd2lkdGggPiA1OTkgPyAnbGcnIDogJ21kJztcblxuICBjb25zdCBjb25zb2xpZGF0ZWRFcnJvciA9IGNvbnNvbGlkYXRlRmlyc3RBbmRMYXN0TmFtZUVycm9ycyhlcnJvcnMpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIG9uVmFsaWRTdWJtaXQocmVmZXJyYWw6IFBhcnRpYWw8UmVmZXJyYWxGb3JtRGF0YT4pIHtcbiAgICB1cGRhdGVSZWZlcnJhbChyZWZlcnJhbCk7XG4gICAgZmlyZU9wdGltaXplbHlFdmVudChvcHRpbWl6ZWx5LCAnbmFtZV9zdGVwX2NvbXBsZXRlJyk7XG4gICAgdHJhY2tTdGVwQ29tcGxldGVkKHtcbiAgICAgIHN0ZXA6IGFjdGl2ZVN0ZXAgKyAxLFxuICAgICAgc3RlcF9uYW1lOiAnbmFtZV9zdGVwJyxcbiAgICAgIHN0ZXBfbGFiZWw6IFwiV2hhdCdzIHlvdXIgbmFtZT9cIixcbiAgICAgIGFuc3dlcl9sYWJlbHM6IFsnRmlyc3QgTmFtZScsICdMYXN0IE5hbWUnXSxcbiAgICAgIGFuc3dlcl92YWx1ZXM6IFtyZWZlcnJhbC5maXJzdF9uYW1lISwgcmVmZXJyYWwubGFzdF9uYW1lIV0sXG4gICAgICBmb3JtX25hbWU6IEZvcm1OYW1lT3B0aW9ucy5UQVhfUkVGRVJSQUxfRk9STVxuICAgIH0pO1xuICAgIGF3YWl0IG5leHRTdGVwKCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pIHtcbiAgICBjb25zdCBmdWxsTmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IG5hbWVQYXJ0cyA9IGZ1bGxOYW1lXG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLmZpbHRlcigocGFydHMpID0+IHBhcnRzLnRyaW0oKSAhPT0gJycpO1xuICAgIGNvbnN0IGZpcnN0ID0gbmFtZVBhcnRzWzBdIHx8ICcnO1xuICAgIGNvbnN0IGxhc3QgPVxuICAgICAgbmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBuYW1lUGFydHNbbmFtZVBhcnRzLmxlbmd0aCAtIDFdIHx8ICcnIDogJyc7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGZvcm0gdmFsdWVzXG4gICAgc2V0VmFsdWUoJ2ZpcnN0X25hbWUnLCBmaXJzdCk7XG4gICAgc2V0VmFsdWUoJ2xhc3RfbmFtZScsIGxhc3QpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U3RlcFdyYXBwZXI+XG4gICAgICA8Zm9ybSByZWY9e2Zvcm1SZWZ9IG9uU3VibWl0PXtoYW5kbGVTdWJtaXQob25WYWxpZFN1Ym1pdCl9PlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LTYgc206dGV4dC03IGZvbnQtc2VtaWJvbGQgbS1ibG9jay14bFwiPlxuICAgICAgICAgIFdoYXQncyB5b3VyIG5hbWU/XG4gICAgICAgIDwvcD5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBtLWJsb2NrLXhsXCI+XG4gICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgaWQ9XCJmdWxsX25hbWVcIlxuICAgICAgICAgICAgbGFiZWw9XCJGdWxsIE5hbWVcIlxuICAgICAgICAgICAgc2l6ZT17aW5wdXRTaXplfVxuICAgICAgICAgICAgaW52YWxpZD17ISFlcnJvcnMuZmlyc3RfbmFtZSB8fCAhIWVycm9ycy5sYXN0X25hbWV9XG4gICAgICAgICAgICBlcnJvcnM9e2NvbnNvbGlkYXRlZEVycm9yID8gW2NvbnNvbGlkYXRlZEVycm9yXSA6IFtdfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsoKSA9PiAoXG4gICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgIHNpemU9e2lucHV0U2l6ZX1cbiAgICAgICAgICAgICAgICBpbnZhbGlkPXshIWVycm9ycy5maXJzdF9uYW1lIHx8ICEhZXJyb3JzLmxhc3RfbmFtZX1cbiAgICAgICAgICAgICAgICBpZD1cImZ1bGxfbmFtZVwiXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0YXhfZnVsbF9uYW1lX2lucHV0XCJcbiAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2Z1bGxOYW1lfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRm9ybUZpZWxkPlxuXG4gICAgICAgICAgey8qIFRoZSBiZWxvdyBpbnB1dHMgYXJlIHVzZWQgdG8gaG9sZCBzdGF0ZSBmb3IgdXNlRm9ybSAqL31cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHsuLi5yZWdpc3RlcignZmlyc3RfbmFtZScpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXsnaGlkZGVuJ31cbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB7Li4ucmVnaXN0ZXIoJ2xhc3RfbmFtZScpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXsnaGlkZGVuJ31cbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibS1ibG9jay14bFwiPjwvZGl2PlxuXG4gICAgICAgIDxTdGFuZGFyZE5leHRCdXR0b24gLz5cbiAgICAgIDwvZm9ybT5cbiAgICA8L1N0ZXBXcmFwcGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBGdWxsTmFtZVN0ZXAgfTtcbiIsImltcG9ydCAqIGFzIFl1cCBmcm9tICd5dXAnO1xuXG5jb25zdCBlbWFpbFZhbGlkYXRpb24gPSBZdXAuc3RyaW5nKClcbiAgLnRyaW0oKVxuICAucmVxdWlyZWQoJ1BsZWFzZSBlbnRlciB5b3VyIGVtYWlsXFx1MDBBMGFkZHJlc3MuJylcbiAgLmVtYWlsKCdQbGVhc2UgdXNlIGEgdmFsaWQgZW1haWxcXHUwMEEwYWRkcmVzcy4nKVxuICAubWF4KDgwLCAnUGxlYXNlIHVzZSA4MCBjaGFyYWN0ZXJzIG9yXFx1MDBBMGxlc3MuJylcbiAgLm1hdGNoZXMoL14uK1xcLlthLXpBLVpdezIsfSQvLCAnUGxlYXNlIHVzZSBhIHZhbGlkIGVtYWlsXFx1MDBBMGFkZHJlc3MuJyk7XG5cbmNvbnN0IGVtYWlsSW5mb1NjaGVtYSA9IFl1cC5vYmplY3QoKS5zaGFwZSh7XG4gIGVtYWlsOiBlbWFpbFZhbGlkYXRpb25cbn0pO1xuXG5leHBvcnQgeyBlbWFpbEluZm9TY2hlbWEgfTtcbiIsImltcG9ydCB7XG4gIFN0YW5kYXJkTmV4dEJ1dHRvbixcbiAgU3RhbmRhcmRTdGVwU3VidGl0bGVUZXh0LFxuICBTdGFuZGFyZFN0ZXBUaXRsZSxcbiAgU3RlcFdyYXBwZXJcbn0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgRm9ybUZpZWxkIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9mb3JtLWZpZWxkJztcbmltcG9ydCBJbnB1dCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaW5wdXQnO1xuaW1wb3J0IHsgZmlyZU9wdGltaXplbHlFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyB5dXBSZXNvbHZlciB9IGZyb20gJ0Bob29rZm9ybS9yZXNvbHZlcnMveXVwJztcbmltcG9ydCB7IGVtYWlsSW5mb1NjaGVtYSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYXMvZW1haWxTY2hlbWEnO1xuaW1wb3J0IHsgdXNlV2l6YXJkIH0gZnJvbSAncmVhY3QtdXNlLXdpemFyZCc7XG5pbXBvcnQgeyBSZWZlcnJhbEZvcm1EYXRhLCB1c2VSZWZlcnJhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0JztcbmltcG9ydCB7IHVzZUZvcm0gfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlR0FGb3JtVHJhY2tpbmcsIHVzZVdpbmRvd1NpemUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvaG9va3MnO1xuaW1wb3J0IHsgT3B0aW1pemVseUNvbnRleHQgfSBmcm9tICdAb3B0aW1pemVseS9yZWFjdC1zZGsnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHRyYWNrU3RlcENvbXBsZXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9hbmFseXRpY3MnO1xuaW1wb3J0IHsgRm9ybU5hbWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMvRm9ybU5hbWVPcHRpb25zJztcblxuaW50ZXJmYWNlIEVtYWlsU3RlcEZpZWxkcyB7XG4gIGVtYWlsOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIEVtYWlsU3RlcCgpIHtcbiAgY29uc3QgeyBvcHRpbWl6ZWx5IH0gPSB1c2VDb250ZXh0KE9wdGltaXplbHlDb250ZXh0KTtcbiAgY29uc3QgZm9ybVJlZiA9IHVzZUdBRm9ybVRyYWNraW5nKG9wdGltaXplbHksICdlbWFpbF9zdGVwJyk7XG4gIGNvbnN0IHsgbmV4dFN0ZXAsIGFjdGl2ZVN0ZXAgfSA9IHVzZVdpemFyZCgpO1xuICBjb25zdCB7IHJlZmVycmFsLCB1cGRhdGVSZWZlcnJhbCB9ID0gdXNlUmVmZXJyYWxDb250ZXh0KCk7XG4gIGNvbnN0IHtcbiAgICByZWdpc3RlcixcbiAgICBoYW5kbGVTdWJtaXQsXG4gICAgZm9ybVN0YXRlOiB7IGVycm9ycyB9XG4gIH0gPSB1c2VGb3JtPEVtYWlsU3RlcEZpZWxkcz4oe1xuICAgIGRlZmF1bHRWYWx1ZXM6IHtcbiAgICAgIC4uLnJlZmVycmFsXG4gICAgfSxcbiAgICByZXNvbHZlcjogeXVwUmVzb2x2ZXIoZW1haWxJbmZvU2NoZW1hKVxuICB9KTtcbiAgY29uc3QgeyB3aWR0aCB9ID0gdXNlV2luZG93U2l6ZSgpO1xuICBjb25zdCBpbnB1dFNpemUgPSB3aWR0aCA+IDU5OSA/ICdsZycgOiAnbWQnO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIG9uVmFsaWRTdWJtaXQocmVmZXJyYWw6IFBhcnRpYWw8UmVmZXJyYWxGb3JtRGF0YT4pIHtcbiAgICB1cGRhdGVSZWZlcnJhbChyZWZlcnJhbCk7XG4gICAgZmlyZU9wdGltaXplbHlFdmVudChvcHRpbWl6ZWx5LCAnZW1haWxfc3RlcF9jb21wbGV0ZWQnKTtcbiAgICB0cmFja1N0ZXBDb21wbGV0ZWQoe1xuICAgICAgc3RlcDogYWN0aXZlU3RlcCArIDEsXG4gICAgICBzdGVwX25hbWU6ICdlbWFpbF9zdGVwJyxcbiAgICAgIHN0ZXBfbGFiZWw6IFwiV2hhdCdzIHlvdXIgZW1haWwgaW5mbz9cIixcbiAgICAgIGFuc3dlcl9sYWJlbHM6IFsnRW1haWwnXSxcbiAgICAgIGFuc3dlcl92YWx1ZXM6IFtyZWZlcnJhbC5lbWFpbCFdLFxuICAgICAgZm9ybV9uYW1lOiBGb3JtTmFtZU9wdGlvbnMuVEFYX1JFRkVSUkFMX0ZPUk1cbiAgICB9KTtcbiAgICBhd2FpdCBuZXh0U3RlcCgpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U3RlcFdyYXBwZXI+XG4gICAgICA8Zm9ybSByZWY9e2Zvcm1SZWZ9IG9uU3VibWl0PXtoYW5kbGVTdWJtaXQob25WYWxpZFN1Ym1pdCl9PlxuICAgICAgICA8U3RhbmRhcmRTdGVwVGl0bGU+V2hhdCdzIHlvdXIgZW1haWw/PC9TdGFuZGFyZFN0ZXBUaXRsZT5cbiAgICAgICAgPFN0YW5kYXJkU3RlcFN1YnRpdGxlVGV4dD5cbiAgICAgICAgICBXZSdsbCB1c2UgdGhpcyB0byBzZW5kIHRoZSBwcm9zJyBjb250YWN0IGluZm8gdG97J1xcdTAwQTAnfXlvdS5cbiAgICAgICAgPC9TdGFuZGFyZFN0ZXBTdWJ0aXRsZVRleHQ+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbS1ibG9jay14bFwiPlxuICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgIGlkPVwiZW1haWxcIlxuICAgICAgICAgICAgbGFiZWw9XCJFbWFpbFwiXG4gICAgICAgICAgICBzaXplPXtpbnB1dFNpemV9XG4gICAgICAgICAgICBpbnZhbGlkPXshIWVycm9ycy5lbWFpbH1cbiAgICAgICAgICAgIGVycm9ycz17W2Vycm9ycy5lbWFpbD8ubWVzc2FnZV19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgeygpID0+IChcbiAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKCdlbWFpbCcpfVxuICAgICAgICAgICAgICAgIGludmFsaWQ9eyEhZXJyb3JzLmVtYWlsfVxuICAgICAgICAgICAgICAgIHNpemU9e2lucHV0U2l6ZX1cbiAgICAgICAgICAgICAgICBpZD1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInRheF9lbWFpbF9pbnB1dFwiXG4gICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwiZW1haWxcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPFN0YW5kYXJkTmV4dEJ1dHRvbiAvPlxuICAgICAgPC9mb3JtPlxuICAgIDwvU3RlcFdyYXBwZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IEVtYWlsU3RlcCB9O1xuIiwiaW1wb3J0ICogYXMgWXVwIGZyb20gJ3l1cCc7XG5pbXBvcnQgeyBnZXRMb2NhdGlvbnNGcm9tWmlwIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoLm1lbW9pemUnO1xuXG5jb25zdCBlbXB0eVppcEVycm9yID0gJ1BsZWFzZSBlbnRlciB5b3VyIHppcFxcdTAwQTBjb2RlLic7XG5jb25zdCBpbnZhbGlkWmlwRXJyb3IgPSAnUGxlYXNlIGVudGVyIGEgdmFsaWQgemlwXFx1MDBBMGNvZGUuJztcbmNvbnN0IG1heENoYXJaaXBFcnJvciA9ICdQbGVhc2UgZW50ZXIgZml2ZSBjaGFyYWN0ZXJzIGZvciB5b3VyIHppcFxcdTAwQTBjb2RlLic7XG5jb25zdCBnZXRMb2NhdGlvbnMgPSBtZW1vaXplKGdldExvY2F0aW9uc0Zyb21aaXApO1xuXG5jb25zdCB6aXBTY2hlbWEgPSBZdXAub2JqZWN0KCkuc2hhcGUoe1xuICBwb3N0YWxfY29kZTogWXVwLnN0cmluZygpXG4gICAgLnRyaW0oKVxuICAgIC5yZXF1aXJlZChlbXB0eVppcEVycm9yKVxuICAgIC5tYXgoNSwgbWF4Q2hhclppcEVycm9yKVxuICAgIC5tYXRjaGVzKC9eXFxkezV9JC8sIGludmFsaWRaaXBFcnJvcilcbiAgICAudGVzdCgndGVzdC16aXAnLCBpbnZhbGlkWmlwRXJyb3IsIGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0TG9jYXRpb25zKHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggPiAwO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHdoaWxlIGZldGNoaW5nIGxvY2F0aW9ucyBmb3IgemlwIGNvZGU6ICR7dmFsdWV9YCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pXG59KTtcblxuZXhwb3J0IHsgemlwU2NoZW1hIH07XG4iLCJpbnRlcmZhY2UgTG9jYXRpb24ge1xuICBwb3N0YWxfY29kZTogc3RyaW5nO1xuICBsb25naXR1ZGU6IG51bWJlcjtcbiAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgY2l0eTogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgcmVnaW9uX2NvZGU6IHN0cmluZztcbiAgcmVnaW9uX25hbWU6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBkaXN0YW5jZTogbnVtYmVyO1xufVxuXG5jb25zdCBMT0NBVElPTl9HQVRFV0FZX0JBU0VfVVJMID1cbiAgJ2h0dHBzOi8vYXBpLmRydGxnaS5jb20vbG9jYXRpb24tZ2F0ZXdheS9wb3N0YWwtY29kZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TG9jYXRpb25zRnJvbVppcChcbiAgemlwQ29kZTogc3RyaW5nXG4pOiBQcm9taXNlPExvY2F0aW9uW10+IHtcbiAgY29uc3QgdXJsID0gYCR7TE9DQVRJT05fR0FURVdBWV9CQVNFX1VSTH0vPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgcG9zdGFsX2NvZGVzOiB6aXBDb2RlXG4gIH0pfWA7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGtlZXBhbGl2ZTogdHJ1ZVxuICB9KTtcblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcHRpbWl6ZWx5Q29udGV4dCB9IGZyb20gJ0BvcHRpbWl6ZWx5L3JlYWN0LXNkayc7XG5pbXBvcnQgeyB1c2VHQUZvcm1UcmFja2luZywgdXNlV2luZG93U2l6ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9ob29rcyc7XG5pbXBvcnQgeyB1c2VXaXphcmQgfSBmcm9tICdyZWFjdC11c2Utd2l6YXJkJztcbmltcG9ydCB7IFJlZmVycmFsRm9ybURhdGEsIHVzZVJlZmVycmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB5dXBSZXNvbHZlciB9IGZyb20gJ0Bob29rZm9ybS9yZXNvbHZlcnMveXVwJztcbmltcG9ydCB7IHppcFNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvemlwU2NoZW1hJztcbmltcG9ydCB7IHppcFByb0xvb2t1cCB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyBmaXJlT3B0aW1pemVseUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3V0aWxzJztcbmltcG9ydCB7IHRyYWNrU3RlcENvbXBsZXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9hbmFseXRpY3MnO1xuaW1wb3J0IHsgRm9ybU5hbWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vZW51bXMvRm9ybU5hbWVPcHRpb25zJztcbmltcG9ydCB7XG4gIFByb0pvaW5PdXJQcm9ncmFtLFxuICBTdGFuZGFyZFN0ZXBTdWJ0aXRsZVRleHQsXG4gIFN0YW5kYXJkU3RlcFRpdGxlLFxuICBTdGVwV3JhcHBlclxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzJztcbmltcG9ydCBGb3JtRmllbGQgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2Zvcm0tZmllbGQnO1xuaW1wb3J0IElucHV0IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9pbnB1dCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9idXR0b24nO1xuaW1wb3J0IHsgQXJyb3dSaWdodEljb24gfSBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vaWNvbnMnO1xuXG5pbnRlcmZhY2UgQ29tcGxleGl0eUxvY2F0aW9uU3RlcEZpZWxkcyB7XG4gIHBvc3RhbF9jb2RlOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIExvY2F0aW9uU3RlcCgpIHtcbiAgY29uc3QgeyBvcHRpbWl6ZWx5IH0gPSB1c2VDb250ZXh0KE9wdGltaXplbHlDb250ZXh0KTtcbiAgY29uc3QgZm9ybVJlZiA9IHVzZUdBRm9ybVRyYWNraW5nKFxuICAgIG9wdGltaXplbHksXG4gICAgJ2NvbXBsZXhpdHlfd2hlcmVfYXJlX3lvdV9sb2NhdGVkX3N0ZXAnXG4gICk7XG4gIGNvbnN0IHsgbmV4dFN0ZXAsIGFjdGl2ZVN0ZXAgfSA9IHVzZVdpemFyZCgpO1xuICBjb25zdCB7IHJlZmVycmFsLCB1cGRhdGVSZWZlcnJhbCwgdXBkYXRlUHJvSW5mbyB9ID0gdXNlUmVmZXJyYWxDb250ZXh0KCk7XG4gIGNvbnN0IHtcbiAgICByZWdpc3RlcixcbiAgICBoYW5kbGVTdWJtaXQsXG4gICAgZm9ybVN0YXRlOiB7IGVycm9ycyB9XG4gIH0gPSB1c2VGb3JtPENvbXBsZXhpdHlMb2NhdGlvblN0ZXBGaWVsZHM+KHtcbiAgICBkZWZhdWx0VmFsdWVzOiB7IHBvc3RhbF9jb2RlOiByZWZlcnJhbC5wb3N0YWxfY29kZSB9LFxuICAgIHJlc29sdmVyOiB5dXBSZXNvbHZlcih6aXBTY2hlbWEpXG4gIH0pO1xuICBjb25zdCB7IHdpZHRoIH0gPSB1c2VXaW5kb3dTaXplKCk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9Mb29rdXAocG9zdGFsQ29kZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHppcFByb0xvb2t1cChwb3N0YWxDb2RlKTtcbiAgICAgIHVwZGF0ZVByb0luZm8ocmVzdWx0KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1Byb0xvb2t1cCBGYWlsZWQnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBvblZhbGlkU3VibWl0KHJlZmVycmFsOiBQYXJ0aWFsPFJlZmVycmFsRm9ybURhdGE+KSB7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIHVwZGF0ZVJlZmVycmFsKHJlZmVycmFsKTtcbiAgICBmaXJlT3B0aW1pemVseUV2ZW50KG9wdGltaXplbHksICdsb2NhdGlvbl9zdGVwX2NvbXBsZXRlZCcpO1xuICAgIHRyYWNrU3RlcENvbXBsZXRlZCh7XG4gICAgICBzdGVwOiBhY3RpdmVTdGVwICsgMSxcbiAgICAgIHN0ZXBfbmFtZTogJ2xvY2F0aW9uX3N0ZXAnLFxuICAgICAgc3RlcF9sYWJlbDpcbiAgICAgICAgXCJXZSdsbCBsb29rIGZvciBhIHRheCBwcm8gbmVhciB5b3UgKGFuZCBpZiB0aGVyZSBhcmUgbm9uZSwgd2UnbGwgY29ubmVjdCB5b3Ugd2l0aCBvdXIgbmF0aW9uYWwgcGFydG5lcikuXCIsXG4gICAgICBhbnN3ZXJfbGFiZWxzOiBbJ1ppcCBDb2RlJ10sXG4gICAgICBhbnN3ZXJfdmFsdWVzOiBbcmVmZXJyYWwucG9zdGFsX2NvZGUhXSxcbiAgICAgIGZvcm1fbmFtZTogRm9ybU5hbWVPcHRpb25zLlRBWF9SRUZFUlJBTF9GT1JNXG4gICAgfSk7XG5cbiAgICBhd2FpdCBmZXRjaFByb0xvb2t1cChyZWZlcnJhbC5wb3N0YWxfY29kZSA/PyAnJyk7XG4gICAgYXdhaXQgbmV4dFN0ZXAoKTtcbiAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U3RlcFdyYXBwZXI+XG4gICAgICA8Zm9ybSByZWY9e2Zvcm1SZWZ9IG9uU3VibWl0PXtoYW5kbGVTdWJtaXQob25WYWxpZFN1Ym1pdCl9PlxuICAgICAgICA8U3RhbmRhcmRTdGVwVGl0bGU+V2hlcmUgYXJlIHlvdSBsb2NhdGVkPzwvU3RhbmRhcmRTdGVwVGl0bGU+XG4gICAgICAgIDxTdGFuZGFyZFN0ZXBTdWJ0aXRsZVRleHQ+XG4gICAgICAgICAgV2UnbGwgZmluZCBhIHRheCBwcm8gc2VydmluZyB5b3VyIGFyZWEuXG4gICAgICAgIDwvU3RhbmRhcmRTdGVwU3VidGl0bGVUZXh0PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibS1ibG9jay14bFwiPlxuICAgICAgICAgIDxGb3JtRmllbGRcbiAgICAgICAgICAgIGlkPVwiemlwX2NvZGVcIlxuICAgICAgICAgICAgbGFiZWw9XCJaaXAgQ29kZVwiXG4gICAgICAgICAgICBzaXplPXt3aWR0aCA+IDU5OSA/ICdsZycgOiAnbWQnfVxuICAgICAgICAgICAgaW52YWxpZD17ISFlcnJvcnMucG9zdGFsX2NvZGV9XG4gICAgICAgICAgICBlcnJvcnM9e1tlcnJvcnMucG9zdGFsX2NvZGU/Lm1lc3NhZ2VdfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsoKSA9PiAoXG4gICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgIHsuLi5yZWdpc3RlcigncG9zdGFsX2NvZGUnKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9eychbWF4LXctZnVsbCd9XG4gICAgICAgICAgICAgICAgc2l6ZT17d2lkdGggPiA1OTkgPyAnbGcnIDogJ21kJ31cbiAgICAgICAgICAgICAgICBpbnZhbGlkPXshIWVycm9ycy5wb3N0YWxfY29kZX1cbiAgICAgICAgICAgICAgICBpZD1cInppcF9jb2RlXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInRheF96aXBfY29kZV9pbnB1dFwiXG4gICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwicG9zdGFsLWNvZGVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwic3RhbmRhcmRfbmV4dF9idXR0b25cIlxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIGljb249e2lzTG9hZGluZyA/IHVuZGVmaW5lZCA6IEFycm93UmlnaHRJY29ufVxuICAgICAgICAgIGljb25Qb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgICBjbGFzc05hbWU9eychdy1mdWxsJ31cbiAgICAgICAgICBmdWxsV2lkdGhPbk1vYmlsZT17dHJ1ZX1cbiAgICAgICAgICBzaXplPXt3aWR0aCA+IDU5OSA/ICdsYXJnZScgOiAnbWVkaXVtJ31cbiAgICAgICAgICBsb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgID5cbiAgICAgICAgICB7aXNMb2FkaW5nID8gJ0xvYWRpbmcnIDogJ05leHQnfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvZm9ybT5cbiAgICAgIDxQcm9Kb2luT3VyUHJvZ3JhbSAvPlxuICAgIDwvU3RlcFdyYXBwZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IExvY2F0aW9uU3RlcCB9O1xuIiwiaW1wb3J0IHsgZ2V0VGF4RnVsbFVybCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyBQcm9EYXRhIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcblxuYXN5bmMgZnVuY3Rpb24gemlwUHJvTG9va3VwKHBvc3RhbENvZGU6IHN0cmluZywgYmFzZVVSTCA9IGdldFRheEZ1bGxVcmwoKSkge1xuICBjb25zdCB1cmwgPSBgJHtiYXNlVVJMfS9hcGkvcHJvLWxvb2t1cGA7XG5cbiAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gIH07XG5cbiAgY29uc3QgYm9keSA9IHtcbiAgICBwcm9ncmFtczogWyd0YXgnXSxcbiAgICBwb3N0YWxfY29kZTogcG9zdGFsQ29kZVxuICB9O1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogaGVhZGVycyxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KVxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcHJvIGxvb2t1cCcpO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICByZXR1cm4gZGF0YVswXSA/PyAoe30gYXMgUHJvRGF0YSk7XG59XG5cbmV4cG9ydCB7IHppcFByb0xvb2t1cCB9O1xuIiwiaW1wb3J0IHsgVGF4U2VydmljZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBHZW5lcmljQ2hlY2tib3hTdGVwIH0gZnJvbSAnLi9HZW5lcmljQ2hlY2tib3hTdGVwJztcblxuZnVuY3Rpb24gU2VydmljZXNTdGVwKCkge1xuICByZXR1cm4gKFxuICAgIDxHZW5lcmljQ2hlY2tib3hTdGVwXG4gICAgICB0aXRsZT1cIldoYXQgZG8geW91IG5lZWQgaGVscMKgd2l0aD9cIlxuICAgICAgc3VidGl0bGU9XCJUaGlzIHdpbGwgZ2l2ZSB5b3VyIHBybyBhbiBpZGVhIG9mIGhvdyB0aGV5IGNhbiBzZXJ2ZcKgeW91LlwiXG4gICAgICBjaGVja2JveE9wdGlvbnM9e1RheFNlcnZpY2VPcHRpb25zfVxuICAgICAgcmVmZXJyYWxGaWVsZE5hbWU9XCJpbnRlcmVzdHNcIlxuICAgICAgc3RlcE5hbWU9XCJzZXJ2aWNlc19zdGVwXCJcbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgeyBTZXJ2aWNlc1N0ZXAgfTtcbiIsImltcG9ydCB7IFRheEludGVudE9wdGlvbnMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBHZW5lcmljQ2hlY2tib3hTdGVwIH0gZnJvbSAnLi9HZW5lcmljQ2hlY2tib3hTdGVwJztcblxuZnVuY3Rpb24gSW50ZW50U3RlcCgpIHtcbiAgcmV0dXJuIChcbiAgICA8R2VuZXJpY0NoZWNrYm94U3RlcFxuICAgICAgdGl0bGU9XCJIb3cgY2FuIGEgdGF4IHBybyBiZXN0IHN1cHBvcnTCoHlvdT9cIlxuICAgICAgc3VidGl0bGU9XCJTZWxlY3QgYWxsIHRoYXTCoGFwcGx5LlwiXG4gICAgICBjaGVja2JveE9wdGlvbnM9e1RheEludGVudE9wdGlvbnN9XG4gICAgICByZWZlcnJhbEZpZWxkTmFtZT1cInRheF9pbnRlbnRzXCJcbiAgICAgIHN0ZXBOYW1lPVwiaW50ZW50X3N0ZXBcIlxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IEludGVudFN0ZXAgfTtcbiIsImltcG9ydCAqIGFzIFl1cCBmcm9tICd5dXAnO1xuXG5jb25zdCBjb21wbGV4aXR5VmFsaWRhdGlvbiA9IFl1cC5zdHJpbmcoKS5yZXF1aXJlZChcbiAgJ1BsZWFzZSBjaG9vc2Ugb25lIG9wdGlvbiB0byBjb250aW51ZS4nXG4pO1xuXG5jb25zdCBjb21wbGV4aXR5U2NoZW1hID0gWXVwLm9iamVjdCgpLnNoYXBlKHtcbiAgY29tcGxleGl0eV9jb25jZXJuOiBjb21wbGV4aXR5VmFsaWRhdGlvblxufSk7XG5cbmV4cG9ydCB7IGNvbXBsZXhpdHlTY2hlbWEgfTtcbiIsImltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxudmFyIGdldEljb25Qcm9wcyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSB7XG4gICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcInJkcy1SYWRpb1RpbGUtaWNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIF9hW1wiYXJpYS1oaWRkZW5cIl0gPSB0cnVlLFxuICAgICAgICBfYS5mb2N1c2FibGUgPSBmYWxzZSxcbiAgICAgICAgX2EpO1xufTtcbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW1JEUyBSYWRpbyBUaWxlXShodHRwczovL2Rlc2lnbi5yYW1zZXlzb2x1dGlvbnMuY29tL3N0b3J5Ym9vay8/cGF0aD0vc3RvcnkvZGVzaWduLXN5c3RlbS1yYWRpby10aWxlLS1kZWZhdWx0KVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFtSRFMgUmFkaW8gVGlsZSBBUEldKGh0dHBzOi8vZGVzaWduLnJhbXNleXNvbHV0aW9ucy5jb20vY29tcG9uZW50cy9yYWRpby10aWxlLz90YWI9dGVjaG5vbG9naWVzI3JlYWN0KVxuICovXG52YXIgUmFkaW9UaWxlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX2EsIHJlZikge1xuICAgIHZhciBfYjtcbiAgICB2YXIgX2MgPSBfYS5ib3JkZXIsIGJvcmRlciA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgUmFkaW9UaWxlSWNvbiA9IF9hLmljb24sIGlkUHJvcCA9IF9hLmlkLCBpbWFnZSA9IF9hLmltYWdlLCBsYWJlbCA9IF9hLmxhYmVsLCBfZCA9IF9hLnNpemUsIHNpemUgPSBfZCA9PT0gdm9pZCAwID8gXCJtZFwiIDogX2QsIHZlcnRpY2FsID0gX2EudmVydGljYWwsIHJlc3QgPSBfX3Jlc3QoX2EsIFtcImJvcmRlclwiLCBcImNsYXNzTmFtZVwiLCBcImljb25cIiwgXCJpZFwiLCBcImltYWdlXCIsIFwibGFiZWxcIiwgXCJzaXplXCIsIFwidmVydGljYWxcIl0pO1xuICAgIHZhciBkZWZhdWx0SWRSZWYgPSB1c2VSZWYoXCJyZHMtcmFkaW8tXCIuY29uY2F0KE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDE2KSkpO1xuICAgIHZhciBpZCA9IGlkUHJvcCB8fCBkZWZhdWx0SWRSZWYuY3VycmVudDtcbiAgICB2YXIgcmFkaW9UaWxlQ2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJyZHMtUmFkaW9UaWxlXCIsIChfYiA9IHt9LFxuICAgICAgICBfYltcInJkcy1SYWRpb1RpbGUtLVwiLmNvbmNhdChzaXplKV0gPSBzaXplICE9PSBcIm1kXCIsXG4gICAgICAgIF9iW1wicmRzLVJhZGlvVGlsZS0tYm9yZGVyXCJdID0gYm9yZGVyLFxuICAgICAgICBfYltcInJkcy1SYWRpb1RpbGUtLXZlcnRpY2FsXCJdID0gdmVydGljYWwsXG4gICAgICAgIF9iKSwgY2xhc3NOYW1lKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHJhZGlvVGlsZUNsYXNzZXMgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9fYXNzaWduKHsgdHlwZTogXCJyYWRpb1wiLCByZWY6IHJlZiwgaWQ6IGlkIH0sIHJlc3QpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgaHRtbEZvcjogaWQgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJkcy1SYWRpb1RpbGUtYnV0dG9uXCIgfSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJyZHMtUmFkaW9UaWxlLWNvbnRlbnRcIiB9LFxuICAgICAgICAgICAgICAgIFJhZGlvVGlsZUljb24gJiYgIXZlcnRpY2FsICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFJhZGlvVGlsZUljb24sIF9fYXNzaWduKHt9LCBnZXRJY29uUHJvcHMoKSkpKSxcbiAgICAgICAgICAgICAgICBpbWFnZSAmJiB2ZXJ0aWNhbCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmRzLVJhZGlvVGlsZS1pbWFnZVwiIH0sIGltYWdlKSksXG4gICAgICAgICAgICAgICAgbGFiZWwpKSkpO1xufSk7XG5SYWRpb1RpbGUuZGlzcGxheU5hbWUgPSBcIlJhZGlvVGlsZVwiO1xuXG5leHBvcnQgeyBSYWRpb1RpbGUgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmFkaW9UaWxlLmVzbS5qcy5tYXBcbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcHRpbWl6ZWx5Q29udGV4dCB9IGZyb20gJ0BvcHRpbWl6ZWx5L3JlYWN0LXNkayc7XG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZVdpemFyZCB9IGZyb20gJ3JlYWN0LXVzZS13aXphcmQnO1xuaW1wb3J0IHsgeXVwUmVzb2x2ZXIgfSBmcm9tICdAaG9va2Zvcm0vcmVzb2x2ZXJzL3l1cCc7XG5pbXBvcnQge1xuICBTdGFuZGFyZE5leHRCdXR0b24sXG4gIFN0YW5kYXJkU3RlcFRpdGxlLFxuICBTdGVwV3JhcHBlclxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzJztcbmltcG9ydCB7IGNvbXBsZXhpdHlTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL2NvbXBsZXhpdHlTY2hlbWEnO1xuaW1wb3J0IHsgZmlyZU9wdGltaXplbHlFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgUmFkaW9UaWxlIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9yYWRpby10aWxlJztcbmltcG9ydCB7IHRyYWNrU3RlcENvbXBsZXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9hbmFseXRpY3MnO1xuaW1wb3J0IHsgRm9ybU5hbWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vZW51bXMvRm9ybU5hbWVPcHRpb25zJztcbmltcG9ydCB7IHVzZUdBRm9ybVRyYWNraW5nIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2hvb2tzJztcbmltcG9ydCB7IHVzZVJlZmVycmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQnO1xuXG5pbnRlcmZhY2UgQ29tcGxleGl0eVN0ZXBGaWVsZHMge1xuICBjb21wbGV4aXR5X2NvbmNlcm46IHN0cmluZztcbn1cblxuZnVuY3Rpb24gUHJlUmVmZXJyYWxDb21wbGV4aXR5Q29uY2VyblN0ZXAoKSB7XG4gIGNvbnN0IHsgb3B0aW1pemVseSB9ID0gdXNlQ29udGV4dChPcHRpbWl6ZWx5Q29udGV4dCk7XG4gIGNvbnN0IGZvcm1SZWYgPSB1c2VHQUZvcm1UcmFja2luZyhvcHRpbWl6ZWx5LCAnY29tcGxleGl0eV9jb25jZXJuX3N0ZXAnKTtcbiAgY29uc3QgeyBuZXh0U3RlcCwgYWN0aXZlU3RlcCB9ID0gdXNlV2l6YXJkKCk7XG4gIGNvbnN0IHsgcmVmZXJyYWwsIHVwZGF0ZVJlZmVycmFsIH0gPSB1c2VSZWZlcnJhbENvbnRleHQoKTtcbiAgY29uc3QgeyByZWdpc3RlciwgaGFuZGxlU3VibWl0LCBmb3JtU3RhdGUgfSA9IHVzZUZvcm08Q29tcGxleGl0eVN0ZXBGaWVsZHM+KHtcbiAgICBkZWZhdWx0VmFsdWVzOiB7IGNvbXBsZXhpdHlfY29uY2VybjogcmVmZXJyYWwuY29tcGxleGl0eV9jb25jZXJuID8/ICcnIH0sXG4gICAgcmVzb2x2ZXI6IHl1cFJlc29sdmVyKGNvbXBsZXhpdHlTY2hlbWEpXG4gIH0pO1xuICBjb25zdCBhbnN3ZXJPcHRpb25zID0gW1xuICAgICdFeHRyZW1lbHkgY29uY2VybmVkJyxcbiAgICAnVmVyeSBjb25jZXJuZWQnLFxuICAgICdTb21ld2hhdCBjb25jZXJuZWQnLFxuICAgICdTbGlnaHRseSBjb25jZXJuZWQnLFxuICAgICdOb3QgYXQgYWxsIGNvbmNlcm5lZCdcbiAgXTtcbiAgY29uc3Qgc3RlcExhYmVsID0gJ0hvdyBjb25jZXJuZWQgYXJlIHlvdSBhYm91dCB0aGUgY29tcGxleGl0eSBvZiB5b3VyIHRheGVzPyc7XG5cbiAgYXN5bmMgZnVuY3Rpb24gb25WYWxpZFN1Ym1pdCh0YXhRdWVzdGlvblZhbHVlczogQ29tcGxleGl0eVN0ZXBGaWVsZHMpIHtcbiAgICB1cGRhdGVSZWZlcnJhbCh7XG4gICAgICAuLi5yZWZlcnJhbCxcbiAgICAgIGNvbXBsZXhpdHlfY29uY2VybjogdGF4UXVlc3Rpb25WYWx1ZXMuY29tcGxleGl0eV9jb25jZXJuXG4gICAgfSk7XG4gICAgZmlyZU9wdGltaXplbHlFdmVudChvcHRpbWl6ZWx5LCAnY29tcGxleGl0eV9jb25jZXJuX3N0ZXBfY29tcGxldGVkJyk7XG4gICAgdHJhY2tTdGVwQ29tcGxldGVkKHtcbiAgICAgIHN0ZXA6IGFjdGl2ZVN0ZXAgKyAxLFxuICAgICAgc3RlcF9uYW1lOiAncHJlX3JlZmVycmFsX2NvbXBsZXhpdHlfY29uY2Vybl9zdGVwJyxcbiAgICAgIHN0ZXBfbGFiZWw6IHN0ZXBMYWJlbCxcbiAgICAgIGFuc3dlcl9sYWJlbHM6IGFuc3dlck9wdGlvbnMsXG4gICAgICBhbnN3ZXJfdmFsdWVzOiBbdGF4UXVlc3Rpb25WYWx1ZXMuY29tcGxleGl0eV9jb25jZXJuID8/ICcnXSxcbiAgICAgIGZvcm1fbmFtZTogRm9ybU5hbWVPcHRpb25zLlRBWF9SRUZFUlJBTF9GT1JNXG4gICAgfSk7XG4gICAgYXdhaXQgbmV4dFN0ZXAoKTtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGZvcm1TdGF0ZS5lcnJvcnMuY29tcGxleGl0eV9jb25jZXJuPy5tZXNzYWdlO1xuXG4gIHJldHVybiAoXG4gICAgPFN0ZXBXcmFwcGVyPlxuICAgICAgPGZvcm0gcmVmPXtmb3JtUmVmfSBvblN1Ym1pdD17aGFuZGxlU3VibWl0KG9uVmFsaWRTdWJtaXQpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtLWJsb2NrLXhsXCI+XG4gICAgICAgICAgPFN0YW5kYXJkU3RlcFRpdGxlPntzdGVwTGFiZWx9PC9TdGFuZGFyZFN0ZXBUaXRsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibS1ibG9jay14bCBzcGFjZS15LTJcIj5cbiAgICAgICAgICB7YW5zd2VyT3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgPFJhZGlvVGlsZVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17b3B0aW9uXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnICcsICdfJylcbiAgICAgICAgICAgICAgICAuY29uY2F0KCdfdGF4X2NvbXBsZXhpdHlfY29uY2Vybl9yYWRpb190aWxlJyl9XG4gICAgICAgICAgICAgIHsuLi5yZWdpc3RlcignY29tcGxleGl0eV9jb25jZXJuJyl9XG4gICAgICAgICAgICAgIGxhYmVsPXtvcHRpb259XG4gICAgICAgICAgICAgIHZhbHVlPXtvcHRpb259XG4gICAgICAgICAgICAgIGlkPXtvcHRpb25cbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcgJywgJ18nKVxuICAgICAgICAgICAgICAgIC5jb25jYXQoJ190YXhfY29tcGxleGl0eV9jb25jZXJuX3JhZGlvX3RpbGUnKX1cbiAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAge2Vycm9yTWVzc2FnZSAmJiA8cCBjbGFzc05hbWU9XCJ0ZXh0LTIgdGV4dC1yZWQtNjBcIj57ZXJyb3JNZXNzYWdlfTwvcD59XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxTdGFuZGFyZE5leHRCdXR0b24gLz5cbiAgICAgIDwvZm9ybT5cbiAgICA8L1N0ZXBXcmFwcGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBQcmVSZWZlcnJhbENvbXBsZXhpdHlDb25jZXJuU3RlcCB9O1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBXaXphcmQgfSBmcm9tICdyZWFjdC11c2Utd2l6YXJkJztcbmltcG9ydCB7IHRyYWNrRm9ybVN0YXJ0ZWQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvYW5hbHl0aWNzJztcbmltcG9ydCB7XG4gIGdlbmVyYXRlQmFzZWxpbmVGbG93LFxuICBnZW5lcmF0ZVBIUXVlc3Rpb25zRmxvdyxcbiAgZ2VuZXJhdGVRdWVzdGlvbnNTdGVwRm9yQWxsRmxvd3MsXG4gIHNob3VsZFJlY2VpdmVQSFF1ZXN0aW9uc0Zsb3dcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgdXNlUmVmZXJyYWxDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQgeyBGb3JtTmFtZU9wdGlvbnMgfSBmcm9tICcuLi9lbnVtcy9Gb3JtTmFtZU9wdGlvbnMnO1xuaW1wb3J0IHtcbiAgTG9jYXRpb25TdGVwLFxuICBFbWFpbFN0ZXAsXG4gIFBob25lU3RlcCxcbiAgU2VydmljZXNTdGVwLFxuICBWZXJpZmljYXRpb25TdGVwLFxuICBQcmVSZWZlcnJhbENvbXBsZXhpdHlDb25jZXJuU3RlcCxcbiAgRnVsbE5hbWVTdGVwXG59IGZyb20gJy4vc3RlcHMnO1xuXG5mdW5jdGlvbiBSZWZlcnJhbEZvcm0oKSB7XG4gIGNvbnN0IHsgcmVmZXJyYWwsIHByb0luZm8gfSA9IHVzZVJlZmVycmFsQ29udGV4dCgpO1xuICBjb25zdCBmb3JtV3JhcHBlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGhhc0ZvY3VzZWQgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZU9uRm9jdXNJbigpIHtcbiAgICBpZiAoIWhhc0ZvY3VzZWQuY3VycmVudCkge1xuICAgICAgdHJhY2tGb3JtU3RhcnRlZCh7IGZvcm1fbmFtZTogRm9ybU5hbWVPcHRpb25zLlRBWF9SRUZFUlJBTF9GT1JNIH0pO1xuICAgICAgaGFzRm9jdXNlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1XcmFwcGVyUmVmRWxlbWVudCA9IGZvcm1XcmFwcGVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGZvcm1XcmFwcGVyUmVmRWxlbWVudCkge1xuICAgICAgZm9ybVdyYXBwZXJSZWZFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBoYW5kbGVPbkZvY3VzSW4pO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBmb3JtV3JhcHBlclJlZkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIGhhbmRsZU9uRm9jdXNJbik7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2Zvcm1XcmFwcGVyUmVmfT5cbiAgICAgIDxXaXphcmQ+XG4gICAgICAgIDxMb2NhdGlvblN0ZXAgLz5cbiAgICAgICAgPFNlcnZpY2VzU3RlcCAvPlxuXG4gICAgICAgIHtzaG91bGRSZWNlaXZlUEhRdWVzdGlvbnNGbG93KHByb0luZm8pICYmXG4gICAgICAgICAgZ2VuZXJhdGVQSFF1ZXN0aW9uc0Zsb3cocmVmZXJyYWwpfVxuXG4gICAgICAgIHshc2hvdWxkUmVjZWl2ZVBIUXVlc3Rpb25zRmxvdyhwcm9JbmZvKSAmJlxuICAgICAgICAgIGdlbmVyYXRlQmFzZWxpbmVGbG93KHJlZmVycmFsKX1cblxuICAgICAgICB7Z2VuZXJhdGVRdWVzdGlvbnNTdGVwRm9yQWxsRmxvd3MocmVmZXJyYWwpfVxuXG4gICAgICAgIDxQcmVSZWZlcnJhbENvbXBsZXhpdHlDb25jZXJuU3RlcCAvPlxuICAgICAgICA8RnVsbE5hbWVTdGVwIC8+XG4gICAgICAgIDxFbWFpbFN0ZXAgLz5cbiAgICAgICAgPFBob25lU3RlcCAvPlxuICAgICAgICA8VmVyaWZpY2F0aW9uU3RlcCAvPlxuICAgICAgPC9XaXphcmQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCB7IFJlZmVycmFsRm9ybSB9O1xuIiwiaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxudmFyIGdldENvbmRpdGlvbmFsUHJvcHMgPSBmdW5jdGlvbiAoZGlzYWJsZWQsIGlzTGluaywgaHJlZikgeyByZXR1cm4gKHtcbiAgICBocmVmOiAhZGlzYWJsZWQgPyBocmVmIDogdW5kZWZpbmVkLFxuICAgIFwiYXJpYS1kaXNhYmxlZFwiOiAoaXNMaW5rICYmIGRpc2FibGVkKSB8fCB1bmRlZmluZWQsXG4gICAgZGlzYWJsZWQ6ICFpc0xpbmsgJiYgZGlzYWJsZWQsXG59KTsgfTtcbnZhciBnZXRMaW5rSWNvblByb3BzID0gZnVuY3Rpb24gKGljb25Qb3NpdGlvbikge1xuICAgIHZhciBfYTtcbiAgICB2YXIgaWNvbkNsYXNzZXMgPSBjbGFzc05hbWVzKFwicmRzLUxpbmstaWNvblwiLCBcInJkcy1MaW5rLWljb24tLVwiLmNvbmNhdChpY29uUG9zaXRpb24pKTtcbiAgICByZXR1cm4gX2EgPSB7XG4gICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBpY29uQ2xhc3Nlc1xuICAgICAgICB9LFxuICAgICAgICBfYVtcImFyaWEtaGlkZGVuXCJdID0gdHJ1ZSxcbiAgICAgICAgX2EuZm9jdXNhYmxlID0gZmFsc2UsXG4gICAgICAgIF9hO1xufTtcbmZ1bmN0aW9uIExpbmsoX2EsIHJlZikge1xuICAgIHZhciBfYjtcbiAgICB2YXIgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBkaXNhYmxlZCA9IF9hLmRpc2FibGVkLCBlbGVtZW50ID0gX2EuZWxlbWVudCwgaHJlZiA9IF9hLmhyZWYsIExpbmtJY29uID0gX2EuaWNvbiwgX2MgPSBfYS5pY29uUG9zaXRpb24sIGljb25Qb3NpdGlvbiA9IF9jID09PSB2b2lkIDAgPyBcImxlZnRcIiA6IF9jLCBfZCA9IF9hLmluaGVyaXRDb2xvciwgaW5oZXJpdENvbG9yID0gX2QgPT09IHZvaWQgMCA/IGZhbHNlIDogX2QsIF9lID0gX2EuaXNPbkRhcmtDYW52YXMsIGlzT25EYXJrQ2FudmFzID0gX2UgPT09IHZvaWQgMCA/IGZhbHNlIDogX2UsIF9mID0gX2Euc2l6ZSwgc2l6ZSA9IF9mID09PSB2b2lkIDAgPyBcIm1lZGl1bVwiIDogX2YsIHRleHQgPSBfYS50ZXh0LCByZXN0ID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiZWxlbWVudFwiLCBcImhyZWZcIiwgXCJpY29uXCIsIFwiaWNvblBvc2l0aW9uXCIsIFwiaW5oZXJpdENvbG9yXCIsIFwiaXNPbkRhcmtDYW52YXNcIiwgXCJzaXplXCIsIFwidGV4dFwiXSk7XG4gICAgdmFyIGlzTGluayA9IGVsZW1lbnQgIT09IFwiYnV0dG9uXCI7XG4gICAgdmFyIEVsZW1lbnQgPSBlbGVtZW50IHx8IFwiYVwiO1xuICAgIHZhciBsaW5rQ2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJyZHMtTGlua1wiLCAoX2IgPSB7fSxcbiAgICAgICAgX2JbXCJyZHMtTGluay0tXCIuY29uY2F0KHNpemUpXSA9IHNpemUgIT09IFwibWVkaXVtXCIsXG4gICAgICAgIF9iW1wicmRzLUxpbmstLWluaGVyaXRDb2xvclwiXSA9IGluaGVyaXRDb2xvcixcbiAgICAgICAgX2JbXCJpcy1kaXNhYmxlZFwiXSA9IGlzTGluayAmJiBkaXNhYmxlZCxcbiAgICAgICAgX2JbXCJvbi1kYXJrQ2FudmFzXCJdID0gaXNPbkRhcmtDYW52YXMsXG4gICAgICAgIF9iKSwgY2xhc3NOYW1lKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRWxlbWVudCwgX19hc3NpZ24oeyBjbGFzc05hbWU6IGxpbmtDbGFzc2VzIH0sIGdldENvbmRpdGlvbmFsUHJvcHMoZGlzYWJsZWQsIGlzTGluaywgaHJlZiksIHJlc3QsIHsgcmVmOiByZWYgfSksXG4gICAgICAgIExpbmtJY29uICYmIGljb25Qb3NpdGlvbiA9PT0gXCJsZWZ0XCIgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlua0ljb24sIF9fYXNzaWduKHt9LCBnZXRMaW5rSWNvblByb3BzKGljb25Qb3NpdGlvbikpKSksXG4gICAgICAgIGNoaWxkcmVuIHx8IHRleHQsXG4gICAgICAgIExpbmtJY29uICYmIGljb25Qb3NpdGlvbiA9PT0gXCJyaWdodFwiICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KExpbmtJY29uLCBfX2Fzc2lnbih7fSwgZ2V0TGlua0ljb25Qcm9wcyhpY29uUG9zaXRpb24pKSkpKSk7XG59XG52YXIgQ29tcG9uZW50ID0gZm9yd2FyZFJlZihMaW5rKTtcbkNvbXBvbmVudC5kaXNwbGF5TmFtZSA9IFwiTGlua1wiO1xuXG5leHBvcnQgeyBDb21wb25lbnQgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TGluay5lc20uanMubWFwXG4iLCJpbXBvcnQgTGluayBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vbGluayc7XG5pbXBvcnQgeyB1c2VXaW5kb3dTaXplIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2hvb2tzJztcblxuZnVuY3Rpb24gUHJvSm9pbk91clByb2dyYW0oKSB7XG4gIGNvbnN0IHsgd2lkdGggfSA9IHVzZVdpbmRvd1NpemUoKTtcblxuICByZXR1cm4gKFxuICAgIDxwIGNsYXNzTmFtZT1cIm10LTQgdGV4dC0zIHNtOnRleHQtNCBsZWFkaW5nLWxnIHRleHQtY2VudGVyXCI+XG4gICAgICBBcmUgeW91IGEgdGF4IHBybz97JyAnfVxuICAgICAgPExpbmtcbiAgICAgICAgaHJlZj1cImh0dHBzOi8vd3d3LnJhbXNleXNvbHV0aW9ucy5jb20vdGF4ZXMvdGF4LXBybz9jYW1wYWlnbl9uYW1lPVRydXN0ZWRfQjJCX1RheF9CMkNfVHJhbnNpdGlvbmFsX0NUQVwiXG4gICAgICAgIHNpemU9e3dpZHRoID4gNTk5ID8gJ2xhcmdlJyA6ICdtZWRpdW0nfVxuICAgICAgICBjbGFzc05hbWU9XCIhdW5kZXJsaW5lXCJcbiAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0YXhfYjJiX2xpbmtcIlxuICAgICAgPlxuICAgICAgICBKb2lueydcXHUwMEEwJ31vdXJ7J1xcdTAwQTAnfXByb2dyYW1cbiAgICAgIDwvTGluaz5cbiAgICAgIC5cbiAgICA8L3A+XG4gICk7XG59XG5cbmV4cG9ydCB7IFByb0pvaW5PdXJQcm9ncmFtIH07XG4iLCJpbXBvcnQgeyBQSFBlcnNvbmFsSW50ZW50T3B0aW9ucyB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IEdlbmVyaWNDaGVja2JveFN0ZXAgfSBmcm9tICcuLi9zdGVwcyc7XG5cbmZ1bmN0aW9uIFBIUGVyc29uYWxJbnRlbnRTdGVwKCkge1xuICByZXR1cm4gKFxuICAgIDxHZW5lcmljQ2hlY2tib3hTdGVwXG4gICAgICB0aXRsZT1cIkhvdyBjYW4gYSB0YXggcHJvIGJlc3Qgc3VwcG9ydMKgeW91P1wiXG4gICAgICBzdWJ0aXRsZT1cIlNlbGVjdCBhbGwgdGhhdMKgYXBwbHkuXCJcbiAgICAgIGNoZWNrYm94T3B0aW9ucz17UEhQZXJzb25hbEludGVudE9wdGlvbnN9XG4gICAgICByZWZlcnJhbEZpZWxkTmFtZT1cInBoX3BlcnNvbmFsX2ludGVudHNcIlxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IFBIUGVyc29uYWxJbnRlbnRTdGVwIH07XG4iLCJpbXBvcnQgeyBHZW5lcmljQ2hlY2tib3hTdGVwIH0gZnJvbSAnLi4vc3RlcHMnO1xuaW1wb3J0IHsgUEhBZHZpY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuXG5mdW5jdGlvbiBQSEFkdmljZVN0ZXAoKSB7XG4gIHJldHVybiAoXG4gICAgPEdlbmVyaWNDaGVja2JveFN0ZXBcbiAgICAgIHRpdGxlPVwiV2hhdCBkbyB5b3UgaGF2ZSBxdWVzdGlvbnPCoGFib3V0P1wiXG4gICAgICBzdWJ0aXRsZT1cIlNlbGVjdCBhbGwgdGhhdMKgYXBwbHkuXCJcbiAgICAgIGNoZWNrYm94T3B0aW9ucz17UEhBZHZpY2VPcHRpb25zfVxuICAgICAgcmVmZXJyYWxGaWVsZE5hbWU9XCJwaF90YXhfYWR2aWNlXCJcbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgeyBQSEFkdmljZVN0ZXAgfTtcbiIsImltcG9ydCB7IFBIU2VsZkVtcFNtYWxsQnVzSW50ZW50T3B0aW9ucyB9IGZyb20gJy4uLy4uL2VudW1zL1BIU2VsZkVtcFNtYWxsQnVzSW50ZW50T3B0aW9ucyc7XG5pbXBvcnQgeyBHZW5lcmljQ2hlY2tib3hTdGVwIH0gZnJvbSAnLi4vc3RlcHMnO1xuXG5mdW5jdGlvbiBQSFNlbGZFbXBTbWFsbEJ1c0ludGVudFN0ZXAoKSB7XG4gIHJldHVybiAoXG4gICAgPEdlbmVyaWNDaGVja2JveFN0ZXBcbiAgICAgIHRpdGxlPVwiSG93IGNhbiBhIHRheCBwcm8gYmVzdCBzdXBwb3J0wqB5b3U/XCJcbiAgICAgIHN1YnRpdGxlPVwiU2VsZWN0IGFsbCB0aGF0wqBhcHBseS5cIlxuICAgICAgY2hlY2tib3hPcHRpb25zPXtQSFNlbGZFbXBTbWFsbEJ1c0ludGVudE9wdGlvbnN9XG4gICAgICByZWZlcnJhbEZpZWxkTmFtZT1cInBoX3NlbGZfZW1wbG95ZWRfc21hbGxfYnVzaW5lc3NfaW50ZW50XCJcbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgeyBQSFNlbGZFbXBTbWFsbEJ1c0ludGVudFN0ZXAgfTtcbiIsImltcG9ydCB7IHVzZVdpemFyZCB9IGZyb20gJ3JlYWN0LXVzZS13aXphcmQnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE9wdGltaXplbHlDb250ZXh0IH0gZnJvbSAnQG9wdGltaXplbHkvcmVhY3Qtc2RrJztcbmltcG9ydCB7IHVzZUdBRm9ybVRyYWNraW5nIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2hvb2tzJztcbmltcG9ydCB7IHVzZVJlZmVycmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQnO1xuaW1wb3J0IFRleHRhcmVhIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS90ZXh0YXJlYSc7XG5pbXBvcnQge1xuICBTdGFuZGFyZFN0ZXBTdWJ0aXRsZVRleHQsXG4gIFN0YW5kYXJkU3RlcFRpdGxlLFxuICBTdGVwV3JhcHBlclxufSBmcm9tICcuLi9zdGVwQ29tcG9uZW50cyc7XG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHRyYWNrU3RlcENvbXBsZXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9hbmFseXRpY3MnO1xuaW1wb3J0IHsgRm9ybU5hbWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vZW51bXMvRm9ybU5hbWVPcHRpb25zJztcbmltcG9ydCB7IFN0YW5kYXJkTmV4dEJ1dHRvbiB9IGZyb20gJy4uL2J1dHRvbnMnO1xuaW1wb3J0IHsgZmlyZU9wdGltaXplbHlFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyB5dXBSZXNvbHZlciB9IGZyb20gJ0Bob29rZm9ybS9yZXNvbHZlcnMveXVwJztcbmltcG9ydCB7IGdlbmVyYXRlU2Vuc2l0aXZlRGF0YVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvc2Vuc2l0aXZlRGF0YVNjaGVtYSc7XG5pbXBvcnQgKiBhcyBZdXAgZnJvbSAneXVwJztcblxuaW50ZXJmYWNlIFBIU29tZXRoaW5nRWxzZVN0ZXBGaWVsZHMge1xuICBzaXR1YXRpb246IHN0cmluZztcbn1cblxuZnVuY3Rpb24gUEhTb21ldGhpbmdFbHNlU3RlcCgpIHtcbiAgY29uc3QgeyBuZXh0U3RlcCwgYWN0aXZlU3RlcCB9ID0gdXNlV2l6YXJkKCk7XG4gIGNvbnN0IHsgb3B0aW1pemVseSB9ID0gdXNlQ29udGV4dChPcHRpbWl6ZWx5Q29udGV4dCk7XG4gIGNvbnN0IGZvcm1SZWYgPSB1c2VHQUZvcm1UcmFja2luZyhvcHRpbWl6ZWx5LCAncGhfcGVyc29uYWxfaW50ZW50X3N0ZXAnKTtcbiAgY29uc3QgeyByZWZlcnJhbCwgdXBkYXRlUmVmZXJyYWwgfSA9IHVzZVJlZmVycmFsQ29udGV4dCgpO1xuXG4gIGNvbnN0IHNjaGVtYSA9IGdlbmVyYXRlU2Vuc2l0aXZlRGF0YVNjaGVtYShcbiAgICAnc2l0dWF0aW9uJ1xuICApIGFzIHVua25vd24gYXMgWXVwLk9iamVjdFNjaGVtYTxQSFNvbWV0aGluZ0Vsc2VTdGVwRmllbGRzPjtcbiAgY29uc3QgeyByZWdpc3RlciwgaGFuZGxlU3VibWl0LCBmb3JtU3RhdGUgfSA9XG4gICAgdXNlRm9ybTxQSFNvbWV0aGluZ0Vsc2VTdGVwRmllbGRzPih7XG4gICAgICBkZWZhdWx0VmFsdWVzOiB7XG4gICAgICAgIHNpdHVhdGlvbjogJydcbiAgICAgIH0sXG4gICAgICByZXNvbHZlcjogeXVwUmVzb2x2ZXIoc2NoZW1hKVxuICAgIH0pO1xuXG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGZvcm1TdGF0ZS5lcnJvcnMuc2l0dWF0aW9uPy5tZXNzYWdlO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIG9uVmFsaWRTdWJtaXQodmFsdWVzOiB7IHNpdHVhdGlvbjogc3RyaW5nIH0pIHtcbiAgICB0cmFja1N0ZXBDb21wbGV0ZWQoe1xuICAgICAgc3RlcDogYWN0aXZlU3RlcCArIDEsXG4gICAgICBzdGVwX25hbWU6ICdwaF9zb21ldGhpbmdfZWxzZV9zdGVwJyxcbiAgICAgIHN0ZXBfbGFiZWw6ICdUZWxsIHVzIG1vcmUgYWJvdXQgeW91ciBzaXR1YXRpb24uJyxcbiAgICAgIGFuc3dlcl9sYWJlbHM6IFsnVGVsbCB1cyBtb3JlIGFib3V0IHlvdXIgc2l0dWF0aW9uJ10sXG4gICAgICBhbnN3ZXJfdmFsdWVzOiBbdmFsdWVzLnNpdHVhdGlvbl0sXG4gICAgICBmb3JtX25hbWU6IEZvcm1OYW1lT3B0aW9ucy5UQVhfUkVGRVJSQUxfRk9STVxuICAgIH0pO1xuXG4gICAgdXBkYXRlUmVmZXJyYWwoe1xuICAgICAgLi4ucmVmZXJyYWwsXG4gICAgICBwaF9zb21ldGhpbmdfZWxzZTogdmFsdWVzLnNpdHVhdGlvblxuICAgIH0pO1xuICAgIGZpcmVPcHRpbWl6ZWx5RXZlbnQob3B0aW1pemVseSwgJ3BoX3NvbWV0aGluZ19lbHNlX3N0ZXBfY29tcGxldGVkJyk7XG4gICAgYXdhaXQgbmV4dFN0ZXAoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFN0ZXBXcmFwcGVyPlxuICAgICAgPGZvcm0gcmVmPXtmb3JtUmVmfSBvblN1Ym1pdD17aGFuZGxlU3VibWl0KG9uVmFsaWRTdWJtaXQpfT5cbiAgICAgICAgPFN0YW5kYXJkU3RlcFRpdGxlPlxuICAgICAgICAgIFRlbGwgdXMgbW9yZSBhYm91dCB5b3VyIHNpdHVhdGlvbi5cbiAgICAgICAgPC9TdGFuZGFyZFN0ZXBUaXRsZT5cbiAgICAgICAgPFN0YW5kYXJkU3RlcFN1YnRpdGxlVGV4dD5PcHRpb25hbDwvU3RhbmRhcmRTdGVwU3VidGl0bGVUZXh0PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxUZXh0YXJlYVxuICAgICAgICAgICAgey4uLnJlZ2lzdGVyKCdzaXR1YXRpb24nKX1cbiAgICAgICAgICAgIG1heExlbmd0aD17MjUwfVxuICAgICAgICAgICAgaWQ9XCJwaF9zb21ldGhpbmdfZWxzZV90ZXh0Ym94XCJcbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJwaF9zb21ldGhpbmdfZWxzZV90ZXh0Ym94XCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicGhfc29tZXRoaW5nX2Vsc2VfdGV4dGJveFwiXG4gICAgICAgICAgICB2YWx1ZT17cmVmZXJyYWw/LnBoX3NvbWV0aGluZ19lbHNlfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgdXBkYXRlUmVmZXJyYWwoe1xuICAgICAgICAgICAgICAgIC4uLnJlZmVycmFsLFxuICAgICAgICAgICAgICAgIHBoX3NvbWV0aGluZ19lbHNlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17cmVmZXJyYWw/LnBoX3NvbWV0aGluZ19lbHNlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KGVycm9yTWVzc2FnZSAmJiAoXG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC0yIHRleHQtcmVkLTYwIHB0LTEgcGItNFwiPntlcnJvck1lc3NhZ2V9PC9wPlxuICAgICAgICApKSB8fCA8cCBjbGFzc05hbWU9XCJwYi00XCI+PC9wPn1cbiAgICAgICAgPFN0YW5kYXJkTmV4dEJ1dHRvbiAvPlxuICAgICAgPC9mb3JtPlxuICAgIDwvU3RlcFdyYXBwZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFBIU29tZXRoaW5nRWxzZVN0ZXAgfTtcbiIsImltcG9ydCB7IFBIVGF4SXNzdWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgR2VuZXJpY0NoZWNrYm94U3RlcCB9IGZyb20gJy4uL3N0ZXBzJztcblxuZnVuY3Rpb24gUEhUYXhJc3N1ZXNTdGVwKCkge1xuICByZXR1cm4gKFxuICAgIDxHZW5lcmljQ2hlY2tib3hTdGVwXG4gICAgICB0aXRsZT1cIldoYXQga2luZCBvZiB0YXggaXNzdWUgYXJlIHlvdSBkZWFsaW5nwqB3aXRoP1wiXG4gICAgICBzdWJ0aXRsZT1cIlNlbGVjdCBhbGwgdGhhdMKgYXBwbHkuXCJcbiAgICAgIGNoZWNrYm94T3B0aW9ucz17UEhUYXhJc3N1ZU9wdGlvbnN9XG4gICAgICByZWZlcnJhbEZpZWxkTmFtZT1cInBoX3RheF9pc3N1ZXNcIlxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IFBIVGF4SXNzdWVzU3RlcCB9O1xuIiwiaW1wb3J0ICogYXMgWXVwIGZyb20gJ3l1cCc7XG5cbmNvbnN0IHBoVXJnZW5jeVZhbGlkYXRpb24gPSBZdXAuc3RyaW5nKCkucmVxdWlyZWQoXG4gICdQbGVhc2UgY2hvb3NlIG9uZSBvcHRpb24gdG8gY29udGludWUuJ1xuKTtcblxuY29uc3QgcGhVcmdlbmN5U2NoZW1hID0gWXVwLm9iamVjdCgpLnNoYXBlKHtcbiAgcGhfdXJnZW5jeTogcGhVcmdlbmN5VmFsaWRhdGlvblxufSk7XG5cbmV4cG9ydCB7IHBoVXJnZW5jeVNjaGVtYSB9O1xuIiwiaW1wb3J0IHtcbiAgU3RhbmRhcmROZXh0QnV0dG9uLFxuICBTdGFuZGFyZFN0ZXBTdWJ0aXRsZVRleHQsXG4gIFN0YW5kYXJkU3RlcFRpdGxlLFxuICBTdGVwV3JhcHBlclxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzJztcbmltcG9ydCB7IHVzZVdpemFyZCB9IGZyb20gJ3JlYWN0LXVzZS13aXphcmQnO1xuaW1wb3J0IHsgdXNlR0FGb3JtVHJhY2tpbmcgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaG9va3MnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE9wdGltaXplbHlDb250ZXh0IH0gZnJvbSAnQG9wdGltaXplbHkvcmVhY3Qtc2RrJztcbmltcG9ydCB7IHVzZVJlZmVycmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB0cmFja1N0ZXBDb21wbGV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvYW5hbHl0aWNzJztcbmltcG9ydCB7IEZvcm1OYW1lT3B0aW9ucyB9IGZyb20gJy4uLy4uL2VudW1zL0Zvcm1OYW1lT3B0aW9ucyc7XG5pbXBvcnQgeyBmaXJlT3B0aW1pemVseUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3V0aWxzJztcbmltcG9ydCB7IFBIVXJnZW5jeU9wdGlvbnMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgUmFkaW9UaWxlIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9yYWRpby10aWxlJztcbmltcG9ydCB7IHl1cFJlc29sdmVyIH0gZnJvbSAnQGhvb2tmb3JtL3Jlc29sdmVycy95dXAnO1xuaW1wb3J0IHsgcGhVcmdlbmN5U2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9zaW5nbGVPcHRpb25TY2hlbWEnO1xuXG5mdW5jdGlvbiBQSFVyZ2VuY3lTdGVwKCkge1xuICBjb25zdCB7IG5leHRTdGVwLCBhY3RpdmVTdGVwIH0gPSB1c2VXaXphcmQoKTtcbiAgY29uc3QgeyBvcHRpbWl6ZWx5IH0gPSB1c2VDb250ZXh0KE9wdGltaXplbHlDb250ZXh0KTtcbiAgY29uc3QgZm9ybVJlZiA9IHVzZUdBRm9ybVRyYWNraW5nKG9wdGltaXplbHksICdwaF91cmdlbmN5X3N0ZXAnKTtcbiAgY29uc3QgeyByZWZlcnJhbCwgdXBkYXRlUmVmZXJyYWwgfSA9IHVzZVJlZmVycmFsQ29udGV4dCgpO1xuICBjb25zdCB7IHJlZ2lzdGVyLCBoYW5kbGVTdWJtaXQsIGZvcm1TdGF0ZSB9ID0gdXNlRm9ybTx7IHBoX3VyZ2VuY3k6IHN0cmluZyB9PihcbiAgICB7XG4gICAgICBkZWZhdWx0VmFsdWVzOiB7IHBoX3VyZ2VuY3k6IHJlZmVycmFsLnBoX3VyZ2VuY3kgfSxcbiAgICAgIHJlc29sdmVyOiB5dXBSZXNvbHZlcihwaFVyZ2VuY3lTY2hlbWEpXG4gICAgfVxuICApO1xuXG4gIGNvbnN0IHN0ZXBMYWJlbCA9ICdXaGVuIGFyZSB5b3UgaG9waW5nIHRvIGhhdmUgdGhpcyBkb25lPyc7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGZvcm1TdGF0ZS5lcnJvcnMucGhfdXJnZW5jeT8ubWVzc2FnZTtcblxuICBhc3luYyBmdW5jdGlvbiBvblZhbGlkU3VibWl0KHZhbHVlczogeyBwaF91cmdlbmN5OiBzdHJpbmcgfSkge1xuICAgIHRyYWNrU3RlcENvbXBsZXRlZCh7XG4gICAgICBzdGVwOiBhY3RpdmVTdGVwICsgMSxcbiAgICAgIHN0ZXBfbmFtZTogJ3BoX3VyZ2VuY3lfc3RlcCcsXG4gICAgICBzdGVwX2xhYmVsOiBzdGVwTGFiZWwsXG4gICAgICBhbnN3ZXJfbGFiZWxzOiBPYmplY3QudmFsdWVzKFBIVXJnZW5jeU9wdGlvbnMpLFxuICAgICAgYW5zd2VyX3ZhbHVlczogW3ZhbHVlcy5waF91cmdlbmN5XSxcbiAgICAgIGZvcm1fbmFtZTogRm9ybU5hbWVPcHRpb25zLlRBWF9SRUZFUlJBTF9GT1JNXG4gICAgfSk7XG4gICAgdXBkYXRlUmVmZXJyYWwoe1xuICAgICAgLi4ucmVmZXJyYWwsXG4gICAgICBwaF91cmdlbmN5OiB2YWx1ZXMucGhfdXJnZW5jeVxuICAgIH0pO1xuICAgIGZpcmVPcHRpbWl6ZWx5RXZlbnQob3B0aW1pemVseSwgJ3BoX3VyZ2VuY3lfc3RlcF9jb21wbGV0ZWQnKTtcbiAgICBhd2FpdCBuZXh0U3RlcCgpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U3RlcFdyYXBwZXI+XG4gICAgICA8Zm9ybSByZWY9e2Zvcm1SZWZ9IG9uU3VibWl0PXtoYW5kbGVTdWJtaXQob25WYWxpZFN1Ym1pdCl9PlxuICAgICAgICA8U3RhbmRhcmRTdGVwVGl0bGU+e3N0ZXBMYWJlbH08L1N0YW5kYXJkU3RlcFRpdGxlPlxuICAgICAgICA8U3RhbmRhcmRTdGVwU3VidGl0bGVUZXh0PlxuICAgICAgICAgIFdlJ2xsIGNvbm5lY3QgeW91IHJpZ2h0IGF3YXkgLSB0aGlzIGp1c3QgaGVscHMgdXMgdW5kZXJzdGFuZCB5b3VyXG4gICAgICAgICAgdGltZWxpbmUuXG4gICAgICAgIDwvU3RhbmRhcmRTdGVwU3VidGl0bGVUZXh0PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm0tYmxvY2steGwgc3BhY2UteS0yXCI+XG4gICAgICAgICAge09iamVjdC5lbnRyaWVzKFBIVXJnZW5jeU9wdGlvbnMpLm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGVudHJ5WzBdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlbnRyeVsxXTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0ga2V5LmNvbmNhdCgnX3BoX3VyZ2VuY3lfcmFkaW9fdGlsZScpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFJhZGlvVGlsZVxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtpZH1cbiAgICAgICAgICAgICAgICB7Li4ucmVnaXN0ZXIoJ3BoX3VyZ2VuY3knKX1cbiAgICAgICAgICAgICAgICBsYWJlbD17dmFsdWV9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cblxuICAgICAgICAgIHtlcnJvck1lc3NhZ2UgJiYgPHAgY2xhc3NOYW1lPVwidGV4dC0yIHRleHQtcmVkLTYwXCI+e2Vycm9yTWVzc2FnZX08L3A+fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPFN0YW5kYXJkTmV4dEJ1dHRvbiAvPlxuICAgICAgPC9mb3JtPlxuICAgIDwvU3RlcFdyYXBwZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFBIVXJnZW5jeVN0ZXAgfTtcbiIsImltcG9ydCB7IFJlZmVycmFsRm9ybURhdGEgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7XG4gIFBIQWR2aWNlT3B0aW9ucyxcbiAgUEhQZXJzb25hbEludGVudE9wdGlvbnMsXG4gIFBIU2VsZkVtcFNtYWxsQnVzSW50ZW50T3B0aW9ucyxcbiAgUEhUYXhJc3N1ZU9wdGlvbnMsXG4gIFRheEFkdmljZU9wdGlvbnMsXG4gIFRheEludGVudE9wdGlvbnMsXG4gIFRheFNlcnZpY2VPcHRpb25zXG59IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7XG4gIEFkdmljZUVkdWNhdGlvblN0ZXAsXG4gIEFkdmljZVN0ZXAsXG4gIEludGVudFN0ZXAsXG4gIFBIQWR2aWNlU3RlcCxcbiAgUEhQZXJzb25hbEludGVudFN0ZXAsXG4gIFBIU2VsZkVtcFNtYWxsQnVzSW50ZW50U3RlcCxcbiAgUEhTb21ldGhpbmdFbHNlU3RlcCxcbiAgUEhUYXhJc3N1ZXNTdGVwLFxuICBQSFVyZ2VuY3lTdGVwLFxuICBRdWVzdGlvbnNTdGVwXG59IGZyb20gJy4uL2NvbXBvbmVudHMnO1xuXG4vLyBUSEUgT1JERVIgSU4gV0hJQ0ggVEhFU0UgQ09NUE9ORU5UUyBHRVQgUFVTSEVEIElOVE8gVEhFIEFSUkFZIERJUkVDVExZXG4vLyBJTkZMVUVOQ0VTIFRIRSBPUkRFUiBUSEVZIFJFTkRFUiBJTiBUSEUgUkVGRVJSQUwgRk9STSBGTE9XXG5cbmZ1bmN0aW9uIGdlbmVyYXRlUEhRdWVzdGlvbnNGbG93KHJlZmVycmFsOiBSZWZlcnJhbEZvcm1EYXRhKSB7XG4gIGNvbnN0IHBhdWxIb29kUXVlc3Rpb25Db21wb25lbnRzID0gW107XG4gIGlmICghaXNTbWFsbEJ1c2luZXNzU2VsZWN0ZWQocmVmZXJyYWwpICYmICFpc1NlbGZFbXBsb3llZFNlbGVjdGVkKHJlZmVycmFsKSkge1xuICAgIHBhdWxIb29kUXVlc3Rpb25Db21wb25lbnRzLnB1c2goPFBIUGVyc29uYWxJbnRlbnRTdGVwIC8+KTtcbiAgfVxuICBpZiAoaXNTbWFsbEJ1c2luZXNzU2VsZWN0ZWQocmVmZXJyYWwpIHx8IGlzU2VsZkVtcGxveWVkU2VsZWN0ZWQocmVmZXJyYWwpKSB7XG4gICAgcGF1bEhvb2RRdWVzdGlvbkNvbXBvbmVudHMucHVzaCg8UEhTZWxmRW1wU21hbGxCdXNJbnRlbnRTdGVwIC8+KTtcbiAgfVxuICBpZiAoaXNUYXhJc3N1ZXNTZWxlY3RlZChyZWZlcnJhbCkpIHtcbiAgICBwYXVsSG9vZFF1ZXN0aW9uQ29tcG9uZW50cy5wdXNoKDxQSFRheElzc3Vlc1N0ZXAgLz4pO1xuICB9XG4gIGlmIChcbiAgICBpc1RheElzc3VlU29tZXRoaW5nRWxzZShyZWZlcnJhbCkgfHxcbiAgICBpc1NtYWxsQnVzU2VsZkVtcFNvbWV0aGluZ0Vsc2UocmVmZXJyYWwpIHx8XG4gICAgaXNQSEludGVudFNvbWV0aGluZ0Vsc2UocmVmZXJyYWwpXG4gICkge1xuICAgIHBhdWxIb29kUXVlc3Rpb25Db21wb25lbnRzLnB1c2goPFBIU29tZXRoaW5nRWxzZVN0ZXAgLz4pO1xuICB9XG4gIHBhdWxIb29kUXVlc3Rpb25Db21wb25lbnRzLnB1c2goPFBIVXJnZW5jeVN0ZXAgLz4pO1xuICBpZiAoaXNQSEludGVudEdlbmVyYWxRdWVzdGlvbnMocmVmZXJyYWwpKSB7XG4gICAgcGF1bEhvb2RRdWVzdGlvbkNvbXBvbmVudHMucHVzaCg8UEhBZHZpY2VTdGVwIC8+KTtcbiAgfVxuICByZXR1cm4gcGF1bEhvb2RRdWVzdGlvbkNvbXBvbmVudHM7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQmFzZWxpbmVGbG93KHJlZmVycmFsOiBSZWZlcnJhbEZvcm1EYXRhKSB7XG4gIGNvbnN0IGJhc2VsaW5lQ29tcG9uZW50cyA9IFtdO1xuXG4gIGlmICghaXNTbWFsbEJ1c2luZXNzU2VsZWN0ZWQocmVmZXJyYWwpKSB7XG4gICAgYmFzZWxpbmVDb21wb25lbnRzLnB1c2goPEludGVudFN0ZXAgLz4pO1xuICB9XG4gIGlmIChpc09ubHlBZHZpY2VTZWxlY3RlZChyZWZlcnJhbCkgJiYgIWlzU21hbGxCdXNpbmVzc1NlbGVjdGVkKHJlZmVycmFsKSkge1xuICAgIGJhc2VsaW5lQ29tcG9uZW50cy5wdXNoKDxBZHZpY2VTdGVwIC8+KTtcbiAgfVxuICBpZiAoXG4gICAgaXNPbmx5QWR2aWNlU2VsZWN0ZWQocmVmZXJyYWwpICYmXG4gICAgIWlzU21hbGxCdXNpbmVzc1NlbGVjdGVkKHJlZmVycmFsKSAmJlxuICAgICFpc09ubHlPdGhlclNlbGVjdGVkKHJlZmVycmFsKVxuICApIHtcbiAgICBiYXNlbGluZUNvbXBvbmVudHMucHVzaCg8QWR2aWNlRWR1Y2F0aW9uU3RlcCAvPik7XG4gIH1cblxuICByZXR1cm4gYmFzZWxpbmVDb21wb25lbnRzO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVF1ZXN0aW9uc1N0ZXBGb3JBbGxGbG93cyhyZWZlcnJhbDogUmVmZXJyYWxGb3JtRGF0YSkge1xuICBpZiAoXG4gICAgKCFpc1NtYWxsQnVzaW5lc3NTZWxlY3RlZChyZWZlcnJhbCkgJiYgaXNPbmx5QWR2aWNlU2VsZWN0ZWQocmVmZXJyYWwpKSB8fFxuICAgIGlzUEhBZHZpY2VTb21ldGhpbmdFbHNlKHJlZmVycmFsKVxuICApIHtcbiAgICByZXR1cm4gPFF1ZXN0aW9uc1N0ZXAgLz47XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTbWFsbEJ1c2luZXNzU2VsZWN0ZWQocmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGEpIHtcbiAgcmV0dXJuIHJlZmVycmFsLmludGVyZXN0cy5pbmNsdWRlcyhUYXhTZXJ2aWNlT3B0aW9ucy5zbWFsbF9idXNpbmVzcyk7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZkVtcGxveWVkU2VsZWN0ZWQocmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGEpIHtcbiAgcmV0dXJuIHJlZmVycmFsLmludGVyZXN0cy5pbmNsdWRlcyhUYXhTZXJ2aWNlT3B0aW9ucy5zZWxmX2VtcGxveWVkKTtcbn1cblxuZnVuY3Rpb24gaXNPbmx5QWR2aWNlU2VsZWN0ZWQocmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGEpIHtcbiAgY29uc3QgdGF4SW50ZW50cyA9IHJlZmVycmFsLnRheF9pbnRlbnRzLmZpbHRlcigocykgPT4gcyAhPT0gJycpO1xuICBjb25zdCBpbmNsdWRlc0FkdmljZSA9IHRheEludGVudHMuaW5jbHVkZXMoVGF4SW50ZW50T3B0aW9ucy5naXZlX21lX2FkdmljZSk7XG4gIGNvbnN0IG9ubHlPbmUgPSB0YXhJbnRlbnRzLmxlbmd0aCA9PT0gMTtcbiAgcmV0dXJuIGluY2x1ZGVzQWR2aWNlICYmIG9ubHlPbmU7XG59XG5cbmZ1bmN0aW9uIGlzT25seU90aGVyU2VsZWN0ZWQocmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGEpIHtcbiAgY29uc3QgdGF4QWR2aWNlID0gcmVmZXJyYWwudGF4X2FkdmljZS5maWx0ZXIoKHMpID0+IHMgIT09ICcnKTtcbiAgY29uc3QgaW5jbHVkZXNPdGhlciA9IHRheEFkdmljZS5pbmNsdWRlcyhUYXhBZHZpY2VPcHRpb25zLm90aGVyKTtcbiAgY29uc3Qgb25seU9uZSA9IHRheEFkdmljZS5sZW5ndGggPT09IDE7XG4gIHJldHVybiBpbmNsdWRlc090aGVyICYmIG9ubHlPbmU7XG59XG5cbmZ1bmN0aW9uIGlzVGF4SXNzdWVzU2VsZWN0ZWQocmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGEpIHtcbiAgY29uc3QgcEhQZXJzb25hbEludGVudHMgPSByZWZlcnJhbC5waF9wZXJzb25hbF9pbnRlbnRzPy5maWx0ZXIoXG4gICAgKHMpID0+IHMgIT09ICcnXG4gICk7XG4gIGNvbnN0IHBIU2VsZkVtcFNtYWxsQnVzSW50ZW50cyA9XG4gICAgcmVmZXJyYWwucGhfc2VsZl9lbXBsb3llZF9zbWFsbF9idXNpbmVzc19pbnRlbnQ/LmZpbHRlcigocykgPT4gcyAhPT0gJycpO1xuXG4gIGlmIChcbiAgICBwSFBlcnNvbmFsSW50ZW50cz8uaW5jbHVkZXMoUEhQZXJzb25hbEludGVudE9wdGlvbnMuaGVscF93aXRoX3RheF9pc3N1ZXMpXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwSFNlbGZFbXBTbWFsbEJ1c0ludGVudHM/LmluY2x1ZGVzKFxuICAgICAgUEhTZWxmRW1wU21hbGxCdXNJbnRlbnRPcHRpb25zLmhlbHBfd2l0aF90YXhfaXNzdWVzXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RheElzc3VlU29tZXRoaW5nRWxzZShyZWZlcnJhbDogUmVmZXJyYWxGb3JtRGF0YSkge1xuICBjb25zdCB0YXhJc3N1ZSA9IHJlZmVycmFsLnBoX3RheF9pc3N1ZXM/LmZpbHRlcigocykgPT4gcyAhPT0gJycpO1xuICByZXR1cm4gdGF4SXNzdWU/LmluY2x1ZGVzKFBIVGF4SXNzdWVPcHRpb25zLnNvbWV0aGluZ19lbHNlKTtcbn1cblxuZnVuY3Rpb24gaXNQSEludGVudFNvbWV0aGluZ0Vsc2UocmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGEpIHtcbiAgY29uc3QgcEhQZXJzb25hbEludGVudHMgPSByZWZlcnJhbC5waF9wZXJzb25hbF9pbnRlbnRzPy5maWx0ZXIoXG4gICAgKHMpID0+IHMgIT09ICcnXG4gICk7XG4gIHJldHVybiBwSFBlcnNvbmFsSW50ZW50cz8uaW5jbHVkZXMoUEhQZXJzb25hbEludGVudE9wdGlvbnMuc29tZXRoaW5nX2Vsc2UpO1xufVxuXG5mdW5jdGlvbiBpc1NtYWxsQnVzU2VsZkVtcFNvbWV0aGluZ0Vsc2UocmVmZXJyYWw6IFJlZmVycmFsRm9ybURhdGEpIHtcbiAgY29uc3QgcEhTbWFsbEJ1c1NlbGZFbXBJbnRlbnRzID1cbiAgICByZWZlcnJhbC5waF9zZWxmX2VtcGxveWVkX3NtYWxsX2J1c2luZXNzX2ludGVudD8uZmlsdGVyKChzKSA9PiBzICE9PSAnJyk7XG4gIHJldHVybiBwSFNtYWxsQnVzU2VsZkVtcEludGVudHM/LmluY2x1ZGVzKFxuICAgIFBIU2VsZkVtcFNtYWxsQnVzSW50ZW50T3B0aW9ucy5zb21ldGhpbmdfZWxzZVxuICApO1xufVxuXG5mdW5jdGlvbiBpc1BISW50ZW50R2VuZXJhbFF1ZXN0aW9ucyhyZWZlcnJhbDogUmVmZXJyYWxGb3JtRGF0YSkge1xuICBjb25zdCBwSFBlcnNvbmFsSW50ZW50cyA9IHJlZmVycmFsLnBoX3BlcnNvbmFsX2ludGVudHM/LmZpbHRlcihcbiAgICAocykgPT4gcyAhPT0gJydcbiAgKTtcbiAgY29uc3QgcEhTZWxmRW1wU21hbGxCdXNJbnRlbnRzID1cbiAgICByZWZlcnJhbC5waF9zZWxmX2VtcGxveWVkX3NtYWxsX2J1c2luZXNzX2ludGVudD8uZmlsdGVyKChzKSA9PiBzICE9PSAnJyk7XG5cbiAgaWYgKFxuICAgIHBIUGVyc29uYWxJbnRlbnRzPy5pbmNsdWRlcyhcbiAgICAgIFBIUGVyc29uYWxJbnRlbnRPcHRpb25zLmFuc3dlcl9nZW5lcmFsX3F1ZXN0aW9uc1xuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBIU2VsZkVtcFNtYWxsQnVzSW50ZW50cz8uaW5jbHVkZXMoXG4gICAgICBQSFNlbGZFbXBTbWFsbEJ1c0ludGVudE9wdGlvbnMuYW5zd2VyX2dlbmVyYWxfcXVlc3Rpb25zXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BIQWR2aWNlU29tZXRoaW5nRWxzZShyZWZlcnJhbDogUmVmZXJyYWxGb3JtRGF0YSkge1xuICBjb25zdCBwSEFkdmljZSA9IHJlZmVycmFsLnBoX3RheF9hZHZpY2U/LmZpbHRlcigocykgPT4gcyAhPT0gJycpO1xuICByZXR1cm4gcEhBZHZpY2U/LmluY2x1ZGVzKFBIQWR2aWNlT3B0aW9ucy5zb21ldGhpbmdfZWxzZSk7XG59XG5cbmV4cG9ydCB7XG4gIGdlbmVyYXRlQmFzZWxpbmVGbG93LFxuICBnZW5lcmF0ZVBIUXVlc3Rpb25zRmxvdyxcbiAgZ2VuZXJhdGVRdWVzdGlvbnNTdGVwRm9yQWxsRmxvd3Ncbn07XG4iLCJpbXBvcnQgeyBQcm9EYXRhIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcblxuZnVuY3Rpb24gaXNQYXVsSG9vZFJlZmVycmFsKHByb0luZm86IFByb0RhdGEpIHtcbiAgY29uc3QgcHJvID0gcHJvSW5mby5hY2NvdW50X2tleTtcbiAgY29uc3QgcGF1bEhvb2RBY2NvdW50S2V5ID0gd2luZG93Py5fQVBQX0NPTkZJRz8ucGF1bGhvb2RBY2NvdW50S2V5O1xuXG4gIHJldHVybiBwcm8gPT09IHBhdWxIb29kQWNjb3VudEtleTtcbn1cblxuZXhwb3J0IHsgaXNQYXVsSG9vZFJlZmVycmFsIH07XG4iLCJpbXBvcnQgeyBQcm9EYXRhIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IGlzUGF1bEhvb2RSZWZlcnJhbCB9IGZyb20gJy4vaXNQYXVsSG9vZFJlZmVycmFsJztcblxuZnVuY3Rpb24gc2hvdWxkUmVjZWl2ZVBIUXVlc3Rpb25zRmxvdyhwcm9JbmZvOiBQcm9EYXRhKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1BhdWxIb29kUmVmZXJyYWwocHJvSW5mbyk7XG59XG5cbmV4cG9ydCB7IHNob3VsZFJlY2VpdmVQSFF1ZXN0aW9uc0Zsb3cgfTtcbiIsImV4cG9ydCBlbnVtIFNpdHVhdGlvbk9wdGlvbnMge1xuICBpX3NvbGRfc3RvY2tfb3JfY3J5cHRvID0gJ0kgc29sZCBzdG9jayBvciBjcnlwdG8nLFxuICBteV9tYXJpdGFsX3N0YXR1c19jaGFuZ2VkID0gJ015IG1hcml0YWwgc3RhdHVzIGNoYW5nZWQnLFxuICBpX25lZWRfdG9fZmlsZV9tdWx0aXBsZV95ZWFycyA9ICdJIG5lZWQgdG8gZmlsZSBmb3IgbXVsdGlwbGUgeWVhcnMnLFxuICBteV9zcG91c2Vfb3JfaV9zZXJ2ZV9hc19jbGVyZ3kgPSAnTXkgc3BvdXNlIG9yIEkgc2VydmUgYXMgcGFzdG9yIG9yIGNsZXJneScsXG4gIGlfaGF2ZV9zZWxmX2VtcGxveW1lbnRfaW5jb21lID0gJ0kgaGF2ZSBzZWxmLWVtcGxveW1lbnQgaW5jb21lJyxcbiAgbm9uZV9vZl90aGVzZV9hcHBseSA9ICdOb25lIG9mIHRoZXNlJ1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGluaXRpYWxUYXhRdWVzdGlvbnNEYXRhLCBUYXhRdWVzdGlvbnNEYXRhIH0gZnJvbSAnLi9UYXhRdWVzdGlvbnNEYXRhJztcblxuaW50ZXJmYWNlIFRheFF1ZXN0aW9uc0NvbnRleHREYXRhIHtcbiAgdGF4UXVlc3Rpb25zOiBUYXhRdWVzdGlvbnNEYXRhO1xuICB1cGRhdGVUYXhRdWVzdGlvbnM6ICh1cGRhdGU6IFBhcnRpYWw8VGF4UXVlc3Rpb25zRGF0YT4pID0+IHZvaWQ7XG59XG5cbmNvbnN0IFRheFF1ZXN0aW9uc0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFRheFF1ZXN0aW9uc0NvbnRleHREYXRhPih7XG4gIHRheFF1ZXN0aW9uczogaW5pdGlhbFRheFF1ZXN0aW9uc0RhdGEoKSxcbiAgdXBkYXRlVGF4UXVlc3Rpb25zOiAoKSA9PiB7XG4gICAgcmV0dXJuO1xuICB9XG59KTtcblxuZnVuY3Rpb24gdXNlVGF4UXVlc3Rpb25zQ29udGV4dCgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoVGF4UXVlc3Rpb25zQ29udGV4dCk7XG59XG5cbmV4cG9ydCB7IFRheFF1ZXN0aW9uc0NvbnRleHQsIHVzZVRheFF1ZXN0aW9uc0NvbnRleHQgfTtcbiIsImludGVyZmFjZSBUYXhRdWVzdGlvbnNEYXRhIHtcbiAgc2l0dWF0aW9uT3B0aW9uczogc3RyaW5nW107XG4gIGNvbXBsZXhpdHlDb25jZXJuOiBzdHJpbmc7XG4gIC8vIEFkZCBvdGhlciB0YXggcXVlc3Rpb24gZmllbGRzIGFzIG5lZWRlZFxufVxuXG5mdW5jdGlvbiBpbml0aWFsVGF4UXVlc3Rpb25zRGF0YSgpOiBUYXhRdWVzdGlvbnNEYXRhIHtcbiAgcmV0dXJuIHtcbiAgICBzaXR1YXRpb25PcHRpb25zOiBbXSxcbiAgICBjb21wbGV4aXR5Q29uY2VybjogJydcbiAgfTtcbn1cblxuZXhwb3J0IHsgVGF4UXVlc3Rpb25zRGF0YSwgaW5pdGlhbFRheFF1ZXN0aW9uc0RhdGEgfTtcbiIsImltcG9ydCAqIGFzIFl1cCBmcm9tICd5dXAnO1xuXG5jb25zdCBTaXR1YXRpb25zU2NoZW1hID0gWXVwLm9iamVjdCgpXG4gIC5zaGFwZSh7XG4gICAgaV9zb2xkX3N0b2NrX29yX2NyeXB0bzogWXVwLmJvb2xlYW4oKS5yZXF1aXJlZCgpLFxuICAgIG15X21hcml0YWxfc3RhdHVzX2NoYW5nZWQ6IFl1cC5ib29sZWFuKCkucmVxdWlyZWQoKSxcbiAgICBpX25lZWRfdG9fZmlsZV9tdWx0aXBsZV95ZWFyczogWXVwLmJvb2xlYW4oKS5yZXF1aXJlZCgpLFxuICAgIG15X3Nwb3VzZV9vcl9pX3NlcnZlX2FzX2NsZXJneTogWXVwLmJvb2xlYW4oKS5yZXF1aXJlZCgpLFxuICAgIGlfaGF2ZV9zZWxmX2VtcGxveW1lbnRfaW5jb21lOiBZdXAuYm9vbGVhbigpLnJlcXVpcmVkKCksXG4gICAgbm9uZV9vZl90aGVzZV9hcHBseTogWXVwLmJvb2xlYW4oKS5yZXF1aXJlZCgpXG4gIH0pXG4gIC50ZXN0KFxuICAgICdhdExlYXN0T25lUmVxdWlyZWQnLFxuICAgICdQbGVhc2UgY2hvb3NlIGF0IGxlYXN0IG9uZSBvcHRpb24gdG9cXHUwMEEwY29udGludWUuJyxcbiAgICAodmFsdWUpID0+IE9iamVjdC52YWx1ZXModmFsdWUpLnNvbWUoKHZhbCkgPT4gdmFsKVxuICApO1xuXG5leHBvcnQgeyBTaXR1YXRpb25zU2NoZW1hIH07XG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW1JEUyBIZWFkaW5nXShodHRwczovL2Rlc2lnbi5yYW1zZXlzb2x1dGlvbnMuY29tL3N0b3J5Ym9vay8/cGF0aD0vc3RvcnkvZGVzaWduLXN5c3RlbS1oZWFkaW5nLS1kZWZhdWx0KVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFtSRFMgSGVhZGluZyBBUEldKGh0dHBzOi8vZGVzaWduLnJhbXNleXNvbHV0aW9ucy5jb20vY29tcG9uZW50cy9oZWFkaW5nLz90YWI9dGVjaG5vbG9naWVzI3JlYWN0KVxuICovXG52YXIgSGVhZGluZyA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYjtcbiAgICB2YXIgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBfYyA9IF9hLmNvbG9yLCBjb2xvciA9IF9jID09PSB2b2lkIDAgPyBcIm5vcm1hbFwiIDogX2MsIGhyZWYgPSBfYS5ocmVmLCBsZXZlbCA9IF9hLmxldmVsLCBfZCA9IF9hLmlzT25EYXJrQ2FudmFzLCBpc09uRGFya0NhbnZhcyA9IF9kID09PSB2b2lkIDAgPyBmYWxzZSA6IF9kLCBfZSA9IF9hLnNpemUsIHNpemUgPSBfZSA9PT0gdm9pZCAwID8gXCJtZWRpdW1cIiA6IF9lLCByZXN0ID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiaHJlZlwiLCBcImxldmVsXCIsIFwiaXNPbkRhcmtDYW52YXNcIiwgXCJzaXplXCJdKTtcbiAgICB2YXIgaGVhZGluZ0NsYXNzZXMgPSBjbGFzc05hbWVzKFwicmRzLUhlYWRpbmdcIiwgKF9iID0ge30sXG4gICAgICAgIF9iW1wicmRzLUhlYWRpbmctLVwiLmNvbmNhdChzaXplKV0gPSBzaXplICE9PSBcIm1lZGl1bVwiLFxuICAgICAgICBfYltcInJkcy1IZWFkaW5nLS1cIi5jb25jYXQoY29sb3IpXSA9IGNvbG9yICE9PSBcIm5vcm1hbFwiLFxuICAgICAgICBfYltcIm9uLWRhcmtDYW52YXNcIl0gPSBpc09uRGFya0NhbnZhcyxcbiAgICAgICAgX2IpLCBjbGFzc05hbWUpO1xuICAgIHZhciBFbGVtZW50ID0gXCJoXCIuY29uY2F0KGxldmVsKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRWxlbWVudCwgX19hc3NpZ24oeyBjbGFzc05hbWU6IGhlYWRpbmdDbGFzc2VzIH0sIHJlc3QpLCBocmVmID8gUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgeyBocmVmOiBocmVmIH0sIGNoaWxkcmVuKSA6IGNoaWxkcmVuKSk7XG59O1xuSGVhZGluZy5kaXNwbGF5TmFtZSA9IFwiSGVhZGluZ1wiO1xuXG5leHBvcnQgeyBIZWFkaW5nIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUhlYWRpbmcuZXNtLmpzLm1hcFxuIiwiaW1wb3J0ICogYXMgWXVwIGZyb20gJ3l1cCc7XG5cbmNvbnN0IHB1cnBvc2VWYWxpZGF0aW9uID0gWXVwLnN0cmluZygpLnJlcXVpcmVkKFxuICAnUGxlYXNlIGNob29zZSBvbmUgb3B0aW9uIHRvIGNvbnRpbnVlLidcbik7XG5cbmNvbnN0IHB1cnBvc2VTY2hlbWEgPSBZdXAub2JqZWN0KCkuc2hhcGUoe1xuICBwdXJwb3NlOiBwdXJwb3NlVmFsaWRhdGlvblxufSk7XG5cbmV4cG9ydCB7IHB1cnBvc2VTY2hlbWEgfTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgU3RhbmRhcmROZXh0QnV0dG9uLFxuICBTdGFuZGFyZFN0ZXBUaXRsZSxcbiAgU3RlcFdyYXBwZXJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29tcG9uZW50cyc7XG5pbXBvcnQgUmFkaW9UaWxlIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9yYWRpby10aWxlJztcbmltcG9ydCB7IE9wdGltaXplbHlDb250ZXh0IH0gZnJvbSAnQG9wdGltaXplbHkvcmVhY3Qtc2RrJztcbmltcG9ydCB7IHVzZUdBRm9ybVRyYWNraW5nIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2hvb2tzJztcbmltcG9ydCB7IHVzZVdpemFyZCB9IGZyb20gJ3JlYWN0LXVzZS13aXphcmQnO1xuaW1wb3J0IHsgdXNlUmVmZXJyYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kdWxlcy9SZWZlcnJhbEZvcm0vY29udGV4dCc7XG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHl1cFJlc29sdmVyIH0gZnJvbSAnQGhvb2tmb3JtL3Jlc29sdmVycy95dXAnO1xuaW1wb3J0IHsgZmlyZU9wdGltaXplbHlFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyB0cmFja1N0ZXBDb21wbGV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvYW5hbHl0aWNzJztcbmltcG9ydCB7IEZvcm1OYW1lT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvUmVmZXJyYWxGb3JtL2VudW1zL0Zvcm1OYW1lT3B0aW9ucyc7XG5pbXBvcnQgeyBwdXJwb3NlU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9wdXJwb3NlU2NoZW1hJztcblxuaW50ZXJmYWNlIFB1cnBvc2VTdGVwRmllbGRzIHtcbiAgcHVycG9zZTogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBQdXJwb3NlU3RlcCgpIHtcbiAgY29uc3QgeyBvcHRpbWl6ZWx5IH0gPSB1c2VDb250ZXh0KE9wdGltaXplbHlDb250ZXh0KTtcbiAgY29uc3QgZm9ybVJlZiA9IHVzZUdBRm9ybVRyYWNraW5nKG9wdGltaXplbHksICdwdXJwb3NlX3N0ZXAnKTtcbiAgY29uc3QgeyBuZXh0U3RlcCwgYWN0aXZlU3RlcCB9ID0gdXNlV2l6YXJkKCk7XG4gIGNvbnN0IHsgcmVmZXJyYWwsIHVwZGF0ZVJlZmVycmFsIH0gPSB1c2VSZWZlcnJhbENvbnRleHQoKTtcbiAgY29uc3QgeyByZWdpc3RlciwgaGFuZGxlU3VibWl0LCBmb3JtU3RhdGUgfSA9IHVzZUZvcm08UHVycG9zZVN0ZXBGaWVsZHM+KHtcbiAgICBkZWZhdWx0VmFsdWVzOiB7IHB1cnBvc2U6IHJlZmVycmFsLnB1cnBvc2UgPz8gJycgfSxcbiAgICByZXNvbHZlcjogeXVwUmVzb2x2ZXIocHVycG9zZVNjaGVtYSlcbiAgfSk7XG5cbiAgY29uc3QgYW5zd2VyT3B0aW9ucyA9IFtcbiAgICAnRmluZCB0aGUgcmlnaHQgdGF4IHBybycsXG4gICAgJ0RlY2lkZSB3aGV0aGVyIEkgbmVlZCBhIHRheCBwcm8nLFxuICAgICdVbmRlcnN0YW5kIHRoZSBjb3N0IG9mIHVzaW5nIGEgdGF4IHBybycsXG4gICAgJ1NvbWV0aGluZyBlbHNlJ1xuICBdO1xuXG4gIGNvbnN0IHN0ZXBMYWJlbCA9IFwiV2hhdCdzIHlvdXIgZ29hbCB0b2RheT9cIjtcblxuICBhc3luYyBmdW5jdGlvbiBvblZhbGlkU3VibWl0KHZhbHVlczogUHVycG9zZVN0ZXBGaWVsZHMpIHtcbiAgICB1cGRhdGVSZWZlcnJhbCh7XG4gICAgICAuLi5yZWZlcnJhbCxcbiAgICAgIHB1cnBvc2U6IHZhbHVlcy5wdXJwb3NlXG4gICAgfSk7XG4gICAgZmlyZU9wdGltaXplbHlFdmVudChvcHRpbWl6ZWx5LCAncHVycG9zZV9zdGVwX2NvbXBsZXRlZCcpO1xuICAgIHRyYWNrU3RlcENvbXBsZXRlZCh7XG4gICAgICBzdGVwOiBhY3RpdmVTdGVwICsgMSxcbiAgICAgIHN0ZXBfbmFtZTogJ3B1cnBvc2Vfc3RlcCcsXG4gICAgICBzdGVwX2xhYmVsOiBzdGVwTGFiZWwsXG4gICAgICBhbnN3ZXJfbGFiZWxzOiBhbnN3ZXJPcHRpb25zLFxuICAgICAgYW5zd2VyX3ZhbHVlczogW3ZhbHVlcy5wdXJwb3NlID8/ICcnXSxcbiAgICAgIGZvcm1fbmFtZTogRm9ybU5hbWVPcHRpb25zLlRBWF9SRUZFUlJBTF9GT1JNXG4gICAgfSk7XG4gICAgYXdhaXQgbmV4dFN0ZXAoKTtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGZvcm1TdGF0ZS5lcnJvcnMucHVycG9zZT8ubWVzc2FnZTtcblxuICByZXR1cm4gKFxuICAgIDxTdGVwV3JhcHBlcj5cbiAgICAgIDxmb3JtIHJlZj17Zm9ybVJlZn0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdChvblZhbGlkU3VibWl0KX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibS1ibG9jay14bFwiPlxuICAgICAgICAgIDxTdGFuZGFyZFN0ZXBUaXRsZT57c3RlcExhYmVsfTwvU3RhbmRhcmRTdGVwVGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm0tYmxvY2steGwgc3BhY2UteS0yXCI+XG4gICAgICAgICAge2Fuc3dlck9wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICAgIDxSYWRpb1RpbGVcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e29wdGlvblxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJyAnLCAnXycpXG4gICAgICAgICAgICAgICAgLmNvbmNhdCgnX3RheF9wdXJwb3NlX3JhZGlvX3RpbGUnKX1cbiAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKCdwdXJwb3NlJyl9XG4gICAgICAgICAgICAgIGxhYmVsPXtvcHRpb259XG4gICAgICAgICAgICAgIHZhbHVlPXtvcHRpb259XG4gICAgICAgICAgICAgIGlkPXtvcHRpb25cbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcgJywgJ18nKVxuICAgICAgICAgICAgICAgIC5jb25jYXQoJ190YXhfcHVycG9zZV9yYWRpb190aWxlJyl9XG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIHtlcnJvck1lc3NhZ2UgJiYgPHAgY2xhc3NOYW1lPVwidGV4dC0yIHRleHQtcmVkLTYwXCI+e2Vycm9yTWVzc2FnZX08L3A+fVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8U3RhbmRhcmROZXh0QnV0dG9uIC8+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9TdGVwV3JhcHBlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgUHVycG9zZVN0ZXAgfTtcbiIsImV4cG9ydCBlbnVtIFBlcnNvbmFsSW50ZW50T3B0aW9ucyB7XG4gIGZpbGVfdGF4ZXMgPSAnRmlsZSB0YXhlcycsXG4gIGhlbHBfd2l0aF90YXhfaXNzdWVzID0gJ0hlbHAgd2l0aCB0YXggaXNzdWVzJyxcbiAgYW5zd2VyX2dlbmVyYWxfcXVlc3Rpb25zID0gJ0Fuc3dlciBnZW5lcmFsIHF1ZXN0aW9ucycsXG4gIHNvbWV0aGluZ19lbHNlID0gJ1NvbWV0aGluZyBlbHNlJ1xufVxuIiwiaW1wb3J0IHsgR2VuZXJpY0NoZWNrYm94U3RlcCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgUGVyc29uYWxJbnRlbnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuXG5mdW5jdGlvbiBQZXJzb25hbEludGVudFN0ZXAoKSB7XG4gIHJldHVybiAoXG4gICAgPEdlbmVyaWNDaGVja2JveFN0ZXBcbiAgICAgIHRpdGxlPVwiSG93IGNhbiBhIHRheCBwcm8gYmVzdCBzdXBwb3J0wqB5b3U/XCJcbiAgICAgIHN1YnRpdGxlPVwiU2VsZWN0IGFsbCB0aGF0wqBhcHBseS5cIlxuICAgICAgY2hlY2tib3hPcHRpb25zPXtQZXJzb25hbEludGVudE9wdGlvbnN9XG4gICAgICByZWZlcnJhbEZpZWxkTmFtZT1cInRheF9wZXJzb25hbF9pbnRlbnRzXCJcbiAgICAgIHN0ZXBOYW1lPVwicGVyc29uYWxfaW50ZW50X3N0ZXBcIlxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IFBlcnNvbmFsSW50ZW50U3RlcCB9O1xuIiwiaW1wb3J0IHsgSlNYLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFdpemFyZCB9IGZyb20gJ3JlYWN0LXVzZS13aXphcmQnO1xuaW1wb3J0IHtcbiAgUmVmZXJyYWxGb3JtRGF0YSxcbiAgdXNlUmVmZXJyYWxDb250ZXh0XG59IGZyb20gJy4uLy4uLy4uL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbnRleHQnO1xuaW1wb3J0IHsgdHJhY2tGb3JtU3RhcnRlZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9hbmFseXRpY3MnO1xuaW1wb3J0IHsgRm9ybU5hbWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vbW9kdWxlcy9SZWZlcnJhbEZvcm0vZW51bXMvRm9ybU5hbWVPcHRpb25zJztcbmltcG9ydCB7XG4gIEFkdmljZUVkdWNhdGlvblN0ZXAsXG4gIEFkdmljZVN0ZXAsXG4gIEVtYWlsU3RlcCxcbiAgRnVsbE5hbWVTdGVwLFxuICBMb2NhdGlvblN0ZXAsXG4gIFBob25lU3RlcCxcbiAgUXVlc3Rpb25zU3RlcCxcbiAgU2VydmljZXNTdGVwLFxuICBWZXJpZmljYXRpb25TdGVwXG59IGZyb20gJy4uLy4uLy4uL21vZHVsZXMvUmVmZXJyYWxGb3JtL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgZ2VuZXJhdGVQSFF1ZXN0aW9uc0Zsb3csXG4gIGdlbmVyYXRlUXVlc3Rpb25zU3RlcEZvckFsbEZsb3dzLFxuICBzaG91bGRSZWNlaXZlUEhRdWVzdGlvbnNGbG93XG59IGZyb20gJy4uLy4uLy4uL21vZHVsZXMvUmVmZXJyYWxGb3JtL3V0aWxzJztcbmltcG9ydCB7XG4gIFRheEFkdmljZU9wdGlvbnMsXG4gIFRheFNlcnZpY2VPcHRpb25zXG59IGZyb20gJy4uLy4uLy4uL21vZHVsZXMvUmVmZXJyYWxGb3JtL2VudW1zJztcbmltcG9ydCB7IFBlcnNvbmFsSW50ZW50U3RlcCwgUHVycG9zZVN0ZXAgfSBmcm9tICcuL3N0ZXBzJztcbmltcG9ydCB7IFBlcnNvbmFsSW50ZW50T3B0aW9ucyB9IGZyb20gJy4uL2VudW1zJztcblxuZnVuY3Rpb24gUHVycG9zZVJlZmVycmFsRm9ybSgpIHtcbiAgY29uc3QgeyByZWZlcnJhbCwgcHJvSW5mbyB9ID0gdXNlUmVmZXJyYWxDb250ZXh0KCk7XG4gIGNvbnN0IGZvcm1XcmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaGFzRm9jdXNlZCA9IHVzZVJlZihmYWxzZSk7XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVFeHBlcmltZW50QmFzZWxpbmVGbG93KHJlZmVycmFsOiBSZWZlcnJhbEZvcm1EYXRhKSB7XG4gICAgY29uc3QgZXhwZXJpbWVudEJhc2VsaW5lQ29tcG9uZW50czogSlNYLkVsZW1lbnRbXSA9IFtdO1xuXG4gICAgaWYgKHJlZmVycmFsLmludGVyZXN0cy5pbmNsdWRlcyhUYXhTZXJ2aWNlT3B0aW9ucy5zbWFsbF9idXNpbmVzcykpIHtcbiAgICAgIHJldHVybiBleHBlcmltZW50QmFzZWxpbmVDb21wb25lbnRzO1xuICAgIH1cblxuICAgIGV4cGVyaW1lbnRCYXNlbGluZUNvbXBvbmVudHMucHVzaCg8UGVyc29uYWxJbnRlbnRTdGVwIC8+KTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVycmFsLnRheF9wZXJzb25hbF9pbnRlbnRzPy5pbmNsdWRlcyhcbiAgICAgICAgUGVyc29uYWxJbnRlbnRPcHRpb25zLmFuc3dlcl9nZW5lcmFsX3F1ZXN0aW9uc1xuICAgICAgKSAmJlxuICAgICAgcmVmZXJyYWwudGF4X3BlcnNvbmFsX2ludGVudHMubGVuZ3RoID09PSAxXG4gICAgKSB7XG4gICAgICBleHBlcmltZW50QmFzZWxpbmVDb21wb25lbnRzLnB1c2goPEFkdmljZVN0ZXAgLz4pO1xuXG4gICAgICBmdW5jdGlvbiBpc09ubHlPdGhlclNlbGVjdGVkKHJlZmVycmFsOiBSZWZlcnJhbEZvcm1EYXRhKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gaXMgb25seSBoZXJlIGZvciB0aGUgZXhwZXJpbWVudC4gUmVtb3ZlIHdoZW4gZXhwZXJpbWVudCBpcyBvdmVyLlxuICAgICAgICBjb25zdCB0YXhBZHZpY2UgPSByZWZlcnJhbC50YXhfYWR2aWNlLmZpbHRlcigocykgPT4gcyAhPT0gJycpO1xuICAgICAgICBjb25zdCBpbmNsdWRlc090aGVyID0gdGF4QWR2aWNlLmluY2x1ZGVzKFRheEFkdmljZU9wdGlvbnMub3RoZXIpO1xuICAgICAgICBjb25zdCBvbmx5T25lID0gdGF4QWR2aWNlLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgcmV0dXJuIGluY2x1ZGVzT3RoZXIgJiYgb25seU9uZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc09ubHlPdGhlclNlbGVjdGVkKHJlZmVycmFsKSkge1xuICAgICAgICBleHBlcmltZW50QmFzZWxpbmVDb21wb25lbnRzLnB1c2goPEFkdmljZUVkdWNhdGlvblN0ZXAgLz4pO1xuICAgICAgfVxuXG4gICAgICBleHBlcmltZW50QmFzZWxpbmVDb21wb25lbnRzLnB1c2goPFF1ZXN0aW9uc1N0ZXAgLz4pO1xuICAgIH1cbiAgICByZXR1cm4gZXhwZXJpbWVudEJhc2VsaW5lQ29tcG9uZW50cztcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZU9uRm9jdXNJbigpIHtcbiAgICBpZiAoIWhhc0ZvY3VzZWQuY3VycmVudCkge1xuICAgICAgdHJhY2tGb3JtU3RhcnRlZCh7IGZvcm1fbmFtZTogRm9ybU5hbWVPcHRpb25zLlRBWF9SRUZFUlJBTF9GT1JNIH0pO1xuICAgICAgaGFzRm9jdXNlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1XcmFwcGVyUmVmRWxlbWVudCA9IGZvcm1XcmFwcGVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGZvcm1XcmFwcGVyUmVmRWxlbWVudCkge1xuICAgICAgZm9ybVdyYXBwZXJSZWZFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBoYW5kbGVPbkZvY3VzSW4pO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBmb3JtV3JhcHBlclJlZkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIGhhbmRsZU9uRm9jdXNJbik7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2Zvcm1XcmFwcGVyUmVmfT5cbiAgICAgIDxXaXphcmQ+XG4gICAgICAgIDxMb2NhdGlvblN0ZXAgLz5cbiAgICAgICAgPFB1cnBvc2VTdGVwIC8+XG4gICAgICAgIDxTZXJ2aWNlc1N0ZXAgLz5cblxuICAgICAgICB7LyogUEggRkxvdyBvbmx5ICovfVxuICAgICAgICB7c2hvdWxkUmVjZWl2ZVBIUXVlc3Rpb25zRmxvdyhwcm9JbmZvKSAmJlxuICAgICAgICAgIGdlbmVyYXRlUEhRdWVzdGlvbnNGbG93KHJlZmVycmFsKX1cbiAgICAgICAge3Nob3VsZFJlY2VpdmVQSFF1ZXN0aW9uc0Zsb3cocHJvSW5mbykgJiZcbiAgICAgICAgICBnZW5lcmF0ZVF1ZXN0aW9uc1N0ZXBGb3JBbGxGbG93cyhyZWZlcnJhbCl9XG5cbiAgICAgICAgey8qIEV4cGVyaW1lbnQgQmFzZWxpbmUgRmxvdyBvbmx5ICovfVxuICAgICAgICB7IXNob3VsZFJlY2VpdmVQSFF1ZXN0aW9uc0Zsb3cocHJvSW5mbykgJiZcbiAgICAgICAgICBnZW5lcmF0ZUV4cGVyaW1lbnRCYXNlbGluZUZsb3cocmVmZXJyYWwpfVxuXG4gICAgICAgIDxGdWxsTmFtZVN0ZXAgLz5cbiAgICAgICAgPEVtYWlsU3RlcCAvPlxuICAgICAgICA8UGhvbmVTdGVwIC8+XG4gICAgICAgIDxWZXJpZmljYXRpb25TdGVwIC8+XG4gICAgICA8L1dpemFyZD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgUHVycG9zZVJlZmVycmFsRm9ybSB9O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBPcHRpbWl6ZWx5Q29udGV4dCxcbiAgT3B0aW1pemVseUV4cGVyaW1lbnQsXG4gIE9wdGltaXplbHlWYXJpYXRpb24sXG4gIFJlYWN0U0RLQ2xpZW50XG59IGZyb20gJ0BvcHRpbWl6ZWx5L3JlYWN0LXNkayc7XG5pbXBvcnQgeyBSZWZlcnJhbEZvcm0gfSBmcm9tICcuLi8uLi9tb2R1bGVzL1JlZmVycmFsRm9ybS9jb21wb25lbnRzJztcbmltcG9ydCB7IHRyYWNrRXhwZXJpbWVudFZpZXdlZCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hbmFseXRpY3MnO1xuaW1wb3J0IHsgUHVycG9zZVJlZmVycmFsRm9ybSB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5cbmNvbnN0IE9QVElNSVpFTFlfUFVSUE9TRV9IQVJEQ09ERURfVkFVTEVTID0ge1xuICBydWxlS2V5OiAncHVycG9zZV9xdWVzdGlvbl90ZXN0X3J1bGUnLFxuICBleHBlcmltZW50S2V5OiAndGF4X3JlZmVycmFsX3B1cnBvc2VfcXVlc3Rpb25fdGVzdCcsXG4gIGV4cGVyaW1lbnRJZDogJzkzMDAwMDI5MDM3ODAnLFxuICB2YXJpYXRpb25NYXBwaW5nczoge1xuICAgIHB1cnBvc2VfZmxvd19vZmY6ICcxNTkyMTUwJywgLy8gY29udHJvbFxuICAgIHB1cnBvc2VfZmxvd19vbjogJzE1OTIxNDknXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGZpcmVPcHRpbWl6ZWx5RGV0YWlsc0FuYWx5dGljc0V2ZW50KG9wdGltaXplbHk6IFJlYWN0U0RLQ2xpZW50KSB7XG4gIGNvbnN0IHZhcmlhdGlvbk5hbWUgPSBvcHRpbWl6ZWx5Py5nZXRWYXJpYXRpb24oXG4gICAgT1BUSU1JWkVMWV9QVVJQT1NFX0hBUkRDT0RFRF9WQVVMRVMucnVsZUtleVxuICApO1xuICBjb25zdCB2YXJpYXRpb25NYXBwaW5ncyA9XG4gICAgT1BUSU1JWkVMWV9QVVJQT1NFX0hBUkRDT0RFRF9WQVVMRVMudmFyaWF0aW9uTWFwcGluZ3M7XG4gIGNvbnN0IHZhcmlhdGlvbk1hcHBpbmdzS2V5cyA9IE9iamVjdC5rZXlzKFxuICAgIE9QVElNSVpFTFlfUFVSUE9TRV9IQVJEQ09ERURfVkFVTEVTLnZhcmlhdGlvbk1hcHBpbmdzXG4gICk7XG5cbiAgY29uc3QgdmFyaWF0aW9uSW5kZXggPSB2YXJpYXRpb25OYW1lPy5sZW5ndGhcbiAgICA/IHZhcmlhdGlvbk1hcHBpbmdzS2V5cy5pbmRleE9mKHZhcmlhdGlvbk5hbWUpXG4gICAgOiAtMTtcbiAgY29uc3QgaXNWYWxpZFZhcmlhdGlvbiA9ICEhdmFyaWF0aW9uTmFtZSAmJiB2YXJpYXRpb25JbmRleCAhPT0gLTE7XG4gIGlmICghaXNWYWxpZFZhcmlhdGlvbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgT3B0aW1pemVseSBQdXJwb3NlIEV4cGVyaW1lbnQ6IEludmFsaWQgdmFyaWF0aW9uIG5hbWUgXCIke3ZhcmlhdGlvbk5hbWV9XCJgXG4gICAgKTtcbiAgfVxuICBjb25zdCBldmVudCA9IHtcbiAgICBleHBlcmltZW50X2lkOiBPUFRJTUlaRUxZX1BVUlBPU0VfSEFSRENPREVEX1ZBVUxFUy5leHBlcmltZW50SWQsXG4gICAgdmFyaWF0aW9uX2lkOiBpc1ZhbGlkVmFyaWF0aW9uXG4gICAgICA/IHZhcmlhdGlvbk1hcHBpbmdzW1xuICAgICAgICAgIHZhcmlhdGlvbk5hbWUgYXMga2V5b2YgdHlwZW9mIE9QVElNSVpFTFlfUFVSUE9TRV9IQVJEQ09ERURfVkFVTEVTLnZhcmlhdGlvbk1hcHBpbmdzXG4gICAgICAgIF1cbiAgICAgIDogdmFyaWF0aW9uTWFwcGluZ3MucHVycG9zZV9mbG93X29mZixcbiAgICBleHBlcmltZW50X25hbWU6IE9QVElNSVpFTFlfUFVSUE9TRV9IQVJEQ09ERURfVkFVTEVTLmV4cGVyaW1lbnRLZXksXG4gICAgdmFyaWF0aW9uX25hbWU6IGlzVmFsaWRWYXJpYXRpb24gPyB2YXJpYXRpb25OYW1lIDogJ3B1cnBvc2VfZmxvd19vZmYnLFxuICAgIGV4cGVyaW1lbnRhdGlvbl9wbGF0Zm9ybTogJ090aGVyJ1xuICB9O1xuICB0cmFja0V4cGVyaW1lbnRWaWV3ZWQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBQdXJwb3NlUXVlc3Rpb25FeHBlcmltZW50V3JhcHBlcigpIHtcbiAgY29uc3QgeyBvcHRpbWl6ZWx5IH0gPSB1c2VDb250ZXh0KE9wdGltaXplbHlDb250ZXh0KTtcbiAgb3B0aW1pemVseT8ub25SZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgIGZpcmVPcHRpbWl6ZWx5RGV0YWlsc0FuYWx5dGljc0V2ZW50KG9wdGltaXplbHkpO1xuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxPcHRpbWl6ZWx5RXhwZXJpbWVudFxuICAgICAgZXhwZXJpbWVudD17T1BUSU1JWkVMWV9QVVJQT1NFX0hBUkRDT0RFRF9WQVVMRVMucnVsZUtleX1cbiAgICA+XG4gICAgICA8T3B0aW1pemVseVZhcmlhdGlvbiBkZWZhdWx0PXt0cnVlfSB2YXJpYXRpb249XCJwdXJwb3NlX2Zsb3dfb2ZmXCI+XG4gICAgICAgIDxSZWZlcnJhbEZvcm0gLz5cbiAgICAgIDwvT3B0aW1pemVseVZhcmlhdGlvbj5cbiAgICAgIDxPcHRpbWl6ZWx5VmFyaWF0aW9uIHZhcmlhdGlvbj1cInB1cnBvc2VfZmxvd19vblwiPlxuICAgICAgICA8UHVycG9zZVJlZmVycmFsRm9ybSAvPlxuICAgICAgPC9PcHRpbWl6ZWx5VmFyaWF0aW9uPlxuICAgIDwvT3B0aW1pemVseUV4cGVyaW1lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCB7IFB1cnBvc2VRdWVzdGlvbkV4cGVyaW1lbnRXcmFwcGVyIH07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVmZXJyYWxDb250ZXh0UHJvdmlkZXIgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgZ2V0VW5pcXVlU2Vzc2lvblVzZXJJZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlSW5zdGFuY2UsIE9wdGltaXplbHlQcm92aWRlciB9IGZyb20gJ0BvcHRpbWl6ZWx5L3JlYWN0LXNkayc7XG5pbXBvcnQgeyBvcHRpbWl6ZWx5S2V5LCByZWNhcHRjaGFLZXlWMyB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyBHb29nbGVSZUNhcHRjaGFQcm92aWRlciB9IGZyb20gJ3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEtdjMnO1xuaW1wb3J0IHsgdHJhY2tQYWdlVmlld2VkIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBQdXJwb3NlUXVlc3Rpb25FeHBlcmltZW50V3JhcHBlciB9IGZyb20gJy4uLy4uL2V4cGVyaW1lbnQnO1xuXG5jb25zdCBvcHRpbWl6ZWx5ID0gY3JlYXRlSW5zdGFuY2Uoe1xuICBzZGtLZXk6IG9wdGltaXplbHlLZXkoKVxufSk7XG5cbmZ1bmN0aW9uIHVzZVRyYWNrUmVmZXJyYWxQYWdlVmlld2VkKCkge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFRyYWNrIHBhZ2UgdmlldyAtIG11Y2ggc2ltcGxlciB3aXRoIGV4cGxpY2l0IHBhcmFtZXRlcnNcbiAgICB0cmFja1BhZ2VWaWV3ZWQoe1xuICAgICAgbmFtZTogJ3JhbXNleV90YXhfYWR2aXNvcl9yZWZlcnJhbCcsXG4gICAgICB0aXRsZTogJ1JhbXNleVRydXN0ZWQgVGF4IEFkdmlzb3JzIHwgUmFtc2V5U29sdXRpb25zLmNvbScsXG4gICAgICBrZXl3b3JkczogWyd0YXgnLCAncmVmZXJyYWwnLCAnYWR2aXNvcicsICdmb3JtJ11cbiAgICB9KTtcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBBcHAoKSB7XG4gIHVzZVRyYWNrUmVmZXJyYWxQYWdlVmlld2VkKCk7XG4gIHJldHVybiAoXG4gICAgPFJlYWN0LlN0cmljdE1vZGU+XG4gICAgICA8UmVmZXJyYWxDb250ZXh0UHJvdmlkZXI+XG4gICAgICAgIDxHb29nbGVSZUNhcHRjaGFQcm92aWRlciByZUNhcHRjaGFLZXk9e3JlY2FwdGNoYUtleVYzKCl9PlxuICAgICAgICAgIDxPcHRpbWl6ZWx5UHJvdmlkZXJcbiAgICAgICAgICAgIG9wdGltaXplbHk9e29wdGltaXplbHl9XG4gICAgICAgICAgICB1c2VyPXt7XG4gICAgICAgICAgICAgIGlkOiBnZXRVbmlxdWVTZXNzaW9uVXNlcklkKCksXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgdXNlcklkOiBnZXRVbmlxdWVTZXNzaW9uVXNlcklkKCkgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8UHVycG9zZVF1ZXN0aW9uRXhwZXJpbWVudFdyYXBwZXIgLz5cbiAgICAgICAgICA8L09wdGltaXplbHlQcm92aWRlcj5cbiAgICAgICAgPC9Hb29nbGVSZUNhcHRjaGFQcm92aWRlcj5cbiAgICAgIDwvUmVmZXJyYWxDb250ZXh0UHJvdmlkZXI+XG4gICAgPC9SZWFjdC5TdHJpY3RNb2RlPlxuICApO1xufVxuXG5leHBvcnQgeyBBcHAgfTtcbiIsImltcG9ydCAnLi9zdHlsZXMvdGFpbHdpbmQuY3NzJztcbmltcG9ydCAnLi9zdHlsZXMvaW5kZXguc2Nzcyc7XG5pbXBvcnQgeyBjcmVhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCc7XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuL0FwcCc7XG5cbmxldCBlbGVtZW50QnlJZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXgtcm9vdCcpO1xuaWYgKCFlbGVtZW50QnlJZCkge1xuICBlbGVtZW50QnlJZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290Jyk7XG59XG5jb25zdCBjb250YWluZXIgPSBlbGVtZW50QnlJZCBhcyBIVE1MRWxlbWVudDtcblxuY29uc29sZS5sb2coXG4gICclY01hcmsgMTI6MTcgXCJSZW5kZXIgdW50byBDYWVzYXIgdGhlIHRoaW5ncyB0aGF0IGFyZSBDYWVzYXJcXCdzLCBhbmQgdW50byBHb2QgdGhlIHRoaW5ncyB0aGF0IGFyZSBHb2RcXCdzLlwiJyxcbiAgJ2NvbG9yOiBncmVlbidcbik7XG5cbmNvbnN0IHJvb3QgPSBjcmVhdGVSb290KGNvbnRhaW5lcik7XG5yb290LnJlbmRlcig8QXBwIC8+KTtcbiJdLCJuYW1lcyI6WyJuIiwibCIsInUiLCJpIiwibyIsInIiLCJlIiwiZiIsImMiLCJzIiwiYSIsImgiLCJwIiwidiIsInkiLCJkIiwiQXJyYXkiLCJpc0FycmF5IiwidyIsImciLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJfIiwidCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImNoaWxkcmVuIiwiY2FsbCIsImRlZmF1bHRQcm9wcyIsIm0iLCJ0eXBlIiwicHJvcHMiLCJrZXkiLCJyZWYiLCJfX2siLCJfXyIsIl9fYiIsIl9fZSIsIl9fYyIsImNvbnN0cnVjdG9yIiwiX192IiwiX19pIiwiX191Iiwidm5vZGUiLCJiIiwiY3VycmVudCIsImsiLCJ4IiwidGhpcyIsImNvbnRleHQiLCJTIiwiQyIsImJhc2UiLCJNIiwiX19kIiwicHVzaCIsIiQiLCJfX3IiLCJkZWJvdW5jZVJlbmRlcmluZyIsInNvcnQiLCJzaGlmdCIsIl9fUCIsIk8iLCJfX24iLCJuYW1lc3BhY2VVUkkiLCJOIiwiSSIsIlAiLCJCIiwiQSIsIm5leHRTaWJsaW5nIiwiU3RyaW5nIiwiTCIsIkQiLCJpbnNlcnRCZWZvcmUiLCJub2RlVHlwZSIsIkgiLCJzb21lIiwiVCIsInNldFByb3BlcnR5IiwidGVzdCIsImoiLCJzdHlsZSIsImNzc1RleHQiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJzbGljZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVtb3ZlQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiRiIsImV2ZW50IiwicHJvdG90eXBlIiwicmVuZGVyIiwiY29udGV4dFR5cGUiLCJ2YWx1ZSIsIl9fRSIsIkUiLCJzdWIiLCJzdGF0ZSIsIl9faCIsIl9zYiIsIl9fcyIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudERpZE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsImNvbXBvbmVudFdpbGxVcGRhdGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJnZXRDaGlsZENvbnRleHQiLCJnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSIsIlYiLCJ0aGVuIiwiaW5kZXhPZiIsInoiLCJxIiwiZGlmZmVkIiwiZm9yRWFjaCIsIm1hcCIsImxvY2FsTmFtZSIsImRvY3VtZW50IiwiY3JlYXRlVGV4dE5vZGUiLCJjcmVhdGVFbGVtZW50TlMiLCJpcyIsIl9fbSIsImRhdGEiLCJjaGlsZE5vZGVzIiwiYXR0cmlidXRlcyIsIm5hbWUiLCJfX2h0bWwiLCJpbm5lckhUTUwiLCJjb250ZW50IiwidW5tb3VudCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiRyIsImRvY3VtZW50RWxlbWVudCIsImZpcnN0Q2hpbGQiLCJKIiwiSyIsIlEiLCJTZXQiLCJhZGQiLCJkZWxldGUiLCJQcm92aWRlciIsIl9fbCIsIkNvbnN1bWVyIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwic2V0U3RhdGUiLCJjb21wb25lbnREaWRDYXRjaCIsImZvcmNlVXBkYXRlIiwiUHJvbWlzZSIsImJpbmQiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsIkVudmlyb25tZW50IiwiZ2V0IiwiZW52aXJvbm1lbnQiLCJwcmVmaXgiLCJob3N0IiwiX2dldEhvc3RuYW1lIiwibWF0Y2giLCJkZXYiLCJxYSIsInByb2QiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhvc3RuYW1lIiwiUmVhY3QiLCJvcHRpbWl6ZWx5IiwiaG9pc3ROb25SZWFjdFN0YXRpY3MiLCJfaW50ZXJvcE5hbWVzcGFjZURlZmF1bHQiLCJjcmVhdGUiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImRlZmF1bHQiLCJmcmVlemUiLCJSZWFjdF9fbmFtZXNwYWNlIiwib3B0aW1pemVseV9fbmFtZXNwYWNlIiwiT3B0aW1pemVseUNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiaXNTZXJ2ZXJTaWRlIiwidGltZW91dCIsIk9wdGltaXplbHlDb250ZXh0Q29uc3VtZXIiLCJPcHRpbWl6ZWx5Q29udGV4dFByb3ZpZGVyIiwiZXh0ZW5kU3RhdGljcyIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiaGFzT3duUHJvcGVydHkiLCJfX2V4dGVuZHMiLCJUeXBlRXJyb3IiLCJfX2Fzc2lnbiIsImFzc2lnbiIsImFwcGx5IiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJvcCIsInBvcCIsIl9fc3ByZWFkQXJyYXkiLCJ0byIsImZyb20iLCJwYWNrIiwiYXIiLCJjb25jYXQiLCJhcmVVc2Vyc0VxdWFsIiwidXNlcjEiLCJ1c2VyMiIsImlkIiwidXNlcjFBdHRyaWJ1dGVzIiwidXNlcjJBdHRyaWJ1dGVzIiwidXNlcjFLZXlzIiwidXNlcjJLZXlzIiwiX2kiLCJ1c2VyMUtleXNfMSIsImNvZXJjZVVua25vd25BdHRyc1ZhbHVlRm9yQ29tcGFyaXNvbiIsIm1heWJlQXR0cnMiLCJhcmVBdHRyaWJ1dGVzRXF1YWwiLCJtYXliZU9sZEF0dHJzIiwibWF5YmVOZXdBdHRycyIsIm9sZEF0dHJzIiwibmV3QXR0cnMiLCJvbGRBdHRyc0tleXMiLCJuZXdBdHRyc0tleXMiLCJldmVyeSIsIm9sZEF0dHJLZXkiLCJjcmVhdGVGYWlsZWREZWNpc2lvbiIsImZsYWdLZXkiLCJtZXNzYWdlIiwidXNlciIsImVuYWJsZWQiLCJydWxlS2V5IiwidmFyaWF0aW9uS2V5IiwidmFyaWFibGVzIiwicmVhc29ucyIsInVzZXJDb250ZXh0Iiwic3ByaW50ZiIsImZvcm1hdCIsImFyZ3MiLCJhcmciLCJTdXBwcmVzc2VkRXJyb3IiLCJOb3RSZWFkeVJlYXNvbiIsIm5vdGlmaWVyIiwiTm90aWZpZXIiLCJvYnNlcnZlcnMiLCJnZXRJbnN0YW5jZSIsImluc3RhbmNlIiwic3Vic2NyaWJlIiwiY2FsbGJhY2siLCJfdGhpcyIsInN1YnNjcmlwdGlvbklkIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwib2JzZXJ2ZXJJbmRleCIsImZpbmRJbmRleCIsIm9ic2VydmVyIiwic3BsaWNlIiwibm90aWZ5IiwiZmlsdGVyIiwibG9nSGFuZGxlciIsImdldExvZ2dlciIsImxvZ2dlciQyIiwibXNnIiwic3BsYXQiLCJsb2ciLCJlbnVtcyIsIkxPR19MRVZFTCIsIldBUk5JTkciLCJJTkZPIiwiRVJST1IiLCJEZWZhdWx0VXNlciIsIk9wdGltaXplbHlSZWFjdFNES0NsaWVudCIsImNvbmZpZyIsIm9uVXNlclVwZGF0ZUhhbmRsZXJzIiwiaXNVc2VyUHJvbWlzZVJlc29sdmVkIiwiaXNVc2VyUmVhZHkiLCJvbkZvcmNlZFZhcmlhdGlvbnNVcGRhdGVIYW5kbGVycyIsImZvcmNlZERlY2lzaW9uRmxhZ0tleXMiLCJpc0NsaWVudFJlYWR5IiwiY2xpZW50QW5kVXNlclJlYWR5UHJvbWlzZUZ1bGZpbGxlZCIsImlzVXNpbmdTZGtLZXkiLCJpbml0aWFsQ29uZmlnIiwiY29uZmlnV2l0aENsaWVudEluZm8iLCJjbGllbnRFbmdpbmUiLCJjbGllbnRWZXJzaW9uIiwidXNlclByb21pc2VSZXNvbHZlciIsInVzZXJSZWFkeVByb21pc2UiLCJfY2xpZW50IiwiY3JlYXRlSW5zdGFuY2UiLCJnZXRPcHRpbWl6ZWx5Q29uZmlnIiwic2RrS2V5IiwiY2xpZW50UmVhZHlQcm9taXNlIiwib25SZWFkeSIsImNsaWVudEFuZFVzZXJSZWFkeVByb21pc2UiLCJhbGwiLCJfYSIsInVzZXJSZXN1bHQiLCJjbGllbnRSZXN1bHQiLCJzdWNjZXNzIiwiY2xpZW50QW5kVXNlclJlYWR5IiwiaXNSZWFkeSIsInJlYXNvbiIsIk5PX0NMSUVOVCIsImdldFVzZXJXaXRoT3ZlcnJpZGVzIiwib3ZlcnJpZGVVc2VySWQiLCJvdmVycmlkZUF0dHJpYnV0ZXMiLCJ1bmRlZmluZWQiLCJnZXRJc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCIsImdldElzVXNpbmdTZGtLZXkiLCJvZHBPcHRpb25zIiwiZGlzYWJsZWQiLCJjb25maWd1cmFibGUiLCJ0aW1lb3V0SWQiLCJ0aW1lb3V0UHJvbWlzZSIsIlRJTUVPVVQiLCJkYXRhUmVhZHlQcm9taXNlIiwicmFjZSIsInJlcyIsImNsZWFyVGltZW91dCIsImdldFVzZXJDb250ZXh0Iiwic2V0Q3VycmVudFVzZXJDb250ZXh0IiwidXNlckluZm8iLCJnZXRVc2VySWQiLCJnZXRBdHRyaWJ1dGVzIiwiY3JlYXRlVXNlckNvbnRleHQiLCJtYWtlVXNlckNvbnRleHRJbnN0YW5jZSIsImZldGNoUXVhbGlmaWVkU2VnbWVudHMiLCJvcHRpb25zIiwiX2IiLCJvZHBFeHBsaWNpdGx5T2ZmIiwiaXNPZHBJbnRlZ3JhdGVkIiwic2V0VXNlciIsImZldGNoUXVhbGlmZWRTZWdtZW50c1N1Y2NlZWQiLCJfYyIsIl9kIiwiaGFuZGxlciIsIm9uVXNlclVwZGF0ZSIsImluZCIsIm9uRm9yY2VkVmFyaWF0aW9uc1VwZGF0ZSIsImFjdGl2YXRlIiwiZXhwZXJpbWVudEtleSIsImRlY2lkZSIsIm9wdGx5VXNlckNvbnRleHQiLCJkZWNpZGVGb3JLZXlzIiwiZW50cmllcyIsInJlZHVjZSIsImRlY2lzaW9ucyIsImRlY2lzaW9uIiwiZGVjaWRlQWxsIiwiZ2V0VmFyaWF0aW9uIiwidHJhY2siLCJldmVudEtleSIsImV2ZW50VGFncyIsInNldEZvcmNlZERlY2lzaW9uIiwiZGVjaXNpb25Db250ZXh0IiwiZ2V0Rm9yY2VkRGVjaXNpb24iLCJyZW1vdmVGb3JjZWREZWNpc2lvbiIsImlzU3VjY2VzcyIsInJlbW92ZUFsbEZvcmNlZERlY2lzaW9ucyIsImNsZWFyIiwiaXNGZWF0dXJlRW5hYmxlZCIsImZlYXR1cmUiLCJnZXRGZWF0dXJlVmFyaWFibGVzIiwiZmVhdHVyZUtleSIsInVzZXJJZCIsInVzZXJBdHRyaWJ1dGVzIiwidmFyaWFibGVPYmoiLCJvcHRseUNvbmZpZyIsImZlYXR1cmVzTWFwIiwidmFyaWFibGVzTWFwIiwidmFyaWFibGUiLCJnZXRGZWF0dXJlVmFyaWFibGUiLCJnZXRGZWF0dXJlVmFyaWFibGVTdHJpbmciLCJnZXRGZWF0dXJlVmFyaWFibGVCb29sZWFuIiwiZ2V0RmVhdHVyZVZhcmlhYmxlSW50ZWdlciIsImdldEZlYXR1cmVWYXJpYWJsZURvdWJsZSIsImdldEZlYXR1cmVWYXJpYWJsZUpTT04iLCJ2YXJpYWJsZUtleSIsImdldEFsbEZlYXR1cmVWYXJpYWJsZXMiLCJnZXRFbmFibGVkRmVhdHVyZXMiLCJnZXRGb3JjZWRWYXJpYXRpb24iLCJleHBlcmltZW50Iiwic2V0Rm9yY2VkVmFyaWF0aW9uIiwib3ZlcnJpZGVVc2VySWRPclZhcmlhdGlvbktleSIsImZpbmFsVXNlcklkIiwiZmluYWxWYXJpYXRpb25LZXkiLCJjbG9zZSIsIm5vdGlmaWNhdGlvbkNlbnRlciIsImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIiwicmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIiLCJjbGVhckFsbE5vdGlmaWNhdGlvbkxpc3RlbmVycyIsImNsZWFyTm90aWZpY2F0aW9uTGlzdGVuZXJzIiwic2VuZE9kcEV2ZW50IiwiYWN0aW9uIiwiaWRlbnRpZmllcnMiLCJ0cmltIiwiY2xpZW50IiwiZ2V0VnVpZCIsIkhvb2tUeXBlIiwibG9nZ2VyJDEiLCJPcHRpbWl6ZWx5UHJvdmlkZXIiLCJfc3VwZXIiLCJzZXRVc2VySW5PcHRpbWl6ZWx5IiwiZmluYWxVc2VyIiwiZXJyb3IiLCJ3YXJuIiwicHJldlByb3BzIiwiY3JlYXRlRWxlbWVudCIsIkNvbXBvbmVudCIsInNldHVwQXV0b1VwZGF0ZUxpc3RlbmVycyIsIm9wdGltaXplbHkkMSIsImxvZ2dlciIsImxvZ2dlclN1ZmZpeCIsIm9wdGltaXplbHlOb3RpZmljYXRpb25JZCIsIk5PVElGSUNBVElPTl9UWVBFUyIsIk9QVElNSVpFTFlfQ09ORklHX1VQREFURSIsImluZm8iLCJ1bnJlZ2lzdGVyVXNlckxpc3RlbmVyIiwiaG9va3NMb2dnZXIiLCJvcHRpbWl6ZWx5UHJvcEVycm9yIiwiYXJlRGVjaXNpb25JbnB1dHNFcXVhbCIsIm9sZERlY2lzaW9uSW5wdXRzIiwibmV3RGVjaXNpb25JbnB1dHMiLCJlbnRpdHlLZXkiLCJzdWJzY3JpYmVUb0luaXRpYWxpemF0aW9uIiwib25Jbml0U3RhdGVDaGFuZ2UiLCJjbGllbnRSZWFkeSIsImRpZFRpbWVvdXQiLCJyZWFkeVJlc3VsdCIsIlVTRVJfTk9UX1JFQURZIiwiY2F0Y2giLCJ1c2VDb21wYXJlQXR0cnNNZW1vaXplIiwidXNlUmVmIiwidXNlRXhwZXJpbWVudCIsIm92ZXJyaWRlcyIsInVzZUNvbnRleHQiLCJvdmVycmlkZUF0dHJzIiwiZ2V0Q3VycmVudERlY2lzaW9uIiwidXNlQ2FsbGJhY2siLCJ2YXJpYXRpb24iLCJpc1JlYWR5UHJvbWlzZUZ1bGZpbGxlZCIsInVzZVN0YXRlIiwiZGVjaXNpb25TdGF0ZSIsImN1cnJlbnREZWNpc2lvbklucHV0cyIsInByZXZEZWNpc2lvbklucHV0cyIsInNldFByZXZEZWNpc2lvbklucHV0cyIsInByZXZTdGF0ZSIsImZpbmFsUmVhZHlUaW1lb3V0IiwidXNlRWZmZWN0IiwiaW5pdFN0YXRlIiwiYXV0b1VwZGF0ZSIsIkVYUEVSSU1FTlQiLCJ1c2VGZWF0dXJlIiwiaXNFbmFibGVkIiwiRkVBVFVSRSIsIk9wdGltaXplbHlGZWF0dXJlIiwiRnJhZ21lbnQiLCJPcHRpbWl6ZWx5RXhwZXJpbWVudCIsImRlZmF1bHRNYXRjaCIsInZhcmlhdGlvbk1hdGNoIiwiQ2hpbGRyZW4iLCJjaGlsZCIsImlzVmFsaWRFbGVtZW50IiwiT3B0aW1pemVseVZhcmlhdGlvbiIsImxvZ09ubHlFdmVudERpc3BhdGNoZXIiLCJkaXNwYXRjaEV2ZW50IiwiZGVidWciLCJldmVudFN0ciIsIkpTT04iLCJzdHJpbmdpZnkiLCJlcnIiLCJzdGF0dXNDb2RlIiwiX25pbCIsIl9wYXJzZSIsIl9zdHJpbmdpZnkiLCJfdiIsIl92MiIsIl92MyIsIl92NCIsIl92YWxpZGF0ZSIsIl92ZXJzaW9uIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJnZXRSYW5kb21WYWx1ZXMiLCJjcnlwdG8iLCJFcnJvciIsInJuZHM4IiwiVWludDhBcnJheSIsImRhdGFMYXllcl8xIiwiaW5kZXhfMSIsIlZBTElEX01PRFVMRV9UWVBFUyIsImZvcm1JZCIsImludGVyYWN0ZWRGaWVsZHMiLCJ0cmFja0NvbmZpcm1hdGlvbiIsInJlZmVyZW5jZUlkIiwic2NvcmUiLCJ0cmFja0Vycm9yIiwiZmllbGQiLCJlcnJvckZpZWxkIiwiZ2V0RmllbGROYW1lIiwiZXJyb3JNZXNzYWdlIiwidHJhY2tJbnZhbGlkU3VibWlzc2lvbiIsInRyYWNrTW9kdWxlIiwiY2F0ZWdvcnkiLCJmbGFnIiwiaW5jbHVkZXMiLCJtb2R1bGVUeXBlIiwibW9kdWxlQ2F0ZWdvcnkiLCJtb2R1bGVMYWJlbCIsIm1vZHVsZVZhbHVlIiwibW9kdWxlRmxhZyIsInRyYWNrU3RlcFNraXAiLCJzdGVwTmFtZSIsImZvcm1TdGVwTmFtZSIsInRyYWNrU3RlcFZpZXciLCJ0cmFja1ZhbGlkU3VibWlzc2lvbiIsImVtYWlsQWRkcmVzcyIsImZvcm1FbWFpbCIsInJlZ2lzdGVyRm9ybUVsZW1lbnQiLCJmb3JtRWxlbWVudCIsInRhcmdldCIsImZvcm1GaWVsZCIsImZvcm1GaWVsZE5hbWUiLCJmb3JtRmllbGRJbmRleCIsImdldEZpZWxkSW5kZXgiLCJfbmF0aXZlIiwiX3JuZyIsIl9kZWZhdWx0IiwiYnVmIiwib2Zmc2V0IiwicmFuZG9tVVVJRCIsInJuZHMiLCJybmciLCJ1bnNhZmVTdHJpbmdpZnkiLCJfbm9kZUlkIiwiX2Nsb2Nrc2VxIiwiX2xhc3RNU2VjcyIsIl9sYXN0TlNlY3MiLCJub2RlIiwiY2xvY2tzZXEiLCJzZWVkQnl0ZXMiLCJtc2VjcyIsIkRhdGUiLCJub3ciLCJuc2VjcyIsImR0IiwidGwiLCJ0bWgiLCJob3RqYXJMaWIiLCJoaiIsInBhcmFtcyIsIm1vZHVsZSIsImhvdGphciIsImluaXRpYWxpemUiLCJzdiIsIm5vbmNlIiwiaW5pdGlhbGl6ZWQiLCJpZGVudGlmeSIsInByb3BlcnRpZXMiLCJzdGF0ZUNoYW5nZSIsInJlbGF0aXZlUGF0aCIsImJ5dGVUb0hleCIsInRvU3RyaW5nIiwiYXJyIiwidXVpZCIsInBhcnNlSW50IiwiZm9yIiwiJCR0eXBlb2YiLCJBc3luY01vZGUiLCJDb25jdXJyZW50TW9kZSIsIkNvbnRleHRDb25zdW1lciIsIkNvbnRleHRQcm92aWRlciIsIkVsZW1lbnQiLCJGb3J3YXJkUmVmIiwiTGF6eSIsIk1lbW8iLCJQb3J0YWwiLCJQcm9maWxlciIsIlN0cmljdE1vZGUiLCJTdXNwZW5zZSIsImlzQXN5bmNNb2RlIiwiaXNDb25jdXJyZW50TW9kZSIsImlzQ29udGV4dENvbnN1bWVyIiwiaXNDb250ZXh0UHJvdmlkZXIiLCJpc0VsZW1lbnQiLCJpc0ZvcndhcmRSZWYiLCJpc0ZyYWdtZW50IiwiaXNMYXp5IiwiaXNNZW1vIiwiaXNQb3J0YWwiLCJpc1Byb2ZpbGVyIiwiaXNTdHJpY3RNb2RlIiwiaXNTdXNwZW5zZSIsImlzVmFsaWRFbGVtZW50VHlwZSIsInR5cGVPZiIsInRvcG9zb3J0Iiwibm9kZXMiLCJlZGdlcyIsImN1cnNvciIsInNvcnRlZCIsInZpc2l0ZWQiLCJvdXRnb2luZ0VkZ2VzIiwiTWFwIiwibGVuIiwiZWRnZSIsImhhcyIsInNldCIsIm1ha2VPdXRnb2luZ0VkZ2VzIiwibm9kZXNIYXNoIiwibWFrZU5vZGVzSGFzaCIsInZpc2l0IiwicHJlZGVjZXNzb3JzIiwibm9kZVJlcCIsIm91dGdvaW5nIiwidW5pcXVlTm9kZXMiLCJhcnJheSIsImdldE91dHB1dExlbmd0aCIsImlucHV0TGVuZ3RoOCIsInNhZmVBZGQiLCJsc3ciLCJtZDVjbW4iLCJudW0iLCJjbnQiLCJtZDVmZiIsIm1kNWdnIiwibWQ1aGgiLCJtZDVpaSIsImJ5dGVzIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjaGFyQ29kZUF0IiwiaW5wdXQiLCJvdXRwdXQiLCJsZW5ndGgzMiIsImhleFRhYiIsImhleCIsImNoYXJBdCIsIm1kNVRvSGV4RW5jb2RlZEFycmF5Iiwib2xkYSIsIm9sZGIiLCJvbGRjIiwib2xkZCIsIndvcmRzVG9NZDUiLCJsZW5ndGg4IiwiVWludDMyQXJyYXkiLCJieXRlc1RvV29yZHMiLCJDYWNoZSIsIm1heFNpemUiLCJfbWF4U2l6ZSIsIl9zaXplIiwiX3ZhbHVlcyIsIlNQTElUX1JFR0VYIiwiRElHSVRfUkVHRVgiLCJMRUFEX0RJR0lUX1JFR0VYIiwiU1BFQ19DSEFSX1JFR0VYIiwiQ0xFQU5fUVVPVEVTX1JFR0VYIiwicGF0aENhY2hlIiwic2V0Q2FjaGUiLCJnZXRDYWNoZSIsIm5vcm1hbGl6ZVBhdGgiLCJwYXRoIiwic3BsaXQiLCJwYXJ0IiwiaXNRdW90ZWQiLCJzdHIiLCJzaG91bGRCZVF1b3RlZCIsImhhc0xlYWRpbmdOdW1iZXIiLCJoYXNTcGVjaWFsQ2hhcnMiLCJzZXR0ZXIiLCJwYXJ0cyIsImluZGV4IiwiZ2V0dGVyIiwic2FmZSIsImpvaW4iLCJzZWdtZW50cyIsImNiIiwiaXRlciIsImlkeCIsImlzQnJhY2tldCIsInJlYWN0SXMiLCJSRUFDVF9TVEFUSUNTIiwiY2hpbGRDb250ZXh0VHlwZXMiLCJjb250ZXh0VHlwZXMiLCJkaXNwbGF5TmFtZSIsImdldERlZmF1bHRQcm9wcyIsIm1peGlucyIsInByb3BUeXBlcyIsIktOT1dOX1NUQVRJQ1MiLCJjYWxsZXIiLCJjYWxsZWUiLCJhcml0eSIsIk1FTU9fU1RBVElDUyIsImNvbXBhcmUiLCJUWVBFX1NUQVRJQ1MiLCJnZXRTdGF0aWNzIiwiY29tcG9uZW50IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldFByb3RvdHlwZU9mIiwib2JqZWN0UHJvdG90eXBlIiwidGFyZ2V0Q29tcG9uZW50Iiwic291cmNlQ29tcG9uZW50IiwiYmxhY2tsaXN0IiwiaW5oZXJpdGVkQ29tcG9uZW50IiwidGFyZ2V0U3RhdGljcyIsInNvdXJjZVN0YXRpY3MiLCJkZXNjcmlwdG9yIiwiX19IIiwiX19OIiwiX19mIiwidXNlRGVidWdWYWx1ZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiUiIsImlzUmVhY3RDb21wb25lbnQiLCJpc1B1cmVSZWFjdENvbXBvbmVudCIsImNvdW50Iiwib25seSIsInRvQXJyYXkiLCJVIiwiVyIsImFwcGVuZENoaWxkIiwiX19hIiwiX19SIiwiX19PIiwiZmFsbGJhY2siLCJyZXZlYWxPcmRlciIsInNpemUiLCJaIiwiWSIsImNvbnRhaW5zIiwiY29udGFpbmVySW5mbyIsInJldmVyc2UiLCJYIiwibm4iLCJ0ZXh0Q29udGVudCIsInRuIiwid3JpdGFibGUiLCJlbiIsInJuIiwidW4iLCJjYW5jZWxCdWJibGUiLCJvbiIsImRlZmF1bHRQcmV2ZW50ZWQiLCJwZXJzaXN0IiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJuYXRpdmVFdmVudCIsImxuIiwiY24iLCJjbGFzcyIsImZuIiwibXVsdGlwbGUiLCJzZWxlY3RlZCIsImRlZmF1bHRWYWx1ZSIsImNsYXNzTmFtZSIsImFuIiwic24iLCJobiIsIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCJyZWFkQ29udGV4dCIsInVzZURlZmVycmVkVmFsdWUiLCJ1c2VJZCIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJ1c2VJbnNlcnRpb25FZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVkdWNlciIsInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwidXNlVHJhbnNpdGlvbiIsInZuIiwiZG4iLCJtbiIsInBuIiwieW4iLCJzdGFydHNXaXRoIiwiX24iLCJibiIsIlNuIiwiZ24iLCJFbiIsIkNuIiwieG4iLCJSbiIsInN0YXJ0VHJhbnNpdGlvbiIsInZlcnNpb24iLCJoeWRyYXRlIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsImNyZWF0ZVBvcnRhbCIsImNyZWF0ZUZhY3RvcnkiLCJjbG9uZUVsZW1lbnQiLCJjcmVhdGVSZWYiLCJmaW5kRE9NTm9kZSIsIlB1cmVDb21wb25lbnQiLCJtZW1vIiwiZm9yd2FyZFJlZiIsImZsdXNoU3luYyIsInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwiU3VzcGVuc2VMaXN0IiwibGF6eSIsIl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEIiwiUk9UTCIsImNlaWwiLCJwb3ciLCJ2YWxpZGF0ZSIsIkludGVnZXIiLCJwcmltaXRpdmVDb25zdHJ1Y3RvcnMiLCJCb29sZWFuIiwiTnVtYmVyIiwic2NoZW1hIiwiY2hhbmdpbmciLCJjaGVja1Byb3BlcnR5Q2hhbmdlIiwicHJvcGVydHkiLCJfY2hhbmdpbmciLCJnZXRUeXBlIiwiZXJyb3JzIiwiY2hlY2tQcm9wIiwiYWRkRXJyb3IiLCJjaGVja1R5cGUiLCJ1bmlvbkVycm9ycyIsInByaW9yRXJyb3JzIiwidGhlc2VFcnJvcnMiLCJyZWFkb25seSIsInJlcXVpcmVkIiwiZGlzYWxsb3ciLCJpdGVtcyIsIml0ZW1zSXNBcnJheSIsInByb3BEZWYiLCJjb2VyY2UiLCJtaW5JdGVtcyIsIm1heEl0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjaGVja09iaiIsInBhdHRlcm4iLCJtYXhMZW5ndGgiLCJtaW5MZW5ndGgiLCJtaW5pbXVtIiwibWF4aW11bSIsImZvdW5kIiwiZW51bWVyIiwibWF4RGVjaW1hbCIsIlJlZ0V4cCIsIm9ialR5cGVEZWYiLCJhZGRpdGlvbmFsUHJvcCIsImV4aXN0aW5nT25seSIsInJlcXVpcmVzIiwiJHNjaGVtYSIsInZhbGlkIiwibXVzdEJlVmFsaWQiLCJmYWN0b3J5IiwiY2FjaGVkU2V0VGltZW91dCIsImNhY2hlZENsZWFyVGltZW91dCIsInByb2Nlc3MiLCJkZWZhdWx0U2V0VGltb3V0IiwiZGVmYXVsdENsZWFyVGltZW91dCIsInJ1blRpbWVvdXQiLCJmdW4iLCJjdXJyZW50UXVldWUiLCJxdWV1ZSIsImRyYWluaW5nIiwicXVldWVJbmRleCIsImNsZWFuVXBOZXh0VGljayIsImRyYWluUXVldWUiLCJydW4iLCJtYXJrZXIiLCJydW5DbGVhclRpbWVvdXQiLCJJdGVtIiwibm9vcCIsIm5leHRUaWNrIiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb25zIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsImJpbmRpbmciLCJjd2QiLCJjaGRpciIsImRpciIsInVtYXNrIiwiZ3RtRGF0YUxheWVyIiwicmVXb3JkcyIsIndvcmRzIiwidXBwZXJGaXJzdCIsInRvVXBwZXJDYXNlIiwiY2FtZWxDYXNlIiwiYWNjIiwicGFzY2FsQ2FzZSIsInNuYWtlQ2FzZSIsImtlYmFiQ2FzZSIsInNlbnRlbmNlQ2FzZSIsInRpdGxlQ2FzZSIsIl9oalNldHRpbmdzIiwiaGppZCIsImhqc3YiLCJoakRlYnVnIiwiX3NjcmlwdFBhdGgiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhc3luYyIsInNyYyIsIl9yZWdleCIsIl9zaGEiLCJoYXNPd24iLCJjbGFzc05hbWVzIiwiY2xhc3NlcyIsImFwcGVuZENsYXNzIiwicGFyc2VWYWx1ZSIsIm5ld0NsYXNzIiwiRlVOQ19UWVBFIiwiVU5ERUZfVFlQRSIsIk9CSl9UWVBFIiwiU1RSX1RZUEUiLCJNQUpPUiIsIk1PREVMIiwiTkFNRSIsIlRZUEUiLCJWRU5ET1IiLCJWRVJTSU9OIiwiQVJDSElURUNUVVJFIiwiQ09OU09MRSIsIk1PQklMRSIsIlRBQkxFVCIsIlNNQVJUVFYiLCJXRUFSQUJMRSIsIkVNQkVEREVEIiwiQU1BWk9OIiwiQVBQTEUiLCJBU1VTIiwiQkxBQ0tCRVJSWSIsIkJST1dTRVIiLCJDSFJPTUUiLCJGSVJFRk9YIiwiR09PR0xFIiwiSE9OT1IiLCJIVUFXRUkiLCJMRyIsIk1JQ1JPU09GVCIsIk1PVE9ST0xBIiwiTlZJRElBIiwiT05FUExVUyIsIk9QRVJBIiwiT1BQTyIsIlNBTVNVTkciLCJTSEFSUCIsIlNPTlkiLCJYSUFPTUkiLCJaRUJSQSIsIkZBQ0VCT09LIiwiQ0hST01JVU1fT1MiLCJNQUNfT1MiLCJTVUZGSVhfQlJPV1NFUiIsImVudW1lcml6ZSIsInN0cjEiLCJzdHIyIiwibG93ZXJpemUiLCJzdWJzdHJpbmciLCJyZ3hNYXBwZXIiLCJ1YSIsImFycmF5cyIsIm1hdGNoZXMiLCJyZWdleCIsImV4ZWMiLCJzdHJNYXBwZXIiLCJ3aW5kb3dzVmVyc2lvbk1hcCIsInJlZ2V4ZXMiLCJjcHUiLCJkZXZpY2UiLCJlbmdpbmUiLCJFREdFIiwib3MiLCJVQVBhcnNlciIsImV4dGVuc2lvbnMiLCJnZXRSZXN1bHQiLCJfbmF2aWdhdG9yIiwibmF2aWdhdG9yIiwiX3VhIiwidXNlckFnZW50IiwiX3VhY2giLCJ1c2VyQWdlbnREYXRhIiwiX3JneG1hcCIsIm1lcmdlZFJlZ2V4ZXMiLCJleHRlbmQiLCJfaXNTZWxmTmF2IiwiZ2V0QnJvd3NlciIsIl9icm93c2VyIiwiYnJhdmUiLCJpc0JyYXZlIiwiZ2V0Q1BVIiwiX2NwdSIsImdldERldmljZSIsIl9kZXZpY2UiLCJtb2JpbGUiLCJzdGFuZGFsb25lIiwibWF4VG91Y2hQb2ludHMiLCJnZXRFbmdpbmUiLCJfZW5naW5lIiwiZ2V0T1MiLCJfb3MiLCJwbGF0Zm9ybSIsImdldFVBIiwic2V0VUEiLCJDUFUiLCJERVZJQ0UiLCJFTkdJTkUiLCJPUyIsImpRdWVyeSIsIlplcHRvIiwicGFyc2VyIiwicHJvcCIsIkhBU0hfVU5ERUZJTkVEIiwiZnVuY1RhZyIsImdlblRhZyIsInJlSXNIb3N0Q3RvciIsImZyZWVHbG9iYWwiLCJmcmVlU2VsZiIsInNlbGYiLCJyb290IiwiRnVuY3Rpb24iLCJ1aWQiLCJhcnJheVByb3RvIiwiZnVuY1Byb3RvIiwib2JqZWN0UHJvdG8iLCJjb3JlSnNEYXRhIiwibWFza1NyY0tleSIsIklFX1BST1RPIiwiZnVuY1RvU3RyaW5nIiwib2JqZWN0VG9TdHJpbmciLCJyZUlzTmF0aXZlIiwiZ2V0TmF0aXZlIiwibmF0aXZlQ3JlYXRlIiwiSGFzaCIsImVudHJ5IiwiTGlzdENhY2hlIiwiTWFwQ2FjaGUiLCJhc3NvY0luZGV4T2YiLCJlcSIsImJhc2VJc05hdGl2ZSIsImlzT2JqZWN0IiwiZnVuYyIsInRhZyIsImlzRnVuY3Rpb24iLCJpc0hvc3RPYmplY3QiLCJ0b1NvdXJjZSIsImdldE1hcERhdGEiLCJfX2RhdGFfXyIsIm9iamVjdCIsImdldFZhbHVlIiwibWVtb2l6ZSIsInJlc29sdmVyIiwibWVtb2l6ZWQiLCJjYWNoZSIsIm90aGVyIiwiVVJMIiwiRE5TIiwiaGFzaGZ1bmMiLCJnZW5lcmF0ZVVVSUQiLCJuYW1lc3BhY2UiLCJfbmFtZXNwYWNlIiwic3RyaW5nVG9CeXRlcyIsImNyZWF0ZUJ1ZmZlciIsInZhbCIsIlRleHRFbmNvZGVyIiwiZW5jb2RlIiwiTXVybXVySGFzaFYzIiwic2VlZCIsInJlbWFpbmRlciIsImgxIiwiaDFiIiwiYzEiLCJjMiIsImsxIiwibXVybXVyIiwidjIiLCJ2MyIsIl9FbnZpcm9ubWVudCIsIkFwb3BoZW5pYUxvZ2dlciIsInNlbmQiLCJldmVudE5hbWUiLCJmaWVsZHMiLCJwcmVwYXJlZFJlY29yZCIsIl9wcmVwYXJlUmVjb3JkIiwiY29uc29sZSIsIl9zZW5kVG9Mb2dTZXJ2aWNlIiwiX2VuZm9yY2VDb25maWciLCJhcHBJZCIsImxvZ1NlcnZpY2VVcmwiLCJsb2dBcGlLZXkiLCJhcGlLZXkiLCJyZWNvcmQiLCJhcHBfaWQiLCJ0aW1lIiwidG9JU09TdHJpbmciLCJmZXRjaCIsIm1ldGhvZCIsImtlZXBhbGl2ZSIsInByaW9yaXR5IiwiaGVhZGVycyIsInJlY29yZHMiLCJmaWVsZE5hbWVzIiwiZnVsbE5hbWUiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImVtYWlsIiwicGhvbmUiLCJhZGRyZXNzIiwiemlwY29kZSIsImNpdHkiLCJyYWRpbyIsImNoZWNrYm94Iiwic2VsZWN0IiwidGV4dGFyZWEiLCJ0ZXh0IiwidGFyZ2V0RmllbGQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZmluZCIsIm5vZGVOYW1lIiwidGhyb3ciLCJyZXR1cm4iLCJoYW5kbGVFcnJvciIsInY0IiwiZ2V0VGltZSIsImNoZWNrQXJyYXlFcXVhbGl0eSIsImN1cnJlbnRUaW1lc3RhbXAiLCJyb3VuZCIsImlzU2FmZUludGVnZXIiLCJhYnMiLCJrZXlCeSIsImlzTnVtYmVyIiwiZ2V0VGltZXN0YW1wIiwiaXNWYWxpZEVudW0iLCJncm91cEJ5Iiwib2JqZWN0VmFsdWVzIiwib2JqZWN0RW50cmllcyIsImtleUJ5VXRpbCIsIkxvZ0xldmVsIiwiTk9UU0VUIiwiREVCVUciLCJkZWZhdWx0TG9nZ2VyRmFjYWRlIiwibG9nZ2VycyIsIm1lc3NhZ2VQcmVmaXgiLCJsb2dMZXZlbCIsInNldExvZ0xldmVsIiwibG9nVG9Db25zb2xlIiwic2hvdWxkTG9nIiwiZ2V0TG9nTGV2ZWxOYW1lIiwiY29uc29sZUxvZyIsImludGVybmFsTG9nIiwibmFtZWRMb2ciLCJzZXRMb2dIYW5kbGVyIiwiYWNjb3VudElkIiwicHJvamVjdElkIiwiY2xpZW50TmFtZSIsInJldmlzaW9uIiwiYW5vbnltaXplSVAiLCJib3RGaWx0ZXJpbmciLCJlZSIsInRlIiwibWF4Iiwic3RhcnQiLCJyZWZyZXNoIiwic3RvcCIsInNpbmsiLCJlbnF1ZXVlIiwiZmx1c2hJbnRlcnZhbCIsIm1heFF1ZXVlU2l6ZSIsImNsb3NpbmdTaW5rIiwiYmF0Y2hDb21wYXJhdG9yIiwiYnVmZmVyIiwidGltZXIiLCJmbHVzaCIsInN0YXJ0ZWQiLCJCUk9XU0VSX09EUF9NQU5BR0VSX0lOSVRJQUxJWkFUSU9OX0ZBSUxFRCIsIkNPTkRJVElPTl9FVkFMVUFUT1JfRVJST1IiLCJEQVRBRklMRV9BTkRfU0RLX0tFWV9NSVNTSU5HIiwiRVhQRVJJTUVOVF9LRVlfTk9UX0lOX0RBVEFGSUxFIiwiRkVBVFVSRV9OT1RfSU5fREFUQUZJTEUiLCJGRVRDSF9TRUdNRU5UU19GQUlMRURfTkVUV09SS19FUlJPUiIsIkZFVENIX1NFR01FTlRTX0ZBSUxFRF9ERUNPREVfRVJST1IiLCJJTVBST1BFUkxZX0ZPUk1BVFRFRF9FWFBFUklNRU5UIiwiSU5WQUxJRF9BVFRSSUJVVEVTIiwiSU5WQUxJRF9CVUNLRVRJTkdfSUQiLCJJTlZBTElEX0RBVEFGSUxFIiwiSU5WQUxJRF9EQVRBRklMRV9NQUxGT1JNRUQiLCJJTlZBTElEX0NPTkZJRyIsIklOVkFMSURfSlNPTiIsIklOVkFMSURfRVJST1JfSEFORExFUiIsIklOVkFMSURfRVZFTlRfRElTUEFUQ0hFUiIsIklOVkFMSURfRVZFTlRfVEFHUyIsIklOVkFMSURfRVhQRVJJTUVOVF9LRVkiLCJJTlZBTElEX0VYUEVSSU1FTlRfSUQiLCJJTlZBTElEX0dST1VQX0lEIiwiSU5WQUxJRF9MT0dHRVIiLCJJTlZBTElEX1JPTExPVVRfSUQiLCJJTlZBTElEX1VTRVJfSUQiLCJJTlZBTElEX1VTRVJfUFJPRklMRV9TRVJWSUNFIiwiTE9DQUxfU1RPUkFHRV9ET0VTX05PVF9FWElTVCIsIk1JU1NJTkdfSU5URUdSQVRJT05fS0VZIiwiTk9fREFUQUZJTEVfU1BFQ0lGSUVEIiwiTk9fSlNPTl9QUk9WSURFRCIsIk5PX1ZBUklBVElPTl9GT1JfRVhQRVJJTUVOVF9LRVkiLCJPRFBfQ09ORklHX05PVF9BVkFJTEFCTEUiLCJPRFBfRVZFTlRfRkFJTEVEIiwiT0RQX0ZFVENIX1FVQUxJRklFRF9TRUdNRU5UU19TRUdNRU5UU19NQU5BR0VSX01JU1NJTkciLCJPRFBfSURFTlRJRllfRkFJTEVEX0VWRU5UX01BTkFHRVJfTUlTU0lORyIsIk9EUF9JTklUSUFMSVpBVElPTl9GQUlMRUQiLCJPRFBfSU5WQUxJRF9EQVRBIiwiT0RQX0VWRU5UX0ZBSUxFRF9PRFBfTUFOQUdFUl9NSVNTSU5HIiwiT0RQX0ZFVENIX1FVQUxJRklFRF9TRUdNRU5UU19GQUlMRURfT0RQX01BTkFHRVJfTUlTU0lORyIsIk9EUF9JREVOVElGWV9VU0VSX0ZBSUxFRF9PRFBfTUFOQUdFUl9NSVNTSU5HIiwiT0RQX0lERU5USUZZX1VTRVJfRkFJTEVEX1VTRVJfQ09OVEVYVF9JTklUSUFMSVpBVElPTiIsIk9EUF9NQU5BR0VSX1VQREFURV9TRVRUSU5HU19GQUlMRURfRVZFTlRfTUFOQUdFUl9NSVNTSU5HIiwiT0RQX01BTkFHRVJfVVBEQVRFX1NFVFRJTkdTX0ZBSUxFRF9TRUdNRU5UU19NQU5BR0VSX01JU1NJTkciLCJPRFBfTk9UX0VOQUJMRUQiLCJPRFBfTk9UX0lOVEVHUkFURUQiLCJPRFBfU0VORF9FVkVOVF9GQUlMRURfRVZFTlRfTUFOQUdFUl9NSVNTSU5HIiwiT0RQX1NFTkRfRVZFTlRfRkFJTEVEX1VJRF9NSVNTSU5HIiwiT0RQX1NFTkRfRVZFTlRfRkFJTEVEX1ZVSURfTUlTU0lORyIsIk9EUF9WVUlEX0lOSVRJQUxJWkFUSU9OX0ZBSUxFRCIsIk9EUF9WVUlEX1JFR0lTVFJBVElPTl9GQUlMRUQiLCJPRFBfVlVJRF9SRUdJU1RSQVRJT05fRkFJTEVEX0VWRU5UX01BTkFHRVJfTUlTU0lORyIsIlVOREVGSU5FRF9BVFRSSUJVVEUiLCJVTlJFQ09HTklaRURfQVRUUklCVVRFIiwiVU5BQkxFX1RPX0NBU1RfVkFMVUUiLCJVU0VSX05PVF9JTl9GT1JDRURfVkFSSUFUSU9OIiwiVVNFUl9QUk9GSUxFX0xPT0tVUF9FUlJPUiIsIlVTRVJfUFJPRklMRV9TQVZFX0VSUk9SIiwiVkFSSUFCTEVfS0VZX05PVF9JTl9EQVRBRklMRSIsIlZBUklBVElPTl9JRF9OT1RfSU5fREFUQUZJTEUiLCJWQVJJQVRJT05fSURfTk9UX0lOX0RBVEFGSUxFX05PX0VYUEVSSU1FTlQiLCJJTlZBTElEX0lOUFVUX0ZPUk1BVCIsIklOVkFMSURfREFUQUZJTEVfVkVSU0lPTiIsIklOVkFMSURfVkFSSUFUSU9OX0tFWSIsIkFDVElWQVRFX1VTRVIiLCJESVNQQVRDSF9DT05WRVJTSU9OX0VWRU5UIiwiRElTUEFUQ0hfSU1QUkVTU0lPTl9FVkVOVCIsIkRFUFJFQ0FURURfRVZFTlRfVkFMVUUiLCJFVkVOVF9LRVlfTk9UX0ZPVU5EIiwiRVhQRVJJTUVOVF9OT1RfUlVOTklORyIsIkZFQVRVUkVfRU5BQkxFRF9GT1JfVVNFUiIsIkZFQVRVUkVfTk9UX0VOQUJMRURfRk9SX1VTRVIiLCJGRUFUVVJFX0hBU19OT19FWFBFUklNRU5UUyIsIkZBSUxFRF9UT19QQVJTRV9WQUxVRSIsIkZBSUxFRF9UT19QQVJTRV9SRVZFTlVFIiwiRk9SQ0VEX0JVQ0tFVElOR19GQUlMRUQiLCJJTlZBTElEX09CSkVDVCIsIklOVkFMSURfQ0xJRU5UX0VOR0lORSIsIklOVkFMSURfREVGQVVMVF9ERUNJREVfT1BUSU9OUyIsIklOVkFMSURfREVDSURFX09QVElPTlMiLCJJTlZBTElEX1ZBUklBVElPTl9JRCIsIk5PVElGSUNBVElPTl9MSVNURU5FUl9FWENFUFRJT04iLCJOT19ST0xMT1VUX0VYSVNUUyIsIk5PVF9BQ1RJVkFUSU5HX1VTRVIiLCJOT1RfVFJBQ0tJTkdfVVNFUiIsIk9EUF9ESVNBQkxFRCIsIk9EUF9JREVOVElGWV9GQUlMRURfT0RQX0RJU0FCTEVEIiwiT0RQX0lERU5USUZZX0ZBSUxFRF9PRFBfTk9UX0lOVEVHUkFURUQiLCJPRFBfU0VORF9FVkVOVF9JREVOVElGSUVSX0NPTlZFUlNJT05fRkFJTEVEIiwiUEFSU0VEX1JFVkVOVUVfVkFMVUUiLCJQQVJTRURfTlVNRVJJQ19WQUxVRSIsIlJFVFVSTklOR19TVE9SRURfVkFSSUFUSU9OIiwiUk9MTE9VVF9IQVNfTk9fRVhQRVJJTUVOVFMiLCJTQVZFRF9WQVJJQVRJT04iLCJTQVZFRF9WQVJJQVRJT05fTk9UX0ZPVU5EIiwiU0hPVUxEX05PVF9ESVNQQVRDSF9BQ1RJVkFURSIsIlNLSVBQSU5HX0pTT05fVkFMSURBVElPTiIsIlRSQUNLX0VWRU5UIiwiVU5SRUNPR05JWkVEX0RFQ0lERV9PUFRJT04iLCJVU0VSX0FTU0lHTkVEX1RPX0VYUEVSSU1FTlRfQlVDS0VUIiwiVVNFUl9CVUNLRVRFRF9JTlRPX0VYUEVSSU1FTlRfSU5fR1JPVVAiLCJVU0VSX0JVQ0tFVEVEX0lOVE9fVEFSR0VUSU5HX1JVTEUiLCJVU0VSX0lOX0ZFQVRVUkVfRVhQRVJJTUVOVCIsIlVTRVJfSU5fUk9MTE9VVCIsIlVTRVJfTk9UX0JVQ0tFVEVEX0lOVE9fRVZFUllPTkVfVEFSR0VUSU5HX1JVTEUiLCJVU0VSX05PVF9CVUNLRVRFRF9JTlRPX0VYUEVSSU1FTlRfSU5fR1JPVVAiLCJVU0VSX05PVF9CVUNLRVRFRF9JTlRPX0FOWV9FWFBFUklNRU5UX0lOX0dST1VQIiwiVVNFUl9OT1RfQlVDS0VURURfSU5UT19UQVJHRVRJTkdfUlVMRSIsIlVTRVJfTk9UX0lOX0ZFQVRVUkVfRVhQRVJJTUVOVCIsIlVTRVJfTk9UX0lOX1JPTExPVVQiLCJVU0VSX0ZPUkNFRF9JTl9WQVJJQVRJT04iLCJVU0VSX01BUFBFRF9UT19GT1JDRURfVkFSSUFUSU9OIiwiVVNFUl9ET0VTTlRfTUVFVF9DT05ESVRJT05TX0ZPUl9UQVJHRVRJTkdfUlVMRSIsIlVTRVJfTUVFVFNfQ09ORElUSU9OU19GT1JfVEFSR0VUSU5HX1JVTEUiLCJVU0VSX0hBU19WQVJJQVRJT04iLCJVU0VSX0hBU19GT1JDRURfREVDSVNJT05fV0lUSF9SVUxFX1NQRUNJRklFRCIsIlVTRVJfSEFTX0ZPUkNFRF9ERUNJU0lPTl9XSVRIX05PX1JVTEVfU1BFQ0lGSUVEIiwiVVNFUl9IQVNfRk9SQ0VEX0RFQ0lTSU9OX1dJVEhfUlVMRV9TUEVDSUZJRURfQlVUX0lOVkFMSUQiLCJVU0VSX0hBU19GT1JDRURfREVDSVNJT05fV0lUSF9OT19SVUxFX1NQRUNJRklFRF9CVVRfSU5WQUxJRCIsIlVTRVJfSEFTX0ZPUkNFRF9WQVJJQVRJT04iLCJVU0VSX0hBU19OT19WQVJJQVRJT04iLCJVU0VSX0hBU19OT19GT1JDRURfVkFSSUFUSU9OIiwiVVNFUl9IQVNfTk9fRk9SQ0VEX1ZBUklBVElPTl9GT1JfRVhQRVJJTUVOVCIsIlVTRVJfTk9UX0lOX0FOWV9FWFBFUklNRU5UIiwiVVNFUl9OT1RfSU5fRVhQRVJJTUVOVCIsIlVTRVJfUkVDRUlWRURfREVGQVVMVF9WQVJJQUJMRV9WQUxVRSIsIkZFQVRVUkVfTk9UX0VOQUJMRURfUkVUVVJOX0RFRkFVTFRfVkFSSUFCTEVfVkFMVUUiLCJWQVJJQUJMRV9OT1RfVVNFRF9SRVRVUk5fREVGQVVMVF9WQVJJQUJMRV9WQUxVRSIsIlVTRVJfUkVDRUlWRURfVkFSSUFCTEVfVkFMVUUiLCJWQUxJRF9EQVRBRklMRSIsIlZBTElEX1VTRVJfUFJPRklMRV9TRVJWSUNFIiwiVkFSSUFUSU9OX1JFTU9WRURfRk9SX1VTRVIiLCJWQVJJQUJMRV9SRVFVRVNURURfV0lUSF9XUk9OR19UWVBFIiwiVkFMSURfQlVDS0VUSU5HX0lEIiwiQlVDS0VUSU5HX0lEX05PVF9TVFJJTkciLCJFVkFMVUFUSU5HX0FVRElFTkNFIiwiRVZBTFVBVElOR19BVURJRU5DRVNfQ09NQklORUQiLCJBVURJRU5DRV9FVkFMVUFUSU9OX1JFU1VMVCIsIkFVRElFTkNFX0VWQUxVQVRJT05fUkVTVUxUX0NPTUJJTkVEIiwiTUlTU0lOR19BVFRSSUJVVEVfVkFMVUUiLCJVTkVYUEVDVEVEX0NPTkRJVElPTl9WQUxVRSIsIlVORVhQRUNURURfVFlQRSIsIlVORVhQRUNURURfVFlQRV9OVUxMIiwiVU5LTk9XTl9DT05ESVRJT05fVFlQRSIsIlVOS05PV05fTUFUQ0hfVFlQRSIsIlVQREFURURfT1BUSU1JWkVMWV9DT05GSUciLCJPVVRfT0ZfQk9VTkRTIiwiVU5BQkxFX1RPX0FUVEFDSF9VTkxPQUQiLCJCT1RfRklMVEVSSU5HIiwiQlVDS0VUSU5HX0lEIiwiU1RJQ0tZX0JVQ0tFVElOR19LRVkiLCJVU0VSX0FHRU5UIiwiRk9SQ0VEX0RFQ0lTSU9OX05VTExfUlVMRV9LRVkiLCJBQl9URVNUIiwiRkVBVFVSRV9URVNUIiwiRkVBVFVSRV9WQVJJQUJMRSIsIkFMTF9GRUFUVVJFX1ZBUklBQkxFUyIsIkZMQUciLCJST0xMT1VUIiwiUlVMRSIsIkJPT0xFQU4iLCJET1VCTEUiLCJJTlRFR0VSIiwiU1RSSU5HIiwiVjIiLCJWMyIsIlY0IiwiU0RLX05PVF9SRUFEWSIsIkZMQUdfS0VZX0lOVkFMSUQiLCJWQVJJQUJMRV9WQUxVRV9JTlZBTElEIiwiQUNUSVZBVEUiLCJERUNJU0lPTiIsIkxPR19FVkVOVCIsIlRSQUNLIiwiVlVJRCIsIkZTX1VTRVJfSUQiLCJJREVOVElGSUVEIiwiSU5JVElBTElaRUQiLCJyZSIsIkVSUk9SX01FU1NBR0VTIiwiTE9HX01FU1NBR0VTIiwiQ09OVFJPTF9BVFRSSUJVVEVTIiwiSkFWQVNDUklQVF9DTElFTlRfRU5HSU5FIiwiTk9ERV9DTElFTlRfRU5HSU5FIiwiUkVBQ1RfQ0xJRU5UX0VOR0lORSIsIlJFQUNUX05BVElWRV9DTElFTlRfRU5HSU5FIiwiUkVBQ1RfTkFUSVZFX0pTX0NMSUVOVF9FTkdJTkUiLCJDTElFTlRfVkVSU0lPTiIsIkRFQ0lTSU9OX05PVElGSUNBVElPTl9UWVBFUyIsIkRFQ0lTSU9OX1NPVVJDRVMiLCJBVURJRU5DRV9FVkFMVUFUSU9OX1RZUEVTIiwiRkVBVFVSRV9WQVJJQUJMRV9UWVBFUyIsIkRBVEFGSUxFX1ZFUlNJT05TIiwiREVDSVNJT05fTUVTU0FHRVMiLCJSRVFVRVNUX1RJTUVPVVRfTVMiLCJSRVFVRVNUX1RJTUVPVVRfT0RQX1NFR01FTlRTX01TIiwiUkVRVUVTVF9USU1FT1VUX09EUF9FVkVOVFNfTVMiLCJPRFBfVVNFUl9LRVkiLCJGU19VU0VSX0lEX0FMSUFTIiwiT0RQX0RFRkFVTFRfRVZFTlRfVFlQRSIsIk9EUF9FVkVOVF9BQ1RJT04iLCJpZSIsIm5lIiwib2UiLCJtYXhWYWx1ZXMiLCJMU19LRVkiLCJnZXRNYXAiLCJyZW1vdmUiLCJ2YWx1ZXMiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiY2xlYW4iLCJ0aW1lc3RhbXAiLCJnZXRJdGVtIiwicGFyc2UiLCJzZSIsImFlIiwiZXZlbnREaXNwYXRjaGVyIiwic3RvcmUiLCJkaXNwYXRjaGVyIiwicmVxdWVzdCIsInNlbmRQZW5kaW5nRXZlbnRzIiwidWUiLCJzbmFwc2hvdHMiLCJ2aXNpdG9yX2lkIiwiZW50aXR5X2lkIiwiZW50aXR5SWQiLCJsYXllciIsInJ1bGVUeXBlIiwiY2FtcGFpZ25faWQiLCJleHBlcmltZW50X2lkIiwidmFyaWF0aW9uX2lkIiwibWV0YWRhdGEiLCJmbGFnX2tleSIsInJ1bGVfa2V5IiwicnVsZV90eXBlIiwidmFyaWF0aW9uX2tleSIsImV2ZW50cyIsInRhZ3MiLCJyZXZlbnVlIiwiY2xpZW50X25hbWUiLCJjbGllbnRfdmVyc2lvbiIsImFjY291bnRfaWQiLCJwcm9qZWN0X2lkIiwiYW5vbnltaXplX2lwIiwiZW5yaWNoX2RlY2lzaW9ucyIsInZpc2l0b3JzIiwibGUiLCJyZXFzSW5GbGlnaHRDb3VudCIsInJlcXNDb21wbGV0ZVJlc29sdmVycyIsInRyYWNrUmVxdWVzdCIsIm9uUmVxdWVzdHNDb21wbGV0ZSIsImNlIiwicGUiLCJjbG9zaW5nRGlzcGF0Y2hlciIsImJhdGNoU2l6ZSIsInJlcXVlc3RUcmFja2VyIiwidXJsIiwiaHR0cFZlcmIiLCJzZW5kTm90aWZpY2F0aW9ucyIsImRlIiwiZmUiLCJoZSIsIl9lIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwic2V0UmVxdWVzdEhlYWRlciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJJZSIsInZlIiwiQmxvYiIsInNlbmRCZWFjb24iLCJ5ZSIsIk9lIiwiUmUiLCJOb09wTG9nZ2VyIiwiY3JlYXRlTG9nZ2VyIiwiY3JlYXRlTm9PcExvZ2dlciIsIm1lIiwiZXJyb3JIYW5kbGVyIiwibm90aWZpY2F0aW9uTGlzdGVuZXJzIiwibGlzdGVuZXJJZCIsIkFlIiwiRGUiLCJTZSIsIkxlIiwiVWUiLCJPcHRpbWl6ZWx5U2VnbWVudE9wdGlvbiIsIklHTk9SRV9DQUNIRSIsIlJFU0VUX0NBQ0hFIiwiT3B0aW1pemVseURlY2lkZU9wdGlvbiIsIkRJU0FCTEVfREVDSVNJT05fRVZFTlQiLCJFTkFCTEVEX0ZMQUdTX09OTFkiLCJJR05PUkVfVVNFUl9QUk9GSUxFX1NFUlZJQ0UiLCJJTkNMVURFX1JFQVNPTlMiLCJFWENMVURFX1ZBUklBQkxFUyIsIkNlIiwiUGUiLCJiZSIsIk1lIiwiRmUiLCJlcnJvckNvdW50IiwiZ2V0RGVsYXkiLCJtaW4iLCJjb3VudEVycm9yIiwicmVzZXQiLCJ4ZSIsImdldE5vdGlmaWNhdGlvbkNlbnRlciIsIl9ub3RpZmljYXRpb25DZW50ZXJzIiwicmVtb3ZlTm90aWZpY2F0aW9uQ2VudGVyIiwia2UiLCJ3ZSIsIkdlIiwiQmUiLCJtYWtlR2V0UmVxdWVzdCIsInJlc3BvbnNlUHJvbWlzZSIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVGV4dCIsIm9udGltZW91dCIsImFib3J0IiwiVmUiLCJnZXRDb25maWdEZWZhdWx0cyIsImRhdGFmaWxlIiwidXBkYXRlSW50ZXJ2YWwiLCJ1cmxUZW1wbGF0ZSIsImN1c3RvbUhlYWRlcnMiLCJjYWNoZUtleSIsImlzUmVhZHlQcm9taXNlU2V0dGxlZCIsInJlYWR5UHJvbWlzZVJlc29sdmVyIiwicmVhZHlQcm9taXNlUmVqZWN0ZXIiLCJyZWFkeVByb21pc2UiLCJjdXJyZW50RGF0YWZpbGUiLCJyZXNvbHZlUmVhZHlQcm9taXNlIiwiaXNTdGFydGVkIiwiZGF0YWZpbGVVcmwiLCJlbWl0dGVyIiwiY3VycmVudFRpbWVvdXQiLCJjdXJyZW50UmVxdWVzdCIsImJhY2tvZmZDb250cm9sbGVyIiwic3luY09uQ3VycmVudFJlcXVlc3RDb21wbGV0ZSIsInNldERhdGFmaWxlRnJvbUNhY2hlSWZBdmFpbGFibGUiLCJzeW5jRGF0YWZpbGUiLCJvblJlcXVlc3RSZWplY3RlZCIsIm9uUmVxdWVzdFJlc29sdmVkIiwidHJ5U2F2aW5nTGFzdE1vZGlmaWVkIiwiZ2V0TmV4dERhdGFmaWxlRnJvbVJlc3BvbnNlIiwib25SZXF1ZXN0Q29tcGxldGUiLCJyZWplY3RSZWFkeVByb21pc2UiLCJsYXN0UmVzcG9uc2VMYXN0TW9kaWZpZWQiLCJzY2hlZHVsZU5leHRVcGRhdGUiLCJLZSIsImFwaUhvc3QiLCJwaXhlbFVybCIsInNlZ21lbnRzVG9DaGVjayIsImVxdWFscyIsImplIiwicWUiLCJleHBlcmltZW50c0lkcyIsImV4cGVyaW1lbnRJZHMiLCJhdWRpZW5jZXMiLCJleHBlcmltZW50cyIsImZlYXR1cmVGbGFncyIsImdyb3VwcyIsInJvbGxvdXRzIiwiZW52aXJvbm1lbnRLZXkiLCJfX2RhdGFmaWxlU3RyIiwiY29uZGl0aW9ucyIsImF1ZGllbmNlc0J5SWQiLCJ0eXBlZEF1ZGllbmNlcyIsImF0dHJpYnV0ZUtleU1hcCIsImV2ZW50S2V5TWFwIiwiZ3JvdXBJZE1hcCIsImdyb3VwSWQiLCJyb2xsb3V0SWRNYXAiLCJpc1JvbGxvdXQiLCJ2YXJpYXRpb25LZXlNYXAiLCJ2YXJpYXRpb25zIiwiSGUiLCJpbnRlZ3JhdGlvbnMiLCJpbnRlZ3JhdGlvbktleU1hcCIsInB1YmxpY0tleSIsIm9kcEludGVncmF0aW9uQ29uZmlnIiwiaW50ZWdyYXRlZCIsIm9kcENvbmZpZyIsImV4cGVyaW1lbnRLZXlNYXAiLCJleHBlcmltZW50SWRNYXAiLCJ2YXJpYXRpb25JZE1hcCIsInZhcmlhdGlvblZhcmlhYmxlVXNhZ2VNYXAiLCJleHBlcmltZW50RmVhdHVyZU1hcCIsImZlYXR1cmVLZXlNYXAiLCJzdWJUeXBlIiwidmFyaWFibGVLZXlNYXAiLCJmbGFnUnVsZXNNYXAiLCJyb2xsb3V0SWQiLCJmbGFnVmFyaWF0aW9uc01hcCIsInplIiwiWWUiLCJsYXllcklkIiwiWGUiLCJKZSIsIldlIiwiWmUiLCJRZSIsIiRlIiwidHJhZmZpY0FsbG9jYXRpb24iLCJldCIsInR0IiwicnQiLCJpdCIsIm50IiwiRWUiLCJjb25maWdPYmoiLCJqc29uU2NoZW1hVmFsaWRhdG9yIiwib3QiLCJzZW5kRmxhZ0RlY2lzaW9ucyIsInN0IiwiYXQiLCJtYWtlUmVxdWVzdCIsInNldEhlYWRlcnNJblhociIsIkRPTkUiLCJwYXJzZUhlYWRlcnNGcm9tWGhyIiwidXQiLCJicm93c2VyQ2FsbGJhY2siLCJub25Ccm93c2VyQ2FsbGJhY2siLCJsdCIsInJlbW92ZUl0ZW0iLCJjdCIsIl92YWx1ZSIsIl90aW1lIiwiaXNfc3RhbGUiLCJwdCIsIl9tYXAiLCJfdGltZW91dCIsImxvb2t1cCIsInNhdmUiLCJwZWVrIiwiZ3QiLCJJdCIsIl9rZXlGb3JWdWlkIiwiX3Z1aWQiLCJfaW5zdGFuY2UiLCJsb2FkIiwiaXNWdWlkIiwibWFrZVZ1aWQiLCJ2dWlkX3ByZWZpeCIsIl9yZXNldCIsIl90IiwidnQiLCJ5dCIsIk90IiwiUnVubmluZyIsIlN0b3BwZWQiLCJSdCIsIk50Iiwic2VnbWVudE1hbmFnZXIiLCJldmVudE1hbmFnZXIiLCJyZWFkeSIsImNvbmZpZ1Byb21pc2UiLCJwcm9taXNlIiwiaXNWdWlkRW5hYmxlZCIsImluaXRpYWxpemVWdWlkIiwiaW5pdFByb21pc2UiLCJyZWdpc3RlclZ1aWQiLCJ1cGRhdGVTZXR0aW5ncyIsImdldFN0YXR1cyIsImlkZW50aWZ5VXNlciIsInNlbmRFdmVudCIsIlR0IiwicmVxdWVzdEhhbmRsZXIiLCJzZW5kRXZlbnRzIiwic2hvdWxkU2VuZEV2ZW50cyIsImdlbmVyYXRlUmVxdWVzdERhdGEiLCJlbmRwb2ludCIsIm10IiwiZ2V0UGl4ZWxBcGlFbmRwb2ludCIsImhyZWYiLCJzZWFyY2hQYXJhbXMiLCJhcHBlbmQiLCJBdCIsInF1ZXVlTWljcm90YXNrIiwiRHQiLCJhcGlNYW5hZ2VyIiwicXVldWVTaXplIiwidXNlckFnZW50UGFyc2VyIiwicmV0cmllcyIsImluaXRQYXJhbXMiLCJwYXJzZVVzZXJBZ2VudEluZm8iLCJvc192ZXJzaW9uIiwiZGV2aWNlX3R5cGUiLCJtb2RlbCIsInByb2Nlc3NRdWV1ZSIsInNldE5ld1RpbWVvdXQiLCJjbGVhckN1cnJlbnRUaW1lb3V0IiwiYXVnbWVudENvbW1vbkRhdGEiLCJoYXNOZWNlc3NhcnlJZGVudGlmaWVycyIsInF1ZXVlQ29udGFpbnNJdGVtcyIsIm1ha2VBbmRTZW5kMUJhdGNoIiwicXVldWVIYXNCYXRjaGVzIiwiZ2V0UXVldWUiLCJTdCIsImRpc2NhcmRFdmVudHNJZk5lZWRlZCIsIkx0IiwiX3NlZ21lbnRzQ2FjaGUiLCJvZHBTZWdtZW50QXBpTWFuYWdlciIsIm1ha2VDYWNoZUtleSIsImZldGNoU2VnbWVudHMiLCJVdCIsInBvbGljeSIsImVuZE9mUmFuZ2UiLCJhdWRpZW5jZUlkcyIsImZvcmNlZFZhcmlhdGlvbnMiLCJDdCIsIiRpZCIsImN1c3RvbWVyIiwiZXhhbXBsZXMiLCJsb2NhdGlvbnMiLCJsaW5lIiwiY29sdW1uIiwiY2xhc3NpZmljYXRpb24iLCJQdCIsImJ0IiwidG9HcmFwaFFMSnNvbiIsInF1ZXJ5U2VnbWVudHMiLCJwYXJzZVNlZ21lbnRzUmVzcG9uc2VKc29uIiwiY29kZSIsIlZ0Iiwic2VnbWVudHNSZXF1ZXN0SGFuZGxlciIsInNlZ21lbnRzQXBpVGltZW91dCIsInNlZ21lbnRzQ2FjaGUiLCJzZWdtZW50c0NhY2hlU2l6ZSIsInNlZ21lbnRzQ2FjaGVUaW1lb3V0IiwiZXZlbnRSZXF1ZXN0SGFuZGxlciIsImV2ZW50QXBpVGltZW91dCIsImV2ZW50Rmx1c2hJbnRlcnZhbCIsImV2ZW50QmF0Y2hTaXplIiwiZXZlbnRRdWV1ZVNpemUiLCJ2dWlkIiwiTXQiLCJGdCIsInNob3VsZElkZW50aWZ5VXNlciIsIl9xdWFsaWZpZWRTZWdtZW50cyIsImZvcmNlZERlY2lzaW9uc01hcCIsImdldE9wdGltaXplbHkiLCJjbG9uZVVzZXJDb250ZXh0IiwidHJhY2tFdmVudCIsImZpbmRGb3JjZWREZWNpc2lvbiIsInF1YWxpZmllZFNlZ21lbnRzIiwiaXNRdWFsaWZpZWRGb3IiLCJ4dCIsImt0Iiwid3QiLCJnZXRBdWRpZW5jZXMiLCJnZXRWYXJpYWJsZUlkTWFwIiwiZ2V0RXhwZXJpbWVudHNNYXAiLCJleHBlcmltZW50c01hcEJ5SWQiLCJleHBlcmltZW50c01hcEJ5S2V5IiwiZXhwZXJpbWVudHNNYXAiLCJnZXRGZWF0dXJlc01hcCIsImdldERhdGFmaWxlIiwiZ2V0U2VyaWFsaXplZEF1ZGllbmNlcyIsImdldEV4cGVyaW1lbnRBdWRpZW5jZXMiLCJhdWRpZW5jZUNvbmRpdGlvbnMiLCJtZXJnZUZlYXR1cmVWYXJpYWJsZXMiLCJnZXRWYXJpYXRpb25zTWFwIiwiZmVhdHVyZUVuYWJsZWQiLCJnZXREZWxpdmVyeVJ1bGVzIiwidmFyaWF0aW9uc01hcCIsImdldFJvbGxvdXRFeHBlcmltZW50SWRzIiwiZ2V0RXhwZXJpbWVudHNLZXlNYXAiLCJleHBlcmltZW50UnVsZXMiLCJkZWxpdmVyeVJ1bGVzIiwiR3QiLCJCdCIsIkt0IiwidXBkYXRlTGlzdGVuZXJzIiwib3B0aW1pemVseUNvbmZpZ09iaiIsImRhdGFmaWxlTWFuYWdlciIsImhhbmRsZU5ld0RhdGFmaWxlIiwib25EYXRhZmlsZU1hbmFnZXJSZWFkeUZ1bGZpbGwiLCJvbkRhdGFmaWxlTWFuYWdlclJlYWR5UmVqZWN0Iiwib25EYXRhZmlsZU1hbmFnZXJVcGRhdGUiLCJnZXRDb25maWciLCJvblVwZGF0ZSIsImp0IiwicXQiLCJleHBlcmltZW50SWQiLCJIdCIsImJ1Y2tldGluZ0lkIiwiWXQiLCJ6dCIsInRyYWZmaWNBbGxvY2F0aW9uQ29uZmlnIiwiWHQiLCJKdCIsIld0IiwiWnQiLCJRdCIsIiR0IiwiZXIiLCJ0ciIsInJyIiwiaXIiLCJuciIsIm9yIiwic3IiLCJleGFjdCIsImV4aXN0cyIsImdlIiwic2VtdmVyX2VxIiwic2VtdmVyX2d0Iiwic2VtdmVyX2dlIiwic2VtdmVyX2x0Iiwic2VtdmVyX2xlIiwiZXZhbHVhdGUiLCJ1ciIsImxyIiwiY3IiLCJwciIsInF1YWxpZmllZCIsImRyIiwiZnIiLCJnciIsInR5cGVUb0V2YWx1YXRvck1hcCIsImN1c3RvbV9hdHRyaWJ1dGUiLCJ0aGlyZF9wYXJ0eV9kaW1lbnNpb24iLCJldmFsdWF0ZUNvbmRpdGlvbldpdGhVc2VyQXR0cmlidXRlcyIsIkVyIiwiaHIiLCJJciIsImF1ZGllbmNlRXZhbHVhdG9yIiwiVU5TVEFCTEVfY29uZGl0aW9uRXZhbHVhdG9ycyIsImZvcmNlZFZhcmlhdGlvbk1hcCIsInVzZXJQcm9maWxlU2VydmljZSIsImdldEJ1Y2tldGluZ0lkIiwiY2hlY2tJZkV4cGVyaW1lbnRJc0FjdGl2ZSIsImdldFdoaXRlbGlzdGVkVmFyaWF0aW9uIiwicmVzb2x2ZUV4cGVyaW1lbnRCdWNrZXRNYXAiLCJnZXRTdG9yZWRWYXJpYXRpb24iLCJjaGVja0lmVXNlcklzSW5BdWRpZW5jZSIsImJ1aWxkQnVja2V0ZXJQYXJhbXMiLCJzYXZlVXNlclByb2ZpbGUiLCJnZXRVc2VyUHJvZmlsZSIsImV4cGVyaW1lbnRfYnVja2V0X21hcCIsInVzZXJfaWQiLCJnZXRWYXJpYXRpb25Gb3JGZWF0dXJlIiwiZ2V0VmFyaWF0aW9uRm9yRmVhdHVyZUV4cGVyaW1lbnQiLCJnZXRWYXJpYXRpb25Gb3JSb2xsb3V0IiwiZ2V0VmFyaWF0aW9uRnJvbUV4cGVyaW1lbnRSdWxlIiwiZGVjaXNpb25Tb3VyY2UiLCJnZXRWYXJpYXRpb25Gcm9tRGVsaXZlcnlSdWxlIiwic2tpcFRvRXZlcnlvbmVFbHNlIiwiZmluZFZhbGlkYXRlZEZvcmNlZERlY2lzaW9uIiwicmVtb3ZlRm9yY2VkVmFyaWF0aW9uIiwic2V0SW5Gb3JjZWRWYXJpYXRpb25NYXAiLCJfciIsInRydW5jIiwiaXNGaW5pdGUiLCJ2ciIsInBhcnNlRmxvYXQiLCJ5ciIsIk9yIiwiUnIiLCJtciIsIkFyIiwiRHIiLCJTciIsIkxyIiwiVXIiLCJDciIsIlByIiwiYnIiLCJpc09wdGltaXplbHlDb25maWdWYWxpZCIsImlzVmFsaWRJbnN0YW5jZSIsIm9kcE1hbmFnZXIiLCJkZWZhdWx0RGVjaWRlT3B0aW9ucyIsInByb2plY3RDb25maWdNYW5hZ2VyIiwiZGlzcG9zZU9uVXBkYXRlIiwidXBkYXRlT2RwU2V0dGluZ3MiLCJkZWNpc2lvblNlcnZpY2UiLCJldmVudFByb2Nlc3NvciIsInJlYWR5VGltZW91dHMiLCJuZXh0UmVhZHlUaW1lb3V0SWQiLCJnZXRQcm9qZWN0Q29uZmlnIiwidmFsaWRhdGVJbnB1dHMiLCJleHBlcmltZW50X2tleSIsIm5vdEFjdGl2YXRpbmdFeHBlcmltZW50Iiwic2VuZEltcHJlc3Npb25FdmVudCIsImRlY2lzaW9uT2JqIiwiZW1pdE5vdGlmaWNhdGlvbkNlbnRlckFjdGl2YXRlIiwidmFyaWF0aW9uSWQiLCJOciIsImxvZ0V2ZW50IiwiZXZlbnRfa2V5IiwiZmlsdGVyRW1wdHlWYWx1ZXMiLCJlbWl0Tm90aWZpY2F0aW9uQ2VudGVyVHJhY2siLCJUciIsImNyZWF0ZUludGVybmFsVXNlckNvbnRleHQiLCJkZWNpc2lvbkluZm8iLCJmZWF0dXJlX2tleSIsInNvdXJjZSIsInNvdXJjZUluZm8iLCJnZXRGZWF0dXJlVmFyaWFibGVGb3JUeXBlIiwidmFyaWFibGVfa2V5IiwiZ2V0RmVhdHVyZVZhcmlhYmxlVmFsdWVGcm9tVmFyaWF0aW9uIiwidmFyaWFibGVWYWx1ZSIsInZhcmlhYmxlVHlwZSIsImlzTmFOIiwidmFyaWFibGVWYWx1ZXMiLCJyZWFkeVRpbWVvdXQiLCJvbkNsb3NlIiwiZ2V0QWxsRGVjaWRlT3B0aW9ucyIsImRlY2lzaW9uRXZlbnREaXNwYXRjaGVkIiwiVnIiLCJNciIsIkZyIiwieHIiLCJrciIsIndyIiwiY2xvc2luZ0V2ZW50RGlzcGF0Y2hlciIsIk5lIiwiVGUiLCJldmVudE1heFF1ZXVlU2l6ZSIsImRhdGFmaWxlT3B0aW9ucyIsIkdyIiwiQnIiLCJLciIsImpyIiwibG9nZ2luZyIsInNlbmRCZWFjb25FdmVudERpc3BhdGNoZXIiLCJzZXRMb2dnZXIiLCJfX2ludGVybmFsUmVzZXRSZXRyeVN0YXRlIiwiZ2V0VXNlckFnZW50UGFyc2VyIiwiX21kIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImFtZE8iLCJkZWZpbml0aW9uIiwiZ2xvYmFsVGhpcyIsInRvU3RyaW5nVGFnIiwiX19zb3VyY2UiLCJfX3NlbGYiLCJjcmVhdGVSb290IiwiY29udGFpbmVyIiwiQ29udGV4dCIsInJlZmVycmFsIiwidGltZXpvbmUiLCJ1c2VyX2FnZW50IiwiZmlyc3RfbmFtZSIsImxhc3RfbmFtZSIsInBvc3RhbF9jb2RlIiwiaW50ZXJlc3RzIiwidGF4X2ludGVudHMiLCJ0YXhfcXVlc3Rpb25zIiwidGF4X2FkdmljZSIsInRheF9oaXN0b3J5IiwiY29tcGxleGl0eV9jb25jZXJuIiwidGF4X2NvbmZpZGVuY2UiLCJpbXBvcnRhbmNlIiwibGVhZFNvdXJjZSIsInRheF9zaXR1YXRpb24iLCJwdXJwb3NlIiwidXBkYXRlUmVmZXJyYWwiLCJwaG9uZVZlcmlmaWNhdGlvbkNvdW50RG93biIsInVwZGF0ZVBob25lVmVyaWZpY2F0aW9uQ291bnREb3duIiwicHJvSW5mbyIsInBhcnRuZXJfdXJuIiwiY29udGFjdF9uYW1lIiwiY29tcGFueV9uYW1lIiwiYWNjb3VudF9rZXkiLCJ1cGRhdGVQcm9JbmZvIiwiaXNQcm9UcmFja2luZ1N0YXR1c2VzIiwic2V0SXNQcm9UcmFja2luZ1N0YXR1c2VzIiwidXNlUmVmZXJyYWxDb250ZXh0IiwiUmVmZXJyYWxDb250ZXh0UHJvdmlkZXIiLCJzZXRSZWZlcnJhbCIsInNldFByb0luZm8iLCJzZXRQaG9uZVZlcmlmaWNhdGlvbkNvdW50RG93biIsInN0YXJ0VGltZXIiLCJzZXRTdGFydFRpbWVyIiwidXBkYXRlIiwiY291bnREb3duIiwibXlJbnRlcnZhbCIsInNldEludGVydmFsIiwicHJldkNvdW50RG93biIsImNsZWFySW50ZXJ2YWwiLCJzdGFydFRpbWVyQ291bnRkb3duIiwicmVmZXJyYWxDb250ZXh0T2JqZWN0IiwiUmFuZ2VFcnJvciIsImdldFVuaXF1ZVNlc3Npb25Vc2VySWQiLCJzZXNzaW9uU3RvcmFnZSIsIlRheFNlcnZpY2VPcHRpb25zIiwiVGF4QWR2aWNlT3B0aW9ucyIsIlRheEludGVudE9wdGlvbnMiLCJWZXJpZmljYXRpb25TdGF0dXMiLCJQSFBlcnNvbmFsSW50ZW50T3B0aW9ucyIsIlBIVXJnZW5jeU9wdGlvbnMiLCJQSFRheElzc3VlT3B0aW9ucyIsIlBIQWR2aWNlT3B0aW9ucyIsIlBIU2VsZkVtcFNtYWxsQnVzSW50ZW50T3B0aW9ucyIsIlJFQ0FQVENIQV9LRVlTX1YzIiwiT1BUSU1JWkVMWV9LRVlTIiwiQVBPUEhFTklBX0tFWVMiLCJQQVVMSE9PRF9QQVJUTkVSX1VSTiIsIktOQVBQU19QQVJUTkVSX1VSTiIsIlBSSU1FX1BBUlRORVJfVVJOIiwicmVjYXB0Y2hhS2V5VjMiLCJhcG9waGVuaWFLZXkiLCJXQVJOIiwiZm9ybVRyYWNrZXIiLCJmaXJlT3B0aW1pemVseUV2ZW50IiwiZ2V0RG9tYWluIiwib3JpZ2luIiwiZ2V0U3ViZG9tYWluIiwiZG9tYWluIiwiY29udGFpbnNUZXN0T3JMb2NhbGhvc3QiLCJjb250YWluc1FBRG9tYWluIiwic3ViZG9tYWluIiwiZ2V0UmF3VGV4dCIsImVsZW1lbnRUb1N0cmluZyIsImVsZW1lbnQiLCJwcm9wU3RyIiwibmF2aWdhdGVUb1Jlc3VsdHNQYWdlIiwicmZpZCIsInBhcnRuZXJVcm4iLCJuYXRpb25hbFByb1F1ZXJ5UGFyYW0iLCJnZXROYXRpb25hbFByb1F1ZXJ5UGFyYW0iLCJQSE9ORV9WQUxJREFUSU9OX1JFR0VYIiwiYW5hbHl0aWNzX2V2ZW50X25hbWVzIiwiZm9ybV9uYW1lIiwiZmVhdHVyZV9uYW1lIiwic291cmNlX2VtYWlsX25hbWUiLCJwYWdlIiwiZ2V0TG9jYXRpb25QYXRoIiwiZ2V0QW5hbHl0aWNzIiwiZm9ybV90eXBlIiwicHJvZ3JhbSIsInN0ZXBfbGFiZWwiLCJzdGVwX25hbWUiLCJhbnN3ZXJfbGFiZWxzIiwiYW5zd2VyX3ZhbHVlcyIsIl9BUFBfQ09ORklHIiwic2VnbWVudEFuYWx5dGljcyIsInBhdGhuYW1lIiwiZ2V0RnVsbFVybCIsImdldFBhZ2VUaXRsZSIsImhhbmRsZVJlZmVycmFsUmVzcG9uc2UiLCJyZWZlcnJhbFJlc3BvbnNlIiwibG9jYWxGb3JtVHJhY2tlciIsInBlcnNvbmFsX3RheGVzIiwic21hbGxfYnVzaW5lc3MiLCJsb2dHQUV2ZW50cyIsInJlcXVlc3Rfa2V5IiwiZmFuIiwidHJ1c3RlZF9yZWZlcnJhbF9rZXkiLCJwYWdlX25hbWUiLCJ0cnVzdGVkX3Byb2dyYW0iLCJ0cmFja0Zvcm1TdWJtaXR0ZWQiLCJwaG9uZV9udW1iZXIiLCJUQVhfUkVGRVJSQUxfRk9STSIsIkZvcm1OYW1lT3B0aW9ucyIsIldpemFyZENvbnRleHQiLCJoZWFkZXIiLCJmb290ZXIiLCJvblN0ZXBDaGFuZ2UiLCJ3cmFwcGVyIiwiV3JhcHBlciIsInN0YXJ0SW5kZXgiLCJhY3RpdmVTdGVwIiwic2V0QWN0aXZlU3RlcCIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsImhhc05leHRTdGVwIiwiaGFzUHJldmlvdXNTdGVwIiwibmV4dFN0ZXBIYW5kbGVyIiwic3RlcENvdW50IiwiZ29Ub05leHRTdGVwIiwibmV3QWN0aXZlU3RlcEluZGV4IiwiZ29Ub1ByZXZpb3VzU3RlcCIsImdvVG9TdGVwIiwic3RlcEluZGV4IiwiaGFuZGxlU3RlcCIsImRvTmV4dFN0ZXAiLCJ3aXphcmRWYWx1ZSIsIm5leHRTdGVwIiwicHJldmlvdXNTdGVwIiwiaXNGaXJzdFN0ZXAiLCJpc0xhc3RTdGVwIiwiYWN0aXZlU3RlcENvbnRlbnQiLCJlbmhhbmNlZEFjdGl2ZVN0ZXBDb250ZW50IiwiYm9yZGVyIiwiQ2hlY2tib3hUaWxlSWNvbiIsImljb24iLCJpZFByb3AiLCJpbWFnZSIsInZlcnRpY2FsIiwicmVzdCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiX19yZXN0IiwiZGVmYXVsdElkUmVmIiwiY2hlY2tib3hUaWxlQ2xhc3NlcyIsImh0bWxGb3IiLCJmaWxsIiwiZm9jdXNhYmxlIiwiZ2V0SWNvblByb3BzIiwiaXNDaGVja0JveElucHV0IiwiaXNEYXRlT2JqZWN0IiwiaXNOdWxsT3JVbmRlZmluZWQiLCJpc09iamVjdFR5cGUiLCJnZXRFdmVudFZhbHVlIiwiY2hlY2tlZCIsImlzTmFtZUluRmllbGRBcnJheSIsIm5hbWVzIiwic2VhcmNoIiwiZ2V0Tm9kZVBhcmVudE5hbWUiLCJpc1dlYiIsIkhUTUxFbGVtZW50IiwiY2xvbmVPYmplY3QiLCJpc0ZpbGVMaXN0SW5zdGFuY2UiLCJGaWxlTGlzdCIsInRlbXBPYmplY3QiLCJwcm90b3R5cGVDb3B5IiwiaXNQbGFpbk9iamVjdCIsImNvcHkiLCJpc0tleSIsImlzVW5kZWZpbmVkIiwiY29tcGFjdCIsInN0cmluZ1RvUGF0aCIsImlzQm9vbGVhbiIsInRlbXBQYXRoIiwibGFzdEluZGV4IiwibmV3VmFsdWUiLCJvYmpWYWx1ZSIsIkVWRU5UUyIsIlZBTElEQVRJT05fTU9ERSIsIklOUFVUX1ZBTElEQVRJT05fUlVMRVMiLCJIb29rRm9ybUNvbnRyb2xDb250ZXh0IiwiZ2V0UHJveHlGb3JtU3RhdGUiLCJmb3JtU3RhdGUiLCJjb250cm9sIiwibG9jYWxQcm94eUZvcm1TdGF0ZSIsImlzUm9vdCIsImRlZmF1bHRWYWx1ZXMiLCJfZGVmYXVsdFZhbHVlcyIsIl9rZXkiLCJfcHJveHlGb3JtU3RhdGUiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwiaXNTdHJpbmciLCJnZW5lcmF0ZVdhdGNoT3V0cHV0IiwiX25hbWVzIiwiZm9ybVZhbHVlcyIsImlzR2xvYmFsIiwid2F0Y2giLCJmaWVsZE5hbWUiLCJ3YXRjaEFsbCIsImlzUHJpbWl0aXZlIiwiZGVlcEVxdWFsIiwib2JqZWN0MSIsIm9iamVjdDIiLCJfaW50ZXJuYWxfdmlzaXRlZCIsIldlYWtTZXQiLCJrZXlzMSIsImtleXMyIiwidmFsMSIsInZhbDIiLCJIb29rRm9ybUNvbnRleHQiLCJhcHBlbmRFcnJvcnMiLCJ2YWxpZGF0ZUFsbEZpZWxkQ3JpdGVyaWEiLCJ0eXBlcyIsImNvbnZlcnRUb0FycmF5UGF5bG9hZCIsImNyZWF0ZVN1YmplY3QiLCJfb2JzZXJ2ZXJzIiwidW5zdWJzY3JpYmUiLCJleHRyYWN0Rm9ybVZhbHVlcyIsImZpZWxkc1N0YXRlIiwiZmllbGRTdGF0ZSIsImZpZWxkVmFsdWUiLCJuZXN0ZWRGaWVsZHNTdGF0ZSIsImlzRW1wdHlPYmplY3QiLCJpc0ZpbGVJbnB1dCIsImlzSFRNTEVsZW1lbnQiLCJvd25lciIsIm93bmVyRG9jdW1lbnQiLCJkZWZhdWx0VmlldyIsImlzTXVsdGlwbGVTZWxlY3QiLCJpc1JhZGlvSW5wdXQiLCJsaXZlIiwiaXNDb25uZWN0ZWQiLCJ1bnNldCIsInBhdGhzIiwiY2hpbGRPYmplY3QiLCJ1cGRhdGVQYXRoIiwiYmFzZUdldCIsImlzRW1wdHlBcnJheSIsImlzVHJhdmVyc2FibGUiLCJvYmplY3RIYXNGdW5jdGlvbiIsIm1hcmtGaWVsZHNEaXJ0eSIsImdldERpcnR5RmllbGRzIiwiZGlydHlGaWVsZHNGcm9tVmFsdWVzIiwiZm9ybVZhbHVlIiwiZGVmYXVsdFJlc3VsdCIsImlzVmFsaWQiLCJ2YWxpZFJlc3VsdCIsImdldENoZWNrYm94VmFsdWUiLCJvcHRpb24iLCJnZXRGaWVsZFZhbHVlQXMiLCJ2YWx1ZUFzTnVtYmVyIiwidmFsdWVBc0RhdGUiLCJzZXRWYWx1ZUFzIiwiTmFOIiwiZGVmYXVsdFJldHVybiIsImdldFJhZGlvVmFsdWUiLCJwcmV2aW91cyIsImdldEZpZWxkVmFsdWUiLCJfZiIsImZpbGVzIiwicmVmcyIsInNlbGVjdGVkT3B0aW9ucyIsImlzUmVnZXgiLCJnZXRSdWxlVmFsdWUiLCJydWxlIiwiZ2V0VmFsaWRhdGlvbk1vZGVzIiwibW9kZSIsImlzT25TdWJtaXQiLCJpc09uQmx1ciIsImlzT25DaGFuZ2UiLCJpc09uQWxsIiwiaXNPblRvdWNoIiwiQVNZTkNfRlVOQ1RJT04iLCJoYXNQcm9taXNlVmFsaWRhdGlvbiIsImZpZWxkUmVmZXJlbmNlIiwidmFsaWRhdGVGdW5jdGlvbiIsImlzV2F0Y2hlZCIsImlzQmx1ckV2ZW50Iiwid2F0Y2hOYW1lIiwiaXRlcmF0ZUZpZWxkc0J5QWN0aW9uIiwiZmllbGRzTmFtZXMiLCJhYm9ydEVhcmx5IiwiY3VycmVudEZpZWxkIiwic2NoZW1hRXJyb3JMb29rdXAiLCJfZmllbGRzIiwiZm91bmRFcnJvciIsInVwZGF0ZUZpZWxkQXJyYXlSb290RXJyb3IiLCJmaWVsZEFycmF5RXJyb3JzIiwiZ2V0VmFsaWRhdGVFcnJvciIsImdldFZhbHVlQW5kTWVzc2FnZSIsInZhbGlkYXRpb25EYXRhIiwidmFsaWRhdGVGaWVsZCIsImRpc2FibGVkRmllbGROYW1lcyIsInNob3VsZFVzZU5hdGl2ZVZhbGlkYXRpb24iLCJpc0ZpZWxkQXJyYXkiLCJtb3VudCIsImlucHV0VmFsdWUiLCJpbnB1dFJlZiIsInNldEN1c3RvbVZhbGlkaXR5IiwicmVwb3J0VmFsaWRpdHkiLCJpc1JhZGlvIiwiaXNDaGVja0JveCIsImlzUmFkaW9PckNoZWNrYm94IiwiaXNFbXB0eSIsImFwcGVuZEVycm9yc0N1cnJ5IiwiZ2V0TWluTWF4TWVzc2FnZSIsImV4Y2VlZE1heCIsIm1heExlbmd0aE1lc3NhZ2UiLCJtaW5MZW5ndGhNZXNzYWdlIiwibWF4VHlwZSIsIm1pblR5cGUiLCJleGNlZWRNaW4iLCJtYXhPdXRwdXQiLCJtaW5PdXRwdXQiLCJ2YWx1ZURhdGUiLCJjb252ZXJ0VGltZVRvRGF0ZSIsInRvRGF0ZVN0cmluZyIsImlzVGltZSIsImlzV2VlayIsInZhbHVlTnVtYmVyIiwibWF4TGVuZ3RoT3V0cHV0IiwibWluTGVuZ3RoT3V0cHV0IiwicGF0dGVyblZhbHVlIiwidmFsaWRhdGVFcnJvciIsInZhbGlkYXRpb25SZXN1bHQiLCJkZWZhdWx0T3B0aW9ucyIsInJlVmFsaWRhdGVNb2RlIiwic2hvdWxkRm9jdXNFcnJvciIsImNyZWF0ZUZvcm1Db250cm9sIiwiZGVsYXlFcnJvckNhbGxiYWNrIiwiX29wdGlvbnMiLCJfZm9ybVN0YXRlIiwic3VibWl0Q291bnQiLCJpc0RpcnR5IiwiaXNWYWxpZGF0aW5nIiwiaXNTdWJtaXR0ZWQiLCJpc1N1Ym1pdHRpbmciLCJpc1N1Ym1pdFN1Y2Nlc3NmdWwiLCJ0b3VjaGVkRmllbGRzIiwiZGlydHlGaWVsZHMiLCJ2YWxpZGF0aW5nRmllbGRzIiwiX2Zvcm1WYWx1ZXMiLCJzaG91bGRVbnJlZ2lzdGVyIiwiX3N0YXRlIiwia2VlcElzVmFsaWQiLCJ1bk1vdW50IiwiZGVmYXVsdFByb3h5Rm9ybVN0YXRlIiwiX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlIiwiX3N1YmplY3RzIiwic2hvdWxkRGlzcGxheUFsbEFzc29jaWF0ZWRFcnJvcnMiLCJjcml0ZXJpYU1vZGUiLCJfc2V0VmFsaWQiLCJzaG91bGRVcGRhdGVWYWxpZCIsIl9ydW5TY2hlbWEiLCJfdXBkYXRlSXNWYWxpZGF0aW5nIiwiZXhlY3V0ZUJ1aWx0SW5WYWxpZGF0aW9uIiwidXBkYXRlVmFsaWRBbmRWYWx1ZSIsInNob3VsZFNraXBTZXRWYWx1ZUFzIiwiZGVmYXVsdENoZWNrZWQiLCJzZXRGaWVsZFZhbHVlIiwidXBkYXRlVG91Y2hBbmREaXJ0eSIsInNob3VsZERpcnR5Iiwic2hvdWxkUmVuZGVyIiwic2hvdWxkVXBkYXRlRmllbGQiLCJpc1ByZXZpb3VzRGlydHkiLCJfZ2V0RGlydHkiLCJpc0N1cnJlbnRGaWVsZFByaXN0aW5lIiwiaXNQcmV2aW91c0ZpZWxkVG91Y2hlZCIsInNob3VsZFJlbmRlckJ5RXJyb3IiLCJwcmV2aW91c0ZpZWxkRXJyb3IiLCJkZWxheUVycm9yIiwidXBkYXRlRXJyb3JzIiwid2FpdCIsInVwZGF0ZWRGb3JtU3RhdGUiLCJnZXRSZXNvbHZlck9wdGlvbnMiLCJzaG91bGRPbmx5Q2hlY2tWYWxpZCIsImlzRmllbGRBcnJheVJvb3QiLCJpc1Byb21pc2VGdW5jdGlvbiIsImZpZWxkRXJyb3IiLCJnZXRWYWx1ZXMiLCJfZ2V0V2F0Y2giLCJvcHRpb25SZWYiLCJjaGVja2JveFJlZiIsInJhZGlvUmVmIiwic2hvdWxkVG91Y2giLCJzaG91bGRWYWxpZGF0ZSIsInRyaWdnZXIiLCJzZXRWYWx1ZXMiLCJmaWVsZEtleSIsInNldFZhbHVlIiwiY2xvbmVWYWx1ZSIsIm9uQ2hhbmdlIiwiaXNGaWVsZFZhbHVlVXBkYXRlZCIsIl91cGRhdGVJc0ZpZWxkVmFsdWVVcGRhdGVkIiwidmFsaWRhdGlvbk1vZGVCZWZvcmVTdWJtaXQiLCJ2YWxpZGF0aW9uTW9kZUFmdGVyU3VibWl0Iiwic2hvdWxkU2tpcFZhbGlkYXRpb24iLCJkZXBzIiwiaXNUb3VjaGVkIiwic2tpcFZhbGlkYXRpb24iLCJ3YXRjaGVkIiwicmVhZE9ubHkiLCJvbkJsdXIiLCJwcmV2aW91c0Vycm9yTG9va3VwUmVzdWx0IiwiZXJyb3JMb29rdXBSZXN1bHQiLCJfZm9jdXNJbnB1dCIsImZvY3VzIiwiZXhlY3V0ZVNjaGVtYUFuZFVwZGF0ZVN0YXRlIiwic2hvdWxkRm9jdXMiLCJnZXRGaWVsZFN0YXRlIiwiaW52YWxpZCIsInNldEVycm9yIiwiY3VycmVudEVycm9yIiwiY3VycmVudFJlZiIsInJlc3RPZkVycm9yVHJlZSIsIl9zdWJzY3JpYmUiLCJzaWduYWxOYW1lIiwiY3VycmVudE5hbWUiLCJmb3JtU3RhdGVEYXRhIiwidXBkYXRlRm9ybVN0YXRlIiwic2hvdWxkUmVuZGVyRm9ybVN0YXRlIiwiX3NldEZvcm1TdGF0ZSIsInJlUmVuZGVyUm9vdCIsInVucmVnaXN0ZXIiLCJrZWVwVmFsdWUiLCJrZWVwRXJyb3IiLCJrZWVwRGlydHkiLCJrZWVwVG91Y2hlZCIsImtlZXBJc1ZhbGlkYXRpbmciLCJrZWVwRGVmYXVsdFZhbHVlIiwiX3NldERpc2FibGVkRmllbGQiLCJkaXNhYmxlZFN0YXRlQ2hhbmdlZCIsInJlZ2lzdGVyIiwiZGlzYWJsZWRJc0RlZmluZWQiLCJwcm9ncmVzc2l2ZSIsImZpZWxkUmVmIiwicmFkaW9PckNoZWNrYm94IiwiX2ZvY3VzRXJyb3IiLCJoYW5kbGVTdWJtaXQiLCJvblZhbGlkIiwib25JbnZhbGlkIiwib25WYWxpZEVycm9yIiwicHJldmVudERlZmF1bHQiLCJmaWVsZFZhbHVlcyIsImtlZXBTdGF0ZU9wdGlvbnMiLCJ1cGRhdGVkVmFsdWVzIiwiY2xvbmVVcGRhdGVkVmFsdWVzIiwiaXNFbXB0eVJlc2V0VmFsdWVzIiwia2VlcERlZmF1bHRWYWx1ZXMiLCJrZWVwVmFsdWVzIiwia2VlcERpcnR5VmFsdWVzIiwiZmllbGRzVG9DaGVjayIsImV4aXN0aW5nVmFsdWUiLCJmb3JtIiwiY2xvc2VzdCIsImtlZXBGaWVsZHNSZWYiLCJrZWVwRXJyb3JzIiwia2VlcFN1Ym1pdENvdW50Iiwia2VlcElzU3VibWl0dGVkIiwia2VlcElzU3VibWl0U3VjY2Vzc2Z1bCIsInJlc2V0T3B0aW9ucyIsIm1ldGhvZHMiLCJfc2V0RmllbGRBcnJheSIsInNob3VsZFNldFZhbHVlcyIsInNob3VsZFVwZGF0ZUZpZWxkc0FuZFN0YXRlIiwiYXJnQSIsImFyZ0IiLCJ1bnNldEVtcHR5QXJyYXkiLCJfc2V0RXJyb3JzIiwiX2dldEZpZWxkQXJyYXkiLCJfcmVzZXREZWZhdWx0VmFsdWVzIiwiX3JlbW92ZVVubW91bnRlZCIsIl9kaXNhYmxlRm9ybSIsInBheWxvYWQiLCJyZXNldEZpZWxkIiwiY2xlYXJFcnJvcnMiLCJpbnB1dE5hbWUiLCJzZXRGb2N1cyIsInNob3VsZFNlbGVjdCIsImZvcm1Db250cm9sIiwiX2Zvcm1Db250cm9sIiwicmF3IiwiaW5uZXIiLCJlcnJvclRvU3RyaW5nIiwicmVnRXhwVG9TdHJpbmciLCJzeW1ib2xUb1N0cmluZyIsIlNZTUJPTF9SRUdFWFAiLCJwcmludFNpbXBsZVZhbHVlIiwicXVvdGVTdHJpbmdzIiwicHJpbnROdW1iZXIiLCJwcmludFZhbHVlIiwiX1N5bWJvbCR0b1N0cmluZ1RhZyIsIl9TeW1ib2wkaGFzSW5zdGFuY2UiLCJfU3ltYm9sJHRvU3RyaW5nVGFnMiIsInN0clJlZyIsIlZhbGlkYXRpb25FcnJvck5vU3RhY2siLCJlcnJvck9yRXJyb3JzIiwiVmFsaWRhdGlvbkVycm9yIiwiaXNFcnJvciIsImlubmVyRXJyb3JzIiwiaGFzSW5zdGFuY2UiLCJmb3JtYXRFcnJvciIsIm9yaWdpbmFsUGF0aCIsImRpc2FibGVTdGFjayIsImVycm9yTm9TdGFjayIsInN1cGVyIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJpbnN0IiwibWl4ZWQiLCJkZWZpbmVkIiwibm90TnVsbCIsIm9uZU9mIiwibm90T25lT2YiLCJub3RUeXBlIiwib3JpZ2luYWxWYWx1ZSIsImNhc3RNc2ciLCJzdHJpbmciLCJkYXRldGltZSIsImRhdGV0aW1lX3ByZWNpc2lvbiIsImRhdGV0aW1lX29mZnNldCIsImxvd2VyY2FzZSIsInVwcGVyY2FzZSIsIm51bWJlciIsImxlc3NUaGFuIiwibW9yZVRoYW4iLCJwb3NpdGl2ZSIsIm5lZ2F0aXZlIiwiaW50ZWdlciIsImRhdGUiLCJpc1ZhbHVlIiwibm9Vbmtub3duIiwidHVwbGUiLCJzcGVjIiwidHlwZUxlbiIsImJvb2xlYW4iLCJpc1NjaGVtYSIsIl9faXNZdXBTY2hlbWFfXyIsIkNvbmRpdGlvbiIsImZyb21PcHRpb25zIiwib3RoZXJ3aXNlIiwiY2hlY2siLCJfYnJhbmNoIiwiYnJhbmNoIiwiYnVpbGRlciIsInBhcmVudCIsInByZWZpeGVzIiwiUmVmZXJlbmNlIiwiaXNDb250ZXh0IiwiaXNTaWJsaW5nIiwiY2FzdCIsImRlc2NyaWJlIiwiaXNSZWYiLCJfX2lzWXVwUmVmIiwiaXNBYnNlbnQiLCJjcmVhdGVWYWxpZGF0aW9uIiwicGFuaWMiLCJza2lwQWJzZW50IiwiZGlzYWJsZVN0YWNrVHJhY2UiLCJyZXNvbHZlT3B0aW9ucyIsImNyZWF0ZUVycm9yIiwibmV4dFBhcmFtcyIsInJlc29sdmVQYXJhbXMiLCJjdHgiLCJpdGVtIiwicmVzb2x2ZU1heWJlUmVmIiwiaGFuZGxlUmVzdWx0IiwidmFsaWRPckVycm9yIiwiX3Jlc3VsdCIsInN5bmMiLCJPUFRJT05TIiwiZ2V0SW4iLCJsYXN0UGFydCIsImxhc3RQYXJ0RGVidWciLCJfcGFydCIsImlzVHVwbGUiLCJpbm5lclR5cGUiLCJwYXJlbnRQYXRoIiwiUmVmZXJlbmNlU2V0IiwiZGVzY3JpcHRpb24iLCJyZXNvbHZlQWxsIiwiY2xvbmUiLCJtZXJnZSIsIm5ld0l0ZW1zIiwicmVtb3ZlSXRlbXMiLCJzZWVuIiwiY3JlYXRlU3RhbmRhcmRQYXRoIiwiY3VycmVudFNlZ21lbnQiLCJpbkJyYWNrZXRzIiwiaW5RdW90ZXMiLCJjaGFyIiwiaXNzdWVzRnJvbVZhbGlkYXRpb25FcnJvciIsIl9lcnJvciRpbm5lciIsImNyZWF0ZVN0YW5kYXJkSXNzdWVzIiwiZmxhdE1hcCIsIlNjaGVtYSIsInRlc3RzIiwidHJhbnNmb3JtcyIsIl9tdXRhdGUiLCJpbnRlcm5hbFRlc3RzIiwiX3doaXRlbGlzdCIsIl9ibGFja2xpc3QiLCJleGNsdXNpdmVUZXN0cyIsIl90eXBlQ2hlY2siLCJ3aXRoTXV0YXRpb24iLCJ0eXBlRXJyb3IiLCJzdHJpcCIsInN0cmljdCIsInJlY3Vyc2l2ZSIsIm51bGxhYmxlIiwib3B0aW9uYWwiLCJub25OdWxsYWJsZSIsIl90eXBlIiwibWV0YSIsImJlZm9yZSIsImNvbWJpbmVkIiwibWVyZ2VkU3BlYyIsImlzVHlwZSIsInByZXZTY2hlbWEiLCJjb25kaXRpb24iLCJfb3B0aW9ucyRzdHJpY3QiLCJfb3B0aW9ucyRhYm9ydEVhcmx5IiwiX29wdGlvbnMkcmVjdXJzaXZlIiwiX29wdGlvbnMkZGlzYWJsZVN0YWNrIiwicmVzb2x2ZWRTY2hlbWEiLCJhbGxvd09wdGlvbmFsaXR5IiwiYXNzZXJ0IiwiX2Nhc3QiLCJmb3JtYXR0ZWRWYWx1ZSIsImZvcm1hdHRlZFJlc3VsdCIsInJhd1ZhbHVlIiwicHJldlZhbHVlIiwiZ2V0RGVmYXVsdCIsImluaXRpYWxUZXN0cyIsInJ1blRlc3RzIiwiaW5pdGlhbEVycm9ycyIsInJ1bk9wdGlvbnMiLCJmaXJlZCIsInBhbmljT25jZSIsIm5leHRPbmNlIiwibmVzdGVkRXJyb3JzIiwiYXNOZXN0ZWRUZXN0Iiwib3JpZ2luYWxQYXJlbnQiLCJpc0luZGV4IiwidGVzdE9wdGlvbnMiLCJfb3B0aW9ucyRkaXNhYmxlU3RhY2syIiwicGFyc2VkIiwidmFsaWRhdGVkIiwidmFsaWRhdGVTeW5jIiwiX29wdGlvbnMkZGlzYWJsZVN0YWNrMyIsImlzVmFsaWRTeW5jIiwiX2dldERlZmF1bHQiLCJkZWYiLCJpc1N0cmljdCIsIm51bGxhYmlsaXR5Iiwib3B0aW9uYWxpdHkiLCJub3RSZXF1aXJlZCIsInRyYW5zZm9ybSIsIm9wdHMiLCJpc0V4Y2x1c2l2ZSIsImV4Y2x1c2l2ZSIsIndoZW4iLCJkZXAiLCJ3aGl0ZUxpc3QiLCJ2YWxpZHMiLCJyZXNvbHZlZCIsImludmFsaWRzIiwibGlzdCIsInZlbmRvciIsImlzc3VlcyIsImFsaWFzIiwicmV0dXJuc1RydWUiLCJNaXhlZFNjaGVtYSIsImNyZWF0ZSQ3IiwiQm9vbGVhblNjaGVtYSIsInZhbHVlT2YiLCJfcmF3IiwiaXNUcnVlIiwiaXNGYWxzZSIsImlzb1JlZyIsInBhcnNlRGF0ZVN0cnVjdCIsIl9yZWdleFJlc3VsdCQ3JGxlbmd0aCIsIl9yZWdleFJlc3VsdCQiLCJyZWdleFJlc3VsdCIsInllYXIiLCJ0b051bWJlciIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwicHJlY2lzaW9uIiwicGx1c01pbnVzIiwiaG91ck9mZnNldCIsIm1pbnV0ZU9mZnNldCIsInJFbWFpbCIsInJVcmwiLCJyVVVJRCIsInJJc29EYXRlVGltZSIsImlzVHJpbW1lZCIsIm9ialN0cmluZ1RhZyIsImNyZWF0ZSQ2IiwiU3RyaW5nU2NoZW1hIiwic3RyVmFsdWUiLCJleGNsdWRlRW1wdHlTdHJpbmciLCJhbGxvd09mZnNldCIsInN0cnVjdCIsImVuc3VyZSIsIk51bWJlclNjaGVtYSIsImlzTmFOJDEiLCJsZXNzIiwibW9yZSIsImlzSW50ZWdlciIsInRydW5jYXRlIiwiX21ldGhvZCIsImF2YWlsIiwiaW52YWxpZERhdGUiLCJjcmVhdGUkNCIsIkRhdGVTY2hlbWEiLCJ0b3RhbE1pbnV0ZXNPZmZzZXQiLCJVVEMiLCJwYXJzZUlzb0RhdGUiLCJJTlZBTElEX0RBVEUiLCJwcmVwYXJlUGFyYW0iLCJwYXJhbSIsImxpbWl0IiwiSW5maW5pdHkiLCJpaSIsIl9lcnIkcGF0aCIsInNvcnRCeUtleU9yZGVyIiwicGFyc2VKc29uIiwiZGVlcFBhcnRpYWwiLCJwYXJ0aWFsIiwiZmllbGRTY2hlbWEiLCJzZXRGaWVsZHMiLCJuZXh0QXJyYXkiLCJ1bmtub3duIiwia25vd24iLCJkZWZhdWx0U29ydCIsImNyZWF0ZSQzIiwiT2JqZWN0U2NoZW1hIiwiX3NvcnRFcnJvcnMiLCJfbm9kZXMiLCJfZXhjbHVkZWRFZGdlcyIsInNoYXBlIiwiX29wdGlvbnMkc3RyaXBVbmtub3duIiwic3RyaXBVbmtub3duIiwiaW50ZXJtZWRpYXRlVmFsdWUiLCJpbm5lck9wdGlvbnMiLCJfX3ZhbGlkYXRpbmciLCJpc0NoYW5nZWQiLCJmaWVsZFNwZWMiLCJvYmplY3RFcnJvcnMiLCJmaWVsZEVycm9ycyIsIm5leHRGaWVsZHMiLCJzY2hlbWFPclJlZiIsImRmdCIsIl9pbm5lck9wdGlvbnMiLCJleGNsdWRlZEVkZ2VzIiwiZXhjbHVkZXMiLCJhZGROb2RlIiwiZGVwUGF0aCIsInNvcnRGaWVsZHMiLCJhZGRpdGlvbnMiLCJwaWNrIiwicGlja2VkIiwib21pdCIsInJlbWFpbmluZyIsImZyb21HZXR0ZXIiLCJuZXdPYmoiLCJsYXN0IiwiZGVlcEhhcyIsImpzb24iLCJ1bmtub3duS2V5cyIsIm5vQWxsb3ciLCJhbGxvdyIsInRyYW5zZm9ybUtleXMiLCJjb25zdGFudENhc2UiLCJfaW5uZXJPcHRpb25zMiIsIkFycmF5U2NoZW1hIiwiX29wdHMiLCJjYXN0QXJyYXkiLCJjYXN0RWxlbWVudCIsImFycmF5RXJyb3JzIiwiX29wdGlvbnMkb3JpZ2luYWxWYWx1MiIsIl9vcHRpb25zJG9yaWdpbmFsVmFsdSIsImlubmVyVHlwZUVycm9ycyIsIm9mIiwib3JpZ2luYWwiLCJyZWplY3RvciIsIlR1cGxlU2NoZW1hIiwic2NoZW1hcyIsIml0ZW1UeXBlcyIsInR1cGxlRXJyb3JzIiwiaXRlbVNjaGVtYSIsImdlbmVyaWNDaGVja2JveFNjaGVtYSIsIndpbmRvd1NpemUiLCJzZXRXaW5kb3dTaXplIiwid2lkdGgiLCJpbm5lcldpZHRoIiwiaGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJoYW5kbGVSZXNpemUiLCJ1c2VHQUZvcm1UcmFja2luZyIsImZvcm1SZWYiLCJjb2xvciIsImhhc0JvcmRlciIsInBhZGRpbmciLCJib3hDbGFzc2VzIiwiYW5pbWF0ZU9uTG9hZCIsImlzT25EYXJrQ2FudmFzIiwic3F1YXJlZCIsInByb2dyZXNzQmFyQ2xhc3NlcyIsInJvbGUiLCJJY29uIiwiaWNvbkNsYXNzZXMiLCJhY2Nlc3NpYmlsaXR5UHJvcHMiLCJDaGV2cm9uTGVmdEljb24iLCJ4bWxucyIsInZpZXdCb3giLCJmaWxsUnVsZSIsImRhdGFUZXN0SUQiLCJvbkNsaWNrIiwiU3RlcFdyYXBwZXIiLCJQcm9jZXNzaW5nSWNvbiIsImljb25Pbmx5IiwiaWNvblBvc2l0aW9uIiwiYnV0dG9uU2l6ZSIsImljb25TaXplIiwiYXBwZWFyYW5jZSIsImFyaWFMYWJlbCIsImZ1bGxXaWR0aE9uTW9iaWxlIiwiQnV0dG9uSWNvbiIsIl9nIiwiX2giLCJfaiIsImxvYWRpbmciLCJfayIsImlzTGluayIsImJ1dHRvbkNsYXNzZXMiLCJNeUJ1dHRvbkljb24iLCJ2YWxpZGF0ZUFjY2Vzc2liaWxpdHkiLCJnZXRDb25kaXRpb25hbFByb3BzIiwiUmVzdWJtaXRCdXR0b24iLCJyZXNlbmRCdXR0b25UZXh0IiwicmVzZW5kaW5nQ29kZSIsImdldFJlc2VuZEJ1dHRvblRleHQiLCJTdWJtaXRCdXR0b24iLCJzdWJtaXRCdXR0b25UZXh0IiwidmVyaWZ5aW5nQ29kZSIsInN1Ym1pdHRpbmdSZWZlcnJhbCIsImdldFN1Ym1pdEJ1dHRvblRleHQiLCJBcnJvd1JpZ2h0SWNvbiIsIkVycm9yVGV4dCIsImVycm9yVGV4dCIsImdldE9iamVjdFZhbHVlIiwiZW50cnlWYWx1ZSIsImV4dHJhY3RHZW5lcmljQ2hlY2tib3hTdGVwRmllbGRzRnJvbVJlZmVycmFsIiwiY2hlY2tib3hPcHRpb25zIiwicmVmZXJyYWxGaWVsZE5hbWUiLCJmb3VuZENoZWNrYm94ZXNBcnJheUZyb21SZWZlcnJhbCIsIkdlbmVyaWNDaGVja2JveFN0ZXAiLCJzdWJ0aXRsZSIsImJhc2VTaGFwZUVycm9yIiwiZ2V0U2VsZWN0aW9uSXNSZXF1aXJlZEVycm9yVGV4dCIsIm9uU3VibWl0IiwiYW5zd2VycyIsImlzQ2hlY2tlZCIsImFuc3dlciIsImdldENoZWNrYm94QW5zd2VycyIsInJlcGxhY2VBbGwiLCJBZHZpY2VTdGVwIiwiQ2hldnJvblJpZ2h0SWNvbiIsIkFkdmljZUVkdWNhdGlvblN0ZXAiLCJ0YXhBZHZpY2UiLCJhbHQiLCJ3aXRoaG9sZGluZ19hZGp1c3RtZW50IiwicmVhbF9lc3RhdGVfdGF4ZXMiLCJpbmhlcml0YW5jZV9vcl9lc3RhdGVfdGF4ZXMiLCJidWlsZFN0eWxlcyIsImF1dG9Hcm93Iiwic3R5bGVPYmoiLCJyZXNpemUiLCJUZXh0YXJlYSIsImNvdW50ZXJJZCIsInNob3dDb3VudGVyIiwidGV4dGFyZWFDbGFzc2VzIiwidGV4dGFyZWFSZWYiLCJjb3VudGVyIiwic2V0Q291bnRlciIsImNvdW50ZXJJZFJlZiIsInNldEhlaWdodCIsImJvcmRlcldpZHRoIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFByb3BlcnR5VmFsdWUiLCJyb3VuZGVkQm9yZGVyV2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJjYWxjSGVpZ2h0IiwiY3VycmVudENoYXJhY3RlckNvdW50IiwiRm9ybUZpZWxkIiwiZ3JvdXAiLCJoZWxwZXIiLCJub3RlIiwiYXJpYURlc2NyaWJlZGJ5IiwiZ2V0T3B0aW9ucyIsImZvcm1GaWVsZENsYXNzZXMiLCJmb3JtRmllbGRDb250cm9sQ2xhc3NlcyIsIkxhYmVsRWxlbWVudCIsInNob3dFcnJvcnMiLCJnZXRDb25kaXRpb25hbExhYmVsUHJvcHMiLCJmb3JiaWRkZW5QYXR0ZXJucyIsInNlbnNpdGl2ZURhdGFWYWxpZGF0aW9uIiwiZ2VuZXJhdGVTZW5zaXRpdmVEYXRhU2NoZW1hIiwiUXVlc3Rpb25zU3RlcCIsInNldFRleHQiLCJwaG9uZVNjaGVtYSIsInN0YXJ0VmVyaWZpY2F0aW9uIiwidmVyaWZpY2F0aW9uVHlwZSIsImJhc2VVUkwiLCJieXBhc3NWZXJpZmljYXRpb25RdWVyeVBhcmFtIiwiVVJMU2VhcmNoUGFyYW1zIiwicGhvbmVOdW1iZXIiLCJieXBhc3NWZXJpZmljYXRpb25RdWVyeSIsImZ1bGxVcmwiLCJyZXNwb25zZSIsIm9rIiwic3RhdHVzVGV4dCIsIkNoYXRJY29uIiwiU291cmNlVHlwZSIsIlBob25lSWNvbiIsImNoYXJJc051bWJlciIsImlzTmlsIiwiaXNOb3RWYWxpZFZhbHVlIiwiaXNOYW5WYWx1ZSIsInJlcGVhdCIsInRvTnVtZXJpY1N0cmluZyIsIl9udW0iLCJzaWduIiwiY29lZmZpY2llbnQiLCJleHBvbmVudCIsImRlY2ltYWxJbmRleCIsImNvZmZpZWNpZW50TG4iLCJzZXRDYXJldFBvc2l0aW9uIiwiZWwiLCJjYXJldFBvcyIsImNyZWF0ZVRleHRSYW5nZSIsInJhbmdlIiwibW92ZSIsInNlbGVjdGlvblN0YXJ0Iiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJsYXN0QXJncyIsImxhc3RWYWx1ZSIsImZpbmRDaGFuZ2VSYW5nZSIsInByZXZMZW5ndGgiLCJuZXdMZW5ndGgiLCJlbmQiLCJnZUlucHV0Q2FyZXRQb3NpdGlvbiIsInNlbGVjdGlvbkVuZCIsImdldERlZmF1bHRDaGFuZ2VNZXRhIiwiZ2V0TWFza0F0SW5kZXgiLCJtYXNrIiwiZGVmYXVsdElzQ2hhcmFjdGVyU2FtZSIsImN1cnJlbnRWYWx1ZSIsImN1cnJlbnRWYWx1ZUluZGV4IiwiZm9ybWF0dGVkVmFsdWVJbmRleCIsImdldENhcmV0UG9zSW5Cb3VuZGFyeSIsImJvdW5kYXJ5IiwiZGlyZWN0aW9uIiwidmFsTG4iLCJsYXN0SW5kZXhPZiIsImNhcmV0VW5rbm93bkZvcm1hdEJvdW5kYXJ5IiwiYm91bmRhcnlBcnkiLCJ1c2VJbnRlcm5hbFZhbHVlcyIsInZhbHVlSXNOdW1lcmljU3RyaW5nIiwicmVtb3ZlRm9ybWF0dGluZyIsIm9uVmFsdWVDaGFuZ2UiLCJjYWxsYmFja1JlZiIsInBlcnNpc3RlbnRDYlJlZiIsInVzZVBlcnNpc3RlbnRDYWxsYmFjayIsIm51bUFzU3RyaW5nIiwiX3ZhbHVlSXNOdW1lcmljU3RyaW5nIiwibmV3VmFsdWVzIiwiZGVmYXVsdFJlbW92ZUZvcm1hdHRpbmciLCJkZWZhdWx0Rm9ybWF0IiwiTnVtYmVyRm9ybWF0QmFzZSIsImRpc3BsYXlUeXBlIiwiY3VzdG9tSW5wdXQiLCJyZW5kZXJUZXh0IiwiZ2V0SW5wdXRSZWYiLCJpc0FsbG93ZWQiLCJvbktleURvd24iLCJvbk1vdXNlVXAiLCJvbkZvY3VzIiwicHJvcFZhbHVlIiwiZ2V0Q2FyZXRCb3VuZGFyeSIsImlzVmFsaWRJbnB1dENoYXJhY3RlciIsImlzQ2hhcmFjdGVyU2FtZSIsIm90aGVyUHJvcHMiLCJyZWZfMCIsIm9uRm9ybWF0dGVkVmFsdWVDaGFuZ2UiLCJjYXJldFBvc2l0aW9uQmVmb3JlQ2hhbmdlIiwibGFzdFVwZGF0ZWRWYWx1ZSIsIl9vblZhbHVlQ2hhbmdlIiwicmVmJDEiLCJtb3VudGVkIiwic2V0TW91bnRlZCIsImZvY3VzZWRFbG0iLCJzZXRDYXJldFRpbWVvdXQiLCJmb2N1c1RpbWVvdXQiLCJfZm9ybWF0IiwiZ2V0VmFsdWVPYmplY3QiLCJmbG9hdFZhbHVlIiwic2V0UGF0Y2hlZENhcmV0UG9zaXRpb24iLCJjb3JyZWN0Q2FyZXRQb3NpdGlvbiIsImdldE5ld0NhcmV0UG9zaXRpb24iLCJuZXdGb3JtYXR0ZWRWYWx1ZSIsImNhcmV0Qm91bmRhcnkiLCJ1cGRhdGVkQ2FyZXRQb3MiLCJsYXN0Rm9ybWF0dGVkVmFsdWUiLCJjdXJWYWx1ZSIsImN1ckNhcmV0UG9zIiwiZmlyc3RBbGxvd2VkUG9zaXRpb24iLCJwcmVmaXhGb3JtYXQiLCJjdXJWYWxMbiIsImZvcm1hdHRlZFZhbHVlTG4iLCJhZGRlZEluZGV4TWFwIiwiaW5kZXhNYXAiLCJqTG4iLCJwb3MiLCJlbmRJbmRleCIsImdldENhcmV0UG9zaXRpb24iLCJsYXN0TnVtQXNTdHJpbmciLCJjdXJyZW50Q2FyZXRQb3NpdGlvbiIsImZvcm1hdElucHV0VmFsdWUiLCJjaGFuZ2VSYW5nZSIsImxhc3RDYXJldFBvc2l0aW9ucyIsInN0YXJ0UG9zaXRpb24iLCJmaW5kQ2hhbmdlZFJhbmdlRnJvbUNhcmV0UG9zaXRpb25zIiwiY2hhbmdlTWV0YSIsIl9udW1Bc1N0cmluZyIsIl9mb3JtYXR0ZWRWYWx1ZSIsImlucHV0JDEiLCJ1cGRhdGVWYWx1ZUFuZENhcmV0UG9zaXRpb24iLCJzZXRDYXJldFBvc2l0aW9uSW5mb0JlZm9yZUNoYW5nZSIsImVuZE9mZnNldCIsImlucHV0TW9kZSIsImlucHV0UHJvcHMiLCJleHBlY3RlZENhcmV0UG9zaXRpb24iLCJpc0Fycm93S2V5IiwibmV3Q2FyZXRQb3NpdGlvbiIsImNvcnJlY3RDYXJldFBvc2l0aW9uSWZSZXF1aXJlZCIsImNhcmV0UG9zaXRpb24iLCJjdXJyZW50VGFyZ2V0IiwiQ3VzdG9tSW5wdXQiLCJ1c2VQYXR0ZXJuRm9ybWF0IiwiYWxsb3dFbXB0eUZvcm1hdHRpbmciLCJmb3JtYXRQcm9wIiwicGF0dGVybkNoYXIiLCJyZXN0UHJvcHMiLCJ2YWxpZGF0ZVByb3BzIiwiX2dldENhcmV0Qm91bmRhcnkiLCJoYXNoQ291bnQiLCJmaXJzdEVtcHR5U2xvdCIsIm1hc2tBbmRJbmRleE1hcCIsIm1hc2tBdEluZGV4IiwiaXNQb3NBbGxvd2VkIiwiZ2V0Q2FyZXRCb3VuZGFyeSQxIiwiaXNWYWx1ZU51bWVyaWNTdHJpbmciLCJpc051bWVyaWNTdHJpbmckMSIsIl9wcm9wcyIsIm51bVN0ciIsImZvcm1hdHRlZE51bWJlckFyeSIsImZvcm1hdCQxIiwiaXNOdW1lcmljU2xvdCIsInJlbW92ZUZvcm1hdENoYXIiLCJleHRyYWN0TnVtYmVycyIsImZpcnN0U2VjdGlvbiIsIm1pZGRsZVNlY3Rpb24iLCJsYXN0U2VjdGlvbiIsInJlbW92ZUZvcm1hdHRpbmckMSIsImZvcm1hdExuIiwiUGF0dGVybkZvcm1hdCIsInBhdHRlcm5Gb3JtYXRQcm9wcyIsIklucHV0IiwiSW5wdXRJY29uIiwiaW5wdXRDbGFzc2VzIiwiaWNvblByb3BzIiwiQWxlcnQiLCJkaXNtaXNzaWJsZSIsImZ1bGxXaWR0aCIsIkFsZXJ0SWNvbiIsIm9uRGlzbWlzcyIsImFsZXJ0Q2xhc3NlcyIsIkluZm9ybWF0aW9uSWNvbiIsIlRleHQiLCJ0ZXh0Q2xhc3NlcyIsIlBob25lVmVyaWZpY2F0aW9uQ291bnREb3duQWxlcnQiLCJFcnJvckljb24iLCJFcnJvck1lc3NhZ2UiLCJTdWNjZXNzSWNvbiIsIlN1Y2Nlc3NNZXNzYWdlIiwic3VjY2Vzc01lc3NhZ2UiLCJQcm9BZ3JlZW1lbnRUZXh0IiwiUmFtc2V5QWdyZWVtZW50VGV4dCIsIlBob25lU3RlcCIsInNldEVycm9yTWVzc2FnZSIsImlucHV0U2l6ZSIsInNldENhbGxWZXJpZmljYXRpb24iLCJFdmVudCIsImNhbmNlbGFibGUiLCJzZXRUZXh0aW5nVmVyaWZjYXRpb24iLCJ0ZW1wVmVyaWZpY2F0aW9uVHlwZSIsInZlcmlmaWNhdGlvbl90eXBlIiwiYXV0b0NvbXBsZXRlIiwicGxhY2Vob2xkZXIiLCJwaG9uZVZlcmlmaWNhdGlvblNjaGVtYSIsInZlcmlmaWNhdGlvbl9jb2RlIiwiY3JlYXRlUmVmZXJyYWwiLCJyZWNhcHRjaGEiLCJwcm9BZ3JlZW1lbnQiLCJyYW1zZXlBZ3JlZW1lbnQiLCJyZXNwb25zZVRva2VuIiwicHJvQWdyZWVtZW50VGV4dCIsInJhbXNleUFncmVlbWVudFRleHQiLCJ0YXhSZWZlcnJhbFJlcXVlc3RCb2R5IiwidGF4UmVmZXJyYWwiLCJwb3N0YWxDb2RlIiwiaW50ZW50cyIsInF1ZXN0aW9ucyIsImFkdmljZSIsInRheEhpc3RvcnkiLCJjb21wbGV4aXR5Q29uY2VybiIsInRheENvbmZpZGVuY2UiLCJ0YXhTaXR1YXRpb24iLCJwcm9zIiwiY29udGFjdE5hbWUiLCJjb21wYW55TmFtZSIsImFncmVlbWVudCIsImNyZWF0ZVJlY2FwdGNoYSIsImlzUGF1bEhvb2RSZWZlcnJhbCIsInJlZmVycmFsUmVxdWVzdCIsInJlZmVycmFsRGF0YSIsInBoUGVyc29uYWxJbnRlbnRzIiwicGhfcGVyc29uYWxfaW50ZW50cyIsInBoU2VsZkVtcGxveWVkU21hbGxCdXNpbmVzc0ludGVudCIsInBoX3NlbGZfZW1wbG95ZWRfc21hbGxfYnVzaW5lc3NfaW50ZW50IiwicGhUYXhJc3N1ZXMiLCJwaF90YXhfaXNzdWVzIiwicGhUYXhBZHZpY2UiLCJwaF90YXhfYWR2aWNlIiwicGhTb21ldGhpbmdFbHNlIiwicGhfc29tZXRoaW5nX2Vsc2UiLCJwaFVyZ2VuY3kiLCJwaF91cmdlbmN5IiwiY3JlYXRlUmVmZXJyYWxSZXF1ZXN0Qm9keSIsIm92ZXJyaWRlIiwibGFzdENoaWxkIiwiZ2V0RWxlbWVudEJ5SWQiLCJfX19ncmVjYXB0Y2hhX2NmZyIsIlNDUklQVF9OT1RfQVZBSUxBQkxFIiwiZXhlY3V0ZVJlY2FwdGNoYSIsInJlQ2FwdGNoYUtleSIsInVzZUVudGVycHJpc2UiLCJ1c2VSZWNhcHRjaGFOZXQiLCJzY3JpcHRQcm9wcyIsImxhbmd1YWdlIiwicGFyYW1ldGVycyIsIm9uTG9hZENhbGxiYWNrTmFtZSIsImdyZWNhcHRjaGEiLCJlbnRlcnByaXNlIiwiYmFkZ2UiLCJzaXRla2V5Iiwib25Mb2FkIiwiZGVmZXIiLCJhcHBlbmRUbyIsIm9ubG9hZCIsIm9uRXJyb3IiLCJleGVjdXRlIiwiVmVyaWZpY2F0aW9uU3RlcCIsInNldFN0YXR1cyIsImluaXRpYWwiLCJzZXRTdWNjZXNzTWVzc2FnZSIsImludmFsaWRDb2RlTWVzc2FnZSIsInNldEludmFsaWRDb2RlTWVzc2FnZSIsImhhbmRsZVZlcmlmaWNhdGlvblJlc3BvbnNlIiwicmVzcG9uc2VCb2R5IiwicmVjYXB0Y2hhVG9rZW4iLCJvblZhbGlkU3VibWl0IiwidmVyaWZpY2F0aW9uQ29kZSIsInZlcmlmaWNhdGlvblJlc3BvbnNlQm9keSIsImVuZFZlcmlmaWNhdGlvbiIsInJlc2VuZENvZGVTdWNjZXNzIiwiTk9fU1BFQ0lBTF9TWU1CT0xTX1JFR0VYIiwiZnVsbE5hbWVJbmZvU2NoZW1hIiwiRnVsbE5hbWVTdGVwIiwiY29uc29saWRhdGVkRXJyb3IiLCJmaXJzdEVycm9yIiwibGFzdEVycm9yIiwiY29uc29saWRhdGVGaXJzdEFuZExhc3ROYW1lRXJyb3JzIiwiaGFuZGxlQ2hhbmdlIiwibmFtZVBhcnRzIiwiZmlyc3QiLCJ0YWJJbmRleCIsImVtYWlsVmFsaWRhdGlvbiIsImVtYWlsSW5mb1NjaGVtYSIsIkVtYWlsU3RlcCIsImludmFsaWRaaXBFcnJvciIsImdldExvY2F0aW9ucyIsInppcENvZGUiLCJwb3N0YWxfY29kZXMiLCJ6aXBTY2hlbWEiLCJMb2NhdGlvblN0ZXAiLCJmZXRjaFByb0xvb2t1cCIsInByb2dyYW1zIiwiemlwUHJvTG9va3VwIiwiUHJvSm9pbk91clByb2dyYW0iLCJTZXJ2aWNlc1N0ZXAiLCJJbnRlbnRTdGVwIiwiY29tcGxleGl0eVZhbGlkYXRpb24iLCJjb21wbGV4aXR5U2NoZW1hIiwiUmFkaW9UaWxlIiwiUmFkaW9UaWxlSWNvbiIsInJhZGlvVGlsZUNsYXNzZXMiLCJQcmVSZWZlcnJhbENvbXBsZXhpdHlDb25jZXJuU3RlcCIsImFuc3dlck9wdGlvbnMiLCJzdGVwTGFiZWwiLCJ0YXhRdWVzdGlvblZhbHVlcyIsIlJlZmVycmFsRm9ybSIsImZvcm1XcmFwcGVyUmVmIiwiaGFzRm9jdXNlZCIsImhhbmRsZU9uRm9jdXNJbiIsImZvcm1XcmFwcGVyUmVmRWxlbWVudCIsInNob3VsZFJlY2VpdmVQSFF1ZXN0aW9uc0Zsb3ciLCJnZW5lcmF0ZVBIUXVlc3Rpb25zRmxvdyIsImdlbmVyYXRlQmFzZWxpbmVGbG93IiwiZ2VuZXJhdGVRdWVzdGlvbnNTdGVwRm9yQWxsRmxvd3MiLCJnZXRMaW5rSWNvblByb3BzIiwiTGlua0ljb24iLCJpbmhlcml0Q29sb3IiLCJsaW5rQ2xhc3NlcyIsIlBIUGVyc29uYWxJbnRlbnRTdGVwIiwiUEhBZHZpY2VTdGVwIiwiUEhTZWxmRW1wU21hbGxCdXNJbnRlbnRTdGVwIiwiUEhTb21ldGhpbmdFbHNlU3RlcCIsInNpdHVhdGlvbiIsIlBIVGF4SXNzdWVzU3RlcCIsInBoVXJnZW5jeVZhbGlkYXRpb24iLCJwaFVyZ2VuY3lTY2hlbWEiLCJQSFVyZ2VuY3lTdGVwIiwicGF1bEhvb2RRdWVzdGlvbkNvbXBvbmVudHMiLCJpc1NtYWxsQnVzaW5lc3NTZWxlY3RlZCIsImlzU2VsZkVtcGxveWVkU2VsZWN0ZWQiLCJwSFBlcnNvbmFsSW50ZW50cyIsInBIU2VsZkVtcFNtYWxsQnVzSW50ZW50cyIsImhlbHBfd2l0aF90YXhfaXNzdWVzIiwiaXNUYXhJc3N1ZXNTZWxlY3RlZCIsInRheElzc3VlIiwic29tZXRoaW5nX2Vsc2UiLCJpc1RheElzc3VlU29tZXRoaW5nRWxzZSIsInBIU21hbGxCdXNTZWxmRW1wSW50ZW50cyIsImlzU21hbGxCdXNTZWxmRW1wU29tZXRoaW5nRWxzZSIsImlzUEhJbnRlbnRTb21ldGhpbmdFbHNlIiwiYW5zd2VyX2dlbmVyYWxfcXVlc3Rpb25zIiwiaXNQSEludGVudEdlbmVyYWxRdWVzdGlvbnMiLCJiYXNlbGluZUNvbXBvbmVudHMiLCJpc09ubHlBZHZpY2VTZWxlY3RlZCIsImluY2x1ZGVzT3RoZXIiLCJvbmx5T25lIiwiaXNPbmx5T3RoZXJTZWxlY3RlZCIsInBIQWR2aWNlIiwiaXNQSEFkdmljZVNvbWV0aGluZ0Vsc2UiLCJzZWxmX2VtcGxveWVkIiwidGF4SW50ZW50cyIsImluY2x1ZGVzQWR2aWNlIiwiZ2l2ZV9tZV9hZHZpY2UiLCJwcm8iLCJwYXVsSG9vZEFjY291bnRLZXkiLCJwYXVsaG9vZEFjY291bnRLZXkiLCJTaXR1YXRpb25PcHRpb25zIiwidGF4UXVlc3Rpb25zIiwic2l0dWF0aW9uT3B0aW9ucyIsInVwZGF0ZVRheFF1ZXN0aW9ucyIsImlfc29sZF9zdG9ja19vcl9jcnlwdG8iLCJteV9tYXJpdGFsX3N0YXR1c19jaGFuZ2VkIiwiaV9uZWVkX3RvX2ZpbGVfbXVsdGlwbGVfeWVhcnMiLCJteV9zcG91c2Vfb3JfaV9zZXJ2ZV9hc19jbGVyZ3kiLCJpX2hhdmVfc2VsZl9lbXBsb3ltZW50X2luY29tZSIsIm5vbmVfb2ZfdGhlc2VfYXBwbHkiLCJsZXZlbCIsImhlYWRpbmdDbGFzc2VzIiwicHVycG9zZVZhbGlkYXRpb24iLCJwdXJwb3NlU2NoZW1hIiwiUHVycG9zZVN0ZXAiLCJQZXJzb25hbEludGVudE9wdGlvbnMiLCJQZXJzb25hbEludGVudFN0ZXAiLCJQdXJwb3NlUmVmZXJyYWxGb3JtIiwiZXhwZXJpbWVudEJhc2VsaW5lQ29tcG9uZW50cyIsInRheF9wZXJzb25hbF9pbnRlbnRzIiwiZ2VuZXJhdGVFeHBlcmltZW50QmFzZWxpbmVGbG93IiwiT1BUSU1JWkVMWV9QVVJQT1NFX0hBUkRDT0RFRF9WQVVMRVMiLCJwdXJwb3NlX2Zsb3dfb2ZmIiwicHVycG9zZV9mbG93X29uIiwiZmlyZU9wdGltaXplbHlEZXRhaWxzQW5hbHl0aWNzRXZlbnQiLCJ2YXJpYXRpb25OYW1lIiwidmFyaWF0aW9uTWFwcGluZ3MiLCJ2YXJpYXRpb25NYXBwaW5nc0tleXMiLCJ2YXJpYXRpb25JbmRleCIsImlzVmFsaWRWYXJpYXRpb24iLCJleHBlcmltZW50X25hbWUiLCJ2YXJpYXRpb25fbmFtZSIsImV4cGVyaW1lbnRhdGlvbl9wbGF0Zm9ybSIsInRyYWNrRXhwZXJpbWVudFZpZXdlZCIsIlB1cnBvc2VRdWVzdGlvbkV4cGVyaW1lbnRXcmFwcGVyIiwib3B0aW1pemVseUtleSIsInVzZVRyYWNrUmVmZXJyYWxQYWdlVmlld2VkIiwia2V5d29yZHMiLCJyZWZlcnJlciIsInRyYWNrUGFnZVZpZXdlZCIsImVsZW1lbnRCeUlkIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=