update tutorial instructions to modified npm script
diff --git a/userguides/n4js-tutorial-chess/dist/chess-app.js b/userguides/n4js-tutorial-chess/dist/chess-app.js
index f367cf2..72fe3dc 100644
--- a/userguides/n4js-tutorial-chess/dist/chess-app.js
+++ b/userguides/n4js-tutorial-chess/dist/chess-app.js
@@ -1,15 +1,15 @@
-!function(e){var t=window.webpackHotUpdate;window.webpackHotUpdate=function(e,n){!function(e,t){if(!k[e]||!b[e])return;for(var n in b[e]=!1,t)Object.prototype.hasOwnProperty.call(t,n)&&(m[n]=t[n]);0==--y&&0===v&&P()}(e,n),t&&t(e,n)};var n,o=!0,i="5c26811618424e1fb46a",r=1e4,s={},a=[],c=[];function l(e){var t=N[e];if(!t)return I;var o=function(o){return t.hot.active?(N[o]?-1===N[o].parents.indexOf(e)&&N[o].parents.push(e):(a=[e],n=o),-1===t.children.indexOf(o)&&t.children.push(o)):(console.warn("[HMR] unexpected require("+o+") from disposed module "+e),a=[]),I(o)},i=function(e){return{configurable:!0,enumerable:!0,get:function(){return I[e]},set:function(t){I[e]=t}}};for(var r in I)Object.prototype.hasOwnProperty.call(I,r)&&"e"!==r&&"t"!==r&&Object.defineProperty(o,r,i(r));return o.e=function(e){return"ready"===p&&h("prepare"),v++,I.e(e).then(t,function(e){throw t(),e});function t(){v--,"prepare"===p&&(g[e]||S(e),0===v&&0===y&&P())}},o.t=function(e,t){return 1&t&&(e=o(e)),I.t(e,-2&t)},o}function u(e){var t={_acceptedDependencies:{},_declinedDependencies:{},_selfAccepted:!1,_selfDeclined:!1,_disposeHandlers:[],_main:n!==e,active:!0,accept:function(e,n){if(void 0===e)t._selfAccepted=!0;else if("function"==typeof e)t._selfAccepted=e;else if("object"==typeof e)for(var o=0;o<e.length;o++)t._acceptedDependencies[e[o]]=n||function(){};else t._acceptedDependencies[e]=n||function(){}},decline:function(e){if(void 0===e)t._selfDeclined=!0;else if("object"==typeof e)for(var n=0;n<e.length;n++)t._declinedDependencies[e[n]]=!0;else t._declinedDependencies[e]=!0},dispose:function(e){t._disposeHandlers.push(e)},addDisposeHandler:function(e){t._disposeHandlers.push(e)},removeDisposeHandler:function(e){var n=t._disposeHandlers.indexOf(e);n>=0&&t._disposeHandlers.splice(n,1)},check:M,apply:j,status:function(e){if(!e)return p;d.push(e)},addStatusHandler:function(e){d.push(e)},removeStatusHandler:function(e){var t=d.indexOf(e);t>=0&&d.splice(t,1)},data:s[e]};return n=void 0,t}var d=[],p="idle";function h(e){p=e;for(var t=0;t<d.length;t++)d[t].call(null,e)}var f,m,w,y=0,v=0,g={},b={},k={};function O(e){return+e+""===e?+e:e}function M(e){if("idle"!==p)throw new Error("check() is only allowed in idle status");return o=e,h("check"),(t=r,t=t||1e4,new Promise(function(e,n){if("undefined"==typeof XMLHttpRequest)return n(new Error("No browser support"));try{var o=new XMLHttpRequest,r=I.p+""+i+".hot-update.json";o.open("GET",r,!0),o.timeout=t,o.send(null)}catch(e){return n(e)}o.onreadystatechange=function(){if(4===o.readyState)if(0===o.status)n(new Error("Manifest request to "+r+" timed out."));else if(404===o.status)e();else if(200!==o.status&&304!==o.status)n(new Error("Manifest request to "+r+" failed."));else{try{var t=JSON.parse(o.responseText)}catch(e){return void n(e)}e(t)}}})).then(function(e){if(!e)return h("idle"),null;b={},g={},k=e.c,w=e.h,h("prepare");var t=new Promise(function(e,t){f={resolve:e,reject:t}});m={};return S(0),"prepare"===p&&0===v&&0===y&&P(),t});var t}function S(e){k[e]?(b[e]=!0,y++,function(e){var t=document.createElement("script");t.charset="utf-8",t.src=I.p+""+e+"."+i+".hot-update.js",document.head.appendChild(t)}(e)):g[e]=!0}function P(){h("ready");var e=f;if(f=null,e)if(o)Promise.resolve().then(function(){return j(o)}).then(function(t){e.resolve(t)},function(t){e.reject(t)});else{var t=[];for(var n in m)Object.prototype.hasOwnProperty.call(m,n)&&t.push(O(n));e.resolve(t)}}function j(t){if("ready"!==p)throw new Error("apply() is only allowed in ready status");var n,o,r,c,l;function u(e){for(var t=[e],n={},o=t.slice().map(function(e){return{chain:[e],id:e}});o.length>0;){var i=o.pop(),r=i.id,s=i.chain;if((c=N[r])&&!c.hot._selfAccepted){if(c.hot._selfDeclined)return{type:"self-declined",chain:s,moduleId:r};if(c.hot._main)return{type:"unaccepted",chain:s,moduleId:r};for(var a=0;a<c.parents.length;a++){var l=c.parents[a],u=N[l];if(u){if(u.hot._declinedDependencies[r])return{type:"declined",chain:s.concat([l]),moduleId:r,parentId:l};-1===t.indexOf(l)&&(u.hot._acceptedDependencies[r]?(n[l]||(n[l]=[]),d(n[l],[r])):(delete n[l],t.push(l),o.push({chain:s.concat([l]),id:l})))}}}}return{type:"accepted",moduleId:e,outdatedModules:t,outdatedDependencies:n}}function d(e,t){for(var n=0;n<t.length;n++){var o=t[n];-1===e.indexOf(o)&&e.push(o)}}t=t||{};var f={},y=[],v={},g=function(){console.warn("[HMR] unexpected require("+M.moduleId+") to disposed module")};for(var b in m)if(Object.prototype.hasOwnProperty.call(m,b)){var M;l=O(b);var S=!1,P=!1,j=!1,C="";switch((M=m[b]?u(l):{type:"disposed",moduleId:b}).chain&&(C="\nUpdate propagation: "+M.chain.join(" -> ")),M.type){case"self-declined":t.onDeclined&&t.onDeclined(M),t.ignoreDeclined||(S=new Error("Aborted because of self decline: "+M.moduleId+C));break;case"declined":t.onDeclined&&t.onDeclined(M),t.ignoreDeclined||(S=new Error("Aborted because of declined dependency: "+M.moduleId+" in "+M.parentId+C));break;case"unaccepted":t.onUnaccepted&&t.onUnaccepted(M),t.ignoreUnaccepted||(S=new Error("Aborted because "+l+" is not accepted"+C));break;case"accepted":t.onAccepted&&t.onAccepted(M),P=!0;break;case"disposed":t.onDisposed&&t.onDisposed(M),j=!0;break;default:throw new Error("Unexception type "+M.type)}if(S)return h("abort"),Promise.reject(S);if(P)for(l in v[l]=m[l],d(y,M.outdatedModules),M.outdatedDependencies)Object.prototype.hasOwnProperty.call(M.outdatedDependencies,l)&&(f[l]||(f[l]=[]),d(f[l],M.outdatedDependencies[l]));j&&(d(y,[M.moduleId]),v[l]=g)}var D,q=[];for(o=0;o<y.length;o++)l=y[o],N[l]&&N[l].hot._selfAccepted&&q.push({module:l,errorHandler:N[l].hot._selfAccepted});h("dispose"),Object.keys(k).forEach(function(e){!1===k[e]&&function(e){delete installedChunks[e]}(e)});for(var A,B,E=y.slice();E.length>0;)if(l=E.pop(),c=N[l]){var F={},R=c.hot._disposeHandlers;for(r=0;r<R.length;r++)(n=R[r])(F);for(s[l]=F,c.hot.active=!1,delete N[l],delete f[l],r=0;r<c.children.length;r++){var x=N[c.children[r]];x&&((D=x.parents.indexOf(l))>=0&&x.parents.splice(D,1))}}for(l in f)if(Object.prototype.hasOwnProperty.call(f,l)&&(c=N[l]))for(B=f[l],r=0;r<B.length;r++)A=B[r],(D=c.children.indexOf(A))>=0&&c.children.splice(D,1);for(l in h("apply"),i=w,v)Object.prototype.hasOwnProperty.call(v,l)&&(e[l]=v[l]);var _=null;for(l in f)if(Object.prototype.hasOwnProperty.call(f,l)&&(c=N[l])){B=f[l];var W=[];for(o=0;o<B.length;o++)if(A=B[o],n=c.hot._acceptedDependencies[A]){if(-1!==W.indexOf(n))continue;W.push(n)}for(o=0;o<W.length;o++){n=W[o];try{n(B)}catch(e){t.onErrored&&t.onErrored({type:"accept-errored",moduleId:l,dependencyId:B[o],error:e}),t.ignoreErrored||_||(_=e)}}}for(o=0;o<q.length;o++){var T=q[o];l=T.module,a=[l];try{I(l)}catch(e){if("function"==typeof T.errorHandler)try{T.errorHandler(e)}catch(n){t.onErrored&&t.onErrored({type:"self-accept-error-handler-errored",moduleId:l,error:n,originalError:e}),t.ignoreErrored||_||(_=n),_||(_=e)}else t.onErrored&&t.onErrored({type:"self-accept-errored",moduleId:l,error:e}),t.ignoreErrored||_||(_=e)}}return _?(h("fail"),Promise.reject(_)):(h("idle"),new Promise(function(e){e(y)}))}var N={};function I(t){if(N[t])return N[t].exports;var n=N[t]={i:t,l:!1,exports:{},hot:u(t),parents:(c=a,a=[],c),children:[]};return e[t].call(n.exports,n,n.exports,l(t)),n.l=!0,n.exports}I.m=e,I.c=N,I.d=function(e,t,n){I.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},I.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},I.t=function(e,t){if(1&t&&(e=I(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(I.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)I.d(n,o,function(t){return e[t]}.bind(null,o));return n},I.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return I.d(t,"a",t),t},I.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},I.p="dist/",I.h=function(){return i},l(10)(I.s=10)}([function(e,t){e.exports=React},function(e,t,n){"use strict";(function(e){n(5),n(6);!function(e){e._n4jsImport=function(e){return n(7)(e)}}("object"==typeof e?e:self)}).call(this,n(2))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";e.exports=n(8)},function(e,t){e.exports=ReactDOM},function(e,t,n){(function(e){!function(e){"use strict";function t(e,t,n,o){"function"==typeof t&&Object.setPrototypeOf(e,t),t===Error&&(n.stack={get:function(){return this.$__n4err.stack}},n.message={get:function(){return this.$__n4err.message}},n.name={get:function(){return e.n4type.name}}),Object.defineProperties(e,o);var i=Object.create(t.prototype,n);Object.defineProperty(i,"constructor",{value:e}),e.prototype=i}function n(e,t){Object.defineProperty(e,"n4type",{value:t,enumerable:!1}),t.ownedMembers.forEach(function(e){Object.defineProperty(e,"owner",{value:t,enumerable:!1})}),t.ownedMembers.forEach(function(e){e instanceof h&&(Object.defineProperty(e,"jsFunction",{value:e.constructor,enumerable:!1}),e.constructor.n4member=e)})}function o(e){Object.defineProperty(e,"target",{value:this,enumerable:!1})}function i(e){e.annotations&&e.annotations.forEach(o,e)}var r=function(e){Object.prototype.constructor.call(this,e)},s=function(e){r.prototype.constructor.call(this,e),this.origin=e.origin,this.annotations=e.annotations||[],i(this)},a=function(e){s.prototype.constructor.call(this,e),this.name=e.name},c=function(e){a.prototype.constructor.call(this,e),this.fqn=e.fqn},l=function(e){c.prototype.constructor.call(this,e),this.n4superType=e.n4superType,this.allImplementedInterfaces=e.allImplementedInterfaces,this.annotations=e.annotations,this.ownedMembers=e.ownedMembers||[],this.consumedMembers=e.consumedMembers||[],this.ownedMembers.forEach(function(e){Object.defineProperty(e,"owner",{value:this,enumerable:!1}),i(e)},this)},u=function(e){l.prototype.constructor.call(this,e)},d=function(e){l.prototype.constructor.call(this,e)},p=function(e){a.prototype.constructor.call(this,e),this.owner=e.owner,this.isStatic=e.isStatic||!1},h=function(e){p.prototype.constructor.call(this,e),this.jsFunction=e.jsFunction},f=function(e){p.prototype.constructor.call(this,e)},m=function(e){p.prototype.constructor.call(this,e),this.getter=e.getter},w=function(e){c.prototype.constructor.call(this,e)},y=function(e){Object.prototype.constructor.call(this,e)},v=function(e){c.prototype.constructor.call(this,e)},g=function(e){Object.prototype.constructor.call(this,e)},b=function(e){r.prototype.constructor.call(this,e),this.name=e.name,this.details=e.details,this.target=e.target},k=function(e){Object.prototype.constructor.call(this,e)},O=function(e){this.$__n4err=new Error(e)},M=function(e){Object.prototype.constructor.call(this,e)},S=function(e){Object.prototype.constructor.call(this,e)};t(r,Object,{},{}),t(s,r,{hasAnnotation:{value:function(e){return this.annotations.some(function(t){return t.name===e})}},anyAnnotation:{value:function(e){for(var t=this.annotations.length-1;t>=0;t--){var n=this.annotations[t];if(n.name===e)return n}return null}},allAnnotations:{value:function(e){return this.annotations.filter(function(t){return t.name===e})}}},{}),t(a,s,{},{}),t(c,a,{isClass:{get:function(){return!1}},isInterface:{get:function(){return!1}},isEnum:{get:function(){return!1}}},{of:{value:function(e){return e?e.n4type||e.constructor.n4type:void 0}}}),t(l,c,{members:{value:function(e,t,n){var o=this.ownedMembers.slice();if(e&&(o=o.concat(this.consumedMembers)),t&&this.n4superType instanceof l){var i=this.n4superType.members(e,t,n);o=o.concat(i)}return n||(o=o.filter(function(e){return!e.isStatic})),o}},membersWithAnnotation:{value:function(e,t,n,o){return this.members(t,n,o).filter(function(t){return t.hasAnnotation(e)})}},dataFields:{value:function(e,t,n){return this.members(e,t,n).filter(function(e){return e instanceof f})}},dataFieldsWithAnnotation:{value:function(e,t,n,o){return this.membersWithAnnotation(e,t,n,o).filter(function(e){return e instanceof f})}},methods:{value:function(e,t,n){return this.members(e,t,n).filter(function(e){return e instanceof h})}},methodsWithAnnotation:{value:function(e,t,n,o){return this.membersWithAnnotation(e,t,n,o).filter(function(e){return e instanceof h})}}},{}),t(u,l,{isClass:{get:function(){return!0}}},{}),t(d,l,{isInterface:{get:function(){return!0}}},{}),t(p,a,{},{}),t(h,p,{},{}),t(f,p,{},{}),t(m,p,{isGetter:{value:function(){return this.getter}},isSetter:{value:function(){return!this.getter}}},{}),t(w,c,{isEnum:{get:function(){return!0}}},{}),t(y,Object,{toString:{value:function(){return this.value}}},{findLiteralByName:{value:function(e){for(var t=this.literals.length-1;t>=0;t--)if(this.literals[t].name===e)return this.literals[t]}},findLiteralByValue:{value:function(e){for(var t=this.literals.length-1;t>=0;t--)if(this.literals[t].value===e)return this.literals[t]}}}),t(v,c,{isEnum:{get:function(){return!0}}},{}),t(g,Object,{toString:{value:function(){return this.value}}},{findLiteralByValue:{value:function(e){for(var t=this.literals.length-1;t>=0;t--)if(this.literals[t]===e)return this.literals[t]}}}),t(b,r,{},{}),t(O,Error,{},{}),n(r,new u({name:"N4Object",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Object",n4superType:r.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[],consumedMemebers:[]})),n(s,new u({name:"N4Element",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Element",n4superType:r.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"annotations",getter:!0}),new h({name:"hasAnnotation",jsFunction:s.hasAnnotation}),new h({name:"anyAnnotation",jsFunction:s.anyAnnotation}),new h({name:"allAnnotations",jsFunction:s.allAnnotations}),new m({name:"origin",getter:!0})],consumedMemebers:[]})),n(a,new u({name:"N4NamedElement",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4NamedElement",n4superType:s.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"name",getter:!0})],consumedMemebers:[]})),n(c,new u({name:"N4Type",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Type",n4superType:a.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"fqn",getter:!0}),new h({name:"of",jsFunction:c.of,isStatic:!0}),new m({name:"isClass",getter:!0}),new m({name:"isInterface",getter:!0}),new m({name:"isEnum",getter:!0})],consumedMemebers:[]})),n(l,new u({name:"N4Classifier",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Classifier",n4superType:c.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"n4superType",getter:!0}),new m({name:"allImplementedInterfaces",getter:!0}),new f({name:"ownedMembers"}),new f({name:"consumedMembers"}),new h({name:"constructor"}),new h({name:"members",jsFunction:l.members}),new h({name:"membersWithAnnotation",jsFunction:l.membersWithAnnotation}),new h({name:"dataFields",jsFunction:l.dataFields}),new h({name:"dataFieldsWithAnnotation",jsFunction:l.dataFieldsWithAnnotation}),new h({name:"methods",jsFunction:l.methods}),new h({name:"methodsWithAnnotation",jsFunction:l.methodsWithAnnotation})],consumedMemebers:[]})),n(u,new u({name:"N4Class",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Class",n4superType:l.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"isClass",getter:!0})],consumedMemebers:[]})),n(d,new u({name:"N4Interface",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Interface",n4superType:l.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"isInterface",getter:!0})],consumedMemebers:[]})),n(p,new u({name:"N4Member",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Member",n4superType:a.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"owner",getter:!0}),new m({name:"isStatic",getter:!0})],consumedMemebers:[]})),n(h,new u({name:"N4Method",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Method",n4superType:p.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"jsFunction",getter:!0})],consumedMemebers:[]})),n(f,new u({name:"N4DataField",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4DataField",n4superType:p.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[],consumedMemebers:[]})),n(m,new u({name:"N4Accessor",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Accessor",n4superType:p.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new f({name:"getter"}),new h({name:"isGetter",jsFunction:m.isGetter}),new h({name:"isSetter",jsFunction:m.isSetter})],consumedMemebers:[]})),n(w,new u({name:"N4EnumType",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4EnumType",n4superType:c.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"isEnum",getter:!0})],consumedMemebers:[]})),n(y,new u({name:"N4Enum",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Enum",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"toString",jsFunction:y.toString}),new h({name:"valueByName",jsFunction:y.valueByName,isStatic:!0}),new m({name:"name",getter:!0}),new m({name:"value",getter:!0}),new m({name:"values",getter:!0,isStatic:!0}),new m({name:"n4type",getter:!0})],consumedMemebers:[]})),n(v,new u({name:"N4StringBasedEnumType",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4StringBasedEnumType",n4superType:c.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"isEnum",getter:!0})],consumedMemebers:[]})),n(g,new u({name:"N4StringBasedEnum",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4StringBasedEnum",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"toString",jsFunction:g.toString}),new h({name:"valueByName",jsFunction:g.valueByName,isStatic:!0}),new m({name:"name",getter:!0}),new m({name:"value",getter:!0}),new m({name:"values",getter:!0,isStatic:!0}),new m({name:"n4type",getter:!0})],consumedMemebers:[]})),n(b,new u({name:"N4Annotation",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Annotation",n4superType:r.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"name",getter:!0}),new m({name:"details",getter:!0}),new m({name:"target",getter:!0})],consumedMemebers:[]})),n(k,new d({name:"N4Provider",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Provider",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"get",jsFunction:k.get,annotations:[]})],consumedMembers:[]})),n(O,new u({name:"N4ApiNotImplementedError",origin:"N4BuiltInClasses",fqn:"N4BuiltInClasses.N4ApiNotImplementedError",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[],consumedMemebers:[]})),n(M,new d({name:"MigrationController",origin:"n4js-runtime",fqn:"N4BuiltInClasses.MigrationController",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"migrate",isStatic:!1,annotations:[]}),new h({name:"migrateWith",isStatic:!1,annotations:[]}),new m({name:"context",getter:!0,isStatic:!1,annotations:[]})],consumedMembers:[]})),n(S,new d({name:"MigrationContext",origin:"n4js-runtime",fqn:"N4BuiltInClasses.MigrationContext",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"getTrace",isStatic:!1,annotations:[]}),new h({name:"isModified",isStatic:!1,annotations:[]}),new h({name:"setUserData",isStatic:!1,annotations:[]}),new h({name:"getUserData",isStatic:!1,annotations:[]})],consumedMembers:[]})),Object.freeze(r),Object.freeze(s),Object.freeze(a),Object.freeze(c),Object.freeze(l),Object.freeze(u),Object.freeze(d),Object.freeze(p),Object.freeze(h),Object.freeze(f),Object.freeze(m),Object.freeze(w),Object.freeze(y),Object.freeze(v),Object.freeze(g),Object.freeze(k),Object.freeze(O),Object.freeze(M),Object.freeze(S),e.N4Object=r,e.N4Element=s,e.N4NamedElement=a,e.N4Type=c,e.N4Classifier=l,e.N4Class=u,e.N4Interface=d,e.N4Member=p,e.N4Method=h,e.N4DataField=f,e.N4Accessor=m,e.N4EnumType=w,e.N4Enum=y,e.N4StringBasedEnumType=v,e.N4StringBasedEnum=g,e.N4Annotation=b,e.N4Provider=k,e.N4ApiNotImplementedError=O,e.MigrationController=M,e.MigrationContext=S}("object"==typeof e?e:self)}).call(this,n(2))},function(e,t,n){(function(e){!function(e){"use strict";var t=Array.prototype.slice,n=function(){};if("undefined"!=typeof __REACT_HOT_LOADER__){var o=Object.defineProperties.bind(Object),i=Object.defineProperty.bind(Object);Object.defineProperties=function(e,t){for(var n in t){var i=t[n];i.configurable=!0,i.value&&(i.writable=!0)}return o(e,t)},Object.defineProperty=function(e,t,n){return n.configurable=!0,n.value&&(n.writable=!0),i(e,t,n)}}function r(e){var t=e&&e.name;!t||t in this||e.isStatic||!e.jsFunction||(this[t]=e.jsFunction.value)}function s(e){var t=e&&e.n4type;t&&(t.ownedMembers.forEach(r,this),t.consumedMembers.forEach(r,this))}function a(e,t){return!!(e&&e.constructor&&e.constructor.n4type&&e.constructor.n4type.allImplementedInterfaces)&&-1!==e.constructor.n4type.allImplementedInterfaces.indexOf(t)}e.$makeClass=function(e,t,n,o,i,r){"function"==typeof t&&Object.setPrototypeOf(e,t),Object.defineProperties(e,i);var a=Object.create(t.prototype,o);n.forEach(s,a),Object.defineProperty(a,"constructor",{value:e});var c=r(a,e);Object.defineProperty(e,"n4type",{value:c}),e.prototype=a},e.$makeInterface=function(e,t){var n=t(e.$methods,e);Object.defineProperty(e,"n4type",{value:n})},e.$makeEnum=function(t,o,i,r){var s,a,c,l,u;for(Object.setPrototypeOf(t,e.N4Enum),t.prototype=Object.create(e.N4Enum.prototype,{}),Object.defineProperty(t,"n4type",{value:r(n)}),Object.defineProperty(t.prototype,"constructor",{value:t}),s=i.length,l=new Array(s),a=0;a<s;++a)u=new t((c=i[a])[0],c[1]),Object.defineProperty(t,u.name,{enumerable:!0,value:u}),l[a]=u;Object.defineProperty(t,"literals",{value:l})},e.$implements=a,e.$instanceof=function(e,t){switch(typeof e){case"object":case"function":if("object"==typeof t){var n=t.n4type||null;return a(e,n?n.fqn:"")}return e instanceof t}return!1},e.$sliceToArrayForDestruct=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e)){for(var n,o=[],i=e[Symbol.iterator]();!((n=i.next()).done||(o.push(n.value),o.length>=t)););return o}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.$spawn=function(e){function t(e,t){var i;try{i=this[e](t)}catch(e){return Promise.reject(e)}return i.done?Promise.resolve(i.value):Promise.resolve(i.value).then(n,o)}var n=t.bind(e,"next"),o=t.bind(e,"throw");return n()},e.$n4promisifyFunction=function(e,n,o,i){return new Promise(function(r,s){n.push(function(e,n){i?r(o?t.call(arguments,0):e):e?s(e):r(o?t.call(arguments,1):n)}),e.apply(null,n)})},e.$n4promisifyMethod=function(e,n,o,i,r){return new Promise(function(s,a){o.push(function(e,n){r?s(i?t.call(arguments,0):e):e?a(e):s(i?t.call(arguments,1):n)}),e[n].apply(e,o)})}}("object"==typeof e?e:self)}).call(this,n(2))},function(e,t){function n(e){return Promise.resolve().then(function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}n.keys=function(){return[]},n.resolve=n,e.exports=n,n.id=7},function(e,t,n){"use strict";
-/** @license React v16.8.6
+!function(e){var t=window.webpackHotUpdate;window.webpackHotUpdate=function(e,n){!function(e,t){if(!S[e]||!b[e])return;for(var n in b[e]=!1,t)Object.prototype.hasOwnProperty.call(t,n)&&(h[n]=t[n]);0==--y&&0===v&&N()}(e,n),t&&t(e,n)};var n,o=!0,i="c1da30c244624ab134f6",r=1e4,a={},s=[],c=[];function l(e){var t=O[e];if(!t)return C;var o=function(o){return t.hot.active?(O[o]?-1===O[o].parents.indexOf(e)&&O[o].parents.push(e):(s=[e],n=o),-1===t.children.indexOf(o)&&t.children.push(o)):(console.warn("[HMR] unexpected require("+o+") from disposed module "+e),s=[]),C(o)},i=function(e){return{configurable:!0,enumerable:!0,get:function(){return C[e]},set:function(t){C[e]=t}}};for(var r in C)Object.prototype.hasOwnProperty.call(C,r)&&"e"!==r&&"t"!==r&&Object.defineProperty(o,r,i(r));return o.e=function(e){return"ready"===f&&p("prepare"),v++,C.e(e).then(t,(function(e){throw t(),e}));function t(){v--,"prepare"===f&&(g[e]||k(e),0===v&&0===y&&N())}},o.t=function(e,t){return 1&t&&(e=o(e)),C.t(e,-2&t)},o}function u(e){var t={_acceptedDependencies:{},_declinedDependencies:{},_selfAccepted:!1,_selfDeclined:!1,_disposeHandlers:[],_main:n!==e,active:!0,accept:function(e,n){if(void 0===e)t._selfAccepted=!0;else if("function"==typeof e)t._selfAccepted=e;else if("object"==typeof e)for(var o=0;o<e.length;o++)t._acceptedDependencies[e[o]]=n||function(){};else t._acceptedDependencies[e]=n||function(){}},decline:function(e){if(void 0===e)t._selfDeclined=!0;else if("object"==typeof e)for(var n=0;n<e.length;n++)t._declinedDependencies[e[n]]=!0;else t._declinedDependencies[e]=!0},dispose:function(e){t._disposeHandlers.push(e)},addDisposeHandler:function(e){t._disposeHandlers.push(e)},removeDisposeHandler:function(e){var n=t._disposeHandlers.indexOf(e);n>=0&&t._disposeHandlers.splice(n,1)},check:M,apply:I,status:function(e){if(!e)return f;d.push(e)},addStatusHandler:function(e){d.push(e)},removeStatusHandler:function(e){var t=d.indexOf(e);t>=0&&d.splice(t,1)},data:a[e]};return n=void 0,t}var d=[],f="idle";function p(e){f=e;for(var t=0;t<d.length;t++)d[t].call(null,e)}var m,h,w,y=0,v=0,g={},b={},S={};function j(e){return+e+""===e?+e:e}function M(e){if("idle"!==f)throw new Error("check() is only allowed in idle status");return o=e,p("check"),(t=r,t=t||1e4,new Promise((function(e,n){if("undefined"==typeof XMLHttpRequest)return n(new Error("No browser support"));try{var o=new XMLHttpRequest,r=C.p+""+i+".hot-update.json";o.open("GET",r,!0),o.timeout=t,o.send(null)}catch(e){return n(e)}o.onreadystatechange=function(){if(4===o.readyState)if(0===o.status)n(new Error("Manifest request to "+r+" timed out."));else if(404===o.status)e();else if(200!==o.status&&304!==o.status)n(new Error("Manifest request to "+r+" failed."));else{try{var t=JSON.parse(o.responseText)}catch(e){return void n(e)}e(t)}}}))).then((function(e){if(!e)return p("idle"),null;b={},g={},S=e.c,w=e.h,p("prepare");var t=new Promise((function(e,t){m={resolve:e,reject:t}}));h={};return k(0),"prepare"===f&&0===v&&0===y&&N(),t}));var t}function k(e){S[e]?(b[e]=!0,y++,function(e){var t=document.createElement("script");t.charset="utf-8",t.src=C.p+""+e+"."+i+".hot-update.js",document.head.appendChild(t)}(e)):g[e]=!0}function N(){p("ready");var e=m;if(m=null,e)if(o)Promise.resolve().then((function(){return I(o)})).then((function(t){e.resolve(t)}),(function(t){e.reject(t)}));else{var t=[];for(var n in h)Object.prototype.hasOwnProperty.call(h,n)&&t.push(j(n));e.resolve(t)}}function I(t){if("ready"!==f)throw new Error("apply() is only allowed in ready status");var n,o,r,c,l;function u(e){for(var t=[e],n={},o=t.map((function(e){return{chain:[e],id:e}}));o.length>0;){var i=o.pop(),r=i.id,a=i.chain;if((c=O[r])&&!c.hot._selfAccepted){if(c.hot._selfDeclined)return{type:"self-declined",chain:a,moduleId:r};if(c.hot._main)return{type:"unaccepted",chain:a,moduleId:r};for(var s=0;s<c.parents.length;s++){var l=c.parents[s],u=O[l];if(u){if(u.hot._declinedDependencies[r])return{type:"declined",chain:a.concat([l]),moduleId:r,parentId:l};-1===t.indexOf(l)&&(u.hot._acceptedDependencies[r]?(n[l]||(n[l]=[]),d(n[l],[r])):(delete n[l],t.push(l),o.push({chain:a.concat([l]),id:l})))}}}}return{type:"accepted",moduleId:e,outdatedModules:t,outdatedDependencies:n}}function d(e,t){for(var n=0;n<t.length;n++){var o=t[n];-1===e.indexOf(o)&&e.push(o)}}t=t||{};var m={},y=[],v={},g=function(){console.warn("[HMR] unexpected require("+M.moduleId+") to disposed module")};for(var b in h)if(Object.prototype.hasOwnProperty.call(h,b)){var M;l=j(b);var k=!1,N=!1,I=!1,P="";switch((M=h[b]?u(l):{type:"disposed",moduleId:b}).chain&&(P="\nUpdate propagation: "+M.chain.join(" -> ")),M.type){case"self-declined":t.onDeclined&&t.onDeclined(M),t.ignoreDeclined||(k=new Error("Aborted because of self decline: "+M.moduleId+P));break;case"declined":t.onDeclined&&t.onDeclined(M),t.ignoreDeclined||(k=new Error("Aborted because of declined dependency: "+M.moduleId+" in "+M.parentId+P));break;case"unaccepted":t.onUnaccepted&&t.onUnaccepted(M),t.ignoreUnaccepted||(k=new Error("Aborted because "+l+" is not accepted"+P));break;case"accepted":t.onAccepted&&t.onAccepted(M),N=!0;break;case"disposed":t.onDisposed&&t.onDisposed(M),I=!0;break;default:throw new Error("Unexception type "+M.type)}if(k)return p("abort"),Promise.reject(k);if(N)for(l in v[l]=h[l],d(y,M.outdatedModules),M.outdatedDependencies)Object.prototype.hasOwnProperty.call(M.outdatedDependencies,l)&&(m[l]||(m[l]=[]),d(m[l],M.outdatedDependencies[l]));I&&(d(y,[M.moduleId]),v[l]=g)}var D,A=[];for(o=0;o<y.length;o++)l=y[o],O[l]&&O[l].hot._selfAccepted&&v[l]!==g&&A.push({module:l,errorHandler:O[l].hot._selfAccepted});p("dispose"),Object.keys(S).forEach((function(e){!1===S[e]&&function(e){delete installedChunks[e]}(e)}));for(var E,q,F=y.slice();F.length>0;)if(l=F.pop(),c=O[l]){var B={},x=c.hot._disposeHandlers;for(r=0;r<x.length;r++)(n=x[r])(B);for(a[l]=B,c.hot.active=!1,delete O[l],delete m[l],r=0;r<c.children.length;r++){var _=O[c.children[r]];_&&((D=_.parents.indexOf(l))>=0&&_.parents.splice(D,1))}}for(l in m)if(Object.prototype.hasOwnProperty.call(m,l)&&(c=O[l]))for(q=m[l],r=0;r<q.length;r++)E=q[r],(D=c.children.indexOf(E))>=0&&c.children.splice(D,1);for(l in p("apply"),i=w,v)Object.prototype.hasOwnProperty.call(v,l)&&(e[l]=v[l]);var R=null;for(l in m)if(Object.prototype.hasOwnProperty.call(m,l)&&(c=O[l])){q=m[l];var T=[];for(o=0;o<q.length;o++)if(E=q[o],n=c.hot._acceptedDependencies[E]){if(-1!==T.indexOf(n))continue;T.push(n)}for(o=0;o<T.length;o++){n=T[o];try{n(q)}catch(e){t.onErrored&&t.onErrored({type:"accept-errored",moduleId:l,dependencyId:q[o],error:e}),t.ignoreErrored||R||(R=e)}}}for(o=0;o<A.length;o++){var $=A[o];l=$.module,s=[l];try{C(l)}catch(e){if("function"==typeof $.errorHandler)try{$.errorHandler(e)}catch(n){t.onErrored&&t.onErrored({type:"self-accept-error-handler-errored",moduleId:l,error:n,originalError:e}),t.ignoreErrored||R||(R=n),R||(R=e)}else t.onErrored&&t.onErrored({type:"self-accept-errored",moduleId:l,error:e}),t.ignoreErrored||R||(R=e)}}return R?(p("fail"),Promise.reject(R)):(p("idle"),new Promise((function(e){e(y)})))}var O={};function C(t){if(O[t])return O[t].exports;var n=O[t]={i:t,l:!1,exports:{},hot:u(t),parents:(c=s,s=[],c),children:[]};return e[t].call(n.exports,n,n.exports,l(t)),n.l=!0,n.exports}C.m=e,C.c=O,C.d=function(e,t,n){C.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},C.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},C.t=function(e,t){if(1&t&&(e=C(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(C.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)C.d(n,o,function(t){return e[t]}.bind(null,o));return n},C.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return C.d(t,"a",t),t},C.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},C.p="dist/",C.h=function(){return i},l(8)(C.s=8)}([function(e,t){e.exports=React},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";e.exports=n(6)},function(e,t){e.exports=ReactDOM},function(e,t,n){(function(e){!function(e){"use strict";function t(e,t,n,o){"function"==typeof t&&Object.setPrototypeOf(e,t),t===Error&&(n.stack={get:function(){return this.$__n4err.stack}},n.message={get:function(){return this.$__n4err.message}},n.name={get:function(){return e.n4type.name}}),Object.defineProperties(e,o);var i=Object.create(t.prototype,n);Object.defineProperty(i,"constructor",{value:e}),e.prototype=i}function n(e,t){Object.defineProperty(e,"n4type",{value:t,enumerable:!1}),t.ownedMembers.forEach((function(e){Object.defineProperty(e,"owner",{value:t,enumerable:!1})})),t.ownedMembers.forEach((function(e){e instanceof p&&(Object.defineProperty(e,"jsFunction",{value:e.constructor,enumerable:!1}),e.constructor.n4member=e)}))}function o(e){Object.defineProperty(e,"target",{value:this,enumerable:!1})}function i(e){e.annotations&&e.annotations.forEach(o,e)}var r=function(e){Object.prototype.constructor.call(this,e)},a=function(e){r.prototype.constructor.call(this,e),this.origin=e.origin,this.annotations=e.annotations||[],i(this)},s=function(e){a.prototype.constructor.call(this,e),this.name=e.name},c=function(e){s.prototype.constructor.call(this,e),this.fqn=e.fqn},l=function(e){c.prototype.constructor.call(this,e),this.n4superType=e.n4superType,this.allImplementedInterfaces=e.allImplementedInterfaces,this.annotations=e.annotations,this.ownedMembers=e.ownedMembers||[],this.consumedMembers=e.consumedMembers||[],this.ownedMembers.forEach((function(e){Object.defineProperty(e,"owner",{value:this,enumerable:!1}),i(e)}),this)},u=function(e){l.prototype.constructor.call(this,e)},d=function(e){l.prototype.constructor.call(this,e)},f=function(e){s.prototype.constructor.call(this,e),this.owner=e.owner,this.isStatic=e.isStatic||!1},p=function(e){f.prototype.constructor.call(this,e),this.jsFunction=e.jsFunction},m=function(e){f.prototype.constructor.call(this,e)},h=function(e){f.prototype.constructor.call(this,e),this.getter=e.getter},w=function(e){c.prototype.constructor.call(this,e)},y=function(e){Object.prototype.constructor.call(this,e)},v=function(e){c.prototype.constructor.call(this,e)},g=function(e){Object.prototype.constructor.call(this,e)},b=function(e){r.prototype.constructor.call(this,e),this.name=e.name,this.details=e.details,this.target=e.target},S=function(e){Object.prototype.constructor.call(this,e)},j=function(e){this.$__n4err=new Error(e)},M=function(e){Object.prototype.constructor.call(this,e)},k=function(e){Object.prototype.constructor.call(this,e)};t(r,Object,{},{}),t(a,r,{hasAnnotation:{value:function(e){return this.annotations.some((function(t){return t.name===e}))}},anyAnnotation:{value:function(e){for(var t=this.annotations.length-1;t>=0;t--){var n=this.annotations[t];if(n.name===e)return n}return null}},allAnnotations:{value:function(e){return this.annotations.filter((function(t){return t.name===e}))}}},{}),t(s,a,{},{}),t(c,s,{isClass:{get:function(){return!1}},isInterface:{get:function(){return!1}},isEnum:{get:function(){return!1}}},{of:{value:function(e){return e?e.n4type||e.constructor.n4type:void 0}}}),t(l,c,{members:{value:function(e,t,n){var o=this.ownedMembers.slice();if(e&&(o=o.concat(this.consumedMembers)),t&&this.n4superType instanceof l){var i=this.n4superType.members(e,t,n);o=o.concat(i)}return n||(o=o.filter((function(e){return!e.isStatic}))),o}},membersWithAnnotation:{value:function(e,t,n,o){return this.members(t,n,o).filter((function(t){return t.hasAnnotation(e)}))}},dataFields:{value:function(e,t,n){return this.members(e,t,n).filter((function(e){return e instanceof m}))}},dataFieldsWithAnnotation:{value:function(e,t,n,o){return this.membersWithAnnotation(e,t,n,o).filter((function(e){return e instanceof m}))}},methods:{value:function(e,t,n){return this.members(e,t,n).filter((function(e){return e instanceof p}))}},methodsWithAnnotation:{value:function(e,t,n,o){return this.membersWithAnnotation(e,t,n,o).filter((function(e){return e instanceof p}))}}},{}),t(u,l,{isClass:{get:function(){return!0}}},{}),t(d,l,{isInterface:{get:function(){return!0}}},{}),t(f,s,{},{}),t(p,f,{},{}),t(m,f,{},{}),t(h,f,{isGetter:{value:function(){return this.getter}},isSetter:{value:function(){return!this.getter}}},{}),t(w,c,{isEnum:{get:function(){return!0}}},{}),t(y,Object,{toString:{value:function(){return this.value}}},{findLiteralByName:{value:function(e){for(var t=this.literals.length-1;t>=0;t--)if(this.literals[t].name===e)return this.literals[t]}},findLiteralByValue:{value:function(e){for(var t=this.literals.length-1;t>=0;t--)if(this.literals[t].value===e)return this.literals[t]}}}),t(v,c,{isEnum:{get:function(){return!0}}},{}),t(g,Object,{toString:{value:function(){return this.value}}},{findLiteralByValue:{value:function(e){for(var t=this.literals.length-1;t>=0;t--)if(this.literals[t]===e)return this.literals[t]}}}),t(b,r,{},{}),t(j,Error,{},{}),n(r,new u({name:"N4Object",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Object",n4superType:r.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[],consumedMemebers:[]})),n(a,new u({name:"N4Element",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Element",n4superType:r.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"annotations",getter:!0}),new p({name:"hasAnnotation",jsFunction:a.hasAnnotation}),new p({name:"anyAnnotation",jsFunction:a.anyAnnotation}),new p({name:"allAnnotations",jsFunction:a.allAnnotations}),new h({name:"origin",getter:!0})],consumedMemebers:[]})),n(s,new u({name:"N4NamedElement",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4NamedElement",n4superType:a.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"name",getter:!0})],consumedMemebers:[]})),n(c,new u({name:"N4Type",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Type",n4superType:s.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"fqn",getter:!0}),new p({name:"of",jsFunction:c.of,isStatic:!0}),new h({name:"isClass",getter:!0}),new h({name:"isInterface",getter:!0}),new h({name:"isEnum",getter:!0})],consumedMemebers:[]})),n(l,new u({name:"N4Classifier",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Classifier",n4superType:c.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"n4superType",getter:!0}),new h({name:"allImplementedInterfaces",getter:!0}),new m({name:"ownedMembers"}),new m({name:"consumedMembers"}),new p({name:"constructor"}),new p({name:"members",jsFunction:l.members}),new p({name:"membersWithAnnotation",jsFunction:l.membersWithAnnotation}),new p({name:"dataFields",jsFunction:l.dataFields}),new p({name:"dataFieldsWithAnnotation",jsFunction:l.dataFieldsWithAnnotation}),new p({name:"methods",jsFunction:l.methods}),new p({name:"methodsWithAnnotation",jsFunction:l.methodsWithAnnotation})],consumedMemebers:[]})),n(u,new u({name:"N4Class",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Class",n4superType:l.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"isClass",getter:!0})],consumedMemebers:[]})),n(d,new u({name:"N4Interface",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Interface",n4superType:l.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"isInterface",getter:!0})],consumedMemebers:[]})),n(f,new u({name:"N4Member",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Member",n4superType:s.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"owner",getter:!0}),new h({name:"isStatic",getter:!0})],consumedMemebers:[]})),n(p,new u({name:"N4Method",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Method",n4superType:f.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"jsFunction",getter:!0})],consumedMemebers:[]})),n(m,new u({name:"N4DataField",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4DataField",n4superType:f.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[],consumedMemebers:[]})),n(h,new u({name:"N4Accessor",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Accessor",n4superType:f.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"getter"}),new p({name:"isGetter",jsFunction:h.isGetter}),new p({name:"isSetter",jsFunction:h.isSetter})],consumedMemebers:[]})),n(w,new u({name:"N4EnumType",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4EnumType",n4superType:c.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"isEnum",getter:!0})],consumedMemebers:[]})),n(y,new u({name:"N4Enum",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Enum",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new p({name:"toString",jsFunction:y.toString}),new p({name:"valueByName",jsFunction:y.valueByName,isStatic:!0}),new h({name:"name",getter:!0}),new h({name:"value",getter:!0}),new h({name:"values",getter:!0,isStatic:!0}),new h({name:"n4type",getter:!0})],consumedMemebers:[]})),n(v,new u({name:"N4StringBasedEnumType",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4StringBasedEnumType",n4superType:c.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"isEnum",getter:!0})],consumedMemebers:[]})),n(g,new u({name:"N4StringBasedEnum",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4StringBasedEnum",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new p({name:"toString",jsFunction:g.toString}),new p({name:"valueByName",jsFunction:g.valueByName,isStatic:!0}),new h({name:"name",getter:!0}),new h({name:"value",getter:!0}),new h({name:"values",getter:!0,isStatic:!0}),new h({name:"n4type",getter:!0})],consumedMemebers:[]})),n(b,new u({name:"N4Annotation",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Annotation",n4superType:r.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"name",getter:!0}),new h({name:"details",getter:!0}),new h({name:"target",getter:!0})],consumedMemebers:[]})),n(S,new d({name:"N4Provider",origin:"n4js-runtime",fqn:"N4BuiltInClasses/N4Provider",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new p({name:"get",jsFunction:S.get,annotations:[]})],consumedMembers:[]})),n(j,new u({name:"N4ApiNotImplementedError",origin:"N4BuiltInClasses",fqn:"N4BuiltInClasses/N4ApiNotImplementedError",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[],consumedMemebers:[]})),n(M,new d({name:"MigrationController",origin:"n4js-runtime",fqn:"N4BuiltInClasses/MigrationController",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new p({name:"migrate",isStatic:!1,annotations:[]}),new p({name:"migrateWith",isStatic:!1,annotations:[]}),new h({name:"context",getter:!0,isStatic:!1,annotations:[]})],consumedMembers:[]})),n(k,new d({name:"MigrationContext",origin:"n4js-runtime",fqn:"N4BuiltInClasses/MigrationContext",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new p({name:"getTrace",isStatic:!1,annotations:[]}),new p({name:"isModified",isStatic:!1,annotations:[]}),new p({name:"setUserData",isStatic:!1,annotations:[]}),new p({name:"getUserData",isStatic:!1,annotations:[]})],consumedMembers:[]})),Object.freeze(r),Object.freeze(a),Object.freeze(s),Object.freeze(c),Object.freeze(l),Object.freeze(u),Object.freeze(d),Object.freeze(f),Object.freeze(p),Object.freeze(m),Object.freeze(h),Object.freeze(w),Object.freeze(y),Object.freeze(v),Object.freeze(g),Object.freeze(S),Object.freeze(j),Object.freeze(M),Object.freeze(k),e.N4Object=r,e.N4Element=a,e.N4NamedElement=s,e.N4Type=c,e.N4Classifier=l,e.N4Class=u,e.N4Interface=d,e.N4Member=f,e.N4Method=p,e.N4DataField=m,e.N4Accessor=h,e.N4EnumType=w,e.N4Enum=y,e.N4StringBasedEnumType=v,e.N4StringBasedEnum=g,e.N4Annotation=b,e.N4Provider=S,e.N4ApiNotImplementedError=j,e.MigrationController=M,e.MigrationContext=k}("object"==typeof e?e:self)}).call(this,n(1))},function(e,t,n){(function(e){!function(e){"use strict";var t=Symbol.hasInstance,n=Array.prototype.slice,o=function(){};function i(e,t){var n;Object.defineProperty(e,"n4type",{configurable:!0,get:function(){return n||(n=t())}})}function r(e){var t=e&&e.name;!t||t in this||e.isStatic||!e.jsFunction||(this[t]=e.jsFunction.value)}function a(e){var t=e&&e.n4type;t&&(t.ownedMembers.forEach(r,this),t.consumedMembers.forEach(r,this))}e.$makeClass=function(e,t,n,o,r,s){"function"==typeof t&&Object.setPrototypeOf(e,t),Object.defineProperties(e,r);var c=Object.create(t.prototype,o);n.forEach(a,c),Object.defineProperty(c,"constructor",{value:e}),s&&i(e,s.bind(null,c,e)),e.prototype=c},e.$makeInterface=function(e,n,o){e.$extends=n||(()=>[]),o&&i(e,o.bind(null,e.$methods,e)),Object.defineProperty(e,t,{value:function(t){if(!(t&&t.constructor&&t.constructor.n4type&&t.constructor.n4type.allImplementedInterfaces))return!1;const n=e.n4type.fqn;return-1!==t.constructor.n4type.allImplementedInterfaces.indexOf(n)}})},e.$initFieldsFromInterfaces=function e(t,n,o,i){for(const r of n){const n=r.$fieldDefaults||{};for(const e of Object.getOwnPropertyNames(n)){if(t.hasOwnProperty(e)||i.hasOwnProperty(e))continue;let r=void 0;o&&(r=o[e]),void 0===r&&(r=n[e],"function"==typeof r&&(r=r.call(t))),t[e]=r}e(t,r.$extends(),o,i)}},e.$makeEnum=function(t,n,r){var a,s,c,l,u;for(Object.setPrototypeOf(t,e.N4Enum),t.prototype=Object.create(e.N4Enum.prototype,{}),r&&i(t,r.bind(null,o)),Object.defineProperty(t.prototype,"constructor",{value:t}),a=n.length,l=new Array(a),s=0;s<a;++s)u=new t((c=n[s])[0],c[1]),Object.defineProperty(t,u.name,{enumerable:!0,value:u}),l[s]=u;Object.defineProperty(t,"literals",{value:l})},e.$sliceToArrayForDestruct=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e)){for(var n,o=[],i=e[Symbol.iterator]();!((n=i.next()).done||(o.push(n.value),o.length>=t)););return o}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.$spawn=function(e){function t(e,t){var i;try{i=this[e](t)}catch(e){return Promise.reject(e)}return i.done?Promise.resolve(i.value):Promise.resolve(i.value).then(n,o)}var n=t.bind(e,"next"),o=t.bind(e,"throw");return n()},e.$n4promisifyFunction=function(e,t,o,i){return new Promise((function(r,a){t.push((function(e,t){i?r(o?n.call(arguments,0):e):e?a(e):r(o?n.call(arguments,1):t)})),e.apply(null,t)}))},e.$n4promisifyMethod=function(e,t,o,i,r){return new Promise((function(a,s){o.push((function(e,t){r?a(i?n.call(arguments,0):e):e?s(e):a(i?n.call(arguments,1):t)})),e[t].apply(e,o)}))}}("object"==typeof e?e:self)}).call(this,n(1))},function(e,t,n){"use strict";
+/** @license React v16.12.0
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
- */var o=n(9),i="function"==typeof Symbol&&Symbol.for,r=i?Symbol.for("react.element"):60103,s=i?Symbol.for("react.portal"):60106,a=i?Symbol.for("react.fragment"):60107,c=i?Symbol.for("react.strict_mode"):60108,l=i?Symbol.for("react.profiler"):60114,u=i?Symbol.for("react.provider"):60109,d=i?Symbol.for("react.context"):60110,p=i?Symbol.for("react.concurrent_mode"):60111,h=i?Symbol.for("react.forward_ref"):60112,f=i?Symbol.for("react.suspense"):60113,m=i?Symbol.for("react.memo"):60115,w=i?Symbol.for("react.lazy"):60116,y="function"==typeof Symbol&&Symbol.iterator;function v(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=0;o<t;o++)n+="&args[]="+encodeURIComponent(arguments[o+1]);!function(e,t,n,o,i,r,s,a){if(!e){if(e=void 0,void 0===t)e=Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,o,i,r,s,a],l=0;(e=Error(t.replace(/%s/g,function(){return c[l++]}))).name="Invariant Violation"}throw e.framesToPop=1,e}}(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b={};function k(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||g}function O(){}function M(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||g}k.prototype.isReactComponent={},k.prototype.setState=function(e,t){"object"!=typeof e&&"function"!=typeof e&&null!=e&&v("85"),this.updater.enqueueSetState(this,e,t,"setState")},k.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},O.prototype=k.prototype;var S=M.prototype=new O;S.constructor=M,o(S,k.prototype),S.isPureReactComponent=!0;var P={current:null},j={current:null},N=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};function C(e,t,n){var o=void 0,i={},s=null,a=null;if(null!=t)for(o in void 0!==t.ref&&(a=t.ref),void 0!==t.key&&(s=""+t.key),t)N.call(t,o)&&!I.hasOwnProperty(o)&&(i[o]=t[o]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];i.children=l}if(e&&e.defaultProps)for(o in c=e.defaultProps)void 0===i[o]&&(i[o]=c[o]);return{$$typeof:r,type:e,key:s,ref:a,props:i,_owner:j.current}}function D(e){return"object"==typeof e&&null!==e&&e.$$typeof===r}var q=/\/+/g,A=[];function B(e,t,n,o){if(A.length){var i=A.pop();return i.result=e,i.keyPrefix=t,i.func=n,i.context=o,i.count=0,i}return{result:e,keyPrefix:t,func:n,context:o,count:0}}function E(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>A.length&&A.push(e)}function F(e,t,n){return null==e?0:function e(t,n,o,i){var a=typeof t;"undefined"!==a&&"boolean"!==a||(t=null);var c=!1;if(null===t)c=!0;else switch(a){case"string":case"number":c=!0;break;case"object":switch(t.$$typeof){case r:case s:c=!0}}if(c)return o(i,t,""===n?"."+R(t,0):n),1;if(c=0,n=""===n?".":n+":",Array.isArray(t))for(var l=0;l<t.length;l++){var u=n+R(a=t[l],l);c+=e(a,u,o,i)}else if(u=null===t||"object"!=typeof t?null:"function"==typeof(u=y&&t[y]||t["@@iterator"])?u:null,"function"==typeof u)for(t=u.call(t),l=0;!(a=t.next()).done;)c+=e(a=a.value,u=n+R(a,l++),o,i);else"object"===a&&v("31","[object Object]"==(o=""+t)?"object with keys {"+Object.keys(t).join(", ")+"}":o,"");return c}(e,"",t,n)}function R(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}(e.key):t.toString(36)}function x(e,t){e.func.call(e.context,t,e.count++)}function _(e,t,n){var o=e.result,i=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?W(e,o,n,function(e){return e}):null!=e&&(D(e)&&(e=function(e,t){return{$$typeof:r,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,i+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(q,"$&/")+"/")+n)),o.push(e))}function W(e,t,n,o,i){var r="";null!=n&&(r=(""+n).replace(q,"$&/")+"/"),F(e,_,t=B(t,r,o,i)),E(t)}function T(){var e=P.current;return null===e&&v("321"),e}var $={Children:{map:function(e,t,n){if(null==e)return e;var o=[];return W(e,o,null,t,n),o},forEach:function(e,t,n){if(null==e)return e;F(e,x,t=B(null,null,t,n)),E(t)},count:function(e){return F(e,function(){return null},null)},toArray:function(e){var t=[];return W(e,t,null,function(e){return e}),t},only:function(e){return D(e)||v("143"),e}},createRef:function(){return{current:null}},Component:k,PureComponent:M,createContext:function(e,t){return void 0===t&&(t=null),(e={$$typeof:d,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:e},e.Consumer=e},forwardRef:function(e){return{$$typeof:h,render:e}},lazy:function(e){return{$$typeof:w,_ctor:e,_status:-1,_result:null}},memo:function(e,t){return{$$typeof:m,type:e,compare:void 0===t?null:t}},useCallback:function(e,t){return T().useCallback(e,t)},useContext:function(e,t){return T().useContext(e,t)},useEffect:function(e,t){return T().useEffect(e,t)},useImperativeHandle:function(e,t,n){return T().useImperativeHandle(e,t,n)},useDebugValue:function(){},useLayoutEffect:function(e,t){return T().useLayoutEffect(e,t)},useMemo:function(e,t){return T().useMemo(e,t)},useReducer:function(e,t,n){return T().useReducer(e,t,n)},useRef:function(e){return T().useRef(e)},useState:function(e){return T().useState(e)},Fragment:a,StrictMode:c,Suspense:f,createElement:C,cloneElement:function(e,t,n){null==e&&v("267",e);var i=void 0,s=o({},e.props),a=e.key,c=e.ref,l=e._owner;if(null!=t){void 0!==t.ref&&(c=t.ref,l=j.current),void 0!==t.key&&(a=""+t.key);var u=void 0;for(i in e.type&&e.type.defaultProps&&(u=e.type.defaultProps),t)N.call(t,i)&&!I.hasOwnProperty(i)&&(s[i]=void 0===t[i]&&void 0!==u?u[i]:t[i])}if(1===(i=arguments.length-2))s.children=n;else if(1<i){u=Array(i);for(var d=0;d<i;d++)u[d]=arguments[d+2];s.children=u}return{$$typeof:r,type:e.type,key:a,ref:c,props:s,_owner:l}},createFactory:function(e){var t=C.bind(null,e);return t.type=e,t},isValidElement:D,version:"16.8.6",unstable_ConcurrentMode:p,unstable_Profiler:l,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentDispatcher:P,ReactCurrentOwner:j,assign:o}},K={default:$},V=K&&$||K;e.exports=V.default||V},function(e,t,n){"use strict";
+ */var o=n(7),i="function"==typeof Symbol&&Symbol.for,r=i?Symbol.for("react.element"):60103,a=i?Symbol.for("react.portal"):60106,s=i?Symbol.for("react.fragment"):60107,c=i?Symbol.for("react.strict_mode"):60108,l=i?Symbol.for("react.profiler"):60114,u=i?Symbol.for("react.provider"):60109,d=i?Symbol.for("react.context"):60110,f=i?Symbol.for("react.forward_ref"):60112,p=i?Symbol.for("react.suspense"):60113;i&&Symbol.for("react.suspense_list");var m=i?Symbol.for("react.memo"):60115,h=i?Symbol.for("react.lazy"):60116;i&&Symbol.for("react.fundamental"),i&&Symbol.for("react.responder"),i&&Symbol.for("react.scope");var w="function"==typeof Symbol&&Symbol.iterator;function y(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var v={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||v}function S(){}function j(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||v}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(y(85));this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},S.prototype=b.prototype;var M=j.prototype=new S;M.constructor=j,o(M,b.prototype),M.isPureReactComponent=!0;var k={current:null},N={current:null},I=Object.prototype.hasOwnProperty,O={key:!0,ref:!0,__self:!0,__source:!0};function C(e,t,n){var o,i={},a=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)I.call(t,o)&&!O.hasOwnProperty(o)&&(i[o]=t[o]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];i.children=l}if(e&&e.defaultProps)for(o in c=e.defaultProps)void 0===i[o]&&(i[o]=c[o]);return{$$typeof:r,type:e,key:a,ref:s,props:i,_owner:N.current}}function P(e){return"object"==typeof e&&null!==e&&e.$$typeof===r}var D=/\/+/g,A=[];function E(e,t,n,o){if(A.length){var i=A.pop();return i.result=e,i.keyPrefix=t,i.func=n,i.context=o,i.count=0,i}return{result:e,keyPrefix:t,func:n,context:o,count:0}}function q(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>A.length&&A.push(e)}function F(e,t,n){return null==e?0:function e(t,n,o,i){var s=typeof t;"undefined"!==s&&"boolean"!==s||(t=null);var c=!1;if(null===t)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(t.$$typeof){case r:case a:c=!0}}if(c)return o(i,t,""===n?"."+B(t,0):n),1;if(c=0,n=""===n?".":n+":",Array.isArray(t))for(var l=0;l<t.length;l++){var u=n+B(s=t[l],l);c+=e(s,u,o,i)}else if(null===t||"object"!=typeof t?u=null:u="function"==typeof(u=w&&t[w]||t["@@iterator"])?u:null,"function"==typeof u)for(t=u.call(t),l=0;!(s=t.next()).done;)c+=e(s=s.value,u=n+B(s,l++),o,i);else if("object"===s)throw o=""+t,Error(y(31,"[object Object]"===o?"object with keys {"+Object.keys(t).join(", ")+"}":o,""));return c}(e,"",t,n)}function B(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,(function(e){return t[e]}))}(e.key):t.toString(36)}function x(e,t){e.func.call(e.context,t,e.count++)}function _(e,t,n){var o=e.result,i=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?R(e,o,n,(function(e){return e})):null!=e&&(P(e)&&(e=function(e,t){return{$$typeof:r,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,i+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(D,"$&/")+"/")+n)),o.push(e))}function R(e,t,n,o,i){var r="";null!=n&&(r=(""+n).replace(D,"$&/")+"/"),F(e,_,t=E(t,r,o,i)),q(t)}function T(){var e=k.current;if(null===e)throw Error(y(321));return e}var $={Children:{map:function(e,t,n){if(null==e)return e;var o=[];return R(e,o,null,t,n),o},forEach:function(e,t,n){if(null==e)return e;F(e,x,t=E(null,null,t,n)),q(t)},count:function(e){return F(e,(function(){return null}),null)},toArray:function(e){var t=[];return R(e,t,null,(function(e){return e})),t},only:function(e){if(!P(e))throw Error(y(143));return e}},createRef:function(){return{current:null}},Component:b,PureComponent:j,createContext:function(e,t){return void 0===t&&(t=null),(e={$$typeof:d,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:e},e.Consumer=e},forwardRef:function(e){return{$$typeof:f,render:e}},lazy:function(e){return{$$typeof:h,_ctor:e,_status:-1,_result:null}},memo:function(e,t){return{$$typeof:m,type:e,compare:void 0===t?null:t}},useCallback:function(e,t){return T().useCallback(e,t)},useContext:function(e,t){return T().useContext(e,t)},useEffect:function(e,t){return T().useEffect(e,t)},useImperativeHandle:function(e,t,n){return T().useImperativeHandle(e,t,n)},useDebugValue:function(){},useLayoutEffect:function(e,t){return T().useLayoutEffect(e,t)},useMemo:function(e,t){return T().useMemo(e,t)},useReducer:function(e,t,n){return T().useReducer(e,t,n)},useRef:function(e){return T().useRef(e)},useState:function(e){return T().useState(e)},Fragment:s,Profiler:l,StrictMode:c,Suspense:p,createElement:C,cloneElement:function(e,t,n){if(null==e)throw Error(y(267,e));var i=o({},e.props),a=e.key,s=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,c=N.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(u in t)I.call(t,u)&&!O.hasOwnProperty(u)&&(i[u]=void 0===t[u]&&void 0!==l?l[u]:t[u])}var u=arguments.length-2;if(1===u)i.children=n;else if(1<u){l=Array(u);for(var d=0;d<u;d++)l[d]=arguments[d+2];i.children=l}return{$$typeof:r,type:e.type,key:a,ref:s,props:i,_owner:c}},createFactory:function(e){var t=C.bind(null,e);return t.type=e,t},isValidElement:P,version:"16.12.0",__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentDispatcher:k,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:N,IsSomeRendererActing:{current:!1},assign:o}},W={default:$},K=W&&$||W;e.exports=K.default||K},function(e,t,n){"use strict";
/*
object-assign
(c) Sindre Sorhus
@license MIT
-*/var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(e){o[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,a=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c<arguments.length;c++){for(var l in n=Object(arguments[c]))i.call(n,l)&&(a[l]=n[l]);if(o){s=o(n);for(var u=0;u<s.length;u++)r.call(n,s[u])&&(a[s[u]]=n[s[u]])}}return a}},function(e,t,n){"use strict";n.r(t);n(1);var o=n(3);function i(e){this.row=e&&"row"in e?e.row:void 0,this.col=e&&"col"in e?e.col:void 0}function r(e){this.piece=e&&"piece"in e?e.piece:void 0,this.fromPos=e&&"fromPos"in e?e.fromPos:void 0,this.toPos=e&&"toPos"in e?e.toPos:void 0}$makeClass(i,N4Object,[],{equals:{value:function(e){return this.row==e.row&&this.col==e.col}},getBoardCoordinateRepresentation:{value:function(){return`(${8-this.row+","+String.fromCharCode("a".charCodeAt(0)+this.col)})`}},toString:{value:function(){return`(${this.row},${this.col})`}},row:{value:void 0,writable:!0},col:{value:void 0,writable:!0}},{},function(e,t){return new N4Class({name:"Coordinate",origin:"chess-react",fqn:"Coordinate.Coordinate",n4superType:N4Object.n4type,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"row",isStatic:!1,annotations:[]}),new N4DataField({name:"col",isStatic:!1,annotations:[]}),new N4Method({name:"constructor",isStatic:!1,jsFunction:e.constructor,annotations:[]}),new N4Method({name:"equals",isStatic:!1,jsFunction:e.equals,annotations:[]}),new N4Method({name:"getBoardCoordinateRepresentation",isStatic:!1,jsFunction:e.getBoardCoordinateRepresentation,annotations:[]}),new N4Method({name:"toString",isStatic:!1,jsFunction:e.toString,annotations:[]})],consumedMembers:[],annotations:[]})}),$makeClass(r,N4Object,[],{toString:{value:function(){return this.piece+" "+this.fromPos.getBoardCoordinateRepresentation()+"→"+this.toPos.getBoardCoordinateRepresentation()}},piece:{value:void 0,writable:!0},fromPos:{value:void 0,writable:!0},toPos:{value:void 0,writable:!0}},{},function(e,t){return new N4Class({name:"Move",origin:"chess-react",fqn:"Move.Move",n4superType:N4Object.n4type,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"piece",isStatic:!1,annotations:[]}),new N4DataField({name:"fromPos",isStatic:!1,annotations:[]}),new N4DataField({name:"toPos",isStatic:!1,annotations:[]}),new N4Method({name:"constructor",isStatic:!1,jsFunction:e.constructor,annotations:[]}),new N4Method({name:"toString",isStatic:!1,jsFunction:e.toString,annotations:[]})],consumedMembers:[],annotations:[]})});var s=n(0),a={$fieldInit:function(e,t){e?t.hasOwnProperty("label")||this.hasOwnProperty("label")||(this.label="label"in e?e.label:void 0):t.hasOwnProperty("label")||this.hasOwnProperty("label")||(this.label=void 0)},$methods:{}};$makeInterface(a,function(e,t){return new N4Interface({name:"CoordinateSquareProps",origin:"chess-react",fqn:"components.CoordinateSquare.CoordinateSquareProps",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"label",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})});const c={fontSize:"2vw",textAlign:"center",display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%"};function l(e){s.Component.prototype.constructor.call(this,e)}$makeClass(l,s.Component,[],{render:{value:function(){return s.createElement("div",Object.assign({style:c}),this.props.label)}}},{},function(e,t){return new N4Class({name:"LabelSquare",origin:"chess-react",fqn:"components.CoordinateSquare.LabelSquare",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4Method({name:"render",isStatic:!1,jsFunction:e.render,annotations:[]})],consumedMembers:[],annotations:[]})}),Object.defineProperty(l,"$di",{value:{superType:s.Component,fieldsInjectedTypes:[]}});var u={$fieldInit:function(e,t){e?(t.hasOwnProperty("isWhite")||this.hasOwnProperty("isWhite")||(this.isWhite="isWhite"in e?e.isWhite:void 0),t.hasOwnProperty("piece")||this.hasOwnProperty("piece")||(this.piece="piece"in e?e.piece:void 0),t.hasOwnProperty("onClick")||this.hasOwnProperty("onClick")||(this.onClick="onClick"in e?e.onClick:void 0),t.hasOwnProperty("isPicked")||this.hasOwnProperty("isPicked")||(this.isPicked="isPicked"in e?e.isPicked:void 0),t.hasOwnProperty("isValidDestination")||this.hasOwnProperty("isValidDestination")||(this.isValidDestination="isValidDestination"in e?e.isValidDestination:void 0)):(t.hasOwnProperty("isWhite")||this.hasOwnProperty("isWhite")||(this.isWhite=void 0),t.hasOwnProperty("piece")||this.hasOwnProperty("piece")||(this.piece=void 0),t.hasOwnProperty("onClick")||this.hasOwnProperty("onClick")||(this.onClick=void 0),t.hasOwnProperty("isPicked")||this.hasOwnProperty("isPicked")||(this.isPicked=void 0),t.hasOwnProperty("isValidDestination")||this.hasOwnProperty("isValidDestination")||(this.isValidDestination=void 0))},$methods:{}};$makeInterface(u,function(e,t){return new N4Interface({name:"SquareProps",origin:"chess-react",fqn:"components.Square.SquareProps",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"isWhite",isStatic:!1,annotations:[]}),new N4DataField({name:"piece",isStatic:!1,annotations:[]}),new N4DataField({name:"onClick",isStatic:!1,annotations:[]}),new N4DataField({name:"isPicked",isStatic:!1,annotations:[]}),new N4DataField({name:"isValidDestination",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})});const d={display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",fontSize:"5vw"};function p(e){let t=e.isWhite?"#EADAB9":"#C2A482";return e.isPicked?t="lime":e.isValidDestination&&(t="yellow"),s.createElement("div",Object.assign({style:Object.assign({},d,{backgroundColor:t}),onClick:e.onClick}),e.piece)}var h={$fieldInit:function(e,t){e?(t.hasOwnProperty("squares")||this.hasOwnProperty("squares")||(this.squares="squares"in e?e.squares:void 0),t.hasOwnProperty("pickedSquare")||this.hasOwnProperty("pickedSquare")||(this.pickedSquare="pickedSquare"in e?e.pickedSquare:void 0),t.hasOwnProperty("validDestinations")||this.hasOwnProperty("validDestinations")||(this.validDestinations="validDestinations"in e?e.validDestinations:void 0),t.hasOwnProperty("onClick")||this.hasOwnProperty("onClick")||(this.onClick="onClick"in e?e.onClick:void 0)):(t.hasOwnProperty("squares")||this.hasOwnProperty("squares")||(this.squares=void 0),t.hasOwnProperty("pickedSquare")||this.hasOwnProperty("pickedSquare")||(this.pickedSquare=void 0),t.hasOwnProperty("validDestinations")||this.hasOwnProperty("validDestinations")||(this.validDestinations=void 0),t.hasOwnProperty("onClick")||this.hasOwnProperty("onClick")||(this.onClick=void 0))},$methods:{}};$makeInterface(h,function(e,t){return new N4Interface({name:"BoardProps",origin:"chess-react",fqn:"components.Board.BoardProps",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"squares",isStatic:!1,annotations:[]}),new N4DataField({name:"pickedSquare",isStatic:!1,annotations:[]}),new N4DataField({name:"validDestinations",isStatic:!1,annotations:[]}),new N4DataField({name:"onClick",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})});const f={display:"flex",flexWrap:"wrap",width:"100%",height:"100%"},m={width:"10%",height:"10%"};function w(e){s.Component.prototype.constructor.call(this,e)}$makeClass(w,s.Component,[],{renderSquare:{value:function(e,t,n,o,i){return s.createElement("div",Object.assign({style:m}),s.createElement(p,Object.assign({isWhite:t,isPicked:n,isValidDestination:o,piece:i,onClick:()=>this.props.onClick(e)})))}},renderCoordinateSquare:{value:function(e){return s.createElement("div",Object.assign({style:m}),s.createElement(l,Object.assign({label:e})))}},renderSquares:{value:function(){const e=new Array;let t=!0;e.push(this.renderCoordinateSquare(""));for(let t=0;t<8;t++)e.push(this.renderCoordinateSquare(String.fromCharCode("a".charCodeAt(0)+t)));e.push(this.renderCoordinateSquare(""));for(let n=0;n<8;n++){e.push(this.renderCoordinateSquare((8-n).toString()));let o=t;for(let t=0;t<8;t++){const r=new i({row:n,col:t}),s=this.props.validDestinations.findIndex(e=>e.equals(r))>=0;e.push(this.renderSquare(r,o,!(!this.props.pickedSquare||!this.props.pickedSquare.equals(r)),s,this.props.squares[r.row][r.col])),o=!o}t=!t,e.push(this.renderCoordinateSquare((8-n).toString()))}e.push(this.renderCoordinateSquare(""));for(let t=0;t<8;t++)e.push(this.renderCoordinateSquare(String.fromCharCode("a".charCodeAt(0)+t)));return e.push(this.renderCoordinateSquare("")),e}},render:{value:function(){return s.createElement("div",Object.assign({style:f}),this.renderSquares())}}},{},function(e,t){return new N4Class({name:"Board",origin:"chess-react",fqn:"components.Board.Board",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4Method({name:"renderSquare",isStatic:!1,jsFunction:e.renderSquare,annotations:[]}),new N4Method({name:"renderCoordinateSquare",isStatic:!1,jsFunction:e.renderCoordinateSquare,annotations:[]}),new N4Method({name:"renderSquares",isStatic:!1,jsFunction:e.renderSquares,annotations:[]}),new N4Method({name:"render",isStatic:!1,jsFunction:e.render,annotations:[]})],consumedMembers:[],annotations:[]})}),Object.defineProperty(w,"$di",{value:{superType:s.Component,fieldsInjectedTypes:[]}});var y={$fieldInit:function(e,t){e?(t.hasOwnProperty("squares")||this.hasOwnProperty("squares")||(this.squares="squares"in e?e.squares:void 0),t.hasOwnProperty("lastMoves")||this.hasOwnProperty("lastMoves")||(this.lastMoves="lastMoves"in e?e.lastMoves:void 0),t.hasOwnProperty("whiteKingMoved")||this.hasOwnProperty("whiteKingMoved")||(this.whiteKingMoved="whiteKingMoved"in e?e.whiteKingMoved:void 0),t.hasOwnProperty("leftWhiteRookMoved")||this.hasOwnProperty("leftWhiteRookMoved")||(this.leftWhiteRookMoved="leftWhiteRookMoved"in e?e.leftWhiteRookMoved:void 0),t.hasOwnProperty("rightWhiteRookMoved")||this.hasOwnProperty("rightWhiteRookMoved")||(this.rightWhiteRookMoved="rightWhiteRookMoved"in e?e.rightWhiteRookMoved:void 0),t.hasOwnProperty("blackKingMoved")||this.hasOwnProperty("blackKingMoved")||(this.blackKingMoved="blackKingMoved"in e?e.blackKingMoved:void 0),t.hasOwnProperty("leftBlackRookMoved")||this.hasOwnProperty("leftBlackRookMoved")||(this.leftBlackRookMoved="leftBlackRookMoved"in e?e.leftBlackRookMoved:void 0),t.hasOwnProperty("rightBlackRookMoved")||this.hasOwnProperty("rightBlackRookMoved")||(this.rightBlackRookMoved="rightBlackRookMoved"in e?e.rightBlackRookMoved:void 0)):(t.hasOwnProperty("squares")||this.hasOwnProperty("squares")||(this.squares=void 0),t.hasOwnProperty("lastMoves")||this.hasOwnProperty("lastMoves")||(this.lastMoves=void 0),t.hasOwnProperty("whiteKingMoved")||this.hasOwnProperty("whiteKingMoved")||(this.whiteKingMoved=void 0),t.hasOwnProperty("leftWhiteRookMoved")||this.hasOwnProperty("leftWhiteRookMoved")||(this.leftWhiteRookMoved=void 0),t.hasOwnProperty("rightWhiteRookMoved")||this.hasOwnProperty("rightWhiteRookMoved")||(this.rightWhiteRookMoved=void 0),t.hasOwnProperty("blackKingMoved")||this.hasOwnProperty("blackKingMoved")||(this.blackKingMoved=void 0),t.hasOwnProperty("leftBlackRookMoved")||this.hasOwnProperty("leftBlackRookMoved")||(this.leftBlackRookMoved=void 0),t.hasOwnProperty("rightBlackRookMoved")||this.hasOwnProperty("rightBlackRookMoved")||(this.rightBlackRookMoved=void 0))},$methods:{}};$makeInterface(y,function(e,t){return new N4Interface({name:"Snapshot",origin:"chess-react",fqn:"components.Game.Snapshot",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"squares",isStatic:!1,annotations:[]}),new N4DataField({name:"lastMoves",isStatic:!1,annotations:[]}),new N4DataField({name:"whiteKingMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"leftWhiteRookMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"rightWhiteRookMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"blackKingMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"leftBlackRookMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"rightBlackRookMoved",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})});var v={};function g(e){s.Component.prototype.constructor.call(this,e);this.state={history:[{squares:[["♖","♘","♗","♕","♔","♗","♘","♖"],["♙","♙","♙","♙","♙","♙","♙","♙"],[null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null],["♟","♟","♟","♟","♟","♟","♟","♟"],["♜","♞","♝","♛","♚","♝","♞","♜"]],lastMoves:new Array,whiteKingMoved:!1,leftWhiteRookMoved:!1,rightWhiteRookMoved:!1,blackKingMoved:!1,leftBlackRookMoved:!1,rightBlackRookMoved:!1}],stepNumber:0,whiteIsNext:!0,pickedSquare:null,validDestinations:new Array}}v.$fieldInit=function(e,t){e?(t.hasOwnProperty("history")||this.hasOwnProperty("history")||(this.history="history"in e?e.history:void 0),t.hasOwnProperty("stepNumber")||this.hasOwnProperty("stepNumber")||(this.stepNumber="stepNumber"in e?e.stepNumber:void 0),t.hasOwnProperty("whiteIsNext")||this.hasOwnProperty("whiteIsNext")||(this.whiteIsNext="whiteIsNext"in e?e.whiteIsNext:void 0),t.hasOwnProperty("pickedSquare")||this.hasOwnProperty("pickedSquare")||(this.pickedSquare="pickedSquare"in e?e.pickedSquare:void 0),t.hasOwnProperty("validDestinations")||this.hasOwnProperty("validDestinations")||(this.validDestinations="validDestinations"in e?e.validDestinations:void 0)):(t.hasOwnProperty("history")||this.hasOwnProperty("history")||(this.history=void 0),t.hasOwnProperty("stepNumber")||this.hasOwnProperty("stepNumber")||(this.stepNumber=void 0),t.hasOwnProperty("whiteIsNext")||this.hasOwnProperty("whiteIsNext")||(this.whiteIsNext=void 0),t.hasOwnProperty("pickedSquare")||this.hasOwnProperty("pickedSquare")||(this.pickedSquare=void 0),t.hasOwnProperty("validDestinations")||this.hasOwnProperty("validDestinations")||(this.validDestinations=void 0))},v.$methods={},$makeInterface(v,function(e,t){return new N4Interface({name:"GameState",origin:"chess-react",fqn:"components.Game.GameState",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"history",isStatic:!1,annotations:[]}),new N4DataField({name:"stepNumber",isStatic:!1,annotations:[]}),new N4DataField({name:"whiteIsNext",isStatic:!1,annotations:[]}),new N4DataField({name:"pickedSquare",isStatic:!1,annotations:[]}),new N4DataField({name:"validDestinations",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})}),$makeClass(g,s.Component,[],{handleClick:{value:function(e){const t=e.row,n=e.col,o=this.state.history.slice(0,this.state.stepNumber+1),i=o[o.length-1],s=this.state.pickedSquare;let a=i.squares;if(this.calculateWinner(a))return;const c=a[t][n];if(this.isWhitepiece(c)&&this.state.whiteIsNext||this.isBlackpiece(c)&&!this.state.whiteIsNext){const t=this.calculateValidDestinations(a,c,e);return void this.setState({pickedSquare:e,validDestinations:t})}if(!s)return;const l=new r({piece:a[s.row][s.col],fromPos:s,toPos:e});if(this.isValidMove(a,l)){const{squares:e,moves:t}=this.move(l);let n=i.whiteKingMoved,r=i.leftWhiteRookMoved,a=i.rightWhiteRookMoved,c=i.blackKingMoved,u=i.leftBlackRookMoved,d=i.rightBlackRookMoved;this.isWhitepiece(l.piece)?(n=n||"♔"==l.piece,r=r||"♖"==l.piece&&0==s.col,a=a||"♖"==l.piece&&7==s.col):(c=c||"♚"==l.piece,u=u||"♜"==l.piece&&0==s.col,d=d||"♜"==l.piece&&7==s.col),this.setState({history:o.concat([{squares:e,lastMoves:t,whiteKingMoved:n,leftWhiteRookMoved:r,rightWhiteRookMoved:a,blackKingMoved:c,leftBlackRookMoved:u,rightBlackRookMoved:d}]),stepNumber:o.length,whiteIsNext:!this.state.whiteIsNext,pickedSquare:null,validDestinations:new Array})}else this.setState({pickedSquare:null,validDestinations:new Array})}},goToStep:{value:function(e){this.setState({stepNumber:e,whiteIsNext:e%2==0,pickedSquare:null,validDestinations:new Array})}},getAllPiecesSameColor:{value:function(e,t){const n=new Array;for(let o=0;o<8;o++)for(let r=0;r<8;r++)(t&&this.isWhitepiece(e[o][r])||!t&&this.isBlackpiece(e[o][r]))&&n.push({piece:e[o][r],pos:new i({row:o,col:r})});return n}},forAll:{value:function(e,t){return e.reduce((e,n)=>e&&t(n),!0)}},calculateWinner:{value:function(e){const t=this.state.whiteIsNext,n=this.getAllPiecesSameColor(e,t);return this.forAll(n,t=>0==this.calculateValidDestinations(e,t.piece,t.pos).length)?t?"Black":"White":null}},calculateValidDestinations:{value:function(e,t,n){const o=this.calculateAttackedDestinations(e,t,n),s=this.isWhitepiece(t);if("♙"==t||"♟"==t)if(s&&n.row<7){const t=new i({row:n.row+1,col:n.col});if(e[t.row][t.col]||o.push(t),n.row<=1){const r=new i({row:n.row+2,col:n.col});e[t.row][t.col]||e[r.row][r.col]||o.push(r)}}else if(!s&&n.row>0){const t=new i({row:n.row-1,col:n.col});if(e[t.row][t.col]||o.push(t),n.row>=6){const r=new i({row:n.row-2,col:n.col});e[t.row][t.col]||e[r.row][r.col]||o.push(r)}}const a=this.state.history[this.state.stepNumber];return"♔"==t&&s&&!a.whiteKingMoved?(a.leftWhiteRookMoved||e[n.row][n.col-1]||e[n.row][n.col-2]||e[n.row][n.col-3]||o.push(new i({row:n.row,col:n.col-2})),a.rightWhiteRookMoved||e[n.row][n.col+1]||e[n.row][n.col+2]||o.push(new i({row:n.row,col:n.col+2}))):"♚"!=t||s||a.blackKingMoved||(a.leftBlackRookMoved||e[n.row][n.col-1]||e[n.row][n.col-2]||e[n.row][n.col-3]||o.push(new i({row:n.row,col:n.col-2})),a.rightBlackRookMoved||e[n.row][n.col+1]||e[n.row][n.col+2]||o.push(new i({row:n.row,col:n.col+2}))),o.filter(e=>!this.isKingInCheckIfMove(new r({piece:t,fromPos:n,toPos:e})))}},isValidMove:{value:function(e,t){return this.calculateValidDestinations(e,t.piece,t.fromPos).findIndex(e=>e.equals(t.toPos))>=0}},isInsideBoard:{value:function(e){return 0<=e.row&&e.row<8&&0<=e.col&&e.col<8}},calculateKnightAttackingDestinations:{value:function(e,t,n){return[[-1,-2],[-2,-1],[-2,1],[-1,2],[1,2],[2,1],[2,-1],[1,-2]].map(e=>new i({row:n.row+e[0],col:n.col+e[1]})).filter(n=>this.isInsideBoard(n)&&!this.isPositionOccupiedBypieceSameColor(e,t,n))}},calculateRookAttackingDestinations:{value:function(e,t,n){const o=n.row,r=n.col,s=new Array,a=[[-1,0],[1,0],[0,-1],[0,1]];for(let n of a){let a=new i({row:o+n[0],col:r+n[1]});for(;this.isInsideBoard(a);){if(e[a.row][a.col]){if(this.isPositionOccupiedBypieceSameColor(e,t,a))break;if(this.isPositionOccupiedBypieceOtherColor(e,t,a)){s.push(a);break}}else s.push(a);a=new i({row:a.row+n[0],col:a.col+n[1]})}}return s}},calculateBishopAttackingDestinations:{value:function(e,t,n){const o=n.row,r=n.col,s=new Array,a=[[-1,-1],[-1,1],[1,1],[1,-1]];for(let n of a){let a=new i({row:o+n[0],col:r+n[1]});for(;this.isInsideBoard(a);){if(e[a.row][a.col]){if(this.isPositionOccupiedBypieceSameColor(e,t,a))break;if(this.isPositionOccupiedBypieceOtherColor(e,t,a)){s.push(a);break}}else s.push(a);a=new i({row:a.row+n[0],col:a.col+n[1]})}}return s}},calculateQueenAttackingDestinations:{value:function(e,t,n){return this.isWhitepiece(t)?this.calculateRookAttackingDestinations(e,"♖",n).concat(this.calculateBishopAttackingDestinations(e,"♗",n)):this.calculateRookAttackingDestinations(e,"♜",n).concat(this.calculateBishopAttackingDestinations(e,"♝",n))}},calculateKingAttackingDestinations:{value:function(e,t,n){return[[-1,-1],[-1,0],[-1,1],[0,1],[1,1],[1,0],[1,-1],[0,-1]].map(e=>new i({row:n.row+e[0],col:n.col+e[1]})).filter(n=>this.isInsideBoard(n)&&!this.isPositionOccupiedBypieceSameColor(e,t,n))}},calculatePawnAttackingDestinations:{value:function(e,t,n){const o=new Array,r=this.isWhitepiece(t);if(r&&n.row<7)for(let r of[1,-1]){const s=new i({row:n.row+1,col:n.col+r});this.isInsideBoard(s)&&this.isPositionOccupiedBypieceOtherColor(e,t,s)&&o.push(s)}else if(!r&&n.row>0)for(let r of[1,-1]){const s=new i({row:n.row-1,col:n.col+r});this.isInsideBoard(s)&&this.isPositionOccupiedBypieceOtherColor(e,t,s)&&o.push(s)}return o}},calculateAttackedDestinations:{value:function(e,t,n){let o=new Array;switch(t){case"♘":case"♞":o=this.calculateKnightAttackingDestinations(e,t,n);break;case"♖":case"♜":o=this.calculateRookAttackingDestinations(e,t,n);break;case"♗":case"♝":o=this.calculateBishopAttackingDestinations(e,t,n);break;case"♕":case"♛":o=this.calculateQueenAttackingDestinations(e,t,n);break;case"♔":case"♚":o=this.calculateKingAttackingDestinations(e,t,n);break;case"♔":case"♚":o=this.calculateKingAttackingDestinations(e,t,n);break;case"♙":case"♟":o=this.calculatePawnAttackingDestinations(e,t,n)}return o}},isKingInCheckIfMove:{value:function(e){const{squares:t}=this.move(e),n=this.isWhitepiece(e.piece),o=this.getKingPosition(t,n);return!!o&&this.isKingInCheck(t,n?"♔":"♚",o)}},isKingInCheck:{value:function(e,t,n){if("♔"!=t&&"♚"!=t)throw"The input piece is not a king";const o="♔"==t?this.getPiecesOfSameColor(e,!1):this.getPiecesOfSameColor(e,!0);let i=new Array;for(let t of o){const n=this.calculateAttackedDestinations(e,t.piece,t.pos);i=i.concat(n)}return!!i.find(e=>e.equals(n))}},getPiecesOfSameColor:{value:function(e,t){const n=new Array;for(let o=0;o<e.length;o++)for(let r=0;r<e[o].length;r++)(t?this.isWhitepiece(e[o][r]):this.isBlackpiece(e[o][r]))&&n.push({piece:e[o][r],pos:new i({row:o,col:r})});return n}},getKingPosition:{value:function(e,t){for(let n=0;n<e.length;n++)for(let o=0;o<e[n].length;o++)if(t?"♔"==e[n][o]:"♚"==e[n][o])return new i({row:n,col:o});return null}},isPositionOccupiedBypieceSameColor:{value:function(e,t,n){const o=this.isWhitepiece(t);return!(!o||!this.isWhitepiece(e[n.row][n.col]))||!(o||!this.isBlackpiece(e[n.row][n.col]))}},isPositionOccupiedBypieceOtherColor:{value:function(e,t,n){const o=this.isWhitepiece(t);return!(!o||!this.isBlackpiece(e[n.row][n.col]))||!(o||!this.isWhitepiece(e[n.row][n.col]))}},getCurrentSnapshot:{value:function(){return this.state.history[this.state.stepNumber]}},move:{value:function(e){const t=e.piece,n=e.fromPos,o=e.toPos,s=this.getCurrentSnapshot().squares,a=s.map(e=>e.slice()),c=new Array;if(this.isCastlingMove(t,n,o)){let e,l;c.push(new r({piece:t,fromPos:new i({row:n.row,col:n.col}),toPos:new i({row:o.row,col:o.col})})),a[o.row][o.col]=t,a[n.row][n.col]=null,"♔"==t?o.col<n.col?(e=new i({row:0,col:0}),l=new i({row:0,col:3})):(e=new i({row:0,col:7}),l=new i({row:0,col:5})):o.col<n.col?(e=new i({row:7,col:0}),l=new i({row:7,col:3})):(e=new i({row:7,col:7}),l=new i({row:7,col:5})),c.push(new r({piece:s[e.row][e.col],fromPos:e,toPos:l})),a[l.row][l.col]=s[e.row][e.col],a[e.row][e.col]=null}else{const t=s[n.row][n.col];a[o.row][o.col]=t,a[n.row][n.col]=null,c.push(e)}return{squares:a,moves:c}}},isCastlingMove:{value:function(e,t,n){const o=this.getCurrentSnapshot();return"♔"==e&&!o.whiteKingMoved&&2==Math.abs(n.col-t.col)||"♚"==e&&!o.blackKingMoved&&2==Math.abs(n.col-t.col)}},isLeftWhiteRook:{value:function(e,t){return"♖"==e&&0==t.row&&0==t.col}},isWhitepiece:{value:function(e){switch(e){case"♙":case"♖":case"♘":case"♗":case"♕":case"♔":return!0;default:return!1}}},isBlackpiece:{value:function(e){switch(e){case"♟":case"♜":case"♞":case"♝":case"♛":case"♚":return!0;default:return!1}}},render:{value:function(){const e=this.state.history,t=e[this.state.stepNumber],n=this.calculateWinner(t.squares),o=e.map((e,t)=>{const n=t?"Go to move #"+t:"Go to game start",o={textAlign:"center",verticalAlign:"middle",padding:"5px",position:"relative"};return s.createElement(s.Fragment,null,s.createElement("tr",null,s.createElement("td",Object.assign({style:o}),t),s.createElement("td",Object.assign({style:o}),e.lastMoves.join(",")),s.createElement("td",Object.assign({style:o}),s.createElement("button",Object.assign({style:{backgroundColor:"green",border:"none",color:"white",padding:"4px",textAlign:"center",textDecoration:"none",display:"inline-block"},onClick:()=>this.goToStep(t)}),n))))});let i;i=n?"Winner: "+n:"Next player: "+(this.state.whiteIsNext?"White":"Black");return s.createElement("div",Object.assign({style:{display:"flex",flexDirection:"row"}}),s.createElement("div",Object.assign({style:{width:"60vw",height:"60vw"}}),s.createElement(w,Object.assign({squares:t.squares,pickedSquare:this.state.pickedSquare,validDestinations:this.state.validDestinations,onClick:e=>this.handleClick(e)}))),s.createElement("div",Object.assign({style:{marginTop:"20px",marginLeft:"20px",width:"40vw",fontSize:"1.5vw"}}),s.createElement("div",null,i),s.createElement("p",null),s.createElement("table",Object.assign({style:{width:"100%"}}),s.createElement("tr",null,s.createElement("th",Object.assign({style:{width:"10%"}}),"Step"),s.createElement("th",Object.assign({style:{width:"45%"}}),"Move"),s.createElement("th",Object.assign({style:{width:"45%"}}),"Action")),o)))}}},{},function(e,t){return new N4Class({name:"Game",origin:"chess-react",fqn:"components.Game.Game",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4Method({name:"constructor",isStatic:!1,jsFunction:e.constructor,annotations:[]}),new N4Method({name:"handleClick",isStatic:!1,jsFunction:e.handleClick,annotations:[]}),new N4Method({name:"goToStep",isStatic:!1,jsFunction:e.goToStep,annotations:[]}),new N4Method({name:"getAllPiecesSameColor",isStatic:!1,jsFunction:e.getAllPiecesSameColor,annotations:[]}),new N4Method({name:"forAll",isStatic:!1,jsFunction:e.forAll,annotations:[]}),new N4Method({name:"calculateWinner",isStatic:!1,jsFunction:e.calculateWinner,annotations:[]}),new N4Method({name:"calculateValidDestinations",isStatic:!1,jsFunction:e.calculateValidDestinations,annotations:[]}),new N4Method({name:"isValidMove",isStatic:!1,jsFunction:e.isValidMove,annotations:[]}),new N4Method({name:"isInsideBoard",isStatic:!1,jsFunction:e.isInsideBoard,annotations:[]}),new N4Method({name:"calculateKnightAttackingDestinations",isStatic:!1,jsFunction:e.calculateKnightAttackingDestinations,annotations:[]}),new N4Method({name:"calculateRookAttackingDestinations",isStatic:!1,jsFunction:e.calculateRookAttackingDestinations,annotations:[]}),new N4Method({name:"calculateBishopAttackingDestinations",isStatic:!1,jsFunction:e.calculateBishopAttackingDestinations,annotations:[]}),new N4Method({name:"calculateQueenAttackingDestinations",isStatic:!1,jsFunction:e.calculateQueenAttackingDestinations,annotations:[]}),new N4Method({name:"calculateKingAttackingDestinations",isStatic:!1,jsFunction:e.calculateKingAttackingDestinations,annotations:[]}),new N4Method({name:"calculatePawnAttackingDestinations",isStatic:!1,jsFunction:e.calculatePawnAttackingDestinations,annotations:[]}),new N4Method({name:"calculateAttackedDestinations",isStatic:!1,jsFunction:e.calculateAttackedDestinations,annotations:[]}),new N4Method({name:"isKingInCheckIfMove",isStatic:!1,jsFunction:e.isKingInCheckIfMove,annotations:[]}),new N4Method({name:"isKingInCheck",isStatic:!1,jsFunction:e.isKingInCheck,annotations:[]}),new N4Method({name:"getPiecesOfSameColor",isStatic:!1,jsFunction:e.getPiecesOfSameColor,annotations:[]}),new N4Method({name:"getKingPosition",isStatic:!1,jsFunction:e.getKingPosition,annotations:[]}),new N4Method({name:"isPositionOccupiedBypieceSameColor",isStatic:!1,jsFunction:e.isPositionOccupiedBypieceSameColor,annotations:[]}),new N4Method({name:"isPositionOccupiedBypieceOtherColor",isStatic:!1,jsFunction:e.isPositionOccupiedBypieceOtherColor,annotations:[]}),new N4Method({name:"getCurrentSnapshot",isStatic:!1,jsFunction:e.getCurrentSnapshot,annotations:[]}),new N4Method({name:"move",isStatic:!1,jsFunction:e.move,annotations:[]}),new N4Method({name:"isCastlingMove",isStatic:!1,jsFunction:e.isCastlingMove,annotations:[]}),new N4Method({name:"isLeftWhiteRook",isStatic:!1,jsFunction:e.isLeftWhiteRook,annotations:[]}),new N4Method({name:"isWhitepiece",isStatic:!1,jsFunction:e.isWhitepiece,annotations:[]}),new N4Method({name:"isBlackpiece",isStatic:!1,jsFunction:e.isBlackpiece,annotations:[]}),new N4Method({name:"render",isStatic:!1,jsFunction:e.render,annotations:[]})],consumedMembers:[],annotations:[]})}),Object.defineProperty(g,"$di",{value:{superType:s.Component,fieldsInjectedTypes:[]}}),n(4).render(o.createElement(g,null),document.getElementById("chessAppMountPoint"))}]);
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiUmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbjRqcy1ydW50aW1lL3NyYy1nZW4vcnQuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiUmVhY3RET01cIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbjRqcy1ydW50aW1lL3NyYy1nZW4vcnQvTjRCdWlsdEluQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbjRqcy1ydW50aW1lL3NyYy1nZW4vcnQvTjRSdW50aW1lQm9vdHN0cmFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9uNGpzLXJ1bnRpbWUvc3JjLWdlbiBsYXp5IG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMtZ2VuL0Nvb3JkaW5hdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjLWdlbi9Nb3ZlLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vY29tcG9uZW50cy9Db29yZGluYXRlU3F1YXJlLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vY29tcG9uZW50cy9TcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjLWdlbi9jb21wb25lbnRzL0JvYXJkLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vY29tcG9uZW50cy9HYW1lLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vbWFpbi5qcyJdLCJuYW1lcyI6WyJwYXJlbnRIb3RVcGRhdGVDYWxsYmFjayIsIndpbmRvdyIsImNodW5rSWQiLCJtb3JlTW9kdWxlcyIsImhvdEF2YWlsYWJsZUZpbGVzTWFwIiwiaG90UmVxdWVzdGVkRmlsZXNNYXAiLCJtb2R1bGVJZCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImhvdFVwZGF0ZSIsImhvdFdhaXRpbmdGaWxlcyIsImhvdENodW5rc0xvYWRpbmciLCJob3RVcGRhdGVEb3dubG9hZGVkIiwiaG90QWRkVXBkYXRlQ2h1bmsiLCJob3RDdXJyZW50Q2hpbGRNb2R1bGUiLCJob3RBcHBseU9uVXBkYXRlIiwiaG90Q3VycmVudEhhc2giLCJob3RSZXF1ZXN0VGltZW91dCIsImhvdEN1cnJlbnRNb2R1bGVEYXRhIiwiaG90Q3VycmVudFBhcmVudHMiLCJob3RDdXJyZW50UGFyZW50c1RlbXAiLCJob3RDcmVhdGVSZXF1aXJlIiwibWUiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsImZuIiwicmVxdWVzdCIsImhvdCIsImFjdGl2ZSIsInBhcmVudHMiLCJpbmRleE9mIiwicHVzaCIsImNoaWxkcmVuIiwiY29uc29sZSIsIndhcm4iLCJPYmplY3RGYWN0b3J5IiwibmFtZSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJnZXQiLCJzZXQiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZSIsImhvdFN0YXR1cyIsImhvdFNldFN0YXR1cyIsInRoZW4iLCJmaW5pc2hDaHVua0xvYWRpbmciLCJlcnIiLCJob3RXYWl0aW5nRmlsZXNNYXAiLCJob3RFbnN1cmVVcGRhdGVDaHVuayIsInQiLCJtb2RlIiwiaG90Q3JlYXRlTW9kdWxlIiwiX2FjY2VwdGVkRGVwZW5kZW5jaWVzIiwiX2RlY2xpbmVkRGVwZW5kZW5jaWVzIiwiX3NlbGZBY2NlcHRlZCIsIl9zZWxmRGVjbGluZWQiLCJfZGlzcG9zZUhhbmRsZXJzIiwiX21haW4iLCJhY2NlcHQiLCJkZXAiLCJjYWxsYmFjayIsInVuZGVmaW5lZCIsImkiLCJsZW5ndGgiLCJkZWNsaW5lIiwiZGlzcG9zZSIsImFkZERpc3Bvc2VIYW5kbGVyIiwicmVtb3ZlRGlzcG9zZUhhbmRsZXIiLCJpZHgiLCJzcGxpY2UiLCJjaGVjayIsImhvdENoZWNrIiwiYXBwbHkiLCJob3RBcHBseSIsInN0YXR1cyIsImwiLCJob3RTdGF0dXNIYW5kbGVycyIsImFkZFN0YXR1c0hhbmRsZXIiLCJyZW1vdmVTdGF0dXNIYW5kbGVyIiwiZGF0YSIsIm5ld1N0YXR1cyIsImhvdERlZmVycmVkIiwiaG90VXBkYXRlTmV3SGFzaCIsInRvTW9kdWxlSWQiLCJpZCIsIkVycm9yIiwicmVxdWVzdFRpbWVvdXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIlhNTEh0dHBSZXF1ZXN0IiwicmVxdWVzdFBhdGgiLCJwIiwib3BlbiIsInRpbWVvdXQiLCJzZW5kIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInVwZGF0ZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsImMiLCJoIiwicHJvbWlzZSIsInNjcmlwdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNoYXJzZXQiLCJzcmMiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJob3REb3dubG9hZFVwZGF0ZUNodW5rIiwiZGVmZXJyZWQiLCJyZXN1bHQiLCJvdXRkYXRlZE1vZHVsZXMiLCJvcHRpb25zIiwiY2IiLCJqIiwibW9kdWxlIiwiZ2V0QWZmZWN0ZWRTdHVmZiIsInVwZGF0ZU1vZHVsZUlkIiwib3V0ZGF0ZWREZXBlbmRlbmNpZXMiLCJxdWV1ZSIsInNsaWNlIiwibWFwIiwiY2hhaW4iLCJxdWV1ZUl0ZW0iLCJwb3AiLCJ0eXBlIiwicGFyZW50SWQiLCJwYXJlbnQiLCJjb25jYXQiLCJhZGRBbGxUb1NldCIsImEiLCJiIiwiaXRlbSIsImFwcGxpZWRVcGRhdGUiLCJ3YXJuVW5leHBlY3RlZFJlcXVpcmUiLCJhYm9ydEVycm9yIiwiZG9BcHBseSIsImRvRGlzcG9zZSIsImNoYWluSW5mbyIsImpvaW4iLCJvbkRlY2xpbmVkIiwiaWdub3JlRGVjbGluZWQiLCJvblVuYWNjZXB0ZWQiLCJpZ25vcmVVbmFjY2VwdGVkIiwib25BY2NlcHRlZCIsIm9uRGlzcG9zZWQiLCJvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMiLCJlcnJvckhhbmRsZXIiLCJrZXlzIiwiZm9yRWFjaCIsImluc3RhbGxlZENodW5rcyIsImhvdERpc3Bvc2VDaHVuayIsImRlcGVuZGVuY3kiLCJtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyIsImRpc3Bvc2VIYW5kbGVycyIsImNoaWxkIiwibW9kdWxlcyIsImVycm9yIiwiY2FsbGJhY2tzIiwib25FcnJvcmVkIiwiZGVwZW5kZW5jeUlkIiwiaWdub3JlRXJyb3JlZCIsImVycjIiLCJvcmlnaW5hbEVycm9yIiwiZXhwb3J0cyIsIm0iLCJkIiwiZ2V0dGVyIiwibyIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJzIiwiUmVhY3QiLCJnbG9iYWwiLCJfbjRqc0ltcG9ydCIsInBhdGgiLCJzZWxmIiwiZyIsInRoaXMiLCJGdW5jdGlvbiIsIlJlYWN0RE9NIiwiJG1ha2VONEJ1aWx0SW5DbGFzcyIsImN0b3IiLCJzdXBlckN0b3IiLCJpbnN0YW5jZU1ldGhvZHMiLCJzdGF0aWNNZXRob2RzIiwic2V0UHJvdG90eXBlT2YiLCJzdGFjayIsIiRfX240ZXJyIiwibWVzc2FnZSIsIm40dHlwZSIsImRlZmluZVByb3BlcnRpZXMiLCJwcm90byIsIiRjcmVhdGVNZXRhSW5mbyIsIm1ldGFDbGFzcyIsIm93bmVkTWVtYmVycyIsIk40TWV0aG9kIiwiY29uc3RydWN0b3IiLCJuNG1lbWJlciIsImRlZmluZVRhcmdldFByb3AiLCJhbm5vdGF0aW9uIiwic2V0VGFyZ2V0T2ZBbm5vdGF0aW9ucyIsInRhcmdldCIsImFubm90YXRpb25zIiwiTjRPYmplY3QiLCJzcGVjIiwiTjRFbGVtZW50Iiwib3JpZ2luIiwiTjROYW1lZEVsZW1lbnQiLCJONFR5cGUiLCJmcW4iLCJONENsYXNzaWZpZXIiLCJuNHN1cGVyVHlwZSIsImFsbEltcGxlbWVudGVkSW50ZXJmYWNlcyIsImNvbnN1bWVkTWVtYmVycyIsIk40Q2xhc3MiLCJONEludGVyZmFjZSIsIk40TWVtYmVyIiwib3duZXIiLCJpc1N0YXRpYyIsImpzRnVuY3Rpb24iLCJONERhdGFGaWVsZCIsIk40QWNjZXNzb3IiLCJONEVudW1UeXBlIiwiTjRFbnVtIiwiTjRTdHJpbmdCYXNlZEVudW1UeXBlIiwiTjRTdHJpbmdCYXNlZEVudW0iLCJONEFubm90YXRpb24iLCJkZXRhaWxzIiwiTjRQcm92aWRlciIsIk40QXBpTm90SW1wbGVtZW50ZWRFcnJvciIsIk1pZ3JhdGlvbkNvbnRyb2xsZXIiLCJNaWdyYXRpb25Db250ZXh0IiwiaGFzQW5ub3RhdGlvbiIsInNvbWUiLCJhbnlBbm5vdGF0aW9uIiwiYWxsQW5ub3RhdGlvbnMiLCJmaWx0ZXIiLCJpc0NsYXNzIiwiaXNJbnRlcmZhY2UiLCJpc0VudW0iLCJvZiIsIm40b2JqZWN0IiwibWVtYmVycyIsImNvbnN1bWVkIiwiaW5oZXJpdGVkIiwiX3N0YXRpYyIsImFyciIsInRtcCIsIm1lbWJlcnNXaXRoQW5ub3RhdGlvbiIsImRhdGFGaWVsZHMiLCJkYXRhRmllbGRzV2l0aEFubm90YXRpb24iLCJtZXRob2RzIiwibWV0aG9kc1dpdGhBbm5vdGF0aW9uIiwiaXNHZXR0ZXIiLCJpc1NldHRlciIsInRvU3RyaW5nIiwiZmluZExpdGVyYWxCeU5hbWUiLCJsaXRlcmFscyIsImZpbmRMaXRlcmFsQnlWYWx1ZSIsImNvbnN1bWVkTWVtZWJlcnMiLCJmcmVlemUiLCJBcnJheVNsaWNlIiwiQXJyYXkiLCJub29wIiwiX19SRUFDVF9IT1RfTE9BREVSX18iLCJwcm9wcyIsImsiLCJwcm9wIiwid3JpdGFibGUiLCJtaXhpbkRlZmF1bHRNZXRob2QiLCJtZXRob2QiLCJtaXhpbkRlZmF1bHRNZXRob2RzIiwiaWZhY2UiLCIkaW1wbGVtZW50cyIsImluc3RhbmNlIiwiaW1wbGVtZW50ZWRJbnRlcmZhY2UiLCIkbWFrZUNsYXNzIiwiaW1wbGVtZW50ZWRJbnRlcmZhY2VzIiwibjR0eXBlRm4iLCIkbWFrZUludGVyZmFjZSIsInRpbnRlcmZhY2UiLCIkbWV0aG9kcyIsIiRtYWtlRW51bSIsImVudW1lcmF0aW9uIiwic3RyaW5nQmFzZWQiLCJpbmRleCIsIm1lbWJlciIsInZhbHVlcyIsImxpdGVyYWwiLCIkaW5zdGFuY2VvZiIsInN1cGVydHlwZSIsIiRzbGljZVRvQXJyYXlGb3JEZXN0cnVjdCIsIm1heCIsImlzQXJyYXkiLCJpdGVyYXRvciIsImVudHJ5IiwicmV0IiwiaXQiLCJuZXh0IiwiZG9uZSIsIlR5cGVFcnJvciIsIiRzcGF3biIsImdlbiIsImV4ZWMiLCJzdGVwIiwidiIsInJlcyIsImV4YyIsInRocm93ciIsIiRuNHByb21pc2lmeUZ1bmN0aW9uIiwiY2JCYXNlZEZuIiwiYXJncyIsIm11bHRpU3VjY2Vzc1ZhbHVlcyIsIm5vRXJyb3JWYWx1ZSIsInJlc3VsdDAiLCJyZXN1bHQxIiwiYXJndW1lbnRzIiwiJG40cHJvbWlzaWZ5TWV0aG9kIiwicmVjZWl2ZXIiLCJtZXRob2ROYW1lIiwid2VicGFja0VtcHR5QXN5bmNDb250ZXh0IiwicmVxIiwiY29kZSIsImZvciIsInEiLCJ1IiwidyIsIngiLCJ5IiwieiIsImFhIiwiYmEiLCJBIiwiQiIsImVuY29kZVVSSUNvbXBvbmVudCIsImYiLCJyZXBsYWNlIiwiZnJhbWVzVG9Qb3AiLCJjYSIsIkMiLCJpc01vdW50ZWQiLCJlbnF1ZXVlRm9yY2VVcGRhdGUiLCJlbnF1ZXVlUmVwbGFjZVN0YXRlIiwiZW5xdWV1ZVNldFN0YXRlIiwiRCIsIkUiLCJjb250ZXh0IiwicmVmcyIsInVwZGF0ZXIiLCJGIiwiRyIsImlzUmVhY3RDb21wb25lbnQiLCJzZXRTdGF0ZSIsImZvcmNlVXBkYXRlIiwiSCIsImlzUHVyZVJlYWN0Q29tcG9uZW50IiwiSSIsImN1cnJlbnQiLCJKIiwiSyIsIkwiLCJyZWYiLCJfX3NlbGYiLCJfX3NvdXJjZSIsIk0iLCJkZWZhdWx0UHJvcHMiLCIkJHR5cGVvZiIsIl9vd25lciIsIk4iLCJPIiwiUCIsIlEiLCJrZXlQcmVmaXgiLCJmdW5jIiwiY291bnQiLCJSIiwiVSIsIlMiLCJUIiwiPSIsIjoiLCJlc2NhcGUiLCJlYSIsImZhIiwiViIsImRhIiwiVyIsIlgiLCJDaGlsZHJlbiIsInRvQXJyYXkiLCJvbmx5IiwiY3JlYXRlUmVmIiwiQ29tcG9uZW50IiwiUHVyZUNvbXBvbmVudCIsImNyZWF0ZUNvbnRleHQiLCJfY2FsY3VsYXRlQ2hhbmdlZEJpdHMiLCJfY3VycmVudFZhbHVlIiwiX2N1cnJlbnRWYWx1ZTIiLCJfdGhyZWFkQ291bnQiLCJQcm92aWRlciIsIkNvbnN1bWVyIiwiX2NvbnRleHQiLCJmb3J3YXJkUmVmIiwicmVuZGVyIiwibGF6eSIsIl9jdG9yIiwiX3N0YXR1cyIsIl9yZXN1bHQiLCJtZW1vIiwiY29tcGFyZSIsInVzZUNhbGxiYWNrIiwidXNlQ29udGV4dCIsInVzZUVmZmVjdCIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJ1c2VEZWJ1Z1ZhbHVlIiwidXNlTGF5b3V0RWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZHVjZXIiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkZyYWdtZW50IiwiU3RyaWN0TW9kZSIsIlN1c3BlbnNlIiwiY2xvbmVFbGVtZW50IiwiY3JlYXRlRmFjdG9yeSIsImlzVmFsaWRFbGVtZW50IiwidmVyc2lvbiIsInVuc3RhYmxlX0NvbmN1cnJlbnRNb2RlIiwidW5zdGFibGVfUHJvZmlsZXIiLCJfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCIsIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCJSZWFjdEN1cnJlbnRPd25lciIsImFzc2lnbiIsIlkiLCJkZWZhdWx0IiwiWiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BJc0VudW1lcmFibGUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRlc3QxIiwiU3RyaW5nIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInRlc3QyIiwiZnJvbUNoYXJDb2RlIiwidGVzdDMiLCJzcGxpdCIsImxldHRlciIsInNob3VsZFVzZU5hdGl2ZSIsInNvdXJjZSIsImZyb20iLCJzeW1ib2xzIiwidG8iLCJ2YWwiLCJ0b09iamVjdCIsIkNvb3JkaW5hdGUiLCJyb3ciLCJjb2wiLCJNb3ZlIiwicGllY2UiLCJmcm9tUG9zIiwidG9Qb3MiLCJlcXVhbHMiLCJvdGhlciIsImdldEJvYXJkQ29vcmRpbmF0ZVJlcHJlc2VudGF0aW9uIiwiY2hhckNvZGVBdCIsImluc3RhbmNlUHJvdG8iLCJzdGF0aWNQcm90byIsIkNvb3JkaW5hdGVTcXVhcmVQcm9wcyIsIiRmaWVsZEluaXQiLCJtaXhpbkV4Y2x1c2lvbiIsImxhYmVsIiwibGFiZWxTcXVhcmVTdHlsZXMiLCJmb250U2l6ZSIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJqdXN0aWZ5Q29udGVudCIsImFsaWduSXRlbXMiLCJ3aWR0aCIsImhlaWdodCIsIkxhYmVsU3F1YXJlIiwiZXh0ZXJuYWxfUmVhY3RfIiwic3R5bGUiLCJzdXBlclR5cGUiLCJmaWVsZHNJbmplY3RlZFR5cGVzIiwiU3F1YXJlUHJvcHMiLCJpc1doaXRlIiwib25DbGljayIsImlzUGlja2VkIiwiaXNWYWxpZERlc3RpbmF0aW9uIiwiYm9hcmRTcXVhcmVTdHlsZXMiLCJTcXVhcmUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJCb2FyZFByb3BzIiwic3F1YXJlcyIsInBpY2tlZFNxdWFyZSIsInZhbGlkRGVzdGluYXRpb25zIiwiYm9hcmRTdHlsZXMiLCJmbGV4V3JhcCIsInNxdWFyZVN0eWxlcyIsIkJvYXJkIiwicmVuZGVyU3F1YXJlIiwicG9zIiwicmVuZGVyQ29vcmRpbmF0ZVNxdWFyZSIsInJlbmRlclNxdWFyZXMiLCJpc1doaXRlSW5pdGlhbCIsImlzUG90ZW50aWFsRGVzdGluYXRpb24iLCJmaW5kSW5kZXgiLCJwb3RlbnRpYWxEZXN0IiwiU25hcHNob3QiLCJsYXN0TW92ZXMiLCJ3aGl0ZUtpbmdNb3ZlZCIsImxlZnRXaGl0ZVJvb2tNb3ZlZCIsInJpZ2h0V2hpdGVSb29rTW92ZWQiLCJibGFja0tpbmdNb3ZlZCIsImxlZnRCbGFja1Jvb2tNb3ZlZCIsInJpZ2h0QmxhY2tSb29rTW92ZWQiLCJHYW1lU3RhdGUiLCJHYW1lIiwic3RhdGUiLCJoaXN0b3J5Iiwic3RlcE51bWJlciIsIndoaXRlSXNOZXh0IiwiaGFuZGxlQ2xpY2siLCJzZWxlY3RlZFBvcyIsImNhbGN1bGF0ZVdpbm5lciIsImN1cnJlbnRwaWVjZSIsImlzV2hpdGVwaWVjZSIsImlzQmxhY2twaWVjZSIsImNhbGN1bGF0ZVZhbGlkRGVzdGluYXRpb25zIiwiYXR0ZW1wdGVkTW92ZSIsImlzVmFsaWRNb3ZlIiwibmV3U3F1YXJlcyIsIm1vdmVzIiwibW92ZSIsImdvVG9TdGVwIiwiZ2V0QWxsUGllY2VzU2FtZUNvbG9yIiwiZm9yQWxsIiwicHJlZGljYXRlIiwicmVkdWNlIiwiYWNjIiwiZWxlbSIsImFsbFBpZWNlcyIsImNhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zIiwibmV4dFBvcyIsIm5leHROZXh0UG9zIiwiaXNLaW5nSW5DaGVja0lmTW92ZSIsImlzSW5zaWRlQm9hcmQiLCJjb29yZCIsImNhbGN1bGF0ZUtuaWdodEF0dGFja2luZ0Rlc3RpbmF0aW9ucyIsImRlbHRhIiwiaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZVNhbWVDb2xvciIsImNhbGN1bGF0ZVJvb2tBdHRhY2tpbmdEZXN0aW5hdGlvbnMiLCJkZWx0YXMiLCJuZXdQb3MiLCJpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlT3RoZXJDb2xvciIsImNhbGN1bGF0ZUJpc2hvcEF0dGFja2luZ0Rlc3RpbmF0aW9ucyIsImNhbGN1bGF0ZVF1ZWVuQXR0YWNraW5nRGVzdGluYXRpb25zIiwiY2FsY3VsYXRlS2luZ0F0dGFja2luZ0Rlc3RpbmF0aW9ucyIsImNhbGN1bGF0ZVBhd25BdHRhY2tpbmdEZXN0aW5hdGlvbnMiLCJkYyIsImF0dGFja1BvcyIsImNoYW5nZWRTcXVhcmVzIiwia2luZ1BvcyIsImdldEtpbmdQb3NpdGlvbiIsImlzS2luZ0luQ2hlY2siLCJraW5nIiwib3Bwb25lbnRwaWVjZXMiLCJnZXRQaWVjZXNPZlNhbWVDb2xvciIsIm9wcG9uZW50cGllY2UiLCJmaW5kIiwid2hpdGUiLCJnZXRDdXJyZW50U25hcHNob3QiLCJyb3dzIiwiaXNDYXN0bGluZ01vdmUiLCJyb29rRnJvbVBvcyIsInJvb2tUb1BvcyIsImN1cnJlbnRTbmFwc2hvdCIsIk1hdGgiLCJhYnMiLCJpc0xlZnRXaGl0ZVJvb2siLCJ3aW5uZXIiLCJzbmFwc2hvdCIsImFjdGlvbkxhYmVsIiwidGFibGVDZWxsU3R5bGVzIiwidmVydGljYWxBbGlnbiIsInBhZGRpbmciLCJwb3NpdGlvbiIsImJvcmRlciIsImNvbG9yIiwidGV4dERlY29yYXRpb24iLCJmbGV4RGlyZWN0aW9uIiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsInJlYWN0IiwiZ2V0RWxlbWVudEJ5SWQiXSwibWFwcGluZ3MiOiJhQUdBLElBQUFBLEVBQUFDLE9BQUEsaUJBQ0FBLE9BQUEsaUJBQ0EsU0FBQUMsRUFBQUMsSUFnUkEsU0FBQUQsRUFBQUMsR0FDQSxJQUFBQyxFQUFBRixLQUFBRyxFQUFBSCxHQUNBLE9BRUEsUUFBQUksS0FEQUQsRUFBQUgsSUFBQSxFQUNBQyxFQUNBSSxPQUFBQyxVQUFBQyxlQUFBQyxLQUFBUCxFQUFBRyxLQUNBSyxFQUFBTCxHQUFBSCxFQUFBRyxJQUdBLEtBQUFNLEdBQUEsSUFBQUMsR0FDQUMsSUF6UkFDLENBQUFiLEVBQUFDLEdBQ0FILEtBQUFFLEVBQUFDLElBdURBLElBS0FhLEVBTEFDLEdBQUEsRUFFQUMsRUFBQSx1QkFDQUMsRUFBQSxJQUNBQyxFQUFBLEdBR0FDLEVBQUEsR0FFQUMsRUFBQSxHQUdBLFNBQUFDLEVBQUFqQixHQUNBLElBQUFrQixFQUFBQyxFQUFBbkIsR0FDQSxJQUFBa0IsRUFBQSxP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QUEsRUFDQUMsV0FBQXNQLEVBQUEsT0FDQXZRLFlBQUEsTUFHQVcsZ0JBQUEsR0FDQVgsWUFBQSxPQUlBck4sT0FBQXFDLGVBQUEyZSxFQUFBLE9BQ0E1ZSxNQUFBLENBQ0F5YyxVQUFhRixFQUFBLFVBQ2JHLG9CQUFBLFdDaHZDQSxPQUFnQjhHLEVBQUEsY0FBb0I1RSxFQUFJLE1BQUF6YSxTQUFBc2YsZUFBQSIsImZpbGUiOiJjaGVzcy1hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHRmdW5jdGlvbiBob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCkge1xuIFx0XHRkZWxldGUgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuIFx0fVxuIFx0dmFyIHBhcmVudEhvdFVwZGF0ZUNhbGxiYWNrID0gd2luZG93W1wid2VicGFja0hvdFVwZGF0ZVwiXTtcbiBcdHdpbmRvd1tcIndlYnBhY2tIb3RVcGRhdGVcIl0gPSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdGZ1bmN0aW9uIHdlYnBhY2tIb3RVcGRhdGVDYWxsYmFjayhjaHVua0lkLCBtb3JlTW9kdWxlcykge1xuIFx0XHRob3RBZGRVcGRhdGVDaHVuayhjaHVua0lkLCBtb3JlTW9kdWxlcyk7XG4gXHRcdGlmIChwYXJlbnRIb3RVcGRhdGVDYWxsYmFjaykgcGFyZW50SG90VXBkYXRlQ2FsbGJhY2soY2h1bmtJZCwgbW9yZU1vZHVsZXMpO1xuIFx0fSA7XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKSB7XG4gXHRcdHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuIFx0XHRzY3JpcHQuY2hhcnNldCA9IFwidXRmLThcIjtcbiBcdFx0c2NyaXB0LnNyYyA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIFwiXCIgKyBjaHVua0lkICsgXCIuXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNcIjtcbiBcdFx0aWYgKG51bGwpIHNjcmlwdC5jcm9zc09yaWdpbiA9IG51bGw7XG4gXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3REb3dubG9hZE1hbmlmZXN0KHJlcXVlc3RUaW1lb3V0KSB7XG4gXHRcdHJlcXVlc3RUaW1lb3V0ID0gcmVxdWVzdFRpbWVvdXQgfHwgMTAwMDA7XG4gXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiBcdFx0XHRpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gXHRcdFx0XHRyZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIk5vIGJyb3dzZXIgc3VwcG9ydFwiKSk7XG4gXHRcdFx0fVxuIFx0XHRcdHRyeSB7XG4gXHRcdFx0XHR2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuIFx0XHRcdFx0dmFyIHJlcXVlc3RQYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgXCJcIiArIGhvdEN1cnJlbnRIYXNoICsgXCIuaG90LXVwZGF0ZS5qc29uXCI7XG4gXHRcdFx0XHRyZXF1ZXN0Lm9wZW4oXCJHRVRcIiwgcmVxdWVzdFBhdGgsIHRydWUpO1xuIFx0XHRcdFx0cmVxdWVzdC50aW1lb3V0ID0gcmVxdWVzdFRpbWVvdXQ7XG4gXHRcdFx0XHRyZXF1ZXN0LnNlbmQobnVsbCk7XG4gXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4gXHRcdFx0XHRyZXR1cm4gcmVqZWN0KGVycik7XG4gXHRcdFx0fVxuIFx0XHRcdHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gXHRcdFx0XHRpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG4gXHRcdFx0XHRpZiAocmVxdWVzdC5zdGF0dXMgPT09IDApIHtcbiBcdFx0XHRcdFx0Ly8gdGltZW91dFxuIFx0XHRcdFx0XHRyZWplY3QoXG4gXHRcdFx0XHRcdFx0bmV3IEVycm9yKFwiTWFuaWZlc3QgcmVxdWVzdCB0byBcIiArIHJlcXVlc3RQYXRoICsgXCIgdGltZWQgb3V0LlwiKVxuIFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0fSBlbHNlIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gNDA0KSB7XG4gXHRcdFx0XHRcdC8vIG5vIHVwZGF0ZSBhdmFpbGFibGVcbiBcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuIFx0XHRcdFx0fSBlbHNlIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwICYmIHJlcXVlc3Quc3RhdHVzICE9PSAzMDQpIHtcbiBcdFx0XHRcdFx0Ly8gb3RoZXIgZmFpbHVyZVxuIFx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiTWFuaWZlc3QgcmVxdWVzdCB0byBcIiArIHJlcXVlc3RQYXRoICsgXCIgZmFpbGVkLlwiKSk7XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHQvLyBzdWNjZXNzXG4gXHRcdFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRcdFx0dmFyIHVwZGF0ZSA9IEpTT04ucGFyc2UocmVxdWVzdC5yZXNwb25zZVRleHQpO1xuIFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG4gXHRcdFx0XHRcdFx0cmVqZWN0KGUpO1xuIFx0XHRcdFx0XHRcdHJldHVybjtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRyZXNvbHZlKHVwZGF0ZSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdHZhciBob3RBcHBseU9uVXBkYXRlID0gdHJ1ZTtcbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0dmFyIGhvdEN1cnJlbnRIYXNoID0gXCI1YzI2ODExNjE4NDI0ZTFmYjQ2YVwiO1xuIFx0dmFyIGhvdFJlcXVlc3RUaW1lb3V0ID0gMTAwMDA7XG4gXHR2YXIgaG90Q3VycmVudE1vZHVsZURhdGEgPSB7fTtcbiBcdHZhciBob3RDdXJyZW50Q2hpbGRNb2R1bGU7XG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdHZhciBob3RDdXJyZW50UGFyZW50cyA9IFtdO1xuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHR2YXIgaG90Q3VycmVudFBhcmVudHNUZW1wID0gW107XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90Q3JlYXRlUmVxdWlyZShtb2R1bGVJZCkge1xuIFx0XHR2YXIgbWUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0aWYgKCFtZSkgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX187XG4gXHRcdHZhciBmbiA9IGZ1bmN0aW9uKHJlcXVlc3QpIHtcbiBcdFx0XHRpZiAobWUuaG90LmFjdGl2ZSkge1xuIFx0XHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0pIHtcbiBcdFx0XHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKSA9PT0gLTEpIHtcbiBcdFx0XHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdLnBhcmVudHMucHVzaChtb2R1bGVJZCk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGhvdEN1cnJlbnRQYXJlbnRzID0gW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0aG90Q3VycmVudENoaWxkTW9kdWxlID0gcmVxdWVzdDtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChtZS5jaGlsZHJlbi5pbmRleE9mKHJlcXVlc3QpID09PSAtMSkge1xuIFx0XHRcdFx0XHRtZS5jaGlsZHJlbi5wdXNoKHJlcXVlc3QpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRjb25zb2xlLndhcm4oXG4gXHRcdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICtcbiBcdFx0XHRcdFx0XHRyZXF1ZXN0ICtcbiBcdFx0XHRcdFx0XHRcIikgZnJvbSBkaXNwb3NlZCBtb2R1bGUgXCIgK1xuIFx0XHRcdFx0XHRcdG1vZHVsZUlkXG4gXHRcdFx0XHQpO1xuIFx0XHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbXTtcbiBcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18ocmVxdWVzdCk7XG4gXHRcdH07XG4gXHRcdHZhciBPYmplY3RGYWN0b3J5ID0gZnVuY3Rpb24gT2JqZWN0RmFjdG9yeShuYW1lKSB7XG4gXHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuIFx0XHRcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfX1tuYW1lXTtcbiBcdFx0XHRcdH0sXG4gXHRcdFx0XHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gXHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX19bbmFtZV0gPSB2YWx1ZTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9O1xuIFx0XHR9O1xuIFx0XHRmb3IgKHZhciBuYW1lIGluIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX193ZWJwYWNrX3JlcXVpcmVfXywgbmFtZSkgJiZcbiBcdFx0XHRcdG5hbWUgIT09IFwiZVwiICYmXG4gXHRcdFx0XHRuYW1lICE9PSBcInRcIlxuIFx0XHRcdCkge1xuIFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBuYW1lLCBPYmplY3RGYWN0b3J5KG5hbWUpKTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0Zm4uZSA9IGZ1bmN0aW9uKGNodW5rSWQpIHtcbiBcdFx0XHRpZiAoaG90U3RhdHVzID09PSBcInJlYWR5XCIpIGhvdFNldFN0YXR1cyhcInByZXBhcmVcIik7XG4gXHRcdFx0aG90Q2h1bmtzTG9hZGluZysrO1xuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmUoY2h1bmtJZCkudGhlbihmaW5pc2hDaHVua0xvYWRpbmcsIGZ1bmN0aW9uKGVycikge1xuIFx0XHRcdFx0ZmluaXNoQ2h1bmtMb2FkaW5nKCk7XG4gXHRcdFx0XHR0aHJvdyBlcnI7XG4gXHRcdFx0fSk7XG5cbiBcdFx0XHRmdW5jdGlvbiBmaW5pc2hDaHVua0xvYWRpbmcoKSB7XG4gXHRcdFx0XHRob3RDaHVua3NMb2FkaW5nLS07XG4gXHRcdFx0XHRpZiAoaG90U3RhdHVzID09PSBcInByZXBhcmVcIikge1xuIFx0XHRcdFx0XHRpZiAoIWhvdFdhaXRpbmdGaWxlc01hcFtjaHVua0lkXSkge1xuIFx0XHRcdFx0XHRcdGhvdEVuc3VyZVVwZGF0ZUNodW5rKGNodW5rSWQpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmIChob3RDaHVua3NMb2FkaW5nID09PSAwICYmIGhvdFdhaXRpbmdGaWxlcyA9PT0gMCkge1xuIFx0XHRcdFx0XHRcdGhvdFVwZGF0ZURvd25sb2FkZWQoKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fTtcbiBcdFx0Zm4udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdFx0aWYgKG1vZGUgJiAxKSB2YWx1ZSA9IGZuKHZhbHVlKTtcbiBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy50KHZhbHVlLCBtb2RlICYgfjEpO1xuIFx0XHR9O1xuIFx0XHRyZXR1cm4gZm47XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSB7XG4gXHRcdHZhciBob3QgPSB7XG4gXHRcdFx0Ly8gcHJpdmF0ZSBzdHVmZlxuIFx0XHRcdF9hY2NlcHRlZERlcGVuZGVuY2llczoge30sXG4gXHRcdFx0X2RlY2xpbmVkRGVwZW5kZW5jaWVzOiB7fSxcbiBcdFx0XHRfc2VsZkFjY2VwdGVkOiBmYWxzZSxcbiBcdFx0XHRfc2VsZkRlY2xpbmVkOiBmYWxzZSxcbiBcdFx0XHRfZGlzcG9zZUhhbmRsZXJzOiBbXSxcbiBcdFx0XHRfbWFpbjogaG90Q3VycmVudENoaWxkTW9kdWxlICE9PSBtb2R1bGVJZCxcblxuIFx0XHRcdC8vIE1vZHVsZSBBUElcbiBcdFx0XHRhY3RpdmU6IHRydWUsXG4gXHRcdFx0YWNjZXB0OiBmdW5jdGlvbihkZXAsIGNhbGxiYWNrKSB7XG4gXHRcdFx0XHRpZiAoZGVwID09PSB1bmRlZmluZWQpIGhvdC5fc2VsZkFjY2VwdGVkID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwiZnVuY3Rpb25cIikgaG90Ll9zZWxmQWNjZXB0ZWQgPSBkZXA7XG4gXHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgZGVwID09PSBcIm9iamVjdFwiKVxuIFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKylcbiBcdFx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcFtpXV0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuIFx0XHRcdFx0ZWxzZSBob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuIFx0XHRcdH0sXG4gXHRcdFx0ZGVjbGluZTogZnVuY3Rpb24oZGVwKSB7XG4gXHRcdFx0XHRpZiAoZGVwID09PSB1bmRlZmluZWQpIGhvdC5fc2VsZkRlY2xpbmVkID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpXG4gXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxuIFx0XHRcdFx0XHRcdGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IHRydWU7XG4gXHRcdFx0XHRlbHNlIGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwXSA9IHRydWU7XG4gXHRcdFx0fSxcbiBcdFx0XHRkaXNwb3NlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuIFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG4gXHRcdFx0fSxcbiBcdFx0XHRhZGREaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiBcdFx0XHRcdGhvdC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goY2FsbGJhY2spO1xuIFx0XHRcdH0sXG4gXHRcdFx0cmVtb3ZlRGlzcG9zZUhhbmRsZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gXHRcdFx0XHR2YXIgaWR4ID0gaG90Ll9kaXNwb3NlSGFuZGxlcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gXHRcdFx0XHRpZiAoaWR4ID49IDApIGhvdC5fZGlzcG9zZUhhbmRsZXJzLnNwbGljZShpZHgsIDEpO1xuIFx0XHRcdH0sXG5cbiBcdFx0XHQvLyBNYW5hZ2VtZW50IEFQSVxuIFx0XHRcdGNoZWNrOiBob3RDaGVjayxcbiBcdFx0XHRhcHBseTogaG90QXBwbHksXG4gXHRcdFx0c3RhdHVzOiBmdW5jdGlvbihsKSB7XG4gXHRcdFx0XHRpZiAoIWwpIHJldHVybiBob3RTdGF0dXM7XG4gXHRcdFx0XHRob3RTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuIFx0XHRcdH0sXG4gXHRcdFx0YWRkU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkge1xuIFx0XHRcdFx0aG90U3RhdHVzSGFuZGxlcnMucHVzaChsKTtcbiBcdFx0XHR9LFxuIFx0XHRcdHJlbW92ZVN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uKGwpIHtcbiBcdFx0XHRcdHZhciBpZHggPSBob3RTdGF0dXNIYW5kbGVycy5pbmRleE9mKGwpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBob3RTdGF0dXNIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHR9LFxuXG4gXHRcdFx0Ly9pbmhlcml0IGZyb20gcHJldmlvdXMgZGlzcG9zZSBjYWxsXG4gXHRcdFx0ZGF0YTogaG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdXG4gXHRcdH07XG4gXHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IHVuZGVmaW5lZDtcbiBcdFx0cmV0dXJuIGhvdDtcbiBcdH1cblxuIFx0dmFyIGhvdFN0YXR1c0hhbmRsZXJzID0gW107XG4gXHR2YXIgaG90U3RhdHVzID0gXCJpZGxlXCI7XG5cbiBcdGZ1bmN0aW9uIGhvdFNldFN0YXR1cyhuZXdTdGF0dXMpIHtcbiBcdFx0aG90U3RhdHVzID0gbmV3U3RhdHVzO1xuIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGhvdFN0YXR1c0hhbmRsZXJzLmxlbmd0aDsgaSsrKVxuIFx0XHRcdGhvdFN0YXR1c0hhbmRsZXJzW2ldLmNhbGwobnVsbCwgbmV3U3RhdHVzKTtcbiBcdH1cblxuIFx0Ly8gd2hpbGUgZG93bmxvYWRpbmdcbiBcdHZhciBob3RXYWl0aW5nRmlsZXMgPSAwO1xuIFx0dmFyIGhvdENodW5rc0xvYWRpbmcgPSAwO1xuIFx0dmFyIGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0dmFyIGhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307XG4gXHR2YXIgaG90QXZhaWxhYmxlRmlsZXNNYXAgPSB7fTtcbiBcdHZhciBob3REZWZlcnJlZDtcblxuIFx0Ly8gVGhlIHVwZGF0ZSBpbmZvXG4gXHR2YXIgaG90VXBkYXRlLCBob3RVcGRhdGVOZXdIYXNoO1xuXG4gXHRmdW5jdGlvbiB0b01vZHVsZUlkKGlkKSB7XG4gXHRcdHZhciBpc051bWJlciA9ICtpZCArIFwiXCIgPT09IGlkO1xuIFx0XHRyZXR1cm4gaXNOdW1iZXIgPyAraWQgOiBpZDtcbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90Q2hlY2soYXBwbHkpIHtcbiBcdFx0aWYgKGhvdFN0YXR1cyAhPT0gXCJpZGxlXCIpIHtcbiBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjaGVjaygpIGlzIG9ubHkgYWxsb3dlZCBpbiBpZGxlIHN0YXR1c1wiKTtcbiBcdFx0fVxuIFx0XHRob3RBcHBseU9uVXBkYXRlID0gYXBwbHk7XG4gXHRcdGhvdFNldFN0YXR1cyhcImNoZWNrXCIpO1xuIFx0XHRyZXR1cm4gaG90RG93bmxvYWRNYW5pZmVzdChob3RSZXF1ZXN0VGltZW91dCkudGhlbihmdW5jdGlvbih1cGRhdGUpIHtcbiBcdFx0XHRpZiAoIXVwZGF0ZSkge1xuIFx0XHRcdFx0aG90U2V0U3RhdHVzKFwiaWRsZVwiKTtcbiBcdFx0XHRcdHJldHVybiBudWxsO1xuIFx0XHRcdH1cbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdEF2YWlsYWJsZUZpbGVzTWFwID0gdXBkYXRlLmM7XG4gXHRcdFx0aG90VXBkYXRlTmV3SGFzaCA9IHVwZGF0ZS5oO1xuXG4gXHRcdFx0aG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbiBcdFx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuIFx0XHRcdFx0aG90RGVmZXJyZWQgPSB7XG4gXHRcdFx0XHRcdHJlc29sdmU6IHJlc29sdmUsXG4gXHRcdFx0XHRcdHJlamVjdDogcmVqZWN0XG4gXHRcdFx0XHR9O1xuIFx0XHRcdH0pO1xuIFx0XHRcdGhvdFVwZGF0ZSA9IHt9O1xuIFx0XHRcdHZhciBjaHVua0lkID0gMDtcbiBcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9uZS1ibG9ja3NcbiBcdFx0XHR7XG4gXHRcdFx0XHQvKmdsb2JhbHMgY2h1bmtJZCAqL1xuIFx0XHRcdFx0aG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChcbiBcdFx0XHRcdGhvdFN0YXR1cyA9PT0gXCJwcmVwYXJlXCIgJiZcbiBcdFx0XHRcdGhvdENodW5rc0xvYWRpbmcgPT09IDAgJiZcbiBcdFx0XHRcdGhvdFdhaXRpbmdGaWxlcyA9PT0gMFxuIFx0XHRcdCkge1xuIFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gcHJvbWlzZTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90QWRkVXBkYXRlQ2h1bmsoY2h1bmtJZCwgbW9yZU1vZHVsZXMpIHtcbiBcdFx0aWYgKCFob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSB8fCAhaG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0pXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IGZhbHNlO1xuIFx0XHRmb3IgKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0aG90VXBkYXRlW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKC0taG90V2FpdGluZ0ZpbGVzID09PSAwICYmIGhvdENodW5rc0xvYWRpbmcgPT09IDApIHtcbiBcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCkge1xuIFx0XHRpZiAoIWhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdKSB7XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IHRydWU7XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzKys7XG4gXHRcdFx0aG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RVcGRhdGVEb3dubG9hZGVkKCkge1xuIFx0XHRob3RTZXRTdGF0dXMoXCJyZWFkeVwiKTtcbiBcdFx0dmFyIGRlZmVycmVkID0gaG90RGVmZXJyZWQ7XG4gXHRcdGhvdERlZmVycmVkID0gbnVsbDtcbiBcdFx0aWYgKCFkZWZlcnJlZCkgcmV0dXJuO1xuIFx0XHRpZiAoaG90QXBwbHlPblVwZGF0ZSkge1xuIFx0XHRcdC8vIFdyYXAgZGVmZXJyZWQgb2JqZWN0IGluIFByb21pc2UgdG8gbWFyayBpdCBhcyBhIHdlbGwtaGFuZGxlZCBQcm9taXNlIHRvXG4gXHRcdFx0Ly8gYXZvaWQgdHJpZ2dlcmluZyB1bmNhdWdodCBleGNlcHRpb24gd2FybmluZyBpbiBDaHJvbWUuXG4gXHRcdFx0Ly8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ2NTY2NlxuIFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG4gXHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcbiBcdFx0XHRcdFx0cmV0dXJuIGhvdEFwcGx5KGhvdEFwcGx5T25VcGRhdGUpO1xuIFx0XHRcdFx0fSlcbiBcdFx0XHRcdC50aGVuKFxuIFx0XHRcdFx0XHRmdW5jdGlvbihyZXN1bHQpIHtcbiBcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gXHRcdFx0XHRcdH0sXG4gXHRcdFx0XHRcdGZ1bmN0aW9uKGVycikge1xuIFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdChlcnIpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcbiBcdFx0XHRmb3IgKHZhciBpZCBpbiBob3RVcGRhdGUpIHtcbiBcdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaG90VXBkYXRlLCBpZCkpIHtcbiBcdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzLnB1c2godG9Nb2R1bGVJZChpZCkpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKG91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90QXBwbHkob3B0aW9ucykge1xuIFx0XHRpZiAoaG90U3RhdHVzICE9PSBcInJlYWR5XCIpXG4gXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYXBwbHkoKSBpcyBvbmx5IGFsbG93ZWQgaW4gcmVhZHkgc3RhdHVzXCIpO1xuIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuIFx0XHR2YXIgY2I7XG4gXHRcdHZhciBpO1xuIFx0XHR2YXIgajtcbiBcdFx0dmFyIG1vZHVsZTtcbiBcdFx0dmFyIG1vZHVsZUlkO1xuXG4gXHRcdGZ1bmN0aW9uIGdldEFmZmVjdGVkU3R1ZmYodXBkYXRlTW9kdWxlSWQpIHtcbiBcdFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW3VwZGF0ZU1vZHVsZUlkXTtcbiBcdFx0XHR2YXIgb3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSB7fTtcblxuIFx0XHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpLm1hcChmdW5jdGlvbihpZCkge1xuIFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0Y2hhaW46IFtpZF0sXG4gXHRcdFx0XHRcdGlkOiBpZFxuIFx0XHRcdFx0fTtcbiBcdFx0XHR9KTtcbiBcdFx0XHR3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuIFx0XHRcdFx0dmFyIHF1ZXVlSXRlbSA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWVJdGVtLmlkO1xuIFx0XHRcdFx0dmFyIGNoYWluID0gcXVldWVJdGVtLmNoYWluO1xuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRpZiAoIW1vZHVsZSB8fCBtb2R1bGUuaG90Ll9zZWxmQWNjZXB0ZWQpIGNvbnRpbnVlO1xuIFx0XHRcdFx0aWYgKG1vZHVsZS5ob3QuX3NlbGZEZWNsaW5lZCkge1xuIFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1kZWNsaW5lZFwiLFxuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcbiBcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChtb2R1bGUuaG90Ll9tYWluKSB7XG4gXHRcdFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHRcdFx0dHlwZTogXCJ1bmFjY2VwdGVkXCIsXG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxuIFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZFxuIFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtb2R1bGUucGFyZW50cy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHR2YXIgcGFyZW50SWQgPSBtb2R1bGUucGFyZW50c1tpXTtcbiBcdFx0XHRcdFx0dmFyIHBhcmVudCA9IGluc3RhbGxlZE1vZHVsZXNbcGFyZW50SWRdO1xuIFx0XHRcdFx0XHRpZiAoIXBhcmVudCkgY29udGludWU7XG4gXHRcdFx0XHRcdGlmIChwYXJlbnQuaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJkZWNsaW5lZFwiLFxuIFx0XHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLmNvbmNhdChbcGFyZW50SWRdKSxcbiBcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0XHRcdHBhcmVudElkOiBwYXJlbnRJZFxuIFx0XHRcdFx0XHRcdH07XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0aWYgKG91dGRhdGVkTW9kdWxlcy5pbmRleE9mKHBhcmVudElkKSAhPT0gLTEpIGNvbnRpbnVlO1xuIFx0XHRcdFx0XHRpZiAocGFyZW50LmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0XHRcdFx0aWYgKCFvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0pXG4gXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0gPSBbXTtcbiBcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0sIFttb2R1bGVJZF0pO1xuIFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGRlbGV0ZSBvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF07XG4gXHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5wdXNoKHBhcmVudElkKTtcbiBcdFx0XHRcdFx0cXVldWUucHVzaCh7XG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLmNvbmNhdChbcGFyZW50SWRdKSxcbiBcdFx0XHRcdFx0XHRpZDogcGFyZW50SWRcbiBcdFx0XHRcdFx0fSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuXG4gXHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdHR5cGU6IFwiYWNjZXB0ZWRcIixcbiBcdFx0XHRcdG1vZHVsZUlkOiB1cGRhdGVNb2R1bGVJZCxcbiBcdFx0XHRcdG91dGRhdGVkTW9kdWxlczogb3V0ZGF0ZWRNb2R1bGVzLFxuIFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXM6IG91dGRhdGVkRGVwZW5kZW5jaWVzXG4gXHRcdFx0fTtcbiBcdFx0fVxuXG4gXHRcdGZ1bmN0aW9uIGFkZEFsbFRvU2V0KGEsIGIpIHtcbiBcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdHZhciBpdGVtID0gYltpXTtcbiBcdFx0XHRcdGlmIChhLmluZGV4T2YoaXRlbSkgPT09IC0xKSBhLnB1c2goaXRlbSk7XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gYXQgYmVnaW4gYWxsIHVwZGF0ZXMgbW9kdWxlcyBhcmUgb3V0ZGF0ZWRcbiBcdFx0Ly8gdGhlIFwib3V0ZGF0ZWRcIiBzdGF0dXMgY2FuIHByb3BhZ2F0ZSB0byBwYXJlbnRzIGlmIHRoZXkgZG9uJ3QgYWNjZXB0IHRoZSBjaGlsZHJlblxuIFx0XHR2YXIgb3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSB7fTtcbiBcdFx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFtdO1xuIFx0XHR2YXIgYXBwbGllZFVwZGF0ZSA9IHt9O1xuXG4gXHRcdHZhciB3YXJuVW5leHBlY3RlZFJlcXVpcmUgPSBmdW5jdGlvbiB3YXJuVW5leHBlY3RlZFJlcXVpcmUoKSB7XG4gXHRcdFx0Y29uc29sZS53YXJuKFxuIFx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgKyByZXN1bHQubW9kdWxlSWQgKyBcIikgdG8gZGlzcG9zZWQgbW9kdWxlXCJcbiBcdFx0XHQpO1xuIFx0XHR9O1xuXG4gXHRcdGZvciAodmFyIGlkIGluIGhvdFVwZGF0ZSkge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaG90VXBkYXRlLCBpZCkpIHtcbiBcdFx0XHRcdG1vZHVsZUlkID0gdG9Nb2R1bGVJZChpZCk7XG4gXHRcdFx0XHQvKiogQHR5cGUge1RPRE99ICovXG4gXHRcdFx0XHR2YXIgcmVzdWx0O1xuIFx0XHRcdFx0aWYgKGhvdFVwZGF0ZVtpZF0pIHtcbiBcdFx0XHRcdFx0cmVzdWx0ID0gZ2V0QWZmZWN0ZWRTdHVmZihtb2R1bGVJZCk7XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRyZXN1bHQgPSB7XG4gXHRcdFx0XHRcdFx0dHlwZTogXCJkaXNwb3NlZFwiLFxuIFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBpZFxuIFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0LyoqIEB0eXBlIHtFcnJvcnxmYWxzZX0gKi9cbiBcdFx0XHRcdHZhciBhYm9ydEVycm9yID0gZmFsc2U7XG4gXHRcdFx0XHR2YXIgZG9BcHBseSA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGRvRGlzcG9zZSA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGNoYWluSW5mbyA9IFwiXCI7XG4gXHRcdFx0XHRpZiAocmVzdWx0LmNoYWluKSB7XG4gXHRcdFx0XHRcdGNoYWluSW5mbyA9IFwiXFxuVXBkYXRlIHByb3BhZ2F0aW9uOiBcIiArIHJlc3VsdC5jaGFpbi5qb2luKFwiIC0+IFwiKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdHN3aXRjaCAocmVzdWx0LnR5cGUpIHtcbiBcdFx0XHRcdFx0Y2FzZSBcInNlbGYtZGVjbGluZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRGVjbGluZWQpXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuIFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBzZWxmIGRlY2xpbmU6IFwiICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQubW9kdWxlSWQgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcImRlY2xpbmVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EZWNsaW5lZCkgb3B0aW9ucy5vbkRlY2xpbmVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcbiBcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2Ugb2YgZGVjbGluZWQgZGVwZW5kZW5jeTogXCIgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5tb2R1bGVJZCArXG4gXHRcdFx0XHRcdFx0XHRcdFx0XCIgaW4gXCIgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5wYXJlbnRJZCArXG4gXHRcdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwidW5hY2NlcHRlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uVW5hY2NlcHRlZCkgb3B0aW9ucy5vblVuYWNjZXB0ZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlVW5hY2NlcHRlZClcbiBcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4gXHRcdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIFwiICsgbW9kdWxlSWQgKyBcIiBpcyBub3QgYWNjZXB0ZWRcIiArIGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcImFjY2VwdGVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25BY2NlcHRlZCkgb3B0aW9ucy5vbkFjY2VwdGVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0ZG9BcHBseSA9IHRydWU7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJkaXNwb3NlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGlzcG9zZWQpIG9wdGlvbnMub25EaXNwb3NlZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGRvRGlzcG9zZSA9IHRydWU7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGRlZmF1bHQ6XG4gXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5leGNlcHRpb24gdHlwZSBcIiArIHJlc3VsdC50eXBlKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChhYm9ydEVycm9yKSB7XG4gXHRcdFx0XHRcdGhvdFNldFN0YXR1cyhcImFib3J0XCIpO1xuIFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRFcnJvcik7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAoZG9BcHBseSkge1xuIFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IGhvdFVwZGF0ZVttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgcmVzdWx0Lm91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdFx0XHRcdGZvciAobW9kdWxlSWQgaW4gcmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4gXHRcdFx0XHRcdFx0aWYgKFxuIFx0XHRcdFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuIFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXMsXG4gXHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkXG4gXHRcdFx0XHRcdFx0XHQpXG4gXHRcdFx0XHRcdFx0KSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAoIW91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSlcbiBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdID0gW107XG4gXHRcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChcbiBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdLFxuIFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKGRvRGlzcG9zZSkge1xuIFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIFtyZXN1bHQubW9kdWxlSWRdKTtcbiBcdFx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSB3YXJuVW5leHBlY3RlZFJlcXVpcmU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gU3RvcmUgc2VsZiBhY2NlcHRlZCBvdXRkYXRlZCBtb2R1bGVzIHRvIHJlcXVpcmUgdGhlbSBsYXRlciBieSB0aGUgbW9kdWxlIHN5c3RlbVxuIFx0XHR2YXIgb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzID0gW107XG4gXHRcdGZvciAoaSA9IDA7IGkgPCBvdXRkYXRlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRtb2R1bGVJZCA9IG91dGRhdGVkTW9kdWxlc1tpXTtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSAmJlxuIFx0XHRcdFx0aW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uaG90Ll9zZWxmQWNjZXB0ZWRcbiBcdFx0XHQpXG4gXHRcdFx0XHRvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMucHVzaCh7XG4gXHRcdFx0XHRcdG1vZHVsZTogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdGVycm9ySGFuZGxlcjogaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uaG90Ll9zZWxmQWNjZXB0ZWRcbiBcdFx0XHRcdH0pO1xuIFx0XHR9XG5cbiBcdFx0Ly8gTm93IGluIFwiZGlzcG9zZVwiIHBoYXNlXG4gXHRcdGhvdFNldFN0YXR1cyhcImRpc3Bvc2VcIik7XG4gXHRcdE9iamVjdC5rZXlzKGhvdEF2YWlsYWJsZUZpbGVzTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGNodW5rSWQpIHtcbiBcdFx0XHRpZiAoaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0gPT09IGZhbHNlKSB7XG4gXHRcdFx0XHRob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHR9KTtcblxuIFx0XHR2YXIgaWR4O1xuIFx0XHR2YXIgcXVldWUgPSBvdXRkYXRlZE1vZHVsZXMuc2xpY2UoKTtcbiBcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiBcdFx0XHRtb2R1bGVJZCA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdGlmICghbW9kdWxlKSBjb250aW51ZTtcblxuIFx0XHRcdHZhciBkYXRhID0ge307XG5cbiBcdFx0XHQvLyBDYWxsIGRpc3Bvc2UgaGFuZGxlcnNcbiBcdFx0XHR2YXIgZGlzcG9zZUhhbmRsZXJzID0gbW9kdWxlLmhvdC5fZGlzcG9zZUhhbmRsZXJzO1xuIFx0XHRcdGZvciAoaiA9IDA7IGogPCBkaXNwb3NlSGFuZGxlcnMubGVuZ3RoOyBqKyspIHtcbiBcdFx0XHRcdGNiID0gZGlzcG9zZUhhbmRsZXJzW2pdO1xuIFx0XHRcdFx0Y2IoZGF0YSk7XG4gXHRcdFx0fVxuIFx0XHRcdGhvdEN1cnJlbnRNb2R1bGVEYXRhW21vZHVsZUlkXSA9IGRhdGE7XG5cbiBcdFx0XHQvLyBkaXNhYmxlIG1vZHVsZSAodGhpcyBkaXNhYmxlcyByZXF1aXJlcyBmcm9tIHRoaXMgbW9kdWxlKVxuIFx0XHRcdG1vZHVsZS5ob3QuYWN0aXZlID0gZmFsc2U7XG5cbiBcdFx0XHQvLyByZW1vdmUgbW9kdWxlIGZyb20gY2FjaGVcbiBcdFx0XHRkZWxldGUgaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG5cbiBcdFx0XHQvLyB3aGVuIGRpc3Bvc2luZyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgZGlzcG9zZSBoYW5kbGVyXG4gXHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcblxuIFx0XHRcdC8vIHJlbW92ZSBcInBhcmVudHNcIiByZWZlcmVuY2VzIGZyb20gYWxsIGNoaWxkcmVuXG4gXHRcdFx0Zm9yIChqID0gMDsgaiA8IG1vZHVsZS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0dmFyIGNoaWxkID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGUuY2hpbGRyZW5bal1dO1xuIFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG4gXHRcdFx0XHRpZHggPSBjaGlsZC5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSB7XG4gXHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gcmVtb3ZlIG91dGRhdGVkIGRlcGVuZGVuY3kgZnJvbSBtb2R1bGUgY2hpbGRyZW5cbiBcdFx0dmFyIGRlcGVuZGVuY3k7XG4gXHRcdHZhciBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcztcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBvdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmIChtb2R1bGUpIHtcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcbiBcdFx0XHRcdFx0XHRpZHggPSBtb2R1bGUuY2hpbGRyZW4uaW5kZXhPZihkZXBlbmRlbmN5KTtcbiBcdFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIG1vZHVsZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIE5vdCBpbiBcImFwcGx5XCIgcGhhc2VcbiBcdFx0aG90U2V0U3RhdHVzKFwiYXBwbHlcIik7XG5cbiBcdFx0aG90Q3VycmVudEhhc2ggPSBob3RVcGRhdGVOZXdIYXNoO1xuXG4gXHRcdC8vIGluc2VydCBuZXcgY29kZVxuIFx0XHRmb3IgKG1vZHVsZUlkIGluIGFwcGxpZWRVcGRhdGUpIHtcbiBcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFwcGxpZWRVcGRhdGUsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0bW9kdWxlc1ttb2R1bGVJZF0gPSBhcHBsaWVkVXBkYXRlW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBjYWxsIGFjY2VwdCBoYW5kbGVyc1xuIFx0XHR2YXIgZXJyb3IgPSBudWxsO1xuIFx0XHRmb3IgKG1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZClcbiBcdFx0XHQpIHtcbiBcdFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdFx0aWYgKG1vZHVsZSkge1xuIFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9IG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0dmFyIGNhbGxiYWNrcyA9IFtdO1xuIFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0XHRkZXBlbmRlbmN5ID0gbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV07XG4gXHRcdFx0XHRcdFx0Y2IgPSBtb2R1bGUuaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tkZXBlbmRlbmN5XTtcbiBcdFx0XHRcdFx0XHRpZiAoY2IpIHtcbiBcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja3MuaW5kZXhPZihjYikgIT09IC0xKSBjb250aW51ZTtcbiBcdFx0XHRcdFx0XHRcdGNhbGxiYWNrcy5wdXNoKGNiKTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHRcdGNiID0gY2FsbGJhY2tzW2ldO1xuIFx0XHRcdFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRcdFx0XHRjYihtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyk7XG4gXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuIFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiYWNjZXB0LWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jeUlkOiBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tpXSxcbiBcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gTG9hZCBzZWxmIGFjY2VwdGVkIG1vZHVsZXNcbiBcdFx0Zm9yIChpID0gMDsgaSA8IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdHZhciBpdGVtID0gb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzW2ldO1xuIFx0XHRcdG1vZHVsZUlkID0gaXRlbS5tb2R1bGU7XG4gXHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xuIFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKTtcbiBcdFx0XHR9IGNhdGNoIChlcnIpIHtcbiBcdFx0XHRcdGlmICh0eXBlb2YgaXRlbS5lcnJvckhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuIFx0XHRcdFx0XHR0cnkge1xuIFx0XHRcdFx0XHRcdGl0ZW0uZXJyb3JIYW5kbGVyKGVycik7XG4gXHRcdFx0XHRcdH0gY2F0Y2ggKGVycjIpIHtcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyMixcbiBcdFx0XHRcdFx0XHRcdFx0b3JpZ2luYWxFcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyMjtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1hY2NlcHQtZXJyb3JlZFwiLFxuIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuIFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBoYW5kbGUgZXJyb3JzIGluIGFjY2VwdCBoYW5kbGVycyBhbmQgc2VsZiBhY2NlcHRlZCBtb2R1bGUgbG9hZFxuIFx0XHRpZiAoZXJyb3IpIHtcbiBcdFx0XHRob3RTZXRTdGF0dXMoXCJmYWlsXCIpO1xuIFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gXHRcdH1cblxuIFx0XHRob3RTZXRTdGF0dXMoXCJpZGxlXCIpO1xuIFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuIFx0XHRcdHJlc29sdmUob3V0ZGF0ZWRNb2R1bGVzKTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9LFxuIFx0XHRcdGhvdDogaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSxcbiBcdFx0XHRwYXJlbnRzOiAoaG90Q3VycmVudFBhcmVudHNUZW1wID0gaG90Q3VycmVudFBhcmVudHMsIGhvdEN1cnJlbnRQYXJlbnRzID0gW10sIGhvdEN1cnJlbnRQYXJlbnRzVGVtcCksXG4gXHRcdFx0Y2hpbGRyZW46IFtdXG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIGhvdENyZWF0ZVJlcXVpcmUobW9kdWxlSWQpKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcImRpc3QvXCI7XG5cbiBcdC8vIF9fd2VicGFja19oYXNoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18uaCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gaG90Q3VycmVudEhhc2g7IH07XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gaG90Q3JlYXRlUmVxdWlyZSgxMCkoX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTApO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBSZWFjdDsiLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE3IE51bWJlckZvdXIgQUcuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG4gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcbiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG4gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuICpcbiAqIENvbnRyaWJ1dG9yczpcbiAqICAgTnVtYmVyRm91ciBBRyAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuICovXG5pbXBvcnQgXCIuL3J0L040QnVpbHRJbkNsYXNzZXMuanNcIjtcbmltcG9ydCBcIi4vcnQvTjRSdW50aW1lQm9vdHN0cmFwLmpzXCI7XG5cbihmdW5jdGlvbihnbG9iYWwpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIC8vIFRPRE86IHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHRoZSBwYXJzZXIgY291bGQgcHJvcGVybHkgc3VwcG9ydCBnbG9iYWwgYGltcG9ydGAuXG4gICAgLy8ganVzdCBmb3IgaW1tZWRpYXRlIGV4ZWN1dGlvbiB3aXRob3V0IGNvbXBpbGUgc3RlcFxuICAgIGdsb2JhbC5fbjRqc0ltcG9ydCA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGltcG9ydChwYXRoKTtcbiAgICB9O1xuXG59KHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiBzZWxmKSk7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gUmVhY3RET007IiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNyBOdW1iZXJGb3VyIEFHLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG4gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcbiAqXG4gKiBDb250cmlidXRvcnM6XG4gKiAgIE51bWJlckZvdXIgQUcgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbiAqL1xuLyplc2xpbnQtZGlzYWJsZSBuby1wcm90bywgbmV3LWNhcCAqL1xuLypnbG9iYWwgJG1ha2VDbGFzcyAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgLyoqXG4gICAgICogU2ltaWxhciB0byB7QGxpbmsgJG1ha2VDbGFzc30gd2l0aG91dCBuNHR5cGUgbWV0YSBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdG9yIC0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHN1cGVyQ3RvciAtIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBvZiB0aGUgc3VwZXIgY2xhc3NcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2VNZXRob2RzIC0gQW4gb2JqZWN0IGhvbGRpbmcgdGhlIG1ldGhvZHMgZm9yIHRoZSBjbGFzcyBpbnN0YW5jZSBhbmQgbWl4ZWQgaW4gbWV0aG9kc1xuICAgICAqIEBwYXJhbSBzdGF0aWNNZXRob2RzIC0gQW4gb2JqZWN0IGhvbGRpbmcgdGhlIGRlc2NyaXB0b3JzIGZvciB0aGUgY2xhc3Mgc3RhdGljIG1ldGhvZHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiAkbWFrZU40QnVpbHRJbkNsYXNzKGN0b3IsIHN1cGVyQ3RvciwgaW5zdGFuY2VNZXRob2RzLCBzdGF0aWNNZXRob2RzKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3VwZXJDdG9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihjdG9yLCBzdXBlckN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1cGVyQ3RvciA9PT0gRXJyb3IpIHtcbiAgICAgICAgICAgIGluc3RhbmNlTWV0aG9kcy5zdGFjayA9IHsgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuJF9fbjRlcnIuc3RhY2s7IH0gfTtcbiAgICAgICAgICAgIGluc3RhbmNlTWV0aG9kcy5tZXNzYWdlID0geyBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy4kX19uNGVyci5tZXNzYWdlOyB9IH07XG4gICAgICAgICAgICBpbnN0YW5jZU1ldGhvZHMubmFtZSA9IHsgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGN0b3IubjR0eXBlLm5hbWU7IH0gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGN0b3IsIHN0YXRpY01ldGhvZHMpO1xuXG4gICAgICAgIHZhciBwcm90byA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgaW5zdGFuY2VNZXRob2RzKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBcImNvbnN0cnVjdG9yXCIsIHsgdmFsdWU6IGN0b3IgfSk7XG5cbiAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBwcm90bztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgbWV0YSBpbmZvcm1hdGlvbiBmb3IgTjRCdWlsdEluQ2xhc3NlcyBpLmUuXG4gICAgICogLSBiaW5kIG40VHlwZSBwcm9wZXJ0eSBvZiBjdG9yIHRvIGluc3RhbmNlIG9mIChtZXRhKSBONENsYXNzXG4gICAgICogLSBiaW5kIG93bmVkTWVtYmVycyAobWV0YSkgTjRDbGFzcyB0byB0aGF0IGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3RvciAtIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBvZiBONEJ1aWx0SW5DbGFzcyB0aGF0IHdpbGwgYmUgZW5yaWNoZWQgd2l0aCBtZXRhIGluZm9cbiAgICAgKiBAcGFyYW0gbjR0eXBlIC0gVGhlIGluc3RhbmNlIG9mIE40Q2xhc3MgZGVzY3JpYmluZyBtZXRhIGluZm8gb2YgZ2l2ZW4gTjRCdWlsdEluQ2xhc3MgKHNwZWNpZmllZCBieSBwcm92aWRlZCBjdG9yKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRjcmVhdGVNZXRhSW5mbyhjdG9yLCBtZXRhQ2xhc3MpIHtcbiAgICAgICAgLy9iaW5kIG40VHlwZSBwcm9wZXJ0eSBtZXRhY2xhc3MgaW5zdGFuY2VcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0b3IsICduNHR5cGUnLCB7XG4gICAgICAgICAgICB2YWx1ZTogbWV0YUNsYXNzLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9iaW5kIG1ldGEgY2xhc3MgaW5zdGFuY2UgbWVtYmVycyB0byB0aGF0IGluc3RhbmNlIChzbyBtZW1iZXItPm93bmVyKVxuICAgICAgICAvLyhvd25lci0+bWVtYmVyIHJlbGF0aW9uIGlzIHNldCB3aGVuIGNyZWF0aW5nIGluc3RhbmNlIG9mIHRoZSBtZXRhIGNsYXNzKVxuICAgICAgICBtZXRhQ2xhc3Mub3duZWRNZW1iZXJzLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLCAnb3duZXInLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IG1ldGFDbGFzcyxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vYmluZCBvd25lZCBONE1ldGhvZHMgKG9mIHRoZSBtZXRhIGNsYXNzKSB0byBGdW5jdGlvbnMgKHRoZWlyIGNvbnN0cnVjdG9ycykgYW5kIHZpY2VWZXJzYVxuICAgICAgICBtZXRhQ2xhc3Mub3duZWRNZW1iZXJzLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgIGlmIChtIGluc3RhbmNlb2YgTjRNZXRob2QpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwgJ2pzRnVuY3Rpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtLmNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG0uY29uc3RydWN0b3IubjRtZW1iZXIgPSBtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVUYXJnZXRQcm9wKGFubm90YXRpb24pIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFubm90YXRpb24sIFwidGFyZ2V0XCIsIHsgdmFsdWU6IHRoaXMsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRUYXJnZXRPZkFubm90YXRpb25zKHRhcmdldCkge1xuICAgICAgICBpZiAodGFyZ2V0LmFubm90YXRpb25zKSB7XG4gICAgICAgICAgICB0YXJnZXQuYW5ub3RhdGlvbnMuZm9yRWFjaChkZWZpbmVUYXJnZXRQcm9wLCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gPT09PT0gZGVmaW5lIGZ1bmN0aW9ucyB1c2VkIGxhdGVyIGFzIGN0b3JzIG9mIE40QnVpbHRJbkNsYXNzZXNcblxuICAgIHZhciBONE9iamVjdCA9IGZ1bmN0aW9uIE40T2JqZWN0KHNwZWMpIHtcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgICAgICAvLyBkZWZpbmVkIGluIHR5cGVzIG1vZGVsLCBhZGRlZCBieSAkY3JlYXRlTWV0YUluZm9cbiAgICAgICAgLyogcHVibGljIHN0YXRpYyBONENsYXNzIGdldCBuNHR5cGUoKSB7IHJldHVybiBudWxsOyB9ICovXG4gICAgfTtcblxuICAgIHZhciBONEVsZW1lbnQgPSBmdW5jdGlvbiBONEVsZW1lbnQoc3BlYykge1xuICAgICAgICBONE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICAgICAgdGhpcy5vcmlnaW4gPSBzcGVjLm9yaWdpbjtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9ucyA9IHNwZWMuYW5ub3RhdGlvbnMgfHwgW107XG4gICAgICAgIHNldFRhcmdldE9mQW5ub3RhdGlvbnModGhpcyk7XG4gICAgfTtcblxuICAgIHZhciBONE5hbWVkRWxlbWVudCA9IGZ1bmN0aW9uIE40TmFtZWRFbGVtZW50KHNwZWMpIHtcbiAgICAgICAgTjRFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBzcGVjLm5hbWU7XG4gICAgfTtcblxuICAgIHZhciBONFR5cGUgPSBmdW5jdGlvbiBONFR5cGUoc3BlYykge1xuICAgICAgICBONE5hbWVkRWxlbWVudC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICAgICAgdGhpcy5mcW4gPSBzcGVjLmZxbjtcbiAgICB9O1xuXG4gICAgdmFyIE40Q2xhc3NpZmllciA9IGZ1bmN0aW9uIE40Q2xhc3NpZmllcihzcGVjKSB7XG4gICAgICAgIE40VHlwZS5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICAgICAgdGhpcy5uNHN1cGVyVHlwZSA9IHNwZWMubjRzdXBlclR5cGU7XG4gICAgICAgIHRoaXMuYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzID0gc3BlYy5hbGxJbXBsZW1lbnRlZEludGVyZmFjZXM7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbnMgPSBzcGVjLmFubm90YXRpb25zO1xuICAgICAgICB0aGlzLm93bmVkTWVtYmVycyA9IHNwZWMub3duZWRNZW1iZXJzIHx8IFtdO1xuICAgICAgICB0aGlzLmNvbnN1bWVkTWVtYmVycyA9IHNwZWMuY29uc3VtZWRNZW1iZXJzIHx8IFtdOyAvL3dlIGtub3cgaXQgaXMgZW1wdHkgYXJyYXlcblxuICAgICAgICB0aGlzLm93bmVkTWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLCAnb3duZXInLCB7IHZhbHVlOiB0aGlzLCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHNldFRhcmdldE9mQW5ub3RhdGlvbnMobSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgIH07XG5cbiAgICB2YXIgTjRDbGFzcyA9IGZ1bmN0aW9uIE40Q2xhc3Moc3BlYykge1xuICAgICAgICBONENsYXNzaWZpZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgfTtcblxuICAgIHZhciBONEludGVyZmFjZSA9IGZ1bmN0aW9uIE40SW50ZXJmYWNlKHNwZWMpIHtcbiAgICAgICAgTjRDbGFzc2lmaWVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgIH07XG5cbiAgICB2YXIgTjRNZW1iZXIgPSBmdW5jdGlvbiBONE1lbWJlcihzcGVjKSB7XG4gICAgICAgIE40TmFtZWRFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgICAgICB0aGlzLm93bmVyID0gc3BlYy5vd25lcjtcbiAgICAgICAgdGhpcy5pc1N0YXRpYyA9IHNwZWMuaXNTdGF0aWMgfHwgZmFsc2U7XG4gICAgfTtcblxuICAgIHZhciBONE1ldGhvZCA9IGZ1bmN0aW9uIE40TWV0aG9kKHNwZWMpIHtcbiAgICAgICAgTjRNZW1iZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgICAgIHRoaXMuanNGdW5jdGlvbiA9IHNwZWMuanNGdW5jdGlvbjtcbiAgICB9O1xuXG4gICAgdmFyIE40RGF0YUZpZWxkID0gZnVuY3Rpb24gTjREYXRhRmllbGQoc3BlYykge1xuICAgICAgICBONE1lbWJlci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40QWNjZXNzb3IgPSBmdW5jdGlvbiBONEFjY2Vzc29yKHNwZWMpIHtcbiAgICAgICAgTjRNZW1iZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgICAgIHRoaXMuZ2V0dGVyID0gc3BlYy5nZXR0ZXI7XG4gICAgfTtcblxuICAgIHZhciBONEVudW1UeXBlID0gZnVuY3Rpb24gTjRFbnVtVHlwZShzcGVjKSB7XG4gICAgICAgIE40VHlwZS5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40RW51bSA9IGZ1bmN0aW9uIE40RW51bShzcGVjKSB7XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40U3RyaW5nQmFzZWRFbnVtVHlwZSA9IGZ1bmN0aW9uIE40U3RyaW5nQmFzZWRFbnVtVHlwZShzcGVjKSB7XG4gICAgICAgIE40VHlwZS5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40U3RyaW5nQmFzZWRFbnVtID0gZnVuY3Rpb24gTjRTdHJpbmdCYXNlZEVudW0oc3BlYykge1xuICAgICAgICBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgfTtcblxuICAgIHZhciBONEFubm90YXRpb24gPSBmdW5jdGlvbiBONEFubm90YXRpb24oc3BlYykge1xuICAgICAgICBONE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICAgICAgdGhpcy5uYW1lID0gc3BlYy5uYW1lO1xuICAgICAgICB0aGlzLmRldGFpbHMgPSBzcGVjLmRldGFpbHM7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gc3BlYy50YXJnZXQ7XG4gICAgfTtcblxuICAgIHZhciBONFByb3ZpZGVyID0gZnVuY3Rpb24gTjRQcm92aWRlcihzcGVjKSB7XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40QXBpTm90SW1wbGVtZW50ZWRFcnJvciA9IGZ1bmN0aW9uIE40QXBpTm90SW1wbGVtZW50ZWRFcnJvcihzcGVjKSB7XG4gICAgICAgIHRoaXMuJF9fbjRlcnIgPSBuZXcgRXJyb3Ioc3BlYyk7XG4gICAgfTtcblxuICAgIC8vIE40SURMLXJlbGF0ZWQgYnVpbHQtaW4gdHlwZXNcbiAgICB2YXIgTWlncmF0aW9uQ29udHJvbGxlciA9IGZ1bmN0aW9uIE1pZ3JhdGlvbkNvbnRyb2xsZXIoc3BlYykge1xuICAgICAgICBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgfVxuXG4gICAgdmFyIE1pZ3JhdGlvbkNvbnRleHQgPSBmdW5jdGlvbiBNaWdyYXRpb25Db250ZXh0KHNwZWMpIHtcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgIH1cblxuICAgIC8vID09PT09IG1ha2UgTjRCdWlsdEluQ2xhc3NlcyAodHJhbnNmb3JtIGN0b3IgZnVuY3Rpb25zIHRvIHdvcmsgYXMgQ2xhc3NlcylcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRPYmplY3QsIE9iamVjdCwge30sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRFbGVtZW50LCBONE9iamVjdCwge1xuICAgICAgICBoYXNBbm5vdGF0aW9uOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb25cbiAgICAgICAgICAgIGhhc0Fubm90YXRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFubm90YXRpb25zLnNvbWUoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZSA9PT0gbmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYW55QW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uXG4gICAgICAgICAgICBhbnlBbm5vdGF0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5hbm5vdGF0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuYW5ub3RhdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhbGxBbm5vdGF0aW9uczoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uXG4gICAgICAgICAgICBhbGxBbm5vdGF0aW9ucyhuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5ub3RhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUgPT09IG5hbWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40TmFtZWRFbGVtZW50LCBONEVsZW1lbnQsIHt9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40VHlwZSwgTjROYW1lZEVsZW1lbnQsIHtcbiAgICAgICAgaXNDbGFzczoge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvblxuICAgICAgICAgICAgZ2V0SXNDbGFzcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgaXNJbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb25cbiAgICAgICAgICAgIGdldElzSW50ZXJmYWNlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNFbnVtOiB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uXG4gICAgICAgICAgICBnZXRJc0VudW0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBvZjoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9mKG40b2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG40b2JqZWN0ID8gbjRvYmplY3QubjR0eXBlIHx8IG40b2JqZWN0LmNvbnN0cnVjdG9yLm40dHlwZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONENsYXNzaWZpZXIsIE40VHlwZSwge1xuICAgICAgICBtZW1iZXJzOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWVtYmVycyhjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMub3duZWRNZW1iZXJzLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyciA9IGFyci5jb25jYXQodGhpcy5jb25zdW1lZE1lbWJlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5oZXJpdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm40c3VwZXJUeXBlIGluc3RhbmNlb2YgTjRDbGFzc2lmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gdGhpcy5uNHN1cGVyVHlwZS5tZW1iZXJzKGNvbnN1bWVkLCBpbmhlcml0ZWQsIF9zdGF0aWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyID0gYXJyLmNvbmNhdCh0bXApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghX3N0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICBhcnIgPSBhcnIuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW0uaXNTdGF0aWM7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXJzV2l0aEFubm90YXRpb246IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtZW1iZXJzV2l0aEFubm90YXRpb24obmFtZSwgY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbWJlcnMoY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmhhc0Fubm90YXRpb24obmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFGaWVsZHM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkYXRhRmllbGRzKGNvbnN1bWVkLCBpbmhlcml0ZWQsIF9zdGF0aWMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZW1iZXJzKGNvbnN1bWVkLCBpbmhlcml0ZWQsIF9zdGF0aWMpLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbSBpbnN0YW5jZW9mIE40RGF0YUZpZWxkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhRmllbGRzV2l0aEFubm90YXRpb246IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkYXRhRmllbGRzV2l0aEFubm90YXRpb24obmFtZSwgY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbWJlcnNXaXRoQW5ub3RhdGlvbihuYW1lLCBjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKS5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0gaW5zdGFuY2VvZiBONERhdGFGaWVsZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1ldGhvZHMoY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbWJlcnMoY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtIGluc3RhbmNlb2YgTjRNZXRob2Q7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHNXaXRoQW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uXG4gICAgICAgICAgICBtZXRob2RzV2l0aEFubm90YXRpb24obmFtZSwgY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbWJlcnNXaXRoQW5ub3RhdGlvbihuYW1lLCBjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKS5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0gaW5zdGFuY2VvZiBONE1ldGhvZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRDbGFzcywgTjRDbGFzc2lmaWVyLCB7XG4gICAgICAgIGlzQ2xhc3M6IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb25cbiAgICAgICAgICAgIGdldElzQ2xhc3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40SW50ZXJmYWNlLCBONENsYXNzaWZpZXIsIHtcbiAgICAgICAgaXNJbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb25cbiAgICAgICAgICAgIGdldElzSW50ZXJmYWNlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONE1lbWJlciwgTjROYW1lZEVsZW1lbnQsIHt9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40TWV0aG9kLCBONE1lbWJlciwge30sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjREYXRhRmllbGQsIE40TWVtYmVyLCB7fSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONEFjY2Vzc29yLCBONE1lbWJlciwge1xuICAgICAgICBpc0dldHRlcjoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uXG4gICAgICAgICAgICBpc0dldHRlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXR0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzU2V0dGVyOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb25cbiAgICAgICAgICAgIGlzU2V0dGVyKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5nZXR0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40RW51bVR5cGUsIE40VHlwZSwge1xuICAgICAgICBpc0VudW06IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb25cbiAgICAgICAgICAgIGdldElzRW51bSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRFbnVtLCBPYmplY3QsIHtcbiAgICAgICAgdG9TdHJpbmc6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAgZmluZExpdGVyYWxCeU5hbWU6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5kTGl0ZXJhbEJ5TmFtZShuYW1lKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGl0ZXJhbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGl0ZXJhbHNbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGl0ZXJhbHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmluZExpdGVyYWxCeVZhbHVlOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZmluZExpdGVyYWxCeVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGl0ZXJhbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGl0ZXJhbHNbaV0udmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXRlcmFsc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40U3RyaW5nQmFzZWRFbnVtVHlwZSwgTjRUeXBlLCB7XG4gICAgICAgIGlzRW51bToge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvblxuICAgICAgICAgICAgZ2V0SXNFbnVtKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONFN0cmluZ0Jhc2VkRW51bSwgT2JqZWN0LCB7XG4gICAgICAgIHRvU3RyaW5nOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGZpbmRMaXRlcmFsQnlWYWx1ZToge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmRMaXRlcmFsQnlWYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxpdGVyYWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpdGVyYWxzW2ldID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGl0ZXJhbHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONEFubm90YXRpb24sIE40T2JqZWN0LCB7fSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONEFwaU5vdEltcGxlbWVudGVkRXJyb3IsIEVycm9yLCB7fSwge30pO1xuXG4gICAgLy8gPT09PT0gYWRkIG1ldGEgaW5mb3JtYXRpb24gZm9yIE40QnVpbHRJbkNsYXNzZXNcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONE9iamVjdCxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040T2JqZWN0JyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzLk40T2JqZWN0JyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiBONE9iamVjdC5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtZWJlcnM6IFtdXG4gICAgICAgIH0pKTtcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONEVsZW1lbnQsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONEVsZW1lbnQnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjRFbGVtZW50JyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiBONE9iamVjdC5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhbm5vdGF0aW9ucycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzQW5ub3RhdGlvbicsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRFbGVtZW50WydoYXNBbm5vdGF0aW9uJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhbnlBbm5vdGF0aW9uJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONEVsZW1lbnRbJ2FueUFubm90YXRpb24nXVxuICAgICAgICAgICAgfSksIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FsbEFubm90YXRpb25zJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONEVsZW1lbnRbJ2FsbEFubm90YXRpb25zJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ29yaWdpbicsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjROYW1lZEVsZW1lbnQsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONE5hbWVkRWxlbWVudCcsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONE5hbWVkRWxlbWVudCcsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRFbGVtZW50Lm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40VHlwZSxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040VHlwZScsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONFR5cGUnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40TmFtZWRFbGVtZW50Lm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZxbicsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb2YnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40VHlwZVsnb2YnXSxcbiAgICAgICAgICAgICAgICBpc1N0YXRpYzogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNDbGFzcycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0ludGVyZmFjZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0VudW0nLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40Q2xhc3NpZmllcixcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040Q2xhc3NpZmllcicsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONENsYXNzaWZpZXInLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40VHlwZS5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICduNHN1cGVyVHlwZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhbGxJbXBsZW1lbnRlZEludGVyZmFjZXMnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONERhdGFGaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ293bmVkTWVtYmVycydcbiAgICAgICAgICAgIH0pLCBuZXcgTjREYXRhRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjb25zdW1lZE1lbWJlcnMnXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY29uc3RydWN0b3InXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWVtYmVycycsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRDbGFzc2lmaWVyWydtZW1iZXJzJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtZW1iZXJzV2l0aEFubm90YXRpb24nLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40Q2xhc3NpZmllclsnbWVtYmVyc1dpdGhBbm5vdGF0aW9uJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdkYXRhRmllbGRzJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONENsYXNzaWZpZXJbJ2RhdGFGaWVsZHMnXVxuICAgICAgICAgICAgfSksIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGFGaWVsZHNXaXRoQW5ub3RhdGlvbicsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRDbGFzc2lmaWVyWydkYXRhRmllbGRzV2l0aEFubm90YXRpb24nXVxuICAgICAgICAgICAgfSksIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21ldGhvZHMnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40Q2xhc3NpZmllclsnbWV0aG9kcyddXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWV0aG9kc1dpdGhBbm5vdGF0aW9uJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONENsYXNzaWZpZXJbJ21ldGhvZHNXaXRoQW5ub3RhdGlvbiddXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRDbGFzcyxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040Q2xhc3MnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjRDbGFzcycsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRDbGFzc2lmaWVyLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lzQ2xhc3MnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40SW50ZXJmYWNlLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRJbnRlcmZhY2UnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjRJbnRlcmZhY2UnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40Q2xhc3NpZmllci5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0ludGVyZmFjZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRNZW1iZXIsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONE1lbWJlcicsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONE1lbWJlcicsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjROYW1lZEVsZW1lbnQubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb3duZXInLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNTdGF0aWMnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40TWV0aG9kLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRNZXRob2QnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjRNZXRob2QnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40TWVtYmVyLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2pzRnVuY3Rpb24nLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40RGF0YUZpZWxkLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjREYXRhRmllbGQnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjREYXRhRmllbGQnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40TWVtYmVyLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtdLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40QWNjZXNzb3IsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONEFjY2Vzc29yJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzLk40QWNjZXNzb3InLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40TWVtYmVyLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjREYXRhRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdnZXR0ZXInXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNHZXR0ZXInLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40QWNjZXNzb3JbJ2lzR2V0dGVyJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc1NldHRlcicsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRBY2Nlc3NvclsnaXNTZXR0ZXInXVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40RW51bVR5cGUsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONEVudW1UeXBlJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzLk40RW51bVR5cGUnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40VHlwZS5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0VudW0nLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40RW51bSxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040RW51bScsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONEVudW0nLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0b1N0cmluZycsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRFbnVtWyd0b1N0cmluZyddXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWVCeU5hbWUnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40RW51bVsndmFsdWVCeU5hbWUnXSxcbiAgICAgICAgICAgICAgICBpc1N0YXRpYzogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZXMnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1N0YXRpYzogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbjR0eXBlJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtZWJlcnM6IFtdXG4gICAgICAgIH0pKTtcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONFN0cmluZ0Jhc2VkRW51bVR5cGUsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONFN0cmluZ0Jhc2VkRW51bVR5cGUnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjRTdHJpbmdCYXNlZEVudW1UeXBlJyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiBONFR5cGUubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNFbnVtJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtZWJlcnM6IFtdXG4gICAgICAgIH0pKTtcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONFN0cmluZ0Jhc2VkRW51bSxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040U3RyaW5nQmFzZWRFbnVtJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzLk40U3RyaW5nQmFzZWRFbnVtJyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40U3RyaW5nQmFzZWRFbnVtWyd0b1N0cmluZyddXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWVCeU5hbWUnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40U3RyaW5nQmFzZWRFbnVtWyd2YWx1ZUJ5TmFtZSddLFxuICAgICAgICAgICAgICAgIGlzU3RhdGljOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlcycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzU3RhdGljOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICduNHR5cGUnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40QW5ub3RhdGlvbixcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040QW5ub3RhdGlvbicsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONEFubm90YXRpb24nLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40T2JqZWN0Lm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGV0YWlscycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0YXJnZXQnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40UHJvdmlkZXIsXG4gICAgICAgIG5ldyBONEludGVyZmFjZSh7XG4gICAgICAgICAgICBuYW1lOiAnTjRQcm92aWRlcicsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONFByb3ZpZGVyJyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40TWV0aG9kKHsgbmFtZTogJ2dldCcsIGpzRnVuY3Rpb246IE40UHJvdmlkZXJbJ2dldCddLCBhbm5vdGF0aW9uczogW10gfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1iZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ040QnVpbHRJbkNsYXNzZXMnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONEFwaU5vdEltcGxlbWVudGVkRXJyb3InLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtdLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgLy8gTjRJREwtcmVsYXRlZCBpbnRlcmZhY2VzXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE1pZ3JhdGlvbkNvbnRyb2xsZXIsXG4gICAgICAgIG5ldyBONEludGVyZmFjZSh7XG4gICAgICAgICAgICBuYW1lOiAnTWlncmF0aW9uQ29udHJvbGxlcicsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5NaWdyYXRpb25Db250cm9sbGVyJyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbXG4gICAgICAgICAgICAgICAgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ21pZ3JhdGUnLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiBbXVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdtaWdyYXRlV2l0aCcsXG4gICAgICAgICAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY29udGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczogW11cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtYmVyczogW11cbiAgICAgICAgfSkpO1xuICAgIFxuICAgICRjcmVhdGVNZXRhSW5mbyhNaWdyYXRpb25Db250ZXh0LFxuICAgICAgICBuZXcgTjRJbnRlcmZhY2Uoe1xuICAgICAgICAgICAgbmFtZTogJ01pZ3JhdGlvbkNvbnRleHQnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTWlncmF0aW9uQ29udGV4dCcsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW1xuICAgICAgICAgICAgICAgIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdnZXRUcmFjZScsXG4gICAgICAgICAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2lzTW9kaWZpZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiBbXVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzZXRVc2VyRGF0YScsXG4gICAgICAgICAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2dldFVzZXJEYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczogW11cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgLy89PT09PT0gcHJldmVudCBtb2RpZmljYXRpb25zIGF0IHJ1bnRpbWUgcnVudGltZVxuICAgIE9iamVjdC5mcmVlemUoTjRPYmplY3QpO1xuICAgIE9iamVjdC5mcmVlemUoTjRFbGVtZW50KTtcbiAgICBPYmplY3QuZnJlZXplKE40TmFtZWRFbGVtZW50KTtcbiAgICBPYmplY3QuZnJlZXplKE40VHlwZSk7XG4gICAgT2JqZWN0LmZyZWV6ZShONENsYXNzaWZpZXIpO1xuICAgIE9iamVjdC5mcmVlemUoTjRDbGFzcyk7XG4gICAgT2JqZWN0LmZyZWV6ZShONEludGVyZmFjZSk7XG4gICAgT2JqZWN0LmZyZWV6ZShONE1lbWJlcik7XG4gICAgT2JqZWN0LmZyZWV6ZShONE1ldGhvZCk7XG4gICAgT2JqZWN0LmZyZWV6ZShONERhdGFGaWVsZCk7XG4gICAgT2JqZWN0LmZyZWV6ZShONEFjY2Vzc29yKTtcbiAgICBPYmplY3QuZnJlZXplKE40RW51bVR5cGUpO1xuICAgIE9iamVjdC5mcmVlemUoTjRFbnVtKTtcbiAgICBPYmplY3QuZnJlZXplKE40U3RyaW5nQmFzZWRFbnVtVHlwZSk7XG4gICAgT2JqZWN0LmZyZWV6ZShONFN0cmluZ0Jhc2VkRW51bSk7XG4gICAgT2JqZWN0LmZyZWV6ZShONFByb3ZpZGVyKTtcbiAgICBPYmplY3QuZnJlZXplKE40QXBpTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgT2JqZWN0LmZyZWV6ZShNaWdyYXRpb25Db250cm9sbGVyKTtcbiAgICBPYmplY3QuZnJlZXplKE1pZ3JhdGlvbkNvbnRleHQpO1xuXG4gICAgLy89PT09PT0gbWFrZSBnbG9iYWxseSBhdmFpbGFibGVcblxuICAgIGdsb2JhbC5ONE9iamVjdCA9IE40T2JqZWN0O1xuICAgIGdsb2JhbC5ONEVsZW1lbnQgPSBONEVsZW1lbnQ7XG4gICAgZ2xvYmFsLk40TmFtZWRFbGVtZW50ID0gTjROYW1lZEVsZW1lbnQ7XG4gICAgZ2xvYmFsLk40VHlwZSA9IE40VHlwZTtcbiAgICBnbG9iYWwuTjRDbGFzc2lmaWVyID0gTjRDbGFzc2lmaWVyO1xuICAgIGdsb2JhbC5ONENsYXNzID0gTjRDbGFzcztcbiAgICBnbG9iYWwuTjRJbnRlcmZhY2UgPSBONEludGVyZmFjZTtcbiAgICBnbG9iYWwuTjRNZW1iZXIgPSBONE1lbWJlcjtcbiAgICBnbG9iYWwuTjRNZXRob2QgPSBONE1ldGhvZDtcbiAgICBnbG9iYWwuTjREYXRhRmllbGQgPSBONERhdGFGaWVsZDtcbiAgICBnbG9iYWwuTjRBY2Nlc3NvciA9IE40QWNjZXNzb3I7XG4gICAgZ2xvYmFsLk40RW51bVR5cGUgPSBONEVudW1UeXBlO1xuICAgIGdsb2JhbC5ONEVudW0gPSBONEVudW07XG4gICAgZ2xvYmFsLk40U3RyaW5nQmFzZWRFbnVtVHlwZSA9IE40U3RyaW5nQmFzZWRFbnVtVHlwZTtcbiAgICBnbG9iYWwuTjRTdHJpbmdCYXNlZEVudW0gPSBONFN0cmluZ0Jhc2VkRW51bTtcbiAgICBnbG9iYWwuTjRBbm5vdGF0aW9uID0gTjRBbm5vdGF0aW9uO1xuICAgIGdsb2JhbC5ONFByb3ZpZGVyID0gTjRQcm92aWRlcjtcbiAgICBnbG9iYWwuTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yID0gTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yO1xuICAgIGdsb2JhbC5NaWdyYXRpb25Db250cm9sbGVyID0gTWlncmF0aW9uQ29udHJvbGxlcjtcbiAgICBnbG9iYWwuTWlncmF0aW9uQ29udGV4dCA9IE1pZ3JhdGlvbkNvbnRleHQ7XG5cbn0pKHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiBzZWxmKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTcgTnVtYmVyRm91ciBBRy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcbiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcbiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG4gKlxuICogQ29udHJpYnV0b3JzOlxuICogICBOdW1iZXJGb3VyIEFHIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4gKi9cbi8qZXNsaW50LWRpc2FibGUgbmV3LWNhcCwgbm8tcHJvdG8sIHN0cmljdCAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgdmFyIEFycmF5U2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsXG4gICAgICAgIG5vb3AgPSBmdW5jdGlvbigpIHt9O1xuXG4gICAgaWYgKHR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB2YXIgZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLmJpbmQoT2JqZWN0KSxcbiAgICAgICAgICAgIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LmJpbmQoT2JqZWN0KTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uKGZuLCBwcm9wcykge1xuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBwcm9wcykge1xuICAgICAgICAgICAgICAgIHZhciBwcm9wID0gcHJvcHNba107XG4gICAgICAgICAgICAgICAgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3Aud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKGZuLCBwcm9wcyk7XG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uKGZuLCBuYW1lLCBwcm9wKSB7XG4gICAgICAgICAgICBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvcC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHByb3Aud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZuLCBuYW1lLCBwcm9wKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQ2FsbCBjb250ZXh0IGlzIHByb3RvdHlwZSBvYmplY3QuICovXG4gICAgZnVuY3Rpb24gbWl4aW5EZWZhdWx0TWV0aG9kKG1ldGhvZCkge1xuICAgICAgICB2YXIgbmFtZSA9IG1ldGhvZCAmJiBtZXRob2QubmFtZTtcbiAgICAgICAgaWYgKG5hbWUgJiYgIShuYW1lIGluIHRoaXMpICYmICFtZXRob2QuaXNTdGF0aWMgJiYgbWV0aG9kLmpzRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSBtZXRob2QuanNGdW5jdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQ2FsbCBjb250ZXh0IGlzIHByb3RvdHlwZSBvYmplY3QuICovXG4gICAgZnVuY3Rpb24gbWl4aW5EZWZhdWx0TWV0aG9kcyhpZmFjZSkge1xuICAgICAgICB2YXIgbjR0eXBlID0gaWZhY2UgJiYgaWZhY2UubjR0eXBlO1xuICAgICAgICBpZiAobjR0eXBlKSB7XG4gICAgICAgICAgICBuNHR5cGUub3duZWRNZW1iZXJzLmZvckVhY2gobWl4aW5EZWZhdWx0TWV0aG9kLCB0aGlzKTtcbiAgICAgICAgICAgIG40dHlwZS5jb25zdW1lZE1lbWJlcnMuZm9yRWFjaChtaXhpbkRlZmF1bHRNZXRob2QsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0dXAgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0byB3b3JrIGFzIGEgY2xhc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3RvciAtIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBzdXBlckN0b3IgLSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gb2YgdGhlIHN1cGVyIGNsYXNzXG4gICAgICogQHBhcmFtIGltcGxlbWVudGVkSW50ZXJmYWNlcyAtIEFycmF5IG9mIGRpcmVjdGx5IGltcGxlbWVudGVkIGludGVyZmFjZXMsIGV4Y2x1ZGluZyBidWlsdC1pbiB0eXBlcyBhbmRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlcyBkZWZpbmVkIGluIGRlZmluaXRpb24gZmlsZXMgd2l0aG91dCBhbm5vdGF0aW9uIEBONEpTLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZU1ldGhvZHMgLSBBbiBvYmplY3QgaG9sZGluZyB0aGUgbWV0aG9kcyBmb3IgdGhlIGNsYXNzIGluc3RhbmNlIGFuZCBtaXhlZCBpbiBtZXRob2RzXG4gICAgICogQHBhcmFtIHN0YXRpY01ldGhvZHMgLSBBbiBvYmplY3QgaG9sZGluZyB0aGUgZGVzY3JpcHRvcnMgZm9yIHRoZSBjbGFzcyBzdGF0aWMgbWV0aG9kc1xuICAgICAqIEBwYXJhbSBuNHR5cGVGbiAtIFRoZSBmYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgbWV0YSB0eXBlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRtYWtlQ2xhc3MoY3Rvciwgc3VwZXJDdG9yLCBpbXBsZW1lbnRlZEludGVyZmFjZXMsIGluc3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9kcywgbjR0eXBlRm4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdXBlckN0b3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGN0b3IsIHN1cGVyQ3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY3Rvciwgc3RhdGljTWV0aG9kcyk7XG5cbiAgICAgICAgdmFyIHByb3RvID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCBpbnN0YW5jZU1ldGhvZHMpO1xuICAgICAgICBpbXBsZW1lbnRlZEludGVyZmFjZXMuZm9yRWFjaChtaXhpbkRlZmF1bHRNZXRob2RzLCBwcm90byk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgXCJjb25zdHJ1Y3RvclwiLCB7IHZhbHVlOiBjdG9yIH0pO1xuXG4gICAgICAgIHZhciBuNHR5cGUgPSBuNHR5cGVGbihwcm90bywgY3Rvcik7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdG9yLCBcIm40dHlwZVwiLCB7IHZhbHVlOiBuNHR5cGUgfSk7XG5cbiAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBwcm90bztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXR1cCBhIGludGVyZmFjZS4gTWV0aG9kcyBhbmQgZmllbGQgaW5pdGlhbGl6ZXJzIGFyZSBhbHJlYWR5IG1lcmdlZCBpbnRvIHRoZSBpbnRlcmZhY2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpbnRlcmZhY2UgLSBUaGUgaW50ZXJmYWNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gbjR0eXBlRm4gLSBUaGUgZmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIG1ldGEgdHlwZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiAkbWFrZUludGVyZmFjZSh0aW50ZXJmYWNlLCBuNHR5cGVGbikge1xuICAgICAgICB2YXIgcHJvdG8gPSB0aW50ZXJmYWNlLiRtZXRob2RzLFxuICAgICAgICAgICAgbjR0eXBlID0gbjR0eXBlRm4ocHJvdG8sIHRpbnRlcmZhY2UpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGludGVyZmFjZSwgXCJuNHR5cGVcIiwgeyB2YWx1ZTogbjR0eXBlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiB0eXBlIHdpdGggdGhlIGdpdmVuIEZRTiBhbmQgbWVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnVtZXJhdGlvbiAtIHRoZSBlbnVtZXJhdGlvbiBjb25zdHJ1Y3RvciBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBtZW1iZXJzIC0gQW4gYXJyYXkgb2YgPFN0cmluZywgU3RyaW5nPiB0dXBsZXMgY29udGFpbmluZ1xuICAgICAqICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudW0gbWVtYmVyc1xuICAgICAqIEBwYXJhbSBuNHR5cGUgLSBUaGUgZmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIG1ldGF0eXBlXG4gICAgICogQHJldHVybiBUaGUgY29uc3RydWN0ZWQgZW51bWVyYXRpb24gdHlwZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRtYWtlRW51bShlbnVtZXJhdGlvbiwgc3RyaW5nQmFzZWQvKiBUT0RPIG9ic29sZXRlICovLCBtZW1iZXJzLCBuNHR5cGUpIHtcbiAgICAgICAgdmFyIGxlbmd0aCwgaW5kZXgsIG1lbWJlciwgbmFtZSwgdmFsdWUsIHZhbHVlcywgbGl0ZXJhbDtcblxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZW51bWVyYXRpb24sIGdsb2JhbC5ONEVudW0pO1xuICAgICAgICBlbnVtZXJhdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGdsb2JhbC5ONEVudW0ucHJvdG90eXBlLCB7fSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnVtZXJhdGlvbiwgJ240dHlwZScsIHtcbiAgICAgICAgICAgIHZhbHVlOiBuNHR5cGUobm9vcClcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnVtZXJhdGlvbi5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwgeyB2YWx1ZTogZW51bWVyYXRpb24gfSk7XG5cbiAgICAgICAgbGVuZ3RoID0gbWVtYmVycy5sZW5ndGg7XG4gICAgICAgIHZhbHVlcyA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgICAgIG1lbWJlciA9IG1lbWJlcnNbaW5kZXhdO1xuICAgICAgICAgICAgbmFtZSA9IG1lbWJlclswXTtcbiAgICAgICAgICAgIHZhbHVlID0gbWVtYmVyWzFdO1xuXG4gICAgICAgICAgICBsaXRlcmFsID0gbmV3IGVudW1lcmF0aW9uKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnVtZXJhdGlvbiwgbGl0ZXJhbC5uYW1lLCB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbGl0ZXJhbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gbGl0ZXJhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnVtZXJhdGlvbiwgJ2xpdGVyYWxzJywge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIGEgdmFsdWUgaXMgaW5zdGFuY2Ugb2YgYSBjbGFzcyBpbXBsZW1lbnRpbmcgYW4gaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluc3RhbmNlIC0gVGhlIGluc3RhbmNlIHdoaWNoIHR5cGUgaXMgdG8gYmUgY2hlY2tlZCB3aGV0aGVyIGl0IGltcGxlbWVudHMgdGhlIGludGVyZmFjZVxuICAgICAqIEBwYXJhbSBpbXBsZW1lbnRlZEludGVyZmFjZSAtIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIGluY2x1ZGluZyB0aGUgcGFja2FnZSBpZGVudGlmaWVyXG4gICAgICogQHJldHVybiBib29sZWFuXG4gICAgICovXG4gICAgZnVuY3Rpb24gJGltcGxlbWVudHMoaW5zdGFuY2UsIGltcGxlbWVudGVkSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICghaW5zdGFuY2UgfHwgIWluc3RhbmNlLmNvbnN0cnVjdG9yIHx8ICFpbnN0YW5jZS5jb25zdHJ1Y3Rvci5uNHR5cGUgfHwgIWluc3RhbmNlLmNvbnN0cnVjdG9yLm40dHlwZS5hbGxJbXBsZW1lbnRlZEludGVyZmFjZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zdGFuY2UuY29uc3RydWN0b3IubjR0eXBlLmFsbEltcGxlbWVudGVkSW50ZXJmYWNlcy5pbmRleE9mKGltcGxlbWVudGVkSW50ZXJmYWNlKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zdGFuY2VvZi13cmFwcGVyIGRlbGVnYXRpbmcgdG8gJGltcGxlbWVudHMgaW4gY2FzZSBvZiBwb3RlbnRpYWwgaW50ZXJmYWNlcyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluc3RhbmNlIC0gVGhlIGluc3RhbmNlIHdoaWNoIHR5cGUgaXMgdG8gYmUgY2hlY2tlZCB3aGV0aGVyIGl0IGltcGxlbWVudHMgdGhlIGludGVyZmFjZVxuICAgICAqIEBwYXJhbSBzdXBlcnRweWUgLSB0eXBlIHRvIGNoZWNrIGFnYWluc3RcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBpbnN0YW5jZS1wYXJhbWV0ZXIgaXMgYW4gaW5zdGFuY2Ugb2Ygc3VwZXJ0eXBlLXBhcmFtZXRlclxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRpbnN0YW5jZW9mKGluc3RhbmNlLCBzdXBlcnR5cGUpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3VwZXJ0eXBlID09PSBcIm9iamVjdFwiKSB7IC8vIGludGVyZmFjZSB0eXBlXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gKHN1cGVydHlwZVtcIm40dHlwZVwiXSB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZxbiA9IHQgPyB0LmZxbiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkaW1wbGVtZW50cyhpbnN0YW5jZSwgZnFuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlIGluc3RhbmNlb2Ygc3VwZXJ0eXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gdXNlZCB3aGVuIHRyYW5zcGlsaW5nIGRlc3RydWN0dXJpbmcgcGF0dGVybnMuIFJldHVybiBhbiBhcnJheSBvZiB0aGUgZmlyc3QgJ21heCdcbiAgICAgKiBlbGVtZW50cyBmcm9tIGl0ZXJhYmxlICdhcnInLiBJZiB0aGUgSXRlcmFibGUgZG9lcyBub3QgcHJvdmlkZSBlbm91Z2ggZWxlbWVudHMsIGEgc2hvcnRlciBhcnJheVxuICAgICAqIGlzIHJldHVybmVkLiBTbyBsZW5ndGggb2YgcmV0dXJuZWQgYXJyYXkgaXMgYmV0d2VlbiAwIGFuZCAnbWF4Jy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcnIgLSB0aGUgSXRlcmFibGUgdGhhdCBpcyB0byBiZSB0dXJuZWQgaW50byBhbiBhcnJheS5cbiAgICAgKiBAcGFyYW0gbWF4IC0gbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gJHNsaWNlVG9BcnJheUZvckRlc3RydWN0KGFyciwgbWF4KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7XG4gICAgICAgICAgICB2YXIgcmV0ID0gW10sXG4gICAgICAgICAgICAgICAgaXQgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLFxuICAgICAgICAgICAgICAgIGVudHJ5O1xuICAgICAgICAgICAgd2hpbGUgKCEoZW50cnkgPSBpdC5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgICByZXQucHVzaChlbnRyeS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJldC5sZW5ndGggPj0gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBnZW5lcmF0b3Igc3RlcCBieSBzdGVwIGNoYWluaW5nIHVwIHByb21pc2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGdlbiAtIGdlbmVyYXRvciBvYmplY3QgdG8gYmUgc2VxdWVudGlhbGx5IGV4ZWN1dGVkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRzcGF3bihnZW4pIHtcbiAgICAgICAgZnVuY3Rpb24gZXhlYyhzdGVwLCB2KSB7XG4gICAgICAgICAgICB2YXIgcmVzO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzW3N0ZXBdKHYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXhjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGV4Yyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLmRvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlcy52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzLnZhbHVlKS50aGVuKG5leHQsIHRocm93cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dCA9IGV4ZWMuYmluZChnZW4sIFwibmV4dFwiKSxcbiAgICAgICAgICAgIHRocm93ciA9IGV4ZWMuYmluZChnZW4sIFwidGhyb3dcIik7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gJG40cHJvbWlzaWZ5RnVuY3Rpb24oY2JCYXNlZEZuLCBhcmdzLCBtdWx0aVN1Y2Nlc3NWYWx1ZXMsIG5vRXJyb3JWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goZnVuY3Rpb24ocmVzdWx0MCwgcmVzdWx0MSkge1xuICAgICAgICAgICAgICAgIGlmIChub0Vycm9yVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtdWx0aVN1Y2Nlc3NWYWx1ZXMgPyBBcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSA6IHJlc3VsdDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0MCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG11bHRpU3VjY2Vzc1ZhbHVlcyA/IEFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogcmVzdWx0MSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNiQmFzZWRGbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uICRuNHByb21pc2lmeU1ldGhvZChyZWNlaXZlciwgbWV0aG9kTmFtZSwgYXJncywgbXVsdGlTdWNjZXNzVmFsdWVzLCBub0Vycm9yVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uKHJlc3VsdDAsIHJlc3VsdDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9FcnJvclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobXVsdGlTdWNjZXNzVmFsdWVzID8gQXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMCkgOiByZXN1bHQwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3VsdDApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtdWx0aVN1Y2Nlc3NWYWx1ZXMgPyBBcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSA6IHJlc3VsdDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZWNlaXZlclttZXRob2ROYW1lXS5hcHBseShyZWNlaXZlciwgYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vZXhwb3NlIGluIGdsb2JhbCBzY29wZVxuICAgIGdsb2JhbC4kbWFrZUNsYXNzID0gJG1ha2VDbGFzcztcbiAgICBnbG9iYWwuJG1ha2VJbnRlcmZhY2UgPSAkbWFrZUludGVyZmFjZTtcbiAgICBnbG9iYWwuJG1ha2VFbnVtID0gJG1ha2VFbnVtO1xuICAgIGdsb2JhbC4kaW1wbGVtZW50cyA9ICRpbXBsZW1lbnRzO1xuICAgIGdsb2JhbC4kaW5zdGFuY2VvZiA9ICRpbnN0YW5jZW9mO1xuICAgIGdsb2JhbC4kc2xpY2VUb0FycmF5Rm9yRGVzdHJ1Y3QgPSAkc2xpY2VUb0FycmF5Rm9yRGVzdHJ1Y3Q7XG4gICAgZ2xvYmFsLiRzcGF3biA9ICRzcGF3bjtcbiAgICBnbG9iYWwuJG40cHJvbWlzaWZ5RnVuY3Rpb24gPSAkbjRwcm9taXNpZnlGdW5jdGlvbjtcbiAgICBnbG9iYWwuJG40cHJvbWlzaWZ5TWV0aG9kID0gJG40cHJvbWlzaWZ5TWV0aG9kO1xuXG59KSh0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDogc2VsZik7XG4iLCJmdW5jdGlvbiB3ZWJwYWNrRW1wdHlBc3luY0NvbnRleHQocmVxKSB7XG5cdC8vIEhlcmUgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigpIGlzIHVzZWQgaW5zdGVhZCBvZiBuZXcgUHJvbWlzZSgpIHRvIHByZXZlbnRcblx0Ly8gdW5jYXVnaHQgZXhjZXB0aW9uIHBvcHBpbmcgdXAgaW4gZGV2dG9vbHNcblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9KTtcbn1cbndlYnBhY2tFbXB0eUFzeW5jQ29udGV4dC5rZXlzID0gZnVuY3Rpb24oKSB7IHJldHVybiBbXTsgfTtcbndlYnBhY2tFbXB0eUFzeW5jQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0VtcHR5QXN5bmNDb250ZXh0O1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrRW1wdHlBc3luY0NvbnRleHQ7XG53ZWJwYWNrRW1wdHlBc3luY0NvbnRleHQuaWQgPSA3OyIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgaz1yZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKSxuPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IscD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLHE9bj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LHI9bj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsdD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCx1PW4/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LHY9bj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksdz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLHg9bj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLHk9bj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIsej1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxhYT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOlxuNjAxMTUsYmE9bj9TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTo2MDExNixBPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBjYShhLGIsZCxjLGUsZyxoLGYpe2lmKCFhKXthPXZvaWQgMDtpZih2b2lkIDA9PT1iKWE9RXJyb3IoXCJNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwiKTtlbHNle3ZhciBsPVtkLGMsZSxnLGgsZl0sbT0wO2E9RXJyb3IoYi5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9uKCl7cmV0dXJuIGxbbSsrXX0pKTthLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCJ9YS5mcmFtZXNUb1BvcD0xO3Rocm93IGE7fX1cbmZ1bmN0aW9uIEIoYSl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgtMSxkPVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrYSxjPTA7YzxiO2MrKylkKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tjKzFdKTtjYSghMSxcIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCAlcyBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIFwiLGQpfXZhciBDPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxEPXt9O1xuZnVuY3Rpb24gRShhLGIsZCl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1EO3RoaXMudXBkYXRlcj1kfHxDfUUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e307RS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYSxiKXtcIm9iamVjdFwiIT09dHlwZW9mIGEmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBhJiZudWxsIT1hP0IoXCI4NVwiKTp2b2lkIDA7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtFLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtmdW5jdGlvbiBGKCl7fUYucHJvdG90eXBlPUUucHJvdG90eXBlO2Z1bmN0aW9uIEcoYSxiLGQpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9RDt0aGlzLnVwZGF0ZXI9ZHx8Q312YXIgSD1HLnByb3RvdHlwZT1uZXcgRjtcbkguY29uc3RydWN0b3I9RztrKEgsRS5wcm90b3R5cGUpO0guaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEk9e2N1cnJlbnQ6bnVsbH0sSj17Y3VycmVudDpudWxsfSxLPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksTD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O1xuZnVuY3Rpb24gTShhLGIsZCl7dmFyIGM9dm9pZCAwLGU9e30sZz1udWxsLGg9bnVsbDtpZihudWxsIT1iKWZvcihjIGluIHZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihnPVwiXCIrYi5rZXkpLGIpSy5jYWxsKGIsYykmJiFMLmhhc093blByb3BlcnR5KGMpJiYoZVtjXT1iW2NdKTt2YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZS5jaGlsZHJlbj1kO2Vsc2UgaWYoMTxmKXtmb3IodmFyIGw9QXJyYXkoZiksbT0wO208ZjttKyspbFttXT1hcmd1bWVudHNbbSsyXTtlLmNoaWxkcmVuPWx9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGMgaW4gZj1hLmRlZmF1bHRQcm9wcyxmKXZvaWQgMD09PWVbY10mJihlW2NdPWZbY10pO3JldHVybnskJHR5cGVvZjpwLHR5cGU6YSxrZXk6ZyxyZWY6aCxwcm9wczplLF9vd25lcjpKLmN1cnJlbnR9fVxuZnVuY3Rpb24gZGEoYSxiKXtyZXR1cm57JCR0eXBlb2Y6cCx0eXBlOmEudHlwZSxrZXk6YixyZWY6YS5yZWYscHJvcHM6YS5wcm9wcyxfb3duZXI6YS5fb3duZXJ9fWZ1bmN0aW9uIE4oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PXB9ZnVuY3Rpb24gZXNjYXBlKGEpe3ZhciBiPXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifTtyZXR1cm5cIiRcIisoXCJcIithKS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oYSl7cmV0dXJuIGJbYV19KX12YXIgTz0vXFwvKy9nLFA9W107ZnVuY3Rpb24gUShhLGIsZCxjKXtpZihQLmxlbmd0aCl7dmFyIGU9UC5wb3AoKTtlLnJlc3VsdD1hO2Uua2V5UHJlZml4PWI7ZS5mdW5jPWQ7ZS5jb250ZXh0PWM7ZS5jb3VudD0wO3JldHVybiBlfXJldHVybntyZXN1bHQ6YSxrZXlQcmVmaXg6YixmdW5jOmQsY29udGV4dDpjLGNvdW50OjB9fVxuZnVuY3Rpb24gUihhKXthLnJlc3VsdD1udWxsO2Eua2V5UHJlZml4PW51bGw7YS5mdW5jPW51bGw7YS5jb250ZXh0PW51bGw7YS5jb3VudD0wOzEwPlAubGVuZ3RoJiZQLnB1c2goYSl9XG5mdW5jdGlvbiBTKGEsYixkLGMpe3ZhciBlPXR5cGVvZiBhO2lmKFwidW5kZWZpbmVkXCI9PT1lfHxcImJvb2xlYW5cIj09PWUpYT1udWxsO3ZhciBnPSExO2lmKG51bGw9PT1hKWc9ITA7ZWxzZSBzd2l0Y2goZSl7Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJudW1iZXJcIjpnPSEwO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBwOmNhc2UgcTpnPSEwfX1pZihnKXJldHVybiBkKGMsYSxcIlwiPT09Yj9cIi5cIitUKGEsMCk6YiksMTtnPTA7Yj1cIlwiPT09Yj9cIi5cIjpiK1wiOlwiO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBoPTA7aDxhLmxlbmd0aDtoKyspe2U9YVtoXTt2YXIgZj1iK1QoZSxoKTtnKz1TKGUsZixkLGMpfWVsc2UgaWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYT9mPW51bGw6KGY9QSYmYVtBXXx8YVtcIkBAaXRlcmF0b3JcIl0sZj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgZj9mOm51bGwpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmKWZvcihhPWYuY2FsbChhKSxoPVxuMDshKGU9YS5uZXh0KCkpLmRvbmU7KWU9ZS52YWx1ZSxmPWIrVChlLGgrKyksZys9UyhlLGYsZCxjKTtlbHNlXCJvYmplY3RcIj09PWUmJihkPVwiXCIrYSxCKFwiMzFcIixcIltvYmplY3QgT2JqZWN0XVwiPT09ZD9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKGEpLmpvaW4oXCIsIFwiKStcIn1cIjpkLFwiXCIpKTtyZXR1cm4gZ31mdW5jdGlvbiBVKGEsYixkKXtyZXR1cm4gbnVsbD09YT8wOlMoYSxcIlwiLGIsZCl9ZnVuY3Rpb24gVChhLGIpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJm51bGwhPWEua2V5P2VzY2FwZShhLmtleSk6Yi50b1N0cmluZygzNil9ZnVuY3Rpb24gZWEoYSxiKXthLmZ1bmMuY2FsbChhLmNvbnRleHQsYixhLmNvdW50KyspfVxuZnVuY3Rpb24gZmEoYSxiLGQpe3ZhciBjPWEucmVzdWx0LGU9YS5rZXlQcmVmaXg7YT1hLmZ1bmMuY2FsbChhLmNvbnRleHQsYixhLmNvdW50KyspO0FycmF5LmlzQXJyYXkoYSk/VihhLGMsZCxmdW5jdGlvbihhKXtyZXR1cm4gYX0pOm51bGwhPWEmJihOKGEpJiYoYT1kYShhLGUrKCFhLmtleXx8YiYmYi5rZXk9PT1hLmtleT9cIlwiOihcIlwiK2Eua2V5KS5yZXBsYWNlKE8sXCIkJi9cIikrXCIvXCIpK2QpKSxjLnB1c2goYSkpfWZ1bmN0aW9uIFYoYSxiLGQsYyxlKXt2YXIgZz1cIlwiO251bGwhPWQmJihnPShcIlwiK2QpLnJlcGxhY2UoTyxcIiQmL1wiKStcIi9cIik7Yj1RKGIsZyxjLGUpO1UoYSxmYSxiKTtSKGIpfWZ1bmN0aW9uIFcoKXt2YXIgYT1JLmN1cnJlbnQ7bnVsbD09PWE/QihcIjMyMVwiKTp2b2lkIDA7cmV0dXJuIGF9XG52YXIgWD17Q2hpbGRyZW46e21hcDpmdW5jdGlvbihhLGIsZCl7aWYobnVsbD09YSlyZXR1cm4gYTt2YXIgYz1bXTtWKGEsYyxudWxsLGIsZCk7cmV0dXJuIGN9LGZvckVhY2g6ZnVuY3Rpb24oYSxiLGQpe2lmKG51bGw9PWEpcmV0dXJuIGE7Yj1RKG51bGwsbnVsbCxiLGQpO1UoYSxlYSxiKTtSKGIpfSxjb3VudDpmdW5jdGlvbihhKXtyZXR1cm4gVShhLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG51bGwpfSx0b0FycmF5OmZ1bmN0aW9uKGEpe3ZhciBiPVtdO1YoYSxiLG51bGwsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KTtyZXR1cm4gYn0sb25seTpmdW5jdGlvbihhKXtOKGEpP3ZvaWQgMDpCKFwiMTQzXCIpO3JldHVybiBhfX0sY3JlYXRlUmVmOmZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LENvbXBvbmVudDpFLFB1cmVDb21wb25lbnQ6RyxjcmVhdGVDb250ZXh0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9bnVsbCk7YT17JCR0eXBlb2Y6dyxfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6Yixcbl9jdXJyZW50VmFsdWU6YSxfY3VycmVudFZhbHVlMjphLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH07YS5Qcm92aWRlcj17JCR0eXBlb2Y6dixfY29udGV4dDphfTtyZXR1cm4gYS5Db25zdW1lcj1hfSxmb3J3YXJkUmVmOmZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjp5LHJlbmRlcjphfX0sbGF6eTpmdW5jdGlvbihhKXtyZXR1cm57JCR0eXBlb2Y6YmEsX2N0b3I6YSxfc3RhdHVzOi0xLF9yZXN1bHQ6bnVsbH19LG1lbW86ZnVuY3Rpb24oYSxiKXtyZXR1cm57JCR0eXBlb2Y6YWEsdHlwZTphLGNvbXBhcmU6dm9pZCAwPT09Yj9udWxsOmJ9fSx1c2VDYWxsYmFjazpmdW5jdGlvbihhLGIpe3JldHVybiBXKCkudXNlQ2FsbGJhY2soYSxiKX0sdXNlQ29udGV4dDpmdW5jdGlvbihhLGIpe3JldHVybiBXKCkudXNlQ29udGV4dChhLGIpfSx1c2VFZmZlY3Q6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVygpLnVzZUVmZmVjdChhLGIpfSx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGEsXG5iLGQpe3JldHVybiBXKCkudXNlSW1wZXJhdGl2ZUhhbmRsZShhLGIsZCl9LHVzZURlYnVnVmFsdWU6ZnVuY3Rpb24oKXt9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihhLGIpe3JldHVybiBXKCkudXNlTGF5b3V0RWZmZWN0KGEsYil9LHVzZU1lbW86ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVygpLnVzZU1lbW8oYSxiKX0sdXNlUmVkdWNlcjpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIFcoKS51c2VSZWR1Y2VyKGEsYixkKX0sdXNlUmVmOmZ1bmN0aW9uKGEpe3JldHVybiBXKCkudXNlUmVmKGEpfSx1c2VTdGF0ZTpmdW5jdGlvbihhKXtyZXR1cm4gVygpLnVzZVN0YXRlKGEpfSxGcmFnbWVudDpyLFN0cmljdE1vZGU6dCxTdXNwZW5zZTp6LGNyZWF0ZUVsZW1lbnQ6TSxjbG9uZUVsZW1lbnQ6ZnVuY3Rpb24oYSxiLGQpe251bGw9PT1hfHx2b2lkIDA9PT1hP0IoXCIyNjdcIixhKTp2b2lkIDA7dmFyIGM9dm9pZCAwLGU9ayh7fSxhLnByb3BzKSxnPWEua2V5LGg9YS5yZWYsZj1hLl9vd25lcjtpZihudWxsIT1cbmIpe3ZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZixmPUouY3VycmVudCk7dm9pZCAwIT09Yi5rZXkmJihnPVwiXCIrYi5rZXkpO3ZhciBsPXZvaWQgMDthLnR5cGUmJmEudHlwZS5kZWZhdWx0UHJvcHMmJihsPWEudHlwZS5kZWZhdWx0UHJvcHMpO2ZvcihjIGluIGIpSy5jYWxsKGIsYykmJiFMLmhhc093blByb3BlcnR5KGMpJiYoZVtjXT12b2lkIDA9PT1iW2NdJiZ2b2lkIDAhPT1sP2xbY106YltjXSl9Yz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWMpZS5jaGlsZHJlbj1kO2Vsc2UgaWYoMTxjKXtsPUFycmF5KGMpO2Zvcih2YXIgbT0wO208YzttKyspbFttXT1hcmd1bWVudHNbbSsyXTtlLmNoaWxkcmVuPWx9cmV0dXJueyQkdHlwZW9mOnAsdHlwZTphLnR5cGUsa2V5OmcscmVmOmgscHJvcHM6ZSxfb3duZXI6Zn19LGNyZWF0ZUZhY3Rvcnk6ZnVuY3Rpb24oYSl7dmFyIGI9TS5iaW5kKG51bGwsYSk7Yi50eXBlPWE7cmV0dXJuIGJ9LGlzVmFsaWRFbGVtZW50Ok4sdmVyc2lvbjpcIjE2LjguNlwiLFxudW5zdGFibGVfQ29uY3VycmVudE1vZGU6eCx1bnN0YWJsZV9Qcm9maWxlcjp1LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOntSZWFjdEN1cnJlbnREaXNwYXRjaGVyOkksUmVhY3RDdXJyZW50T3duZXI6Sixhc3NpZ246a319LFk9e2RlZmF1bHQ6WH0sWj1ZJiZYfHxZO21vZHVsZS5leHBvcnRzPVouZGVmYXVsdHx8WjtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvLyBHZW5lcmF0ZWQgYnkgTjRKUyB0cmFuc3BpbGVyOyBmb3IgY29weXJpZ2h0IHNlZSBvcmlnaW5hbCBONEpTIHNvdXJjZSBmaWxlLlxuXG5pbXBvcnQgJ240anMtcnVudGltZSdcblxuZXhwb3J0IGZ1bmN0aW9uIENvb3JkaW5hdGUoc3BlYykge1xuXHR0aGlzLnJvdyA9IHNwZWMgJiYgJ3JvdycgaW4gc3BlYyA/IHNwZWMucm93IDogdW5kZWZpbmVkO1xuXHR0aGlzLmNvbCA9IHNwZWMgJiYgJ2NvbCcgaW4gc3BlYyA/IHNwZWMuY29sIDogdW5kZWZpbmVkO1xuXHRpZiAoc3BlYykge31cbn1cbiRtYWtlQ2xhc3MoQ29vcmRpbmF0ZSwgTjRPYmplY3QsIFtdLCB7XG5cdGVxdWFsczoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBlcXVhbHNfX19uNChvdGhlcikge1xuXHRcdFx0cmV0dXJuICh0aGlzLnJvdyA9PSBvdGhlci5yb3cpICYmICh0aGlzLmNvbCA9PSBvdGhlci5jb2wpO1xuXHRcdH1cblx0fSxcblx0Z2V0Qm9hcmRDb29yZGluYXRlUmVwcmVzZW50YXRpb246IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0Qm9hcmRDb29yZGluYXRlUmVwcmVzZW50YXRpb25fX19uNCgpIHtcblx0XHRcdGNvbnN0IHJvd0xhYmVsID0gOCAtIHRoaXMucm93O1xuXHRcdFx0Y29uc3QgY29sTGFiZWwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCdhJy5jaGFyQ29kZUF0KDApICsgdGhpcy5jb2wpO1xuXHRcdFx0cmV0dXJuIGAoJHtyb3dMYWJlbCArICcsJyArIGNvbExhYmVsfSlgO1xuXHRcdH1cblx0fSxcblx0dG9TdHJpbmc6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmdfX19uNCgpIHtcblx0XHRcdHJldHVybiBgKCR7dGhpcy5yb3d9LCR7dGhpcy5jb2x9KWA7XG5cdFx0fVxuXHR9LFxuXHRyb3c6IHtcblx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdHdyaXRhYmxlOiB0cnVlXG5cdH0sXG5cdGNvbDoge1xuXHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0d3JpdGFibGU6IHRydWVcblx0fVxufSwge30sIGZ1bmN0aW9uKGluc3RhbmNlUHJvdG8sIHN0YXRpY1Byb3RvKSB7XG5cdHZhciBtZXRhQ2xhc3MgPSBuZXcgTjRDbGFzcyh7XG5cdFx0bmFtZTogJ0Nvb3JkaW5hdGUnLFxuXHRcdG9yaWdpbjogJ2NoZXNzLXJlYWN0Jyxcblx0XHRmcW46ICdDb29yZGluYXRlLkNvb3JkaW5hdGUnLFxuXHRcdG40c3VwZXJUeXBlOiBONE9iamVjdC5uNHR5cGUsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdyb3cnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnY29sJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2NvbnN0cnVjdG9yJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjb25zdHJ1Y3RvciddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2VxdWFscycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snZXF1YWxzJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0Qm9hcmRDb29yZGluYXRlUmVwcmVzZW50YXRpb24nLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2dldEJvYXJkQ29vcmRpbmF0ZVJlcHJlc2VudGF0aW9uJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAndG9TdHJpbmcnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ3RvU3RyaW5nJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db29yZGluYXRlLm1hcFxuIiwiLy8gR2VuZXJhdGVkIGJ5IE40SlMgdHJhbnNwaWxlcjsgZm9yIGNvcHlyaWdodCBzZWUgb3JpZ2luYWwgTjRKUyBzb3VyY2UgZmlsZS5cblxuaW1wb3J0ICduNGpzLXJ1bnRpbWUnXG5cbmV4cG9ydCBmdW5jdGlvbiBNb3ZlKHNwZWMpIHtcblx0dGhpcy5waWVjZSA9IHNwZWMgJiYgJ3BpZWNlJyBpbiBzcGVjID8gc3BlYy5waWVjZSA6IHVuZGVmaW5lZDtcblx0dGhpcy5mcm9tUG9zID0gc3BlYyAmJiAnZnJvbVBvcycgaW4gc3BlYyA/IHNwZWMuZnJvbVBvcyA6IHVuZGVmaW5lZDtcblx0dGhpcy50b1BvcyA9IHNwZWMgJiYgJ3RvUG9zJyBpbiBzcGVjID8gc3BlYy50b1BvcyA6IHVuZGVmaW5lZDtcblx0aWYgKHNwZWMpIHt9XG59XG4kbWFrZUNsYXNzKE1vdmUsIE40T2JqZWN0LCBbXSwge1xuXHR0b1N0cmluZzoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZ19fX240KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGllY2UgKyAnICcgKyB0aGlzLmZyb21Qb3MuZ2V0Qm9hcmRDb29yZGluYXRlUmVwcmVzZW50YXRpb24oKSArICfihpInICsgdGhpcy50b1Bvcy5nZXRCb2FyZENvb3JkaW5hdGVSZXByZXNlbnRhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0cGllY2U6IHtcblx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdHdyaXRhYmxlOiB0cnVlXG5cdH0sXG5cdGZyb21Qb3M6IHtcblx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdHdyaXRhYmxlOiB0cnVlXG5cdH0sXG5cdHRvUG9zOiB7XG5cdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHR3cml0YWJsZTogdHJ1ZVxuXHR9XG59LCB7fSwgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONENsYXNzKHtcblx0XHRuYW1lOiAnTW92ZScsXG5cdFx0b3JpZ2luOiAnY2hlc3MtcmVhY3QnLFxuXHRcdGZxbjogJ01vdmUuTW92ZScsXG5cdFx0bjRzdXBlclR5cGU6IE40T2JqZWN0Lm40dHlwZSxcblx0XHRhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuXHRcdG93bmVkTWVtYmVyczogW1xuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3BpZWNlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ2Zyb21Qb3MnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAndG9Qb3MnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY29uc3RydWN0b3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2NvbnN0cnVjdG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAndG9TdHJpbmcnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ3RvU3RyaW5nJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Nb3ZlLm1hcFxuIiwiLy8gR2VuZXJhdGVkIGJ5IE40SlMgdHJhbnNwaWxlcjsgZm9yIGNvcHlyaWdodCBzZWUgb3JpZ2luYWwgTjRKUyBzb3VyY2UgZmlsZS5cblxuaW1wb3J0ICduNGpzLXJ1bnRpbWUnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHZhciBDb29yZGluYXRlU3F1YXJlUHJvcHMgPSB7fTtcbkNvb3JkaW5hdGVTcXVhcmVQcm9wcy4kZmllbGRJbml0ID0gZnVuY3Rpb24gQ29vcmRpbmF0ZVNxdWFyZVByb3BzX2ZpZWxkSW5pdChzcGVjLCBtaXhpbkV4Y2x1c2lvbikge1xuXHRpZiAoc3BlYykge1xuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdsYWJlbCcpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ2xhYmVsJykpKSB7XG5cdFx0XHR0aGlzLmxhYmVsID0gJ2xhYmVsJyBpbiBzcGVjID8gc3BlYy5sYWJlbCA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2xhYmVsJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnbGFiZWwnKSkpIHtcblx0XHRcdHRoaXMubGFiZWwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59O1xuQ29vcmRpbmF0ZVNxdWFyZVByb3BzLiRtZXRob2RzID0ge307XG4kbWFrZUludGVyZmFjZShDb29yZGluYXRlU3F1YXJlUHJvcHMsIGZ1bmN0aW9uKGluc3RhbmNlUHJvdG8sIHN0YXRpY1Byb3RvKSB7XG5cdHZhciBtZXRhQ2xhc3MgPSBuZXcgTjRJbnRlcmZhY2Uoe1xuXHRcdG5hbWU6ICdDb29yZGluYXRlU3F1YXJlUHJvcHMnLFxuXHRcdG9yaWdpbjogJ2NoZXNzLXJlYWN0Jyxcblx0XHRmcW46ICdjb21wb25lbnRzLkNvb3JkaW5hdGVTcXVhcmUuQ29vcmRpbmF0ZVNxdWFyZVByb3BzJyxcblx0XHRuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnbGFiZWwnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG5jb25zdCBsYWJlbFNxdWFyZVN0eWxlcyA9IHtcblx0Zm9udFNpemU6ICcydncnLFxuXHR0ZXh0QWxpZ246ICdjZW50ZXInLFxuXHRkaXNwbGF5OiAnZmxleCcsXG5cdGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcblx0YWxpZ25JdGVtczogJ2NlbnRlcicsXG5cdHdpZHRoOiAnMTAwJScsXG5cdGhlaWdodDogJzEwMCUnXG59O1xuZXhwb3J0IGZ1bmN0aW9uIExhYmVsU3F1YXJlKHByb3BzKSB7XG5cdFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwcm9wcyk7XG59XG4kbWFrZUNsYXNzKExhYmVsU3F1YXJlLCBSZWFjdC5Db21wb25lbnQsIFtdLCB7XG5cdHJlbmRlcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJfX19uNCgpIHtcblx0XHRcdHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBsYWJlbFNxdWFyZVN0eWxlc1xuXHRcdFx0fSksIHRoaXMucHJvcHMubGFiZWwpKTtcblx0XHR9XG5cdH1cbn0sIHt9LCBmdW5jdGlvbihpbnN0YW5jZVByb3RvLCBzdGF0aWNQcm90bykge1xuXHR2YXIgbWV0YUNsYXNzID0gbmV3IE40Q2xhc3Moe1xuXHRcdG5hbWU6ICdMYWJlbFNxdWFyZScsXG5cdFx0b3JpZ2luOiAnY2hlc3MtcmVhY3QnLFxuXHRcdGZxbjogJ2NvbXBvbmVudHMuQ29vcmRpbmF0ZVNxdWFyZS5MYWJlbFNxdWFyZScsXG5cdFx0bjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcblx0XHRhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuXHRcdG93bmVkTWVtYmVyczogW1xuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ3JlbmRlcicsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1sncmVuZGVyJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTGFiZWxTcXVhcmUsICckZGknLCB7XG5cdHZhbHVlOiB7XG5cdFx0c3VwZXJUeXBlOiBSZWFjdC5Db21wb25lbnQsXG5cdFx0ZmllbGRzSW5qZWN0ZWRUeXBlczogW11cblx0fVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db29yZGluYXRlU3F1YXJlLm1hcFxuIiwiLy8gR2VuZXJhdGVkIGJ5IE40SlMgdHJhbnNwaWxlcjsgZm9yIGNvcHlyaWdodCBzZWUgb3JpZ2luYWwgTjRKUyBzb3VyY2UgZmlsZS5cblxuaW1wb3J0ICduNGpzLXJ1bnRpbWUnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHZhciBTcXVhcmVQcm9wcyA9IHt9O1xuU3F1YXJlUHJvcHMuJGZpZWxkSW5pdCA9IGZ1bmN0aW9uIFNxdWFyZVByb3BzX2ZpZWxkSW5pdChzcGVjLCBtaXhpbkV4Y2x1c2lvbikge1xuXHRpZiAoc3BlYykge1xuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdpc1doaXRlJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnaXNXaGl0ZScpKSkge1xuXHRcdFx0dGhpcy5pc1doaXRlID0gJ2lzV2hpdGUnIGluIHNwZWMgPyBzcGVjLmlzV2hpdGUgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdwaWVjZScpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ3BpZWNlJykpKSB7XG5cdFx0XHR0aGlzLnBpZWNlID0gJ3BpZWNlJyBpbiBzcGVjID8gc3BlYy5waWVjZSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ29uQ2xpY2snKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykpKSB7XG5cdFx0XHR0aGlzLm9uQ2xpY2sgPSAnb25DbGljaycgaW4gc3BlYyA/IHNwZWMub25DbGljayA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2lzUGlja2VkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnaXNQaWNrZWQnKSkpIHtcblx0XHRcdHRoaXMuaXNQaWNrZWQgPSAnaXNQaWNrZWQnIGluIHNwZWMgPyBzcGVjLmlzUGlja2VkIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnaXNWYWxpZERlc3RpbmF0aW9uJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnaXNWYWxpZERlc3RpbmF0aW9uJykpKSB7XG5cdFx0XHR0aGlzLmlzVmFsaWREZXN0aW5hdGlvbiA9ICdpc1ZhbGlkRGVzdGluYXRpb24nIGluIHNwZWMgPyBzcGVjLmlzVmFsaWREZXN0aW5hdGlvbiA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2lzV2hpdGUnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdpc1doaXRlJykpKSB7XG5cdFx0XHR0aGlzLmlzV2hpdGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdwaWVjZScpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ3BpZWNlJykpKSB7XG5cdFx0XHR0aGlzLnBpZWNlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ29uQ2xpY2snKSkpIHtcblx0XHRcdHRoaXMub25DbGljayA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2lzUGlja2VkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnaXNQaWNrZWQnKSkpIHtcblx0XHRcdHRoaXMuaXNQaWNrZWQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdpc1ZhbGlkRGVzdGluYXRpb24nKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdpc1ZhbGlkRGVzdGluYXRpb24nKSkpIHtcblx0XHRcdHRoaXMuaXNWYWxpZERlc3RpbmF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufTtcblNxdWFyZVByb3BzLiRtZXRob2RzID0ge307XG4kbWFrZUludGVyZmFjZShTcXVhcmVQcm9wcywgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONEludGVyZmFjZSh7XG5cdFx0bmFtZTogJ1NxdWFyZVByb3BzJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy5TcXVhcmUuU3F1YXJlUHJvcHMnLFxuXHRcdG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1doaXRlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3BpZWNlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ29uQ2xpY2snLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnaXNQaWNrZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnaXNWYWxpZERlc3RpbmF0aW9uJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pXG5cdFx0XSxcblx0XHRjb25zdW1lZE1lbWJlcnM6IFtdLFxuXHRcdGFubm90YXRpb25zOiBbXVxuXHR9KTtcblx0cmV0dXJuIG1ldGFDbGFzcztcbn0pO1xuY29uc3QgYm9hcmRTcXVhcmVTdHlsZXMgPSB7XG5cdGRpc3BsYXk6ICdmbGV4Jyxcblx0anVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuXHRhbGlnbkl0ZW1zOiAnY2VudGVyJyxcblx0d2lkdGg6ICcxMDAlJyxcblx0aGVpZ2h0OiAnMTAwJScsXG5cdGZvbnRTaXplOiAnNXZ3J1xufTtcbmV4cG9ydCBmdW5jdGlvbiBTcXVhcmUocHJvcHMpIHtcblx0bGV0IGJhY2tncm91bmRDb2xvciA9IHByb3BzLmlzV2hpdGUgPyAnI0VBREFCOScgOiAnI0MyQTQ4Mic7XG5cdGlmIChwcm9wcy5pc1BpY2tlZCkge1xuXHRcdGJhY2tncm91bmRDb2xvciA9ICdsaW1lJztcblx0fSBlbHNlIGlmIChwcm9wcy5pc1ZhbGlkRGVzdGluYXRpb24pIHtcblx0XHRiYWNrZ3JvdW5kQ29sb3IgPSAneWVsbG93Jztcblx0fVxuXHRyZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIE9iamVjdC5hc3NpZ24oe1xuXHRcdHN0eWxlOiBPYmplY3QuYXNzaWduKHt9LCBib2FyZFNxdWFyZVN0eWxlcywge1xuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3Jcblx0XHR9KSxcblx0XHRvbkNsaWNrOiBwcm9wcy5vbkNsaWNrXG5cdH0pLCBwcm9wcy5waWVjZSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3F1YXJlLm1hcFxuIiwiLy8gR2VuZXJhdGVkIGJ5IE40SlMgdHJhbnNwaWxlcjsgZm9yIGNvcHlyaWdodCBzZWUgb3JpZ2luYWwgTjRKUyBzb3VyY2UgZmlsZS5cblxuaW1wb3J0ICduNGpzLXJ1bnRpbWUnXG5pbXBvcnQge0Nvb3JkaW5hdGV9IGZyb20gJy4uL0Nvb3JkaW5hdGUnXG5pbXBvcnQge0xhYmVsU3F1YXJlfSBmcm9tICcuL0Nvb3JkaW5hdGVTcXVhcmUnXG5pbXBvcnQge1NxdWFyZX0gZnJvbSAnLi9TcXVhcmUnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHZhciBCb2FyZFByb3BzID0ge307XG5Cb2FyZFByb3BzLiRmaWVsZEluaXQgPSBmdW5jdGlvbiBCb2FyZFByb3BzX2ZpZWxkSW5pdChzcGVjLCBtaXhpbkV4Y2x1c2lvbikge1xuXHRpZiAoc3BlYykge1xuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdzcXVhcmVzJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnc3F1YXJlcycpKSkge1xuXHRcdFx0dGhpcy5zcXVhcmVzID0gJ3NxdWFyZXMnIGluIHNwZWMgPyBzcGVjLnNxdWFyZXMgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSkpIHtcblx0XHRcdHRoaXMucGlja2VkU3F1YXJlID0gJ3BpY2tlZFNxdWFyZScgaW4gc3BlYyA/IHNwZWMucGlja2VkU3F1YXJlIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgndmFsaWREZXN0aW5hdGlvbnMnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCd2YWxpZERlc3RpbmF0aW9ucycpKSkge1xuXHRcdFx0dGhpcy52YWxpZERlc3RpbmF0aW9ucyA9ICd2YWxpZERlc3RpbmF0aW9ucycgaW4gc3BlYyA/IHNwZWMudmFsaWREZXN0aW5hdGlvbnMgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpKSkge1xuXHRcdFx0dGhpcy5vbkNsaWNrID0gJ29uQ2xpY2snIGluIHNwZWMgPyBzcGVjLm9uQ2xpY2sgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdzcXVhcmVzJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnc3F1YXJlcycpKSkge1xuXHRcdFx0dGhpcy5zcXVhcmVzID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgncGlja2VkU3F1YXJlJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgncGlja2VkU3F1YXJlJykpKSB7XG5cdFx0XHR0aGlzLnBpY2tlZFNxdWFyZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3ZhbGlkRGVzdGluYXRpb25zJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgndmFsaWREZXN0aW5hdGlvbnMnKSkpIHtcblx0XHRcdHRoaXMudmFsaWREZXN0aW5hdGlvbnMgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpKSkge1xuXHRcdFx0dGhpcy5vbkNsaWNrID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufTtcbkJvYXJkUHJvcHMuJG1ldGhvZHMgPSB7fTtcbiRtYWtlSW50ZXJmYWNlKEJvYXJkUHJvcHMsIGZ1bmN0aW9uKGluc3RhbmNlUHJvdG8sIHN0YXRpY1Byb3RvKSB7XG5cdHZhciBtZXRhQ2xhc3MgPSBuZXcgTjRJbnRlcmZhY2Uoe1xuXHRcdG5hbWU6ICdCb2FyZFByb3BzJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy5Cb2FyZC5Cb2FyZFByb3BzJyxcblx0XHRuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnc3F1YXJlcycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdwaWNrZWRTcXVhcmUnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAndmFsaWREZXN0aW5hdGlvbnMnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnb25DbGljaycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KVxuXHRcdF0sXG5cdFx0Y29uc3VtZWRNZW1iZXJzOiBbXSxcblx0XHRhbm5vdGF0aW9uczogW11cblx0fSk7XG5cdHJldHVybiBtZXRhQ2xhc3M7XG59KTtcbmNvbnN0IGJvYXJkU3R5bGVzID0ge1xuXHRkaXNwbGF5OiAnZmxleCcsXG5cdGZsZXhXcmFwOiAnd3JhcCcsXG5cdHdpZHRoOiAnMTAwJScsXG5cdGhlaWdodDogJzEwMCUnXG59O1xuY29uc3Qgc3F1YXJlU3R5bGVzID0ge1xuXHR3aWR0aDogJzEwJScsXG5cdGhlaWdodDogJzEwJSdcbn07XG5leHBvcnQgZnVuY3Rpb24gQm9hcmQocHJvcHMpIHtcblx0UmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHByb3BzKTtcbn1cbiRtYWtlQ2xhc3MoQm9hcmQsIFJlYWN0LkNvbXBvbmVudCwgW10sIHtcblx0cmVuZGVyU3F1YXJlOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlclNxdWFyZV9fX240KHBvcywgaXNXaGl0ZSwgaXNQaWNrZWQsIGlzVmFsaWREZXN0aW5hdGlvbiwgcGllY2UpIHtcblx0XHRcdHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBzcXVhcmVTdHlsZXNcblx0XHRcdH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFNxdWFyZSwgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdGlzV2hpdGU6IGlzV2hpdGUsXG5cdFx0XHRcdGlzUGlja2VkOiBpc1BpY2tlZCxcblx0XHRcdFx0aXNWYWxpZERlc3RpbmF0aW9uOiBpc1ZhbGlkRGVzdGluYXRpb24sXG5cdFx0XHRcdHBpZWNlOiBwaWVjZSxcblx0XHRcdFx0b25DbGljazogKCk9PnRoaXMucHJvcHMub25DbGljayhwb3MpXG5cdFx0XHR9KSkpKTtcblx0XHR9XG5cdH0sXG5cdHJlbmRlckNvb3JkaW5hdGVTcXVhcmU6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ29vcmRpbmF0ZVNxdWFyZV9fX240KGxhYmVsKSB7XG5cdFx0XHRyZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0XHRzdHlsZTogc3F1YXJlU3R5bGVzXG5cdFx0XHR9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChMYWJlbFNxdWFyZSwgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdGxhYmVsOiBsYWJlbFxuXHRcdFx0fSkpKSk7XG5cdFx0fVxuXHR9LFxuXHRyZW5kZXJTcXVhcmVzOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlclNxdWFyZXNfX19uNCgpIHtcblx0XHRcdGNvbnN0IHNxdWFyZXMgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGxldCBpc1doaXRlSW5pdGlhbCA9IHRydWU7XG5cdFx0XHRzcXVhcmVzLnB1c2godGhpcy5yZW5kZXJDb29yZGluYXRlU3F1YXJlKCcnKSk7XG5cdFx0XHRmb3IobGV0IGkgPSAwO2kgPCA4O2krKykge1xuXHRcdFx0XHRzcXVhcmVzLnB1c2godGhpcy5yZW5kZXJDb29yZGluYXRlU3F1YXJlKFN0cmluZy5mcm9tQ2hhckNvZGUoJ2EnLmNoYXJDb2RlQXQoMCkgKyBpKSkpO1xuXHRcdFx0fVxuXHRcdFx0c3F1YXJlcy5wdXNoKHRoaXMucmVuZGVyQ29vcmRpbmF0ZVNxdWFyZSgnJykpO1xuXHRcdFx0Zm9yKGxldCByb3cgPSAwO3JvdyA8IDg7cm93KyspIHtcblx0XHRcdFx0c3F1YXJlcy5wdXNoKHRoaXMucmVuZGVyQ29vcmRpbmF0ZVNxdWFyZSgoOCAtIHJvdykudG9TdHJpbmcoKSkpO1xuXHRcdFx0XHRsZXQgaXNXaGl0ZSA9IGlzV2hpdGVJbml0aWFsO1xuXHRcdFx0XHRmb3IobGV0IGNvbCA9IDA7Y29sIDwgODtjb2wrKykge1xuXHRcdFx0XHRcdGNvbnN0IHBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcm93LFxuXHRcdFx0XHRcdFx0Y29sOiBjb2xcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRjb25zdCBpc1BvdGVudGlhbERlc3RpbmF0aW9uID0gdGhpcy5wcm9wcy52YWxpZERlc3RpbmF0aW9ucy5maW5kSW5kZXgoKHBvdGVudGlhbERlc3QpPT5wb3RlbnRpYWxEZXN0LmVxdWFscyhwb3MpKSA+PSAwO1xuXHRcdFx0XHRcdHNxdWFyZXMucHVzaCh0aGlzLnJlbmRlclNxdWFyZShwb3MsIGlzV2hpdGUsIHRoaXMucHJvcHMucGlja2VkU3F1YXJlICYmIHRoaXMucHJvcHMucGlja2VkU3F1YXJlLmVxdWFscyhwb3MpID8gdHJ1ZSA6IGZhbHNlLCBpc1BvdGVudGlhbERlc3RpbmF0aW9uLCB0aGlzLnByb3BzLnNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbF0pKTtcblx0XHRcdFx0XHRpc1doaXRlID0gIWlzV2hpdGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aXNXaGl0ZUluaXRpYWwgPSAhaXNXaGl0ZUluaXRpYWw7XG5cdFx0XHRcdHNxdWFyZXMucHVzaCh0aGlzLnJlbmRlckNvb3JkaW5hdGVTcXVhcmUoKDggLSByb3cpLnRvU3RyaW5nKCkpKTtcblx0XHRcdH1cblx0XHRcdHNxdWFyZXMucHVzaCh0aGlzLnJlbmRlckNvb3JkaW5hdGVTcXVhcmUoJycpKTtcblx0XHRcdGZvcihsZXQgaSA9IDA7aSA8IDg7aSsrKSB7XG5cdFx0XHRcdHNxdWFyZXMucHVzaCh0aGlzLnJlbmRlckNvb3JkaW5hdGVTcXVhcmUoU3RyaW5nLmZyb21DaGFyQ29kZSgnYScuY2hhckNvZGVBdCgwKSArIGkpKSk7XG5cdFx0XHR9XG5cdFx0XHRzcXVhcmVzLnB1c2godGhpcy5yZW5kZXJDb29yZGluYXRlU3F1YXJlKCcnKSk7XG5cdFx0XHRyZXR1cm4gc3F1YXJlcztcblx0XHR9XG5cdH0sXG5cdHJlbmRlcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJfX19uNCgpIHtcblx0XHRcdHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBib2FyZFN0eWxlc1xuXHRcdFx0fSksIHRoaXMucmVuZGVyU3F1YXJlcygpKSk7XG5cdFx0fVxuXHR9XG59LCB7fSwgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONENsYXNzKHtcblx0XHRuYW1lOiAnQm9hcmQnLFxuXHRcdG9yaWdpbjogJ2NoZXNzLXJlYWN0Jyxcblx0XHRmcW46ICdjb21wb25lbnRzLkJvYXJkLkJvYXJkJyxcblx0XHRuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAncmVuZGVyU3F1YXJlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydyZW5kZXJTcXVhcmUnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdyZW5kZXJDb29yZGluYXRlU3F1YXJlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydyZW5kZXJDb29yZGluYXRlU3F1YXJlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAncmVuZGVyU3F1YXJlcycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1sncmVuZGVyU3F1YXJlcyddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ3JlbmRlcicsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1sncmVuZGVyJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQm9hcmQsICckZGknLCB7XG5cdHZhbHVlOiB7XG5cdFx0c3VwZXJUeXBlOiBSZWFjdC5Db21wb25lbnQsXG5cdFx0ZmllbGRzSW5qZWN0ZWRUeXBlczogW11cblx0fVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Cb2FyZC5tYXBcbiIsIi8vIEdlbmVyYXRlZCBieSBONEpTIHRyYW5zcGlsZXI7IGZvciBjb3B5cmlnaHQgc2VlIG9yaWdpbmFsIE40SlMgc291cmNlIGZpbGUuXG5cbmltcG9ydCAnbjRqcy1ydW50aW1lJ1xuaW1wb3J0IHtDb29yZGluYXRlfSBmcm9tICcuLi9Db29yZGluYXRlJ1xuaW1wb3J0IHtNb3ZlfSBmcm9tICcuLi9Nb3ZlJ1xuaW1wb3J0IHtCb2FyZH0gZnJvbSAnLi9Cb2FyZCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG52YXIgU25hcHNob3QgPSB7fTtcblNuYXBzaG90LiRmaWVsZEluaXQgPSBmdW5jdGlvbiBTbmFwc2hvdF9maWVsZEluaXQoc3BlYywgbWl4aW5FeGNsdXNpb24pIHtcblx0aWYgKHNwZWMpIHtcblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnc3F1YXJlcycpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ3NxdWFyZXMnKSkpIHtcblx0XHRcdHRoaXMuc3F1YXJlcyA9ICdzcXVhcmVzJyBpbiBzcGVjID8gc3BlYy5zcXVhcmVzIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnbGFzdE1vdmVzJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnbGFzdE1vdmVzJykpKSB7XG5cdFx0XHR0aGlzLmxhc3RNb3ZlcyA9ICdsYXN0TW92ZXMnIGluIHNwZWMgPyBzcGVjLmxhc3RNb3ZlcyA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3doaXRlS2luZ01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnd2hpdGVLaW5nTW92ZWQnKSkpIHtcblx0XHRcdHRoaXMud2hpdGVLaW5nTW92ZWQgPSAnd2hpdGVLaW5nTW92ZWQnIGluIHNwZWMgPyBzcGVjLndoaXRlS2luZ01vdmVkIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnbGVmdFdoaXRlUm9va01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnbGVmdFdoaXRlUm9va01vdmVkJykpKSB7XG5cdFx0XHR0aGlzLmxlZnRXaGl0ZVJvb2tNb3ZlZCA9ICdsZWZ0V2hpdGVSb29rTW92ZWQnIGluIHNwZWMgPyBzcGVjLmxlZnRXaGl0ZVJvb2tNb3ZlZCA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3JpZ2h0V2hpdGVSb29rTW92ZWQnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdyaWdodFdoaXRlUm9va01vdmVkJykpKSB7XG5cdFx0XHR0aGlzLnJpZ2h0V2hpdGVSb29rTW92ZWQgPSAncmlnaHRXaGl0ZVJvb2tNb3ZlZCcgaW4gc3BlYyA/IHNwZWMucmlnaHRXaGl0ZVJvb2tNb3ZlZCA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2JsYWNrS2luZ01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnYmxhY2tLaW5nTW92ZWQnKSkpIHtcblx0XHRcdHRoaXMuYmxhY2tLaW5nTW92ZWQgPSAnYmxhY2tLaW5nTW92ZWQnIGluIHNwZWMgPyBzcGVjLmJsYWNrS2luZ01vdmVkIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnbGVmdEJsYWNrUm9va01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnbGVmdEJsYWNrUm9va01vdmVkJykpKSB7XG5cdFx0XHR0aGlzLmxlZnRCbGFja1Jvb2tNb3ZlZCA9ICdsZWZ0QmxhY2tSb29rTW92ZWQnIGluIHNwZWMgPyBzcGVjLmxlZnRCbGFja1Jvb2tNb3ZlZCA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3JpZ2h0QmxhY2tSb29rTW92ZWQnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdyaWdodEJsYWNrUm9va01vdmVkJykpKSB7XG5cdFx0XHR0aGlzLnJpZ2h0QmxhY2tSb29rTW92ZWQgPSAncmlnaHRCbGFja1Jvb2tNb3ZlZCcgaW4gc3BlYyA/IHNwZWMucmlnaHRCbGFja1Jvb2tNb3ZlZCA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3NxdWFyZXMnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdzcXVhcmVzJykpKSB7XG5cdFx0XHR0aGlzLnNxdWFyZXMgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdsYXN0TW92ZXMnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdsYXN0TW92ZXMnKSkpIHtcblx0XHRcdHRoaXMubGFzdE1vdmVzID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnd2hpdGVLaW5nTW92ZWQnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCd3aGl0ZUtpbmdNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy53aGl0ZUtpbmdNb3ZlZCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2xlZnRXaGl0ZVJvb2tNb3ZlZCcpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ2xlZnRXaGl0ZVJvb2tNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy5sZWZ0V2hpdGVSb29rTW92ZWQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdyaWdodFdoaXRlUm9va01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgncmlnaHRXaGl0ZVJvb2tNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy5yaWdodFdoaXRlUm9va01vdmVkID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnYmxhY2tLaW5nTW92ZWQnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdibGFja0tpbmdNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy5ibGFja0tpbmdNb3ZlZCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2xlZnRCbGFja1Jvb2tNb3ZlZCcpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ2xlZnRCbGFja1Jvb2tNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy5sZWZ0QmxhY2tSb29rTW92ZWQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdyaWdodEJsYWNrUm9va01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgncmlnaHRCbGFja1Jvb2tNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy5yaWdodEJsYWNrUm9va01vdmVkID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufTtcblNuYXBzaG90LiRtZXRob2RzID0ge307XG4kbWFrZUludGVyZmFjZShTbmFwc2hvdCwgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONEludGVyZmFjZSh7XG5cdFx0bmFtZTogJ1NuYXBzaG90Jyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy5HYW1lLlNuYXBzaG90Jyxcblx0XHRuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnc3F1YXJlcycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdsYXN0TW92ZXMnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnd2hpdGVLaW5nTW92ZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnbGVmdFdoaXRlUm9va01vdmVkJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3JpZ2h0V2hpdGVSb29rTW92ZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnYmxhY2tLaW5nTW92ZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnbGVmdEJsYWNrUm9va01vdmVkJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3JpZ2h0QmxhY2tSb29rTW92ZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG52YXIgR2FtZVN0YXRlID0ge307XG5HYW1lU3RhdGUuJGZpZWxkSW5pdCA9IGZ1bmN0aW9uIEdhbWVTdGF0ZV9maWVsZEluaXQoc3BlYywgbWl4aW5FeGNsdXNpb24pIHtcblx0aWYgKHNwZWMpIHtcblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnaGlzdG9yeScpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ2hpc3RvcnknKSkpIHtcblx0XHRcdHRoaXMuaGlzdG9yeSA9ICdoaXN0b3J5JyBpbiBzcGVjID8gc3BlYy5oaXN0b3J5IDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnc3RlcE51bWJlcicpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ3N0ZXBOdW1iZXInKSkpIHtcblx0XHRcdHRoaXMuc3RlcE51bWJlciA9ICdzdGVwTnVtYmVyJyBpbiBzcGVjID8gc3BlYy5zdGVwTnVtYmVyIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnd2hpdGVJc05leHQnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCd3aGl0ZUlzTmV4dCcpKSkge1xuXHRcdFx0dGhpcy53aGl0ZUlzTmV4dCA9ICd3aGl0ZUlzTmV4dCcgaW4gc3BlYyA/IHNwZWMud2hpdGVJc05leHQgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSkpIHtcblx0XHRcdHRoaXMucGlja2VkU3F1YXJlID0gJ3BpY2tlZFNxdWFyZScgaW4gc3BlYyA/IHNwZWMucGlja2VkU3F1YXJlIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgndmFsaWREZXN0aW5hdGlvbnMnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCd2YWxpZERlc3RpbmF0aW9ucycpKSkge1xuXHRcdFx0dGhpcy52YWxpZERlc3RpbmF0aW9ucyA9ICd2YWxpZERlc3RpbmF0aW9ucycgaW4gc3BlYyA/IHNwZWMudmFsaWREZXN0aW5hdGlvbnMgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdoaXN0b3J5JykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnaGlzdG9yeScpKSkge1xuXHRcdFx0dGhpcy5oaXN0b3J5ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnc3RlcE51bWJlcicpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ3N0ZXBOdW1iZXInKSkpIHtcblx0XHRcdHRoaXMuc3RlcE51bWJlciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3doaXRlSXNOZXh0JykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnd2hpdGVJc05leHQnKSkpIHtcblx0XHRcdHRoaXMud2hpdGVJc05leHQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSkpIHtcblx0XHRcdHRoaXMucGlja2VkU3F1YXJlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgndmFsaWREZXN0aW5hdGlvbnMnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCd2YWxpZERlc3RpbmF0aW9ucycpKSkge1xuXHRcdFx0dGhpcy52YWxpZERlc3RpbmF0aW9ucyA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cbn07XG5HYW1lU3RhdGUuJG1ldGhvZHMgPSB7fTtcbiRtYWtlSW50ZXJmYWNlKEdhbWVTdGF0ZSwgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONEludGVyZmFjZSh7XG5cdFx0bmFtZTogJ0dhbWVTdGF0ZScsXG5cdFx0b3JpZ2luOiAnY2hlc3MtcmVhY3QnLFxuXHRcdGZxbjogJ2NvbXBvbmVudHMuR2FtZS5HYW1lU3RhdGUnLFxuXHRcdG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdoaXN0b3J5Jyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3N0ZXBOdW1iZXInLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnd2hpdGVJc05leHQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAncGlja2VkU3F1YXJlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3ZhbGlkRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pXG5cdFx0XSxcblx0XHRjb25zdW1lZE1lbWJlcnM6IFtdLFxuXHRcdGFubm90YXRpb25zOiBbXVxuXHR9KTtcblx0cmV0dXJuIG1ldGFDbGFzcztcbn0pO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2FtZShwcm9wcykge1xuXHRSZWFjdC5Db21wb25lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcHJvcHMpO1xuXHRjb25zdCBpbml0aWFsU3F1YXJlcyA9IFtcblx0XHRbXG5cdFx0XHQn4pmWJyxcblx0XHRcdCfimZgnLFxuXHRcdFx0J+KZlycsXG5cdFx0XHQn4pmVJyxcblx0XHRcdCfimZQnLFxuXHRcdFx0J+KZlycsXG5cdFx0XHQn4pmYJyxcblx0XHRcdCfimZYnXG5cdFx0XSxcblx0XHRbXG5cdFx0XHQn4pmZJyxcblx0XHRcdCfimZknLFxuXHRcdFx0J+KZmScsXG5cdFx0XHQn4pmZJyxcblx0XHRcdCfimZknLFxuXHRcdFx0J+KZmScsXG5cdFx0XHQn4pmZJyxcblx0XHRcdCfimZknXG5cdFx0XSxcblx0XHRbXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGxcblx0XHRdLFxuXHRcdFtcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsXG5cdFx0XSxcblx0XHRbXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0J+KZnycsXG5cdFx0XHQn4pmfJyxcblx0XHRcdCfimZ8nLFxuXHRcdFx0J+KZnycsXG5cdFx0XHQn4pmfJyxcblx0XHRcdCfimZ8nLFxuXHRcdFx0J+KZnycsXG5cdFx0XHQn4pmfJ1xuXHRcdF0sXG5cdFx0W1xuXHRcdFx0J+KZnCcsXG5cdFx0XHQn4pmeJyxcblx0XHRcdCfimZ0nLFxuXHRcdFx0J+KZmycsXG5cdFx0XHQn4pmaJyxcblx0XHRcdCfimZ0nLFxuXHRcdFx0J+KZnicsXG5cdFx0XHQn4pmcJ1xuXHRcdF1cblx0XTtcblx0dGhpcy5zdGF0ZSA9IHtcblx0XHRoaXN0b3J5OiBbXG5cdFx0XHR7XG5cdFx0XHRcdHNxdWFyZXM6IGluaXRpYWxTcXVhcmVzLFxuXHRcdFx0XHRsYXN0TW92ZXM6IG5ldyBBcnJheSgpLFxuXHRcdFx0XHR3aGl0ZUtpbmdNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdGxlZnRXaGl0ZVJvb2tNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdHJpZ2h0V2hpdGVSb29rTW92ZWQ6IGZhbHNlLFxuXHRcdFx0XHRibGFja0tpbmdNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdGxlZnRCbGFja1Jvb2tNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdHJpZ2h0QmxhY2tSb29rTW92ZWQ6IGZhbHNlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdGVwTnVtYmVyOiAwLFxuXHRcdHdoaXRlSXNOZXh0OiB0cnVlLFxuXHRcdHBpY2tlZFNxdWFyZTogbnVsbCxcblx0XHR2YWxpZERlc3RpbmF0aW9uczogbmV3IEFycmF5KClcblx0fTtcbn1cbiRtYWtlQ2xhc3MoR2FtZSwgUmVhY3QuQ29tcG9uZW50LCBbXSwge1xuXHRoYW5kbGVDbGljazoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDbGlja19fX240KHNlbGVjdGVkUG9zKSB7XG5cdFx0XHRjb25zdCByb3cgPSBzZWxlY3RlZFBvcy5yb3c7XG5cdFx0XHRjb25zdCBjb2wgPSBzZWxlY3RlZFBvcy5jb2w7XG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gdGhpcy5zdGF0ZS5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuc3RhdGUuc3RlcE51bWJlciArIDEpO1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IGhpc3RvcnlbaGlzdG9yeS5sZW5ndGggLSAxXTtcblx0XHRcdGNvbnN0IHBpY2tlZFNxdWFyZSA9IHRoaXMuc3RhdGUucGlja2VkU3F1YXJlO1xuXHRcdFx0bGV0IHNxdWFyZXMgPSBjdXJyZW50LnNxdWFyZXM7XG5cdFx0XHRpZiAodGhpcy5jYWxjdWxhdGVXaW5uZXIoc3F1YXJlcykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY3VycmVudHBpZWNlID0gc3F1YXJlc1tyb3ddW2NvbF07XG5cdFx0XHRpZiAoKCh0aGlzLmlzV2hpdGVwaWVjZShjdXJyZW50cGllY2UpICYmIHRoaXMuc3RhdGUud2hpdGVJc05leHQpKSB8fCAoKHRoaXMuaXNCbGFja3BpZWNlKGN1cnJlbnRwaWVjZSkgJiYgIXRoaXMuc3RhdGUud2hpdGVJc05leHQpKSkge1xuXHRcdFx0XHRjb25zdCB2YWxpZERlc3RpbmF0aW9ucyA9IHRoaXMuY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMoc3F1YXJlcywgY3VycmVudHBpZWNlLCBzZWxlY3RlZFBvcyk7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRcdHBpY2tlZFNxdWFyZTogc2VsZWN0ZWRQb3MsXG5cdFx0XHRcdFx0dmFsaWREZXN0aW5hdGlvbnM6IHZhbGlkRGVzdGluYXRpb25zXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXBpY2tlZFNxdWFyZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhdHRlbXB0ZWRNb3ZlID0gbmV3IE1vdmUoe1xuXHRcdFx0XHRwaWVjZTogc3F1YXJlc1twaWNrZWRTcXVhcmUucm93XVtwaWNrZWRTcXVhcmUuY29sXSxcblx0XHRcdFx0ZnJvbVBvczogcGlja2VkU3F1YXJlLFxuXHRcdFx0XHR0b1Bvczogc2VsZWN0ZWRQb3Ncblx0XHRcdH0pO1xuXHRcdFx0aWYgKHRoaXMuaXNWYWxpZE1vdmUoc3F1YXJlcywgYXR0ZW1wdGVkTW92ZSkpIHtcblx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdHNxdWFyZXM6IG5ld1NxdWFyZXMsXG5cdFx0XHRcdFx0bW92ZXNcblx0XHRcdFx0fSA9IHRoaXMubW92ZShhdHRlbXB0ZWRNb3ZlKTtcblx0XHRcdFx0bGV0IHdoaXRlS2luZ01vdmVkID0gY3VycmVudC53aGl0ZUtpbmdNb3ZlZDtcblx0XHRcdFx0bGV0IGxlZnRXaGl0ZVJvb2tNb3ZlZCA9IGN1cnJlbnQubGVmdFdoaXRlUm9va01vdmVkO1xuXHRcdFx0XHRsZXQgcmlnaHRXaGl0ZVJvb2tNb3ZlZCA9IGN1cnJlbnQucmlnaHRXaGl0ZVJvb2tNb3ZlZDtcblx0XHRcdFx0bGV0IGJsYWNrS2luZ01vdmVkID0gY3VycmVudC5ibGFja0tpbmdNb3ZlZDtcblx0XHRcdFx0bGV0IGxlZnRCbGFja1Jvb2tNb3ZlZCA9IGN1cnJlbnQubGVmdEJsYWNrUm9va01vdmVkO1xuXHRcdFx0XHRsZXQgcmlnaHRCbGFja1Jvb2tNb3ZlZCA9IGN1cnJlbnQucmlnaHRCbGFja1Jvb2tNb3ZlZDtcblx0XHRcdFx0aWYgKHRoaXMuaXNXaGl0ZXBpZWNlKGF0dGVtcHRlZE1vdmUucGllY2UpKSB7XG5cdFx0XHRcdFx0d2hpdGVLaW5nTW92ZWQgPSB3aGl0ZUtpbmdNb3ZlZCB8fCAoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmUJyk7XG5cdFx0XHRcdFx0bGVmdFdoaXRlUm9va01vdmVkID0gbGVmdFdoaXRlUm9va01vdmVkIHx8ICgoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmWJykgJiYgcGlja2VkU3F1YXJlLmNvbCA9PSAwKTtcblx0XHRcdFx0XHRyaWdodFdoaXRlUm9va01vdmVkID0gcmlnaHRXaGl0ZVJvb2tNb3ZlZCB8fCAoKGF0dGVtcHRlZE1vdmUucGllY2UgPT0gJ+KZlicpICYmIHBpY2tlZFNxdWFyZS5jb2wgPT0gNyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YmxhY2tLaW5nTW92ZWQgPSBibGFja0tpbmdNb3ZlZCB8fCAoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmaJyk7XG5cdFx0XHRcdFx0bGVmdEJsYWNrUm9va01vdmVkID0gbGVmdEJsYWNrUm9va01vdmVkIHx8ICgoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmcJykgJiYgcGlja2VkU3F1YXJlLmNvbCA9PSAwKTtcblx0XHRcdFx0XHRyaWdodEJsYWNrUm9va01vdmVkID0gcmlnaHRCbGFja1Jvb2tNb3ZlZCB8fCAoKGF0dGVtcHRlZE1vdmUucGllY2UgPT0gJ+KZnCcpICYmIHBpY2tlZFNxdWFyZS5jb2wgPT0gNyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0aGlzdG9yeTogaGlzdG9yeS5jb25jYXQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRzcXVhcmVzOiBuZXdTcXVhcmVzLFxuXHRcdFx0XHRcdFx0XHRsYXN0TW92ZXM6IG1vdmVzLFxuXHRcdFx0XHRcdFx0XHR3aGl0ZUtpbmdNb3ZlZDogd2hpdGVLaW5nTW92ZWQsXG5cdFx0XHRcdFx0XHRcdGxlZnRXaGl0ZVJvb2tNb3ZlZDogbGVmdFdoaXRlUm9va01vdmVkLFxuXHRcdFx0XHRcdFx0XHRyaWdodFdoaXRlUm9va01vdmVkOiByaWdodFdoaXRlUm9va01vdmVkLFxuXHRcdFx0XHRcdFx0XHRibGFja0tpbmdNb3ZlZDogYmxhY2tLaW5nTW92ZWQsXG5cdFx0XHRcdFx0XHRcdGxlZnRCbGFja1Jvb2tNb3ZlZDogbGVmdEJsYWNrUm9va01vdmVkLFxuXHRcdFx0XHRcdFx0XHRyaWdodEJsYWNrUm9va01vdmVkOiByaWdodEJsYWNrUm9va01vdmVkXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0c3RlcE51bWJlcjogaGlzdG9yeS5sZW5ndGgsXG5cdFx0XHRcdFx0d2hpdGVJc05leHQ6ICF0aGlzLnN0YXRlLndoaXRlSXNOZXh0LFxuXHRcdFx0XHRcdHBpY2tlZFNxdWFyZTogbnVsbCxcblx0XHRcdFx0XHR2YWxpZERlc3RpbmF0aW9uczogbmV3IEFycmF5KClcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRwaWNrZWRTcXVhcmU6IG51bGwsXG5cdFx0XHRcdFx0dmFsaWREZXN0aW5hdGlvbnM6IG5ldyBBcnJheSgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0Z29Ub1N0ZXA6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ29Ub1N0ZXBfX19uNChzdGVwKSB7XG5cdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0c3RlcE51bWJlcjogc3RlcCxcblx0XHRcdFx0d2hpdGVJc05leHQ6IChzdGVwICUgMikgPT09IDAsXG5cdFx0XHRcdHBpY2tlZFNxdWFyZTogbnVsbCxcblx0XHRcdFx0dmFsaWREZXN0aW5hdGlvbnM6IG5ldyBBcnJheSgpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdGdldEFsbFBpZWNlc1NhbWVDb2xvcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRBbGxQaWVjZXNTYW1lQ29sb3JfX19uNChzcXVhcmVzLCBpc1doaXRlKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGZvcihsZXQgcm93ID0gMDtyb3cgPCA4O3JvdysrKSB7XG5cdFx0XHRcdGZvcihsZXQgY29sID0gMDtjb2wgPCA4O2NvbCsrKSB7XG5cdFx0XHRcdFx0aWYgKChpc1doaXRlICYmIHRoaXMuaXNXaGl0ZXBpZWNlKHNxdWFyZXNbcm93XVtjb2xdKSkgfHwgKCFpc1doaXRlICYmIHRoaXMuaXNCbGFja3BpZWNlKHNxdWFyZXNbcm93XVtjb2xdKSkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0cGllY2U6IHNxdWFyZXNbcm93XVtjb2xdLFxuXHRcdFx0XHRcdFx0XHRwb3M6IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRyb3c6IHJvdyxcblx0XHRcdFx0XHRcdFx0XHRjb2w6IGNvbFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0Zm9yQWxsOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvckFsbF9fX240KGEsIHByZWRpY2F0ZSkge1xuXHRcdFx0cmV0dXJuIGEucmVkdWNlKChhY2MsIGVsZW0pPT5hY2MgJiYgcHJlZGljYXRlKGVsZW0pLCB0cnVlKTtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZVdpbm5lcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVXaW5uZXJfX19uNChzcXVhcmVzKSB7XG5cdFx0XHRjb25zdCBpc1doaXRlID0gdGhpcy5zdGF0ZS53aGl0ZUlzTmV4dDtcblx0XHRcdGNvbnN0IGFsbFBpZWNlcyA9IHRoaXMuZ2V0QWxsUGllY2VzU2FtZUNvbG9yKHNxdWFyZXMsIGlzV2hpdGUpO1xuXHRcdFx0Y29uc3QgY2hlY2tNYXRlID0gdGhpcy5mb3JBbGwoYWxsUGllY2VzLCAocCk9PnRoaXMuY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMoc3F1YXJlcywgcC5waWVjZSwgcC5wb3MpLmxlbmd0aCA9PSAwKTtcblx0XHRcdGlmIChjaGVja01hdGUpIHtcblx0XHRcdFx0cmV0dXJuIGlzV2hpdGUgPyAnQmxhY2snIDogJ1doaXRlJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnNfX19uNChzcXVhcmVzLCBwaWVjZSwgcG9zKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmNhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zKHNxdWFyZXMsIHBpZWNlLCBwb3MpO1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChwaWVjZSA9PSAn4pmZJyB8fCBwaWVjZSA9PSAn4pmfJykge1xuXHRcdFx0XHRpZiAoaXNXaGl0ZSAmJiAocG9zLnJvdyA8IDcpKSB7XG5cdFx0XHRcdFx0Y29uc3QgbmV4dFBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcG9zLnJvdyArIDEsXG5cdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2xcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZiAoIXNxdWFyZXNbbmV4dFBvcy5yb3ddW25leHRQb3MuY29sXSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobmV4dFBvcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChwb3Mucm93IDw9IDEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG5leHROZXh0UG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3cgKyAyLFxuXHRcdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2xcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25leHRQb3Mucm93XVtuZXh0UG9zLmNvbF0gJiYgIXNxdWFyZXNbbmV4dE5leHRQb3Mucm93XVtuZXh0TmV4dFBvcy5jb2xdKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5leHROZXh0UG9zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWlzV2hpdGUgJiYgKHBvcy5yb3cgPiAwKSkge1xuXHRcdFx0XHRcdGNvbnN0IG5leHRQb3MgPSBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3cgLSAxLFxuXHRcdFx0XHRcdFx0Y29sOiBwb3MuY29sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25leHRQb3Mucm93XVtuZXh0UG9zLmNvbF0pIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5leHRQb3MpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocG9zLnJvdyA+PSA2KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXh0TmV4dFBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiBwb3Mucm93IC0gMixcblx0XHRcdFx0XHRcdFx0Y29sOiBwb3MuY29sXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICghc3F1YXJlc1tuZXh0UG9zLnJvd11bbmV4dFBvcy5jb2xdICYmICFzcXVhcmVzW25leHROZXh0UG9zLnJvd11bbmV4dE5leHRQb3MuY29sXSkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXh0TmV4dFBvcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5zdGF0ZS5oaXN0b3J5W3RoaXMuc3RhdGUuc3RlcE51bWJlcl07XG5cdFx0XHRpZiAoKHBpZWNlID09ICfimZQnKSAmJiBpc1doaXRlICYmICFjdXJyZW50LndoaXRlS2luZ01vdmVkKSB7XG5cdFx0XHRcdGlmICghY3VycmVudC5sZWZ0V2hpdGVSb29rTW92ZWQgJiYgIXNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbCAtIDFdICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgLSAyXSAmJiAhc3F1YXJlc1twb3Mucm93XVtwb3MuY29sIC0gM10pIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3csXG5cdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2wgLSAyXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghY3VycmVudC5yaWdodFdoaXRlUm9va01vdmVkICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgKyAxXSAmJiAhc3F1YXJlc1twb3Mucm93XVtwb3MuY29sICsgMl0pIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3csXG5cdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2wgKyAyXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwaWVjZSA9PSAn4pmaJykgJiYgIWlzV2hpdGUgJiYgIWN1cnJlbnQuYmxhY2tLaW5nTW92ZWQpIHtcblx0XHRcdFx0aWYgKCFjdXJyZW50LmxlZnRCbGFja1Jvb2tNb3ZlZCAmJiAhc3F1YXJlc1twb3Mucm93XVtwb3MuY29sIC0gMV0gJiYgIXNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbCAtIDJdICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgLSAzXSkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcG9zLnJvdyxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCAtIDJcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFjdXJyZW50LnJpZ2h0QmxhY2tSb29rTW92ZWQgJiYgIXNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbCArIDFdICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgKyAyXSkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcG9zLnJvdyxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCArIDJcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQuZmlsdGVyKCh0b1Bvcyk9PiF0aGlzLmlzS2luZ0luQ2hlY2tJZk1vdmUobmV3IE1vdmUoe1xuXHRcdFx0XHRwaWVjZTogcGllY2UsXG5cdFx0XHRcdGZyb21Qb3M6IHBvcyxcblx0XHRcdFx0dG9Qb3M6IHRvUG9zXG5cdFx0XHR9KSkpO1xuXHRcdH1cblx0fSxcblx0aXNWYWxpZE1vdmU6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gaXNWYWxpZE1vdmVfX19uNChzcXVhcmVzLCBtb3ZlKSB7XG5cdFx0XHRjb25zdCB2YWxpZERlc3RpbmF0aW9ucyA9IHRoaXMuY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMoc3F1YXJlcywgbW92ZS5waWVjZSwgbW92ZS5mcm9tUG9zKTtcblx0XHRcdHJldHVybiB2YWxpZERlc3RpbmF0aW9ucy5maW5kSW5kZXgoKHBvcyk9PnBvcy5lcXVhbHMobW92ZS50b1BvcykpID49IDA7XG5cdFx0fVxuXHR9LFxuXHRpc0luc2lkZUJvYXJkOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGlzSW5zaWRlQm9hcmRfX19uNChjb29yZCkge1xuXHRcdFx0cmV0dXJuICgwIDw9IGNvb3JkLnJvdykgJiYgKGNvb3JkLnJvdyA8IDgpICYmICgwIDw9IGNvb3JkLmNvbCkgJiYgKGNvb3JkLmNvbCA8IDgpO1xuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlS25pZ2h0QXR0YWNraW5nRGVzdGluYXRpb25zOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNhbGN1bGF0ZUtuaWdodEF0dGFja2luZ0Rlc3RpbmF0aW9uc19fX240KHNxdWFyZXMsIHBpZWNlLCBwb3MpIHtcblx0XHRcdGNvbnN0IGRlbHRhcyA9IFtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdC0yXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQtMixcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0LTIsXG5cdFx0XHRcdFx0MVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0LTEsXG5cdFx0XHRcdFx0MlxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQyXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQyLFxuXHRcdFx0XHRcdDFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdFx0LTFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0LTJcblx0XHRcdFx0XVxuXHRcdFx0XTtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IChkZWx0YXMubWFwKChkZWx0YSk9Pm5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0cm93OiBwb3Mucm93ICsgZGVsdGFbMF0sXG5cdFx0XHRcdGNvbDogcG9zLmNvbCArIGRlbHRhWzFdXG5cdFx0XHR9KSkpLmZpbHRlcigoY29vcmQpPT50aGlzLmlzSW5zaWRlQm9hcmQoY29vcmQpICYmICF0aGlzLmlzUG9zaXRpb25PY2N1cGllZEJ5cGllY2VTYW1lQ29sb3Ioc3F1YXJlcywgcGllY2UsIGNvb3JkKSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlUm9va0F0dGFja2luZ0Rlc3RpbmF0aW9uczoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVSb29rQXR0YWNraW5nRGVzdGluYXRpb25zX19fbjQoc3F1YXJlcywgcGllY2UsIHBvcykge1xuXHRcdFx0Y29uc3Qgcm93ID0gcG9zLnJvdztcblx0XHRcdGNvbnN0IGNvbCA9IHBvcy5jb2w7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGNvbnN0IGRlbHRhcyA9IFtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdDBcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0MFxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHQrMVxuXHRcdFx0XHRdXG5cdFx0XHRdO1xuXHRcdFx0Zm9yKGxldCBkZWx0YSBvZiBkZWx0YXMpIHtcblx0XHRcdFx0bGV0IG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRyb3c6IHJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdGNvbDogY29sICsgZGVsdGFbMV1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdoaWxlKHRoaXMuaXNJbnNpZGVCb2FyZChuZXdQb3MpKSB7XG5cdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25ld1Bvcy5yb3ddW25ld1Bvcy5jb2xdKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXdQb3MpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5pc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yKHNxdWFyZXMsIHBpZWNlLCBuZXdQb3MpKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIG5ld1BvcykpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobmV3UG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogbmV3UG9zLnJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdFx0Y29sOiBuZXdQb3MuY29sICsgZGVsdGFbMV1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZUJpc2hvcEF0dGFja2luZ0Rlc3RpbmF0aW9uczoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVCaXNob3BBdHRhY2tpbmdEZXN0aW5hdGlvbnNfX19uNChzcXVhcmVzLCBwaWVjZSwgcG9zKSB7XG5cdFx0XHRjb25zdCByb3cgPSBwb3Mucm93O1xuXHRcdFx0Y29uc3QgY29sID0gcG9zLmNvbDtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuXHRcdFx0Y29uc3QgZGVsdGFzID0gW1xuXHRcdFx0XHRbXG5cdFx0XHRcdFx0LTEsXG5cdFx0XHRcdFx0LTFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdDFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0MVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdXG5cdFx0XHRdO1xuXHRcdFx0Zm9yKGxldCBkZWx0YSBvZiBkZWx0YXMpIHtcblx0XHRcdFx0bGV0IG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRyb3c6IHJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdGNvbDogY29sICsgZGVsdGFbMV1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdoaWxlKHRoaXMuaXNJbnNpZGVCb2FyZChuZXdQb3MpKSB7XG5cdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25ld1Bvcy5yb3ddW25ld1Bvcy5jb2xdKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXdQb3MpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5pc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yKHNxdWFyZXMsIHBpZWNlLCBuZXdQb3MpKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIG5ld1BvcykpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobmV3UG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogbmV3UG9zLnJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdFx0Y29sOiBuZXdQb3MuY29sICsgZGVsdGFbMV1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZVF1ZWVuQXR0YWNraW5nRGVzdGluYXRpb25zOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNhbGN1bGF0ZVF1ZWVuQXR0YWNraW5nRGVzdGluYXRpb25zX19fbjQoc3F1YXJlcywgcGllY2UsIHBvcykge1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChpc1doaXRlKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhbGN1bGF0ZVJvb2tBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgJ+KZlicsIHBvcykuY29uY2F0KHRoaXMuY2FsY3VsYXRlQmlzaG9wQXR0YWNraW5nRGVzdGluYXRpb25zKHNxdWFyZXMsICfimZcnLCBwb3MpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhbGN1bGF0ZVJvb2tBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgJ+KZnCcsIHBvcykuY29uY2F0KHRoaXMuY2FsY3VsYXRlQmlzaG9wQXR0YWNraW5nRGVzdGluYXRpb25zKHNxdWFyZXMsICfimZ0nLCBwb3MpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZUtpbmdBdHRhY2tpbmdEZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlS2luZ0F0dGFja2luZ0Rlc3RpbmF0aW9uc19fX240KHNxdWFyZXMsIHBpZWNlLCBwb3MpIHtcblx0XHRcdGNvbnN0IGRlbHRhcyA9IFtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdC0xXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQtMSxcblx0XHRcdFx0XHQwXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQtMSxcblx0XHRcdFx0XHQxXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdDFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0MVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQwXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQxLFxuXHRcdFx0XHRcdC0xXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdC0xXG5cdFx0XHRcdF1cblx0XHRcdF07XG5cdFx0XHRjb25zdCByZXN1bHQgPSAoZGVsdGFzLm1hcCgoZGVsdGEpPT5uZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdHJvdzogcG9zLnJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRjb2w6IHBvcy5jb2wgKyBkZWx0YVsxXVxuXHRcdFx0fSkpKS5maWx0ZXIoKGNvb3JkKT0+dGhpcy5pc0luc2lkZUJvYXJkKGNvb3JkKSAmJiAhdGhpcy5pc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yKHNxdWFyZXMsIHBpZWNlLCBjb29yZCkpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZVBhd25BdHRhY2tpbmdEZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlUGF3bkF0dGFja2luZ0Rlc3RpbmF0aW9uc19fX240KHNxdWFyZXMsIHBpZWNlLCBwb3MpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChpc1doaXRlICYmIChwb3Mucm93IDwgNykpIHtcblx0XHRcdFx0Zm9yKGxldCBkYyBvZiBbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNrUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0cm93OiBwb3Mucm93ICsgMSxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCArIGRjXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNJbnNpZGVCb2FyZChhdHRhY2tQb3MpICYmIHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIGF0dGFja1BvcykpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGF0dGFja1Bvcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCFpc1doaXRlICYmIChwb3Mucm93ID4gMCkpIHtcblx0XHRcdFx0Zm9yKGxldCBkYyBvZiBbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNrUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0cm93OiBwb3Mucm93IC0gMSxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCArIGRjXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNJbnNpZGVCb2FyZChhdHRhY2tQb3MpICYmIHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIGF0dGFja1BvcykpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGF0dGFja1Bvcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlQXR0YWNrZWREZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlQXR0YWNrZWREZXN0aW5hdGlvbnNfX19uNChzcXVhcmVzLCBwaWVjZSwgcG9zKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gbmV3IEFycmF5KCk7XG5cdFx0XHRzd2l0Y2gocGllY2UpIHtcblx0XHRcdFx0Y2FzZSAoJ+KZmCcpOlxuXHRcdFx0XHRjYXNlICgn4pmeJyk6XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVLbmlnaHRBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgKCfimZYnKTpcblx0XHRcdFx0Y2FzZSAoJ+KZnCcpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2FsY3VsYXRlUm9va0F0dGFja2luZ0Rlc3RpbmF0aW9ucyhzcXVhcmVzLCBwaWVjZSwgcG9zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAoJ+KZlycpOlxuXHRcdFx0XHRjYXNlICgn4pmdJyk6XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVCaXNob3BBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgKCfimZUnKTpcblx0XHRcdFx0Y2FzZSAoJ+KZmycpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2FsY3VsYXRlUXVlZW5BdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgKCfimZQnKTpcblx0XHRcdFx0Y2FzZSAoJ+KZmicpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2FsY3VsYXRlS2luZ0F0dGFja2luZ0Rlc3RpbmF0aW9ucyhzcXVhcmVzLCBwaWVjZSwgcG9zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAoJ+KZlCcpOlxuXHRcdFx0XHRjYXNlICgn4pmaJyk6XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVLaW5nQXR0YWNraW5nRGVzdGluYXRpb25zKHNxdWFyZXMsIHBpZWNlLCBwb3MpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICgn4pmZJyk6XG5cdFx0XHRcdGNhc2UgKCfimZ8nKTpcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLmNhbGN1bGF0ZVBhd25BdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0aXNLaW5nSW5DaGVja0lmTW92ZToge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc0tpbmdJbkNoZWNrSWZNb3ZlX19fbjQoYXR0ZW1wdGVkTW92ZSkge1xuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRzcXVhcmVzOiBjaGFuZ2VkU3F1YXJlc1xuXHRcdFx0fSA9IHRoaXMubW92ZShhdHRlbXB0ZWRNb3ZlKTtcblx0XHRcdGNvbnN0IGlzV2hpdGUgPSB0aGlzLmlzV2hpdGVwaWVjZShhdHRlbXB0ZWRNb3ZlLnBpZWNlKTtcblx0XHRcdGNvbnN0IGtpbmdQb3MgPSB0aGlzLmdldEtpbmdQb3NpdGlvbihjaGFuZ2VkU3F1YXJlcywgaXNXaGl0ZSk7XG5cdFx0XHRpZiAoIWtpbmdQb3MpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuaXNLaW5nSW5DaGVjayhjaGFuZ2VkU3F1YXJlcywgaXNXaGl0ZSA/ICfimZQnIDogJ+KZmicsIGtpbmdQb3MpO1xuXHRcdH1cblx0fSxcblx0aXNLaW5nSW5DaGVjazoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc0tpbmdJbkNoZWNrX19fbjQoc3F1YXJlcywga2luZywgcG9zKSB7XG5cdFx0XHRpZiAoKGtpbmcgIT0gJ+KZlCcpICYmIChraW5nICE9ICfimZonKSkge1xuXHRcdFx0XHR0aHJvdyBcIlRoZSBpbnB1dCBwaWVjZSBpcyBub3QgYSBraW5nXCI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpc1doaXRlS2luZyA9IGtpbmcgPT0gJ+KZlCc7XG5cdFx0XHRjb25zdCBvcHBvbmVudHBpZWNlcyA9IGlzV2hpdGVLaW5nID8gdGhpcy5nZXRQaWVjZXNPZlNhbWVDb2xvcihzcXVhcmVzLCBmYWxzZSkgOiB0aGlzLmdldFBpZWNlc09mU2FtZUNvbG9yKHNxdWFyZXMsIHRydWUpO1xuXHRcdFx0bGV0IHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuXHRcdFx0Zm9yKGxldCBvcHBvbmVudHBpZWNlIG9mIG9wcG9uZW50cGllY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHIgPSB0aGlzLmNhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zKHNxdWFyZXMsIG9wcG9uZW50cGllY2UucGllY2UsIG9wcG9uZW50cGllY2UucG9zKTtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LmNvbmNhdChyKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGIgPSByZXN1bHQuZmluZCgocCk9PnAuZXF1YWxzKHBvcykpID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0cmV0dXJuIGI7XG5cdFx0fVxuXHR9LFxuXHRnZXRQaWVjZXNPZlNhbWVDb2xvcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRQaWVjZXNPZlNhbWVDb2xvcl9fX240KHNxdWFyZXMsIHdoaXRlKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGZvcihsZXQgaSA9IDA7aSA8IHNxdWFyZXMubGVuZ3RoO2krKykge1xuXHRcdFx0XHRmb3IobGV0IGogPSAwO2ogPCBzcXVhcmVzW2ldLmxlbmd0aDtqKyspIHtcblx0XHRcdFx0XHRpZiAod2hpdGUgPyB0aGlzLmlzV2hpdGVwaWVjZShzcXVhcmVzW2ldW2pdKSA6IHRoaXMuaXNCbGFja3BpZWNlKHNxdWFyZXNbaV1bal0pKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHBpZWNlOiBzcXVhcmVzW2ldW2pdLFxuXHRcdFx0XHRcdFx0XHRwb3M6IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRyb3c6IGksXG5cdFx0XHRcdFx0XHRcdFx0Y29sOiBqXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9LFxuXHRnZXRLaW5nUG9zaXRpb246IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0S2luZ1Bvc2l0aW9uX19fbjQoc3F1YXJlcywgaXNXaGl0ZSkge1xuXHRcdFx0Zm9yKGxldCBpID0gMDtpIDwgc3F1YXJlcy5sZW5ndGg7aSsrKSB7XG5cdFx0XHRcdGZvcihsZXQgaiA9IDA7aiA8IHNxdWFyZXNbaV0ubGVuZ3RoO2orKykge1xuXHRcdFx0XHRcdGlmIChpc1doaXRlID8gc3F1YXJlc1tpXVtqXSA9PSAn4pmUJyA6IHNxdWFyZXNbaV1bal0gPT0gJ+KZmicpIHtcblx0XHRcdFx0XHRcdHJldHVybiBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRcdHJvdzogaSxcblx0XHRcdFx0XHRcdFx0Y29sOiBqXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fSxcblx0aXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZVNhbWVDb2xvcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yX19fbjQoc3F1YXJlcywgcGllY2UsIG5ld1Bvcykge1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChpc1doaXRlICYmIHRoaXMuaXNXaGl0ZXBpZWNlKHNxdWFyZXNbbmV3UG9zLnJvd11bbmV3UG9zLmNvbF0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpc1doaXRlICYmIHRoaXMuaXNCbGFja3BpZWNlKHNxdWFyZXNbbmV3UG9zLnJvd11bbmV3UG9zLmNvbF0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0aXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3I6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3JfX19uNChzcXVhcmVzLCBwaWVjZSwgbmV3UG9zKSB7XG5cdFx0XHRjb25zdCBpc1doaXRlID0gdGhpcy5pc1doaXRlcGllY2UocGllY2UpO1xuXHRcdFx0aWYgKGlzV2hpdGUgJiYgdGhpcy5pc0JsYWNrcGllY2Uoc3F1YXJlc1tuZXdQb3Mucm93XVtuZXdQb3MuY29sXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWlzV2hpdGUgJiYgdGhpcy5pc1doaXRlcGllY2Uoc3F1YXJlc1tuZXdQb3Mucm93XVtuZXdQb3MuY29sXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXHRnZXRDdXJyZW50U25hcHNob3Q6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0Q3VycmVudFNuYXBzaG90X19fbjQoKSB7XG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gdGhpcy5zdGF0ZS5oaXN0b3J5O1xuXHRcdFx0cmV0dXJuIGhpc3RvcnlbdGhpcy5zdGF0ZS5zdGVwTnVtYmVyXTtcblx0XHR9XG5cdH0sXG5cdG1vdmU6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gbW92ZV9fX240KGF0dGVtcHRlZE1vdmUpIHtcblx0XHRcdGNvbnN0IHBpZWNlID0gYXR0ZW1wdGVkTW92ZS5waWVjZTtcblx0XHRcdGNvbnN0IGZyb21Qb3MgPSBhdHRlbXB0ZWRNb3ZlLmZyb21Qb3M7XG5cdFx0XHRjb25zdCB0b1BvcyA9IGF0dGVtcHRlZE1vdmUudG9Qb3M7XG5cdFx0XHRjb25zdCBjdXJyZW50U25hcHNob3QgPSB0aGlzLmdldEN1cnJlbnRTbmFwc2hvdCgpO1xuXHRcdFx0Y29uc3Qgc3F1YXJlcyA9IGN1cnJlbnRTbmFwc2hvdC5zcXVhcmVzO1xuXHRcdFx0Y29uc3QgbmV3U3F1YXJlcyA9IHNxdWFyZXMubWFwKChyb3dzKT0+cm93cy5zbGljZSgpKTtcblx0XHRcdGNvbnN0IG1vdmVzID0gbmV3IEFycmF5KCk7XG5cdFx0XHRpZiAodGhpcy5pc0Nhc3RsaW5nTW92ZShwaWVjZSwgZnJvbVBvcywgdG9Qb3MpKSB7XG5cdFx0XHRcdG1vdmVzLnB1c2gobmV3IE1vdmUoe1xuXHRcdFx0XHRcdHBpZWNlOiBwaWVjZSxcblx0XHRcdFx0XHRmcm9tUG9zOiBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IGZyb21Qb3Mucm93LFxuXHRcdFx0XHRcdFx0Y29sOiBmcm9tUG9zLmNvbFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdHRvUG9zOiBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHRvUG9zLnJvdyxcblx0XHRcdFx0XHRcdGNvbDogdG9Qb3MuY29sXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRuZXdTcXVhcmVzW3RvUG9zLnJvd11bdG9Qb3MuY29sXSA9IHBpZWNlO1xuXHRcdFx0XHRuZXdTcXVhcmVzW2Zyb21Qb3Mucm93XVtmcm9tUG9zLmNvbF0gPSBudWxsO1xuXHRcdFx0XHRsZXQgcm9va0Zyb21Qb3M7XG5cdFx0XHRcdGxldCByb29rVG9Qb3M7XG5cdFx0XHRcdGlmIChwaWVjZSA9PSAn4pmUJykge1xuXHRcdFx0XHRcdGlmICh0b1Bvcy5jb2wgPCBmcm9tUG9zLmNvbCkge1xuXHRcdFx0XHRcdFx0cm9va0Zyb21Qb3MgPSBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRcdHJvdzogMCxcblx0XHRcdFx0XHRcdFx0Y29sOiAwXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJvb2tUb1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiAwLFxuXHRcdFx0XHRcdFx0XHRjb2w6IDNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb29rRnJvbVBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiAwLFxuXHRcdFx0XHRcdFx0XHRjb2w6IDdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cm9va1RvUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0XHRyb3c6IDAsXG5cdFx0XHRcdFx0XHRcdGNvbDogNVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICh0b1Bvcy5jb2wgPCBmcm9tUG9zLmNvbCkge1xuXHRcdFx0XHRcdFx0cm9va0Zyb21Qb3MgPSBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRcdHJvdzogNyxcblx0XHRcdFx0XHRcdFx0Y29sOiAwXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJvb2tUb1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiA3LFxuXHRcdFx0XHRcdFx0XHRjb2w6IDNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb29rRnJvbVBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiA3LFxuXHRcdFx0XHRcdFx0XHRjb2w6IDdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cm9va1RvUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0XHRyb3c6IDcsXG5cdFx0XHRcdFx0XHRcdGNvbDogNVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG1vdmVzLnB1c2gobmV3IE1vdmUoe1xuXHRcdFx0XHRcdHBpZWNlOiBzcXVhcmVzW3Jvb2tGcm9tUG9zLnJvd11bcm9va0Zyb21Qb3MuY29sXSxcblx0XHRcdFx0XHRmcm9tUG9zOiByb29rRnJvbVBvcyxcblx0XHRcdFx0XHR0b1Bvczogcm9va1RvUG9zXG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0bmV3U3F1YXJlc1tyb29rVG9Qb3Mucm93XVtyb29rVG9Qb3MuY29sXSA9IHNxdWFyZXNbcm9va0Zyb21Qb3Mucm93XVtyb29rRnJvbVBvcy5jb2xdO1xuXHRcdFx0XHRuZXdTcXVhcmVzW3Jvb2tGcm9tUG9zLnJvd11bcm9va0Zyb21Qb3MuY29sXSA9IG51bGw7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBwaWVjZSA9IHNxdWFyZXNbZnJvbVBvcy5yb3ddW2Zyb21Qb3MuY29sXTtcblx0XHRcdFx0bmV3U3F1YXJlc1t0b1Bvcy5yb3ddW3RvUG9zLmNvbF0gPSBwaWVjZTtcblx0XHRcdFx0bmV3U3F1YXJlc1tmcm9tUG9zLnJvd11bZnJvbVBvcy5jb2xdID0gbnVsbDtcblx0XHRcdFx0bW92ZXMucHVzaChhdHRlbXB0ZWRNb3ZlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNxdWFyZXM6IG5ld1NxdWFyZXMsXG5cdFx0XHRcdG1vdmVzOiBtb3Zlc1xuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cdGlzQ2FzdGxpbmdNb3ZlOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGlzQ2FzdGxpbmdNb3ZlX19fbjQocGllY2UsIGZyb21Qb3MsIHRvUG9zKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50U25hcHNob3QgPSB0aGlzLmdldEN1cnJlbnRTbmFwc2hvdCgpO1xuXHRcdFx0aWYgKHBpZWNlID09ICfimZQnICYmICFjdXJyZW50U25hcHNob3Qud2hpdGVLaW5nTW92ZWQgJiYgTWF0aC5hYnModG9Qb3MuY29sIC0gZnJvbVBvcy5jb2wpID09IDIpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGllY2UgPT0gJ+KZmicgJiYgIWN1cnJlbnRTbmFwc2hvdC5ibGFja0tpbmdNb3ZlZCAmJiBNYXRoLmFicyh0b1Bvcy5jb2wgLSBmcm9tUG9zLmNvbCkgPT0gMikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0sXG5cdGlzTGVmdFdoaXRlUm9vazoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc0xlZnRXaGl0ZVJvb2tfX19uNChwaWVjZSwgcG9zKSB7XG5cdFx0XHRyZXR1cm4gKHBpZWNlID09ICfimZYnKSAmJiAocG9zLnJvdyA9PSAwKSAmJiAocG9zLmNvbCA9PSAwKTtcblx0XHR9XG5cdH0sXG5cdGlzV2hpdGVwaWVjZToge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc1doaXRlcGllY2VfX19uNChwaWVjZSkge1xuXHRcdFx0c3dpdGNoKHBpZWNlKSB7XG5cdFx0XHRcdGNhc2UgJ+KZmSc6XG5cdFx0XHRcdGNhc2UgJ+KZlic6XG5cdFx0XHRcdGNhc2UgJ+KZmCc6XG5cdFx0XHRcdGNhc2UgJ+KZlyc6XG5cdFx0XHRcdGNhc2UgJ+KZlSc6XG5cdFx0XHRcdGNhc2UgJ+KZlCc6XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aXNCbGFja3BpZWNlOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGlzQmxhY2twaWVjZV9fX240KHBpZWNlKSB7XG5cdFx0XHRzd2l0Y2gocGllY2UpIHtcblx0XHRcdFx0Y2FzZSAn4pmfJzpcblx0XHRcdFx0Y2FzZSAn4pmcJzpcblx0XHRcdFx0Y2FzZSAn4pmeJzpcblx0XHRcdFx0Y2FzZSAn4pmdJzpcblx0XHRcdFx0Y2FzZSAn4pmbJzpcblx0XHRcdFx0Y2FzZSAn4pmaJzpcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRyZW5kZXI6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyX19fbjQoKSB7XG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gdGhpcy5zdGF0ZS5oaXN0b3J5O1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IGhpc3RvcnlbdGhpcy5zdGF0ZS5zdGVwTnVtYmVyXTtcblx0XHRcdGNvbnN0IHdpbm5lciA9IHRoaXMuY2FsY3VsYXRlV2lubmVyKGN1cnJlbnQuc3F1YXJlcyk7XG5cdFx0XHRjb25zdCBtb3ZlcyA9IGhpc3RvcnkubWFwKChzbmFwc2hvdCwgc3RlcCk9Pntcblx0XHRcdFx0Y29uc3QgYWN0aW9uTGFiZWwgPSBzdGVwID8gJ0dvIHRvIG1vdmUgIycgKyBzdGVwIDogJ0dvIHRvIGdhbWUgc3RhcnQnO1xuXHRcdFx0XHRjb25zdCB0YWJsZUNlbGxTdHlsZXMgPSB7XG5cdFx0XHRcdFx0dGV4dEFsaWduOiAnY2VudGVyJyxcblx0XHRcdFx0XHR2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcblx0XHRcdFx0XHRwYWRkaW5nOiAnNXB4Jyxcblx0XHRcdFx0XHRwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBhY3Rpb25CdXR0b25TdHlsZXMgPSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiAnZ3JlZW4nLFxuXHRcdFx0XHRcdGJvcmRlcjogJ25vbmUnLFxuXHRcdFx0XHRcdGNvbG9yOiAnd2hpdGUnLFxuXHRcdFx0XHRcdHBhZGRpbmc6ICc0cHgnLFxuXHRcdFx0XHRcdHRleHRBbGlnbjogJ2NlbnRlcicsXG5cdFx0XHRcdFx0dGV4dERlY29yYXRpb246ICdub25lJyxcblx0XHRcdFx0XHRkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3RyJywgbnVsbCwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGQnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogdGFibGVDZWxsU3R5bGVzXG5cdFx0XHRcdH0pLCBzdGVwKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGQnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogdGFibGVDZWxsU3R5bGVzXG5cdFx0XHRcdH0pLCBzbmFwc2hvdC5sYXN0TW92ZXMuam9pbignLCcpKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGQnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogdGFibGVDZWxsU3R5bGVzXG5cdFx0XHRcdH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KCdidXR0b24nLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogYWN0aW9uQnV0dG9uU3R5bGVzLFxuXHRcdFx0XHRcdG9uQ2xpY2s6ICgpPT50aGlzLmdvVG9TdGVwKHN0ZXApXG5cdFx0XHRcdH0pLCBhY3Rpb25MYWJlbCkpKSkpO1xuXHRcdFx0fSk7XG5cdFx0XHRsZXQgc3RhdHVzO1xuXHRcdFx0aWYgKHdpbm5lcikge1xuXHRcdFx0XHRzdGF0dXMgPSBcIldpbm5lcjogXCIgKyB3aW5uZXI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0dXMgPSBcIk5leHQgcGxheWVyOiBcIiArICh0aGlzLnN0YXRlLndoaXRlSXNOZXh0ID8gXCJXaGl0ZVwiIDogXCJCbGFja1wiKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHRhYmxlU3R5bGVzID0ge1xuXHRcdFx0XHR3aWR0aDogJzEwMCUnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RlcFN0eWxlcyA9IHtcblx0XHRcdFx0d2lkdGg6ICcxMCUnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgbW92ZVN0eWxlcyA9IHtcblx0XHRcdFx0d2lkdGg6ICc0NSUnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgYWN0aW9uU3R5bGVzID0ge1xuXHRcdFx0XHR3aWR0aDogJzQ1JSdcblx0XHRcdH07XG5cdFx0XHRjb25zdCBnYW1lU3R5bGVzID0ge1xuXHRcdFx0XHRkaXNwbGF5OiAnZmxleCcsXG5cdFx0XHRcdGZsZXhEaXJlY3Rpb246ICdyb3cnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZ2FtZUluZm9TdHlsZXMgPSB7XG5cdFx0XHRcdG1hcmdpblRvcDogJzIwcHgnLFxuXHRcdFx0XHRtYXJnaW5MZWZ0OiAnMjBweCcsXG5cdFx0XHRcdHdpZHRoOiAnNDB2dycsXG5cdFx0XHRcdGZvbnRTaXplOiAnMS41dncnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZ2FtZWJvYXJkU3R5bGVzID0ge1xuXHRcdFx0XHR3aWR0aDogJzYwdncnLFxuXHRcdFx0XHRoZWlnaHQ6ICc2MHZ3J1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBnYW1lU3R5bGVzXG5cdFx0XHR9KSwgUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBnYW1lYm9hcmRTdHlsZXNcblx0XHRcdH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KEJvYXJkLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3F1YXJlczogY3VycmVudC5zcXVhcmVzLFxuXHRcdFx0XHRwaWNrZWRTcXVhcmU6IHRoaXMuc3RhdGUucGlja2VkU3F1YXJlLFxuXHRcdFx0XHR2YWxpZERlc3RpbmF0aW9uczogdGhpcy5zdGF0ZS52YWxpZERlc3RpbmF0aW9ucyxcblx0XHRcdFx0b25DbGljazogKHBvcyk9PnRoaXMuaGFuZGxlQ2xpY2socG9zKVxuXHRcdFx0fSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBnYW1lSW5mb1N0eWxlc1xuXHRcdFx0fSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIG51bGwsIHN0YXR1cyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3AnLCBudWxsKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGFibGUnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3R5bGU6IHRhYmxlU3R5bGVzXG5cdFx0XHR9KSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndHInLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KCd0aCcsIE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0XHRzdHlsZTogc3RlcFN0eWxlc1xuXHRcdFx0fSksIFwiU3RlcFwiKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGgnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3R5bGU6IG1vdmVTdHlsZXNcblx0XHRcdH0pLCBcIk1vdmVcIiksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3RoJywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBhY3Rpb25TdHlsZXNcblx0XHRcdH0pLCBcIkFjdGlvblwiKSksIG1vdmVzKSkpKTtcblx0XHR9XG5cdH1cbn0sIHt9LCBmdW5jdGlvbihpbnN0YW5jZVByb3RvLCBzdGF0aWNQcm90bykge1xuXHR2YXIgbWV0YUNsYXNzID0gbmV3IE40Q2xhc3Moe1xuXHRcdG5hbWU6ICdHYW1lJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy5HYW1lLkdhbWUnLFxuXHRcdG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjb25zdHJ1Y3RvcicsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY29uc3RydWN0b3InXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdoYW5kbGVDbGljaycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snaGFuZGxlQ2xpY2snXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdnb1RvU3RlcCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snZ29Ub1N0ZXAnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdnZXRBbGxQaWVjZXNTYW1lQ29sb3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2dldEFsbFBpZWNlc1NhbWVDb2xvciddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2ZvckFsbCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snZm9yQWxsJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlV2lubmVyJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVXaW5uZXInXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVWYWxpZERlc3RpbmF0aW9ucycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1ZhbGlkTW92ZScsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snaXNWYWxpZE1vdmUnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc0luc2lkZUJvYXJkJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc0luc2lkZUJvYXJkJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlS25pZ2h0QXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVLbmlnaHRBdHRhY2tpbmdEZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVSb29rQXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVSb29rQXR0YWNraW5nRGVzdGluYXRpb25zJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlQmlzaG9wQXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVCaXNob3BBdHRhY2tpbmdEZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVRdWVlbkF0dGFja2luZ0Rlc3RpbmF0aW9ucycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY2FsY3VsYXRlUXVlZW5BdHRhY2tpbmdEZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVLaW5nQXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVLaW5nQXR0YWNraW5nRGVzdGluYXRpb25zJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlUGF3bkF0dGFja2luZ0Rlc3RpbmF0aW9ucycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY2FsY3VsYXRlUGF3bkF0dGFja2luZ0Rlc3RpbmF0aW9ucyddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2NhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVBdHRhY2tlZERlc3RpbmF0aW9ucyddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2lzS2luZ0luQ2hlY2tJZk1vdmUnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzS2luZ0luQ2hlY2tJZk1vdmUnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc0tpbmdJbkNoZWNrJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc0tpbmdJbkNoZWNrJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0UGllY2VzT2ZTYW1lQ29sb3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2dldFBpZWNlc09mU2FtZUNvbG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0S2luZ1Bvc2l0aW9uJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydnZXRLaW5nUG9zaXRpb24nXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzUG9zaXRpb25PY2N1cGllZEJ5cGllY2VPdGhlckNvbG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0Q3VycmVudFNuYXBzaG90Jyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydnZXRDdXJyZW50U25hcHNob3QnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdtb3ZlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydtb3ZlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnaXNDYXN0bGluZ01vdmUnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzQ2FzdGxpbmdNb3ZlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnaXNMZWZ0V2hpdGVSb29rJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc0xlZnRXaGl0ZVJvb2snXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1doaXRlcGllY2UnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzV2hpdGVwaWVjZSddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2lzQmxhY2twaWVjZScsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snaXNCbGFja3BpZWNlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAncmVuZGVyJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydyZW5kZXInXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KVxuXHRcdF0sXG5cdFx0Y29uc3VtZWRNZW1iZXJzOiBbXSxcblx0XHRhbm5vdGF0aW9uczogW11cblx0fSk7XG5cdHJldHVybiBtZXRhQ2xhc3M7XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHYW1lLCAnJGRpJywge1xuXHR2YWx1ZToge1xuXHRcdHN1cGVyVHlwZTogUmVhY3QuQ29tcG9uZW50LFxuXHRcdGZpZWxkc0luamVjdGVkVHlwZXM6IFtdXG5cdH1cbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9R2FtZS5tYXBcbiIsIi8vIEdlbmVyYXRlZCBieSBONEpTIHRyYW5zcGlsZXI7IGZvciBjb3B5cmlnaHQgc2VlIG9yaWdpbmFsIE40SlMgc291cmNlIGZpbGUuXG5cbmltcG9ydCAnbjRqcy1ydW50aW1lJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QvaW5kZXgnXG5pbXBvcnQgR2FtZSBmcm9tICcuL2NvbXBvbmVudHMvR2FtZSdcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcblxuUmVhY3RET00ucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR2FtZSwgbnVsbCksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2hlc3NBcHBNb3VudFBvaW50XCIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1haW4ubWFwXG4iXSwic291cmNlUm9vdCI6IiJ9
\ No newline at end of file
+*/var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach((function(e){o[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),l=1;l<arguments.length;l++){for(var u in n=Object(arguments[l]))i.call(n,u)&&(c[u]=n[u]);if(o){s=o(n);for(var d=0;d<s.length;d++)r.call(n,s[d])&&(c[s[d]]=n[s[d]])}}return c}},function(e,t,n){"use strict";n.r(t);n(4),n(5);var o=n(2);function i(e){const t=e||{};({row:this.row,col:this.col}=t)}function r(e){const t=e||{};({piece:this.piece,fromPos:this.fromPos,toPos:this.toPos}=t)}$makeClass(i,N4Object,[],{equals:{value:function(e){return this.row==e.row&&this.col==e.col}},getBoardCoordinateRepresentation:{value:function(){return`(${8-this.row+","+String.fromCharCode("a".charCodeAt(0)+this.col)})`}},toString:{value:function(){return`(${this.row},${this.col})`}},row:{value:void 0,writable:!0},col:{value:void 0,writable:!0}},{},(function(e,t){return new N4Class({name:"Coordinate",origin:"chess-react",fqn:"Coordinate/Coordinate",n4superType:N4Object.n4type,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"row",isStatic:!1,annotations:[]}),new N4DataField({name:"col",isStatic:!1,annotations:[]}),new N4Method({name:"constructor",isStatic:!1,jsFunction:e.constructor,annotations:[]}),new N4Method({name:"equals",isStatic:!1,jsFunction:e.equals,annotations:[]}),new N4Method({name:"getBoardCoordinateRepresentation",isStatic:!1,jsFunction:e.getBoardCoordinateRepresentation,annotations:[]}),new N4Method({name:"toString",isStatic:!1,jsFunction:e.toString,annotations:[]})],consumedMembers:[],annotations:[]})})),$makeClass(r,N4Object,[],{toString:{value:function(){return this.piece+" "+this.fromPos.getBoardCoordinateRepresentation()+"→"+this.toPos.getBoardCoordinateRepresentation()}},piece:{value:void 0,writable:!0},fromPos:{value:void 0,writable:!0},toPos:{value:void 0,writable:!0}},{},(function(e,t){return new N4Class({name:"Move",origin:"chess-react",fqn:"Move/Move",n4superType:N4Object.n4type,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"piece",isStatic:!1,annotations:[]}),new N4DataField({name:"fromPos",isStatic:!1,annotations:[]}),new N4DataField({name:"toPos",isStatic:!1,annotations:[]}),new N4Method({name:"constructor",isStatic:!1,jsFunction:e.constructor,annotations:[]}),new N4Method({name:"toString",isStatic:!1,jsFunction:e.toString,annotations:[]})],consumedMembers:[],annotations:[]})}));var a=n(0),s={$fieldDefaults:{label:void 0},$methods:{}};$makeInterface(s,void 0,(function(e,t){return new N4Interface({name:"CoordinateSquareProps",origin:"chess-react",fqn:"components/CoordinateSquare/CoordinateSquareProps",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"label",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})}));const c={fontSize:"2vw",textAlign:"center",display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%"};function l(e){a.Component.prototype.constructor.call(this,e)}$makeClass(l,a.Component,[],{render:{value:function(){return a.createElement("div",Object.assign({style:c}),this.props.label)}}},{},(function(e,t){return new N4Class({name:"LabelSquare",origin:"chess-react",fqn:"components/CoordinateSquare/LabelSquare",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4Method({name:"render",isStatic:!1,jsFunction:e.render,annotations:[]})],consumedMembers:[],annotations:[]})}));var u={$fieldDefaults:{isWhite:void 0,piece:void 0,onClick:void 0,isPicked:void 0,isValidDestination:void 0},$methods:{}};$makeInterface(u,void 0,(function(e,t){return new N4Interface({name:"SquareProps",origin:"chess-react",fqn:"components/Square/SquareProps",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"isWhite",isStatic:!1,annotations:[]}),new N4DataField({name:"piece",isStatic:!1,annotations:[]}),new N4DataField({name:"onClick",isStatic:!1,annotations:[]}),new N4DataField({name:"isPicked",isStatic:!1,annotations:[]}),new N4DataField({name:"isValidDestination",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})}));const d={display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",fontSize:"5vw"};function f(e){let t=e.isWhite?"#EADAB9":"#C2A482";return e.isPicked?t="lime":e.isValidDestination&&(t="yellow"),a.createElement("div",Object.assign({style:Object.assign({},d,{backgroundColor:t}),onClick:e.onClick}),e.piece)}var p={$fieldDefaults:{squares:void 0,pickedSquare:void 0,validDestinations:void 0,onClick:void 0},$methods:{}};$makeInterface(p,void 0,(function(e,t){return new N4Interface({name:"BoardProps",origin:"chess-react",fqn:"components/Board/BoardProps",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"squares",isStatic:!1,annotations:[]}),new N4DataField({name:"pickedSquare",isStatic:!1,annotations:[]}),new N4DataField({name:"validDestinations",isStatic:!1,annotations:[]}),new N4DataField({name:"onClick",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})}));const m={display:"flex",flexWrap:"wrap",width:"100%",height:"100%"},h={width:"10%",height:"10%"};function w(e){a.Component.prototype.constructor.call(this,e)}$makeClass(w,a.Component,[],{renderSquare:{value:function(e,t,n,o,i){return a.createElement("div",Object.assign({style:h}),a.createElement(f,Object.assign({isWhite:t,isPicked:n,isValidDestination:o,piece:i,onClick:()=>this.props.onClick(e)})))}},renderCoordinateSquare:{value:function(e){return a.createElement("div",Object.assign({style:h}),a.createElement(l,Object.assign({label:e})))}},renderSquares:{value:function(){const e=new Array;let t=!0;e.push(this.renderCoordinateSquare(""));for(let t=0;t<8;t++)e.push(this.renderCoordinateSquare(String.fromCharCode("a".charCodeAt(0)+t)));e.push(this.renderCoordinateSquare(""));for(let n=0;n<8;n++){e.push(this.renderCoordinateSquare((8-n).toString()));let o=t;for(let t=0;t<8;t++){const r=new i({row:n,col:t}),a=this.props.validDestinations.findIndex(e=>e.equals(r))>=0;e.push(this.renderSquare(r,o,!(!this.props.pickedSquare||!this.props.pickedSquare.equals(r)),a,this.props.squares[r.row][r.col])),o=!o}t=!t,e.push(this.renderCoordinateSquare((8-n).toString()))}e.push(this.renderCoordinateSquare(""));for(let t=0;t<8;t++)e.push(this.renderCoordinateSquare(String.fromCharCode("a".charCodeAt(0)+t)));return e.push(this.renderCoordinateSquare("")),e}},render:{value:function(){return a.createElement("div",Object.assign({style:m}),this.renderSquares())}}},{},(function(e,t){return new N4Class({name:"Board",origin:"chess-react",fqn:"components/Board/Board",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4Method({name:"renderSquare",isStatic:!1,jsFunction:e.renderSquare,annotations:[]}),new N4Method({name:"renderCoordinateSquare",isStatic:!1,jsFunction:e.renderCoordinateSquare,annotations:[]}),new N4Method({name:"renderSquares",isStatic:!1,jsFunction:e.renderSquares,annotations:[]}),new N4Method({name:"render",isStatic:!1,jsFunction:e.render,annotations:[]})],consumedMembers:[],annotations:[]})}));var y={$fieldDefaults:{squares:void 0,lastMoves:void 0,whiteKingMoved:void 0,leftWhiteRookMoved:void 0,rightWhiteRookMoved:void 0,blackKingMoved:void 0,leftBlackRookMoved:void 0,rightBlackRookMoved:void 0},$methods:{}};$makeInterface(y,void 0,(function(e,t){return new N4Interface({name:"Snapshot",origin:"chess-react",fqn:"components/Game/Snapshot",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"squares",isStatic:!1,annotations:[]}),new N4DataField({name:"lastMoves",isStatic:!1,annotations:[]}),new N4DataField({name:"whiteKingMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"leftWhiteRookMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"rightWhiteRookMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"blackKingMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"leftBlackRookMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"rightBlackRookMoved",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})}));var v={};function g(e){a.Component.prototype.constructor.call(this,e);this.state={history:[{squares:[["♖","♘","♗","♕","♔","♗","♘","♖"],["♙","♙","♙","♙","♙","♙","♙","♙"],[null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null],["♟","♟","♟","♟","♟","♟","♟","♟"],["♜","♞","♝","♛","♚","♝","♞","♜"]],lastMoves:new Array,whiteKingMoved:!1,leftWhiteRookMoved:!1,rightWhiteRookMoved:!1,blackKingMoved:!1,leftBlackRookMoved:!1,rightBlackRookMoved:!1}],stepNumber:0,whiteIsNext:!0,pickedSquare:null,validDestinations:new Array}}v.$fieldDefaults={history:void 0,stepNumber:void 0,whiteIsNext:void 0,pickedSquare:void 0,validDestinations:void 0},v.$methods={},$makeInterface(v,void 0,(function(e,t){return new N4Interface({name:"GameState",origin:"chess-react",fqn:"components/Game/GameState",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"history",isStatic:!1,annotations:[]}),new N4DataField({name:"stepNumber",isStatic:!1,annotations:[]}),new N4DataField({name:"whiteIsNext",isStatic:!1,annotations:[]}),new N4DataField({name:"pickedSquare",isStatic:!1,annotations:[]}),new N4DataField({name:"validDestinations",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})})),$makeClass(g,a.Component,[],{handleClick:{value:function(e){const t=e.row,n=e.col,o=this.state.history.slice(0,this.state.stepNumber+1),i=o[o.length-1],a=this.state.pickedSquare;let s=i.squares;if(this.calculateWinner(s))return;const c=s[t][n];if(this.isWhitepiece(c)&&this.state.whiteIsNext||this.isBlackpiece(c)&&!this.state.whiteIsNext){const t=this.calculateValidDestinations(s,c,e);return void this.setState({pickedSquare:e,validDestinations:t})}if(!a)return;const l=new r({piece:s[a.row][a.col],fromPos:a,toPos:e});if(this.isValidMove(s,l)){const{squares:e,moves:t}=this.move(l);let n=i.whiteKingMoved,r=i.leftWhiteRookMoved,s=i.rightWhiteRookMoved,c=i.blackKingMoved,u=i.leftBlackRookMoved,d=i.rightBlackRookMoved;this.isWhitepiece(l.piece)?(n=n||"♔"==l.piece,r=r||"♖"==l.piece&&0==a.col,s=s||"♖"==l.piece&&7==a.col):(c=c||"♚"==l.piece,u=u||"♜"==l.piece&&0==a.col,d=d||"♜"==l.piece&&7==a.col),this.setState({history:o.concat([{squares:e,lastMoves:t,whiteKingMoved:n,leftWhiteRookMoved:r,rightWhiteRookMoved:s,blackKingMoved:c,leftBlackRookMoved:u,rightBlackRookMoved:d}]),stepNumber:o.length,whiteIsNext:!this.state.whiteIsNext,pickedSquare:null,validDestinations:new Array})}else this.setState({pickedSquare:null,validDestinations:new Array})}},goToStep:{value:function(e){this.setState({stepNumber:e,whiteIsNext:e%2==0,pickedSquare:null,validDestinations:new Array})}},getAllPiecesSameColor:{value:function(e,t){const n=new Array;for(let o=0;o<8;o++)for(let r=0;r<8;r++)(t&&this.isWhitepiece(e[o][r])||!t&&this.isBlackpiece(e[o][r]))&&n.push({piece:e[o][r],pos:new i({row:o,col:r})});return n}},forAll:{value:function(e,t){return e.reduce((e,n)=>e&&t(n),!0)}},calculateWinner:{value:function(e){const t=this.state.whiteIsNext,n=this.getAllPiecesSameColor(e,t);return this.forAll(n,t=>0==this.calculateValidDestinations(e,t.piece,t.pos).length)?t?"Black":"White":null}},calculateValidDestinations:{value:function(e,t,n){const o=this.calculateAttackedDestinations(e,t,n),a=this.isWhitepiece(t);if("♙"==t||"♟"==t)if(a&&n.row<7){const t=new i({row:n.row+1,col:n.col});if(e[t.row][t.col]||o.push(t),n.row<=1){const r=new i({row:n.row+2,col:n.col});e[t.row][t.col]||e[r.row][r.col]||o.push(r)}}else if(!a&&n.row>0){const t=new i({row:n.row-1,col:n.col});if(e[t.row][t.col]||o.push(t),n.row>=6){const r=new i({row:n.row-2,col:n.col});e[t.row][t.col]||e[r.row][r.col]||o.push(r)}}const s=this.state.history[this.state.stepNumber];return"♔"==t&&a&&!s.whiteKingMoved?(s.leftWhiteRookMoved||e[n.row][n.col-1]||e[n.row][n.col-2]||e[n.row][n.col-3]||o.push(new i({row:n.row,col:n.col-2})),s.rightWhiteRookMoved||e[n.row][n.col+1]||e[n.row][n.col+2]||o.push(new i({row:n.row,col:n.col+2}))):"♚"!=t||a||s.blackKingMoved||(s.leftBlackRookMoved||e[n.row][n.col-1]||e[n.row][n.col-2]||e[n.row][n.col-3]||o.push(new i({row:n.row,col:n.col-2})),s.rightBlackRookMoved||e[n.row][n.col+1]||e[n.row][n.col+2]||o.push(new i({row:n.row,col:n.col+2}))),o.filter(e=>!this.isKingInCheckIfMove(new r({piece:t,fromPos:n,toPos:e})))}},isValidMove:{value:function(e,t){return this.calculateValidDestinations(e,t.piece,t.fromPos).findIndex(e=>e.equals(t.toPos))>=0}},isInsideBoard:{value:function(e){return 0<=e.row&&e.row<8&&0<=e.col&&e.col<8}},calculateKnightAttackingDestinations:{value:function(e,t,n){return[[-1,-2],[-2,-1],[-2,1],[-1,2],[1,2],[2,1],[2,-1],[1,-2]].map(e=>new i({row:n.row+e[0],col:n.col+e[1]})).filter(n=>this.isInsideBoard(n)&&!this.isPositionOccupiedBypieceSameColor(e,t,n))}},calculateRookAttackingDestinations:{value:function(e,t,n){const o=n.row,r=n.col,a=new Array,s=[[-1,0],[1,0],[0,-1],[0,1]];for(let n of s){let s=new i({row:o+n[0],col:r+n[1]});for(;this.isInsideBoard(s);){if(e[s.row][s.col]){if(this.isPositionOccupiedBypieceSameColor(e,t,s))break;if(this.isPositionOccupiedBypieceOtherColor(e,t,s)){a.push(s);break}}else a.push(s);s=new i({row:s.row+n[0],col:s.col+n[1]})}}return a}},calculateBishopAttackingDestinations:{value:function(e,t,n){const o=n.row,r=n.col,a=new Array,s=[[-1,-1],[-1,1],[1,1],[1,-1]];for(let n of s){let s=new i({row:o+n[0],col:r+n[1]});for(;this.isInsideBoard(s);){if(e[s.row][s.col]){if(this.isPositionOccupiedBypieceSameColor(e,t,s))break;if(this.isPositionOccupiedBypieceOtherColor(e,t,s)){a.push(s);break}}else a.push(s);s=new i({row:s.row+n[0],col:s.col+n[1]})}}return a}},calculateQueenAttackingDestinations:{value:function(e,t,n){return this.isWhitepiece(t)?this.calculateRookAttackingDestinations(e,"♖",n).concat(this.calculateBishopAttackingDestinations(e,"♗",n)):this.calculateRookAttackingDestinations(e,"♜",n).concat(this.calculateBishopAttackingDestinations(e,"♝",n))}},calculateKingAttackingDestinations:{value:function(e,t,n){return[[-1,-1],[-1,0],[-1,1],[0,1],[1,1],[1,0],[1,-1],[0,-1]].map(e=>new i({row:n.row+e[0],col:n.col+e[1]})).filter(n=>this.isInsideBoard(n)&&!this.isPositionOccupiedBypieceSameColor(e,t,n))}},calculatePawnAttackingDestinations:{value:function(e,t,n){const o=new Array,r=this.isWhitepiece(t);if(r&&n.row<7)for(let r of[1,-1]){const a=new i({row:n.row+1,col:n.col+r});this.isInsideBoard(a)&&this.isPositionOccupiedBypieceOtherColor(e,t,a)&&o.push(a)}else if(!r&&n.row>0)for(let r of[1,-1]){const a=new i({row:n.row-1,col:n.col+r});this.isInsideBoard(a)&&this.isPositionOccupiedBypieceOtherColor(e,t,a)&&o.push(a)}return o}},calculateAttackedDestinations:{value:function(e,t,n){let o=new Array;switch(t){case"♘":case"♞":o=this.calculateKnightAttackingDestinations(e,t,n);break;case"♖":case"♜":o=this.calculateRookAttackingDestinations(e,t,n);break;case"♗":case"♝":o=this.calculateBishopAttackingDestinations(e,t,n);break;case"♕":case"♛":o=this.calculateQueenAttackingDestinations(e,t,n);break;case"♔":case"♚":o=this.calculateKingAttackingDestinations(e,t,n);break;case"♔":case"♚":o=this.calculateKingAttackingDestinations(e,t,n);break;case"♙":case"♟":o=this.calculatePawnAttackingDestinations(e,t,n)}return o}},isKingInCheckIfMove:{value:function(e){const{squares:t}=this.move(e),n=this.isWhitepiece(e.piece),o=this.getKingPosition(t,n);return!!o&&this.isKingInCheck(t,n?"♔":"♚",o)}},isKingInCheck:{value:function(e,t,n){if("♔"!=t&&"♚"!=t)throw"The input piece is not a king";const o="♔"==t?this.getPiecesOfSameColor(e,!1):this.getPiecesOfSameColor(e,!0);let i=new Array;for(let t of o){const n=this.calculateAttackedDestinations(e,t.piece,t.pos);i=i.concat(n)}return!!i.find(e=>e.equals(n))}},getPiecesOfSameColor:{value:function(e,t){const n=new Array;for(let o=0;o<e.length;o++)for(let r=0;r<e[o].length;r++)(t?this.isWhitepiece(e[o][r]):this.isBlackpiece(e[o][r]))&&n.push({piece:e[o][r],pos:new i({row:o,col:r})});return n}},getKingPosition:{value:function(e,t){for(let n=0;n<e.length;n++)for(let o=0;o<e[n].length;o++)if(t?"♔"==e[n][o]:"♚"==e[n][o])return new i({row:n,col:o});return null}},isPositionOccupiedBypieceSameColor:{value:function(e,t,n){const o=this.isWhitepiece(t);return!(!o||!this.isWhitepiece(e[n.row][n.col]))||!(o||!this.isBlackpiece(e[n.row][n.col]))}},isPositionOccupiedBypieceOtherColor:{value:function(e,t,n){const o=this.isWhitepiece(t);return!(!o||!this.isBlackpiece(e[n.row][n.col]))||!(o||!this.isWhitepiece(e[n.row][n.col]))}},getCurrentSnapshot:{value:function(){return this.state.history[this.state.stepNumber]}},move:{value:function(e){const t=e.piece,n=e.fromPos,o=e.toPos,a=this.getCurrentSnapshot().squares,s=a.map(e=>e.slice()),c=new Array;if(this.isCastlingMove(t,n,o)){let e,l;c.push(new r({piece:t,fromPos:new i({row:n.row,col:n.col}),toPos:new i({row:o.row,col:o.col})})),s[o.row][o.col]=t,s[n.row][n.col]=null,"♔"==t?o.col<n.col?(e=new i({row:0,col:0}),l=new i({row:0,col:3})):(e=new i({row:0,col:7}),l=new i({row:0,col:5})):o.col<n.col?(e=new i({row:7,col:0}),l=new i({row:7,col:3})):(e=new i({row:7,col:7}),l=new i({row:7,col:5})),c.push(new r({piece:a[e.row][e.col],fromPos:e,toPos:l})),s[l.row][l.col]=a[e.row][e.col],s[e.row][e.col]=null}else{const t=a[n.row][n.col];s[o.row][o.col]=t,s[n.row][n.col]=null,c.push(e)}return{squares:s,moves:c}}},isCastlingMove:{value:function(e,t,n){const o=this.getCurrentSnapshot();return"♔"==e&&!o.whiteKingMoved&&2==Math.abs(n.col-t.col)||"♚"==e&&!o.blackKingMoved&&2==Math.abs(n.col-t.col)}},isLeftWhiteRook:{value:function(e,t){return"♖"==e&&0==t.row&&0==t.col}},isWhitepiece:{value:function(e){switch(e){case"♙":case"♖":case"♘":case"♗":case"♕":case"♔":return!0;default:return!1}}},isBlackpiece:{value:function(e){switch(e){case"♟":case"♜":case"♞":case"♝":case"♛":case"♚":return!0;default:return!1}}},render:{value:function(){const e=this.state.history,t=e[this.state.stepNumber],n=this.calculateWinner(t.squares),o=e.map((e,t)=>{const n=t?"Go to move #"+t:"Go to game start",o={textAlign:"center",verticalAlign:"middle",padding:"5px",position:"relative"};return a.createElement(a.Fragment,null,a.createElement("tr",null,a.createElement("td",Object.assign({style:o}),t),a.createElement("td",Object.assign({style:o}),e.lastMoves.join(",")),a.createElement("td",Object.assign({style:o}),a.createElement("button",Object.assign({style:{backgroundColor:"green",border:"none",color:"white",padding:"4px",textAlign:"center",textDecoration:"none",display:"inline-block"},onClick:()=>this.goToStep(t)}),n))))});let i;i=n?"Winner: "+n:"Next player: "+(this.state.whiteIsNext?"White":"Black");return a.createElement("div",Object.assign({style:{display:"flex",flexDirection:"row"}}),a.createElement("div",Object.assign({style:{width:"60vw",height:"60vw"}}),a.createElement(w,Object.assign({squares:t.squares,pickedSquare:this.state.pickedSquare,validDestinations:this.state.validDestinations,onClick:e=>this.handleClick(e)}))),a.createElement("div",Object.assign({style:{marginTop:"20px",marginLeft:"20px",width:"40vw",fontSize:"1.5vw"}}),a.createElement("div",null,i),a.createElement("p",null),a.createElement("table",Object.assign({style:{width:"100%"}}),a.createElement("tr",null,a.createElement("th",Object.assign({style:{width:"10%"}}),"Step"),a.createElement("th",Object.assign({style:{width:"45%"}}),"Move"),a.createElement("th",Object.assign({style:{width:"45%"}}),"Action")),o)))}}},{},(function(e,t){return new N4Class({name:"Game",origin:"chess-react",fqn:"components/Game/Game",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4Method({name:"constructor",isStatic:!1,jsFunction:e.constructor,annotations:[]}),new N4Method({name:"handleClick",isStatic:!1,jsFunction:e.handleClick,annotations:[]}),new N4Method({name:"goToStep",isStatic:!1,jsFunction:e.goToStep,annotations:[]}),new N4Method({name:"getAllPiecesSameColor",isStatic:!1,jsFunction:e.getAllPiecesSameColor,annotations:[]}),new N4Method({name:"forAll",isStatic:!1,jsFunction:e.forAll,annotations:[]}),new N4Method({name:"calculateWinner",isStatic:!1,jsFunction:e.calculateWinner,annotations:[]}),new N4Method({name:"calculateValidDestinations",isStatic:!1,jsFunction:e.calculateValidDestinations,annotations:[]}),new N4Method({name:"isValidMove",isStatic:!1,jsFunction:e.isValidMove,annotations:[]}),new N4Method({name:"isInsideBoard",isStatic:!1,jsFunction:e.isInsideBoard,annotations:[]}),new N4Method({name:"calculateKnightAttackingDestinations",isStatic:!1,jsFunction:e.calculateKnightAttackingDestinations,annotations:[]}),new N4Method({name:"calculateRookAttackingDestinations",isStatic:!1,jsFunction:e.calculateRookAttackingDestinations,annotations:[]}),new N4Method({name:"calculateBishopAttackingDestinations",isStatic:!1,jsFunction:e.calculateBishopAttackingDestinations,annotations:[]}),new N4Method({name:"calculateQueenAttackingDestinations",isStatic:!1,jsFunction:e.calculateQueenAttackingDestinations,annotations:[]}),new N4Method({name:"calculateKingAttackingDestinations",isStatic:!1,jsFunction:e.calculateKingAttackingDestinations,annotations:[]}),new N4Method({name:"calculatePawnAttackingDestinations",isStatic:!1,jsFunction:e.calculatePawnAttackingDestinations,annotations:[]}),new N4Method({name:"calculateAttackedDestinations",isStatic:!1,jsFunction:e.calculateAttackedDestinations,annotations:[]}),new N4Method({name:"isKingInCheckIfMove",isStatic:!1,jsFunction:e.isKingInCheckIfMove,annotations:[]}),new N4Method({name:"isKingInCheck",isStatic:!1,jsFunction:e.isKingInCheck,annotations:[]}),new N4Method({name:"getPiecesOfSameColor",isStatic:!1,jsFunction:e.getPiecesOfSameColor,annotations:[]}),new N4Method({name:"getKingPosition",isStatic:!1,jsFunction:e.getKingPosition,annotations:[]}),new N4Method({name:"isPositionOccupiedBypieceSameColor",isStatic:!1,jsFunction:e.isPositionOccupiedBypieceSameColor,annotations:[]}),new N4Method({name:"isPositionOccupiedBypieceOtherColor",isStatic:!1,jsFunction:e.isPositionOccupiedBypieceOtherColor,annotations:[]}),new N4Method({name:"getCurrentSnapshot",isStatic:!1,jsFunction:e.getCurrentSnapshot,annotations:[]}),new N4Method({name:"move",isStatic:!1,jsFunction:e.move,annotations:[]}),new N4Method({name:"isCastlingMove",isStatic:!1,jsFunction:e.isCastlingMove,annotations:[]}),new N4Method({name:"isLeftWhiteRook",isStatic:!1,jsFunction:e.isLeftWhiteRook,annotations:[]}),new N4Method({name:"isWhitepiece",isStatic:!1,jsFunction:e.isWhitepiece,annotations:[]}),new N4Method({name:"isBlackpiece",isStatic:!1,jsFunction:e.isBlackpiece,annotations:[]}),new N4Method({name:"render",isStatic:!1,jsFunction:e.render,annotations:[]})],consumedMembers:[],annotations:[]})})),n(3).render(o.createElement(g,null),document.getElementById("chessAppMountPoint"))}]);
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiUmVhY3RcIiIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJSZWFjdERPTVwiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9uNGpzLXJ1bnRpbWUvc3JjLWdlbi9ydC9ONEJ1aWx0SW5DbGFzc2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9uNGpzLXJ1bnRpbWUvc3JjLWdlbi9ydC9ONFJ1bnRpbWVCb290c3RyYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMtZ2VuL0Nvb3JkaW5hdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjLWdlbi9Nb3ZlLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vY29tcG9uZW50cy9Db29yZGluYXRlU3F1YXJlLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vY29tcG9uZW50cy9TcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjLWdlbi9jb21wb25lbnRzL0JvYXJkLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vY29tcG9uZW50cy9HYW1lLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vbWFpbi5qcyJdLCJuYW1lcyI6WyJwYXJlbnRIb3RVcGRhdGVDYWxsYmFjayIsIndpbmRvdyIsImNodW5rSWQiLCJtb3JlTW9kdWxlcyIsImhvdEF2YWlsYWJsZUZpbGVzTWFwIiwiaG90UmVxdWVzdGVkRmlsZXNNYXAiLCJtb2R1bGVJZCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImhvdFVwZGF0ZSIsImhvdFdhaXRpbmdGaWxlcyIsImhvdENodW5rc0xvYWRpbmciLCJob3RVcGRhdGVEb3dubG9hZGVkIiwiaG90QWRkVXBkYXRlQ2h1bmsiLCJob3RDdXJyZW50Q2hpbGRNb2R1bGUiLCJob3RBcHBseU9uVXBkYXRlIiwiaG90Q3VycmVudEhhc2giLCJob3RSZXF1ZXN0VGltZW91dCIsImhvdEN1cnJlbnRNb2R1bGVEYXRhIiwiaG90Q3VycmVudFBhcmVudHMiLCJob3RDdXJyZW50UGFyZW50c1RlbXAiLCJob3RDcmVhdGVSZXF1aXJlIiwibWUiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsImZuIiwicmVxdWVzdCIsImhvdCIsImFjdGl2ZSIsInBhcmVudHMiLCJpbmRleE9mIiwicHVzaCIsImNoaWxkcmVuIiwiY29uc29sZSIsIndhcm4iLCJPYmplY3RGYWN0b3J5IiwibmFtZSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJnZXQiLCJzZXQiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZSIsImhvdFN0YXR1cyIsImhvdFNldFN0YXR1cyIsInRoZW4iLCJmaW5pc2hDaHVua0xvYWRpbmciLCJlcnIiLCJob3RXYWl0aW5nRmlsZXNNYXAiLCJob3RFbnN1cmVVcGRhdGVDaHVuayIsInQiLCJtb2RlIiwiaG90Q3JlYXRlTW9kdWxlIiwiX2FjY2VwdGVkRGVwZW5kZW5jaWVzIiwiX2RlY2xpbmVkRGVwZW5kZW5jaWVzIiwiX3NlbGZBY2NlcHRlZCIsIl9zZWxmRGVjbGluZWQiLCJfZGlzcG9zZUhhbmRsZXJzIiwiX21haW4iLCJhY2NlcHQiLCJkZXAiLCJjYWxsYmFjayIsInVuZGVmaW5lZCIsImkiLCJsZW5ndGgiLCJkZWNsaW5lIiwiZGlzcG9zZSIsImFkZERpc3Bvc2VIYW5kbGVyIiwicmVtb3ZlRGlzcG9zZUhhbmRsZXIiLCJpZHgiLCJzcGxpY2UiLCJjaGVjayIsImhvdENoZWNrIiwiYXBwbHkiLCJob3RBcHBseSIsInN0YXR1cyIsImwiLCJob3RTdGF0dXNIYW5kbGVycyIsImFkZFN0YXR1c0hhbmRsZXIiLCJyZW1vdmVTdGF0dXNIYW5kbGVyIiwiZGF0YSIsIm5ld1N0YXR1cyIsImhvdERlZmVycmVkIiwiaG90VXBkYXRlTmV3SGFzaCIsInRvTW9kdWxlSWQiLCJpZCIsIkVycm9yIiwicmVxdWVzdFRpbWVvdXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIlhNTEh0dHBSZXF1ZXN0IiwicmVxdWVzdFBhdGgiLCJwIiwib3BlbiIsInRpbWVvdXQiLCJzZW5kIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInVwZGF0ZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsImMiLCJoIiwicHJvbWlzZSIsInNjcmlwdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNoYXJzZXQiLCJzcmMiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJob3REb3dubG9hZFVwZGF0ZUNodW5rIiwiZGVmZXJyZWQiLCJyZXN1bHQiLCJvdXRkYXRlZE1vZHVsZXMiLCJvcHRpb25zIiwiY2IiLCJqIiwibW9kdWxlIiwiZ2V0QWZmZWN0ZWRTdHVmZiIsInVwZGF0ZU1vZHVsZUlkIiwib3V0ZGF0ZWREZXBlbmRlbmNpZXMiLCJxdWV1ZSIsIm1hcCIsImNoYWluIiwicXVldWVJdGVtIiwicG9wIiwidHlwZSIsInBhcmVudElkIiwicGFyZW50IiwiY29uY2F0IiwiYWRkQWxsVG9TZXQiLCJhIiwiYiIsIml0ZW0iLCJhcHBsaWVkVXBkYXRlIiwid2FyblVuZXhwZWN0ZWRSZXF1aXJlIiwiYWJvcnRFcnJvciIsImRvQXBwbHkiLCJkb0Rpc3Bvc2UiLCJjaGFpbkluZm8iLCJqb2luIiwib25EZWNsaW5lZCIsImlnbm9yZURlY2xpbmVkIiwib25VbmFjY2VwdGVkIiwiaWdub3JlVW5hY2NlcHRlZCIsIm9uQWNjZXB0ZWQiLCJvbkRpc3Bvc2VkIiwib3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzIiwiZXJyb3JIYW5kbGVyIiwia2V5cyIsImZvckVhY2giLCJpbnN0YWxsZWRDaHVua3MiLCJob3REaXNwb3NlQ2h1bmsiLCJkZXBlbmRlbmN5IiwibW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMiLCJzbGljZSIsImRpc3Bvc2VIYW5kbGVycyIsImNoaWxkIiwibW9kdWxlcyIsImVycm9yIiwiY2FsbGJhY2tzIiwib25FcnJvcmVkIiwiZGVwZW5kZW5jeUlkIiwiaWdub3JlRXJyb3JlZCIsImVycjIiLCJvcmlnaW5hbEVycm9yIiwiZXhwb3J0cyIsIm0iLCJkIiwiZ2V0dGVyIiwibyIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJzIiwiUmVhY3QiLCJnIiwidGhpcyIsIkZ1bmN0aW9uIiwiUmVhY3RET00iLCJnbG9iYWwiLCIkbWFrZU40QnVpbHRJbkNsYXNzIiwiY3RvciIsInN1cGVyQ3RvciIsImluc3RhbmNlTWV0aG9kcyIsInN0YXRpY01ldGhvZHMiLCJzZXRQcm90b3R5cGVPZiIsInN0YWNrIiwiJF9fbjRlcnIiLCJtZXNzYWdlIiwibjR0eXBlIiwiZGVmaW5lUHJvcGVydGllcyIsInByb3RvIiwiJGNyZWF0ZU1ldGFJbmZvIiwibWV0YUNsYXNzIiwib3duZWRNZW1iZXJzIiwiTjRNZXRob2QiLCJjb25zdHJ1Y3RvciIsIm40bWVtYmVyIiwiZGVmaW5lVGFyZ2V0UHJvcCIsImFubm90YXRpb24iLCJzZXRUYXJnZXRPZkFubm90YXRpb25zIiwidGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJONE9iamVjdCIsInNwZWMiLCJONEVsZW1lbnQiLCJvcmlnaW4iLCJONE5hbWVkRWxlbWVudCIsIk40VHlwZSIsImZxbiIsIk40Q2xhc3NpZmllciIsIm40c3VwZXJUeXBlIiwiYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzIiwiY29uc3VtZWRNZW1iZXJzIiwiTjRDbGFzcyIsIk40SW50ZXJmYWNlIiwiTjRNZW1iZXIiLCJvd25lciIsImlzU3RhdGljIiwianNGdW5jdGlvbiIsIk40RGF0YUZpZWxkIiwiTjRBY2Nlc3NvciIsIk40RW51bVR5cGUiLCJONEVudW0iLCJONFN0cmluZ0Jhc2VkRW51bVR5cGUiLCJONFN0cmluZ0Jhc2VkRW51bSIsIk40QW5ub3RhdGlvbiIsImRldGFpbHMiLCJONFByb3ZpZGVyIiwiTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yIiwiTWlncmF0aW9uQ29udHJvbGxlciIsIk1pZ3JhdGlvbkNvbnRleHQiLCJoYXNBbm5vdGF0aW9uIiwic29tZSIsImFueUFubm90YXRpb24iLCJhbGxBbm5vdGF0aW9ucyIsImZpbHRlciIsImlzQ2xhc3MiLCJpc0ludGVyZmFjZSIsImlzRW51bSIsIm9mIiwibjRvYmplY3QiLCJtZW1iZXJzIiwiY29uc3VtZWQiLCJpbmhlcml0ZWQiLCJfc3RhdGljIiwiYXJyIiwidG1wIiwibWVtYmVyc1dpdGhBbm5vdGF0aW9uIiwiZGF0YUZpZWxkcyIsImRhdGFGaWVsZHNXaXRoQW5ub3RhdGlvbiIsIm1ldGhvZHMiLCJtZXRob2RzV2l0aEFubm90YXRpb24iLCJpc0dldHRlciIsImlzU2V0dGVyIiwidG9TdHJpbmciLCJmaW5kTGl0ZXJhbEJ5TmFtZSIsImxpdGVyYWxzIiwiZmluZExpdGVyYWxCeVZhbHVlIiwiY29uc3VtZWRNZW1lYmVycyIsImZyZWV6ZSIsInNlbGYiLCJzeW1IYXNJbnN0YW5jZSIsImhhc0luc3RhbmNlIiwiQXJyYXlTbGljZSIsIkFycmF5Iiwibm9vcCIsImRlZmluZU40VHlwZUdldHRlciIsImluc3RhbmNlIiwiZmFjdG9yeUZuIiwibWl4aW5EZWZhdWx0TWV0aG9kIiwibWV0aG9kIiwibWl4aW5EZWZhdWx0TWV0aG9kcyIsImlmYWNlIiwiJG1ha2VDbGFzcyIsImltcGxlbWVudGVkSW50ZXJmYWNlcyIsIm40dHlwZUZuIiwiJG1ha2VJbnRlcmZhY2UiLCJ0aW50ZXJmYWNlIiwiZXh0ZW5kZWRJbnRlcmZhY2VzRm4iLCIkZXh0ZW5kcyIsIiRtZXRob2RzIiwiaW1wbGVtZW50ZWRJbnRlcmZhY2UiLCIkaW5pdEZpZWxkc0Zyb21JbnRlcmZhY2VzIiwiaW50ZXJmYWNlcyIsIm1peGluRXhjbHVzaW9uIiwiaWZjIiwiZGVmcyIsIiRmaWVsZERlZmF1bHRzIiwiZmllbGROYW1lIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIiRtYWtlRW51bSIsImVudW1lcmF0aW9uIiwiaW5kZXgiLCJtZW1iZXIiLCJ2YWx1ZXMiLCJsaXRlcmFsIiwiJHNsaWNlVG9BcnJheUZvckRlc3RydWN0IiwibWF4IiwiaXNBcnJheSIsIml0ZXJhdG9yIiwiZW50cnkiLCJyZXQiLCJpdCIsIm5leHQiLCJkb25lIiwiVHlwZUVycm9yIiwiJHNwYXduIiwiZ2VuIiwiZXhlYyIsInN0ZXAiLCJ2IiwicmVzIiwiZXhjIiwidGhyb3dyIiwiJG40cHJvbWlzaWZ5RnVuY3Rpb24iLCJjYkJhc2VkRm4iLCJhcmdzIiwibXVsdGlTdWNjZXNzVmFsdWVzIiwibm9FcnJvclZhbHVlIiwicmVzdWx0MCIsInJlc3VsdDEiLCJhcmd1bWVudHMiLCIkbjRwcm9taXNpZnlNZXRob2QiLCJyZWNlaXZlciIsIm1ldGhvZE5hbWUiLCJmb3IiLCJxIiwidSIsInciLCJ4IiwieSIsInoiLCJhYSIsIkEiLCJCIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQyIsImlzTW91bnRlZCIsImVucXVldWVGb3JjZVVwZGF0ZSIsImVucXVldWVSZXBsYWNlU3RhdGUiLCJlbnF1ZXVlU2V0U3RhdGUiLCJEIiwiRSIsInByb3BzIiwiY29udGV4dCIsInJlZnMiLCJ1cGRhdGVyIiwiRiIsIkciLCJpc1JlYWN0Q29tcG9uZW50Iiwic2V0U3RhdGUiLCJmb3JjZVVwZGF0ZSIsIkgiLCJpc1B1cmVSZWFjdENvbXBvbmVudCIsIkkiLCJjdXJyZW50IiwiSiIsIksiLCJMIiwicmVmIiwiX19zZWxmIiwiX19zb3VyY2UiLCJNIiwiZiIsImsiLCJkZWZhdWx0UHJvcHMiLCIkJHR5cGVvZiIsIl9vd25lciIsIk4iLCJPIiwiUCIsIlEiLCJrZXlQcmVmaXgiLCJmdW5jIiwiY291bnQiLCJSIiwiVSIsIlMiLCJUIiwicmVwbGFjZSIsImVzY2FwZSIsImNhIiwiZGEiLCJWIiwiYmEiLCJXIiwiWCIsIkNoaWxkcmVuIiwidG9BcnJheSIsIm9ubHkiLCJjcmVhdGVSZWYiLCJDb21wb25lbnQiLCJQdXJlQ29tcG9uZW50IiwiY3JlYXRlQ29udGV4dCIsIl9jYWxjdWxhdGVDaGFuZ2VkQml0cyIsIl9jdXJyZW50VmFsdWUiLCJfY3VycmVudFZhbHVlMiIsIl90aHJlYWRDb3VudCIsIlByb3ZpZGVyIiwiQ29uc3VtZXIiLCJfY29udGV4dCIsImZvcndhcmRSZWYiLCJyZW5kZXIiLCJsYXp5IiwiX2N0b3IiLCJfc3RhdHVzIiwiX3Jlc3VsdCIsIm1lbW8iLCJjb21wYXJlIiwidXNlQ2FsbGJhY2siLCJ1c2VDb250ZXh0IiwidXNlRWZmZWN0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZURlYnVnVmFsdWUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVkdWNlciIsInVzZVJlZiIsInVzZVN0YXRlIiwiRnJhZ21lbnQiLCJQcm9maWxlciIsIlN0cmljdE1vZGUiLCJTdXNwZW5zZSIsImNsb25lRWxlbWVudCIsImNyZWF0ZUZhY3RvcnkiLCJpc1ZhbGlkRWxlbWVudCIsInZlcnNpb24iLCJfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCIsIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCJSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyIsInN1c3BlbnNlIiwiUmVhY3RDdXJyZW50T3duZXIiLCJJc1NvbWVSZW5kZXJlckFjdGluZyIsImFzc2lnbiIsIlkiLCJkZWZhdWx0IiwiWiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BJc0VudW1lcmFibGUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvT2JqZWN0IiwidmFsIiwidGVzdDEiLCJTdHJpbmciLCJ0ZXN0MiIsImZyb21DaGFyQ29kZSIsInRlc3QzIiwic3BsaXQiLCJsZXR0ZXIiLCJzaG91bGRVc2VOYXRpdmUiLCJzb3VyY2UiLCJmcm9tIiwic3ltYm9scyIsInRvIiwiQ29vcmRpbmF0ZSIsIiRzcGVjT2JqIiwicm93IiwiY29sIiwiTW92ZSIsInBpZWNlIiwiZnJvbVBvcyIsInRvUG9zIiwiZXF1YWxzIiwib3RoZXIiLCJnZXRCb2FyZENvb3JkaW5hdGVSZXByZXNlbnRhdGlvbiIsImNoYXJDb2RlQXQiLCJ3cml0YWJsZSIsImluc3RhbmNlUHJvdG8iLCJzdGF0aWNQcm90byIsIkNvb3JkaW5hdGVTcXVhcmVQcm9wcyIsImxhYmVsIiwibGFiZWxTcXVhcmVTdHlsZXMiLCJmb250U2l6ZSIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJqdXN0aWZ5Q29udGVudCIsImFsaWduSXRlbXMiLCJ3aWR0aCIsImhlaWdodCIsIkxhYmVsU3F1YXJlIiwic3R5bGUiLCJTcXVhcmVQcm9wcyIsImlzV2hpdGUiLCJvbkNsaWNrIiwiaXNQaWNrZWQiLCJpc1ZhbGlkRGVzdGluYXRpb24iLCJib2FyZFNxdWFyZVN0eWxlcyIsIlNxdWFyZSIsImJhY2tncm91bmRDb2xvciIsIkJvYXJkUHJvcHMiLCJzcXVhcmVzIiwicGlja2VkU3F1YXJlIiwidmFsaWREZXN0aW5hdGlvbnMiLCJib2FyZFN0eWxlcyIsImZsZXhXcmFwIiwic3F1YXJlU3R5bGVzIiwiQm9hcmQiLCJyZW5kZXJTcXVhcmUiLCJwb3MiLCJyZW5kZXJDb29yZGluYXRlU3F1YXJlIiwicmVuZGVyU3F1YXJlcyIsImlzV2hpdGVJbml0aWFsIiwiaXNQb3RlbnRpYWxEZXN0aW5hdGlvbiIsImZpbmRJbmRleCIsInBvdGVudGlhbERlc3QiLCJTbmFwc2hvdCIsImxhc3RNb3ZlcyIsIndoaXRlS2luZ01vdmVkIiwibGVmdFdoaXRlUm9va01vdmVkIiwicmlnaHRXaGl0ZVJvb2tNb3ZlZCIsImJsYWNrS2luZ01vdmVkIiwibGVmdEJsYWNrUm9va01vdmVkIiwicmlnaHRCbGFja1Jvb2tNb3ZlZCIsIkdhbWVTdGF0ZSIsIkdhbWUiLCJzdGF0ZSIsImhpc3RvcnkiLCJzdGVwTnVtYmVyIiwid2hpdGVJc05leHQiLCJoYW5kbGVDbGljayIsInNlbGVjdGVkUG9zIiwiY2FsY3VsYXRlV2lubmVyIiwiY3VycmVudHBpZWNlIiwiaXNXaGl0ZXBpZWNlIiwiaXNCbGFja3BpZWNlIiwiY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMiLCJhdHRlbXB0ZWRNb3ZlIiwiaXNWYWxpZE1vdmUiLCJuZXdTcXVhcmVzIiwibW92ZXMiLCJtb3ZlIiwiZ29Ub1N0ZXAiLCJnZXRBbGxQaWVjZXNTYW1lQ29sb3IiLCJmb3JBbGwiLCJwcmVkaWNhdGUiLCJyZWR1Y2UiLCJhY2MiLCJlbGVtIiwiYWxsUGllY2VzIiwiY2FsY3VsYXRlQXR0YWNrZWREZXN0aW5hdGlvbnMiLCJuZXh0UG9zIiwibmV4dE5leHRQb3MiLCJpc0tpbmdJbkNoZWNrSWZNb3ZlIiwiaXNJbnNpZGVCb2FyZCIsImNvb3JkIiwiY2FsY3VsYXRlS25pZ2h0QXR0YWNraW5nRGVzdGluYXRpb25zIiwiZGVsdGEiLCJpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yIiwiY2FsY3VsYXRlUm9va0F0dGFja2luZ0Rlc3RpbmF0aW9ucyIsImRlbHRhcyIsIm5ld1BvcyIsImlzUG9zaXRpb25PY2N1cGllZEJ5cGllY2VPdGhlckNvbG9yIiwiY2FsY3VsYXRlQmlzaG9wQXR0YWNraW5nRGVzdGluYXRpb25zIiwiY2FsY3VsYXRlUXVlZW5BdHRhY2tpbmdEZXN0aW5hdGlvbnMiLCJjYWxjdWxhdGVLaW5nQXR0YWNraW5nRGVzdGluYXRpb25zIiwiY2FsY3VsYXRlUGF3bkF0dGFja2luZ0Rlc3RpbmF0aW9ucyIsImRjIiwiYXR0YWNrUG9zIiwiY2hhbmdlZFNxdWFyZXMiLCJraW5nUG9zIiwiZ2V0S2luZ1Bvc2l0aW9uIiwiaXNLaW5nSW5DaGVjayIsImtpbmciLCJvcHBvbmVudHBpZWNlcyIsImdldFBpZWNlc09mU2FtZUNvbG9yIiwib3Bwb25lbnRwaWVjZSIsImZpbmQiLCJ3aGl0ZSIsImdldEN1cnJlbnRTbmFwc2hvdCIsInJvd3MiLCJpc0Nhc3RsaW5nTW92ZSIsInJvb2tGcm9tUG9zIiwicm9va1RvUG9zIiwiY3VycmVudFNuYXBzaG90IiwiTWF0aCIsImFicyIsImlzTGVmdFdoaXRlUm9vayIsIndpbm5lciIsInNuYXBzaG90IiwiYWN0aW9uTGFiZWwiLCJ0YWJsZUNlbGxTdHlsZXMiLCJ2ZXJ0aWNhbEFsaWduIiwicGFkZGluZyIsInBvc2l0aW9uIiwiYm9yZGVyIiwiY29sb3IiLCJ0ZXh0RGVjb3JhdGlvbiIsImZsZXhEaXJlY3Rpb24iLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwiZ2V0RWxlbWVudEJ5SWQiXSwibWFwcGluZ3MiOiJhQUdFLElBQUlBLEVBQTBCQyxPQUF5QixpQkFDdkRBLE9BQXlCLGlCQUN6QixTQUFrQ0MsRUFBU0MsSUFnUjNDLFNBQTJCRCxFQUFTQyxHQUNuQyxJQUFLQyxFQUFxQkYsS0FBYUcsRUFBcUJILEdBQzNELE9BRUQsSUFBSyxJQUFJSSxLQURURCxFQUFxQkgsSUFBVyxFQUNYQyxFQUNoQkksT0FBT0MsVUFBVUMsZUFBZUMsS0FBS1AsRUFBYUcsS0FDckRLLEVBQVVMLEdBQVlILEVBQVlHLElBR1YsS0FBcEJNLEdBQThDLElBQXJCQyxHQUM5QkMsSUF6UkRDLENBQWtCYixFQUFTQyxHQUN2QkgsR0FBeUJBLEVBQXdCRSxFQUFTQyxJQXVEL0QsSUFLSWEsRUFMQUMsR0FBbUIsRUFFbkJDLEVBQWlCLHVCQUNqQkMsRUFBb0IsSUFDcEJDLEVBQXVCLEdBR3ZCQyxFQUFvQixHQUVwQkMsRUFBd0IsR0FHNUIsU0FBU0MsRUFBaUJqQixHQUN6QixJQUFJa0IsRUFBS0MsRUFBaUJuQixHQUMxQixJQUFLa0IsRUFBSSxPQUFPRSxFQUNoQixJQUFJQyxFQUFLLFNBQVNDLEdBc0JqQixPQXJCSUosRUFBR0ssSUFBSUMsUUFDTkwsRUFBaUJHLElBQ3lDLElBQXpESCxFQUFpQkcsR0FBU0csUUFBUUMsUUFBUTFCLElB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QVUsRUFDVkMsV0FBWXlQLEVBQThCLGVBQzFDMVEsWUFBYSxLQUVkLElBQUlQLFNBQVMsQ0FDWjVLLEtBQU0sa0JBQ05tTSxVQUFVLEVBQ1ZDLFdBQVl5UCxFQUErQixnQkFDM0MxUSxZQUFhLEtBRWQsSUFBSVAsU0FBUyxDQUNaNUssS0FBTSxlQUNObU0sVUFBVSxFQUNWQyxXQUFZeVAsRUFBNEIsYUFDeEMxUSxZQUFhLEtBRWQsSUFBSVAsU0FBUyxDQUNaNUssS0FBTSxlQUNObU0sVUFBVSxFQUNWQyxXQUFZeVAsRUFBNEIsYUFDeEMxUSxZQUFhLEtBRWQsSUFBSVAsU0FBUyxDQUNaNUssS0FBTSxTQUNObU0sVUFBVSxFQUNWQyxXQUFZeVAsRUFBc0IsT0FDbEMxUSxZQUFhLE1BR2ZXLGdCQUFpQixHQUNqQlgsWUFBYSxRLEtDbHFDZixPQUFnQixnQkFBb0J5VCxFQUFNLE1BQU9wYSxTQUFTZ2YsZUFBZSIsImZpbGUiOiJjaGVzcy1hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHRmdW5jdGlvbiBob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCkge1xuIFx0XHRkZWxldGUgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuIFx0fVxuIFx0dmFyIHBhcmVudEhvdFVwZGF0ZUNhbGxiYWNrID0gd2luZG93W1wid2VicGFja0hvdFVwZGF0ZVwiXTtcbiBcdHdpbmRvd1tcIndlYnBhY2tIb3RVcGRhdGVcIl0gPSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdGZ1bmN0aW9uIHdlYnBhY2tIb3RVcGRhdGVDYWxsYmFjayhjaHVua0lkLCBtb3JlTW9kdWxlcykge1xuIFx0XHRob3RBZGRVcGRhdGVDaHVuayhjaHVua0lkLCBtb3JlTW9kdWxlcyk7XG4gXHRcdGlmIChwYXJlbnRIb3RVcGRhdGVDYWxsYmFjaykgcGFyZW50SG90VXBkYXRlQ2FsbGJhY2soY2h1bmtJZCwgbW9yZU1vZHVsZXMpO1xuIFx0fSA7XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKSB7XG4gXHRcdHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuIFx0XHRzY3JpcHQuY2hhcnNldCA9IFwidXRmLThcIjtcbiBcdFx0c2NyaXB0LnNyYyA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIFwiXCIgKyBjaHVua0lkICsgXCIuXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNcIjtcbiBcdFx0aWYgKG51bGwpIHNjcmlwdC5jcm9zc09yaWdpbiA9IG51bGw7XG4gXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3REb3dubG9hZE1hbmlmZXN0KHJlcXVlc3RUaW1lb3V0KSB7XG4gXHRcdHJlcXVlc3RUaW1lb3V0ID0gcmVxdWVzdFRpbWVvdXQgfHwgMTAwMDA7XG4gXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiBcdFx0XHRpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gXHRcdFx0XHRyZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIk5vIGJyb3dzZXIgc3VwcG9ydFwiKSk7XG4gXHRcdFx0fVxuIFx0XHRcdHRyeSB7XG4gXHRcdFx0XHR2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuIFx0XHRcdFx0dmFyIHJlcXVlc3RQYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgXCJcIiArIGhvdEN1cnJlbnRIYXNoICsgXCIuaG90LXVwZGF0ZS5qc29uXCI7XG4gXHRcdFx0XHRyZXF1ZXN0Lm9wZW4oXCJHRVRcIiwgcmVxdWVzdFBhdGgsIHRydWUpO1xuIFx0XHRcdFx0cmVxdWVzdC50aW1lb3V0ID0gcmVxdWVzdFRpbWVvdXQ7XG4gXHRcdFx0XHRyZXF1ZXN0LnNlbmQobnVsbCk7XG4gXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4gXHRcdFx0XHRyZXR1cm4gcmVqZWN0KGVycik7XG4gXHRcdFx0fVxuIFx0XHRcdHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gXHRcdFx0XHRpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG4gXHRcdFx0XHRpZiAocmVxdWVzdC5zdGF0dXMgPT09IDApIHtcbiBcdFx0XHRcdFx0Ly8gdGltZW91dFxuIFx0XHRcdFx0XHRyZWplY3QoXG4gXHRcdFx0XHRcdFx0bmV3IEVycm9yKFwiTWFuaWZlc3QgcmVxdWVzdCB0byBcIiArIHJlcXVlc3RQYXRoICsgXCIgdGltZWQgb3V0LlwiKVxuIFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0fSBlbHNlIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gNDA0KSB7XG4gXHRcdFx0XHRcdC8vIG5vIHVwZGF0ZSBhdmFpbGFibGVcbiBcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuIFx0XHRcdFx0fSBlbHNlIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwICYmIHJlcXVlc3Quc3RhdHVzICE9PSAzMDQpIHtcbiBcdFx0XHRcdFx0Ly8gb3RoZXIgZmFpbHVyZVxuIFx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiTWFuaWZlc3QgcmVxdWVzdCB0byBcIiArIHJlcXVlc3RQYXRoICsgXCIgZmFpbGVkLlwiKSk7XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHQvLyBzdWNjZXNzXG4gXHRcdFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRcdFx0dmFyIHVwZGF0ZSA9IEpTT04ucGFyc2UocmVxdWVzdC5yZXNwb25zZVRleHQpO1xuIFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG4gXHRcdFx0XHRcdFx0cmVqZWN0KGUpO1xuIFx0XHRcdFx0XHRcdHJldHVybjtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRyZXNvbHZlKHVwZGF0ZSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdHZhciBob3RBcHBseU9uVXBkYXRlID0gdHJ1ZTtcbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0dmFyIGhvdEN1cnJlbnRIYXNoID0gXCJjMWRhMzBjMjQ0NjI0YWIxMzRmNlwiO1xuIFx0dmFyIGhvdFJlcXVlc3RUaW1lb3V0ID0gMTAwMDA7XG4gXHR2YXIgaG90Q3VycmVudE1vZHVsZURhdGEgPSB7fTtcbiBcdHZhciBob3RDdXJyZW50Q2hpbGRNb2R1bGU7XG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdHZhciBob3RDdXJyZW50UGFyZW50cyA9IFtdO1xuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHR2YXIgaG90Q3VycmVudFBhcmVudHNUZW1wID0gW107XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90Q3JlYXRlUmVxdWlyZShtb2R1bGVJZCkge1xuIFx0XHR2YXIgbWUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0aWYgKCFtZSkgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX187XG4gXHRcdHZhciBmbiA9IGZ1bmN0aW9uKHJlcXVlc3QpIHtcbiBcdFx0XHRpZiAobWUuaG90LmFjdGl2ZSkge1xuIFx0XHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0pIHtcbiBcdFx0XHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKSA9PT0gLTEpIHtcbiBcdFx0XHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdLnBhcmVudHMucHVzaChtb2R1bGVJZCk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGhvdEN1cnJlbnRQYXJlbnRzID0gW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0aG90Q3VycmVudENoaWxkTW9kdWxlID0gcmVxdWVzdDtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChtZS5jaGlsZHJlbi5pbmRleE9mKHJlcXVlc3QpID09PSAtMSkge1xuIFx0XHRcdFx0XHRtZS5jaGlsZHJlbi5wdXNoKHJlcXVlc3QpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRjb25zb2xlLndhcm4oXG4gXHRcdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICtcbiBcdFx0XHRcdFx0XHRyZXF1ZXN0ICtcbiBcdFx0XHRcdFx0XHRcIikgZnJvbSBkaXNwb3NlZCBtb2R1bGUgXCIgK1xuIFx0XHRcdFx0XHRcdG1vZHVsZUlkXG4gXHRcdFx0XHQpO1xuIFx0XHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbXTtcbiBcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18ocmVxdWVzdCk7XG4gXHRcdH07XG4gXHRcdHZhciBPYmplY3RGYWN0b3J5ID0gZnVuY3Rpb24gT2JqZWN0RmFjdG9yeShuYW1lKSB7XG4gXHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuIFx0XHRcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfX1tuYW1lXTtcbiBcdFx0XHRcdH0sXG4gXHRcdFx0XHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gXHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX19bbmFtZV0gPSB2YWx1ZTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9O1xuIFx0XHR9O1xuIFx0XHRmb3IgKHZhciBuYW1lIGluIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX193ZWJwYWNrX3JlcXVpcmVfXywgbmFtZSkgJiZcbiBcdFx0XHRcdG5hbWUgIT09IFwiZVwiICYmXG4gXHRcdFx0XHRuYW1lICE9PSBcInRcIlxuIFx0XHRcdCkge1xuIFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBuYW1lLCBPYmplY3RGYWN0b3J5KG5hbWUpKTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0Zm4uZSA9IGZ1bmN0aW9uKGNodW5rSWQpIHtcbiBcdFx0XHRpZiAoaG90U3RhdHVzID09PSBcInJlYWR5XCIpIGhvdFNldFN0YXR1cyhcInByZXBhcmVcIik7XG4gXHRcdFx0aG90Q2h1bmtzTG9hZGluZysrO1xuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmUoY2h1bmtJZCkudGhlbihmaW5pc2hDaHVua0xvYWRpbmcsIGZ1bmN0aW9uKGVycikge1xuIFx0XHRcdFx0ZmluaXNoQ2h1bmtMb2FkaW5nKCk7XG4gXHRcdFx0XHR0aHJvdyBlcnI7XG4gXHRcdFx0fSk7XG5cbiBcdFx0XHRmdW5jdGlvbiBmaW5pc2hDaHVua0xvYWRpbmcoKSB7XG4gXHRcdFx0XHRob3RDaHVua3NMb2FkaW5nLS07XG4gXHRcdFx0XHRpZiAoaG90U3RhdHVzID09PSBcInByZXBhcmVcIikge1xuIFx0XHRcdFx0XHRpZiAoIWhvdFdhaXRpbmdGaWxlc01hcFtjaHVua0lkXSkge1xuIFx0XHRcdFx0XHRcdGhvdEVuc3VyZVVwZGF0ZUNodW5rKGNodW5rSWQpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmIChob3RDaHVua3NMb2FkaW5nID09PSAwICYmIGhvdFdhaXRpbmdGaWxlcyA9PT0gMCkge1xuIFx0XHRcdFx0XHRcdGhvdFVwZGF0ZURvd25sb2FkZWQoKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fTtcbiBcdFx0Zm4udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdFx0aWYgKG1vZGUgJiAxKSB2YWx1ZSA9IGZuKHZhbHVlKTtcbiBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy50KHZhbHVlLCBtb2RlICYgfjEpO1xuIFx0XHR9O1xuIFx0XHRyZXR1cm4gZm47XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSB7XG4gXHRcdHZhciBob3QgPSB7XG4gXHRcdFx0Ly8gcHJpdmF0ZSBzdHVmZlxuIFx0XHRcdF9hY2NlcHRlZERlcGVuZGVuY2llczoge30sXG4gXHRcdFx0X2RlY2xpbmVkRGVwZW5kZW5jaWVzOiB7fSxcbiBcdFx0XHRfc2VsZkFjY2VwdGVkOiBmYWxzZSxcbiBcdFx0XHRfc2VsZkRlY2xpbmVkOiBmYWxzZSxcbiBcdFx0XHRfZGlzcG9zZUhhbmRsZXJzOiBbXSxcbiBcdFx0XHRfbWFpbjogaG90Q3VycmVudENoaWxkTW9kdWxlICE9PSBtb2R1bGVJZCxcblxuIFx0XHRcdC8vIE1vZHVsZSBBUElcbiBcdFx0XHRhY3RpdmU6IHRydWUsXG4gXHRcdFx0YWNjZXB0OiBmdW5jdGlvbihkZXAsIGNhbGxiYWNrKSB7XG4gXHRcdFx0XHRpZiAoZGVwID09PSB1bmRlZmluZWQpIGhvdC5fc2VsZkFjY2VwdGVkID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwiZnVuY3Rpb25cIikgaG90Ll9zZWxmQWNjZXB0ZWQgPSBkZXA7XG4gXHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgZGVwID09PSBcIm9iamVjdFwiKVxuIFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKylcbiBcdFx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcFtpXV0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuIFx0XHRcdFx0ZWxzZSBob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuIFx0XHRcdH0sXG4gXHRcdFx0ZGVjbGluZTogZnVuY3Rpb24oZGVwKSB7XG4gXHRcdFx0XHRpZiAoZGVwID09PSB1bmRlZmluZWQpIGhvdC5fc2VsZkRlY2xpbmVkID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpXG4gXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxuIFx0XHRcdFx0XHRcdGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IHRydWU7XG4gXHRcdFx0XHRlbHNlIGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwXSA9IHRydWU7XG4gXHRcdFx0fSxcbiBcdFx0XHRkaXNwb3NlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuIFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG4gXHRcdFx0fSxcbiBcdFx0XHRhZGREaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiBcdFx0XHRcdGhvdC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goY2FsbGJhY2spO1xuIFx0XHRcdH0sXG4gXHRcdFx0cmVtb3ZlRGlzcG9zZUhhbmRsZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gXHRcdFx0XHR2YXIgaWR4ID0gaG90Ll9kaXNwb3NlSGFuZGxlcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gXHRcdFx0XHRpZiAoaWR4ID49IDApIGhvdC5fZGlzcG9zZUhhbmRsZXJzLnNwbGljZShpZHgsIDEpO1xuIFx0XHRcdH0sXG5cbiBcdFx0XHQvLyBNYW5hZ2VtZW50IEFQSVxuIFx0XHRcdGNoZWNrOiBob3RDaGVjayxcbiBcdFx0XHRhcHBseTogaG90QXBwbHksXG4gXHRcdFx0c3RhdHVzOiBmdW5jdGlvbihsKSB7XG4gXHRcdFx0XHRpZiAoIWwpIHJldHVybiBob3RTdGF0dXM7XG4gXHRcdFx0XHRob3RTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuIFx0XHRcdH0sXG4gXHRcdFx0YWRkU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkge1xuIFx0XHRcdFx0aG90U3RhdHVzSGFuZGxlcnMucHVzaChsKTtcbiBcdFx0XHR9LFxuIFx0XHRcdHJlbW92ZVN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uKGwpIHtcbiBcdFx0XHRcdHZhciBpZHggPSBob3RTdGF0dXNIYW5kbGVycy5pbmRleE9mKGwpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBob3RTdGF0dXNIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHR9LFxuXG4gXHRcdFx0Ly9pbmhlcml0IGZyb20gcHJldmlvdXMgZGlzcG9zZSBjYWxsXG4gXHRcdFx0ZGF0YTogaG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdXG4gXHRcdH07XG4gXHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IHVuZGVmaW5lZDtcbiBcdFx0cmV0dXJuIGhvdDtcbiBcdH1cblxuIFx0dmFyIGhvdFN0YXR1c0hhbmRsZXJzID0gW107XG4gXHR2YXIgaG90U3RhdHVzID0gXCJpZGxlXCI7XG5cbiBcdGZ1bmN0aW9uIGhvdFNldFN0YXR1cyhuZXdTdGF0dXMpIHtcbiBcdFx0aG90U3RhdHVzID0gbmV3U3RhdHVzO1xuIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGhvdFN0YXR1c0hhbmRsZXJzLmxlbmd0aDsgaSsrKVxuIFx0XHRcdGhvdFN0YXR1c0hhbmRsZXJzW2ldLmNhbGwobnVsbCwgbmV3U3RhdHVzKTtcbiBcdH1cblxuIFx0Ly8gd2hpbGUgZG93bmxvYWRpbmdcbiBcdHZhciBob3RXYWl0aW5nRmlsZXMgPSAwO1xuIFx0dmFyIGhvdENodW5rc0xvYWRpbmcgPSAwO1xuIFx0dmFyIGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0dmFyIGhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307XG4gXHR2YXIgaG90QXZhaWxhYmxlRmlsZXNNYXAgPSB7fTtcbiBcdHZhciBob3REZWZlcnJlZDtcblxuIFx0Ly8gVGhlIHVwZGF0ZSBpbmZvXG4gXHR2YXIgaG90VXBkYXRlLCBob3RVcGRhdGVOZXdIYXNoO1xuXG4gXHRmdW5jdGlvbiB0b01vZHVsZUlkKGlkKSB7XG4gXHRcdHZhciBpc051bWJlciA9ICtpZCArIFwiXCIgPT09IGlkO1xuIFx0XHRyZXR1cm4gaXNOdW1iZXIgPyAraWQgOiBpZDtcbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90Q2hlY2soYXBwbHkpIHtcbiBcdFx0aWYgKGhvdFN0YXR1cyAhPT0gXCJpZGxlXCIpIHtcbiBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjaGVjaygpIGlzIG9ubHkgYWxsb3dlZCBpbiBpZGxlIHN0YXR1c1wiKTtcbiBcdFx0fVxuIFx0XHRob3RBcHBseU9uVXBkYXRlID0gYXBwbHk7XG4gXHRcdGhvdFNldFN0YXR1cyhcImNoZWNrXCIpO1xuIFx0XHRyZXR1cm4gaG90RG93bmxvYWRNYW5pZmVzdChob3RSZXF1ZXN0VGltZW91dCkudGhlbihmdW5jdGlvbih1cGRhdGUpIHtcbiBcdFx0XHRpZiAoIXVwZGF0ZSkge1xuIFx0XHRcdFx0aG90U2V0U3RhdHVzKFwiaWRsZVwiKTtcbiBcdFx0XHRcdHJldHVybiBudWxsO1xuIFx0XHRcdH1cbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdEF2YWlsYWJsZUZpbGVzTWFwID0gdXBkYXRlLmM7XG4gXHRcdFx0aG90VXBkYXRlTmV3SGFzaCA9IHVwZGF0ZS5oO1xuXG4gXHRcdFx0aG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbiBcdFx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuIFx0XHRcdFx0aG90RGVmZXJyZWQgPSB7XG4gXHRcdFx0XHRcdHJlc29sdmU6IHJlc29sdmUsXG4gXHRcdFx0XHRcdHJlamVjdDogcmVqZWN0XG4gXHRcdFx0XHR9O1xuIFx0XHRcdH0pO1xuIFx0XHRcdGhvdFVwZGF0ZSA9IHt9O1xuIFx0XHRcdHZhciBjaHVua0lkID0gMDtcbiBcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9uZS1ibG9ja3NcbiBcdFx0XHR7XG4gXHRcdFx0XHQvKmdsb2JhbHMgY2h1bmtJZCAqL1xuIFx0XHRcdFx0aG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChcbiBcdFx0XHRcdGhvdFN0YXR1cyA9PT0gXCJwcmVwYXJlXCIgJiZcbiBcdFx0XHRcdGhvdENodW5rc0xvYWRpbmcgPT09IDAgJiZcbiBcdFx0XHRcdGhvdFdhaXRpbmdGaWxlcyA9PT0gMFxuIFx0XHRcdCkge1xuIFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gcHJvbWlzZTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90QWRkVXBkYXRlQ2h1bmsoY2h1bmtJZCwgbW9yZU1vZHVsZXMpIHtcbiBcdFx0aWYgKCFob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSB8fCAhaG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0pXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IGZhbHNlO1xuIFx0XHRmb3IgKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0aG90VXBkYXRlW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKC0taG90V2FpdGluZ0ZpbGVzID09PSAwICYmIGhvdENodW5rc0xvYWRpbmcgPT09IDApIHtcbiBcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCkge1xuIFx0XHRpZiAoIWhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdKSB7XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IHRydWU7XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzKys7XG4gXHRcdFx0aG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RVcGRhdGVEb3dubG9hZGVkKCkge1xuIFx0XHRob3RTZXRTdGF0dXMoXCJyZWFkeVwiKTtcbiBcdFx0dmFyIGRlZmVycmVkID0gaG90RGVmZXJyZWQ7XG4gXHRcdGhvdERlZmVycmVkID0gbnVsbDtcbiBcdFx0aWYgKCFkZWZlcnJlZCkgcmV0dXJuO1xuIFx0XHRpZiAoaG90QXBwbHlPblVwZGF0ZSkge1xuIFx0XHRcdC8vIFdyYXAgZGVmZXJyZWQgb2JqZWN0IGluIFByb21pc2UgdG8gbWFyayBpdCBhcyBhIHdlbGwtaGFuZGxlZCBQcm9taXNlIHRvXG4gXHRcdFx0Ly8gYXZvaWQgdHJpZ2dlcmluZyB1bmNhdWdodCBleGNlcHRpb24gd2FybmluZyBpbiBDaHJvbWUuXG4gXHRcdFx0Ly8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ2NTY2NlxuIFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG4gXHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcbiBcdFx0XHRcdFx0cmV0dXJuIGhvdEFwcGx5KGhvdEFwcGx5T25VcGRhdGUpO1xuIFx0XHRcdFx0fSlcbiBcdFx0XHRcdC50aGVuKFxuIFx0XHRcdFx0XHRmdW5jdGlvbihyZXN1bHQpIHtcbiBcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gXHRcdFx0XHRcdH0sXG4gXHRcdFx0XHRcdGZ1bmN0aW9uKGVycikge1xuIFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdChlcnIpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcbiBcdFx0XHRmb3IgKHZhciBpZCBpbiBob3RVcGRhdGUpIHtcbiBcdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaG90VXBkYXRlLCBpZCkpIHtcbiBcdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzLnB1c2godG9Nb2R1bGVJZChpZCkpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKG91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90QXBwbHkob3B0aW9ucykge1xuIFx0XHRpZiAoaG90U3RhdHVzICE9PSBcInJlYWR5XCIpXG4gXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYXBwbHkoKSBpcyBvbmx5IGFsbG93ZWQgaW4gcmVhZHkgc3RhdHVzXCIpO1xuIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuIFx0XHR2YXIgY2I7XG4gXHRcdHZhciBpO1xuIFx0XHR2YXIgajtcbiBcdFx0dmFyIG1vZHVsZTtcbiBcdFx0dmFyIG1vZHVsZUlkO1xuXG4gXHRcdGZ1bmN0aW9uIGdldEFmZmVjdGVkU3R1ZmYodXBkYXRlTW9kdWxlSWQpIHtcbiBcdFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW3VwZGF0ZU1vZHVsZUlkXTtcbiBcdFx0XHR2YXIgb3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSB7fTtcblxuIFx0XHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5tYXAoZnVuY3Rpb24oaWQpIHtcbiBcdFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHRcdGNoYWluOiBbaWRdLFxuIFx0XHRcdFx0XHRpZDogaWRcbiBcdFx0XHRcdH07XG4gXHRcdFx0fSk7XG4gXHRcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiBcdFx0XHRcdHZhciBxdWV1ZUl0ZW0gPSBxdWV1ZS5wb3AoKTtcbiBcdFx0XHRcdHZhciBtb2R1bGVJZCA9IHF1ZXVlSXRlbS5pZDtcbiBcdFx0XHRcdHZhciBjaGFpbiA9IHF1ZXVlSXRlbS5jaGFpbjtcbiBcdFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdFx0aWYgKCFtb2R1bGUgfHwgbW9kdWxlLmhvdC5fc2VsZkFjY2VwdGVkKSBjb250aW51ZTtcbiBcdFx0XHRcdGlmIChtb2R1bGUuaG90Ll9zZWxmRGVjbGluZWQpIHtcbiBcdFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtZGVjbGluZWRcIixcbiBcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4sXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG4gXHRcdFx0XHRcdH07XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAobW9kdWxlLmhvdC5fbWFpbikge1xuIFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdHR5cGU6IFwidW5hY2NlcHRlZFwiLFxuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcbiBcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbW9kdWxlLnBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0dmFyIHBhcmVudElkID0gbW9kdWxlLnBhcmVudHNbaV07XG4gXHRcdFx0XHRcdHZhciBwYXJlbnQgPSBpbnN0YWxsZWRNb2R1bGVzW3BhcmVudElkXTtcbiBcdFx0XHRcdFx0aWYgKCFwYXJlbnQpIGNvbnRpbnVlO1xuIFx0XHRcdFx0XHRpZiAocGFyZW50LmhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGVjbGluZWRcIixcbiBcdFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG4gXHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRwYXJlbnRJZDogcGFyZW50SWRcbiBcdFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmIChvdXRkYXRlZE1vZHVsZXMuaW5kZXhPZihwYXJlbnRJZCkgIT09IC0xKSBjb250aW51ZTtcbiBcdFx0XHRcdFx0aWYgKHBhcmVudC5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkge1xuIFx0XHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdKVxuIFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdID0gW107XG4gXHRcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdLCBbbW9kdWxlSWRdKTtcbiBcdFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRkZWxldGUgb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdO1xuIFx0XHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaChwYXJlbnRJZCk7XG4gXHRcdFx0XHRcdHF1ZXVlLnB1c2goe1xuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG4gXHRcdFx0XHRcdFx0aWQ6IHBhcmVudElkXG4gXHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cblxuIFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHR0eXBlOiBcImFjY2VwdGVkXCIsXG4gXHRcdFx0XHRtb2R1bGVJZDogdXBkYXRlTW9kdWxlSWQsXG4gXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXM6IG91dGRhdGVkTW9kdWxlcyxcbiBcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzOiBvdXRkYXRlZERlcGVuZGVuY2llc1xuIFx0XHRcdH07XG4gXHRcdH1cblxuIFx0XHRmdW5jdGlvbiBhZGRBbGxUb1NldChhLCBiKSB7XG4gXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHR2YXIgaXRlbSA9IGJbaV07XG4gXHRcdFx0XHRpZiAoYS5pbmRleE9mKGl0ZW0pID09PSAtMSkgYS5wdXNoKGl0ZW0pO1xuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIGF0IGJlZ2luIGFsbCB1cGRhdGVzIG1vZHVsZXMgYXJlIG91dGRhdGVkXG4gXHRcdC8vIHRoZSBcIm91dGRhdGVkXCIgc3RhdHVzIGNhbiBwcm9wYWdhdGUgdG8gcGFyZW50cyBpZiB0aGV5IGRvbid0IGFjY2VwdCB0aGUgY2hpbGRyZW5cbiBcdFx0dmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307XG4gXHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcbiBcdFx0dmFyIGFwcGxpZWRVcGRhdGUgPSB7fTtcblxuIFx0XHR2YXIgd2FyblVuZXhwZWN0ZWRSZXF1aXJlID0gZnVuY3Rpb24gd2FyblVuZXhwZWN0ZWRSZXF1aXJlKCkge1xuIFx0XHRcdGNvbnNvbGUud2FybihcbiBcdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICsgcmVzdWx0Lm1vZHVsZUlkICsgXCIpIHRvIGRpc3Bvc2VkIG1vZHVsZVwiXG4gXHRcdFx0KTtcbiBcdFx0fTtcblxuIFx0XHRmb3IgKHZhciBpZCBpbiBob3RVcGRhdGUpIHtcbiBcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhvdFVwZGF0ZSwgaWQpKSB7XG4gXHRcdFx0XHRtb2R1bGVJZCA9IHRvTW9kdWxlSWQoaWQpO1xuIFx0XHRcdFx0LyoqIEB0eXBlIHtUT0RPfSAqL1xuIFx0XHRcdFx0dmFyIHJlc3VsdDtcbiBcdFx0XHRcdGlmIChob3RVcGRhdGVbaWRdKSB7XG4gXHRcdFx0XHRcdHJlc3VsdCA9IGdldEFmZmVjdGVkU3R1ZmYobW9kdWxlSWQpO1xuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0cmVzdWx0ID0ge1xuIFx0XHRcdFx0XHRcdHR5cGU6IFwiZGlzcG9zZWRcIixcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogaWRcbiBcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdC8qKiBAdHlwZSB7RXJyb3J8ZmFsc2V9ICovXG4gXHRcdFx0XHR2YXIgYWJvcnRFcnJvciA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGRvQXBwbHkgPSBmYWxzZTtcbiBcdFx0XHRcdHZhciBkb0Rpc3Bvc2UgPSBmYWxzZTtcbiBcdFx0XHRcdHZhciBjaGFpbkluZm8gPSBcIlwiO1xuIFx0XHRcdFx0aWYgKHJlc3VsdC5jaGFpbikge1xuIFx0XHRcdFx0XHRjaGFpbkluZm8gPSBcIlxcblVwZGF0ZSBwcm9wYWdhdGlvbjogXCIgKyByZXN1bHQuY2hhaW4uam9pbihcIiAtPiBcIik7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRzd2l0Y2ggKHJlc3VsdC50eXBlKSB7XG4gXHRcdFx0XHRcdGNhc2UgXCJzZWxmLWRlY2xpbmVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EZWNsaW5lZCkgb3B0aW9ucy5vbkRlY2xpbmVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcbiBcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2Ugb2Ygc2VsZiBkZWNsaW5lOiBcIiArXG4gXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm1vZHVsZUlkICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRjaGFpbkluZm9cbiBcdFx0XHRcdFx0XHRcdCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJkZWNsaW5lZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGVjbGluZWQpIG9wdGlvbnMub25EZWNsaW5lZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcbiBcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4gXHRcdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIG9mIGRlY2xpbmVkIGRlcGVuZGVuY3k6IFwiICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQubW9kdWxlSWQgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdFwiIGluIFwiICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQucGFyZW50SWQgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcInVuYWNjZXB0ZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vblVuYWNjZXB0ZWQpIG9wdGlvbnMub25VbmFjY2VwdGVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZVVuYWNjZXB0ZWQpXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuIFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBcIiArIG1vZHVsZUlkICsgXCIgaXMgbm90IGFjY2VwdGVkXCIgKyBjaGFpbkluZm9cbiBcdFx0XHRcdFx0XHRcdCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJhY2NlcHRlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uQWNjZXB0ZWQpIG9wdGlvbnMub25BY2NlcHRlZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGRvQXBwbHkgPSB0cnVlO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwiZGlzcG9zZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRpc3Bvc2VkKSBvcHRpb25zLm9uRGlzcG9zZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRkb0Rpc3Bvc2UgPSB0cnVlO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRkZWZhdWx0OlxuIFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhjZXB0aW9uIHR5cGUgXCIgKyByZXN1bHQudHlwZSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAoYWJvcnRFcnJvcikge1xuIFx0XHRcdFx0XHRob3RTZXRTdGF0dXMoXCJhYm9ydFwiKTtcbiBcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGFib3J0RXJyb3IpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKGRvQXBwbHkpIHtcbiBcdFx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSBob3RVcGRhdGVbbW9kdWxlSWRdO1xuIFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIHJlc3VsdC5vdXRkYXRlZE1vZHVsZXMpO1xuIFx0XHRcdFx0XHRmb3IgKG1vZHVsZUlkIGluIHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdFx0XHRcdGlmIChcbiBcdFx0XHRcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiBcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzLFxuIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZFxuIFx0XHRcdFx0XHRcdFx0KVxuIFx0XHRcdFx0XHRcdCkge1xuIFx0XHRcdFx0XHRcdFx0aWYgKCFvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pXG4gXHRcdFx0XHRcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSA9IFtdO1xuIFx0XHRcdFx0XHRcdFx0YWRkQWxsVG9TZXQoXG4gXHRcdFx0XHRcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSxcbiBcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXVxuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChkb0Rpc3Bvc2UpIHtcbiBcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWRNb2R1bGVzLCBbcmVzdWx0Lm1vZHVsZUlkXSk7XG4gXHRcdFx0XHRcdGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdID0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIFN0b3JlIHNlbGYgYWNjZXB0ZWQgb3V0ZGF0ZWQgbW9kdWxlcyB0byByZXF1aXJlIHRoZW0gbGF0ZXIgYnkgdGhlIG1vZHVsZSBzeXN0ZW1cbiBcdFx0dmFyIG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcyA9IFtdO1xuIFx0XHRmb3IgKGkgPSAwOyBpIDwgb3V0ZGF0ZWRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0bW9kdWxlSWQgPSBvdXRkYXRlZE1vZHVsZXNbaV07XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0aW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gJiZcbiBcdFx0XHRcdGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmhvdC5fc2VsZkFjY2VwdGVkICYmXG4gXHRcdFx0XHQvLyByZW1vdmVkIHNlbGYtYWNjZXB0ZWQgbW9kdWxlcyBzaG91bGQgbm90IGJlIHJlcXVpcmVkXG4gXHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSAhPT0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMucHVzaCh7XG4gXHRcdFx0XHRcdG1vZHVsZTogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdGVycm9ySGFuZGxlcjogaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uaG90Ll9zZWxmQWNjZXB0ZWRcbiBcdFx0XHRcdH0pO1xuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIE5vdyBpbiBcImRpc3Bvc2VcIiBwaGFzZVxuIFx0XHRob3RTZXRTdGF0dXMoXCJkaXNwb3NlXCIpO1xuIFx0XHRPYmplY3Qua2V5cyhob3RBdmFpbGFibGVGaWxlc01hcCkuZm9yRWFjaChmdW5jdGlvbihjaHVua0lkKSB7XG4gXHRcdFx0aWYgKGhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdID09PSBmYWxzZSkge1xuIFx0XHRcdFx0aG90RGlzcG9zZUNodW5rKGNodW5rSWQpO1xuIFx0XHRcdH1cbiBcdFx0fSk7XG5cbiBcdFx0dmFyIGlkeDtcbiBcdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLnNsaWNlKCk7XG4gXHRcdHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gXHRcdFx0bW9kdWxlSWQgPSBxdWV1ZS5wb3AoKTtcbiBcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRpZiAoIW1vZHVsZSkgY29udGludWU7XG5cbiBcdFx0XHR2YXIgZGF0YSA9IHt9O1xuXG4gXHRcdFx0Ly8gQ2FsbCBkaXNwb3NlIGhhbmRsZXJzXG4gXHRcdFx0dmFyIGRpc3Bvc2VIYW5kbGVycyA9IG1vZHVsZS5ob3QuX2Rpc3Bvc2VIYW5kbGVycztcbiBcdFx0XHRmb3IgKGogPSAwOyBqIDwgZGlzcG9zZUhhbmRsZXJzLmxlbmd0aDsgaisrKSB7XG4gXHRcdFx0XHRjYiA9IGRpc3Bvc2VIYW5kbGVyc1tqXTtcbiBcdFx0XHRcdGNiKGRhdGEpO1xuIFx0XHRcdH1cbiBcdFx0XHRob3RDdXJyZW50TW9kdWxlRGF0YVttb2R1bGVJZF0gPSBkYXRhO1xuXG4gXHRcdFx0Ly8gZGlzYWJsZSBtb2R1bGUgKHRoaXMgZGlzYWJsZXMgcmVxdWlyZXMgZnJvbSB0aGlzIG1vZHVsZSlcbiBcdFx0XHRtb2R1bGUuaG90LmFjdGl2ZSA9IGZhbHNlO1xuXG4gXHRcdFx0Ly8gcmVtb3ZlIG1vZHVsZSBmcm9tIGNhY2hlXG4gXHRcdFx0ZGVsZXRlIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuXG4gXHRcdFx0Ly8gd2hlbiBkaXNwb3NpbmcgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIGRpc3Bvc2UgaGFuZGxlclxuIFx0XHRcdGRlbGV0ZSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG5cbiBcdFx0XHQvLyByZW1vdmUgXCJwYXJlbnRzXCIgcmVmZXJlbmNlcyBmcm9tIGFsbCBjaGlsZHJlblxuIFx0XHRcdGZvciAoaiA9IDA7IGogPCBtb2R1bGUuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcbiBcdFx0XHRcdHZhciBjaGlsZCA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlLmNoaWxkcmVuW2pdXTtcbiBcdFx0XHRcdGlmICghY2hpbGQpIGNvbnRpbnVlO1xuIFx0XHRcdFx0aWR4ID0gY2hpbGQucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKTtcbiBcdFx0XHRcdGlmIChpZHggPj0gMCkge1xuIFx0XHRcdFx0XHRjaGlsZC5wYXJlbnRzLnNwbGljZShpZHgsIDEpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIHJlbW92ZSBvdXRkYXRlZCBkZXBlbmRlbmN5IGZyb20gbW9kdWxlIGNoaWxkcmVuXG4gXHRcdHZhciBkZXBlbmRlbmN5O1xuIFx0XHR2YXIgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXM7XG4gXHRcdGZvciAobW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3V0ZGF0ZWREZXBlbmRlbmNpZXMsIG1vZHVsZUlkKVxuIFx0XHRcdCkge1xuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRpZiAobW9kdWxlKSB7XG4gXHRcdFx0XHRcdG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzID0gb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdO1xuIFx0XHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMubGVuZ3RoOyBqKyspIHtcbiBcdFx0XHRcdFx0XHRkZXBlbmRlbmN5ID0gbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbal07XG4gXHRcdFx0XHRcdFx0aWR4ID0gbW9kdWxlLmNoaWxkcmVuLmluZGV4T2YoZGVwZW5kZW5jeSk7XG4gXHRcdFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBtb2R1bGUuY2hpbGRyZW4uc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBOb3cgaW4gXCJhcHBseVwiIHBoYXNlXG4gXHRcdGhvdFNldFN0YXR1cyhcImFwcGx5XCIpO1xuXG4gXHRcdGhvdEN1cnJlbnRIYXNoID0gaG90VXBkYXRlTmV3SGFzaDtcblxuIFx0XHQvLyBpbnNlcnQgbmV3IGNvZGVcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBhcHBsaWVkVXBkYXRlKSB7XG4gXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcHBsaWVkVXBkYXRlLCBtb2R1bGVJZCkpIHtcbiBcdFx0XHRcdG1vZHVsZXNbbW9kdWxlSWRdID0gYXBwbGllZFVwZGF0ZVttb2R1bGVJZF07XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gY2FsbCBhY2NlcHQgaGFuZGxlcnNcbiBcdFx0dmFyIGVycm9yID0gbnVsbDtcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBvdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmIChtb2R1bGUpIHtcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRcdHZhciBjYWxsYmFja3MgPSBbXTtcbiBcdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHRcdFx0ZGVwZW5kZW5jeSA9IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2ldO1xuIFx0XHRcdFx0XHRcdGNiID0gbW9kdWxlLmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwZW5kZW5jeV07XG4gXHRcdFx0XHRcdFx0aWYgKGNiKSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tzLmluZGV4T2YoY2IpICE9PSAtMSkgY29udGludWU7XG4gXHRcdFx0XHRcdFx0XHRjYWxsYmFja3MucHVzaChjYik7XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0XHRjYiA9IGNhbGxiYWNrc1tpXTtcbiBcdFx0XHRcdFx0XHR0cnkge1xuIFx0XHRcdFx0XHRcdFx0Y2IobW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMpO1xuIFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuIFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImFjY2VwdC1lcnJvcmVkXCIsXG4gXHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3lJZDogbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV0sXG4gXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuIFx0XHRcdFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuIFx0XHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIExvYWQgc2VsZiBhY2NlcHRlZCBtb2R1bGVzXG4gXHRcdGZvciAoaSA9IDA7IGkgPCBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHR2YXIgaXRlbSA9IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlc1tpXTtcbiBcdFx0XHRtb2R1bGVJZCA9IGl0ZW0ubW9kdWxlO1xuIFx0XHRcdGhvdEN1cnJlbnRQYXJlbnRzID0gW21vZHVsZUlkXTtcbiBcdFx0XHR0cnkge1xuIFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCk7XG4gXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4gXHRcdFx0XHRpZiAodHlwZW9mIGl0ZW0uZXJyb3JIYW5kbGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiBcdFx0XHRcdFx0dHJ5IHtcbiBcdFx0XHRcdFx0XHRpdGVtLmVycm9ySGFuZGxlcihlcnIpO1xuIFx0XHRcdFx0XHR9IGNhdGNoIChlcnIyKSB7XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG4gXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1hY2NlcHQtZXJyb3ItaGFuZGxlci1lcnJvcmVkXCIsXG4gXHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVycjIsXG4gXHRcdFx0XHRcdFx0XHRcdG9yaWdpbmFsRXJyb3I6IGVyclxuIFx0XHRcdFx0XHRcdFx0fSk7XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAoIWVycm9yKSBlcnJvciA9IGVycjI7XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG4gXHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0XHRcdGVycm9yOiBlcnJcbiBcdFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gaGFuZGxlIGVycm9ycyBpbiBhY2NlcHQgaGFuZGxlcnMgYW5kIHNlbGYgYWNjZXB0ZWQgbW9kdWxlIGxvYWRcbiBcdFx0aWYgKGVycm9yKSB7XG4gXHRcdFx0aG90U2V0U3RhdHVzKFwiZmFpbFwiKTtcbiBcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuIFx0XHR9XG5cbiBcdFx0aG90U2V0U3RhdHVzKFwiaWRsZVwiKTtcbiBcdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiBcdFx0XHRyZXNvbHZlKG91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdH0pO1xuIFx0fVxuXG4gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRob3Q6IGhvdENyZWF0ZU1vZHVsZShtb2R1bGVJZCksXG4gXHRcdFx0cGFyZW50czogKGhvdEN1cnJlbnRQYXJlbnRzVGVtcCA9IGhvdEN1cnJlbnRQYXJlbnRzLCBob3RDdXJyZW50UGFyZW50cyA9IFtdLCBob3RDdXJyZW50UGFyZW50c1RlbXApLFxuIFx0XHRcdGNoaWxkcmVuOiBbXVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBob3RDcmVhdGVSZXF1aXJlKG1vZHVsZUlkKSk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJkaXN0L1wiO1xuXG4gXHQvLyBfX3dlYnBhY2tfaGFzaF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSBmdW5jdGlvbigpIHsgcmV0dXJuIGhvdEN1cnJlbnRIYXNoOyB9O1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIGhvdENyZWF0ZVJlcXVpcmUoOCkoX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gOCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IFJlYWN0OyIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTTsiLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE3IE51bWJlckZvdXIgQUcuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG4gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcbiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG4gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuICpcbiAqIENvbnRyaWJ1dG9yczpcbiAqICAgTnVtYmVyRm91ciBBRyAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuICovXG4vKmVzbGludC1kaXNhYmxlIG5vLXByb3RvLCBuZXctY2FwICovXG4vKmdsb2JhbCAkbWFrZUNsYXNzICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAvKipcbiAgICAgKiBTaW1pbGFyIHRvIHtAbGluayAkbWFrZUNsYXNzfSB3aXRob3V0IG40dHlwZSBtZXRhIGNsYXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGN0b3IgLSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gc3VwZXJDdG9yIC0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIG9mIHRoZSBzdXBlciBjbGFzc1xuICAgICAqIEBwYXJhbSBpbnN0YW5jZU1ldGhvZHMgLSBBbiBvYmplY3QgaG9sZGluZyB0aGUgbWV0aG9kcyBmb3IgdGhlIGNsYXNzIGluc3RhbmNlIGFuZCBtaXhlZCBpbiBtZXRob2RzXG4gICAgICogQHBhcmFtIHN0YXRpY01ldGhvZHMgLSBBbiBvYmplY3QgaG9sZGluZyB0aGUgZGVzY3JpcHRvcnMgZm9yIHRoZSBjbGFzcyBzdGF0aWMgbWV0aG9kc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uICRtYWtlTjRCdWlsdEluQ2xhc3MoY3Rvciwgc3VwZXJDdG9yLCBpbnN0YW5jZU1ldGhvZHMsIHN0YXRpY01ldGhvZHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdXBlckN0b3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGN0b3IsIHN1cGVyQ3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VwZXJDdG9yID09PSBFcnJvcikge1xuICAgICAgICAgICAgaW5zdGFuY2VNZXRob2RzLnN0YWNrID0geyBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy4kX19uNGVyci5zdGFjazsgfSB9O1xuICAgICAgICAgICAgaW5zdGFuY2VNZXRob2RzLm1lc3NhZ2UgPSB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLiRfX240ZXJyLm1lc3NhZ2U7IH0gfTtcbiAgICAgICAgICAgIGluc3RhbmNlTWV0aG9kcy5uYW1lID0geyBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY3Rvci5uNHR5cGUubmFtZTsgfSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY3Rvciwgc3RhdGljTWV0aG9kcyk7XG5cbiAgICAgICAgdmFyIHByb3RvID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCBpbnN0YW5jZU1ldGhvZHMpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIFwiY29uc3RydWN0b3JcIiwgeyB2YWx1ZTogY3RvciB9KTtcblxuICAgICAgICBjdG9yLnByb3RvdHlwZSA9IHByb3RvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBtZXRhIGluZm9ybWF0aW9uIGZvciBONEJ1aWx0SW5DbGFzc2VzIGkuZS5cbiAgICAgKiAtIGJpbmQgbjRUeXBlIHByb3BlcnR5IG9mIGN0b3IgdG8gaW5zdGFuY2Ugb2YgKG1ldGEpIE40Q2xhc3NcbiAgICAgKiAtIGJpbmQgb3duZWRNZW1iZXJzIChtZXRhKSBONENsYXNzIHRvIHRoYXQgaW5zdGFuY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdG9yIC0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIG9mIE40QnVpbHRJbkNsYXNzIHRoYXQgd2lsbCBiZSBlbnJpY2hlZCB3aXRoIG1ldGEgaW5mb1xuICAgICAqIEBwYXJhbSBuNHR5cGUgLSBUaGUgaW5zdGFuY2Ugb2YgTjRDbGFzcyBkZXNjcmliaW5nIG1ldGEgaW5mbyBvZiBnaXZlbiBONEJ1aWx0SW5DbGFzcyAoc3BlY2lmaWVkIGJ5IHByb3ZpZGVkIGN0b3IpXG4gICAgICovXG4gICAgZnVuY3Rpb24gJGNyZWF0ZU1ldGFJbmZvKGN0b3IsIG1ldGFDbGFzcykge1xuICAgICAgICAvL2JpbmQgbjRUeXBlIHByb3BlcnR5IG1ldGFjbGFzcyBpbnN0YW5jZVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3RvciwgJ240dHlwZScsIHtcbiAgICAgICAgICAgIHZhbHVlOiBtZXRhQ2xhc3MsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICAvL2JpbmQgbWV0YSBjbGFzcyBpbnN0YW5jZSBtZW1iZXJzIHRvIHRoYXQgaW5zdGFuY2UgKHNvIG1lbWJlci0+b3duZXIpXG4gICAgICAgIC8vKG93bmVyLT5tZW1iZXIgcmVsYXRpb24gaXMgc2V0IHdoZW4gY3JlYXRpbmcgaW5zdGFuY2Ugb2YgdGhlIG1ldGEgY2xhc3MpXG4gICAgICAgIG1ldGFDbGFzcy5vd25lZE1lbWJlcnMuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sICdvd25lcicsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogbWV0YUNsYXNzLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9iaW5kIG93bmVkIE40TWV0aG9kcyAob2YgdGhlIG1ldGEgY2xhc3MpIHRvIEZ1bmN0aW9ucyAodGhlaXIgY29uc3RydWN0b3JzKSBhbmQgdmljZVZlcnNhXG4gICAgICAgIG1ldGFDbGFzcy5vd25lZE1lbWJlcnMuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgICAgICAgICAgaWYgKG0gaW5zdGFuY2VvZiBONE1ldGhvZCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLCAnanNGdW5jdGlvbicsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG0uY29uc3RydWN0b3IsXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbS5jb25zdHJ1Y3Rvci5uNG1lbWJlciA9IG07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZVRhcmdldFByb3AoYW5ub3RhdGlvbikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYW5ub3RhdGlvbiwgXCJ0YXJnZXRcIiwgeyB2YWx1ZTogdGhpcywgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFRhcmdldE9mQW5ub3RhdGlvbnModGFyZ2V0KSB7XG4gICAgICAgIGlmICh0YXJnZXQuYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIHRhcmdldC5hbm5vdGF0aW9ucy5mb3JFYWNoKGRlZmluZVRhcmdldFByb3AsIHRhcmdldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA9PT09PSBkZWZpbmUgZnVuY3Rpb25zIHVzZWQgbGF0ZXIgYXMgY3RvcnMgb2YgTjRCdWlsdEluQ2xhc3Nlc1xuXG4gICAgdmFyIE40T2JqZWN0ID0gZnVuY3Rpb24gTjRPYmplY3Qoc3BlYykge1xuICAgICAgICBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgICAgIC8vIGRlZmluZWQgaW4gdHlwZXMgbW9kZWwsIGFkZGVkIGJ5ICRjcmVhdGVNZXRhSW5mb1xuICAgICAgICAvKiBwdWJsaWMgc3RhdGljIE40Q2xhc3MgZ2V0IG40dHlwZSgpIHsgcmV0dXJuIG51bGw7IH0gKi9cbiAgICB9O1xuXG4gICAgdmFyIE40RWxlbWVudCA9IGZ1bmN0aW9uIE40RWxlbWVudChzcGVjKSB7XG4gICAgICAgIE40T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgICAgICB0aGlzLm9yaWdpbiA9IHNwZWMub3JpZ2luO1xuICAgICAgICB0aGlzLmFubm90YXRpb25zID0gc3BlYy5hbm5vdGF0aW9ucyB8fCBbXTtcbiAgICAgICAgc2V0VGFyZ2V0T2ZBbm5vdGF0aW9ucyh0aGlzKTtcbiAgICB9O1xuXG4gICAgdmFyIE40TmFtZWRFbGVtZW50ID0gZnVuY3Rpb24gTjROYW1lZEVsZW1lbnQoc3BlYykge1xuICAgICAgICBONEVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgICAgIHRoaXMubmFtZSA9IHNwZWMubmFtZTtcbiAgICB9O1xuXG4gICAgdmFyIE40VHlwZSA9IGZ1bmN0aW9uIE40VHlwZShzcGVjKSB7XG4gICAgICAgIE40TmFtZWRFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgICAgICB0aGlzLmZxbiA9IHNwZWMuZnFuO1xuICAgIH07XG5cbiAgICB2YXIgTjRDbGFzc2lmaWVyID0gZnVuY3Rpb24gTjRDbGFzc2lmaWVyKHNwZWMpIHtcbiAgICAgICAgTjRUeXBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgICAgICB0aGlzLm40c3VwZXJUeXBlID0gc3BlYy5uNHN1cGVyVHlwZTtcbiAgICAgICAgdGhpcy5hbGxJbXBsZW1lbnRlZEludGVyZmFjZXMgPSBzcGVjLmFsbEltcGxlbWVudGVkSW50ZXJmYWNlcztcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9ucyA9IHNwZWMuYW5ub3RhdGlvbnM7XG4gICAgICAgIHRoaXMub3duZWRNZW1iZXJzID0gc3BlYy5vd25lZE1lbWJlcnMgfHwgW107XG4gICAgICAgIHRoaXMuY29uc3VtZWRNZW1iZXJzID0gc3BlYy5jb25zdW1lZE1lbWJlcnMgfHwgW107IC8vd2Uga25vdyBpdCBpcyBlbXB0eSBhcnJheVxuXG4gICAgICAgIHRoaXMub3duZWRNZW1iZXJzLmZvckVhY2goZnVuY3Rpb24obSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sICdvd25lcicsIHsgdmFsdWU6IHRoaXMsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgICAgICAgICAgc2V0VGFyZ2V0T2ZBbm5vdGF0aW9ucyhtKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfTtcblxuICAgIHZhciBONENsYXNzID0gZnVuY3Rpb24gTjRDbGFzcyhzcGVjKSB7XG4gICAgICAgIE40Q2xhc3NpZmllci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40SW50ZXJmYWNlID0gZnVuY3Rpb24gTjRJbnRlcmZhY2Uoc3BlYykge1xuICAgICAgICBONENsYXNzaWZpZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgfTtcblxuICAgIHZhciBONE1lbWJlciA9IGZ1bmN0aW9uIE40TWVtYmVyKHNwZWMpIHtcbiAgICAgICAgTjROYW1lZEVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgICAgIHRoaXMub3duZXIgPSBzcGVjLm93bmVyO1xuICAgICAgICB0aGlzLmlzU3RhdGljID0gc3BlYy5pc1N0YXRpYyB8fCBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFyIE40TWV0aG9kID0gZnVuY3Rpb24gTjRNZXRob2Qoc3BlYykge1xuICAgICAgICBONE1lbWJlci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICAgICAgdGhpcy5qc0Z1bmN0aW9uID0gc3BlYy5qc0Z1bmN0aW9uO1xuICAgIH07XG5cbiAgICB2YXIgTjREYXRhRmllbGQgPSBmdW5jdGlvbiBONERhdGFGaWVsZChzcGVjKSB7XG4gICAgICAgIE40TWVtYmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgIH07XG5cbiAgICB2YXIgTjRBY2Nlc3NvciA9IGZ1bmN0aW9uIE40QWNjZXNzb3Ioc3BlYykge1xuICAgICAgICBONE1lbWJlci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICAgICAgdGhpcy5nZXR0ZXIgPSBzcGVjLmdldHRlcjtcbiAgICB9O1xuXG4gICAgdmFyIE40RW51bVR5cGUgPSBmdW5jdGlvbiBONEVudW1UeXBlKHNwZWMpIHtcbiAgICAgICAgTjRUeXBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgIH07XG5cbiAgICB2YXIgTjRFbnVtID0gZnVuY3Rpb24gTjRFbnVtKHNwZWMpIHtcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgIH07XG5cbiAgICB2YXIgTjRTdHJpbmdCYXNlZEVudW1UeXBlID0gZnVuY3Rpb24gTjRTdHJpbmdCYXNlZEVudW1UeXBlKHNwZWMpIHtcbiAgICAgICAgTjRUeXBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgIH07XG5cbiAgICB2YXIgTjRTdHJpbmdCYXNlZEVudW0gPSBmdW5jdGlvbiBONFN0cmluZ0Jhc2VkRW51bShzcGVjKSB7XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40QW5ub3RhdGlvbiA9IGZ1bmN0aW9uIE40QW5ub3RhdGlvbihzcGVjKSB7XG4gICAgICAgIE40T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBzcGVjLm5hbWU7XG4gICAgICAgIHRoaXMuZGV0YWlscyA9IHNwZWMuZGV0YWlscztcbiAgICAgICAgdGhpcy50YXJnZXQgPSBzcGVjLnRhcmdldDtcbiAgICB9O1xuXG4gICAgdmFyIE40UHJvdmlkZXIgPSBmdW5jdGlvbiBONFByb3ZpZGVyKHNwZWMpIHtcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgIH07XG5cbiAgICB2YXIgTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yID0gZnVuY3Rpb24gTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yKHNwZWMpIHtcbiAgICAgICAgdGhpcy4kX19uNGVyciA9IG5ldyBFcnJvcihzcGVjKTtcbiAgICB9O1xuXG4gICAgLy8gTjRJREwtcmVsYXRlZCBidWlsdC1pbiB0eXBlc1xuICAgIHZhciBNaWdyYXRpb25Db250cm9sbGVyID0gZnVuY3Rpb24gTWlncmF0aW9uQ29udHJvbGxlcihzcGVjKSB7XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9XG5cbiAgICB2YXIgTWlncmF0aW9uQ29udGV4dCA9IGZ1bmN0aW9uIE1pZ3JhdGlvbkNvbnRleHQoc3BlYykge1xuICAgICAgICBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgfVxuXG4gICAgLy8gPT09PT0gbWFrZSBONEJ1aWx0SW5DbGFzc2VzICh0cmFuc2Zvcm0gY3RvciBmdW5jdGlvbnMgdG8gd29yayBhcyBDbGFzc2VzKVxuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONE9iamVjdCwgT2JqZWN0LCB7fSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONEVsZW1lbnQsIE40T2JqZWN0LCB7XG4gICAgICAgIGhhc0Fubm90YXRpb246IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvblxuICAgICAgICAgICAgaGFzQW5ub3RhdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5ub3RhdGlvbnMuc29tZShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5uYW1lID09PSBuYW1lO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhbnlBbm5vdGF0aW9uOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb25cbiAgICAgICAgICAgIGFueUFubm90YXRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmFubm90YXRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5hbm5vdGF0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFsbEFubm90YXRpb25zOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb25cbiAgICAgICAgICAgIGFsbEFubm90YXRpb25zKG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbm5vdGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZSA9PT0gbmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjROYW1lZEVsZW1lbnQsIE40RWxlbWVudCwge30sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRUeXBlLCBONE5hbWVkRWxlbWVudCwge1xuICAgICAgICBpc0NsYXNzOiB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uXG4gICAgICAgICAgICBnZXRJc0NsYXNzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICBpc0ludGVyZmFjZToge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvblxuICAgICAgICAgICAgZ2V0SXNJbnRlcmZhY2UoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpc0VudW06IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb25cbiAgICAgICAgICAgIGdldElzRW51bSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIG9mOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb2YobjRvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbjRvYmplY3QgPyBuNG9iamVjdC5uNHR5cGUgfHwgbjRvYmplY3QuY29uc3RydWN0b3IubjR0eXBlIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40Q2xhc3NpZmllciwgTjRUeXBlLCB7XG4gICAgICAgIG1lbWJlcnM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtZW1iZXJzKGNvbnN1bWVkLCBpbmhlcml0ZWQsIF9zdGF0aWMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy5vd25lZE1lbWJlcnMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3VtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gYXJyLmNvbmNhdCh0aGlzLmNvbnN1bWVkTWVtYmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbmhlcml0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubjRzdXBlclR5cGUgaW5zdGFuY2VvZiBONENsYXNzaWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0aGlzLm40c3VwZXJUeXBlLm1lbWJlcnMoY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSBhcnIuY29uY2F0KHRtcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFfc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyciA9IGFyci5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbS5pc1N0YXRpYztcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lbWJlcnNXaXRoQW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1lbWJlcnNXaXRoQW5ub3RhdGlvbihuYW1lLCBjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVtYmVycyhjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKS5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0uaGFzQW5ub3RhdGlvbihuYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YUZpZWxkczoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRhdGFGaWVsZHMoY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbWJlcnMoY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtIGluc3RhbmNlb2YgTjREYXRhRmllbGQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFGaWVsZHNXaXRoQW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRhdGFGaWVsZHNXaXRoQW5ub3RhdGlvbihuYW1lLCBjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVtYmVyc1dpdGhBbm5vdGF0aW9uKG5hbWUsIGNvbnN1bWVkLCBpbmhlcml0ZWQsIF9zdGF0aWMpLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbSBpbnN0YW5jZW9mIE40RGF0YUZpZWxkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWV0aG9kcyhjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVtYmVycyhjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKS5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0gaW5zdGFuY2VvZiBONE1ldGhvZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kc1dpdGhBbm5vdGF0aW9uOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb25cbiAgICAgICAgICAgIG1ldGhvZHNXaXRoQW5ub3RhdGlvbihuYW1lLCBjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVtYmVyc1dpdGhBbm5vdGF0aW9uKG5hbWUsIGNvbnN1bWVkLCBpbmhlcml0ZWQsIF9zdGF0aWMpLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbSBpbnN0YW5jZW9mIE40TWV0aG9kO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONENsYXNzLCBONENsYXNzaWZpZXIsIHtcbiAgICAgICAgaXNDbGFzczoge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvblxuICAgICAgICAgICAgZ2V0SXNDbGFzcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRJbnRlcmZhY2UsIE40Q2xhc3NpZmllciwge1xuICAgICAgICBpc0ludGVyZmFjZToge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvblxuICAgICAgICAgICAgZ2V0SXNJbnRlcmZhY2UoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40TWVtYmVyLCBONE5hbWVkRWxlbWVudCwge30sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRNZXRob2QsIE40TWVtYmVyLCB7fSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONERhdGFGaWVsZCwgTjRNZW1iZXIsIHt9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40QWNjZXNzb3IsIE40TWVtYmVyLCB7XG4gICAgICAgIGlzR2V0dGVyOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb25cbiAgICAgICAgICAgIGlzR2V0dGVyKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNTZXR0ZXI6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvblxuICAgICAgICAgICAgaXNTZXR0ZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmdldHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRFbnVtVHlwZSwgTjRUeXBlLCB7XG4gICAgICAgIGlzRW51bToge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvblxuICAgICAgICAgICAgZ2V0SXNFbnVtKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONEVudW0sIE9iamVjdCwge1xuICAgICAgICB0b1N0cmluZzoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBmaW5kTGl0ZXJhbEJ5TmFtZToge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmRMaXRlcmFsQnlOYW1lKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5saXRlcmFscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5saXRlcmFsc1tpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXRlcmFsc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmaW5kTGl0ZXJhbEJ5VmFsdWU6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5kTGl0ZXJhbEJ5VmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5saXRlcmFscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5saXRlcmFsc1tpXS52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpdGVyYWxzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRTdHJpbmdCYXNlZEVudW1UeXBlLCBONFR5cGUsIHtcbiAgICAgICAgaXNFbnVtOiB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uXG4gICAgICAgICAgICBnZXRJc0VudW0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40U3RyaW5nQmFzZWRFbnVtLCBPYmplY3QsIHtcbiAgICAgICAgdG9TdHJpbmc6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAgZmluZExpdGVyYWxCeVZhbHVlOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZmluZExpdGVyYWxCeVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGl0ZXJhbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGl0ZXJhbHNbaV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXRlcmFsc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40QW5ub3RhdGlvbiwgTjRPYmplY3QsIHt9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40QXBpTm90SW1wbGVtZW50ZWRFcnJvciwgRXJyb3IsIHt9LCB7fSk7XG5cbiAgICAvLyA9PT09PSBhZGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgTjRCdWlsdEluQ2xhc3Nlc1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40T2JqZWN0LFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRPYmplY3QnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMvTjRPYmplY3QnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40T2JqZWN0Lm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtdLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40RWxlbWVudCxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040RWxlbWVudCcsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy9ONEVsZW1lbnQnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40T2JqZWN0Lm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Fubm90YXRpb25zJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNBbm5vdGF0aW9uJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONEVsZW1lbnRbJ2hhc0Fubm90YXRpb24nXVxuICAgICAgICAgICAgfSksIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FueUFubm90YXRpb24nLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40RWxlbWVudFsnYW55QW5ub3RhdGlvbiddXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWxsQW5ub3RhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40RWxlbWVudFsnYWxsQW5ub3RhdGlvbnMnXVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb3JpZ2luJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtZWJlcnM6IFtdXG4gICAgICAgIH0pKTtcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONE5hbWVkRWxlbWVudCxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040TmFtZWRFbGVtZW50JyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzL040TmFtZWRFbGVtZW50JyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiBONEVsZW1lbnQubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRUeXBlLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRUeXBlJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzL040VHlwZScsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjROYW1lZEVsZW1lbnQubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZnFuJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdvZicsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRUeXBlWydvZiddLFxuICAgICAgICAgICAgICAgIGlzU3RhdGljOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0NsYXNzJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lzSW50ZXJmYWNlJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lzRW51bScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRDbGFzc2lmaWVyLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRDbGFzc2lmaWVyJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzL040Q2xhc3NpZmllcicsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRUeXBlLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ240c3VwZXJUeXBlJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FsbEltcGxlbWVudGVkSW50ZXJmYWNlcycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40RGF0YUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb3duZWRNZW1iZXJzJ1xuICAgICAgICAgICAgfSksIG5ldyBONERhdGFGaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NvbnN1bWVkTWVtYmVycydcbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjb25zdHJ1Y3RvcidcbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtZW1iZXJzJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONENsYXNzaWZpZXJbJ21lbWJlcnMnXVxuICAgICAgICAgICAgfSksIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21lbWJlcnNXaXRoQW5ub3RhdGlvbicsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRDbGFzc2lmaWVyWydtZW1iZXJzV2l0aEFubm90YXRpb24nXVxuICAgICAgICAgICAgfSksIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGFGaWVsZHMnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40Q2xhc3NpZmllclsnZGF0YUZpZWxkcyddXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YUZpZWxkc1dpdGhBbm5vdGF0aW9uJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONENsYXNzaWZpZXJbJ2RhdGFGaWVsZHNXaXRoQW5ub3RhdGlvbiddXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWV0aG9kcycsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRDbGFzc2lmaWVyWydtZXRob2RzJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtZXRob2RzV2l0aEFubm90YXRpb24nLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40Q2xhc3NpZmllclsnbWV0aG9kc1dpdGhBbm5vdGF0aW9uJ11cbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtZWJlcnM6IFtdXG4gICAgICAgIH0pKTtcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONENsYXNzLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRDbGFzcycsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy9ONENsYXNzJyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiBONENsYXNzaWZpZXIubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNDbGFzcycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRJbnRlcmZhY2UsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONEludGVyZmFjZScsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy9ONEludGVyZmFjZScsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRDbGFzc2lmaWVyLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lzSW50ZXJmYWNlJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtZWJlcnM6IFtdXG4gICAgICAgIH0pKTtcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONE1lbWJlcixcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040TWVtYmVyJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzL040TWVtYmVyJyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiBONE5hbWVkRWxlbWVudC5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdvd25lcicsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc1N0YXRpYycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRNZXRob2QsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONE1ldGhvZCcsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy9ONE1ldGhvZCcsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRNZW1iZXIubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnanNGdW5jdGlvbicsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjREYXRhRmllbGQsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONERhdGFGaWVsZCcsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy9ONERhdGFGaWVsZCcsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRNZW1iZXIubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW10sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRBY2Nlc3NvcixcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040QWNjZXNzb3InLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMvTjRBY2Nlc3NvcicsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRNZW1iZXIubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONERhdGFGaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2dldHRlcidcbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0dldHRlcicsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRBY2Nlc3NvclsnaXNHZXR0ZXInXVxuICAgICAgICAgICAgfSksIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lzU2V0dGVyJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONEFjY2Vzc29yWydpc1NldHRlciddXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRFbnVtVHlwZSxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040RW51bVR5cGUnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMvTjRFbnVtVHlwZScsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRUeXBlLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lzRW51bScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRFbnVtLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRFbnVtJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzL040RW51bScsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3RvU3RyaW5nJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONEVudW1bJ3RvU3RyaW5nJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZUJ5TmFtZScsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRFbnVtWyd2YWx1ZUJ5TmFtZSddLFxuICAgICAgICAgICAgICAgIGlzU3RhdGljOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlcycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzU3RhdGljOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICduNHR5cGUnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40U3RyaW5nQmFzZWRFbnVtVHlwZSxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040U3RyaW5nQmFzZWRFbnVtVHlwZScsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy9ONFN0cmluZ0Jhc2VkRW51bVR5cGUnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40VHlwZS5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0VudW0nLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40U3RyaW5nQmFzZWRFbnVtLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRTdHJpbmdCYXNlZEVudW0nLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMvTjRTdHJpbmdCYXNlZEVudW0nLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0b1N0cmluZycsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRTdHJpbmdCYXNlZEVudW1bJ3RvU3RyaW5nJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZUJ5TmFtZScsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRTdHJpbmdCYXNlZEVudW1bJ3ZhbHVlQnlOYW1lJ10sXG4gICAgICAgICAgICAgICAgaXNTdGF0aWM6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWVzJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNTdGF0aWM6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ240dHlwZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRBbm5vdGF0aW9uLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRBbm5vdGF0aW9uJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzL040QW5ub3RhdGlvbicsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRPYmplY3QubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdkZXRhaWxzJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3RhcmdldCcsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRQcm92aWRlcixcbiAgICAgICAgbmV3IE40SW50ZXJmYWNlKHtcbiAgICAgICAgICAgIG5hbWU6ICdONFByb3ZpZGVyJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzL040UHJvdmlkZXInLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRNZXRob2QoeyBuYW1lOiAnZ2V0JywganNGdW5jdGlvbjogTjRQcm92aWRlclsnZ2V0J10sIGFubm90YXRpb25zOiBbXSB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWJlcnM6IFtdXG4gICAgICAgIH0pKTtcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONEFwaU5vdEltcGxlbWVudGVkRXJyb3IsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONEFwaU5vdEltcGxlbWVudGVkRXJyb3InLFxuICAgICAgICAgICAgb3JpZ2luOiAnTjRCdWlsdEluQ2xhc3NlcycsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzL040QXBpTm90SW1wbGVtZW50ZWRFcnJvcicsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW10sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAvLyBONElETC1yZWxhdGVkIGludGVyZmFjZXNcbiAgICAkY3JlYXRlTWV0YUluZm8oTWlncmF0aW9uQ29udHJvbGxlcixcbiAgICAgICAgbmV3IE40SW50ZXJmYWNlKHtcbiAgICAgICAgICAgIG5hbWU6ICdNaWdyYXRpb25Db250cm9sbGVyJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzL01pZ3JhdGlvbkNvbnRyb2xsZXInLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtcbiAgICAgICAgICAgICAgICBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbWlncmF0ZScsXG4gICAgICAgICAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ21pZ3JhdGVXaXRoJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczogW11cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjb250ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiBbXVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1iZXJzOiBbXVxuICAgICAgICB9KSk7XG4gICAgXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE1pZ3JhdGlvbkNvbnRleHQsXG4gICAgICAgIG5ldyBONEludGVyZmFjZSh7XG4gICAgICAgICAgICBuYW1lOiAnTWlncmF0aW9uQ29udGV4dCcsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy9NaWdyYXRpb25Db250ZXh0JyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbXG4gICAgICAgICAgICAgICAgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2dldFRyYWNlJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczogW11cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaXNNb2RpZmllZCcsXG4gICAgICAgICAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NldFVzZXJEYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczogW11cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZ2V0VXNlckRhdGEnLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiBbXVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1iZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAvLz09PT09PSBwcmV2ZW50IG1vZGlmaWNhdGlvbnMgYXQgcnVudGltZSBydW50aW1lXG4gICAgT2JqZWN0LmZyZWV6ZShONE9iamVjdCk7XG4gICAgT2JqZWN0LmZyZWV6ZShONEVsZW1lbnQpO1xuICAgIE9iamVjdC5mcmVlemUoTjROYW1lZEVsZW1lbnQpO1xuICAgIE9iamVjdC5mcmVlemUoTjRUeXBlKTtcbiAgICBPYmplY3QuZnJlZXplKE40Q2xhc3NpZmllcik7XG4gICAgT2JqZWN0LmZyZWV6ZShONENsYXNzKTtcbiAgICBPYmplY3QuZnJlZXplKE40SW50ZXJmYWNlKTtcbiAgICBPYmplY3QuZnJlZXplKE40TWVtYmVyKTtcbiAgICBPYmplY3QuZnJlZXplKE40TWV0aG9kKTtcbiAgICBPYmplY3QuZnJlZXplKE40RGF0YUZpZWxkKTtcbiAgICBPYmplY3QuZnJlZXplKE40QWNjZXNzb3IpO1xuICAgIE9iamVjdC5mcmVlemUoTjRFbnVtVHlwZSk7XG4gICAgT2JqZWN0LmZyZWV6ZShONEVudW0pO1xuICAgIE9iamVjdC5mcmVlemUoTjRTdHJpbmdCYXNlZEVudW1UeXBlKTtcbiAgICBPYmplY3QuZnJlZXplKE40U3RyaW5nQmFzZWRFbnVtKTtcbiAgICBPYmplY3QuZnJlZXplKE40UHJvdmlkZXIpO1xuICAgIE9iamVjdC5mcmVlemUoTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yKTtcbiAgICBPYmplY3QuZnJlZXplKE1pZ3JhdGlvbkNvbnRyb2xsZXIpO1xuICAgIE9iamVjdC5mcmVlemUoTWlncmF0aW9uQ29udGV4dCk7XG5cbiAgICAvLz09PT09PSBtYWtlIGdsb2JhbGx5IGF2YWlsYWJsZVxuXG4gICAgZ2xvYmFsLk40T2JqZWN0ID0gTjRPYmplY3Q7XG4gICAgZ2xvYmFsLk40RWxlbWVudCA9IE40RWxlbWVudDtcbiAgICBnbG9iYWwuTjROYW1lZEVsZW1lbnQgPSBONE5hbWVkRWxlbWVudDtcbiAgICBnbG9iYWwuTjRUeXBlID0gTjRUeXBlO1xuICAgIGdsb2JhbC5ONENsYXNzaWZpZXIgPSBONENsYXNzaWZpZXI7XG4gICAgZ2xvYmFsLk40Q2xhc3MgPSBONENsYXNzO1xuICAgIGdsb2JhbC5ONEludGVyZmFjZSA9IE40SW50ZXJmYWNlO1xuICAgIGdsb2JhbC5ONE1lbWJlciA9IE40TWVtYmVyO1xuICAgIGdsb2JhbC5ONE1ldGhvZCA9IE40TWV0aG9kO1xuICAgIGdsb2JhbC5ONERhdGFGaWVsZCA9IE40RGF0YUZpZWxkO1xuICAgIGdsb2JhbC5ONEFjY2Vzc29yID0gTjRBY2Nlc3NvcjtcbiAgICBnbG9iYWwuTjRFbnVtVHlwZSA9IE40RW51bVR5cGU7XG4gICAgZ2xvYmFsLk40RW51bSA9IE40RW51bTtcbiAgICBnbG9iYWwuTjRTdHJpbmdCYXNlZEVudW1UeXBlID0gTjRTdHJpbmdCYXNlZEVudW1UeXBlO1xuICAgIGdsb2JhbC5ONFN0cmluZ0Jhc2VkRW51bSA9IE40U3RyaW5nQmFzZWRFbnVtO1xuICAgIGdsb2JhbC5ONEFubm90YXRpb24gPSBONEFubm90YXRpb247XG4gICAgZ2xvYmFsLk40UHJvdmlkZXIgPSBONFByb3ZpZGVyO1xuICAgIGdsb2JhbC5ONEFwaU5vdEltcGxlbWVudGVkRXJyb3IgPSBONEFwaU5vdEltcGxlbWVudGVkRXJyb3I7XG4gICAgZ2xvYmFsLk1pZ3JhdGlvbkNvbnRyb2xsZXIgPSBNaWdyYXRpb25Db250cm9sbGVyO1xuICAgIGdsb2JhbC5NaWdyYXRpb25Db250ZXh0ID0gTWlncmF0aW9uQ29udGV4dDtcblxufSkodHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHNlbGYpO1xuIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNyBOdW1iZXJGb3VyIEFHLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG4gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcbiAqXG4gKiBDb250cmlidXRvcnM6XG4gKiAgIE51bWJlckZvdXIgQUcgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbiAqL1xuLyplc2xpbnQtZGlzYWJsZSBuZXctY2FwLCBuby1wcm90bywgc3RyaWN0ICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICB2YXIgc3ltSGFzSW5zdGFuY2UgPSBTeW1ib2wuaGFzSW5zdGFuY2UsXG4gICAgICAgIEFycmF5U2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsXG4gICAgICAgIG5vb3AgPSBmdW5jdGlvbigpIHt9O1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lTjRUeXBlR2V0dGVyKGluc3RhbmNlLCBmYWN0b3J5Rm4pIHtcbiAgICAgICAgdmFyIG40dHlwZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3RhbmNlLCBcIm40dHlwZVwiLCB7XG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsIC8vIGZvciBob3QgcmVsb2FkaW5nL3BhdGNoaW5nXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuNHR5cGUgfHwgKG40dHlwZSA9IGZhY3RvcnlGbigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIENhbGwgY29udGV4dCBpcyBwcm90b3R5cGUgb2JqZWN0LiAqL1xuICAgIGZ1bmN0aW9uIG1peGluRGVmYXVsdE1ldGhvZChtZXRob2QpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBtZXRob2QgJiYgbWV0aG9kLm5hbWU7XG4gICAgICAgIGlmIChuYW1lICYmICEobmFtZSBpbiB0aGlzKSAmJiAhbWV0aG9kLmlzU3RhdGljICYmIG1ldGhvZC5qc0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gbWV0aG9kLmpzRnVuY3Rpb24udmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIENhbGwgY29udGV4dCBpcyBwcm90b3R5cGUgb2JqZWN0LiAqL1xuICAgIGZ1bmN0aW9uIG1peGluRGVmYXVsdE1ldGhvZHMoaWZhY2UpIHtcbiAgICAgICAgdmFyIG40dHlwZSA9IGlmYWNlICYmIGlmYWNlLm40dHlwZTtcbiAgICAgICAgaWYgKG40dHlwZSkge1xuICAgICAgICAgICAgbjR0eXBlLm93bmVkTWVtYmVycy5mb3JFYWNoKG1peGluRGVmYXVsdE1ldGhvZCwgdGhpcyk7XG4gICAgICAgICAgICBuNHR5cGUuY29uc3VtZWRNZW1iZXJzLmZvckVhY2gobWl4aW5EZWZhdWx0TWV0aG9kLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHVwIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gdG8gd29yayBhcyBhIGNsYXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGN0b3IgLSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gc3VwZXJDdG9yIC0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIG9mIHRoZSBzdXBlciBjbGFzc1xuICAgICAqIEBwYXJhbSBpbXBsZW1lbnRlZEludGVyZmFjZXMgLSBBcnJheSBvZiBkaXJlY3RseSBpbXBsZW1lbnRlZCBpbnRlcmZhY2VzLCBleGNsdWRpbmcgYnVpbHQtaW4gdHlwZXMgYW5kXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXMgZGVmaW5lZCBpbiBkZWZpbml0aW9uIGZpbGVzIHdpdGhvdXQgYW5ub3RhdGlvbiBATjRKUy5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2VNZXRob2RzIC0gQW4gb2JqZWN0IGhvbGRpbmcgdGhlIG1ldGhvZHMgZm9yIHRoZSBjbGFzcyBpbnN0YW5jZSBhbmQgbWl4ZWQgaW4gbWV0aG9kc1xuICAgICAqIEBwYXJhbSBzdGF0aWNNZXRob2RzIC0gQW4gb2JqZWN0IGhvbGRpbmcgdGhlIGRlc2NyaXB0b3JzIGZvciB0aGUgY2xhc3Mgc3RhdGljIG1ldGhvZHNcbiAgICAgKiBAcGFyYW0gbjR0eXBlRm4gLSBPcHRpb25hbCBmYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgbWV0YSB0eXBlIChjdXJyZW50bHkgbWFuZGF0b3J5IHRob3VnaCwgd2lsbCBiZSBvcHRpb25hbCB3aXRoIEdILTU3NCkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gJG1ha2VDbGFzcyhjdG9yLCBzdXBlckN0b3IsIGltcGxlbWVudGVkSW50ZXJmYWNlcywgaW5zdGFuY2VNZXRob2RzLCBzdGF0aWNNZXRob2RzLCBuNHR5cGVGbikge1xuICAgICAgICBpZiAodHlwZW9mIHN1cGVyQ3RvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoY3Rvciwgc3VwZXJDdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjdG9yLCBzdGF0aWNNZXRob2RzKTtcblxuICAgICAgICB2YXIgcHJvdG8gPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIGluc3RhbmNlTWV0aG9kcyk7XG4gICAgICAgIGltcGxlbWVudGVkSW50ZXJmYWNlcy5mb3JFYWNoKG1peGluRGVmYXVsdE1ldGhvZHMsIHByb3RvKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBjdG9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChuNHR5cGVGbikge1xuICAgICAgICAgICAgZGVmaW5lTjRUeXBlR2V0dGVyKGN0b3IsIG40dHlwZUZuLmJpbmQobnVsbCwgcHJvdG8sIGN0b3IpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0b3IucHJvdG90eXBlID0gcHJvdG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0dXAgYSBpbnRlcmZhY2UuIE1ldGhvZHMgYW5kIGZpZWxkIGluaXRpYWxpemVycyBhcmUgYWxyZWFkeSBtZXJnZWQgaW50byB0aGUgaW50ZXJmYWNlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aW50ZXJmYWNlIC0gVGhlIGludGVyZmFjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIGV4dGVuZGVkSW50ZXJmYWNlc0ZuIC0gT3B0aW9uYWwgZnVuY3Rpb24gcmV0dXJuaW5nIGFuIGFycmF5IG9mIGludGVyZmFjZXMgZXh0ZW5kZWQgYnkgJ3RpbnRlcmZhY2UnLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heSBiZSAndW5kZWZpbmVkJyBpbiBjYXNlIG5vIGludGVyZmFjZXMgYXJlIGV4dGVuZGVkLlxuICAgICAqIEBwYXJhbSBuNHR5cGVGbiAtIE9wdGlvbmFsIGZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBtZXRhIHR5cGUgKGN1cnJlbnRseSBtYW5kYXRvcnkgdGhvdWdoLCB3aWxsIGJlIG9wdGlvbmFsIHdpdGggR0gtNTc0KS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiAkbWFrZUludGVyZmFjZSh0aW50ZXJmYWNlLCBleHRlbmRlZEludGVyZmFjZXNGbiwgbjR0eXBlRm4pIHtcbiAgICAgICAgdGludGVyZmFjZS4kZXh0ZW5kcyA9IGV4dGVuZGVkSW50ZXJmYWNlc0ZuIHx8ICgoKT0+W10pO1xuXG4gICAgICAgIGlmIChuNHR5cGVGbikge1xuICAgICAgICAgICAgZGVmaW5lTjRUeXBlR2V0dGVyKHRpbnRlcmZhY2UsIG40dHlwZUZuLmJpbmQobnVsbCwgdGludGVyZmFjZS4kbWV0aG9kcywgdGludGVyZmFjZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRpbnRlcmZhY2UsIHN5bUhhc0luc3RhbmNlLCB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENoZWNrIHdoZXRoZXIgYSB2YWx1ZSBpcyBpbnN0YW5jZSBvZiBhIGNsYXNzIGltcGxlbWVudGluZyBhbiBpbnRlcmZhY2UuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIGluc3RhbmNlIC0gVGhlIGluc3RhbmNlIHdoaWNoIHR5cGUgaXMgdG8gYmUgY2hlY2tlZCB3aGV0aGVyIGl0IGltcGxlbWVudHMgdGhlIGludGVyZmFjZVxuICAgICAgICAgICAgICogQHJldHVybiBib29sZWFuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2UgfHwgIWluc3RhbmNlLmNvbnN0cnVjdG9yIHx8ICFpbnN0YW5jZS5jb25zdHJ1Y3Rvci5uNHR5cGUgfHwgIWluc3RhbmNlLmNvbnN0cnVjdG9yLm40dHlwZS5hbGxJbXBsZW1lbnRlZEludGVyZmFjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpbXBsZW1lbnRlZEludGVyZmFjZSA9IHRpbnRlcmZhY2UubjR0eXBlLmZxbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuY29uc3RydWN0b3IubjR0eXBlLmFsbEltcGxlbWVudGVkSW50ZXJmYWNlcy5pbmRleE9mKGltcGxlbWVudGVkSW50ZXJmYWNlKSAhPT0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhlIGZpZWxkcyBkZWNsYXJlZCBieSB0aGUgZ2l2ZW4gaW50ZXJmYWNlcyBpbiB0aGUgdGFyZ2V0IG9iamVjdCAndGFyZ2V0Jy5cbiAgICAgKiBUYWtlcyBjYXJlIG9mIGRlZmF1bHRzIGRlZmluZWQgaW4gdGhlIGludGVyZmFjZXMgYW5kIHZhbHVlcyBwcm92aWRlZCB2aWEgdGhlIG9wdGlvbmFsXG4gICAgICogJ3NwZWMnIG9iamVjdC4gV2lsbCBuZXZlciBvdmVycmlkZSBwcm9wZXJ0aWVzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGUgdGFyZ2V0IG9iamVjdFxuICAgICAqIG9yIHRoYXQgZXhpc3QgaW4gdGhlICdtaXhpbkV4Y2x1c2lvbicgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQuIFVzdWFsbHkgYSBuZXdseSBjcmVhdGVkIGluc3RhbmNlIG9mXG4gICAgICogICAgICAgICAgICAgICAgIHNvbWUgY2xhc3MgaW1wbGVtZW50aW5nIHRoZSBnaXZlbiBpbnRlcmZhY2VzLlxuICAgICAqIEBwYXJhbSBpbnRlcmZhY2VzIC0gQXJyYXkgb2YgemVybyBvciBtb3JlIGludGVyZmFjZXMuXG4gICAgICogQHBhcmFtIHNwZWMgLSBJZiBpbnZva2VkIGZyb20gYSBAU3BlYy1jb25zdHJ1Y3RvciwgdGhpcyBpcyB0aGUgc3BlYy1vYmplY3Q7IG90aGVyd2lzZSAndW5kZWZpbmVkJy5cbiAgICAgKiBAcGFyYW0gbWl4aW5FeGNsdXNpb24gLSBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHRoYXQgbXVzdCBub3QgYmUgb3ZlcnJpZGRlbiBpbiB0aGUgdGFyZ2V0IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiAkaW5pdEZpZWxkc0Zyb21JbnRlcmZhY2VzKHRhcmdldCwgaW50ZXJmYWNlcywgc3BlYywgbWl4aW5FeGNsdXNpb24pIHtcbiAgICAgICAgZm9yKGNvbnN0IGlmYyBvZiBpbnRlcmZhY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZzID0gaWZjLiRmaWVsZERlZmF1bHRzIHx8IHt9O1xuICAgICAgICAgICAgZm9yKGNvbnN0IGZpZWxkTmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhkZWZzKSkge1xuICAgICAgICAgICAgICAgIGlmKHRhcmdldC5oYXNPd25Qcm9wZXJ0eShmaWVsZE5hbWUpIHx8IG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZihzcGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3BlY1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhcmdldFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkaW5pdEZpZWxkc0Zyb21JbnRlcmZhY2VzKHRhcmdldCwgaWZjLiRleHRlbmRzKCksIHNwZWMsIG1peGluRXhjbHVzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiB0eXBlIHdpdGggdGhlIGdpdmVuIEZRTiBhbmQgbWVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnVtZXJhdGlvbiAtIHRoZSBlbnVtZXJhdGlvbiBjb25zdHJ1Y3RvciBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBtZW1iZXJzIC0gQW4gYXJyYXkgb2YgPFN0cmluZywgU3RyaW5nPiB0dXBsZXMgY29udGFpbmluZ1xuICAgICAqICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudW0gbWVtYmVyc1xuICAgICAqIEBwYXJhbSBuNHR5cGVGbiAtIE9wdGlvbmFsIGZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBtZXRhIHR5cGUgKGN1cnJlbnRseSBtYW5kYXRvcnkgdGhvdWdoLCB3aWxsIGJlIG9wdGlvbmFsIHdpdGggR0gtNTc0KS5cbiAgICAgKiBAcmV0dXJuIFRoZSBjb25zdHJ1Y3RlZCBlbnVtZXJhdGlvbiB0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gJG1ha2VFbnVtKGVudW1lcmF0aW9uLCBtZW1iZXJzLCBuNHR5cGVGbikge1xuICAgICAgICB2YXIgbGVuZ3RoLCBpbmRleCwgbWVtYmVyLCBuYW1lLCB2YWx1ZSwgdmFsdWVzLCBsaXRlcmFsO1xuXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihlbnVtZXJhdGlvbiwgZ2xvYmFsLk40RW51bSk7XG4gICAgICAgIGVudW1lcmF0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsLk40RW51bS5wcm90b3R5cGUsIHt9KTtcblxuICAgICAgICBpZiAobjR0eXBlRm4pIHtcbiAgICAgICAgICAgIGRlZmluZU40VHlwZUdldHRlcihlbnVtZXJhdGlvbiwgbjR0eXBlRm4uYmluZChudWxsLCBub29wKSk7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZW51bWVyYXRpb24ucHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBlbnVtZXJhdGlvblxuICAgICAgICB9KTtcblxuICAgICAgICBsZW5ndGggPSBtZW1iZXJzLmxlbmd0aDtcbiAgICAgICAgdmFsdWVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkge1xuICAgICAgICAgICAgbWVtYmVyID0gbWVtYmVyc1tpbmRleF07XG4gICAgICAgICAgICBuYW1lID0gbWVtYmVyWzBdO1xuICAgICAgICAgICAgdmFsdWUgPSBtZW1iZXJbMV07XG5cbiAgICAgICAgICAgIGxpdGVyYWwgPSBuZXcgZW51bWVyYXRpb24obmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVudW1lcmF0aW9uLCBsaXRlcmFsLm5hbWUsIHtcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBsaXRlcmFsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSBsaXRlcmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVudW1lcmF0aW9uLCAnbGl0ZXJhbHMnLCB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB1c2VkIHdoZW4gdHJhbnNwaWxpbmcgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJucy4gUmV0dXJuIGFuIGFycmF5IG9mIHRoZSBmaXJzdCAnbWF4J1xuICAgICAqIGVsZW1lbnRzIGZyb20gaXRlcmFibGUgJ2FycicuIElmIHRoZSBJdGVyYWJsZSBkb2VzIG5vdCBwcm92aWRlIGVub3VnaCBlbGVtZW50cywgYSBzaG9ydGVyIGFycmF5XG4gICAgICogaXMgcmV0dXJuZWQuIFNvIGxlbmd0aCBvZiByZXR1cm5lZCBhcnJheSBpcyBiZXR3ZWVuIDAgYW5kICdtYXgnLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFyciAtIHRoZSBJdGVyYWJsZSB0aGF0IGlzIHRvIGJlIHR1cm5lZCBpbnRvIGFuIGFycmF5LlxuICAgICAqIEBwYXJhbSBtYXggLSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiAkc2xpY2VUb0FycmF5Rm9yRGVzdHJ1Y3QoYXJyLCBtYXgpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgICAgfSBlbHNlIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHtcbiAgICAgICAgICAgIHZhciByZXQgPSBbXSxcbiAgICAgICAgICAgICAgICBpdCA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgICAgICAgICAgICAgZW50cnk7XG4gICAgICAgICAgICB3aGlsZSAoIShlbnRyeSA9IGl0Lm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICAgIHJldC5wdXNoKGVudHJ5LnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAocmV0Lmxlbmd0aCA+PSBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIGdpdmVuIGdlbmVyYXRvciBzdGVwIGJ5IHN0ZXAgY2hhaW5pbmcgdXAgcHJvbWlzZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ2VuIC0gZ2VuZXJhdG9yIG9iamVjdCB0byBiZSBzZXF1ZW50aWFsbHkgZXhlY3V0ZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gJHNwYXduKGdlbikge1xuICAgICAgICBmdW5jdGlvbiBleGVjKHN0ZXAsIHYpIHtcbiAgICAgICAgICAgIHZhciByZXM7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcyA9IHRoaXNbc3RlcF0odik7XG4gICAgICAgICAgICB9IGNhdGNoIChleGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXhjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXMuZG9uZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXMudmFsdWUpLnRoZW4obmV4dCwgdGhyb3dyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXh0ID0gZXhlYy5iaW5kKGdlbiwgXCJuZXh0XCIpLFxuICAgICAgICAgICAgdGhyb3dyID0gZXhlYy5iaW5kKGdlbiwgXCJ0aHJvd1wiKTtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiAkbjRwcm9taXNpZnlGdW5jdGlvbihjYkJhc2VkRm4sIGFyZ3MsIG11bHRpU3VjY2Vzc1ZhbHVlcywgbm9FcnJvclZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbihyZXN1bHQwLCByZXN1bHQxKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vRXJyb3JWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG11bHRpU3VjY2Vzc1ZhbHVlcyA/IEFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDApIDogcmVzdWx0MCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXN1bHQwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobXVsdGlTdWNjZXNzVmFsdWVzID8gQXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSkgOiByZXN1bHQxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2JCYXNlZEZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gJG40cHJvbWlzaWZ5TWV0aG9kKHJlY2VpdmVyLCBtZXRob2ROYW1lLCBhcmdzLCBtdWx0aVN1Y2Nlc3NWYWx1ZXMsIG5vRXJyb3JWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goZnVuY3Rpb24ocmVzdWx0MCwgcmVzdWx0MSkge1xuICAgICAgICAgICAgICAgIGlmIChub0Vycm9yVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtdWx0aVN1Y2Nlc3NWYWx1ZXMgPyBBcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSA6IHJlc3VsdDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0MCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG11bHRpU3VjY2Vzc1ZhbHVlcyA/IEFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogcmVzdWx0MSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlY2VpdmVyW21ldGhvZE5hbWVdLmFwcGx5KHJlY2VpdmVyLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy9leHBvc2UgaW4gZ2xvYmFsIHNjb3BlXG4gICAgZ2xvYmFsLiRtYWtlQ2xhc3MgPSAkbWFrZUNsYXNzO1xuICAgIGdsb2JhbC4kbWFrZUludGVyZmFjZSA9ICRtYWtlSW50ZXJmYWNlO1xuICAgIGdsb2JhbC4kaW5pdEZpZWxkc0Zyb21JbnRlcmZhY2VzID0gJGluaXRGaWVsZHNGcm9tSW50ZXJmYWNlcztcbiAgICBnbG9iYWwuJG1ha2VFbnVtID0gJG1ha2VFbnVtO1xuXG4gICAgZ2xvYmFsLiRzbGljZVRvQXJyYXlGb3JEZXN0cnVjdCA9ICRzbGljZVRvQXJyYXlGb3JEZXN0cnVjdDtcbiAgICBnbG9iYWwuJHNwYXduID0gJHNwYXduO1xuICAgIGdsb2JhbC4kbjRwcm9taXNpZnlGdW5jdGlvbiA9ICRuNHByb21pc2lmeUZ1bmN0aW9uO1xuICAgIGdsb2JhbC4kbjRwcm9taXNpZnlNZXRob2QgPSAkbjRwcm9taXNpZnlNZXRob2Q7XG5cbn0pKHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiBzZWxmKTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTIuMFxuICogcmVhY3QucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7dmFyIGg9cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIiksbj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLHA9bj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxxPW4/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixyPW4/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LHQ9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsdT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCx2PW4/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LHc9bj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCx4PW4/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLHk9bj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTM7biYmU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik7XG52YXIgej1uP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LGFhPW4/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTY7biYmU3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpO24mJlN5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIik7biYmU3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpO3ZhciBBPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtcbmZ1bmN0aW9uIEIoYSl7Zm9yKHZhciBiPVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrYSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tjXSk7cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrYStcIjsgdmlzaXQgXCIrYitcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9dmFyIEM9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LEQ9e307XG5mdW5jdGlvbiBFKGEsYixjKXt0aGlzLnByb3BzPWE7dGhpcy5jb250ZXh0PWI7dGhpcy5yZWZzPUQ7dGhpcy51cGRhdGVyPWN8fEN9RS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fTtFLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihhLGIpe2lmKFwib2JqZWN0XCIhPT10eXBlb2YgYSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEmJm51bGwhPWEpdGhyb3cgRXJyb3IoQig4NSkpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxhLGIsXCJzZXRTdGF0ZVwiKX07RS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oYSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGEsXCJmb3JjZVVwZGF0ZVwiKX07ZnVuY3Rpb24gRigpe31GLnByb3RvdHlwZT1FLnByb3RvdHlwZTtmdW5jdGlvbiBHKGEsYixjKXt0aGlzLnByb3BzPWE7dGhpcy5jb250ZXh0PWI7dGhpcy5yZWZzPUQ7dGhpcy51cGRhdGVyPWN8fEN9dmFyIEg9Ry5wcm90b3R5cGU9bmV3IEY7XG5ILmNvbnN0cnVjdG9yPUc7aChILEUucHJvdG90eXBlKTtILmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciBJPXtjdXJyZW50Om51bGx9LEo9e2N1cnJlbnQ6bnVsbH0sSz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEw9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIE0oYSxiLGMpe3ZhciBlLGQ9e30sZz1udWxsLGw9bnVsbDtpZihudWxsIT1iKWZvcihlIGluIHZvaWQgMCE9PWIucmVmJiYobD1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihnPVwiXCIrYi5rZXkpLGIpSy5jYWxsKGIsZSkmJiFMLmhhc093blByb3BlcnR5KGUpJiYoZFtlXT1iW2VdKTt2YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZC5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxmKXtmb3IodmFyIGs9QXJyYXkoZiksbT0wO208ZjttKyspa1ttXT1hcmd1bWVudHNbbSsyXTtkLmNoaWxkcmVuPWt9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGUgaW4gZj1hLmRlZmF1bHRQcm9wcyxmKXZvaWQgMD09PWRbZV0mJihkW2VdPWZbZV0pO3JldHVybnskJHR5cGVvZjpwLHR5cGU6YSxrZXk6ZyxyZWY6bCxwcm9wczpkLF9vd25lcjpKLmN1cnJlbnR9fVxuZnVuY3Rpb24gYmEoYSxiKXtyZXR1cm57JCR0eXBlb2Y6cCx0eXBlOmEudHlwZSxrZXk6YixyZWY6YS5yZWYscHJvcHM6YS5wcm9wcyxfb3duZXI6YS5fb3duZXJ9fWZ1bmN0aW9uIE4oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PXB9ZnVuY3Rpb24gZXNjYXBlKGEpe3ZhciBiPXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifTtyZXR1cm5cIiRcIisoXCJcIithKS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oYSl7cmV0dXJuIGJbYV19KX12YXIgTz0vXFwvKy9nLFA9W107ZnVuY3Rpb24gUShhLGIsYyxlKXtpZihQLmxlbmd0aCl7dmFyIGQ9UC5wb3AoKTtkLnJlc3VsdD1hO2Qua2V5UHJlZml4PWI7ZC5mdW5jPWM7ZC5jb250ZXh0PWU7ZC5jb3VudD0wO3JldHVybiBkfXJldHVybntyZXN1bHQ6YSxrZXlQcmVmaXg6YixmdW5jOmMsY29udGV4dDplLGNvdW50OjB9fVxuZnVuY3Rpb24gUihhKXthLnJlc3VsdD1udWxsO2Eua2V5UHJlZml4PW51bGw7YS5mdW5jPW51bGw7YS5jb250ZXh0PW51bGw7YS5jb3VudD0wOzEwPlAubGVuZ3RoJiZQLnB1c2goYSl9XG5mdW5jdGlvbiBTKGEsYixjLGUpe3ZhciBkPXR5cGVvZiBhO2lmKFwidW5kZWZpbmVkXCI9PT1kfHxcImJvb2xlYW5cIj09PWQpYT1udWxsO3ZhciBnPSExO2lmKG51bGw9PT1hKWc9ITA7ZWxzZSBzd2l0Y2goZCl7Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJudW1iZXJcIjpnPSEwO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBwOmNhc2UgcTpnPSEwfX1pZihnKXJldHVybiBjKGUsYSxcIlwiPT09Yj9cIi5cIitUKGEsMCk6YiksMTtnPTA7Yj1cIlwiPT09Yj9cIi5cIjpiK1wiOlwiO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe2Q9YVtsXTt2YXIgZj1iK1QoZCxsKTtnKz1TKGQsZixjLGUpfWVsc2UgaWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYT9mPW51bGw6KGY9QSYmYVtBXXx8YVtcIkBAaXRlcmF0b3JcIl0sZj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgZj9mOm51bGwpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmKWZvcihhPWYuY2FsbChhKSxsPVxuMDshKGQ9YS5uZXh0KCkpLmRvbmU7KWQ9ZC52YWx1ZSxmPWIrVChkLGwrKyksZys9UyhkLGYsYyxlKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1kKXRocm93IGM9XCJcIithLEVycm9yKEIoMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PWM/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhhKS5qb2luKFwiLCBcIikrXCJ9XCI6YyxcIlwiKSk7cmV0dXJuIGd9ZnVuY3Rpb24gVShhLGIsYyl7cmV0dXJuIG51bGw9PWE/MDpTKGEsXCJcIixiLGMpfWZ1bmN0aW9uIFQoYSxiKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZudWxsIT1hLmtleT9lc2NhcGUoYS5rZXkpOmIudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIGNhKGEsYil7YS5mdW5jLmNhbGwoYS5jb250ZXh0LGIsYS5jb3VudCsrKX1cbmZ1bmN0aW9uIGRhKGEsYixjKXt2YXIgZT1hLnJlc3VsdCxkPWEua2V5UHJlZml4O2E9YS5mdW5jLmNhbGwoYS5jb250ZXh0LGIsYS5jb3VudCsrKTtBcnJheS5pc0FycmF5KGEpP1YoYSxlLGMsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KTpudWxsIT1hJiYoTihhKSYmKGE9YmEoYSxkKyghYS5rZXl8fGImJmIua2V5PT09YS5rZXk/XCJcIjooXCJcIithLmtleSkucmVwbGFjZShPLFwiJCYvXCIpK1wiL1wiKStjKSksZS5wdXNoKGEpKX1mdW5jdGlvbiBWKGEsYixjLGUsZCl7dmFyIGc9XCJcIjtudWxsIT1jJiYoZz0oXCJcIitjKS5yZXBsYWNlKE8sXCIkJi9cIikrXCIvXCIpO2I9UShiLGcsZSxkKTtVKGEsZGEsYik7UihiKX1mdW5jdGlvbiBXKCl7dmFyIGE9SS5jdXJyZW50O2lmKG51bGw9PT1hKXRocm93IEVycm9yKEIoMzIxKSk7cmV0dXJuIGF9XG52YXIgWD17Q2hpbGRyZW46e21hcDpmdW5jdGlvbihhLGIsYyl7aWYobnVsbD09YSlyZXR1cm4gYTt2YXIgZT1bXTtWKGEsZSxudWxsLGIsYyk7cmV0dXJuIGV9LGZvckVhY2g6ZnVuY3Rpb24oYSxiLGMpe2lmKG51bGw9PWEpcmV0dXJuIGE7Yj1RKG51bGwsbnVsbCxiLGMpO1UoYSxjYSxiKTtSKGIpfSxjb3VudDpmdW5jdGlvbihhKXtyZXR1cm4gVShhLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG51bGwpfSx0b0FycmF5OmZ1bmN0aW9uKGEpe3ZhciBiPVtdO1YoYSxiLG51bGwsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KTtyZXR1cm4gYn0sb25seTpmdW5jdGlvbihhKXtpZighTihhKSl0aHJvdyBFcnJvcihCKDE0MykpO3JldHVybiBhfX0sY3JlYXRlUmVmOmZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LENvbXBvbmVudDpFLFB1cmVDb21wb25lbnQ6RyxjcmVhdGVDb250ZXh0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9bnVsbCk7YT17JCR0eXBlb2Y6dyxfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6Yixcbl9jdXJyZW50VmFsdWU6YSxfY3VycmVudFZhbHVlMjphLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH07YS5Qcm92aWRlcj17JCR0eXBlb2Y6dixfY29udGV4dDphfTtyZXR1cm4gYS5Db25zdW1lcj1hfSxmb3J3YXJkUmVmOmZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjp4LHJlbmRlcjphfX0sbGF6eTpmdW5jdGlvbihhKXtyZXR1cm57JCR0eXBlb2Y6YWEsX2N0b3I6YSxfc3RhdHVzOi0xLF9yZXN1bHQ6bnVsbH19LG1lbW86ZnVuY3Rpb24oYSxiKXtyZXR1cm57JCR0eXBlb2Y6eix0eXBlOmEsY29tcGFyZTp2b2lkIDA9PT1iP251bGw6Yn19LHVzZUNhbGxiYWNrOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFcoKS51c2VDYWxsYmFjayhhLGIpfSx1c2VDb250ZXh0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFcoKS51c2VDb250ZXh0KGEsYil9LHVzZUVmZmVjdDpmdW5jdGlvbihhLGIpe3JldHVybiBXKCkudXNlRWZmZWN0KGEsYil9LHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oYSxcbmIsYyl7cmV0dXJuIFcoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGEsYixjKX0sdXNlRGVidWdWYWx1ZTpmdW5jdGlvbigpe30sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFcoKS51c2VMYXlvdXRFZmZlY3QoYSxiKX0sdXNlTWVtbzpmdW5jdGlvbihhLGIpe3JldHVybiBXKCkudXNlTWVtbyhhLGIpfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gVygpLnVzZVJlZHVjZXIoYSxiLGMpfSx1c2VSZWY6ZnVuY3Rpb24oYSl7cmV0dXJuIFcoKS51c2VSZWYoYSl9LHVzZVN0YXRlOmZ1bmN0aW9uKGEpe3JldHVybiBXKCkudXNlU3RhdGUoYSl9LEZyYWdtZW50OnIsUHJvZmlsZXI6dSxTdHJpY3RNb2RlOnQsU3VzcGVuc2U6eSxjcmVhdGVFbGVtZW50Ok0sY2xvbmVFbGVtZW50OmZ1bmN0aW9uKGEsYixjKXtpZihudWxsPT09YXx8dm9pZCAwPT09YSl0aHJvdyBFcnJvcihCKDI2NyxhKSk7dmFyIGU9aCh7fSxhLnByb3BzKSxkPWEua2V5LGc9YS5yZWYsbD1hLl9vd25lcjtcbmlmKG51bGwhPWIpe3ZvaWQgMCE9PWIucmVmJiYoZz1iLnJlZixsPUouY3VycmVudCk7dm9pZCAwIT09Yi5rZXkmJihkPVwiXCIrYi5rZXkpO2lmKGEudHlwZSYmYS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgZj1hLnR5cGUuZGVmYXVsdFByb3BzO2ZvcihrIGluIGIpSy5jYWxsKGIsaykmJiFMLmhhc093blByb3BlcnR5KGspJiYoZVtrXT12b2lkIDA9PT1iW2tdJiZ2b2lkIDAhPT1mP2Zba106YltrXSl9dmFyIGs9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1rKWUuY2hpbGRyZW49YztlbHNlIGlmKDE8ayl7Zj1BcnJheShrKTtmb3IodmFyIG09MDttPGs7bSsrKWZbbV09YXJndW1lbnRzW20rMl07ZS5jaGlsZHJlbj1mfXJldHVybnskJHR5cGVvZjpwLHR5cGU6YS50eXBlLGtleTpkLHJlZjpnLHByb3BzOmUsX293bmVyOmx9fSxjcmVhdGVGYWN0b3J5OmZ1bmN0aW9uKGEpe3ZhciBiPU0uYmluZChudWxsLGEpO2IudHlwZT1hO3JldHVybiBifSxpc1ZhbGlkRWxlbWVudDpOLHZlcnNpb246XCIxNi4xMi4wXCIsXG5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjpJLFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOntzdXNwZW5zZTpudWxsfSxSZWFjdEN1cnJlbnRPd25lcjpKLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246aH19LFk9e2RlZmF1bHQ6WH0sWj1ZJiZYfHxZO21vZHVsZS5leHBvcnRzPVouZGVmYXVsdHx8WjtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvLyBHZW5lcmF0ZWQgYnkgTjRKUyB0cmFuc3BpbGVyOyBmb3IgY29weXJpZ2h0IHNlZSBvcmlnaW5hbCBONEpTIHNvdXJjZSBmaWxlLlxuXG5pbXBvcnQgJ240anMtcnVudGltZSdcblxuZXhwb3J0IGZ1bmN0aW9uIENvb3JkaW5hdGUoc3BlYykge1xuXHRjb25zdCAkc3BlY09iaiA9IHNwZWMgfHwge307XG5cdCh7XG5cdFx0cm93OiB0aGlzLnJvdyxcblx0XHRjb2w6IHRoaXMuY29sXG5cdH0gPSAkc3BlY09iaik7XG59XG4kbWFrZUNsYXNzKENvb3JkaW5hdGUsIE40T2JqZWN0LCBbXSwge1xuXHRlcXVhbHM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZXF1YWxzX19fbjQob3RoZXIpIHtcblx0XHRcdHJldHVybiAodGhpcy5yb3cgPT0gb3RoZXIucm93KSAmJiAodGhpcy5jb2wgPT0gb3RoZXIuY29sKTtcblx0XHR9XG5cdH0sXG5cdGdldEJvYXJkQ29vcmRpbmF0ZVJlcHJlc2VudGF0aW9uOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldEJvYXJkQ29vcmRpbmF0ZVJlcHJlc2VudGF0aW9uX19fbjQoKSB7XG5cdFx0XHRjb25zdCByb3dMYWJlbCA9IDggLSB0aGlzLnJvdztcblx0XHRcdGNvbnN0IGNvbExhYmVsID0gU3RyaW5nLmZyb21DaGFyQ29kZSgnYScuY2hhckNvZGVBdCgwKSArIHRoaXMuY29sKTtcblx0XHRcdHJldHVybiBgKCR7cm93TGFiZWwgKyAnLCcgKyBjb2xMYWJlbH0pYDtcblx0XHR9XG5cdH0sXG5cdHRvU3RyaW5nOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nX19fbjQoKSB7XG5cdFx0XHRyZXR1cm4gYCgke3RoaXMucm93fSwke3RoaXMuY29sfSlgO1xuXHRcdH1cblx0fSxcblx0cm93OiB7XG5cdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHR3cml0YWJsZTogdHJ1ZVxuXHR9LFxuXHRjb2w6IHtcblx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdHdyaXRhYmxlOiB0cnVlXG5cdH1cbn0sIHt9LCBmdW5jdGlvbihpbnN0YW5jZVByb3RvLCBzdGF0aWNQcm90bykge1xuXHR2YXIgbWV0YUNsYXNzID0gbmV3IE40Q2xhc3Moe1xuXHRcdG5hbWU6ICdDb29yZGluYXRlJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnQ29vcmRpbmF0ZS9Db29yZGluYXRlJyxcblx0XHRuNHN1cGVyVHlwZTogTjRPYmplY3QubjR0eXBlLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAncm93Jyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ2NvbCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjb25zdHJ1Y3RvcicsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY29uc3RydWN0b3InXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdlcXVhbHMnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2VxdWFscyddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2dldEJvYXJkQ29vcmRpbmF0ZVJlcHJlc2VudGF0aW9uJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydnZXRCb2FyZENvb3JkaW5hdGVSZXByZXNlbnRhdGlvbiddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ3RvU3RyaW5nJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWyd0b1N0cmluZyddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pXG5cdFx0XSxcblx0XHRjb25zdW1lZE1lbWJlcnM6IFtdLFxuXHRcdGFubm90YXRpb25zOiBbXVxuXHR9KTtcblx0cmV0dXJuIG1ldGFDbGFzcztcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29vcmRpbmF0ZS5tYXBcbiIsIi8vIEdlbmVyYXRlZCBieSBONEpTIHRyYW5zcGlsZXI7IGZvciBjb3B5cmlnaHQgc2VlIG9yaWdpbmFsIE40SlMgc291cmNlIGZpbGUuXG5cbmltcG9ydCAnbjRqcy1ydW50aW1lJ1xuXG5leHBvcnQgZnVuY3Rpb24gTW92ZShzcGVjKSB7XG5cdGNvbnN0ICRzcGVjT2JqID0gc3BlYyB8fCB7fTtcblx0KHtcblx0XHRwaWVjZTogdGhpcy5waWVjZSxcblx0XHRmcm9tUG9zOiB0aGlzLmZyb21Qb3MsXG5cdFx0dG9Qb3M6IHRoaXMudG9Qb3Ncblx0fSA9ICRzcGVjT2JqKTtcbn1cbiRtYWtlQ2xhc3MoTW92ZSwgTjRPYmplY3QsIFtdLCB7XG5cdHRvU3RyaW5nOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nX19fbjQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5waWVjZSArICcgJyArIHRoaXMuZnJvbVBvcy5nZXRCb2FyZENvb3JkaW5hdGVSZXByZXNlbnRhdGlvbigpICsgJ+KGkicgKyB0aGlzLnRvUG9zLmdldEJvYXJkQ29vcmRpbmF0ZVJlcHJlc2VudGF0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRwaWVjZToge1xuXHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0d3JpdGFibGU6IHRydWVcblx0fSxcblx0ZnJvbVBvczoge1xuXHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0d3JpdGFibGU6IHRydWVcblx0fSxcblx0dG9Qb3M6IHtcblx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdHdyaXRhYmxlOiB0cnVlXG5cdH1cbn0sIHt9LCBmdW5jdGlvbihpbnN0YW5jZVByb3RvLCBzdGF0aWNQcm90bykge1xuXHR2YXIgbWV0YUNsYXNzID0gbmV3IE40Q2xhc3Moe1xuXHRcdG5hbWU6ICdNb3ZlJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnTW92ZS9Nb3ZlJyxcblx0XHRuNHN1cGVyVHlwZTogTjRPYmplY3QubjR0eXBlLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAncGllY2UnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnZnJvbVBvcycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICd0b1BvcycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjb25zdHJ1Y3RvcicsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY29uc3RydWN0b3InXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICd0b1N0cmluZycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1sndG9TdHJpbmcnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KVxuXHRcdF0sXG5cdFx0Y29uc3VtZWRNZW1iZXJzOiBbXSxcblx0XHRhbm5vdGF0aW9uczogW11cblx0fSk7XG5cdHJldHVybiBtZXRhQ2xhc3M7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1vdmUubWFwXG4iLCIvLyBHZW5lcmF0ZWQgYnkgTjRKUyB0cmFuc3BpbGVyOyBmb3IgY29weXJpZ2h0IHNlZSBvcmlnaW5hbCBONEpTIHNvdXJjZSBmaWxlLlxuXG5pbXBvcnQgJ240anMtcnVudGltZSdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdmFyIENvb3JkaW5hdGVTcXVhcmVQcm9wcyA9IHt9O1xuQ29vcmRpbmF0ZVNxdWFyZVByb3BzLiRmaWVsZERlZmF1bHRzID0ge1xuXHRsYWJlbDogdW5kZWZpbmVkXG59O1xuQ29vcmRpbmF0ZVNxdWFyZVByb3BzLiRtZXRob2RzID0ge307XG4kbWFrZUludGVyZmFjZShDb29yZGluYXRlU3F1YXJlUHJvcHMsIHVuZGVmaW5lZCwgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONEludGVyZmFjZSh7XG5cdFx0bmFtZTogJ0Nvb3JkaW5hdGVTcXVhcmVQcm9wcycsXG5cdFx0b3JpZ2luOiAnY2hlc3MtcmVhY3QnLFxuXHRcdGZxbjogJ2NvbXBvbmVudHMvQ29vcmRpbmF0ZVNxdWFyZS9Db29yZGluYXRlU3F1YXJlUHJvcHMnLFxuXHRcdG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdsYWJlbCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KVxuXHRcdF0sXG5cdFx0Y29uc3VtZWRNZW1iZXJzOiBbXSxcblx0XHRhbm5vdGF0aW9uczogW11cblx0fSk7XG5cdHJldHVybiBtZXRhQ2xhc3M7XG59KTtcbmNvbnN0IGxhYmVsU3F1YXJlU3R5bGVzID0ge1xuXHRmb250U2l6ZTogJzJ2dycsXG5cdHRleHRBbGlnbjogJ2NlbnRlcicsXG5cdGRpc3BsYXk6ICdmbGV4Jyxcblx0anVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuXHRhbGlnbkl0ZW1zOiAnY2VudGVyJyxcblx0d2lkdGg6ICcxMDAlJyxcblx0aGVpZ2h0OiAnMTAwJSdcbn07XG5leHBvcnQgZnVuY3Rpb24gTGFiZWxTcXVhcmUocHJvcHMpIHtcblx0UmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHByb3BzKTtcbn1cbiRtYWtlQ2xhc3MoTGFiZWxTcXVhcmUsIFJlYWN0LkNvbXBvbmVudCwgW10sIHtcblx0cmVuZGVyOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcl9fX240KCkge1xuXHRcdFx0cmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3R5bGU6IGxhYmVsU3F1YXJlU3R5bGVzXG5cdFx0XHR9KSwgdGhpcy5wcm9wcy5sYWJlbCkpO1xuXHRcdH1cblx0fVxufSwge30sIGZ1bmN0aW9uKGluc3RhbmNlUHJvdG8sIHN0YXRpY1Byb3RvKSB7XG5cdHZhciBtZXRhQ2xhc3MgPSBuZXcgTjRDbGFzcyh7XG5cdFx0bmFtZTogJ0xhYmVsU3F1YXJlJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy9Db29yZGluYXRlU3F1YXJlL0xhYmVsU3F1YXJlJyxcblx0XHRuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAncmVuZGVyJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydyZW5kZXInXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KVxuXHRcdF0sXG5cdFx0Y29uc3VtZWRNZW1iZXJzOiBbXSxcblx0XHRhbm5vdGF0aW9uczogW11cblx0fSk7XG5cdHJldHVybiBtZXRhQ2xhc3M7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvb3JkaW5hdGVTcXVhcmUubWFwXG4iLCIvLyBHZW5lcmF0ZWQgYnkgTjRKUyB0cmFuc3BpbGVyOyBmb3IgY29weXJpZ2h0IHNlZSBvcmlnaW5hbCBONEpTIHNvdXJjZSBmaWxlLlxuXG5pbXBvcnQgJ240anMtcnVudGltZSdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdmFyIFNxdWFyZVByb3BzID0ge307XG5TcXVhcmVQcm9wcy4kZmllbGREZWZhdWx0cyA9IHtcblx0aXNXaGl0ZTogdW5kZWZpbmVkLFxuXHRwaWVjZTogdW5kZWZpbmVkLFxuXHRvbkNsaWNrOiB1bmRlZmluZWQsXG5cdGlzUGlja2VkOiB1bmRlZmluZWQsXG5cdGlzVmFsaWREZXN0aW5hdGlvbjogdW5kZWZpbmVkXG59O1xuU3F1YXJlUHJvcHMuJG1ldGhvZHMgPSB7fTtcbiRtYWtlSW50ZXJmYWNlKFNxdWFyZVByb3BzLCB1bmRlZmluZWQsIGZ1bmN0aW9uKGluc3RhbmNlUHJvdG8sIHN0YXRpY1Byb3RvKSB7XG5cdHZhciBtZXRhQ2xhc3MgPSBuZXcgTjRJbnRlcmZhY2Uoe1xuXHRcdG5hbWU6ICdTcXVhcmVQcm9wcycsXG5cdFx0b3JpZ2luOiAnY2hlc3MtcmVhY3QnLFxuXHRcdGZxbjogJ2NvbXBvbmVudHMvU3F1YXJlL1NxdWFyZVByb3BzJyxcblx0XHRuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnaXNXaGl0ZScsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdwaWVjZScsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdvbkNsaWNrJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ2lzUGlja2VkJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ2lzVmFsaWREZXN0aW5hdGlvbicsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KVxuXHRcdF0sXG5cdFx0Y29uc3VtZWRNZW1iZXJzOiBbXSxcblx0XHRhbm5vdGF0aW9uczogW11cblx0fSk7XG5cdHJldHVybiBtZXRhQ2xhc3M7XG59KTtcbmNvbnN0IGJvYXJkU3F1YXJlU3R5bGVzID0ge1xuXHRkaXNwbGF5OiAnZmxleCcsXG5cdGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcblx0YWxpZ25JdGVtczogJ2NlbnRlcicsXG5cdHdpZHRoOiAnMTAwJScsXG5cdGhlaWdodDogJzEwMCUnLFxuXHRmb250U2l6ZTogJzV2dydcbn07XG5leHBvcnQgZnVuY3Rpb24gU3F1YXJlKHByb3BzKSB7XG5cdGxldCBiYWNrZ3JvdW5kQ29sb3IgPSBwcm9wcy5pc1doaXRlID8gJyNFQURBQjknIDogJyNDMkE0ODInO1xuXHRpZiAocHJvcHMuaXNQaWNrZWQpIHtcblx0XHRiYWNrZ3JvdW5kQ29sb3IgPSAnbGltZSc7XG5cdH0gZWxzZSBpZiAocHJvcHMuaXNWYWxpZERlc3RpbmF0aW9uKSB7XG5cdFx0YmFja2dyb3VuZENvbG9yID0gJ3llbGxvdyc7XG5cdH1cblx0cmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnLCBPYmplY3QuYXNzaWduKHtcblx0XHRzdHlsZTogT2JqZWN0LmFzc2lnbih7fSwgYm9hcmRTcXVhcmVTdHlsZXMsIHtcblx0XHRcdGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yXG5cdFx0fSksXG5cdFx0b25DbGljazogcHJvcHMub25DbGlja1xuXHR9KSwgcHJvcHMucGllY2UpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNxdWFyZS5tYXBcbiIsIi8vIEdlbmVyYXRlZCBieSBONEpTIHRyYW5zcGlsZXI7IGZvciBjb3B5cmlnaHQgc2VlIG9yaWdpbmFsIE40SlMgc291cmNlIGZpbGUuXG5cbmltcG9ydCAnbjRqcy1ydW50aW1lJ1xuaW1wb3J0IHtDb29yZGluYXRlfSBmcm9tICcuLi9Db29yZGluYXRlJ1xuaW1wb3J0IHtMYWJlbFNxdWFyZX0gZnJvbSAnLi9Db29yZGluYXRlU3F1YXJlJ1xuaW1wb3J0IHtTcXVhcmV9IGZyb20gJy4vU3F1YXJlJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB2YXIgQm9hcmRQcm9wcyA9IHt9O1xuQm9hcmRQcm9wcy4kZmllbGREZWZhdWx0cyA9IHtcblx0c3F1YXJlczogdW5kZWZpbmVkLFxuXHRwaWNrZWRTcXVhcmU6IHVuZGVmaW5lZCxcblx0dmFsaWREZXN0aW5hdGlvbnM6IHVuZGVmaW5lZCxcblx0b25DbGljazogdW5kZWZpbmVkXG59O1xuQm9hcmRQcm9wcy4kbWV0aG9kcyA9IHt9O1xuJG1ha2VJbnRlcmZhY2UoQm9hcmRQcm9wcywgdW5kZWZpbmVkLCBmdW5jdGlvbihpbnN0YW5jZVByb3RvLCBzdGF0aWNQcm90bykge1xuXHR2YXIgbWV0YUNsYXNzID0gbmV3IE40SW50ZXJmYWNlKHtcblx0XHRuYW1lOiAnQm9hcmRQcm9wcycsXG5cdFx0b3JpZ2luOiAnY2hlc3MtcmVhY3QnLFxuXHRcdGZxbjogJ2NvbXBvbmVudHMvQm9hcmQvQm9hcmRQcm9wcycsXG5cdFx0bjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcblx0XHRhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuXHRcdG93bmVkTWVtYmVyczogW1xuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3NxdWFyZXMnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAncGlja2VkU3F1YXJlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3ZhbGlkRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ29uQ2xpY2snLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG5jb25zdCBib2FyZFN0eWxlcyA9IHtcblx0ZGlzcGxheTogJ2ZsZXgnLFxuXHRmbGV4V3JhcDogJ3dyYXAnLFxuXHR3aWR0aDogJzEwMCUnLFxuXHRoZWlnaHQ6ICcxMDAlJ1xufTtcbmNvbnN0IHNxdWFyZVN0eWxlcyA9IHtcblx0d2lkdGg6ICcxMCUnLFxuXHRoZWlnaHQ6ICcxMCUnXG59O1xuZXhwb3J0IGZ1bmN0aW9uIEJvYXJkKHByb3BzKSB7XG5cdFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwcm9wcyk7XG59XG4kbWFrZUNsYXNzKEJvYXJkLCBSZWFjdC5Db21wb25lbnQsIFtdLCB7XG5cdHJlbmRlclNxdWFyZToge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTcXVhcmVfX19uNChwb3MsIGlzV2hpdGUsIGlzUGlja2VkLCBpc1ZhbGlkRGVzdGluYXRpb24sIHBpZWNlKSB7XG5cdFx0XHRyZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0XHRzdHlsZTogc3F1YXJlU3R5bGVzXG5cdFx0XHR9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChTcXVhcmUsIE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0XHRpc1doaXRlOiBpc1doaXRlLFxuXHRcdFx0XHRpc1BpY2tlZDogaXNQaWNrZWQsXG5cdFx0XHRcdGlzVmFsaWREZXN0aW5hdGlvbjogaXNWYWxpZERlc3RpbmF0aW9uLFxuXHRcdFx0XHRwaWVjZTogcGllY2UsXG5cdFx0XHRcdG9uQ2xpY2s6ICgpPT50aGlzLnByb3BzLm9uQ2xpY2socG9zKVxuXHRcdFx0fSkpKSk7XG5cdFx0fVxuXHR9LFxuXHRyZW5kZXJDb29yZGluYXRlU3F1YXJlOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlckNvb3JkaW5hdGVTcXVhcmVfX19uNChsYWJlbCkge1xuXHRcdFx0cmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3R5bGU6IHNxdWFyZVN0eWxlc1xuXHRcdFx0fSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGFiZWxTcXVhcmUsIE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0XHRsYWJlbDogbGFiZWxcblx0XHRcdH0pKSkpO1xuXHRcdH1cblx0fSxcblx0cmVuZGVyU3F1YXJlczoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTcXVhcmVzX19fbjQoKSB7XG5cdFx0XHRjb25zdCBzcXVhcmVzID0gbmV3IEFycmF5KCk7XG5cdFx0XHRsZXQgaXNXaGl0ZUluaXRpYWwgPSB0cnVlO1xuXHRcdFx0c3F1YXJlcy5wdXNoKHRoaXMucmVuZGVyQ29vcmRpbmF0ZVNxdWFyZSgnJykpO1xuXHRcdFx0Zm9yKGxldCBpID0gMDtpIDwgODtpKyspIHtcblx0XHRcdFx0c3F1YXJlcy5wdXNoKHRoaXMucmVuZGVyQ29vcmRpbmF0ZVNxdWFyZShTdHJpbmcuZnJvbUNoYXJDb2RlKCdhJy5jaGFyQ29kZUF0KDApICsgaSkpKTtcblx0XHRcdH1cblx0XHRcdHNxdWFyZXMucHVzaCh0aGlzLnJlbmRlckNvb3JkaW5hdGVTcXVhcmUoJycpKTtcblx0XHRcdGZvcihsZXQgcm93ID0gMDtyb3cgPCA4O3JvdysrKSB7XG5cdFx0XHRcdHNxdWFyZXMucHVzaCh0aGlzLnJlbmRlckNvb3JkaW5hdGVTcXVhcmUoKDggLSByb3cpLnRvU3RyaW5nKCkpKTtcblx0XHRcdFx0bGV0IGlzV2hpdGUgPSBpc1doaXRlSW5pdGlhbDtcblx0XHRcdFx0Zm9yKGxldCBjb2wgPSAwO2NvbCA8IDg7Y29sKyspIHtcblx0XHRcdFx0XHRjb25zdCBwb3MgPSBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHJvdyxcblx0XHRcdFx0XHRcdGNvbDogY29sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Y29uc3QgaXNQb3RlbnRpYWxEZXN0aW5hdGlvbiA9IHRoaXMucHJvcHMudmFsaWREZXN0aW5hdGlvbnMuZmluZEluZGV4KChwb3RlbnRpYWxEZXN0KT0+cG90ZW50aWFsRGVzdC5lcXVhbHMocG9zKSkgPj0gMDtcblx0XHRcdFx0XHRzcXVhcmVzLnB1c2godGhpcy5yZW5kZXJTcXVhcmUocG9zLCBpc1doaXRlLCB0aGlzLnByb3BzLnBpY2tlZFNxdWFyZSAmJiB0aGlzLnByb3BzLnBpY2tlZFNxdWFyZS5lcXVhbHMocG9zKSA/IHRydWUgOiBmYWxzZSwgaXNQb3RlbnRpYWxEZXN0aW5hdGlvbiwgdGhpcy5wcm9wcy5zcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2xdKSk7XG5cdFx0XHRcdFx0aXNXaGl0ZSA9ICFpc1doaXRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlzV2hpdGVJbml0aWFsID0gIWlzV2hpdGVJbml0aWFsO1xuXHRcdFx0XHRzcXVhcmVzLnB1c2godGhpcy5yZW5kZXJDb29yZGluYXRlU3F1YXJlKCg4IC0gcm93KS50b1N0cmluZygpKSk7XG5cdFx0XHR9XG5cdFx0XHRzcXVhcmVzLnB1c2godGhpcy5yZW5kZXJDb29yZGluYXRlU3F1YXJlKCcnKSk7XG5cdFx0XHRmb3IobGV0IGkgPSAwO2kgPCA4O2krKykge1xuXHRcdFx0XHRzcXVhcmVzLnB1c2godGhpcy5yZW5kZXJDb29yZGluYXRlU3F1YXJlKFN0cmluZy5mcm9tQ2hhckNvZGUoJ2EnLmNoYXJDb2RlQXQoMCkgKyBpKSkpO1xuXHRcdFx0fVxuXHRcdFx0c3F1YXJlcy5wdXNoKHRoaXMucmVuZGVyQ29vcmRpbmF0ZVNxdWFyZSgnJykpO1xuXHRcdFx0cmV0dXJuIHNxdWFyZXM7XG5cdFx0fVxuXHR9LFxuXHRyZW5kZXI6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyX19fbjQoKSB7XG5cdFx0XHRyZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0XHRzdHlsZTogYm9hcmRTdHlsZXNcblx0XHRcdH0pLCB0aGlzLnJlbmRlclNxdWFyZXMoKSkpO1xuXHRcdH1cblx0fVxufSwge30sIGZ1bmN0aW9uKGluc3RhbmNlUHJvdG8sIHN0YXRpY1Byb3RvKSB7XG5cdHZhciBtZXRhQ2xhc3MgPSBuZXcgTjRDbGFzcyh7XG5cdFx0bmFtZTogJ0JvYXJkJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy9Cb2FyZC9Cb2FyZCcsXG5cdFx0bjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcblx0XHRhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuXHRcdG93bmVkTWVtYmVyczogW1xuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ3JlbmRlclNxdWFyZScsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1sncmVuZGVyU3F1YXJlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAncmVuZGVyQ29vcmRpbmF0ZVNxdWFyZScsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1sncmVuZGVyQ29vcmRpbmF0ZVNxdWFyZSddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ3JlbmRlclNxdWFyZXMnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ3JlbmRlclNxdWFyZXMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdyZW5kZXInLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ3JlbmRlciddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pXG5cdFx0XSxcblx0XHRjb25zdW1lZE1lbWJlcnM6IFtdLFxuXHRcdGFubm90YXRpb25zOiBbXVxuXHR9KTtcblx0cmV0dXJuIG1ldGFDbGFzcztcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Qm9hcmQubWFwXG4iLCIvLyBHZW5lcmF0ZWQgYnkgTjRKUyB0cmFuc3BpbGVyOyBmb3IgY29weXJpZ2h0IHNlZSBvcmlnaW5hbCBONEpTIHNvdXJjZSBmaWxlLlxuXG5pbXBvcnQgJ240anMtcnVudGltZSdcbmltcG9ydCB7Q29vcmRpbmF0ZX0gZnJvbSAnLi4vQ29vcmRpbmF0ZSdcbmltcG9ydCB7TW92ZX0gZnJvbSAnLi4vTW92ZSdcbmltcG9ydCB7Qm9hcmR9IGZyb20gJy4vQm9hcmQnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxudmFyIFNuYXBzaG90ID0ge307XG5TbmFwc2hvdC4kZmllbGREZWZhdWx0cyA9IHtcblx0c3F1YXJlczogdW5kZWZpbmVkLFxuXHRsYXN0TW92ZXM6IHVuZGVmaW5lZCxcblx0d2hpdGVLaW5nTW92ZWQ6IHVuZGVmaW5lZCxcblx0bGVmdFdoaXRlUm9va01vdmVkOiB1bmRlZmluZWQsXG5cdHJpZ2h0V2hpdGVSb29rTW92ZWQ6IHVuZGVmaW5lZCxcblx0YmxhY2tLaW5nTW92ZWQ6IHVuZGVmaW5lZCxcblx0bGVmdEJsYWNrUm9va01vdmVkOiB1bmRlZmluZWQsXG5cdHJpZ2h0QmxhY2tSb29rTW92ZWQ6IHVuZGVmaW5lZFxufTtcblNuYXBzaG90LiRtZXRob2RzID0ge307XG4kbWFrZUludGVyZmFjZShTbmFwc2hvdCwgdW5kZWZpbmVkLCBmdW5jdGlvbihpbnN0YW5jZVByb3RvLCBzdGF0aWNQcm90bykge1xuXHR2YXIgbWV0YUNsYXNzID0gbmV3IE40SW50ZXJmYWNlKHtcblx0XHRuYW1lOiAnU25hcHNob3QnLFxuXHRcdG9yaWdpbjogJ2NoZXNzLXJlYWN0Jyxcblx0XHRmcW46ICdjb21wb25lbnRzL0dhbWUvU25hcHNob3QnLFxuXHRcdG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdzcXVhcmVzJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ2xhc3RNb3ZlcycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICd3aGl0ZUtpbmdNb3ZlZCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdsZWZ0V2hpdGVSb29rTW92ZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAncmlnaHRXaGl0ZVJvb2tNb3ZlZCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdibGFja0tpbmdNb3ZlZCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdsZWZ0QmxhY2tSb29rTW92ZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAncmlnaHRCbGFja1Jvb2tNb3ZlZCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KVxuXHRcdF0sXG5cdFx0Y29uc3VtZWRNZW1iZXJzOiBbXSxcblx0XHRhbm5vdGF0aW9uczogW11cblx0fSk7XG5cdHJldHVybiBtZXRhQ2xhc3M7XG59KTtcbnZhciBHYW1lU3RhdGUgPSB7fTtcbkdhbWVTdGF0ZS4kZmllbGREZWZhdWx0cyA9IHtcblx0aGlzdG9yeTogdW5kZWZpbmVkLFxuXHRzdGVwTnVtYmVyOiB1bmRlZmluZWQsXG5cdHdoaXRlSXNOZXh0OiB1bmRlZmluZWQsXG5cdHBpY2tlZFNxdWFyZTogdW5kZWZpbmVkLFxuXHR2YWxpZERlc3RpbmF0aW9uczogdW5kZWZpbmVkXG59O1xuR2FtZVN0YXRlLiRtZXRob2RzID0ge307XG4kbWFrZUludGVyZmFjZShHYW1lU3RhdGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONEludGVyZmFjZSh7XG5cdFx0bmFtZTogJ0dhbWVTdGF0ZScsXG5cdFx0b3JpZ2luOiAnY2hlc3MtcmVhY3QnLFxuXHRcdGZxbjogJ2NvbXBvbmVudHMvR2FtZS9HYW1lU3RhdGUnLFxuXHRcdG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdoaXN0b3J5Jyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3N0ZXBOdW1iZXInLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnd2hpdGVJc05leHQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAncGlja2VkU3F1YXJlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3ZhbGlkRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pXG5cdFx0XSxcblx0XHRjb25zdW1lZE1lbWJlcnM6IFtdLFxuXHRcdGFubm90YXRpb25zOiBbXVxuXHR9KTtcblx0cmV0dXJuIG1ldGFDbGFzcztcbn0pO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2FtZShwcm9wcykge1xuXHRSZWFjdC5Db21wb25lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcHJvcHMpO1xuXHRjb25zdCBpbml0aWFsU3F1YXJlcyA9IFtcblx0XHRbXG5cdFx0XHQn4pmWJyxcblx0XHRcdCfimZgnLFxuXHRcdFx0J+KZlycsXG5cdFx0XHQn4pmVJyxcblx0XHRcdCfimZQnLFxuXHRcdFx0J+KZlycsXG5cdFx0XHQn4pmYJyxcblx0XHRcdCfimZYnXG5cdFx0XSxcblx0XHRbXG5cdFx0XHQn4pmZJyxcblx0XHRcdCfimZknLFxuXHRcdFx0J+KZmScsXG5cdFx0XHQn4pmZJyxcblx0XHRcdCfimZknLFxuXHRcdFx0J+KZmScsXG5cdFx0XHQn4pmZJyxcblx0XHRcdCfimZknXG5cdFx0XSxcblx0XHRbXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGxcblx0XHRdLFxuXHRcdFtcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsXG5cdFx0XSxcblx0XHRbXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0J+KZnycsXG5cdFx0XHQn4pmfJyxcblx0XHRcdCfimZ8nLFxuXHRcdFx0J+KZnycsXG5cdFx0XHQn4pmfJyxcblx0XHRcdCfimZ8nLFxuXHRcdFx0J+KZnycsXG5cdFx0XHQn4pmfJ1xuXHRcdF0sXG5cdFx0W1xuXHRcdFx0J+KZnCcsXG5cdFx0XHQn4pmeJyxcblx0XHRcdCfimZ0nLFxuXHRcdFx0J+KZmycsXG5cdFx0XHQn4pmaJyxcblx0XHRcdCfimZ0nLFxuXHRcdFx0J+KZnicsXG5cdFx0XHQn4pmcJ1xuXHRcdF1cblx0XTtcblx0dGhpcy5zdGF0ZSA9IHtcblx0XHRoaXN0b3J5OiBbXG5cdFx0XHR7XG5cdFx0XHRcdHNxdWFyZXM6IGluaXRpYWxTcXVhcmVzLFxuXHRcdFx0XHRsYXN0TW92ZXM6IG5ldyBBcnJheSgpLFxuXHRcdFx0XHR3aGl0ZUtpbmdNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdGxlZnRXaGl0ZVJvb2tNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdHJpZ2h0V2hpdGVSb29rTW92ZWQ6IGZhbHNlLFxuXHRcdFx0XHRibGFja0tpbmdNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdGxlZnRCbGFja1Jvb2tNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdHJpZ2h0QmxhY2tSb29rTW92ZWQ6IGZhbHNlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdGVwTnVtYmVyOiAwLFxuXHRcdHdoaXRlSXNOZXh0OiB0cnVlLFxuXHRcdHBpY2tlZFNxdWFyZTogbnVsbCxcblx0XHR2YWxpZERlc3RpbmF0aW9uczogbmV3IEFycmF5KClcblx0fTtcbn1cbiRtYWtlQ2xhc3MoR2FtZSwgUmVhY3QuQ29tcG9uZW50LCBbXSwge1xuXHRoYW5kbGVDbGljazoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDbGlja19fX240KHNlbGVjdGVkUG9zKSB7XG5cdFx0XHRjb25zdCByb3cgPSBzZWxlY3RlZFBvcy5yb3c7XG5cdFx0XHRjb25zdCBjb2wgPSBzZWxlY3RlZFBvcy5jb2w7XG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gdGhpcy5zdGF0ZS5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuc3RhdGUuc3RlcE51bWJlciArIDEpO1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IGhpc3RvcnlbaGlzdG9yeS5sZW5ndGggLSAxXTtcblx0XHRcdGNvbnN0IHBpY2tlZFNxdWFyZSA9IHRoaXMuc3RhdGUucGlja2VkU3F1YXJlO1xuXHRcdFx0bGV0IHNxdWFyZXMgPSBjdXJyZW50LnNxdWFyZXM7XG5cdFx0XHRpZiAodGhpcy5jYWxjdWxhdGVXaW5uZXIoc3F1YXJlcykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY3VycmVudHBpZWNlID0gc3F1YXJlc1tyb3ddW2NvbF07XG5cdFx0XHRpZiAoKCh0aGlzLmlzV2hpdGVwaWVjZShjdXJyZW50cGllY2UpICYmIHRoaXMuc3RhdGUud2hpdGVJc05leHQpKSB8fCAoKHRoaXMuaXNCbGFja3BpZWNlKGN1cnJlbnRwaWVjZSkgJiYgIXRoaXMuc3RhdGUud2hpdGVJc05leHQpKSkge1xuXHRcdFx0XHRjb25zdCB2YWxpZERlc3RpbmF0aW9ucyA9IHRoaXMuY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMoc3F1YXJlcywgY3VycmVudHBpZWNlLCBzZWxlY3RlZFBvcyk7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRcdHBpY2tlZFNxdWFyZTogc2VsZWN0ZWRQb3MsXG5cdFx0XHRcdFx0dmFsaWREZXN0aW5hdGlvbnM6IHZhbGlkRGVzdGluYXRpb25zXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXBpY2tlZFNxdWFyZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhdHRlbXB0ZWRNb3ZlID0gbmV3IE1vdmUoe1xuXHRcdFx0XHRwaWVjZTogc3F1YXJlc1twaWNrZWRTcXVhcmUucm93XVtwaWNrZWRTcXVhcmUuY29sXSxcblx0XHRcdFx0ZnJvbVBvczogcGlja2VkU3F1YXJlLFxuXHRcdFx0XHR0b1Bvczogc2VsZWN0ZWRQb3Ncblx0XHRcdH0pO1xuXHRcdFx0aWYgKHRoaXMuaXNWYWxpZE1vdmUoc3F1YXJlcywgYXR0ZW1wdGVkTW92ZSkpIHtcblx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdHNxdWFyZXM6IG5ld1NxdWFyZXMsXG5cdFx0XHRcdFx0bW92ZXNcblx0XHRcdFx0fSA9IHRoaXMubW92ZShhdHRlbXB0ZWRNb3ZlKTtcblx0XHRcdFx0bGV0IHdoaXRlS2luZ01vdmVkID0gY3VycmVudC53aGl0ZUtpbmdNb3ZlZDtcblx0XHRcdFx0bGV0IGxlZnRXaGl0ZVJvb2tNb3ZlZCA9IGN1cnJlbnQubGVmdFdoaXRlUm9va01vdmVkO1xuXHRcdFx0XHRsZXQgcmlnaHRXaGl0ZVJvb2tNb3ZlZCA9IGN1cnJlbnQucmlnaHRXaGl0ZVJvb2tNb3ZlZDtcblx0XHRcdFx0bGV0IGJsYWNrS2luZ01vdmVkID0gY3VycmVudC5ibGFja0tpbmdNb3ZlZDtcblx0XHRcdFx0bGV0IGxlZnRCbGFja1Jvb2tNb3ZlZCA9IGN1cnJlbnQubGVmdEJsYWNrUm9va01vdmVkO1xuXHRcdFx0XHRsZXQgcmlnaHRCbGFja1Jvb2tNb3ZlZCA9IGN1cnJlbnQucmlnaHRCbGFja1Jvb2tNb3ZlZDtcblx0XHRcdFx0aWYgKHRoaXMuaXNXaGl0ZXBpZWNlKGF0dGVtcHRlZE1vdmUucGllY2UpKSB7XG5cdFx0XHRcdFx0d2hpdGVLaW5nTW92ZWQgPSB3aGl0ZUtpbmdNb3ZlZCB8fCAoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmUJyk7XG5cdFx0XHRcdFx0bGVmdFdoaXRlUm9va01vdmVkID0gbGVmdFdoaXRlUm9va01vdmVkIHx8ICgoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmWJykgJiYgcGlja2VkU3F1YXJlLmNvbCA9PSAwKTtcblx0XHRcdFx0XHRyaWdodFdoaXRlUm9va01vdmVkID0gcmlnaHRXaGl0ZVJvb2tNb3ZlZCB8fCAoKGF0dGVtcHRlZE1vdmUucGllY2UgPT0gJ+KZlicpICYmIHBpY2tlZFNxdWFyZS5jb2wgPT0gNyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YmxhY2tLaW5nTW92ZWQgPSBibGFja0tpbmdNb3ZlZCB8fCAoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmaJyk7XG5cdFx0XHRcdFx0bGVmdEJsYWNrUm9va01vdmVkID0gbGVmdEJsYWNrUm9va01vdmVkIHx8ICgoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmcJykgJiYgcGlja2VkU3F1YXJlLmNvbCA9PSAwKTtcblx0XHRcdFx0XHRyaWdodEJsYWNrUm9va01vdmVkID0gcmlnaHRCbGFja1Jvb2tNb3ZlZCB8fCAoKGF0dGVtcHRlZE1vdmUucGllY2UgPT0gJ+KZnCcpICYmIHBpY2tlZFNxdWFyZS5jb2wgPT0gNyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0aGlzdG9yeTogaGlzdG9yeS5jb25jYXQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRzcXVhcmVzOiBuZXdTcXVhcmVzLFxuXHRcdFx0XHRcdFx0XHRsYXN0TW92ZXM6IG1vdmVzLFxuXHRcdFx0XHRcdFx0XHR3aGl0ZUtpbmdNb3ZlZDogd2hpdGVLaW5nTW92ZWQsXG5cdFx0XHRcdFx0XHRcdGxlZnRXaGl0ZVJvb2tNb3ZlZDogbGVmdFdoaXRlUm9va01vdmVkLFxuXHRcdFx0XHRcdFx0XHRyaWdodFdoaXRlUm9va01vdmVkOiByaWdodFdoaXRlUm9va01vdmVkLFxuXHRcdFx0XHRcdFx0XHRibGFja0tpbmdNb3ZlZDogYmxhY2tLaW5nTW92ZWQsXG5cdFx0XHRcdFx0XHRcdGxlZnRCbGFja1Jvb2tNb3ZlZDogbGVmdEJsYWNrUm9va01vdmVkLFxuXHRcdFx0XHRcdFx0XHRyaWdodEJsYWNrUm9va01vdmVkOiByaWdodEJsYWNrUm9va01vdmVkXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0c3RlcE51bWJlcjogaGlzdG9yeS5sZW5ndGgsXG5cdFx0XHRcdFx0d2hpdGVJc05leHQ6ICF0aGlzLnN0YXRlLndoaXRlSXNOZXh0LFxuXHRcdFx0XHRcdHBpY2tlZFNxdWFyZTogbnVsbCxcblx0XHRcdFx0XHR2YWxpZERlc3RpbmF0aW9uczogbmV3IEFycmF5KClcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRwaWNrZWRTcXVhcmU6IG51bGwsXG5cdFx0XHRcdFx0dmFsaWREZXN0aW5hdGlvbnM6IG5ldyBBcnJheSgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0Z29Ub1N0ZXA6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ29Ub1N0ZXBfX19uNChzdGVwKSB7XG5cdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0c3RlcE51bWJlcjogc3RlcCxcblx0XHRcdFx0d2hpdGVJc05leHQ6IChzdGVwICUgMikgPT09IDAsXG5cdFx0XHRcdHBpY2tlZFNxdWFyZTogbnVsbCxcblx0XHRcdFx0dmFsaWREZXN0aW5hdGlvbnM6IG5ldyBBcnJheSgpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdGdldEFsbFBpZWNlc1NhbWVDb2xvcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRBbGxQaWVjZXNTYW1lQ29sb3JfX19uNChzcXVhcmVzLCBpc1doaXRlKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGZvcihsZXQgcm93ID0gMDtyb3cgPCA4O3JvdysrKSB7XG5cdFx0XHRcdGZvcihsZXQgY29sID0gMDtjb2wgPCA4O2NvbCsrKSB7XG5cdFx0XHRcdFx0aWYgKChpc1doaXRlICYmIHRoaXMuaXNXaGl0ZXBpZWNlKHNxdWFyZXNbcm93XVtjb2xdKSkgfHwgKCFpc1doaXRlICYmIHRoaXMuaXNCbGFja3BpZWNlKHNxdWFyZXNbcm93XVtjb2xdKSkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0cGllY2U6IHNxdWFyZXNbcm93XVtjb2xdLFxuXHRcdFx0XHRcdFx0XHRwb3M6IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRyb3c6IHJvdyxcblx0XHRcdFx0XHRcdFx0XHRjb2w6IGNvbFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0Zm9yQWxsOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvckFsbF9fX240KGEsIHByZWRpY2F0ZSkge1xuXHRcdFx0cmV0dXJuIGEucmVkdWNlKChhY2MsIGVsZW0pPT5hY2MgJiYgcHJlZGljYXRlKGVsZW0pLCB0cnVlKTtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZVdpbm5lcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVXaW5uZXJfX19uNChzcXVhcmVzKSB7XG5cdFx0XHRjb25zdCBpc1doaXRlID0gdGhpcy5zdGF0ZS53aGl0ZUlzTmV4dDtcblx0XHRcdGNvbnN0IGFsbFBpZWNlcyA9IHRoaXMuZ2V0QWxsUGllY2VzU2FtZUNvbG9yKHNxdWFyZXMsIGlzV2hpdGUpO1xuXHRcdFx0Y29uc3QgY2hlY2tNYXRlID0gdGhpcy5mb3JBbGwoYWxsUGllY2VzLCAocCk9PnRoaXMuY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMoc3F1YXJlcywgcC5waWVjZSwgcC5wb3MpLmxlbmd0aCA9PSAwKTtcblx0XHRcdGlmIChjaGVja01hdGUpIHtcblx0XHRcdFx0cmV0dXJuIGlzV2hpdGUgPyAnQmxhY2snIDogJ1doaXRlJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnNfX19uNChzcXVhcmVzLCBwaWVjZSwgcG9zKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmNhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zKHNxdWFyZXMsIHBpZWNlLCBwb3MpO1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChwaWVjZSA9PSAn4pmZJyB8fCBwaWVjZSA9PSAn4pmfJykge1xuXHRcdFx0XHRpZiAoaXNXaGl0ZSAmJiAocG9zLnJvdyA8IDcpKSB7XG5cdFx0XHRcdFx0Y29uc3QgbmV4dFBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcG9zLnJvdyArIDEsXG5cdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2xcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZiAoIXNxdWFyZXNbbmV4dFBvcy5yb3ddW25leHRQb3MuY29sXSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobmV4dFBvcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChwb3Mucm93IDw9IDEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG5leHROZXh0UG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3cgKyAyLFxuXHRcdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2xcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25leHRQb3Mucm93XVtuZXh0UG9zLmNvbF0gJiYgIXNxdWFyZXNbbmV4dE5leHRQb3Mucm93XVtuZXh0TmV4dFBvcy5jb2xdKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5leHROZXh0UG9zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWlzV2hpdGUgJiYgKHBvcy5yb3cgPiAwKSkge1xuXHRcdFx0XHRcdGNvbnN0IG5leHRQb3MgPSBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3cgLSAxLFxuXHRcdFx0XHRcdFx0Y29sOiBwb3MuY29sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25leHRQb3Mucm93XVtuZXh0UG9zLmNvbF0pIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5leHRQb3MpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocG9zLnJvdyA+PSA2KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXh0TmV4dFBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiBwb3Mucm93IC0gMixcblx0XHRcdFx0XHRcdFx0Y29sOiBwb3MuY29sXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICghc3F1YXJlc1tuZXh0UG9zLnJvd11bbmV4dFBvcy5jb2xdICYmICFzcXVhcmVzW25leHROZXh0UG9zLnJvd11bbmV4dE5leHRQb3MuY29sXSkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXh0TmV4dFBvcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5zdGF0ZS5oaXN0b3J5W3RoaXMuc3RhdGUuc3RlcE51bWJlcl07XG5cdFx0XHRpZiAoKHBpZWNlID09ICfimZQnKSAmJiBpc1doaXRlICYmICFjdXJyZW50LndoaXRlS2luZ01vdmVkKSB7XG5cdFx0XHRcdGlmICghY3VycmVudC5sZWZ0V2hpdGVSb29rTW92ZWQgJiYgIXNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbCAtIDFdICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgLSAyXSAmJiAhc3F1YXJlc1twb3Mucm93XVtwb3MuY29sIC0gM10pIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3csXG5cdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2wgLSAyXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghY3VycmVudC5yaWdodFdoaXRlUm9va01vdmVkICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgKyAxXSAmJiAhc3F1YXJlc1twb3Mucm93XVtwb3MuY29sICsgMl0pIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3csXG5cdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2wgKyAyXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwaWVjZSA9PSAn4pmaJykgJiYgIWlzV2hpdGUgJiYgIWN1cnJlbnQuYmxhY2tLaW5nTW92ZWQpIHtcblx0XHRcdFx0aWYgKCFjdXJyZW50LmxlZnRCbGFja1Jvb2tNb3ZlZCAmJiAhc3F1YXJlc1twb3Mucm93XVtwb3MuY29sIC0gMV0gJiYgIXNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbCAtIDJdICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgLSAzXSkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcG9zLnJvdyxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCAtIDJcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFjdXJyZW50LnJpZ2h0QmxhY2tSb29rTW92ZWQgJiYgIXNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbCArIDFdICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgKyAyXSkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcG9zLnJvdyxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCArIDJcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQuZmlsdGVyKCh0b1Bvcyk9PiF0aGlzLmlzS2luZ0luQ2hlY2tJZk1vdmUobmV3IE1vdmUoe1xuXHRcdFx0XHRwaWVjZTogcGllY2UsXG5cdFx0XHRcdGZyb21Qb3M6IHBvcyxcblx0XHRcdFx0dG9Qb3M6IHRvUG9zXG5cdFx0XHR9KSkpO1xuXHRcdH1cblx0fSxcblx0aXNWYWxpZE1vdmU6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gaXNWYWxpZE1vdmVfX19uNChzcXVhcmVzLCBtb3ZlKSB7XG5cdFx0XHRjb25zdCB2YWxpZERlc3RpbmF0aW9ucyA9IHRoaXMuY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMoc3F1YXJlcywgbW92ZS5waWVjZSwgbW92ZS5mcm9tUG9zKTtcblx0XHRcdHJldHVybiB2YWxpZERlc3RpbmF0aW9ucy5maW5kSW5kZXgoKHBvcyk9PnBvcy5lcXVhbHMobW92ZS50b1BvcykpID49IDA7XG5cdFx0fVxuXHR9LFxuXHRpc0luc2lkZUJvYXJkOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGlzSW5zaWRlQm9hcmRfX19uNChjb29yZCkge1xuXHRcdFx0cmV0dXJuICgwIDw9IGNvb3JkLnJvdykgJiYgKGNvb3JkLnJvdyA8IDgpICYmICgwIDw9IGNvb3JkLmNvbCkgJiYgKGNvb3JkLmNvbCA8IDgpO1xuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlS25pZ2h0QXR0YWNraW5nRGVzdGluYXRpb25zOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNhbGN1bGF0ZUtuaWdodEF0dGFja2luZ0Rlc3RpbmF0aW9uc19fX240KHNxdWFyZXMsIHBpZWNlLCBwb3MpIHtcblx0XHRcdGNvbnN0IGRlbHRhcyA9IFtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdC0yXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQtMixcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0LTIsXG5cdFx0XHRcdFx0MVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0LTEsXG5cdFx0XHRcdFx0MlxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQyXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQyLFxuXHRcdFx0XHRcdDFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdFx0LTFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0LTJcblx0XHRcdFx0XVxuXHRcdFx0XTtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IChkZWx0YXMubWFwKChkZWx0YSk9Pm5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0cm93OiBwb3Mucm93ICsgZGVsdGFbMF0sXG5cdFx0XHRcdGNvbDogcG9zLmNvbCArIGRlbHRhWzFdXG5cdFx0XHR9KSkpLmZpbHRlcigoY29vcmQpPT50aGlzLmlzSW5zaWRlQm9hcmQoY29vcmQpICYmICF0aGlzLmlzUG9zaXRpb25PY2N1cGllZEJ5cGllY2VTYW1lQ29sb3Ioc3F1YXJlcywgcGllY2UsIGNvb3JkKSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlUm9va0F0dGFja2luZ0Rlc3RpbmF0aW9uczoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVSb29rQXR0YWNraW5nRGVzdGluYXRpb25zX19fbjQoc3F1YXJlcywgcGllY2UsIHBvcykge1xuXHRcdFx0Y29uc3Qgcm93ID0gcG9zLnJvdztcblx0XHRcdGNvbnN0IGNvbCA9IHBvcy5jb2w7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGNvbnN0IGRlbHRhcyA9IFtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdDBcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0MFxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHQrMVxuXHRcdFx0XHRdXG5cdFx0XHRdO1xuXHRcdFx0Zm9yKGxldCBkZWx0YSBvZiBkZWx0YXMpIHtcblx0XHRcdFx0bGV0IG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRyb3c6IHJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdGNvbDogY29sICsgZGVsdGFbMV1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdoaWxlKHRoaXMuaXNJbnNpZGVCb2FyZChuZXdQb3MpKSB7XG5cdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25ld1Bvcy5yb3ddW25ld1Bvcy5jb2xdKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXdQb3MpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5pc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yKHNxdWFyZXMsIHBpZWNlLCBuZXdQb3MpKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIG5ld1BvcykpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobmV3UG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogbmV3UG9zLnJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdFx0Y29sOiBuZXdQb3MuY29sICsgZGVsdGFbMV1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZUJpc2hvcEF0dGFja2luZ0Rlc3RpbmF0aW9uczoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVCaXNob3BBdHRhY2tpbmdEZXN0aW5hdGlvbnNfX19uNChzcXVhcmVzLCBwaWVjZSwgcG9zKSB7XG5cdFx0XHRjb25zdCByb3cgPSBwb3Mucm93O1xuXHRcdFx0Y29uc3QgY29sID0gcG9zLmNvbDtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuXHRcdFx0Y29uc3QgZGVsdGFzID0gW1xuXHRcdFx0XHRbXG5cdFx0XHRcdFx0LTEsXG5cdFx0XHRcdFx0LTFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdDFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0MVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdXG5cdFx0XHRdO1xuXHRcdFx0Zm9yKGxldCBkZWx0YSBvZiBkZWx0YXMpIHtcblx0XHRcdFx0bGV0IG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRyb3c6IHJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdGNvbDogY29sICsgZGVsdGFbMV1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdoaWxlKHRoaXMuaXNJbnNpZGVCb2FyZChuZXdQb3MpKSB7XG5cdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25ld1Bvcy5yb3ddW25ld1Bvcy5jb2xdKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXdQb3MpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5pc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yKHNxdWFyZXMsIHBpZWNlLCBuZXdQb3MpKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIG5ld1BvcykpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobmV3UG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogbmV3UG9zLnJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdFx0Y29sOiBuZXdQb3MuY29sICsgZGVsdGFbMV1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZVF1ZWVuQXR0YWNraW5nRGVzdGluYXRpb25zOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNhbGN1bGF0ZVF1ZWVuQXR0YWNraW5nRGVzdGluYXRpb25zX19fbjQoc3F1YXJlcywgcGllY2UsIHBvcykge1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChpc1doaXRlKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhbGN1bGF0ZVJvb2tBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgJ+KZlicsIHBvcykuY29uY2F0KHRoaXMuY2FsY3VsYXRlQmlzaG9wQXR0YWNraW5nRGVzdGluYXRpb25zKHNxdWFyZXMsICfimZcnLCBwb3MpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhbGN1bGF0ZVJvb2tBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgJ+KZnCcsIHBvcykuY29uY2F0KHRoaXMuY2FsY3VsYXRlQmlzaG9wQXR0YWNraW5nRGVzdGluYXRpb25zKHNxdWFyZXMsICfimZ0nLCBwb3MpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZUtpbmdBdHRhY2tpbmdEZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlS2luZ0F0dGFja2luZ0Rlc3RpbmF0aW9uc19fX240KHNxdWFyZXMsIHBpZWNlLCBwb3MpIHtcblx0XHRcdGNvbnN0IGRlbHRhcyA9IFtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdC0xXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQtMSxcblx0XHRcdFx0XHQwXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQtMSxcblx0XHRcdFx0XHQxXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdDFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0MVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQwXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQxLFxuXHRcdFx0XHRcdC0xXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdC0xXG5cdFx0XHRcdF1cblx0XHRcdF07XG5cdFx0XHRjb25zdCByZXN1bHQgPSAoZGVsdGFzLm1hcCgoZGVsdGEpPT5uZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdHJvdzogcG9zLnJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRjb2w6IHBvcy5jb2wgKyBkZWx0YVsxXVxuXHRcdFx0fSkpKS5maWx0ZXIoKGNvb3JkKT0+dGhpcy5pc0luc2lkZUJvYXJkKGNvb3JkKSAmJiAhdGhpcy5pc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yKHNxdWFyZXMsIHBpZWNlLCBjb29yZCkpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZVBhd25BdHRhY2tpbmdEZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlUGF3bkF0dGFja2luZ0Rlc3RpbmF0aW9uc19fX240KHNxdWFyZXMsIHBpZWNlLCBwb3MpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChpc1doaXRlICYmIChwb3Mucm93IDwgNykpIHtcblx0XHRcdFx0Zm9yKGxldCBkYyBvZiBbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNrUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0cm93OiBwb3Mucm93ICsgMSxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCArIGRjXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNJbnNpZGVCb2FyZChhdHRhY2tQb3MpICYmIHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIGF0dGFja1BvcykpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGF0dGFja1Bvcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCFpc1doaXRlICYmIChwb3Mucm93ID4gMCkpIHtcblx0XHRcdFx0Zm9yKGxldCBkYyBvZiBbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNrUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0cm93OiBwb3Mucm93IC0gMSxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCArIGRjXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNJbnNpZGVCb2FyZChhdHRhY2tQb3MpICYmIHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIGF0dGFja1BvcykpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGF0dGFja1Bvcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlQXR0YWNrZWREZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlQXR0YWNrZWREZXN0aW5hdGlvbnNfX19uNChzcXVhcmVzLCBwaWVjZSwgcG9zKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gbmV3IEFycmF5KCk7XG5cdFx0XHRzd2l0Y2gocGllY2UpIHtcblx0XHRcdFx0Y2FzZSAoJ+KZmCcpOlxuXHRcdFx0XHRjYXNlICgn4pmeJyk6XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVLbmlnaHRBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgKCfimZYnKTpcblx0XHRcdFx0Y2FzZSAoJ+KZnCcpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2FsY3VsYXRlUm9va0F0dGFja2luZ0Rlc3RpbmF0aW9ucyhzcXVhcmVzLCBwaWVjZSwgcG9zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAoJ+KZlycpOlxuXHRcdFx0XHRjYXNlICgn4pmdJyk6XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVCaXNob3BBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgKCfimZUnKTpcblx0XHRcdFx0Y2FzZSAoJ+KZmycpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2FsY3VsYXRlUXVlZW5BdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgKCfimZQnKTpcblx0XHRcdFx0Y2FzZSAoJ+KZmicpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2FsY3VsYXRlS2luZ0F0dGFja2luZ0Rlc3RpbmF0aW9ucyhzcXVhcmVzLCBwaWVjZSwgcG9zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAoJ+KZlCcpOlxuXHRcdFx0XHRjYXNlICgn4pmaJyk6XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVLaW5nQXR0YWNraW5nRGVzdGluYXRpb25zKHNxdWFyZXMsIHBpZWNlLCBwb3MpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICgn4pmZJyk6XG5cdFx0XHRcdGNhc2UgKCfimZ8nKTpcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLmNhbGN1bGF0ZVBhd25BdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0aXNLaW5nSW5DaGVja0lmTW92ZToge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc0tpbmdJbkNoZWNrSWZNb3ZlX19fbjQoYXR0ZW1wdGVkTW92ZSkge1xuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRzcXVhcmVzOiBjaGFuZ2VkU3F1YXJlc1xuXHRcdFx0fSA9IHRoaXMubW92ZShhdHRlbXB0ZWRNb3ZlKTtcblx0XHRcdGNvbnN0IGlzV2hpdGUgPSB0aGlzLmlzV2hpdGVwaWVjZShhdHRlbXB0ZWRNb3ZlLnBpZWNlKTtcblx0XHRcdGNvbnN0IGtpbmdQb3MgPSB0aGlzLmdldEtpbmdQb3NpdGlvbihjaGFuZ2VkU3F1YXJlcywgaXNXaGl0ZSk7XG5cdFx0XHRpZiAoIWtpbmdQb3MpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuaXNLaW5nSW5DaGVjayhjaGFuZ2VkU3F1YXJlcywgaXNXaGl0ZSA/ICfimZQnIDogJ+KZmicsIGtpbmdQb3MpO1xuXHRcdH1cblx0fSxcblx0aXNLaW5nSW5DaGVjazoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc0tpbmdJbkNoZWNrX19fbjQoc3F1YXJlcywga2luZywgcG9zKSB7XG5cdFx0XHRpZiAoKGtpbmcgIT0gJ+KZlCcpICYmIChraW5nICE9ICfimZonKSkge1xuXHRcdFx0XHR0aHJvdyBcIlRoZSBpbnB1dCBwaWVjZSBpcyBub3QgYSBraW5nXCI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpc1doaXRlS2luZyA9IGtpbmcgPT0gJ+KZlCc7XG5cdFx0XHRjb25zdCBvcHBvbmVudHBpZWNlcyA9IGlzV2hpdGVLaW5nID8gdGhpcy5nZXRQaWVjZXNPZlNhbWVDb2xvcihzcXVhcmVzLCBmYWxzZSkgOiB0aGlzLmdldFBpZWNlc09mU2FtZUNvbG9yKHNxdWFyZXMsIHRydWUpO1xuXHRcdFx0bGV0IHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuXHRcdFx0Zm9yKGxldCBvcHBvbmVudHBpZWNlIG9mIG9wcG9uZW50cGllY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHIgPSB0aGlzLmNhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zKHNxdWFyZXMsIG9wcG9uZW50cGllY2UucGllY2UsIG9wcG9uZW50cGllY2UucG9zKTtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LmNvbmNhdChyKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGIgPSByZXN1bHQuZmluZCgocCk9PnAuZXF1YWxzKHBvcykpID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0cmV0dXJuIGI7XG5cdFx0fVxuXHR9LFxuXHRnZXRQaWVjZXNPZlNhbWVDb2xvcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRQaWVjZXNPZlNhbWVDb2xvcl9fX240KHNxdWFyZXMsIHdoaXRlKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGZvcihsZXQgaSA9IDA7aSA8IHNxdWFyZXMubGVuZ3RoO2krKykge1xuXHRcdFx0XHRmb3IobGV0IGogPSAwO2ogPCBzcXVhcmVzW2ldLmxlbmd0aDtqKyspIHtcblx0XHRcdFx0XHRpZiAod2hpdGUgPyB0aGlzLmlzV2hpdGVwaWVjZShzcXVhcmVzW2ldW2pdKSA6IHRoaXMuaXNCbGFja3BpZWNlKHNxdWFyZXNbaV1bal0pKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHBpZWNlOiBzcXVhcmVzW2ldW2pdLFxuXHRcdFx0XHRcdFx0XHRwb3M6IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRyb3c6IGksXG5cdFx0XHRcdFx0XHRcdFx0Y29sOiBqXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9LFxuXHRnZXRLaW5nUG9zaXRpb246IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0S2luZ1Bvc2l0aW9uX19fbjQoc3F1YXJlcywgaXNXaGl0ZSkge1xuXHRcdFx0Zm9yKGxldCBpID0gMDtpIDwgc3F1YXJlcy5sZW5ndGg7aSsrKSB7XG5cdFx0XHRcdGZvcihsZXQgaiA9IDA7aiA8IHNxdWFyZXNbaV0ubGVuZ3RoO2orKykge1xuXHRcdFx0XHRcdGlmIChpc1doaXRlID8gc3F1YXJlc1tpXVtqXSA9PSAn4pmUJyA6IHNxdWFyZXNbaV1bal0gPT0gJ+KZmicpIHtcblx0XHRcdFx0XHRcdHJldHVybiBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRcdHJvdzogaSxcblx0XHRcdFx0XHRcdFx0Y29sOiBqXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fSxcblx0aXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZVNhbWVDb2xvcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yX19fbjQoc3F1YXJlcywgcGllY2UsIG5ld1Bvcykge1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChpc1doaXRlICYmIHRoaXMuaXNXaGl0ZXBpZWNlKHNxdWFyZXNbbmV3UG9zLnJvd11bbmV3UG9zLmNvbF0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpc1doaXRlICYmIHRoaXMuaXNCbGFja3BpZWNlKHNxdWFyZXNbbmV3UG9zLnJvd11bbmV3UG9zLmNvbF0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0aXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3I6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3JfX19uNChzcXVhcmVzLCBwaWVjZSwgbmV3UG9zKSB7XG5cdFx0XHRjb25zdCBpc1doaXRlID0gdGhpcy5pc1doaXRlcGllY2UocGllY2UpO1xuXHRcdFx0aWYgKGlzV2hpdGUgJiYgdGhpcy5pc0JsYWNrcGllY2Uoc3F1YXJlc1tuZXdQb3Mucm93XVtuZXdQb3MuY29sXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWlzV2hpdGUgJiYgdGhpcy5pc1doaXRlcGllY2Uoc3F1YXJlc1tuZXdQb3Mucm93XVtuZXdQb3MuY29sXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXHRnZXRDdXJyZW50U25hcHNob3Q6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0Q3VycmVudFNuYXBzaG90X19fbjQoKSB7XG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gdGhpcy5zdGF0ZS5oaXN0b3J5O1xuXHRcdFx0cmV0dXJuIGhpc3RvcnlbdGhpcy5zdGF0ZS5zdGVwTnVtYmVyXTtcblx0XHR9XG5cdH0sXG5cdG1vdmU6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gbW92ZV9fX240KGF0dGVtcHRlZE1vdmUpIHtcblx0XHRcdGNvbnN0IHBpZWNlID0gYXR0ZW1wdGVkTW92ZS5waWVjZTtcblx0XHRcdGNvbnN0IGZyb21Qb3MgPSBhdHRlbXB0ZWRNb3ZlLmZyb21Qb3M7XG5cdFx0XHRjb25zdCB0b1BvcyA9IGF0dGVtcHRlZE1vdmUudG9Qb3M7XG5cdFx0XHRjb25zdCBjdXJyZW50U25hcHNob3QgPSB0aGlzLmdldEN1cnJlbnRTbmFwc2hvdCgpO1xuXHRcdFx0Y29uc3Qgc3F1YXJlcyA9IGN1cnJlbnRTbmFwc2hvdC5zcXVhcmVzO1xuXHRcdFx0Y29uc3QgbmV3U3F1YXJlcyA9IHNxdWFyZXMubWFwKChyb3dzKT0+cm93cy5zbGljZSgpKTtcblx0XHRcdGNvbnN0IG1vdmVzID0gbmV3IEFycmF5KCk7XG5cdFx0XHRpZiAodGhpcy5pc0Nhc3RsaW5nTW92ZShwaWVjZSwgZnJvbVBvcywgdG9Qb3MpKSB7XG5cdFx0XHRcdG1vdmVzLnB1c2gobmV3IE1vdmUoe1xuXHRcdFx0XHRcdHBpZWNlOiBwaWVjZSxcblx0XHRcdFx0XHRmcm9tUG9zOiBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IGZyb21Qb3Mucm93LFxuXHRcdFx0XHRcdFx0Y29sOiBmcm9tUG9zLmNvbFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdHRvUG9zOiBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHRvUG9zLnJvdyxcblx0XHRcdFx0XHRcdGNvbDogdG9Qb3MuY29sXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRuZXdTcXVhcmVzW3RvUG9zLnJvd11bdG9Qb3MuY29sXSA9IHBpZWNlO1xuXHRcdFx0XHRuZXdTcXVhcmVzW2Zyb21Qb3Mucm93XVtmcm9tUG9zLmNvbF0gPSBudWxsO1xuXHRcdFx0XHRsZXQgcm9va0Zyb21Qb3M7XG5cdFx0XHRcdGxldCByb29rVG9Qb3M7XG5cdFx0XHRcdGlmIChwaWVjZSA9PSAn4pmUJykge1xuXHRcdFx0XHRcdGlmICh0b1Bvcy5jb2wgPCBmcm9tUG9zLmNvbCkge1xuXHRcdFx0XHRcdFx0cm9va0Zyb21Qb3MgPSBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRcdHJvdzogMCxcblx0XHRcdFx0XHRcdFx0Y29sOiAwXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJvb2tUb1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiAwLFxuXHRcdFx0XHRcdFx0XHRjb2w6IDNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb29rRnJvbVBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiAwLFxuXHRcdFx0XHRcdFx0XHRjb2w6IDdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cm9va1RvUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0XHRyb3c6IDAsXG5cdFx0XHRcdFx0XHRcdGNvbDogNVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICh0b1Bvcy5jb2wgPCBmcm9tUG9zLmNvbCkge1xuXHRcdFx0XHRcdFx0cm9va0Zyb21Qb3MgPSBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRcdHJvdzogNyxcblx0XHRcdFx0XHRcdFx0Y29sOiAwXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJvb2tUb1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiA3LFxuXHRcdFx0XHRcdFx0XHRjb2w6IDNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb29rRnJvbVBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiA3LFxuXHRcdFx0XHRcdFx0XHRjb2w6IDdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cm9va1RvUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0XHRyb3c6IDcsXG5cdFx0XHRcdFx0XHRcdGNvbDogNVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG1vdmVzLnB1c2gobmV3IE1vdmUoe1xuXHRcdFx0XHRcdHBpZWNlOiBzcXVhcmVzW3Jvb2tGcm9tUG9zLnJvd11bcm9va0Zyb21Qb3MuY29sXSxcblx0XHRcdFx0XHRmcm9tUG9zOiByb29rRnJvbVBvcyxcblx0XHRcdFx0XHR0b1Bvczogcm9va1RvUG9zXG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0bmV3U3F1YXJlc1tyb29rVG9Qb3Mucm93XVtyb29rVG9Qb3MuY29sXSA9IHNxdWFyZXNbcm9va0Zyb21Qb3Mucm93XVtyb29rRnJvbVBvcy5jb2xdO1xuXHRcdFx0XHRuZXdTcXVhcmVzW3Jvb2tGcm9tUG9zLnJvd11bcm9va0Zyb21Qb3MuY29sXSA9IG51bGw7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBwaWVjZSA9IHNxdWFyZXNbZnJvbVBvcy5yb3ddW2Zyb21Qb3MuY29sXTtcblx0XHRcdFx0bmV3U3F1YXJlc1t0b1Bvcy5yb3ddW3RvUG9zLmNvbF0gPSBwaWVjZTtcblx0XHRcdFx0bmV3U3F1YXJlc1tmcm9tUG9zLnJvd11bZnJvbVBvcy5jb2xdID0gbnVsbDtcblx0XHRcdFx0bW92ZXMucHVzaChhdHRlbXB0ZWRNb3ZlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNxdWFyZXM6IG5ld1NxdWFyZXMsXG5cdFx0XHRcdG1vdmVzOiBtb3Zlc1xuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cdGlzQ2FzdGxpbmdNb3ZlOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGlzQ2FzdGxpbmdNb3ZlX19fbjQocGllY2UsIGZyb21Qb3MsIHRvUG9zKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50U25hcHNob3QgPSB0aGlzLmdldEN1cnJlbnRTbmFwc2hvdCgpO1xuXHRcdFx0aWYgKHBpZWNlID09ICfimZQnICYmICFjdXJyZW50U25hcHNob3Qud2hpdGVLaW5nTW92ZWQgJiYgTWF0aC5hYnModG9Qb3MuY29sIC0gZnJvbVBvcy5jb2wpID09IDIpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGllY2UgPT0gJ+KZmicgJiYgIWN1cnJlbnRTbmFwc2hvdC5ibGFja0tpbmdNb3ZlZCAmJiBNYXRoLmFicyh0b1Bvcy5jb2wgLSBmcm9tUG9zLmNvbCkgPT0gMikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0sXG5cdGlzTGVmdFdoaXRlUm9vazoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc0xlZnRXaGl0ZVJvb2tfX19uNChwaWVjZSwgcG9zKSB7XG5cdFx0XHRyZXR1cm4gKHBpZWNlID09ICfimZYnKSAmJiAocG9zLnJvdyA9PSAwKSAmJiAocG9zLmNvbCA9PSAwKTtcblx0XHR9XG5cdH0sXG5cdGlzV2hpdGVwaWVjZToge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc1doaXRlcGllY2VfX19uNChwaWVjZSkge1xuXHRcdFx0c3dpdGNoKHBpZWNlKSB7XG5cdFx0XHRcdGNhc2UgJ+KZmSc6XG5cdFx0XHRcdGNhc2UgJ+KZlic6XG5cdFx0XHRcdGNhc2UgJ+KZmCc6XG5cdFx0XHRcdGNhc2UgJ+KZlyc6XG5cdFx0XHRcdGNhc2UgJ+KZlSc6XG5cdFx0XHRcdGNhc2UgJ+KZlCc6XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aXNCbGFja3BpZWNlOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGlzQmxhY2twaWVjZV9fX240KHBpZWNlKSB7XG5cdFx0XHRzd2l0Y2gocGllY2UpIHtcblx0XHRcdFx0Y2FzZSAn4pmfJzpcblx0XHRcdFx0Y2FzZSAn4pmcJzpcblx0XHRcdFx0Y2FzZSAn4pmeJzpcblx0XHRcdFx0Y2FzZSAn4pmdJzpcblx0XHRcdFx0Y2FzZSAn4pmbJzpcblx0XHRcdFx0Y2FzZSAn4pmaJzpcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRyZW5kZXI6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyX19fbjQoKSB7XG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gdGhpcy5zdGF0ZS5oaXN0b3J5O1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IGhpc3RvcnlbdGhpcy5zdGF0ZS5zdGVwTnVtYmVyXTtcblx0XHRcdGNvbnN0IHdpbm5lciA9IHRoaXMuY2FsY3VsYXRlV2lubmVyKGN1cnJlbnQuc3F1YXJlcyk7XG5cdFx0XHRjb25zdCBtb3ZlcyA9IGhpc3RvcnkubWFwKChzbmFwc2hvdCwgc3RlcCk9Pntcblx0XHRcdFx0Y29uc3QgYWN0aW9uTGFiZWwgPSBzdGVwID8gJ0dvIHRvIG1vdmUgIycgKyBzdGVwIDogJ0dvIHRvIGdhbWUgc3RhcnQnO1xuXHRcdFx0XHRjb25zdCB0YWJsZUNlbGxTdHlsZXMgPSB7XG5cdFx0XHRcdFx0dGV4dEFsaWduOiAnY2VudGVyJyxcblx0XHRcdFx0XHR2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcblx0XHRcdFx0XHRwYWRkaW5nOiAnNXB4Jyxcblx0XHRcdFx0XHRwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBhY3Rpb25CdXR0b25TdHlsZXMgPSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiAnZ3JlZW4nLFxuXHRcdFx0XHRcdGJvcmRlcjogJ25vbmUnLFxuXHRcdFx0XHRcdGNvbG9yOiAnd2hpdGUnLFxuXHRcdFx0XHRcdHBhZGRpbmc6ICc0cHgnLFxuXHRcdFx0XHRcdHRleHRBbGlnbjogJ2NlbnRlcicsXG5cdFx0XHRcdFx0dGV4dERlY29yYXRpb246ICdub25lJyxcblx0XHRcdFx0XHRkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3RyJywgbnVsbCwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGQnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogdGFibGVDZWxsU3R5bGVzXG5cdFx0XHRcdH0pLCBzdGVwKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGQnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogdGFibGVDZWxsU3R5bGVzXG5cdFx0XHRcdH0pLCBzbmFwc2hvdC5sYXN0TW92ZXMuam9pbignLCcpKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGQnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogdGFibGVDZWxsU3R5bGVzXG5cdFx0XHRcdH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KCdidXR0b24nLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogYWN0aW9uQnV0dG9uU3R5bGVzLFxuXHRcdFx0XHRcdG9uQ2xpY2s6ICgpPT50aGlzLmdvVG9TdGVwKHN0ZXApXG5cdFx0XHRcdH0pLCBhY3Rpb25MYWJlbCkpKSkpO1xuXHRcdFx0fSk7XG5cdFx0XHRsZXQgc3RhdHVzO1xuXHRcdFx0aWYgKHdpbm5lcikge1xuXHRcdFx0XHRzdGF0dXMgPSBcIldpbm5lcjogXCIgKyB3aW5uZXI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0dXMgPSBcIk5leHQgcGxheWVyOiBcIiArICh0aGlzLnN0YXRlLndoaXRlSXNOZXh0ID8gXCJXaGl0ZVwiIDogXCJCbGFja1wiKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHRhYmxlU3R5bGVzID0ge1xuXHRcdFx0XHR3aWR0aDogJzEwMCUnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RlcFN0eWxlcyA9IHtcblx0XHRcdFx0d2lkdGg6ICcxMCUnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgbW92ZVN0eWxlcyA9IHtcblx0XHRcdFx0d2lkdGg6ICc0NSUnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgYWN0aW9uU3R5bGVzID0ge1xuXHRcdFx0XHR3aWR0aDogJzQ1JSdcblx0XHRcdH07XG5cdFx0XHRjb25zdCBnYW1lU3R5bGVzID0ge1xuXHRcdFx0XHRkaXNwbGF5OiAnZmxleCcsXG5cdFx0XHRcdGZsZXhEaXJlY3Rpb246ICdyb3cnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZ2FtZUluZm9TdHlsZXMgPSB7XG5cdFx0XHRcdG1hcmdpblRvcDogJzIwcHgnLFxuXHRcdFx0XHRtYXJnaW5MZWZ0OiAnMjBweCcsXG5cdFx0XHRcdHdpZHRoOiAnNDB2dycsXG5cdFx0XHRcdGZvbnRTaXplOiAnMS41dncnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZ2FtZWJvYXJkU3R5bGVzID0ge1xuXHRcdFx0XHR3aWR0aDogJzYwdncnLFxuXHRcdFx0XHRoZWlnaHQ6ICc2MHZ3J1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBnYW1lU3R5bGVzXG5cdFx0XHR9KSwgUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBnYW1lYm9hcmRTdHlsZXNcblx0XHRcdH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KEJvYXJkLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3F1YXJlczogY3VycmVudC5zcXVhcmVzLFxuXHRcdFx0XHRwaWNrZWRTcXVhcmU6IHRoaXMuc3RhdGUucGlja2VkU3F1YXJlLFxuXHRcdFx0XHR2YWxpZERlc3RpbmF0aW9uczogdGhpcy5zdGF0ZS52YWxpZERlc3RpbmF0aW9ucyxcblx0XHRcdFx0b25DbGljazogKHBvcyk9PnRoaXMuaGFuZGxlQ2xpY2socG9zKVxuXHRcdFx0fSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBnYW1lSW5mb1N0eWxlc1xuXHRcdFx0fSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIG51bGwsIHN0YXR1cyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3AnLCBudWxsKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGFibGUnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3R5bGU6IHRhYmxlU3R5bGVzXG5cdFx0XHR9KSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndHInLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KCd0aCcsIE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0XHRzdHlsZTogc3RlcFN0eWxlc1xuXHRcdFx0fSksIFwiU3RlcFwiKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGgnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3R5bGU6IG1vdmVTdHlsZXNcblx0XHRcdH0pLCBcIk1vdmVcIiksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3RoJywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBhY3Rpb25TdHlsZXNcblx0XHRcdH0pLCBcIkFjdGlvblwiKSksIG1vdmVzKSkpKTtcblx0XHR9XG5cdH1cbn0sIHt9LCBmdW5jdGlvbihpbnN0YW5jZVByb3RvLCBzdGF0aWNQcm90bykge1xuXHR2YXIgbWV0YUNsYXNzID0gbmV3IE40Q2xhc3Moe1xuXHRcdG5hbWU6ICdHYW1lJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy9HYW1lL0dhbWUnLFxuXHRcdG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjb25zdHJ1Y3RvcicsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY29uc3RydWN0b3InXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdoYW5kbGVDbGljaycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snaGFuZGxlQ2xpY2snXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdnb1RvU3RlcCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snZ29Ub1N0ZXAnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdnZXRBbGxQaWVjZXNTYW1lQ29sb3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2dldEFsbFBpZWNlc1NhbWVDb2xvciddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2ZvckFsbCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snZm9yQWxsJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlV2lubmVyJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVXaW5uZXInXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVWYWxpZERlc3RpbmF0aW9ucycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1ZhbGlkTW92ZScsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snaXNWYWxpZE1vdmUnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc0luc2lkZUJvYXJkJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc0luc2lkZUJvYXJkJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlS25pZ2h0QXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVLbmlnaHRBdHRhY2tpbmdEZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVSb29rQXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVSb29rQXR0YWNraW5nRGVzdGluYXRpb25zJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlQmlzaG9wQXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVCaXNob3BBdHRhY2tpbmdEZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVRdWVlbkF0dGFja2luZ0Rlc3RpbmF0aW9ucycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY2FsY3VsYXRlUXVlZW5BdHRhY2tpbmdEZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVLaW5nQXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVLaW5nQXR0YWNraW5nRGVzdGluYXRpb25zJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlUGF3bkF0dGFja2luZ0Rlc3RpbmF0aW9ucycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY2FsY3VsYXRlUGF3bkF0dGFja2luZ0Rlc3RpbmF0aW9ucyddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2NhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVBdHRhY2tlZERlc3RpbmF0aW9ucyddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2lzS2luZ0luQ2hlY2tJZk1vdmUnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzS2luZ0luQ2hlY2tJZk1vdmUnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc0tpbmdJbkNoZWNrJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc0tpbmdJbkNoZWNrJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0UGllY2VzT2ZTYW1lQ29sb3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2dldFBpZWNlc09mU2FtZUNvbG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0S2luZ1Bvc2l0aW9uJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydnZXRLaW5nUG9zaXRpb24nXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzUG9zaXRpb25PY2N1cGllZEJ5cGllY2VPdGhlckNvbG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0Q3VycmVudFNuYXBzaG90Jyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydnZXRDdXJyZW50U25hcHNob3QnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdtb3ZlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydtb3ZlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnaXNDYXN0bGluZ01vdmUnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzQ2FzdGxpbmdNb3ZlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnaXNMZWZ0V2hpdGVSb29rJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc0xlZnRXaGl0ZVJvb2snXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1doaXRlcGllY2UnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzV2hpdGVwaWVjZSddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2lzQmxhY2twaWVjZScsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snaXNCbGFja3BpZWNlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAncmVuZGVyJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydyZW5kZXInXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KVxuXHRcdF0sXG5cdFx0Y29uc3VtZWRNZW1iZXJzOiBbXSxcblx0XHRhbm5vdGF0aW9uczogW11cblx0fSk7XG5cdHJldHVybiBtZXRhQ2xhc3M7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUdhbWUubWFwXG4iLCIvLyBHZW5lcmF0ZWQgYnkgTjRKUyB0cmFuc3BpbGVyOyBmb3IgY29weXJpZ2h0IHNlZSBvcmlnaW5hbCBONEpTIHNvdXJjZSBmaWxlLlxuXG5pbXBvcnQgJ240anMtcnVudGltZSdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0L2luZGV4J1xuaW1wb3J0IEdhbWUgZnJvbSAnLi9jb21wb25lbnRzL0dhbWUnXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5cblJlYWN0RE9NLnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KEdhbWUsIG51bGwpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNoZXNzQXBwTW91bnRQb2ludFwiKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWluLm1hcFxuIl0sInNvdXJjZVJvb3QiOiIifQ==
\ No newline at end of file
diff --git a/userguides/n4js-tutorial-chess/images/redux-architecture.png b/userguides/n4js-tutorial-chess/images/redux-architecture.png
index 200270d..d2c1ba3 100644
--- a/userguides/n4js-tutorial-chess/images/redux-architecture.png
+++ b/userguides/n4js-tutorial-chess/images/redux-architecture.png
Binary files differ
diff --git a/userguides/n4js-tutorial-chess/n4js-tutorial-chess-redux.html b/userguides/n4js-tutorial-chess/n4js-tutorial-chess-redux.html
index 1d37b7d..f4eedbf 100644
--- a/userguides/n4js-tutorial-chess/n4js-tutorial-chess-redux.html
+++ b/userguides/n4js-tutorial-chess/n4js-tutorial-chess-redux.html
@@ -52,6 +52,7 @@
<li><a href="#_connect_react_to_redux">Connect React to Redux</a></li>
<li><a href="#_store_chess_game_state_in_redux_store">Store Chess Game State in Redux Store</a></li>
<li><a href="#_test_game_rules_with_mangelhaft">Test Game Rules with Mangelhaft</a></li>
+<li><a href="#_run_the_test">Run the test</a></li>
</ul>
</div>
</div>
@@ -285,6 +286,24 @@
</div>
</div>
</div>
+<div class="sect1">
+<h2 id="_run_the_test">Run the test</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>You can execute the test cases either on the command line or in the N4JS Eclipse IDE.
+On the command line, run the tests by the defined npm script:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">npm run test</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To run the tests in the IDE, open the test file and right-click somewhere in its editor.
+In the context menu select "Run as" → "Test in Node.js".</p>
+</div>
+</div>
+</div>
</div>
<div id="footer">
<div id="footer-text">
diff --git a/userguides/n4js-tutorial-chess/n4js-tutorial-chess.html b/userguides/n4js-tutorial-chess/n4js-tutorial-chess.html
index ae8c64d..5b0a6a3 100644
--- a/userguides/n4js-tutorial-chess/n4js-tutorial-chess.html
+++ b/userguides/n4js-tutorial-chess/n4js-tutorial-chess.html
@@ -48,7 +48,12 @@
<ul class="sectlevel1">
<li><a href="#_overview">Overview</a></li>
<li><a href="#_repository">Repository</a></li>
-<li><a href="#_developer_setup_and_generate_folder_src_gen">Developer Setup and generate folder <code>src-gen</code></a></li>
+<li><a href="#_developer_setup_and_generate_folder_src_gen">Developer Setup and generate folder <code>src-gen</code></a>
+<ul class="sectlevel2">
+<li><a href="#_use_command_line_only">Use command line only</a></li>
+<li><a href="#_use_n4js_eclipse_ide">Use N4JS Eclipse IDE</a></li>
+</ul>
+</li>
<li><a href="#_create_the_application">Create the application</a></li>
<li><a href="#_start_local_web_server">Start local web server</a></li>
<li><a href="#_n4js_type_definitions_of_react">N4JS type definitions of React</a></li>
@@ -109,8 +114,23 @@
<h2 id="_developer_setup_and_generate_folder_src_gen">Developer Setup and generate folder <code>src-gen</code></h2>
<div class="sectionbody">
<div class="paragraph">
-<p>Follow the following steps to import the app into N4JS IDE.</p>
+<p>There are two alternatives for the developer setup and the generation of the <code>src-gen</code> folder:
+to use either the N4JS Eclipse IDE or use the command line only.</p>
</div>
+<div class="sect2">
+<h3 id="_use_command_line_only">Use command line only</h3>
+<div class="paragraph">
+<p>Open the project folder in a shell and execute the following commands:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">npm install # download node_modules
+npm run build # generate js files in folder src-gen</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_use_n4js_eclipse_ide">Use N4JS Eclipse IDE</h3>
<div class="dlist">
<dl>
<dt class="hdlist1">Step 1</dt>
@@ -123,14 +143,6 @@
Hence, you can simply import it into the N4JS IDE workspace via <code>File ⇒ Import ⇒ Existing Projects into Workspace</code>.
The IDE may complain that npm dependencies declared in <code>package.json</code> are missing.
Use the quickfix <code>run npm/yarn in this project</code> to fix this issue.</p>
-<div class="paragraph">
-<p>Alternativily, the following command can be executed in the root folder of the project <code>chess-react</code> to install all dependencies:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlight"><code class="language-bash" data-lang="bash">npm install</code></pre>
-</div>
-</div>
</dd>
<dt class="hdlist1">Step 3</dt>
<dd>
@@ -139,25 +151,26 @@
<dt class="hdlist1">Step 4</dt>
<dd>
<p>Clean & Build the project. After this step, the project has no compilation errors anymore.</p>
-</dd>
-</dl>
-</div>
<div class="paragraph">
<p>Now, the folder <code>src-gen</code> should have been created and populated with <code>.js</code> files of the project.
The <code>.js</code> files will be used in the next step by webpack.</p>
</div>
+</dd>
+</dl>
+</div>
+</div>
</div>
</div>
<div class="sect1">
<h2 id="_create_the_application">Create the application</h2>
<div class="sectionbody">
<div class="paragraph">
-<p>The <code>package.json</code> defines a script <code>build</code> to run webpack and create the application <code>chess-app.js</code>.
+<p>The <code>package.json</code> defines a script <code>webpack</code> to create the application <code>chess-app.js</code>.
Run it with:</p>
</div>
<div class="listingblock">
<div class="content">
-<pre class="highlight"><code class="language-bash" data-lang="bash">npm build</code></pre>
+<pre class="highlight"><code class="language-bash" data-lang="bash">npm run webpack</code></pre>
</div>
</div>
</div>